GtkCellArea

已弃用: 4.10 

描述 [src]

abstract class Gtk.CellArea : GObject.InitiallyUnowned
  implements Gtk.Buildable, Gtk.CellLayout {
  /* No available fields */
}

用于布局 GtkCellRenderer 的抽象类

GtkCellAreaGtkCellLayout 窗口小部件(也称为“布局窗口小部件”)的一个抽象类,用于与任意数量的 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 值与其布局单元格的方式匹配起来。

单元格属性

GtkCellAreaGtkCellRenderer 引入了单元格属性。这提供了一些通用界面,用于定义单元格区域与其单元格之间的关系。例如,在 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

列表视图使用小部件显示其内容。

层级

hierarchy this GtkCellArea implements_0 GtkBuildable this--implements_0 implements_1 GtkCellLayout this--implements_1 ancestor_0 GInitiallyUnowned ancestor_0--this ancestor_1 GObject ancestor_1--ancestor_0

实例方法

gtk_cell_area_activate

激活 `area`,通常通过激活当前聚焦的单元格来进行激活。但是,某些将在 area 中嵌入小部件的子类也可以在当前具有焦点的时候激活小部件。

已弃用: 4.10 

gtk_cell_area_activate_cell

当处理事件以激活单元格时,`GtkCellArea` 子类会使用它。基本 `GtkCellArea` 类会在其自身的 GtkCellArea->activate() 实现中免费为键盘事件激活单元格。

已弃用: 4.10 

gtk_cell_area_add

使用默认子单元格属性将 `renderer` 添加到 `area`。

已弃用: 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_apply_attributes

通过从 `tree_model` 中拉取值,将任何连接的属性应用于 `area` 中的渲染器。

已弃用: 4.10 

gtk_cell_area_attribute_connect

连接一个用于对正在使用的 `GtkTreeModel` 中的 `column` 应用值的 `attribute`。

已弃用: 4.10 

gtk_cell_area_attribute_disconnect

断开 `area` 中 `renderer` 的 `attribute` 连接,这样属性将不再使用模型中的值进行更新。

已弃用: 4.10 

gtk_cell_area_attribute_get_column

返回已映射到属性的模型列,如果该属性没有被映射,则返回 -1。

已弃用: 4.10 

gtk_cell_area_cell_get

在 `area` 中为 `renderer` 获取一个或多个单元格属性的值。

已弃用: 4.10 

gtk_cell_area_cell_get_property

在 `area` 中为 `renderer` 获取单元格属性的值。

已弃用: 4.10 

gtk_cell_area_cell_get_valist

在 `area` 中为 `renderer` 获取一个或多个单元格属性的值。

已弃用: 4.10 

gtk_cell_area_cell_set

在 `area` 中为 `cell` 设置一个或多个单元格属性。

已弃用: 4.10 

gtk_cell_area_cell_set_property

在 `area` 中为 `renderer` 设置单元格属性。

已弃用: 4.10 

gtk_cell_area_cell_set_valist

在 `area` 中为 `renderer` 设置一个或多个单元格属性。

已弃用: 4.10 

gtk_cell_area_copy_context

有时在行需要在一种方向上共享对齐方式,但在相反的方向上可以单独分组时需要这样做。

已弃用: 4.10 

gtk_cell_area_create_context

创建 `GtkCellArea`Context,用于 `area` 的所有目的。`GtkCellArea`Context 会存储已经对其进行操作的行几何信息,始终对同一行数据使用相同的上下文非常重要(也就是说,应该使用与用于请求这些行数据大小相同的 `GtkCellArea`Context 来渲染和处理事件)。

已弃用: 4.10 

gtk_cell_area_event

委托事件处理到 GtkCellArea

已弃用: 4.10 

gtk_cell_area_focus

当焦点传递到 area,或者在 area 内移动时,焦点的所有者布局微件应调用此方法来获取给定的 direction 和行数据。

已弃用: 4.10 

gtk_cell_area_foreach

