CellAreaProtocol
public protocol CellAreaProtocol : InitiallyUnownedProtocol, BuildableProtocol, CellLayoutProtocol
The GtkCellArea
is an abstract class for GtkCellLayout
widgets
(also referred to as “layouting widgets”) to interface with an
arbitrary number of GtkCellRenderers
and interact with the user
for a given GtkTreeModel
row.
The cell area handles events, focus navigation, drawing and size requests and allocations for a given row of data.
Usually users dont have to interact with the GtkCellArea
directly
unless they are implementing a cell-layouting widget themselves.
Requesting area sizes
As outlined in
GtkWidget’s geometry management section,
GTK+ uses a height-for-width
geometry management system to compute the sizes of widgets and user
interfaces. GtkCellArea
uses the same semantics to calculate the
size of an area for an arbitrary number of GtkTreeModel
rows.
When requesting the size of a cell area one needs to calculate
the size for a handful of rows, and this will be done differently by
different layouting widgets. For instance a GtkTreeViewColumn
always lines up the areas from top to bottom while a GtkIconView
on the other hand might enforce that all areas received the same
width and wrap the areas around, requesting height for more cell
areas when allocated less width.
It’s also important for areas to maintain some cell
alignments with areas rendered for adjacent rows (cells can
appear “columnized” inside an area even when the size of
cells are different in each row). For this reason the GtkCellArea
uses a GtkCellAreaContext
object to store the alignments
and sizes along the way (as well as the overall largest minimum
and natural size for all the rows which have been calculated
with the said context).
The GtkCellAreaContext
is an opaque object specific to the
GtkCellArea
which created it (see gtk_cell_area_create_context()
).
The owning cell-layouting widget can create as many contexts as
it wishes to calculate sizes of rows which should receive the
same size in at least one orientation (horizontally or vertically),
However, it’s important that the same GtkCellAreaContext
which
was used to request the sizes for a given GtkTreeModel
row be
used when rendering or processing events for that row.
In order to request the width of all the rows at the root level
of a GtkTreeModel
one would do the following:
(C Language Example):
GtkTreeIter iter;
gint minimum_width;
gint natural_width;
valid = gtk_tree_model_get_iter_first (model, &iter);
while (valid)
{
gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
gtk_cell_area_get_preferred_width (area, context, widget, NULL, NULL);
valid = gtk_tree_model_iter_next (model, &iter);
}
gtk_cell_area_context_get_preferred_width (context, &minimum_width, &natural_width);
Note that in this example it’s not important to observe the
returned minimum and natural width of the area for each row
unless the cell-layouting object is actually interested in the
widths of individual rows. The overall width is however stored
in the accompanying GtkCellAreaContext
object and can be consulted
at any time.
This can be useful since GtkCellLayout
widgets usually have to
support requesting and rendering rows in treemodels with an
exceedingly large amount of rows. The GtkCellLayout
widget in
that case would calculate the required width of the rows in an
idle or timeout source (see g_timeout_add()
) and when the widget
is requested its actual width in GtkWidgetClass.get_preferred_width
()
it can simply consult the width accumulated so far in the
GtkCellAreaContext
object.
A simple example where rows are rendered from top to bottom and take up the full width of the layouting widget would look like:
(C Language Example):
static void
foo_get_preferred_width (GtkWidget *widget,
gint *minimum_size,
gint *natural_size)
{
Foo *foo = FOO (widget);
FooPrivate *priv = foo->priv;
foo_ensure_at_least_one_handfull_of_rows_have_been_requested (foo);
gtk_cell_area_context_get_preferred_width (priv->context, minimum_size, natural_size);
}
In the above example the Foo widget has to make sure that some
row sizes have been calculated (the amount of rows that Foo judged
was appropriate to request space for in a single timeout iteration)
before simply returning the amount of space required by the area via
the GtkCellAreaContext
.
Requesting the height for width (or width for height) of an area is
a similar task except in this case the GtkCellAreaContext
does not
store the data (actually, it does not know how much space the layouting
widget plans to allocate it for every row. It’s up to the layouting
widget to render each row of data with the appropriate height and
width which was requested by the GtkCellArea
).
In order to request the height for width of all the rows at the
root level of a GtkTreeModel
one would do the following:
(C Language Example):
GtkTreeIter iter;
gint minimum_height;
gint natural_height;
gint full_minimum_height = 0;
gint full_natural_height = 0;
valid = gtk_tree_model_get_iter_first (model, &iter);
while (valid)
{
gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
gtk_cell_area_get_preferred_height_for_width (area, context, widget,
width, &minimum_height, &natural_height);
if (width_is_for_allocation)
cache_row_height (&iter, minimum_height, natural_height);
full_minimum_height += minimum_height;
full_natural_height += natural_height;
valid = gtk_tree_model_iter_next (model, &iter);
}
Note that in the above example we would need to cache the heights returned for each row so that we would know what sizes to render the areas for each row. However we would only want to really cache the heights if the request is intended for the layouting widgets real allocation.
In some cases the layouting widget is requested the height for an
arbitrary for_width, this is a special case for layouting widgets
who need to request size for tens of thousands of rows. For this
case it’s only important that the layouting widget calculate
one reasonably sized chunk of rows and return that height
synchronously. The reasoning here is that any layouting widget is
at least capable of synchronously calculating enough height to fill
the screen height (or scrolled window height) in response to a single
call to GtkWidgetClass.get_preferred_height_for_width
()
. Returning
a perfect height for width that is larger than the screen area is
inconsequential since after the layouting receives an allocation
from a scrolled window it simply continues to drive the scrollbar
values while more and more height is required for the row heights
that are calculated in the background.
Rendering Areas
Once area sizes have been aquired at least for the rows in the
visible area of the layouting widget they can be rendered at
GtkWidgetClass.draw
()
time.
A crude example of how to render all the rows at the root level runs as follows:
(C Language Example):
GtkAllocation allocation;
GdkRectangle cell_area = { 0, };
GtkTreeIter iter;
gint minimum_width;
gint natural_width;
gtk_widget_get_allocation (widget, &allocation);
cell_area.width = allocation.width;
valid = gtk_tree_model_get_iter_first (model, &iter);
while (valid)
{
cell_area.height = get_cached_height_for_row (&iter);
gtk_cell_area_apply_attributes (area, model, &iter, FALSE, FALSE);
gtk_cell_area_render (area, context, widget, cr,
&cell_area, &cell_area, state_flags, FALSE);
cell_area.y += cell_area.height;
valid = gtk_tree_model_iter_next (model, &iter);
}
Note that the cached height in this example really depends on how
the layouting widget works. The layouting widget might decide to
give every row its minimum or natural height or, if the model content
is expected to fit inside the layouting widget without scrolling, it
would make sense to calculate the allocation for each row at
GtkWidget::size-allocate
time using gtk_distribute_natural_allocation()
.
Handling Events and Driving Keyboard Focus
Passing events to the area is as simple as handling events on any
normal widget and then passing them to the gtk_cell_area_event()
API as they come in. Usually GtkCellArea
is only interested in
button events, however some customized derived areas can be implemented
who are interested in handling other events. Handling an event can
trigger the GtkCellArea::focus-changed
signal to fire; as well as
GtkCellArea::add-editable
in the case that an editable cell was
clicked and needs to start editing. You can call
gtk_cell_area_stop_editing()
at any time to cancel any cell editing
that is currently in progress.
The GtkCellArea
drives keyboard focus from cell to cell in a way
similar to GtkWidget
. For layouting widgets that support giving
focus to cells it’s important to remember to pass GTK_CELL_RENDERER_FOCUSED
to the area functions for the row that has focus and to tell the
area to paint the focus at render time.
Layouting widgets that accept focus on cells should implement the
GtkWidgetClass.focus
()
virtual method. The layouting widget is always
responsible for knowing where GtkTreeModel
rows are rendered inside
the widget, so at GtkWidgetClass.focus
()
time the layouting widget
should use the GtkCellArea
methods to navigate focus inside the area
and then observe the GtkDirectionType to pass the focus to adjacent
rows and areas.
A basic example of how the GtkWidgetClass.focus
()
virtual method
should be implemented:
(C Language Example):
static gboolean
foo_focus (GtkWidget *widget,
GtkDirectionType direction)
{
Foo *foo = FOO (widget);
FooPrivate *priv = foo->priv;
gint focus_row;
gboolean have_focus = FALSE;
focus_row = priv->focus_row;
if (!gtk_widget_has_focus (widget))
gtk_widget_grab_focus (widget);
valid = gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, priv->focus_row);
while (valid)
{
gtk_cell_area_apply_attributes (priv->area, priv->model, &iter, FALSE, FALSE);
if (gtk_cell_area_focus (priv->area, direction))
{
priv->focus_row = focus_row;
have_focus = TRUE;
break;
}
else
{
if (direction == GTK_DIR_RIGHT ||
direction == GTK_DIR_LEFT)
break;
else if (direction == GTK_DIR_UP ||
direction == GTK_DIR_TAB_BACKWARD)
{
if (focus_row == 0)
break;
else
{
focus_row--;
valid = gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, focus_row);
}
}
else
{
if (focus_row == last_row)
break;
else
{
focus_row++;
valid = gtk_tree_model_iter_next (priv->model, &iter);
}
}
}
}
return have_focus;
}
Note that the layouting widget is responsible for matching the GtkDirectionType values to the way it lays out its cells.
Cell Properties
The GtkCellArea
introduces cell properties for GtkCellRenderers
in very much the same way that GtkContainer
introduces
child properties
for GtkWidgets
. This provides some general interfaces for defining
the relationship cell areas have with their cells. For instance in a
GtkCellAreaBox
a cell might “expand” and receive extra space when
the area is allocated more than its full natural request, or a cell
might be configured to “align” with adjacent rows which were requested
and rendered with the same GtkCellAreaContext
.
Use gtk_cell_area_class_install_cell_property()
to install cell
properties for a cell area class and gtk_cell_area_class_find_cell_property()
or gtk_cell_area_class_list_cell_properties()
to get information about
existing cell properties.
To set the value of a cell property, use gtk_cell_area_cell_set_property()
,
gtk_cell_area_cell_set()
or gtk_cell_area_cell_set_valist()
. To obtain
the value of a cell property, use gtk_cell_area_cell_get_property()
,
gtk_cell_area_cell_get()
or gtk_cell_area_cell_get_valist()
.
The CellAreaProtocol
protocol exposes the methods and properties of an underlying GtkCellArea
instance.
The default implementation of these can be found in the protocol extension below.
For a concrete class that implements these methods and properties, see CellArea
.
Alternatively, use CellAreaRef
as a lighweight, unowned
reference if you already have an instance you just want to use.
-
Untyped pointer to the underlying
GtkCellArea
instance.Declaration
Swift
var ptr: UnsafeMutableRawPointer! { get }
-
cell_area_ptr
Default implementationTyped pointer to the underlying
GtkCellArea
instance.Default Implementation
Return the stored, untyped pointer as a typed pointer to the
GtkCellArea
instance.Declaration
Swift
var cell_area_ptr: UnsafeMutablePointer<GtkCellArea>! { get }
-
Required Initialiser for types conforming to
CellAreaProtocol
Declaration
Swift
init(raw: UnsafeMutableRawPointer)
-
bind(property:
Extension methodto: _: flags: transformFrom: transformTo: ) Bind a
CellAreaPropertyName
source property to a given target object.Declaration
Swift
@discardableResult @inlinable func bind<Q, T>(property source_property: CellAreaPropertyName, to target: T, _ target_property: Q, flags f: BindingFlags = .default, transformFrom transform_from: @escaping GLibObject.ValueTransformer = { $0.transform(destValue: $1) }, transformTo transform_to: @escaping GLibObject.ValueTransformer = { $0.transform(destValue: $1) }) -> BindingRef! where Q : PropertyNameProtocol, T : ObjectProtocol
Parameters
source_property
the source property to bind
target
the target object to bind to
target_property
the target property to bind to
flags
the flags to pass to the
Binding
transform_from
ValueTransformer
to use for forward transformationtransform_to
ValueTransformer
to use for backwards transformationReturn Value
binding reference or
nil
in case of an error -
get(property:
Extension method) Get the value of a CellArea property
Declaration
Swift
@inlinable func get(property: CellAreaPropertyName) -> GLibObject.Value
Parameters
property
the property to get the value for
Return Value
the value of the named property
-
set(property:
Extension methodvalue: ) Set the value of a CellArea property. Note that this will only have an effect on properties that are writable and not construct-only!
Declaration
Swift
@inlinable func set(property: CellAreaPropertyName, value v: GLibObject.Value)
Parameters
property
the property to get the value for
Return Value
the value of the named property
-
connect(signal:
Extension methodflags: handler: ) Connect a Swift signal handler to the given, typed
CellAreaSignalName
signalDeclaration
Swift
@discardableResult @inlinable func connect(signal s: CellAreaSignalName, flags f: ConnectFlags = ConnectFlags(0), handler h: @escaping SignalHandler) -> Int
Parameters
signal
The signal to connect
flags
The connection flags to use
data
A pointer to user data to provide to the callback
destroyData
A
GClosureNotify
C function to destroy the data pointed to byuserData
handler
The Swift signal handler (function or callback) to invoke on the given signal
Return Value
The signal handler ID (always greater than 0 for successful connections)
-
connect(signal:
Extension methodflags: data: destroyData: signalHandler: ) Connect a C signal handler to the given, typed
CellAreaSignalName
signalDeclaration
Swift
@discardableResult @inlinable func connect(signal s: CellAreaSignalName, flags f: ConnectFlags = ConnectFlags(0), data userData: gpointer!, destroyData destructor: GClosureNotify? = nil, signalHandler h: @escaping GCallback) -> Int
Parameters
signal
The signal to connect
flags
The connection flags to use
data
A pointer to user data to provide to the callback
destroyData
A
GClosureNotify
C function to destroy the data pointed to byuserData
signalHandler
The C function to be called on the given signal
Return Value
The signal handler ID (always greater than 0 for successful connections)
-
onAddEditable(flags:
Extension methodhandler: ) Indicates that editing has started on
renderer
and thateditable
should be added to the owning cell-layouting widget atcell_area
.Note
This represents the underlyingadd-editable
signalDeclaration
Swift
@discardableResult @inlinable func onAddEditable(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: CellAreaRef, _ renderer: CellRendererRef, _ editable: CellEditableRef, _ cellArea: Gdk.RectangleRef, _ path: String) -> Void) -> Int
Parameters
flags
Flags
unownedSelf
Reference to instance of self
renderer
the
GtkCellRenderer
that started the editededitable
the
GtkCellEditable
widget to addcellArea
the
GtkWidget
relativeGdkRectangle
coordinates whereeditable
should be addedpath
the
GtkTreePath
string this edit was initiated forhandler
The signal handler to call Run the given callback whenever the
addEditable
signal is emitted -
addEditableSignal
Extension methodTyped
add-editable
signal for using theconnect(signal:)
methodsDeclaration
Swift
static var addEditableSignal: CellAreaSignalName { get }
-
onApplyAttributes(flags:
Extension methodhandler: ) This signal is emitted whenever applying attributes to
area
frommodel
Note
This represents the underlyingapply-attributes
signalDeclaration
Swift
@discardableResult @inlinable func onApplyAttributes(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: CellAreaRef, _ model: TreeModelRef, _ iter: TreeIterRef, _ isExpander: Bool, _ isExpanded: Bool) -> Void) -> Int
Parameters
flags
Flags
unownedSelf
Reference to instance of self
model
the
GtkTreeModel
to apply the attributes fromiter
the
GtkTreeIter
indicating which row to apply the attributes ofisExpander
whether the view shows children for this row
isExpanded
whether the view is currently showing the children of this row
handler
The signal handler to call Run the given callback whenever the
applyAttributes
signal is emitted -
applyAttributesSignal
Extension methodTyped
apply-attributes
signal for using theconnect(signal:)
methodsDeclaration
Swift
static var applyAttributesSignal: CellAreaSignalName { get }
-
onFocusChanged(flags:
Extension methodhandler: ) Indicates that focus changed on this
area
. This signal is emitted either as a result of focus handling or event handling.It’s possible that the signal is emitted even if the currently focused renderer did not change, this is because focus may change to the same renderer in the same cell area for a different row of data.
Note
This represents the underlyingfocus-changed
signalDeclaration
Swift
@discardableResult @inlinable func onFocusChanged(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: CellAreaRef, _ renderer: CellRendererRef, _ path: String) -> Void) -> Int
Parameters
flags
Flags
unownedSelf
Reference to instance of self
renderer
the
GtkCellRenderer
that has focuspath
the current
GtkTreePath
string set forarea
handler
The signal handler to call Run the given callback whenever the
focusChanged
signal is emitted -
focusChangedSignal
Extension methodTyped
focus-changed
signal for using theconnect(signal:)
methodsDeclaration
Swift
static var focusChangedSignal: CellAreaSignalName { get }
-
onRemoveEditable(flags:
Extension methodhandler: ) Indicates that editing finished on
renderer
and thateditable
should be removed from the owning cell-layouting widget.Note
This represents the underlyingremove-editable
signalDeclaration
Swift
@discardableResult @inlinable func onRemoveEditable(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: CellAreaRef, _ renderer: CellRendererRef, _ editable: CellEditableRef) -> Void) -> Int
Parameters
flags
Flags
unownedSelf
Reference to instance of self
renderer
the
GtkCellRenderer
that finished editedingeditable
the
GtkCellEditable
widget to removehandler
The signal handler to call Run the given callback whenever the
removeEditable
signal is emitted -
removeEditableSignal
Extension methodTyped
remove-editable
signal for using theconnect(signal:)
methodsDeclaration
Swift
static var removeEditableSignal: CellAreaSignalName { get }
-
onNotifyEditWidget(flags:
Extension methodhandler: ) The notify signal is emitted on an object when one of its properties has its value set through
g_object_set_property()
,g_object_set()
, et al.Note that getting this signal doesn’t itself guarantee that the value of the property has actually changed. When it is emitted is determined by the derived GObject class. If the implementor did not create the property with
G_PARAM_EXPLICIT_NOTIFY
, then any call tog_object_set_property()
results innotify
being emitted, even if the new value is the same as the old. If they did passG_PARAM_EXPLICIT_NOTIFY
, then this signal is emitted only when they explicitly callg_object_notify()
org_object_notify_by_pspec()
, and common practice is to do that only when the value has actually changed.This signal is typically used to obtain change notification for a single property, by specifying the property name as a detail in the
g_signal_connect()
call, like this:(C Language Example):
g_signal_connect (text_view->buffer, "notify::paste-target-list", G_CALLBACK (gtk_text_view_target_list_notify), text_view)
It is important to note that you must use canonical parameter names as detail strings for the notify signal.
Note
This represents the underlyingnotify::edit-widget
signalDeclaration
Swift
@discardableResult @inlinable func onNotifyEditWidget(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: CellAreaRef, _ pspec: ParamSpecRef) -> Void) -> Int
Parameters
flags
Flags
unownedSelf
Reference to instance of self
pspec
the
GParamSpec
of the property which changed.handler
The signal handler to call Run the given callback whenever the
notifyEditWidget
signal is emitted -
notifyEditWidgetSignal
Extension methodTyped
notify::edit-widget
signal for using theconnect(signal:)
methodsDeclaration
Swift
static var notifyEditWidgetSignal: CellAreaSignalName { get }
-
onNotifyEditedCell(flags:
Extension methodhandler: ) The notify signal is emitted on an object when one of its properties has its value set through
g_object_set_property()
,g_object_set()
, et al.Note that getting this signal doesn’t itself guarantee that the value of the property has actually changed. When it is emitted is determined by the derived GObject class. If the implementor did not create the property with
G_PARAM_EXPLICIT_NOTIFY
, then any call tog_object_set_property()
results innotify
being emitted, even if the new value is the same as the old. If they did passG_PARAM_EXPLICIT_NOTIFY
, then this signal is emitted only when they explicitly callg_object_notify()
org_object_notify_by_pspec()
, and common practice is to do that only when the value has actually changed.This signal is typically used to obtain change notification for a single property, by specifying the property name as a detail in the
g_signal_connect()
call, like this:(C Language Example):
g_signal_connect (text_view->buffer, "notify::paste-target-list", G_CALLBACK (gtk_text_view_target_list_notify), text_view)
It is important to note that you must use canonical parameter names as detail strings for the notify signal.
Note
This represents the underlyingnotify::edited-cell
signalDeclaration
Swift
@discardableResult @inlinable func onNotifyEditedCell(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: CellAreaRef, _ pspec: ParamSpecRef) -> Void) -> Int
Parameters
flags
Flags
unownedSelf
Reference to instance of self
pspec
the
GParamSpec
of the property which changed.handler
The signal handler to call Run the given callback whenever the
notifyEditedCell
signal is emitted -
notifyEditedCellSignal
Extension methodTyped
notify::edited-cell
signal for using theconnect(signal:)
methodsDeclaration
Swift
static var notifyEditedCellSignal: CellAreaSignalName { get }
-
onNotifyFocusCell(flags:
Extension methodhandler: ) The notify signal is emitted on an object when one of its properties has its value set through
g_object_set_property()
,g_object_set()
, et al.Note that getting this signal doesn’t itself guarantee that the value of the property has actually changed. When it is emitted is determined by the derived GObject class. If the implementor did not create the property with
G_PARAM_EXPLICIT_NOTIFY
, then any call tog_object_set_property()
results innotify
being emitted, even if the new value is the same as the old. If they did passG_PARAM_EXPLICIT_NOTIFY
, then this signal is emitted only when they explicitly callg_object_notify()
org_object_notify_by_pspec()
, and common practice is to do that only when the value has actually changed.This signal is typically used to obtain change notification for a single property, by specifying the property name as a detail in the
g_signal_connect()
call, like this:(C Language Example):
g_signal_connect (text_view->buffer, "notify::paste-target-list", G_CALLBACK (gtk_text_view_target_list_notify), text_view)
It is important to note that you must use canonical parameter names as detail strings for the notify signal.
Note
This represents the underlyingnotify::focus-cell
signalDeclaration
Swift
@discardableResult @inlinable func onNotifyFocusCell(flags: ConnectFlags = ConnectFlags(0), handler: @escaping (_ unownedSelf: CellAreaRef, _ pspec: ParamSpecRef) -> Void) -> Int
Parameters
flags
Flags
unownedSelf
Reference to instance of self
pspec
the
GParamSpec
of the property which changed.handler
The signal handler to call Run the given callback whenever the
notifyFocusCell
signal is emitted -
notifyFocusCellSignal
Extension methodTyped
notify::focus-cell
signal for using theconnect(signal:)
methodsDeclaration
Swift
static var notifyFocusCellSignal: CellAreaSignalName { get }
-
activate(context:
Extension methodwidget: cellArea: flags: editOnly: ) Activates
area
, usually by activating the currently focused cell, however some subclasses which embed widgets in the area can also activate a widget if it currently has the focus.Declaration
Swift
@inlinable func activate<CellAreaContextT, RectangleT, WidgetT>(context: CellAreaContextT, widget: WidgetT, cellArea: RectangleT, flags: CellRendererState, editOnly: Bool) -> Bool where CellAreaContextT : CellAreaContextProtocol, RectangleT : RectangleProtocol, WidgetT : WidgetProtocol
-
activateCell(widget:
Extension methodrenderer: event: cellArea: flags: ) This is used by
GtkCellArea
subclasses when handling events to activate cells, the baseGtkCellArea
class activates cells for keyboard events for free in its own GtkCellArea->activate()
implementation.Declaration
Swift
@inlinable func activateCell<CellRendererT, EventT, RectangleT, WidgetT>(widget: WidgetT, renderer: CellRendererT, event: EventT, cellArea: RectangleT, flags: CellRendererState) -> Bool where CellRendererT : CellRendererProtocol, EventT : EventProtocol, RectangleT : RectangleProtocol, WidgetT : WidgetProtocol
-
add(renderer:
Extension method) Adds
renderer
toarea
with the default child cell properties.Declaration
Swift
@inlinable func add<CellRendererT>(renderer: CellRendererT) where CellRendererT : CellRendererProtocol
-
addFocusSibling(renderer:
Extension methodsibling: ) Adds
sibling
torenderer
’s focusable area, focus will be drawn aroundrenderer
and all of its siblings ifrenderer
can focus for a given row.Events handled by focus siblings can also activate the given focusable
renderer
.Declaration
Swift
@inlinable func addFocusSibling<CellRendererT>(renderer: CellRendererT, sibling: CellRendererT) where CellRendererT : CellRendererProtocol
-
applyAttributes(treeModel:
Extension methoditer: isExpander: isExpanded: ) Applies any connected attributes to the renderers in
area
by pulling the values fromtree_model
.Declaration
Swift
@inlinable func applyAttributes<TreeIterT, TreeModelT>(treeModel: TreeModelT, iter: TreeIterT, isExpander: Bool, isExpanded: Bool) where TreeIterT : TreeIterProtocol, TreeModelT : TreeModelProtocol
-
attributeConnect(renderer:
Extension methodattribute: column: ) Connects an
attribute
to apply values fromcolumn
for theGtkTreeModel
in use.Declaration
Swift
@inlinable func attributeConnect<CellRendererT>(renderer: CellRendererT, attribute: UnsafePointer<gchar>!, column: Int) where CellRendererT : CellRendererProtocol
-
attributeDisconnect(renderer:
Extension methodattribute: ) Disconnects
attribute
for therenderer
inarea
so that attribute will no longer be updated with values from the model.Declaration
Swift
@inlinable func attributeDisconnect<CellRendererT>(renderer: CellRendererT, attribute: UnsafePointer<gchar>!) where CellRendererT : CellRendererProtocol
-
attributeGetColumn(renderer:
Extension methodattribute: ) Returns the model column that an attribute has been mapped to, or -1 if the attribute is not mapped.
Declaration
Swift
@inlinable func attributeGetColumn<CellRendererT>(renderer: CellRendererT, attribute: UnsafePointer<gchar>!) -> Int where CellRendererT : CellRendererProtocol
-
cellGetProperty(renderer:
Extension methodpropertyName: value: ) Gets the value of a cell property for
renderer
inarea
.Declaration
Swift
@inlinable func cellGetProperty<CellRendererT, ValueT>(renderer: CellRendererT, propertyName: UnsafePointer<gchar>!, value: ValueT) where CellRendererT : CellRendererProtocol, ValueT : ValueProtocol
-
cellGetValist(renderer:
Extension methodfirstPropertyName: varArgs: ) Gets the values of one or more cell properties for
renderer
inarea
.Declaration
Swift
@inlinable func cellGetValist<CellRendererT>(renderer: CellRendererT, firstPropertyName: UnsafePointer<gchar>!, varArgs: CVaListPointer) where CellRendererT : CellRendererProtocol
-
cellSetProperty(renderer:
Extension methodpropertyName: value: ) Sets a cell property for
renderer
inarea
.Declaration
Swift
@inlinable func cellSetProperty<CellRendererT, ValueT>(renderer: CellRendererT, propertyName: UnsafePointer<gchar>!, value: ValueT) where CellRendererT : CellRendererProtocol, ValueT : ValueProtocol
-
cellSetValist(renderer:
Extension methodfirstPropertyName: varArgs: ) Sets one or more cell properties for
renderer
inarea
.Declaration
Swift
@inlinable func cellSetValist<CellRendererT>(renderer: CellRendererT, firstPropertyName: UnsafePointer<gchar>!, varArgs: CVaListPointer) where CellRendererT : CellRendererProtocol
-
copy(context:
Extension method) This is sometimes needed for cases where rows need to share alignments in one orientation but may be separately grouped in the opposing orientation.
For instance,
GtkIconView
creates all icons (rows) to have the same width and the cells theirin to have the same horizontal alignments. However each row of icons may have a separate collective height.GtkIconView
uses this to request the heights of each row based on a context which was already used to request all the row widths that are to be displayed.Declaration
Swift
@inlinable func copy<CellAreaContextT>(context: CellAreaContextT) -> CellAreaContextRef! where CellAreaContextT : CellAreaContextProtocol
-
createContext()
Extension methodCreates a
GtkCellAreaContext
to be used witharea
for all purposes.GtkCellAreaContext
stores geometry information for rows for which it was operated on, it is important to use the same context for the same row of data at all times (i.e. one should render and handle events with the sameGtkCellAreaContext
which was used to request the size of those rows of data).Declaration
Swift
@inlinable func createContext() -> CellAreaContextRef!
-
event(context:
Extension methodwidget: event: cellArea: flags: ) Delegates event handling to a
GtkCellArea
.Declaration
Swift
@inlinable func event<CellAreaContextT, EventT, RectangleT, WidgetT>(context: CellAreaContextT, widget: WidgetT, event: EventT, cellArea: RectangleT, flags: CellRendererState) -> Int where CellAreaContextT : CellAreaContextProtocol, EventT : EventProtocol, RectangleT : RectangleProtocol, WidgetT : WidgetProtocol
-
focus(direction:
Extension method) This should be called by the
area
’s owning layout widget when focus is to be passed toarea
, or moved withinarea
for a givendirection
and row data.Implementing
GtkCellArea
classes should implement this method to receive and navigate focus in its own way particular to how it lays out cells.Declaration
Swift
@inlinable func focus(direction: GtkDirectionType) -> Bool
-
foreach(callback:
Extension methodcallbackData: ) Calls
callback
for everyGtkCellRenderer
inarea
.Declaration
Swift
@inlinable func foreach(callback: GtkCellCallback?, callbackData: gpointer! = nil)
-
Calls
callback
for everyGtkCellRenderer
inarea
with the allocated rectangle insidecell_area
.Declaration
Swift
@inlinable func foreachAlloc<CellAreaContextT, RectangleT, WidgetT>(context: CellAreaContextT, widget: WidgetT, cellArea: RectangleT, backgroundArea: RectangleT, callback: GtkCellAllocCallback?, callbackData: gpointer! = nil) where CellAreaContextT : CellAreaContextProtocol, RectangleT : RectangleProtocol, WidgetT : WidgetProtocol
-
getCellAllocation(context:
Extension methodwidget: renderer: cellArea: allocation: ) Derives the allocation of
renderer
insidearea
ifarea
were to be renderered incell_area
.Declaration
Swift
@inlinable func getCellAllocation<CellAreaContextT, CellRendererT, RectangleT, WidgetT>(context: CellAreaContextT, widget: WidgetT, renderer: CellRendererT, cellArea: RectangleT, allocation: RectangleT) where CellAreaContextT : CellAreaContextProtocol, CellRendererT : CellRendererProtocol, RectangleT : RectangleProtocol, WidgetT : WidgetProtocol
-
getCellAtPosition(context:
Extension methodwidget: cellArea: x: y: allocArea: ) Gets the
GtkCellRenderer
atx
andy
coordinates insidearea
and optionally returns the full cell allocation for it insidecell_area
.Declaration
Swift
@inlinable func getCellAtPosition<CellAreaContextT, RectangleT, WidgetT>(context: CellAreaContextT, widget: WidgetT, cellArea: RectangleT, x: Int, y: Int, allocArea: RectangleT?) -> CellRendererRef! where CellAreaContextT : CellAreaContextProtocol, RectangleT : RectangleProtocol, WidgetT : WidgetProtocol
-
getCurrentPathString()
Extension methodGets the current
GtkTreePath
string for the currently appliedGtkTreeIter
, this is implicitly updated whengtk_cell_area_apply_attributes()
is called and can be used to interact with renderers fromGtkCellArea
subclasses.Declaration
Swift
@inlinable func getCurrentPathString() -> String!
-
getEditWidget()
Extension methodGets the
GtkCellEditable
widget currently used to edit the currently edited cell.Declaration
Swift
@inlinable func getEditWidget() -> CellEditableRef!
-
getEditedCell()
Extension methodGets the
GtkCellRenderer
inarea
that is currently being edited.Declaration
Swift
@inlinable func getEditedCell() -> CellRendererRef!
-
getFocusCell()
Extension methodRetrieves the currently focused cell for
area
Declaration
Swift
@inlinable func getFocusCell() -> CellRendererRef!
-
getFocusFromSibling(renderer:
Extension method) Gets the
GtkCellRenderer
which is expected to be focusable for whichrenderer
is, or may be a sibling.This is handy for
GtkCellArea
subclasses when handling events, after determining the renderer at the event location it can then chose to activate the focus cell for which the event cell may have been a sibling.Declaration
Swift
@inlinable func getFocusFromSibling<CellRendererT>(renderer: CellRendererT) -> CellRendererRef! where CellRendererT : CellRendererProtocol
-
getFocusSiblings(renderer:
Extension method) Gets the focus sibling cell renderers for
renderer
.Declaration
Swift
@inlinable func getFocusSiblings<CellRendererT>(renderer: CellRendererT) -> GLib.ListRef! where CellRendererT : CellRendererProtocol
-
getPreferredHeight(context:
Extension methodwidget: minimumHeight: naturalHeight: ) Retrieves a cell area’s initial minimum and natural height.
area
will store some geometrical information incontext
along the way; when requesting sizes over an arbitrary number of rows, it’s not important to check theminimum_height
andnatural_height
of this call but rather to consultgtk_cell_area_context_get_preferred_height()
after a series of requests.Declaration
Swift
@inlinable func getPreferredHeight<CellAreaContextT, WidgetT>(context: CellAreaContextT, widget: WidgetT, minimumHeight: UnsafeMutablePointer<gint>! = nil, naturalHeight: UnsafeMutablePointer<gint>! = nil) where CellAreaContextT : CellAreaContextProtocol, WidgetT : WidgetProtocol
-
Retrieves a cell area’s minimum and natural height if it would be given the specified
width
.area
stores some geometrical information incontext
along the way while callinggtk_cell_area_get_preferred_width()
. It’s important to perform a series ofgtk_cell_area_get_preferred_width()
requests withcontext
first and then callgtk_cell_area_get_preferred_height_for_width()
on each cell area individually to get the height for width of each fully requested row.If at some point, the width of a single row changes, it should be requested with
gtk_cell_area_get_preferred_width()
again and then the full width of the requested rows checked again withgtk_cell_area_context_get_preferred_width()
.Declaration
Swift
@inlinable func getPreferredHeightForWidth<CellAreaContextT, WidgetT>(context: CellAreaContextT, widget: WidgetT, width: Int, minimumHeight: UnsafeMutablePointer<gint>! = nil, naturalHeight: UnsafeMutablePointer<gint>! = nil) where CellAreaContextT : CellAreaContextProtocol, WidgetT : WidgetProtocol
-
getPreferredWidth(context:
Extension methodwidget: minimumWidth: naturalWidth: ) Retrieves a cell area’s initial minimum and natural width.
area
will store some geometrical information incontext
along the way; when requesting sizes over an arbitrary number of rows, it’s not important to check theminimum_width
andnatural_width
of this call but rather to consultgtk_cell_area_context_get_preferred_width()
after a series of requests.Declaration
Swift
@inlinable func getPreferredWidth<CellAreaContextT, WidgetT>(context: CellAreaContextT, widget: WidgetT, minimumWidth: UnsafeMutablePointer<gint>! = nil, naturalWidth: UnsafeMutablePointer<gint>! = nil) where CellAreaContextT : CellAreaContextProtocol, WidgetT : WidgetProtocol
-
Retrieves a cell area’s minimum and natural width if it would be given the specified
height
.area
stores some geometrical information incontext
along the way while callinggtk_cell_area_get_preferred_height()
. It’s important to perform a series ofgtk_cell_area_get_preferred_height()
requests withcontext
first and then callgtk_cell_area_get_preferred_width_for_height()
on each cell area individually to get the height for width of each fully requested row.If at some point, the height of a single row changes, it should be requested with
gtk_cell_area_get_preferred_height()
again and then the full height of the requested rows checked again withgtk_cell_area_context_get_preferred_height()
.Declaration
Swift
@inlinable func getPreferredWidthForHeight<CellAreaContextT, WidgetT>(context: CellAreaContextT, widget: WidgetT, height: Int, minimumWidth: UnsafeMutablePointer<gint>! = nil, naturalWidth: UnsafeMutablePointer<gint>! = nil) where CellAreaContextT : CellAreaContextProtocol, WidgetT : WidgetProtocol
-
getRequestMode()
Extension methodGets whether the area prefers a height-for-width layout or a width-for-height layout.
Declaration
Swift
@inlinable func getRequestMode() -> GtkSizeRequestMode
-
has(renderer:
Extension method) Checks if
area
containsrenderer
.Declaration
Swift
@inlinable func has<CellRendererT>(renderer: CellRendererT) -> Bool where CellRendererT : CellRendererProtocol
-
innerCellArea(widget:
Extension methodcellArea: innerArea: ) This is a convenience function for
GtkCellArea
implementations to get the inner area where a givenGtkCellRenderer
will be rendered. It removes any padding previously added bygtk_cell_area_request_renderer()
.Declaration
Swift
@inlinable func innerCellArea<RectangleT, WidgetT>(widget: WidgetT, cellArea: RectangleT, innerArea: RectangleT) where RectangleT : RectangleProtocol, WidgetT : WidgetProtocol
-
isFocusSibling(renderer:
Extension methodsibling: ) Returns whether
sibling
is one ofrenderer
’s focus siblings (seegtk_cell_area_add_focus_sibling()
).Declaration
Swift
@inlinable func isFocusSibling<CellRendererT>(renderer: CellRendererT, sibling: CellRendererT) -> Bool where CellRendererT : CellRendererProtocol
-
remove(renderer:
Extension method) Removes
renderer
fromarea
.Declaration
Swift
@inlinable func remove<CellRendererT>(renderer: CellRendererT) where CellRendererT : CellRendererProtocol
-
removeFocusSibling(renderer:
Extension methodsibling: ) Removes
sibling
fromrenderer
’s focus sibling list (seegtk_cell_area_add_focus_sibling()
).Declaration
Swift
@inlinable func removeFocusSibling<CellRendererT>(renderer: CellRendererT, sibling: CellRendererT) where CellRendererT : CellRendererProtocol
-
render(context:
Extension methodwidget: cr: backgroundArea: cellArea: flags: paintFocus: ) Renders
area
’s cells according toarea
’s layout ontowidget
at the given coordinates.Declaration
Swift
@inlinable func render<CellAreaContextT, ContextT, RectangleT, WidgetT>(context: CellAreaContextT, widget: WidgetT, cr: ContextT, backgroundArea: RectangleT, cellArea: RectangleT, flags: CellRendererState, paintFocus: Bool) where CellAreaContextT : CellAreaContextProtocol, ContextT : ContextProtocol, RectangleT : RectangleProtocol, WidgetT : WidgetProtocol
-
request(renderer:
Extension methodorientation: widget: for: minimumSize: naturalSize: ) This is a convenience function for
GtkCellArea
implementations to request size for cell renderers. It’s important to use this function to request size and then usegtk_cell_area_inner_cell_area()
at render and event time since this function will add padding around the cell for focus painting.Declaration
Swift
@inlinable func request<CellRendererT, WidgetT>(renderer: CellRendererT, orientation: GtkOrientation, widget: WidgetT, for size: Int, minimumSize: UnsafeMutablePointer<gint>! = nil, naturalSize: UnsafeMutablePointer<gint>! = nil) where CellRendererT : CellRendererProtocol, WidgetT : WidgetProtocol
-
setFocusCell(renderer:
Extension method) Explicitly sets the currently focused cell to
renderer
.This is generally called by implementations of
GtkCellAreaClass.focus
()
orGtkCellAreaClass.event
()
, however it can also be used to implement functions such asgtk_tree_view_set_cursor_on_cell()
.Declaration
Swift
@inlinable func setFocusCell<CellRendererT>(renderer: CellRendererT) where CellRendererT : CellRendererProtocol
-
stopEditing(canceled:
Extension method) Explicitly stops the editing of the currently edited cell.
If
canceled
istrue
, the currently edited cell renderer will emit theediting-canceled
signal, otherwise the theediting-done
signal will be emitted on the current edit widget.See
gtk_cell_area_get_edited_cell()
andgtk_cell_area_get_edit_widget()
.Declaration
Swift
@inlinable func stopEditing(canceled: Bool)
-
currentPathString
Extension methodGets the current
GtkTreePath
string for the currently appliedGtkTreeIter
, this is implicitly updated whengtk_cell_area_apply_attributes()
is called and can be used to interact with renderers fromGtkCellArea
subclasses.Declaration
Swift
@inlinable var currentPathString: String! { get }
-
editWidget
Extension methodGets the
GtkCellEditable
widget currently used to edit the currently edited cell.Declaration
Swift
@inlinable var editWidget: CellEditableRef! { get }
-
editedCell
Extension methodGets the
GtkCellRenderer
inarea
that is currently being edited.Declaration
Swift
@inlinable var editedCell: CellRendererRef! { get }
-
focusCell
Extension methodRetrieves the currently focused cell for
area
Declaration
Swift
@inlinable var focusCell: CellRendererRef! { get nonmutating set }
-
isActivatable
Extension methodReturns whether the area can do anything when activated, after applying new attributes to
area
.Declaration
Swift
@inlinable var isActivatable: Bool { get }
-
requestMode
Extension methodGets whether the area prefers a height-for-width layout or a width-for-height layout.
Declaration
Swift
@inlinable var requestMode: GtkSizeRequestMode { get }