summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2016-12-31 02:48:25 +0100
committerBenjamin Otte <otte@redhat.com>2016-12-31 02:49:47 +0100
commit959f80e6e9b120ffc905d0f5be7740cc933d055f (patch)
treef855acdf567fc0f24cee4620dc8eff8c7ea1ea0c
parent45fbc25e5e86a44dff1c40e2592c8c69e26f23fb (diff)
downloadgtk+-959f80e6e9b120ffc905d0f5be7740cc933d055f.tar.gz
css: Implement filter
So far, it's only implemented for widgets, not for gadgets. Not sure how to do it for gadgets without conflicts for widget gadgets yet...
-rw-r--r--gtk/gtkcssstylepropertyimpl.c8
-rw-r--r--gtk/gtkwidget.c9
2 files changed, 16 insertions, 1 deletions
diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c
index 15ea1cac46..20d2988186 100644
--- a/gtk/gtkcssstylepropertyimpl.c
+++ b/gtk/gtkcssstylepropertyimpl.c
@@ -1594,6 +1594,14 @@ _gtk_css_style_property_init_properties (void)
opacity_parse,
opacity_query,
_gtk_css_number_value_new (1, GTK_CSS_NUMBER));
+ gtk_css_style_property_register ("filter",
+ GTK_CSS_PROPERTY_FILTER,
+ G_TYPE_NONE,
+ GTK_STYLE_PROPERTY_ANIMATED,
+ GTK_CSS_AFFECTS_REDRAW,
+ filter_value_parse,
+ NULL,
+ gtk_css_filter_value_new_none ());
/* Private property holding the binding sets */
gtk_css_style_property_register ("-gtk-key-bindings",
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 04dfc04d5e..8b52b6c348 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -37,9 +37,10 @@
#include "gtkaccelmapprivate.h"
#include "gtkaccelgroupprivate.h"
#include "gtkclipboard.h"
-#include "gtkcssstylepropertyprivate.h"
+#include "gtkcssfiltervalueprivate.h"
#include "gtkcssnumbervalueprivate.h"
#include "gtkcssshadowsvalueprivate.h"
+#include "gtkcssstylepropertyprivate.h"
#include "gtkintl.h"
#include "gtkmarshalers.h"
#include "gtkselectionprivate.h"
@@ -15534,6 +15535,7 @@ gtk_widget_snapshot (GtkWidget *widget,
{
GtkWidgetClass *klass = GTK_WIDGET_GET_CLASS (widget);
graphene_rect_t bounds;
+ GtkCssValue *filter_value;
GtkAllocation clip;
GtkAllocation alloc;
RenderMode mode;
@@ -15563,6 +15565,9 @@ gtk_widget_snapshot (GtkWidget *widget,
if (GTK_DEBUG_CHECK (SNAPSHOT))
gtk_snapshot_push (snapshot, TRUE, "%s<%p>", gtk_widget_get_name (widget), widget);
+ filter_value = _gtk_style_context_peek_property (gtk_widget_get_style_context (widget), GTK_CSS_PROPERTY_FILTER);
+ gtk_css_filter_value_push_snapshot (filter_value, snapshot);
+
if (mode == RENDER_DRAW)
{
cairo_t *cr;
@@ -15599,6 +15604,8 @@ gtk_widget_snapshot (GtkWidget *widget,
gtk_snapshot_pop_and_append (snapshot);
}
+ gtk_css_filter_value_pop_snapshot (filter_value, snapshot);
+
if (GTK_DEBUG_CHECK (SNAPSHOT))
gtk_snapshot_pop_and_append (snapshot);
}