Centralize computations of border and padding into StThemeNode

Rather than repeating the computation of borders in many different
widget subclasses, add helper functions:

 st_theme_node_adjust_for_height()
 st_theme_node_adjust_preferred_width()
 st_theme_node_adjust_for_width()
 st_theme_node_adjust_preferred_height()
 st_theme_node_get_content_box()

That are used in get_preferred_width()/get_preferred_height() and
allocate() methods to consistently apply the necessary adjustments.
This allows removing the StPadding type.

Queueing a relayout when the borders/padding change is moved from
st_widget_real_style_changed() to the invoking code to allow access
to the old StThemeNode for comparison. (Should this be added as
a parameter to the signal?)

Borders are included in the geometry adjustments, but borders
are not yet drawn.

https://bugzilla.gnome.org/show_bug.cgi?id=595993
This commit is contained in:
Owen W. Taylor
2009-09-20 13:41:13 -04:00
parent 8c72623da3
commit 076e902b2c
12 changed files with 446 additions and 387 deletions

View File

@ -37,29 +37,6 @@
G_BEGIN_DECLS
#define ST_TYPE_PADDING (st_padding_get_type ())
typedef struct _StPadding StPadding;
/**
* StPadding:
* @top: padding from the top
* @right: padding from the right
* @bottom: padding from the bottom
* @left: padding from the left
*
* The padding from the internal border of the parent container.
*/
struct _StPadding
{
gfloat top;
gfloat right;
gfloat bottom;
gfloat left;
};
GType st_padding_get_type (void) G_GNUC_CONST;
typedef enum {
ST_ALIGN_START,
ST_ALIGN_MIDDLE,