#include <string.h>
-#include "gtkcellsizerequest.h"
#include "gtktreeview.h"
#include "gtktreeprivate.h"
#include "gtkcelllayout.h"
#include "gtkintl.h"
+/**
+ * SECTION:gtktreeviewcolumn
+ * @Short_description: A visible column in a GtkTreeView widget
+ * @Title: GtkTreeViewColumn
+ * @See_also: #GtkTreeView, #GtkTreeSelection, #GtkTreeDnd, #GtkTreeMode, #GtkTreeSortable,
+ * #GtkTreeModelSort, #GtkListStore, #GtkTreeStore, #GtkCellRenderer, #GtkCellEditable,
+ * #GtkCellRendererPixbuf, #GtkCellRendererText, #GtkCellRendererToggle
+ *
+ * The GtkTreeViewColumn object represents a visible column in a #GtkTreeView widget.
+ * It allows to set properties of the column header, and functions as a holding pen for
+ * the cell renderers which determine how the data in the column is displayed.
+ *
+ * Please refer to the <link linkend="TreeWidget">tree widget conceptual overview</link>
+ * for an overview of all the objects and data types related to the tree widget and how
+ * they work together.
+ */
+
+
enum
{
PROP_0,
static guint tree_column_signals[LAST_SIGNAL] = { 0 };
-G_DEFINE_TYPE_WITH_CODE (GtkTreeViewColumn, gtk_tree_view_column, GTK_TYPE_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (GtkTreeViewColumn, gtk_tree_view_column, G_TYPE_INITIALLY_UNOWNED,
G_IMPLEMENT_INTERFACE (GTK_TYPE_CELL_LAYOUT,
gtk_tree_view_column_cell_layout_init)
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
((GdkEventButton *)event)->button == 1)
{
column->maybe_reordered = TRUE;
- gdk_window_get_pointer (GTK_BUTTON (widget)->event_window,
+ gdk_window_get_pointer (gtk_button_get_event_window (GTK_BUTTON (widget)),
&column->drag_x,
&column->drag_y,
NULL);
attr.window_type = GDK_WINDOW_CHILD;
attr.wclass = GDK_INPUT_ONLY;
attr.visual = gtk_widget_get_visual (GTK_WIDGET (tree_view));
- attr.colormap = gtk_widget_get_colormap (GTK_WIDGET (tree_view));
attr.event_mask = gtk_widget_get_events (GTK_WIDGET (tree_view)) |
(GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_HINT_MASK |
GDK_KEY_PRESS_MASK);
attributes_mask = GDK_WA_CURSOR | GDK_WA_X | GDK_WA_Y;
- attr.cursor = gdk_cursor_new_for_display (gdk_drawable_get_display (tree_view->priv->header_window),
+ attr.cursor = gdk_cursor_new_for_display (gdk_window_get_display (tree_view->priv->header_window),
GDK_SB_H_DOUBLE_ARROW);
attr.y = 0;
attr.width = TREE_VIEW_DRAG_WIDTH;
/**
* gtk_tree_view_column_get_widget:
* @tree_column: A #GtkTreeViewColumn.
- *
- * Returns the #GtkWidget in the button on the column header. If a custom
- * widget has not been set then %NULL is returned.
- *
- * Return value: The #GtkWidget in the column header, or %NULL
+ *
+ * Returns the #GtkWidget in the button on the column header.
+ * If a custom widget has not been set then %NULL is returned.
+ *
+ * Return value: (transfer none): The #GtkWidget in the column
+ * header, or %NULL
**/
GtkWidget *
gtk_tree_view_column_get_widget (GtkTreeViewColumn *tree_column)
if (first_cell == FALSE && width)
*width += tree_column->spacing;
- gtk_cell_size_request_get_size (GTK_CELL_SIZE_REQUEST (info->cell),
- GTK_WIDGET (tree_column->tree_view),
- &min_size, NULL);
+ gtk_cell_renderer_get_preferred_size (info->cell,
+ GTK_WIDGET (tree_column->tree_view),
+ &min_size, NULL);
if (height)
* height = MAX (*height, min_size.height + focus_line_width * 2);
static gboolean
gtk_tree_view_column_cell_process_action (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
guint flags,
gint action,
- const GdkRectangle *expose_area, /* RENDER */
GdkRectangle *focus_rectangle, /* FOCUS */
GtkCellEditable **editable_widget, /* EVENT */
GdkEvent *event, /* EVENT */
GList *list;
GdkRectangle real_cell_area;
GdkRectangle real_background_area;
- GdkRectangle real_expose_area = *cell_area;
gint depth = 0;
gint expand_cell_count = 0;
gint full_requested_width = 0;
if (action == CELL_ACTION_RENDER)
{
gtk_cell_renderer_render (info->cell,
- window,
- tree_column->tree_view,
- &rtl_background_area,
- &rtl_cell_area,
- &real_expose_area,
- flags);
+ cr,
+ tree_column->tree_view,
+ &rtl_background_area,
+ &rtl_cell_area,
+ flags);
}
/* FOCUS */
else if (action == CELL_ACTION_FOCUS)
gint x_offset, y_offset;
GtkRequisition min_size;
- gtk_cell_size_request_get_size (GTK_CELL_SIZE_REQUEST (info->cell),
- tree_column->tree_view,
- &min_size, NULL);
+ gtk_cell_renderer_get_preferred_size (info->cell,
+ tree_column->tree_view,
+ &min_size, NULL);
_gtk_cell_renderer_calc_offset (info->cell, &rtl_cell_area,
gtk_widget_get_direction (tree_column->tree_view),
if (action == CELL_ACTION_RENDER)
{
gtk_cell_renderer_render (info->cell,
- window,
- tree_column->tree_view,
- &rtl_background_area,
- &rtl_cell_area,
- &real_expose_area,
- flags);
+ cr,
+ tree_column->tree_view,
+ &rtl_background_area,
+ &rtl_cell_area,
+ flags);
}
/* FOCUS */
else if (action == CELL_ACTION_FOCUS)
gint x_offset, y_offset;
GtkRequisition min_size;
- gtk_cell_size_request_get_size (GTK_CELL_SIZE_REQUEST (info->cell),
- tree_column->tree_view,
- &min_size, NULL);
+ gtk_cell_renderer_get_preferred_size (info->cell,
+ tree_column->tree_view,
+ &min_size, NULL);
_gtk_cell_renderer_calc_offset (info->cell, &rtl_cell_area,
gtk_widget_get_direction (tree_column->tree_view),
/**
* gtk_tree_view_column_cell_render:
* @tree_column: A #GtkTreeViewColumn.
- * @window: a #GdkDrawable to draw to
+ * @cr: cairo context to draw to
* @background_area: entire cell area (including tree expanders and maybe padding on the sides)
* @cell_area: area normally rendered by a cell renderer
- * @expose_area: area that actually needs updating
* @flags: flags that affect rendering
*
* Renders the cell contained by #tree_column. This is used primarily by the
**/
void
_gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
- const GdkRectangle *expose_area,
guint flags)
{
g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
+ g_return_if_fail (cr != NULL);
g_return_if_fail (background_area != NULL);
g_return_if_fail (cell_area != NULL);
- g_return_if_fail (expose_area != NULL);
+
+ cairo_save (cr);
gtk_tree_view_column_cell_process_action (tree_column,
- window,
+ cr,
background_area,
cell_area,
flags,
CELL_ACTION_RENDER,
- expose_area,
NULL, NULL, NULL, NULL);
+
+ cairo_restore (cr);
}
gboolean
g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column), FALSE);
return gtk_tree_view_column_cell_process_action (tree_column,
- NULL,
+ NULL,
background_area,
cell_area,
flags,
CELL_ACTION_EVENT,
- NULL, NULL,
+ NULL,
editable_widget,
event,
path_string);
cell_area,
0,
CELL_ACTION_FOCUS,
- NULL,
focus_area,
NULL, NULL, NULL);
}
void
_gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
- const GdkRectangle *expose_area,
guint flags)
{
gint focus_line_width;
GtkStateType cell_state;
g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
+ g_return_if_fail (cr != NULL);
+
gtk_widget_style_get (GTK_WIDGET (tree_column->tree_view),
"focus-line-width", &focus_line_width, NULL);
if (tree_column->editable_widget)
{
GdkRectangle focus_rectangle;
gtk_tree_view_column_cell_process_action (tree_column,
- window,
+ cr,
background_area,
cell_area,
flags,
CELL_ACTION_FOCUS,
- expose_area,
&focus_rectangle,
NULL, NULL, NULL);
(flags & GTK_CELL_RENDERER_PRELIT ? GTK_STATE_PRELIGHT :
(flags & GTK_CELL_RENDERER_INSENSITIVE ? GTK_STATE_INSENSITIVE : GTK_STATE_NORMAL));
gtk_paint_focus (gtk_widget_get_style (tree_column->tree_view),
- window,
- cell_state,
- cell_area,
- tree_column->tree_view,
- "treeview",
- focus_rectangle.x,
- focus_rectangle.y,
- focus_rectangle.width,
- focus_rectangle.height);
+ cr,
+ cell_state,
+ tree_column->tree_view,
+ "treeview",
+ focus_rectangle.x,
+ focus_rectangle.y,
+ focus_rectangle.width,
+ focus_rectangle.height);
}
}
* gtk_tree_view_column_get_tree_view:
* @tree_column: A #GtkTreeViewColumn
*
- * Returns the #GtkTreeView wherein @tree_column has been inserted. If
- * @column is currently not inserted in any tree view, %NULL is
+ * Returns the #GtkTreeView wherein @tree_column has been inserted.
+ * If @column is currently not inserted in any tree view, %NULL is
* returned.
*
- * Return value: The tree view wherein @column has been inserted if any,
- * %NULL otherwise.
+ * Return value: (transfer none): The tree view wherein @column has
+ * been inserted if any, %NULL otherwise.
*
* Since: 2.12
*/