Compare commits
9 Commits
matthiasc/
...
wip/baeder
Author | SHA1 | Date | |
---|---|---|---|
|
d9dd36094b | ||
|
aae83422bd | ||
|
6e679f82f8 | ||
|
8b2528d753 | ||
|
2046e32a98 | ||
|
da62103d23 | ||
|
f323a3fb65 | ||
|
c53a060747 | ||
|
ff786f7e6b |
@@ -105,14 +105,10 @@ select_swatch (GtkColorChooserWidget *cc,
|
||||
return;
|
||||
|
||||
if (cc->priv->current != NULL)
|
||||
{
|
||||
gtk_widget_unset_state_flags (GTK_WIDGET (cc->priv->current), GTK_STATE_FLAG_SELECTED);
|
||||
gtk_widget_queue_draw (GTK_WIDGET (cc->priv->current));
|
||||
}
|
||||
gtk_widget_unset_state_flags (GTK_WIDGET (cc->priv->current), GTK_STATE_FLAG_SELECTED);
|
||||
|
||||
gtk_widget_set_state_flags (GTK_WIDGET (swatch), GTK_STATE_FLAG_SELECTED, FALSE);
|
||||
cc->priv->current = swatch;
|
||||
gtk_widget_queue_draw (GTK_WIDGET (cc->priv->current));
|
||||
|
||||
gtk_color_swatch_get_rgba (swatch, &color);
|
||||
|
||||
|
@@ -1648,8 +1648,6 @@ gtk_combo_box_button_state_flags_changed (GtkWidget *widget,
|
||||
gtk_widget_get_state_flags (widget),
|
||||
TRUE);
|
||||
}
|
||||
|
||||
gtk_widget_queue_draw (widget);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -110,3 +110,47 @@ gtk_css_style_change_changes_property (GtkCssStyleChange *change,
|
||||
return _gtk_bitmask_get (change->changes, id);
|
||||
}
|
||||
|
||||
void
|
||||
gtk_css_style_change_print (GtkCssStyleChange *change,
|
||||
GString *string)
|
||||
{
|
||||
int i;
|
||||
GtkCssStyle *old = gtk_css_style_change_get_old_style (change);
|
||||
GtkCssStyle *new = gtk_css_style_change_get_new_style (change);
|
||||
|
||||
for (i = 0; i < GTK_CSS_PROPERTY_N_PROPERTIES; i ++)
|
||||
{
|
||||
if (gtk_css_style_change_changes_property (change, i))
|
||||
{
|
||||
GtkCssStyleProperty *prop;
|
||||
GtkCssValue *value;
|
||||
const char *name;
|
||||
|
||||
prop = _gtk_css_style_property_lookup_by_id (i);
|
||||
name = _gtk_style_property_get_name (GTK_STYLE_PROPERTY (prop));
|
||||
|
||||
value = gtk_css_style_get_value (old, i);
|
||||
_gtk_css_value_print (value, string);
|
||||
|
||||
g_string_append_printf (string, "%s: ", name);
|
||||
_gtk_css_value_print (value, string);
|
||||
g_string_append (string, "\n");
|
||||
|
||||
g_string_append_printf (string, "%s: ", name);
|
||||
value = gtk_css_style_get_value (new, i);
|
||||
_gtk_css_value_print (value, string);
|
||||
g_string_append (string, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
char *
|
||||
gtk_css_style_change_to_string (GtkCssStyleChange *change)
|
||||
{
|
||||
GString *string = g_string_new ("");
|
||||
|
||||
gtk_css_style_change_print (change, string);
|
||||
|
||||
return g_string_free (string, FALSE);
|
||||
}
|
||||
|
@@ -47,7 +47,9 @@ gboolean gtk_css_style_change_affects (GtkCssStyleChange
|
||||
GtkCssAffects affects);
|
||||
gboolean gtk_css_style_change_changes_property (GtkCssStyleChange *change,
|
||||
guint id);
|
||||
void gtk_css_style_change_print (GtkCssStyleChange *change, GString *string);
|
||||
|
||||
char * gtk_css_style_change_to_string (GtkCssStyleChange *change);
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_CSS_STYLE_CHANGE_PRIVATE_H__ */
|
||||
|
@@ -1029,7 +1029,7 @@ _gtk_css_style_property_init_properties (void)
|
||||
GTK_CSS_PROPERTY_COLOR,
|
||||
GDK_TYPE_RGBA,
|
||||
GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
|
||||
GTK_CSS_AFFECTS_FOREGROUND | GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_ICON,
|
||||
GTK_CSS_AFFECTS_FOREGROUND | GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_SYMBOLIC_ICON,
|
||||
color_parse,
|
||||
color_query,
|
||||
color_assign,
|
||||
@@ -1056,7 +1056,7 @@ _gtk_css_style_property_init_properties (void)
|
||||
GTK_CSS_PROPERTY_ICON_THEME,
|
||||
G_TYPE_NONE,
|
||||
GTK_STYLE_PROPERTY_INHERIT,
|
||||
GTK_CSS_AFFECTS_ICON,
|
||||
GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON,
|
||||
icon_theme_value_parse,
|
||||
NULL,
|
||||
NULL,
|
||||
@@ -1065,7 +1065,7 @@ _gtk_css_style_property_init_properties (void)
|
||||
GTK_CSS_PROPERTY_ICON_PALETTE,
|
||||
G_TYPE_NONE,
|
||||
GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_INHERIT,
|
||||
GTK_CSS_AFFECTS_ICON,
|
||||
GTK_CSS_AFFECTS_SYMBOLIC_ICON,
|
||||
icon_palette_parse,
|
||||
NULL,
|
||||
NULL,
|
||||
@@ -1603,7 +1603,7 @@ _gtk_css_style_property_init_properties (void)
|
||||
GTK_CSS_PROPERTY_ICON_SOURCE,
|
||||
G_TYPE_NONE,
|
||||
GTK_STYLE_PROPERTY_ANIMATED,
|
||||
GTK_CSS_AFFECTS_ICON,
|
||||
GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON,
|
||||
css_image_value_parse_with_builtin,
|
||||
NULL,
|
||||
NULL,
|
||||
@@ -1612,7 +1612,7 @@ _gtk_css_style_property_init_properties (void)
|
||||
GTK_CSS_PROPERTY_ICON_SHADOW,
|
||||
G_TYPE_NONE,
|
||||
GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
|
||||
GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_CLIP,
|
||||
GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON | GTK_CSS_AFFECTS_CLIP,
|
||||
shadow_value_parse,
|
||||
NULL,
|
||||
NULL,
|
||||
@@ -1622,7 +1622,7 @@ _gtk_css_style_property_init_properties (void)
|
||||
GTK_CSS_PROPERTY_ICON_STYLE,
|
||||
G_TYPE_NONE,
|
||||
GTK_STYLE_PROPERTY_INHERIT,
|
||||
GTK_CSS_AFFECTS_ICON,
|
||||
GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON,
|
||||
icon_style_parse,
|
||||
NULL,
|
||||
NULL,
|
||||
@@ -1631,7 +1631,7 @@ _gtk_css_style_property_init_properties (void)
|
||||
GTK_CSS_PROPERTY_ICON_TRANSFORM,
|
||||
G_TYPE_NONE,
|
||||
GTK_STYLE_PROPERTY_ANIMATED,
|
||||
GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_CLIP,
|
||||
GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON | GTK_CSS_AFFECTS_CLIP,
|
||||
transform_value_parse,
|
||||
NULL,
|
||||
NULL,
|
||||
|
@@ -105,7 +105,8 @@ typedef guint64 GtkCssChange;
|
||||
* if it was cached.
|
||||
* @GTK_CSS_AFFECTS_TEXT: Text rendering is affected.
|
||||
* @GTK_CSS_AFFECTS_TEXT_ATTRS: Text attributes are affected.
|
||||
* @GTK_CSS_AFFECTS_ICON: Icons and icon rendering is affected.
|
||||
* @GTK_CSS_AFFECTS_ICON: Fullcolor icons and their rendering is affected.
|
||||
* @GTK_CSS_AFFECTS_SYMBOLIC_ICON: Symbolic icons and their rendering is affected.
|
||||
* @GTK_CSS_AFFECTS_OUTLINE: The outline styling is affected. Outlines
|
||||
* only affect elements that can be focused.
|
||||
* @GTK_CSS_AFFECTS_CLIP: Changes in this property may have an effect
|
||||
@@ -128,15 +129,17 @@ typedef enum {
|
||||
GTK_CSS_AFFECTS_TEXT = (1 << 4),
|
||||
GTK_CSS_AFFECTS_TEXT_ATTRS = (1 << 5),
|
||||
GTK_CSS_AFFECTS_ICON = (1 << 6),
|
||||
GTK_CSS_AFFECTS_OUTLINE = (1 << 7),
|
||||
GTK_CSS_AFFECTS_CLIP = (1 << 8),
|
||||
GTK_CSS_AFFECTS_SIZE = (1 << 9)
|
||||
GTK_CSS_AFFECTS_SYMBOLIC_ICON = (1 << 7),
|
||||
GTK_CSS_AFFECTS_OUTLINE = (1 << 8),
|
||||
GTK_CSS_AFFECTS_CLIP = (1 << 9),
|
||||
GTK_CSS_AFFECTS_SIZE = (1 << 10)
|
||||
} GtkCssAffects;
|
||||
|
||||
#define GTK_CSS_AFFECTS_REDRAW (GTK_CSS_AFFECTS_FOREGROUND | \
|
||||
GTK_CSS_AFFECTS_BACKGROUND | \
|
||||
GTK_CSS_AFFECTS_BORDER | \
|
||||
GTK_CSS_AFFECTS_ICON | \
|
||||
GTK_CSS_AFFECTS_SYMBOLIC_ICON | \
|
||||
GTK_CSS_AFFECTS_OUTLINE)
|
||||
|
||||
enum { /*< skip >*/
|
||||
|
@@ -993,8 +993,6 @@ gtk_flow_box_child_set_selected (GtkFlowBoxChild *child,
|
||||
gtk_widget_unset_state_flags (GTK_WIDGET (child),
|
||||
GTK_STATE_FLAG_SELECTED);
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (child));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@@ -42,25 +42,43 @@ struct _GtkIconHelperPrivate {
|
||||
|
||||
guint use_fallback : 1;
|
||||
guint force_scale_pixbuf : 1;
|
||||
guint rendered_surface_is_symbolic : 1;
|
||||
|
||||
cairo_surface_t *rendered_surface;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GtkIconHelper, gtk_icon_helper, GTK_TYPE_CSS_GADGET)
|
||||
|
||||
void
|
||||
static void
|
||||
gtk_icon_helper_invalidate (GtkIconHelper *self)
|
||||
{
|
||||
if (self->priv->rendered_surface != NULL)
|
||||
{
|
||||
cairo_surface_destroy (self->priv->rendered_surface);
|
||||
self->priv->rendered_surface = NULL;
|
||||
self->priv->rendered_surface_is_symbolic = FALSE;
|
||||
}
|
||||
|
||||
if (!GTK_IS_CSS_TRANSIENT_NODE (gtk_css_gadget_get_node (GTK_CSS_GADGET (self))))
|
||||
gtk_widget_queue_resize (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self)));
|
||||
}
|
||||
|
||||
void
|
||||
gtk_icon_helper_invalidate_for_change (GtkIconHelper *self,
|
||||
GtkCssStyleChange *change)
|
||||
{
|
||||
GtkIconHelperPrivate *priv = self->priv;
|
||||
|
||||
if (change &&
|
||||
((gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_SYMBOLIC_ICON) &&
|
||||
priv->rendered_surface_is_symbolic) ||
|
||||
(gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON) &&
|
||||
!priv->rendered_surface_is_symbolic)))
|
||||
{
|
||||
gtk_icon_helper_invalidate (self);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_icon_helper_take_definition (GtkIconHelper *self,
|
||||
GtkImageDefinition *def)
|
||||
@@ -145,8 +163,7 @@ static void
|
||||
gtk_icon_helper_style_changed (GtkCssGadget *gadget,
|
||||
GtkCssStyleChange *change)
|
||||
{
|
||||
if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON))
|
||||
gtk_icon_helper_invalidate (GTK_ICON_HELPER (gadget));
|
||||
gtk_icon_helper_invalidate_for_change (GTK_ICON_HELPER (gadget), change);
|
||||
|
||||
if (!GTK_IS_CSS_TRANSIENT_NODE (gtk_css_gadget_get_node (gadget)))
|
||||
GTK_CSS_GADGET_CLASS (gtk_icon_helper_parent_class)->style_changed (gadget, change);
|
||||
@@ -205,6 +222,7 @@ gtk_icon_helper_init (GtkIconHelper *self)
|
||||
|
||||
self->priv->icon_size = GTK_ICON_SIZE_INVALID;
|
||||
self->priv->pixel_size = -1;
|
||||
self->priv->rendered_surface_is_symbolic = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -419,6 +437,7 @@ ensure_surface_for_gicon (GtkIconHelper *self,
|
||||
gint scale,
|
||||
GIcon *gicon)
|
||||
{
|
||||
GtkIconHelperPrivate *priv = self->priv;
|
||||
GtkIconTheme *icon_theme;
|
||||
gint width, height;
|
||||
GtkIconInfo *info;
|
||||
@@ -478,18 +497,20 @@ ensure_surface_for_gicon (GtkIconHelper *self,
|
||||
symbolic = FALSE;
|
||||
}
|
||||
|
||||
surface = gdk_cairo_surface_create_from_pixbuf (destination, scale, gtk_widget_get_window (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self))));
|
||||
|
||||
if (!symbolic)
|
||||
{
|
||||
GtkCssIconEffect icon_effect;
|
||||
|
||||
surface = gdk_cairo_surface_create_from_pixbuf (destination, scale, gtk_widget_get_window (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self))));
|
||||
icon_effect = _gtk_css_icon_effect_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_EFFECT));
|
||||
gtk_css_icon_effect_apply (icon_effect, surface);
|
||||
}
|
||||
else
|
||||
{
|
||||
surface = gdk_cairo_surface_create_from_pixbuf (destination, scale, gtk_widget_get_window (gtk_css_gadget_get_owner (GTK_CSS_GADGET (self))));
|
||||
priv->rendered_surface_is_symbolic = TRUE;
|
||||
}
|
||||
|
||||
g_object_unref (destination);
|
||||
|
||||
return surface;
|
||||
|
@@ -138,7 +138,8 @@ gboolean _gtk_icon_helper_get_force_scale_pixbuf (GtkIconHelper *self);
|
||||
void _gtk_icon_helper_set_force_scale_pixbuf (GtkIconHelper *self,
|
||||
gboolean force_scale);
|
||||
|
||||
void gtk_icon_helper_invalidate (GtkIconHelper *self);
|
||||
void gtk_icon_helper_invalidate_for_change (GtkIconHelper *self,
|
||||
GtkCssStyleChange *change);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@@ -1923,16 +1923,10 @@ gtk_image_style_updated (GtkWidget *widget)
|
||||
{
|
||||
GtkImage *image = GTK_IMAGE (widget);
|
||||
GtkImagePrivate *priv = image->priv;
|
||||
GtkStyleContext *context;
|
||||
GtkStyleContext *context = gtk_widget_get_style_context (widget);
|
||||
GtkCssStyleChange *change = gtk_style_context_get_change (context);
|
||||
|
||||
context = gtk_widget_get_style_context (widget);
|
||||
if (context)
|
||||
{
|
||||
GtkCssStyleChange *change = gtk_style_context_get_change (context);
|
||||
|
||||
if (change && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON))
|
||||
gtk_icon_helper_invalidate (priv->icon_helper);
|
||||
}
|
||||
gtk_icon_helper_invalidate_for_change (priv->icon_helper, change);
|
||||
|
||||
GTK_WIDGET_CLASS (gtk_image_parent_class)->style_updated (widget);
|
||||
|
||||
|
@@ -1911,7 +1911,6 @@ gtk_list_box_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
|
||||
gtk_widget_set_state_flags (GTK_WIDGET (priv->active_row),
|
||||
GTK_STATE_FLAG_ACTIVE,
|
||||
FALSE);
|
||||
gtk_widget_queue_draw (GTK_WIDGET (box));
|
||||
|
||||
if (n_press == 2 && !priv->activate_single_click)
|
||||
gtk_list_box_activate (box, row);
|
||||
@@ -1989,7 +1988,6 @@ gtk_list_box_multipress_gesture_released (GtkGestureMultiPress *gesture,
|
||||
|
||||
priv->active_row = NULL;
|
||||
priv->active_row_active = FALSE;
|
||||
gtk_widget_queue_draw (GTK_WIDGET (box));
|
||||
|
||||
g_object_unref (box);
|
||||
}
|
||||
|
@@ -11921,8 +11921,6 @@ ensure_state_flag_backdrop (GtkWidget *widget)
|
||||
gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_BACKDROP, FALSE);
|
||||
else
|
||||
gtk_widget_unset_state_flags (widget, GTK_STATE_FLAG_BACKDROP);
|
||||
|
||||
gtk_widget_queue_draw (widget);
|
||||
}
|
||||
|
||||
void
|
||||
|
Reference in New Issue
Block a user