X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcsstypes.c;h=e67dceac56e5f9ca6edc4a640fd2b638a597e9f6;hb=67f5e595a796a8321d6dc7737c58476564998c07;hp=f3031e1f1503d1b3e431647583bab0fcde458179;hpb=edbc8e4f57b871ee151443fe867f6e347682fe8d;p=~andy%2Fgtk diff --git a/gtk/gtkcsstypes.c b/gtk/gtkcsstypes.c index f3031e1f1..e67dceac5 100644 --- a/gtk/gtkcsstypes.c +++ b/gtk/gtkcsstypes.c @@ -22,20 +22,6 @@ #include "gtkcssnumbervalueprivate.h" #include "gtkstylecontextprivate.h" -#define DEFINE_BOXED_TYPE_WITH_COPY_FUNC(TypeName, type_name) \ -\ -static TypeName * \ -type_name ## _copy (const TypeName *foo) \ -{ \ - return g_memdup (foo, sizeof (TypeName)); \ -} \ -\ -G_DEFINE_BOXED_TYPE (TypeName, type_name, type_name ## _copy, g_free) - -DEFINE_BOXED_TYPE_WITH_COPY_FUNC (GtkCssBackgroundSize, _gtk_css_background_size) -DEFINE_BOXED_TYPE_WITH_COPY_FUNC (GtkCssBackgroundPosition, _gtk_css_background_position) -DEFINE_BOXED_TYPE_WITH_COPY_FUNC (GtkCssBorderImageRepeat, _gtk_css_border_image_repeat) - typedef struct _GtkCssChangeTranslation GtkCssChangeTranslation; struct _GtkCssChangeTranslation { GtkCssChange from; @@ -70,6 +56,8 @@ _gtk_css_change_for_sibling (GtkCssChange match) { GTK_CSS_CHANGE_NAME, GTK_CSS_CHANGE_SIBLING_NAME }, { GTK_CSS_CHANGE_POSITION, GTK_CSS_CHANGE_SIBLING_POSITION }, { GTK_CSS_CHANGE_STATE, GTK_CSS_CHANGE_SIBLING_STATE }, + { GTK_CSS_CHANGE_SOURCE, 0 }, + { GTK_CSS_CHANGE_ANIMATE, 0 } }; return gtk_css_change_translate (match, table, G_N_ELEMENTS (table)); @@ -86,130 +74,19 @@ _gtk_css_change_for_child (GtkCssChange match) { GTK_CSS_CHANGE_SIBLING_CLASS, GTK_CSS_CHANGE_PARENT_SIBLING_CLASS }, { GTK_CSS_CHANGE_SIBLING_NAME, GTK_CSS_CHANGE_PARENT_SIBLING_NAME }, { GTK_CSS_CHANGE_SIBLING_POSITION, GTK_CSS_CHANGE_PARENT_SIBLING_POSITION }, - { GTK_CSS_CHANGE_SIBLING_STATE, GTK_CSS_CHANGE_PARENT_SIBLING_STATE } + { GTK_CSS_CHANGE_SIBLING_STATE, GTK_CSS_CHANGE_PARENT_SIBLING_STATE }, + { GTK_CSS_CHANGE_SOURCE, 0 }, + { GTK_CSS_CHANGE_ANIMATE, 0 } }; return gtk_css_change_translate (match, table, G_N_ELEMENTS (table)); } -void -_gtk_css_number_init (GtkCssNumber *number, - double value, - GtkCssUnit unit) -{ - number->value = value; - number->unit = unit; -} - -gboolean -_gtk_css_number_equal (const GtkCssNumber *one, - const GtkCssNumber *two) -{ - return one->unit == two->unit && - one->value == two->value; -} - -double -_gtk_css_number_get (const GtkCssNumber *number, - double one_hundred_percent) -{ - if (number->unit == GTK_CSS_PERCENT) - return number->value * one_hundred_percent * 0.01; - else - return number->value; -} - -gboolean -_gtk_css_number_compute (GtkCssNumber *dest, - const GtkCssNumber *src, - GtkStyleContext *context) +GtkCssDependencies +_gtk_css_dependencies_union (GtkCssDependencies first, + GtkCssDependencies second) { - switch (src->unit) - { - default: - g_assert_not_reached(); - /* fall through */ - case GTK_CSS_PERCENT: - case GTK_CSS_NUMBER: - case GTK_CSS_PX: - case GTK_CSS_DEG: - dest->value = src->value; - dest->unit = src->unit; - break; - case GTK_CSS_PT: - dest->value = src->value * 96.0 / 72.0; - dest->unit = GTK_CSS_PX; - break; - case GTK_CSS_PC: - dest->value = src->value * 96.0 / 72.0 * 12.0; - dest->unit = GTK_CSS_PX; - break; - case GTK_CSS_IN: - dest->value = src->value * 96.0; - dest->unit = GTK_CSS_PX; - break; - case GTK_CSS_CM: - dest->value = src->value * 96.0 * 0.39370078740157477; - dest->unit = GTK_CSS_PX; - break; - case GTK_CSS_MM: - dest->value = src->value * 96.0 * 0.039370078740157477; - dest->unit = GTK_CSS_PX; - break; - case GTK_CSS_EM: - dest->value = src->value * _gtk_css_number_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_FONT_SIZE), 100); - dest->unit = GTK_CSS_PX; - break; - case GTK_CSS_EX: - /* for now we pretend ex is half of em */ - dest->value = src->value * _gtk_css_number_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_FONT_SIZE), 100); - dest->unit = GTK_CSS_PX; - break; - case GTK_CSS_RAD: - dest->value = 360 * src->value / (2 * G_PI); - dest->unit = GTK_CSS_DEG; - break; - case GTK_CSS_GRAD: - dest->value = 360 * src->value / 400.0; - dest->unit = GTK_CSS_DEG; - break; - case GTK_CSS_TURN: - dest->value = 360 * src->value; - dest->unit = GTK_CSS_DEG; - break; - } - - return !_gtk_css_number_equal (src, dest); + return (first & ~GTK_CSS_EQUALS_PARENT) | ((first & GTK_CSS_EQUALS_PARENT) ? GTK_CSS_DEPENDS_ON_PARENT : 0) + | (second & ~GTK_CSS_EQUALS_PARENT) | ((second & GTK_CSS_EQUALS_PARENT) ? GTK_CSS_DEPENDS_ON_PARENT : 0); } -void -_gtk_css_number_print (const GtkCssNumber *number, - GString *string) -{ - char buf[G_ASCII_DTOSTR_BUF_SIZE]; - - const char *names[] = { - /* [GTK_CSS_NUMBER] = */ "", - /* [GTK_CSS_PERCENT] = */ "%", - /* [GTK_CSS_PX] = */ "px", - /* [GTK_CSS_PT] = */ "pt", - /* [GTK_CSS_EM] = */ "em", - /* [GTK_CSS_EX] = */ "ex", - /* [GTK_CSS_PC] = */ "pc", - /* [GTK_CSS_IN] = */ "in", - /* [GTK_CSS_CM] = */ "cm", - /* [GTK_CSS_MM] = */ "mm", - /* [GTK_CSS_RAD] = */ "rad", - /* [GTK_CSS_DEG] = */ "deg", - /* [GTK_CSS_GRAD] = */ "grad", - /* [GTK_CSS_TURN] = */ "turn", - }; - - g_return_if_fail (number != NULL); - g_return_if_fail (string != NULL); - - g_ascii_dtostr (buf, sizeof (buf), number->value); - g_string_append (string, buf); - if (number->value != 0.0) - g_string_append (string, names[number->unit]); -}