forked from AuroraMiddleware/gtk
92841cb95a
Tue Sep 25 12:34:42 2001 Jonathan Blandford <jrb@redhat.com> * gtk/gtkentry.c: Make a GtkCellEditable (get_widget_window_size): Change to let it honor size_allocate when a CellEditable. * gtk/gtktreeview.c: M-x clean-line-ends. Lots of focus and editable changes. (gtk_tree_view_set_cursor): Now you can set the cursor horizontally, as well as start editing. * gtk/gtkstyle.c (gtk_default_draw_check): changing toggle drawing code to look more like the other check buttons. * gtk/gtkcellrenderertoggle.c (gtk_cell_renderer_toggle_get_size): Change the way we calculate cell size. * gtk/gtkmarshal.list (VOID:STRING,STRING): new marshaller. * demos/gtk-demo/sizegroup.c: Add mnemonics. * gtk/gtkcellrenderer.c (gtk_cell_renderer_get_size): Fix docs. Fix logic. * gtk/gtkcellrenderertext.c: Change to be editable. * gtk/gtkcellrenderertoggle.c: Change to be activatable. * test/testtreesort.c: Fix misspelling * test/testreecolumns.c: Add mnemonics. * test/testreeedit.c: New test program.
68 lines
2.5 KiB
Plaintext
68 lines
2.5 KiB
Plaintext
The way that the GtkTreeView calculates sizing is pretty confusing.
|
|
This is written down to help keep track of it in my head, and thus help
|
|
anyone who hopes to work with the code in the future.
|
|
|
|
HOW THE GTKTREEVIEW CALCULATES SIZE:
|
|
====================================
|
|
When the view is given a new model, the first thing it does is walk
|
|
through the model at the top level, creating an GtkRBNode for each
|
|
element of the model. Each node has a height of 0. The RBTree is kept
|
|
updated as the models structure changes. Additionally, the user can
|
|
expand, collapse, and select rows at this stage. The RBTree is accurate
|
|
-- it just doesn't have a height for any row.
|
|
|
|
When the TreeView is realized, it calculates the actual height of each
|
|
row by walking the tree and measuring them. While doing so, it gets the
|
|
size of each column.
|
|
|
|
|
|
|
|
Columns are initially marked as 'dirty'. When sized,
|
|
gtk_tree_view_check_dirty_and_clean () is called on each column. This
|
|
function walks through all visible columns, and sees if they're dirty or
|
|
not. If any are dirty, it then walks the tree, calling
|
|
gtk_tree_view_calc_size on each row. gtk_tree_view_calc_size requests
|
|
the size of every dirty column in the tree. Finally, it updates the
|
|
size of the widget (including adjustments).
|
|
|
|
|
|
HOW THE GTKTREEVIEWCOLUMN STORES SIZE:
|
|
======================================
|
|
|
|
There are a number of size related fields in the GtkTreeViewColumn
|
|
structure. These are all valid after realization:
|
|
|
|
sizing The sizing method to use when calculating the size
|
|
of the column. Can be grow_only, resizable, auto, and fixed.
|
|
|
|
requested_width The width of the column as requested by the column
|
|
|
|
width The actual width. This is requested width for all
|
|
columns but possibly the last one.
|
|
|
|
fixed_width The requested fixed width for the column iff it's
|
|
sizing type is set to GTK_TREE_VIEW_COLUMN_FIXED.
|
|
|
|
min_width The minimum width the column can be
|
|
|
|
max_width The maximum width the column can be. This can be
|
|
overridden for the last column, if the tree_view is
|
|
actually wider than the sum of all of the columns
|
|
requested_widths.
|
|
|
|
The following invariants are true:
|
|
|
|
min_width is less than or equal to width
|
|
|
|
max_width is greater than or equal to width
|
|
|
|
(sizing == GTK_TREE_VIEW_COLUMN_FIXED) => (requested_width == fixed_width)
|
|
|
|
(column != last visible column) => width == requested_width
|
|
|
|
|
|
/* Functions needed by gtktreeview for gtktreeviewcolumn */
|
|
size_request_button
|
|
set_width (for resizing resizable columns)
|
|
calculate_width
|