forked from AuroraMiddleware/gtk
snapshot: Port to GtkSwitch
Included is the addition of gtk_snapshot_render_layout(), which is meant to replace gtk_render_layout().
This commit is contained in:
parent
da207c9fdd
commit
e3b1c9f1cd
@ -20,6 +20,8 @@
|
|||||||
#include "gtksnapshot.h"
|
#include "gtksnapshot.h"
|
||||||
#include "gtksnapshotprivate.h"
|
#include "gtksnapshotprivate.h"
|
||||||
|
|
||||||
|
#include "gtkcssrgbavalueprivate.h"
|
||||||
|
#include "gtkcssshadowsvalueprivate.h"
|
||||||
#include "gtkrenderbackgroundprivate.h"
|
#include "gtkrenderbackgroundprivate.h"
|
||||||
#include "gtkrenderborderprivate.h"
|
#include "gtkrenderborderprivate.h"
|
||||||
#include "gtkstylecontextprivate.h"
|
#include "gtkstylecontextprivate.h"
|
||||||
@ -295,3 +297,45 @@ gtk_snapshot_render_frame (GtkSnapshot *state,
|
|||||||
gtk_style_context_get_junction_sides (context));
|
gtk_style_context_get_junction_sides (context));
|
||||||
gtk_snapshot_translate_2d (state, -x, -y);
|
gtk_snapshot_translate_2d (state, -x, -y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gtk_snapshot_render_layout (GtkSnapshot *state,
|
||||||
|
GtkStyleContext *context,
|
||||||
|
gdouble x,
|
||||||
|
gdouble y,
|
||||||
|
PangoLayout *layout)
|
||||||
|
{
|
||||||
|
const GdkRGBA *fg_color;
|
||||||
|
graphene_rect_t bounds;
|
||||||
|
GtkBorder shadow_extents;
|
||||||
|
PangoRectangle ink_rect;
|
||||||
|
GtkCssValue *shadow;
|
||||||
|
cairo_t *cr;
|
||||||
|
|
||||||
|
g_return_if_fail (state != NULL);
|
||||||
|
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
|
||||||
|
g_return_if_fail (PANGO_IS_LAYOUT (layout));
|
||||||
|
|
||||||
|
fg_color = _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR));
|
||||||
|
shadow = _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_SHADOW);
|
||||||
|
pango_layout_get_pixel_extents (layout, &ink_rect, NULL);
|
||||||
|
_gtk_css_shadows_value_get_extents (shadow, &shadow_extents);
|
||||||
|
graphene_rect_init (&bounds,
|
||||||
|
ink_rect.x - shadow_extents.left,
|
||||||
|
ink_rect.y - shadow_extents.top,
|
||||||
|
ink_rect.width + shadow_extents.left + shadow_extents.right,
|
||||||
|
ink_rect.height + shadow_extents.top + shadow_extents.bottom);
|
||||||
|
|
||||||
|
gtk_snapshot_translate_2d (state, x, y);
|
||||||
|
|
||||||
|
cr = gtk_snapshot_append_cairo_node (state, &bounds, "Text<%dchars>", pango_layout_get_character_count (layout));
|
||||||
|
|
||||||
|
_gtk_css_shadows_value_paint_layout (shadow, cr, layout);
|
||||||
|
|
||||||
|
gdk_cairo_set_source_rgba (cr, fg_color);
|
||||||
|
pango_cairo_show_layout (cr, layout);
|
||||||
|
|
||||||
|
cairo_destroy (cr);
|
||||||
|
gtk_snapshot_translate_2d (state, -x, -y);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -96,6 +96,12 @@ void gtk_snapshot_render_frame (GtkSnapshot
|
|||||||
gdouble y,
|
gdouble y,
|
||||||
gdouble width,
|
gdouble width,
|
||||||
gdouble height);
|
gdouble height);
|
||||||
|
GDK_AVAILABLE_IN_3_90
|
||||||
|
void gtk_snapshot_render_layout (GtkSnapshot *state,
|
||||||
|
GtkStyleContext *context,
|
||||||
|
gdouble x,
|
||||||
|
gdouble y,
|
||||||
|
PangoLayout *layout);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -532,25 +532,25 @@ gtk_switch_unmap (GtkWidget *widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gtk_switch_render_slider (GtkCssGadget *gadget,
|
gtk_switch_snapshot_slider (GtkCssGadget *gadget,
|
||||||
cairo_t *cr,
|
GtkSnapshot *snapshot,
|
||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
int width,
|
int width,
|
||||||
int height,
|
int height,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
return gtk_widget_has_visible_focus (gtk_css_gadget_get_owner (gadget));
|
return gtk_widget_has_visible_focus (gtk_css_gadget_get_owner (gadget));
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gtk_switch_render_trough (GtkCssGadget *gadget,
|
gtk_switch_snapshot_trough (GtkCssGadget *gadget,
|
||||||
cairo_t *cr,
|
GtkSnapshot *snapshot,
|
||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
int width,
|
int width,
|
||||||
int height,
|
int height,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *widget = gtk_css_gadget_get_owner (gadget);
|
GtkWidget *widget = gtk_css_gadget_get_owner (gadget);
|
||||||
GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
|
GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
|
||||||
@ -563,18 +563,27 @@ gtk_switch_render_trough (GtkCssGadget *gadget,
|
|||||||
label_x = x + ((width / 2) - rect.width) / 2;
|
label_x = x + ((width / 2) - rect.width) / 2;
|
||||||
label_y = y + (height - rect.height) / 2;
|
label_y = y + (height - rect.height) / 2;
|
||||||
|
|
||||||
gtk_render_layout (context, cr, label_x, label_y, priv->on_layout);
|
gtk_snapshot_render_layout (snapshot, context, label_x, label_y, priv->on_layout);
|
||||||
|
|
||||||
pango_layout_get_pixel_extents (priv->off_layout, NULL, &rect);
|
pango_layout_get_pixel_extents (priv->off_layout, NULL, &rect);
|
||||||
|
|
||||||
label_x = x + (width / 2) + ((width / 2) - rect.width) / 2;
|
label_x = x + (width / 2) + ((width / 2) - rect.width) / 2;
|
||||||
label_y = y + (height - rect.height) / 2;
|
label_y = y + (height - rect.height) / 2;
|
||||||
|
|
||||||
gtk_render_layout (context, cr, label_x, label_y, priv->off_layout);
|
gtk_snapshot_render_layout (snapshot, context, label_x, label_y, priv->off_layout);
|
||||||
|
|
||||||
|
gtk_css_gadget_snapshot (priv->slider_gadget, snapshot);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_switch_snapshot (GtkWidget *widget,
|
||||||
|
GtkSnapshot *snapshot)
|
||||||
|
{
|
||||||
|
gtk_css_gadget_snapshot (GTK_SWITCH (widget)->priv->gadget, snapshot);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_switch_set_action_name (GtkActionable *actionable,
|
gtk_switch_set_action_name (GtkActionable *actionable,
|
||||||
const gchar *action_name)
|
const gchar *action_name)
|
||||||
@ -723,27 +732,6 @@ state_set (GtkSwitch *sw, gboolean state)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GskRenderNode *
|
|
||||||
gtk_switch_get_render_node (GtkWidget *widget, GskRenderer *renderer)
|
|
||||||
{
|
|
||||||
GtkSwitchPrivate *priv =gtk_switch_get_instance_private (GTK_SWITCH (widget));
|
|
||||||
GskRenderNode *trough_node;
|
|
||||||
GskRenderNode *slider_node;
|
|
||||||
|
|
||||||
trough_node = gtk_css_gadget_get_render_node (priv->gadget, renderer, FALSE);
|
|
||||||
|
|
||||||
if (trough_node == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
slider_node = gtk_css_gadget_get_render_node (priv->slider_gadget, renderer,
|
|
||||||
gtk_widget_has_visible_focus (widget));
|
|
||||||
|
|
||||||
gsk_render_node_append_child (trough_node, slider_node);
|
|
||||||
gsk_render_node_unref (slider_node);
|
|
||||||
|
|
||||||
return trough_node;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_switch_class_init (GtkSwitchClass *klass)
|
gtk_switch_class_init (GtkSwitchClass *klass)
|
||||||
{
|
{
|
||||||
@ -790,11 +778,11 @@ gtk_switch_class_init (GtkSwitchClass *klass)
|
|||||||
widget_class->unrealize = gtk_switch_unrealize;
|
widget_class->unrealize = gtk_switch_unrealize;
|
||||||
widget_class->map = gtk_switch_map;
|
widget_class->map = gtk_switch_map;
|
||||||
widget_class->unmap = gtk_switch_unmap;
|
widget_class->unmap = gtk_switch_unmap;
|
||||||
|
widget_class->snapshot = gtk_switch_snapshot;
|
||||||
widget_class->enter_notify_event = gtk_switch_enter;
|
widget_class->enter_notify_event = gtk_switch_enter;
|
||||||
widget_class->leave_notify_event = gtk_switch_leave;
|
widget_class->leave_notify_event = gtk_switch_leave;
|
||||||
widget_class->screen_changed = gtk_switch_screen_changed;
|
widget_class->screen_changed = gtk_switch_screen_changed;
|
||||||
widget_class->style_updated = gtk_switch_style_updated;
|
widget_class->style_updated = gtk_switch_style_updated;
|
||||||
widget_class->get_render_node = gtk_switch_get_render_node;
|
|
||||||
|
|
||||||
klass->activate = gtk_switch_activate;
|
klass->activate = gtk_switch_activate;
|
||||||
klass->state_set = state_set;
|
klass->state_set = state_set;
|
||||||
@ -877,8 +865,8 @@ gtk_switch_init (GtkSwitch *self)
|
|||||||
GTK_WIDGET (self),
|
GTK_WIDGET (self),
|
||||||
gtk_switch_get_content_size,
|
gtk_switch_get_content_size,
|
||||||
gtk_switch_allocate_contents,
|
gtk_switch_allocate_contents,
|
||||||
gtk_switch_render_trough,
|
|
||||||
NULL,
|
NULL,
|
||||||
|
gtk_switch_snapshot_trough,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
@ -888,8 +876,8 @@ gtk_switch_init (GtkSwitch *self)
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
gtk_switch_render_slider,
|
|
||||||
NULL,
|
NULL,
|
||||||
|
gtk_switch_snapshot_slider,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user