类
GtkCellArea
已弃用: 4.10
描述 [src]
abstract class Gtk.CellArea : GObject.InitiallyUnowned
implements Gtk.Buildable, Gtk.CellLayout {
/* No available fields */
}
用于布局 GtkCellRenderer
的抽象类
GtkCellArea
是 GtkCellLayout
窗口小部件(也称为“布局窗口小部件”)的一个抽象类,用于与任意数量的 GtkCellRenderer
建立接口,并与用户交互以获取给定的 GtkTreeModel
行。
该单元格区域负责事件、焦点导航、绘制以及给定数据行的尺寸请求和分配。
通常,用户无需直接与 GtkCellArea
交互,除非他们自己实现单元格布局窗口小部件 。
请求区域尺寸
如 GtkWidget 的几何管理部分 中所述,GTK 使用 height-for-width 几何管理系统计算窗口小部件和用户界面的尺寸。GtkCellArea
使用相同的语义来计算任意数量的 GtkTreeModel
行的区域尺寸。
在请求单元格区域的尺寸时,需要计算大量行的尺寸,不同的布局窗口小部件会以不同的方式完成此操作。例如,GtkTreeViewColumn
总会将区域从上到下排列,而 GtkIconView
则会强制所有区域接收相同的宽度并环绕这些区域,在分配的宽度较小时请求更多单元格区域的高度。
同样重要的是,区域要保持一些单元格对齐方式与相邻行的渲染区域(单元格在每个行中都可能显示为“分栏”形式,即使每个行中单元格的尺寸不同)。出于此原因,GtkCellArea
使用 GtkCellAreaContext
对象来存储对齐方式和尺寸(以及使用所述 上下文计算的所有行的最大最小和自然尺寸)。
GtkCellAreaContext
是特定于创建它的 GtkCellArea
的不透明对象(请参阅 gtk_cell_area_create_context()
)。
有拥有权的单元格布局小部件可创建任意多个语境,以计算在至少一个方向(水平或垂直)上应收到相同大小的行的大小,但是,重要的是,在为某个 GtkTreeModel
行请求大小时所使用的 GtkCellAreaContext
在渲染或处理那个行时将被使用。
为了请求 GtkTreeModel
根级别的所有行gtk_tree_view_get_columns()
,可以执行以下操作:
GtkTreeIter iter;
int minimum_width;
int 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);
请注意,在此示例中,观察每个行的已返回的区域的最小和自然宽度并不重要,除非单元格布局对象实际上对各个行的宽度感兴趣。但总宽度存储在随附的 GtkCellAreaContext
对象中,并可在任何时间查阅。
因为 GtkCellLayout
小部件通常必须支持请求和渲染具有超大行数的树模型中的行,因此这非常有用。在该情况下,GtkCellLayout
小部件将在空闲或超时来源(请参见 g_timeout_add()
)中计算行的所需宽度,并且当小部件在 Gtk.WidgetClass.measure
中请求其实际宽度时,它可以简单地查阅到目前为止在 GtkCellAreaContext
对象中累积的宽度。
一个行从上向下渲染并占据布局小部件的全部宽度的简单示例如下所示:
static void
foo_get_preferred_width (GtkWidget *widget,
int *minimum_size,
int *natural_size)
{
Foo *self = FOO (widget);
FooPrivate *priv = foo_get_instance_private (self);
foo_ensure_at_least_one_handfull_of_rows_have_been_requested (self);
gtk_cell_area_context_get_preferred_width (priv->context, minimum_size, natural_size);
}
在上文示例中,Foo
小部件必须确保已计算某些行大小(Foo
判定适合在单个超时迭代中为此请求空间的行数量),然后通过 GtkCellAreaContext
简单地返回区域所需的空行数量。
请求区域的高度以换取宽度(或宽度以换取高度)是一个类似的任务,只是在这种情况下,GtkCellAreaContext
不会存储数据(实际上,它不知道布局小部件计划为每一行分配多少空间。布局小部件必须渲染每行数据,并具有 GtkCellArea
请求的适当高度和宽度)。
为了请求 GtkTreeModel
根级别的所有行的宽度以换取高度,可以执行以下操作:
GtkTreeIter iter;
int minimum_height;
int natural_height;
int full_minimum_height = 0;
int 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);
}
请注意,在上文示例中,我们需要缓存为每一行返回的高度,这样我们才知道要为每一行区域渲染的大小。但是,我们仅希望实际缓存这些高度,如果请求旨在进行布局小部件真实分配的话。
在某些情况下,布局小部件被请求任意 for_width 的高度,这对于需要请求成千上万行大小的布局小部件来说是一个特殊情况。对于此情况,重要的是布局小部件仅计算合理大小的一块行,并返回高度同步。这里的理由是,对于任何布局小部件,它至少有能力同步计算足够的高度以填充屏幕高度(或滚动窗口高度),以响应单个对 Gtk.WidgetClass.measure
的调用。返回大于屏幕区域的高度对宽度完美的高度无关紧要,因为在布局从小部件窗口接收分配后,它将继续驱动滚动条值,而计算在后台的行高度所需的更多高度。
渲染区域
一旦至少掌握布局小部件可见区域中的这些行区域大小,就可以在 Gtk.WidgetClass.snapshot
时间渲染这些区域大小。
如何渲染根级别的所有行的一个粗略示例如下所示
GtkAllocation allocation;
GdkRectangle cell_area = { 0, };
GtkTreeIter iter;
int minimum_width;
int 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);
}
请注意,此示例中的缓存高度实际上取决于布局微件的工作方式。布局微件可能决定为每行提供其最小或自然高度,或者,如果模型内容预计在不滚动的情况下适合布局微件,则使用 gtk_distribute_natural_allocation()
计算微件分配时为每行计算分配也是合理的。
处理事件和控制键盘焦点
将事件传递至该区域与在任何普通微件上处理事件一样简单,然后将它们传递至 gtk_cell_area_event()
API(当它们进入时)。通常,GtkCellArea
仅对按钮事件感兴趣,但可以实现一些自定义派生区域,它们对处理其他事件感兴趣。处理事件可触发 GtkCellArea::focus-changed
信号发出;如果已单击可编辑单元格并且需要开始编辑,则也会发出 GtkCellArea::add-editable
。你可以随时调用 gtk_cell_area_stop_editing()
以取消任何当前正在进行的单元格编辑。
GtkCellArea
以与 GtkWidget
类似的方式在单元格之间控制键盘焦点。对于支持为单元格提供焦点的布局微件,记住将 GTK_CELL_RENDERER_FOCUSED
传递给焦点行的区域函数,并告知该区域在渲染时绘制焦点非常重要。
接受单元格焦点的布局微件应实现 Gtk.WidgetClass.focus
虚拟方法。布局微件始终负责知道在微件中渲染 GtkTreeModel
行的位置,因此,在 Gtk.WidgetClass.focus
时间,布局微件应使用 GtkCellArea
方法在该区域内导航焦点,然后观察 GtkDirectionType
以将焦点传递给相邻行和区域。
关于应如何实现 Gtk.WidgetClass.focus
虚拟方法的一个基本示例
static gboolean
foo_focus (GtkWidget *widget,
GtkDirectionType direction)
{
Foo *self = FOO (widget);
FooPrivate *priv = foo_get_instance_private (self);
int focus_row = priv->focus_row;
gboolean have_focus = FALSE;
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;
}
请注意,布局微件负责将 GtkDirectionType
值与其布局单元格的方式匹配起来。
单元格属性
GtkCellArea
为 GtkCellRenderer
引入了单元格属性。这提供了一些通用界面,用于定义单元格区域与其单元格之间的关系。例如,在 GtkCellAreaBox
中,当为一个区域分配超过其完整自然请求的空间时,单元格可能会“扩展”并接收额外的空间,或者可以将单元格配置为与使用相同 GtkCellAreaContext
请求并渲染的相邻行“对齐”。
使用 gtk_cell_area_class_install_cell_property()
为单元格区域类安装单元格属性,并使用 gtk_cell_area_class_find_cell_property()
或 gtk_cell_area_class_list_cell_properties()
获取有关现有单元格属性的信息。
要设置单元格属性的值,请使用 gtk_cell_area_cell_set_property()
、gtk_cell_area_cell_set()
或 gtk_cell_area_cell_set_valist()
。要获取单元格属性的值,请使用 gtk_cell_area_cell_get_property()
gtk_cell_area_cell_get()
或 gtk_cell_area_cell_get_valist()
。
位弃用:4.10
列表视图使用小部件显示其内容。
实例方法
gtk_cell_area_activate
激活 `area`,通常通过激活当前聚焦的单元格来进行激活。但是,某些将在 area 中嵌入小部件的子类也可以在当前具有焦点的时候激活小部件。
已弃用: 4.10
gtk_cell_area_activate_cell
当处理事件以激活单元格时,`GtkCellArea` 子类会使用它。基本 `GtkCellArea` 类会在其自身的 GtkCellArea->activate() 实现中免费为键盘事件激活单元格。
已弃用: 4.10
gtk_cell_area_add_focus_sibling
将 `sibling` 添加到 `renderer` 的可聚焦区域,如果 `renderer` 能够为给定行获取焦点,那么焦点会围绕 `renderer` 及其所有 sibling 绘制。
已弃用: 4.10
gtk_cell_area_add_with_properties
将 `renderer` 添加到 `area`,同时设置单元格属性。请参阅 `gtk_cell_area_add()` 和 `gtk_cell_area_cell_set()` 以了解详情。
已弃用: 4.10
gtk_cell_area_attribute_disconnect
断开 `area` 中 `renderer` 的 `attribute` 连接,这样属性将不再使用模型中的值进行更新。
已弃用: 4.10
gtk_cell_area_create_context
创建 `GtkCellArea`Context,用于 `area` 的所有目的。`GtkCellArea`Context 会存储已经对其进行操作的行几何信息,始终对同一行数据使用相同的上下文非常重要(也就是说,应该使用与用于请求这些行数据大小相同的 `GtkCellArea`Context 来渲染和处理事件)。
已弃用: 4.10
gtk_cell_area_get_cell_at_position
获取 area
中 x
和 y
坐标的 GtkCellRenderer
,并可以选择为其返回 cell_area
内的完整单元格分配。
已弃用: 4.10
gtk_cell_area_get_current_path_string
获取当前应用的 GtkTreeIter
的当前 GtkTreePath
字符串,当调用 gtk_cell_area_apply_attributes()
时,它会默认更新,并可用于与 GtkCellArea
子类的呈现器进行交互。
gtk_cell_area_get_focus_from_sibling
获取预期将可聚焦的 GtkCellRenderer
,该呈现器可能是 renderer
或其兄弟姐妹呈现器。
已弃用: 4.10
gtk_cell_area_inner_cell_area
此方法是一个方便的函数,供 GtkCellArea
实现用于获取给定 GtkCellRenderer
将要呈现的内部区域。它将移除之前通过 gtk_cell_area_request_renderer()
添加的所有填充。
已弃用: 4.10
gtk_cell_area_is_focus_sibling
返回 sibling
是否是 renderer
的焦点兄弟姐妹呈现器之一(请参阅 gtk_cell_area_add_focus_sibling()
)。
已弃用: 4.10
gtk_cell_area_remove_focus_sibling
从 renderer
的焦点兄弟姐妹呈现器列表中移除 sibling
(请参阅 gtk_cell_area_add_focus_sibling()
)。
已弃用: 4.10
gtk_cell_area_request_renderer
在此方法是一个方便的函数,供 GtkCellArea
实现用于请求单元格呈现器的大小。很重要的一点是使用此函数来请求大小,然后在渲染和事件时间使用 gtk_cell_area_inner_cell_area()
,因为此函数会在单元格周围添加填充以供焦点绘制。
已弃用: 4.10
从 GtkBuildable 继承的方法(1)
从 GtkCellLayout 继承的方法 (10)
gtk_cell_layout_add_attribute
向 `cell_layout` 中的映射列表添加属性映射。
已弃用: 4.10
gtk_cell_layout_clear
取消 `cell_layout` 上所有渲染器上的所有映射并从 `cell_layout` 中移除所有渲染器。
已弃用: 4.10
gtk_cell_layout_clear_attributes
使用 gtk_cell_layout_set_attributes() 清除之前设置的所有现有属性。
已弃用: 4.10
gtk_cell_layout_get_area
返回底层 `GtkCellArea`,如果在 `GtkCellArea` 上调用,则可能是 `cell_layout`;如果 `cell_layout` 不使用 `GtkCellArea`,则可能是 `NULL`。
已弃用: 4.10
gtk_cell_layout_get_cells
返回已添加到 `cell_layout` 的单元格布局。
已弃用: 4.10
gtk_cell_layout_pack_end
将 `cell` 添加到 `cell_layout` 的末尾。如果 `expand` 为 `FALSE`,则分配给 `cell` 的空间不超过其需要的大小。将所有未用空间均匀分配给 `expand` 为 `TRUE` 的单元格。
已弃用: 4.10
gtk_cell_layout_pack_start
将 `cell` 封装到 `cell_layout` 的开头。如果 `expand` 为 `FALSE`,则分配给 `cell` 的空间不超过其需要的大小。将所有未用空间均匀分配给 `expand` 为 `TRUE` 的单元格。
已弃用: 4.10
gtk_cell_layout_reorder
在 `position` 处重新插入 `cell`。
已弃用: 4.10
gtk_cell_layout_set_attributes
将参数列表中的属性设置为 `cell_layout` 的属性。
已弃用: 4.10
gtk_cell_layout_set_cell_data_func
为 `cell_layout` 设置要使用的 `GtkCellLayout`DataFunc。
已弃用: 4.10
信号
从 GObject (1) 继承的信号
GObject::notify
当通过 g_object_set_property()、g_object_set() 等设置对象的属性值时,会在对象上发出 notify 信号。
类结构
struct GtkCellAreaClass {
void (* add) (
GtkCellArea* area,
GtkCellRenderer* renderer
);
void (* remove) (
GtkCellArea* area,
GtkCellRenderer* renderer
);
void (* foreach) (
GtkCellArea* area,
GtkCellCallback callback,
gpointer callback_data
);
void (* foreach_alloc) (
GtkCellArea* area,
GtkCellAreaContext* context,
GtkWidget* widget,
const GdkRectangle* cell_area,
const GdkRectangle* background_area,
GtkCellAllocCallback callback,
gpointer callback_data
);
int (* event) (
GtkCellArea* area,
GtkCellAreaContext* context,
GtkWidget* widget,
GdkEvent* event,
const GdkRectangle* cell_area,
GtkCellRendererState flags
);
void (* snapshot) (
GtkCellArea* area,
GtkCellAreaContext* context,
GtkWidget* widget,
GtkSnapshot* snapshot,
const GdkRectangle* background_area,
const GdkRectangle* cell_area,
GtkCellRendererState flags,
gboolean paint_focus
);
void (* apply_attributes) (
GtkCellArea* area,
GtkTreeModel* tree_model,
GtkTreeIter* iter,
gboolean is_expander,
gboolean is_expanded
);
GtkCellAreaContext* (* create_context) (
GtkCellArea* area
);
GtkCellAreaContext* (* copy_context) (
GtkCellArea* area,
GtkCellAreaContext* context
);
GtkSizeRequestMode (* get_request_mode) (
GtkCellArea* area
);
void (* get_preferred_width) (
GtkCellArea* area,
GtkCellAreaContext* context,
GtkWidget* widget,
int* minimum_width,
int* natural_width
);
void (* get_preferred_height_for_width) (
GtkCellArea* area,
GtkCellAreaContext* context,
GtkWidget* widget,
int width,
int* minimum_height,
int* natural_height
);
void (* get_preferred_height) (
GtkCellArea* area,
GtkCellAreaContext* context,
GtkWidget* widget,
int* minimum_height,
int* natural_height
);
void (* get_preferred_width_for_height) (
GtkCellArea* area,
GtkCellAreaContext* context,
GtkWidget* widget,
int height,
int* minimum_width,
int* natural_width
);
void (* set_cell_property) (
GtkCellArea* area,
GtkCellRenderer* renderer,
guint property_id,
const GValue* value,
GParamSpec* pspec
);
void (* get_cell_property) (
GtkCellArea* area,
GtkCellRenderer* renderer,
guint property_id,
GValue* value,
GParamSpec* pspec
);
gboolean (* focus) (
GtkCellArea* area,
GtkDirectionType direction
);
gboolean (* is_activatable) (
GtkCellArea* area
);
gboolean (* activate) (
GtkCellArea* area,
GtkCellAreaContext* context,
GtkWidget* widget,
const GdkRectangle* cell_area,
GtkCellRendererState flags,
gboolean edit_only
);
}
无可用描述。
类成员
add: void (* add) ( GtkCellArea* area, GtkCellRenderer* renderer )
向 area 添加一个 `GtkCellRenderer`。
remove: void (* remove) ( GtkCellArea* area, GtkCellRenderer* renderer )
从 area 中移除一个 `GtkCellRenderer`。
foreach: void (* foreach) ( GtkCellArea* area, GtkCellCallback callback, gpointer callback_data )
使用提供的用户数据对区域中的每个 `GtkCellRenderer` 调用 `GtkCellCallback` 函数,直到回调返回 `TRUE`。
foreach_alloc: 无效 (* foreach_alloc) ( GtkCellArea* 区域, GtkCellAreaContext* 上下文, GtkWidget* 小组件, const GdkRectangle* 单元格区域, const GdkRectangle* 背景区域, GtkCellAllocCallback 回调, gpointer 回调数据 )
使用分配的单元格区域和提供用户数据,对区域中的每个
GtkCellRenderer
调用GtkCellAllocCallback
函数,直到回调返回TRUE
。事件: int (* 事件) ( GtkCellArea* 区域, GtkCellAreaContext* 上下文, GtkWidget* 小组件, GdkEvent* 事件, const GdkRectangle* 单元格区域, GtkCellRendererState 标志 )
在区域中处理事件,这通常用于激活按钮事件的事件位置的单元格,但也可用于将事件通常传递给绘制到该区域的
GtkWidget
。快照: 无效 (* 快照) ( GtkCellArea* 区域, GtkCellAreaContext* 上下文, GtkWidget* 小组件, GtkSnapshot* 快照, const GdkRectangle* 背景区域, const GdkRectangle* 单元格区域, GtkCellRendererState 标志, gboolean 图像焦点 )
事实上将区域的单元格快照到指定矩形中,
background_area
应正确分配到单元格对应的背景区域。应用属性: 无效 (* 应用属性) ( GtkCellArea* 区域, GtkTreeModel* 树模型, GtkTreeIter* 迭代器, gboolean 是否是扩展器, gboolean 是否已扩展 )
将单元格属性应用到单元格中。这是作为信号实现的,通常
GtkCellArea
子类不必实现该属性,因为它由基本类处理。创建上下文: GtkCellAreaContext* (* 创建上下文) ( GtkCellArea* 区域 )
创建一个类特定的
GtkCellAreaContext
并返回,以存储单元格对齐和分配详细信息,用于所述GtkCellArea
类。复制上下文: GtkCellAreaContext* (* 复制上下文) ( GtkCellArea* 区域, GtkCellAreaContext* 上下文 )
以与传递的
上下文
相同的状态创建一个新GtkCellAreaContext
,其中所有单元格对齐数据和分配都保持不变。获取请求模式: GtkSizeRequestMode (* 获取请求模式) ( GtkCellArea* 区域 )
这可让区域告知布局小组件,它更喜欢以
GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH
或GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT
模式进行分配。获取首选宽度: 无效 (* 获取首选宽度) ( GtkCellArea* 区域, GtkCellAreaContext* 上下文, GtkWidget* 小组件, int* 最小宽度, int* 常规宽度 )
计算区域单元格的最小宽度和常规宽度,同时应用当前属性并考虑所述
GtkCellArea
的特定布局详细信息。虽然针对一系列行执行请求,但最小大小和常规大小的对应GtkCellAreaContext
中应存储对齐方式和总体数据。获取宽度首选高度: 无效 (* 获取宽度首选高度) ( GtkCellArea* 区域, GtkCellAreaContext* 上下文, GtkWidget* 小组件, int 宽度, int* 最小高度, int* 常规高度 )
计算区域的最小高度和常规高度,前提是传递的
上下文
将分配给定宽度。在实现此虚拟方法时,可以安全地假设上下文
已针对上下文
将被分配的每个GtkTreeModel
行存储对齐的单元格宽度,因为此信息存储在GtkCellAreaClass.get_preferred_width()
时间。此虚拟方法还应存储单元格高度的任何必要对齐方式,以防上下文被分配高度。获取首选高度: 无效 (* 获取首选高度) ( GtkCellArea* 区域, GtkCellAreaContext* 上下文, GtkWidget* 小组件, int* 最小高度, int* 常规高度 )
计算应用当前属性的区域单元格的最小高度和自然高度。从本质上讲,这与 `GtkCellAreaClass.get_preferred_width()` 完全相同,但仅适用于作为 `GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT` 请求的区域。
get_preferred_width_for_height: void (* get_preferred_width_for_height) ( GtkCellArea* area, GtkCellAreaContext* context, GtkWidget* widget, int height, int* minimum_width, int* natural_width )
如果传递的 `context` 会分配给特定高度,则计算该区域的最小宽度和自然宽度。与 `GtkCellAreaClass.get_preferred_height_for_width()` 相同,但仅用于处理 `GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT` 模式中的请求。
set_cell_property: void (* set_cell_property) ( GtkCellArea* area, GtkCellRenderer* renderer, guint property_id, const GValue* value, GParamSpec* pspec )
应实现此功能来处理特定 `GtkCellRenderer` 的子单元格属性更改,该属性先前通过 gtk_cell_area_class_install_cell_property() 安装在 `GtkCellAreaClass` 上。
get_cell_property: void (* get_cell_property) ( GtkCellArea* area, GtkCellRenderer* renderer, guint property_id, GValue* value, GParamSpec* pspec )
应实现此功能来报告特定子级 `GtkCellRenderer` 的子单元格属性值。
focus: gboolean (* focus) ( GtkCellArea* area, GtkDirectionType direction )
应实现此虚拟方法,以便从 `GtkCellArea` 内部的单元格导航到单元格。`GtkCellArea` 应从该区域内部的单元格移动到单元格,并在焦点从该区域逻辑退出时返回 `FALSE`,但有以下例外情况:当该区域不包含任何可激活单元格时,则整个区域接收焦点。不应将焦点授予实际上是其他同级单元格的“焦点同级”的单元格(请参阅 gtk_cell_area_get_focus_from_sibling())。通过调用 gtk_cell_area_set_focus_cell() 设置焦点。
is_activatable: gboolean (* is_activatable) ( GtkCellArea* area )
返回 `GtkCellArea` 是否可以响应 `GtkCellAreaClass.activate()`,通常无需实现,因为基类会负责此功能,但如果 `GtkCellArea` 子类可以通过除激活其 `GtkCellRenderers` 以外的其他方式处理激活,则可以增强它。
activate: gboolean (* activate) ( GtkCellArea* area, GtkCellAreaContext* context, GtkWidget* widget, const GdkRectangle* cell_area, GtkCellRendererState flags, gboolean edit_only )
当呈现 `GtkCellArea` 的布局小部件激活焦点单元格时(参见 gtk_cell_area_get_focus_cell()),即调用此功能。
虚拟方法
Gtk.CellAreaClass.activate
激活 `area`,通常通过激活当前聚焦的单元格来进行激活。但是,某些将在 area 中嵌入小部件的子类也可以在当前具有焦点的时候激活小部件。
已弃用: 4.10
Gtk.CellAreaClass.create_context
创建 `GtkCellArea`Context,用于 `area` 的所有目的。`GtkCellArea`Context 会存储已经对其进行操作的行几何信息,始终对同一行数据使用相同的上下文非常重要(也就是说,应该使用与用于请求这些行数据大小相同的 `GtkCellArea`Context 来渲染和处理事件)。
已弃用: 4.10
Gtk.CellAreaClass.set_cell_property
应实现此功能来处理特定 `GtkCellRenderer` 的子单元格属性更改,该属性先前通过 gtk_cell_area_class_install_cell_property() 安装在 `GtkCellAreaClass` 上。