area 中为每个 GtkCellRenderer 调用 callback

已弃用: 4.10 

gtk_cell_area_foreach_alloc

area 中为每个 GtkCellRenderer 调用 callback,其中包括 cell_area 内的分配矩形。

gtk_cell_area_get_cell_allocation

如果 area 要在 cell_area 中呈现,则派生出 arearenderer 的分配。

已弃用: 4.10 

gtk_cell_area_get_cell_at_position

获取 areaxy 坐标的 GtkCellRenderer,并可以选择为其返回 cell_area 内的完整单元格分配。

已弃用: 4.10 

gtk_cell_area_get_current_path_string

获取当前应用的 GtkTreeIter 的当前 GtkTreePath 字符串,当调用 gtk_cell_area_apply_attributes() 时,它会默认更新,并可用于与 GtkCellArea 子类的呈现器进行交互。

gtk_cell_area_get_edit_widget

获取当前用于编辑当前已编辑单元格的 GtkCellEditable 微件。

已弃用: 4.10 

gtk_cell_area_get_edited_cell

获取 area 中当前正在编辑的 GtkCellRenderer

已弃用: 4.10 

gtk_cell_area_get_focus_cell

检索 area 的当前焦点单元格。

已弃用: 4.10 

gtk_cell_area_get_focus_from_sibling

获取预期将可聚焦的 GtkCellRenderer,该呈现器可能是 renderer 或其兄弟姐妹呈现器。

已弃用: 4.10 

gtk_cell_area_get_focus_siblings

获取 renderer 的焦点兄弟姐妹单元格呈现器。

已弃用: 4.10 

gtk_cell_area_get_preferred_height

检索单元格区域的最小初始高度和自然高度。

已弃用: 4.10 

gtk_cell_area_get_preferred_height_for_width

如果单元格区域将获得指定的 width,则检索其最小高度和自然高度。

已弃用: 4.10 

gtk_cell_area_get_preferred_width

检索单元格区域的最小初始宽度和自然宽度。

已弃用: 4.10 

gtk_cell_area_get_preferred_width_for_height

如果单元格区域将获得指定的 height,则检索其最小宽度和自然宽度。

已弃用: 4.10 

gtk_cell_area_get_request_mode

获取此区域是否更倾向于按高度排列宽度或按宽度排列高度。

gtk_cell_area_has_renderer

检查 area 是否包含 renderer

已弃用: 4.10 

gtk_cell_area_inner_cell_area

此方法是一个方便的函数,供 GtkCellArea 实现用于获取给定 GtkCellRenderer 将要呈现的内部区域。它将移除之前通过 gtk_cell_area_request_renderer() 添加的所有填充。

已弃用: 4.10 

gtk_cell_area_is_activatable

返回 area 是否在向其应用新增属性后能够执行任何操作。

已弃用: 4.10 

gtk_cell_area_is_focus_sibling

返回 sibling 是否是 renderer 的焦点兄弟姐妹呈现器之一(请参阅 gtk_cell_area_add_focus_sibling())。

已弃用: 4.10 

gtk_cell_area_remove

area 中移除 renderer

已弃用: 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 

gtk_cell_area_set_focus_cell

将当前焦点单元格明确设置为 renderer

已弃用: 4.10 

gtk_cell_area_snapshot

根据 area 在给定坐标上的布局对 area 的单元格进行快照。

已弃用: 4.10 

gtk_cell_area_stop_editing

明确停止编辑当前已编辑的单元格。

已弃用: 4.10 

GObject (43)继承的方法

请参阅 GObject 以获取完整的方法列表。

GtkBuildable 继承的方法(1)
gtk_buildable_get_buildable_id

获取 buildable 对象的 ID

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 

属性

Gtk.CellArea:edit-widget

当前正在编辑被编辑单元格的小部件。

Gtk.CellArea:edited-cell

该区域中当前正在编辑的 单元格。

Gtk.CellArea:focus-cell

当前获得 焦点的该区域中的单元格。

