[sysprof/wip/visualizers] line-visualizer-row: handle HiDPI properly
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof/wip/visualizers] line-visualizer-row: handle HiDPI properly
- Date: Fri, 30 Sep 2016 01:15:09 +0000 (UTC)
commit 4bd72708d7e2e1189a041692bf1d0323860c6718
Author: Christian Hergert <chergert redhat com>
Date: Thu Sep 29 18:10:29 2016 -0700
line-visualizer-row: handle HiDPI properly
When we find ourselves on a HiDPI display, we need to make sure
we setup the device scale factor properly and adjust our render
checks for valid surface sizes.
lib/sp-line-visualizer-row.c | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
---
diff --git a/lib/sp-line-visualizer-row.c b/lib/sp-line-visualizer-row.c
index 04c5149..ae9f2a6 100644
--- a/lib/sp-line-visualizer-row.c
+++ b/lib/sp-line-visualizer-row.c
@@ -91,6 +91,7 @@ typedef struct
PointCache *cache;
GArray *lines;
GdkRGBA color;
+ gint scale_factor;
gint width;
gint height;
} RenderData;
@@ -267,11 +268,12 @@ sp_line_visualizer_row_draw (GtkWidget *widget,
if (ret == GDK_EVENT_PROPAGATE && priv->surface != NULL)
{
+ gint scale_factor = gtk_widget_get_scale_factor (widget);
gint width;
gint height;
- width = cairo_image_surface_get_width (priv->surface);
- height = cairo_image_surface_get_height (priv->surface);
+ width = cairo_image_surface_get_width (priv->surface) / scale_factor;
+ height = cairo_image_surface_get_height (priv->surface) / scale_factor;
/*
* We must have another threaded draw queued, so to give the impression
@@ -861,8 +863,8 @@ sp_line_visualizer_row_render_worker (GTask *task,
* and ignore having to deal with backgrounds and such.
*/
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- render->width,
- render->height);
+ render->width * render->scale_factor,
+ render->height * render->scale_factor);
if (surface == NULL)
{
@@ -874,6 +876,11 @@ sp_line_visualizer_row_render_worker (GTask *task,
goto cleanup;
}
+ if (render->scale_factor != 1)
+ cairo_surface_set_device_scale (surface,
+ render->scale_factor,
+ render->scale_factor);
+
cr = cairo_create (surface);
if (cr == NULL)
@@ -990,6 +997,7 @@ sp_line_visualizer_row_render_async (SpLineVisualizerRow *self,
render->lines = copy_array (priv->lines);
render->width = alloc.width;
render->height = alloc.height;
+ render->scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (self));
style_context = gtk_widget_get_style_context (GTK_WIDGET (self));
state = gtk_widget_get_state_flags (GTK_WIDGET (self));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]