[gnome-shell/wip/resource-scale: 7/7] StDrawingArea: use clutter_canvas internal scaling for proper painting
- From: Marco Trevisan <marcotrevi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/resource-scale: 7/7] StDrawingArea: use clutter_canvas internal scaling for proper painting
- Date: Mon, 31 Jul 2017 12:38:47 +0000 (UTC)
commit 4730bb16e92712c55d222e264828cca69a989c27
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Mon Jul 31 14:26:21 2017 +0200
StDrawingArea: use clutter_canvas internal scaling for proper painting
src/st/st-drawing-area.c | 34 +++++++++++++++++++---------------
1 files changed, 19 insertions(+), 15 deletions(-)
---
diff --git a/src/st/st-drawing-area.c b/src/st/st-drawing-area.c
index 1122ef1..6454add 100644
--- a/src/st/st-drawing-area.c
+++ b/src/st/st-drawing-area.c
@@ -62,18 +62,12 @@ draw_content (ClutterCanvas *canvas,
{
StDrawingArea *area = ST_DRAWING_AREA (user_data);
StDrawingAreaPrivate *priv = st_drawing_area_get_instance_private (area);
- float resource_scale = 1.0f;
-
- st_widget_get_resource_scale (ST_WIDGET (area), &resource_scale);
priv->context = cr;
priv->in_repaint = TRUE;
clutter_cairo_clear (cr);
- cairo_scale(cr, resource_scale, resource_scale);
- cairo_save(cr);
g_signal_emit (area, st_drawing_area_signals[REPAINT], 0);
- cairo_restore(cr);
priv->context = NULL;
priv->in_repaint = FALSE;
@@ -92,17 +86,23 @@ st_drawing_area_allocate (ClutterActor *self,
int width, height;
float resource_scale;
+ if (!st_widget_get_resource_scale (ST_WIDGET (self), &resource_scale))
+ {
+ ClutterActorBox invalid = CLUTTER_ACTOR_BOX_INIT_ZERO;
+ clutter_actor_set_allocation (self, &invalid, 0);
+ return;
+ }
+
clutter_actor_set_allocation (self, box, flags);
st_theme_node_get_content_box (theme_node, box, &content_box);
- if (!st_widget_get_resource_scale (ST_WIDGET (self), &resource_scale))
- resource_scale = 1.0f;
-
width = (int)(0.5 + content_box.x2 - content_box.x1);
height = (int)(0.5 + content_box.y2 - content_box.y1);
+
+ clutter_canvas_set_scale_factor (CLUTTER_CANVAS (content), resource_scale);
clutter_canvas_set_size (CLUTTER_CANVAS (content),
- width * resource_scale,
- height * resource_scale);
+ width,
+ height);
}
static void
@@ -215,10 +215,14 @@ st_drawing_area_get_surface_size (StDrawingArea *area,
clutter_content_get_preferred_size (content, &w, &h);
if (!st_widget_get_resource_scale (ST_WIDGET (area), &resource_scale))
- resource_scale = 1.0f;
-
- w /= resource_scale;
- h /= resource_scale;
+ {
+ w /= resource_scale;
+ h /= resource_scale;
+ }
+ else
+ {
+ w = h = 0.0f;
+ }
if (width)
*width = (guint)w;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]