信号

Gtk.CellArea::add-editable

指示编辑已在 `renderer` 上启动,且应将 `editable` 添加到 `cell_area` 中的拥有单元格布局的小部件。

Gtk.CellArea::apply-attributes

每当从 `model` 向 `area` 应用属性时,都会发出此信号。

Gtk.CellArea::focus-changed

指示焦点已在此 `area` 上更改。此信号可能是焦点处理或事件 处理的结果而发出的。

Gtk.CellArea::remove-editable

指示编辑已在 `renderer` 上完成,且应从拥有单元格布局的 小部件中移除 `editable`。

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_WIDTHGTK_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.add

使用默认子单元格属性将 `renderer` 添加到 `area`。

已弃用: 4.10 

Gtk.CellAreaClass.apply_attributes

通过从 `tree_model` 中拉取值,将任何连接的属性应用于 `area` 中的渲染器。

已弃用: 4.10 

Gtk.CellAreaClass.copy_context

有时在行需要在一种方向上共享对齐方式,但在相反的方向上可以单独分组时需要这样做。

已弃用: 4.10 

Gtk.CellAreaClass.create_context

创建 `GtkCellArea`Context,用于 `area` 的所有目的。`GtkCellArea`Context 会存储已经对其进行操作的行几何信息,始终对同一行数据使用相同的上下文非常重要(也就是说,应该使用与用于请求这些行数据大小相同的 `GtkCellArea`Context 来渲染和处理事件)。

已弃用: 4.10 

Gtk.CellAreaClass.event

委托事件处理到 GtkCellArea

已弃用: 4.10 

Gtk.CellAreaClass.focus

当焦点传递到 area,或者在 area 内移动时,焦点的所有者布局微件应调用此方法来获取给定的 direction 和行数据。

已弃用: 4.10 

Gtk.CellAreaClass.foreach

area 中为每个 GtkCellRenderer 调用 callback

已弃用: 4.10 

Gtk.CellAreaClass.foreach_alloc

area 中为每个 GtkCellRenderer 调用 callback,其中包括 cell_area 内的分配矩形。

Gtk.CellAreaClass.get_cell_property

应实现此功能来报告特定子级 `GtkCellRenderer` 的子单元格属性值。

Gtk.CellAreaClass.get_preferred_height

检索单元格区域的最小初始高度和自然高度。

已弃用: 4.10 

Gtk.CellAreaClass.get_preferred_height_for_width

如果单元格区域将获得指定的 width,则检索其最小高度和自然高度。

已弃用: 4.10 

Gtk.CellAreaClass.get_preferred_width

检索单元格区域的最小初始宽度和自然宽度。

已弃用: 4.10 

Gtk.CellAreaClass.get_preferred_width_for_height

如果单元格区域将获得指定的 height,则检索其最小宽度和自然宽度。

已弃用: 4.10 

Gtk.CellAreaClass.get_request_mode

获取此区域是否更倾向于按高度排列宽度或按宽度排列高度。

Gtk.CellAreaClass.is_activatable

返回 area 是否在向其应用新增属性后能够执行任何操作。

已弃用: 4.10 

Gtk.CellAreaClass.remove

area 中移除 renderer

已弃用: 4.10 

Gtk.CellAreaClass.set_cell_property

应实现此功能来处理特定 `GtkCellRenderer` 的子单元格属性更改,该属性先前通过 gtk_cell_area_class_install_cell_property() 安装在 `GtkCellAreaClass` 上。

Gtk.CellAreaClass.snapshot

根据 area 在给定坐标上的布局对 area 的单元格进行快照。

已弃用: 4.10 

类方法

gtk_cell_area_class_find_cell_property

按名称查找单元格区域类的单元格属性。

已弃用: 4.10 

gtk_cell_area_class_install_cell_property

在单元格区域类上安装单元格属性。

已弃用: 4.10 

gtk_cell_area_class_list_cell_properties

返回单元格区域类的所有单元格属性。

已弃用: 4.10