From 70df392647d19158de68d58a3f921df0ec7d9810 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Tue, 25 Jan 2011 18:10:42 +0900 Subject: [PATCH] Avoid to use Clutter scaling feature. --- eek/eek-clutter-key.c | 13 +++++++++---- eek/eek-clutter-section.c | 33 ++++++++++++++++++++------------- eek/eek-renderer.c | 6 +++--- src/eekboard.c | 4 +++- 4 files changed, 35 insertions(+), 21 deletions(-) diff --git a/eek/eek-clutter-key.c b/eek/eek-clutter-key.c index 25898f17..0eb996b6 100644 --- a/eek/eek-clutter-key.c +++ b/eek/eek-clutter-key.c @@ -80,7 +80,7 @@ on_released (EekKey *key, gpointer user_data) } static void -eek_clutter_key_real_realize (ClutterActor *self) +set_position (ClutterActor *self) { EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self); EekBounds bounds; @@ -88,11 +88,15 @@ eek_clutter_key_real_realize (ClutterActor *self) eek_element_get_bounds (EEK_ELEMENT(priv->key), &bounds); scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer)); + clutter_actor_set_position (self, bounds.x * scale, bounds.y * scale); +} - clutter_actor_set_position (self, - bounds.x * scale, - bounds.y * scale); +static void +eek_clutter_key_real_realize (ClutterActor *self) +{ + EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self); + set_position (self); clutter_actor_set_reactive (self, TRUE); g_signal_connect (priv->key, "pressed", @@ -106,6 +110,7 @@ eek_clutter_key_real_paint (ClutterActor *self) { EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self); + set_position (self); eek_clutter_renderer_render_key (priv->renderer, self, priv->key); } diff --git a/eek/eek-clutter-section.c b/eek/eek-clutter-section.c index c5ab6aa4..1be96806 100644 --- a/eek/eek-clutter-section.c +++ b/eek/eek-clutter-section.c @@ -60,21 +60,28 @@ create_key (EekElement *element, gpointer user_data) } static void -eek_clutter_section_real_realize (ClutterActor *self) +set_position (ClutterActor *self) { EekClutterSectionPrivate *priv = EEK_CLUTTER_SECTION_GET_PRIVATE(self); - CreateKeyCallbackData data; EekBounds bounds; gdouble scale; eek_element_get_bounds (EEK_ELEMENT(priv->section), &bounds); scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer)); clutter_actor_set_position (self, bounds.x * scale, bounds.y * scale); +} + +static void +eek_clutter_section_real_realize (ClutterActor *self) +{ + EekClutterSectionPrivate *priv = EEK_CLUTTER_SECTION_GET_PRIVATE(self); + CreateKeyCallbackData data; + clutter_actor_set_rotation (self, CLUTTER_Z_AXIS, eek_section_get_angle (priv->section), 0.0f, 0.0f, 0.0f); - + set_position (self); data.actor = self; data.renderer = priv->renderer; eek_container_foreach_child (EEK_CONTAINER(priv->section), @@ -82,6 +89,14 @@ eek_clutter_section_real_realize (ClutterActor *self) &data); } +static void +eek_clutter_section_real_paint (ClutterActor *self) +{ + set_position (self); + CLUTTER_ACTOR_CLASS (eek_clutter_section_parent_class)-> + paint (self); +} + static void eek_clutter_section_real_get_preferred_width (ClutterActor *self, float for_height, @@ -114,15 +129,6 @@ eek_clutter_section_real_get_preferred_height (ClutterActor *self, *natural_height_p = bounds.height * scale; } -static void -eek_clutter_section_real_allocate (ClutterActor *self, - const ClutterActorBox *box, - ClutterAllocationFlags flags) -{ - CLUTTER_ACTOR_CLASS (eek_clutter_section_parent_class)-> - allocate (self, box, flags); -} - static void eek_clutter_section_set_property (GObject *object, guint prop_id, @@ -177,11 +183,12 @@ eek_clutter_section_class_init (EekClutterSectionClass *klass) actor_class->realize = eek_clutter_section_real_realize; + actor_class->paint = + eek_clutter_section_real_paint; actor_class->get_preferred_width = eek_clutter_section_real_get_preferred_width; actor_class->get_preferred_height = eek_clutter_section_real_get_preferred_height; - actor_class->allocate = eek_clutter_section_real_allocate; gobject_class->set_property = eek_clutter_section_set_property; gobject_class->dispose = eek_clutter_section_dispose; diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index aaccbe04..40df1b03 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -233,7 +233,7 @@ render_key_outline (EekRenderer *renderer, cairo_pattern_destroy (pat); /* paint the border */ - cairo_set_line_width (cr, priv->border_width * priv->scale); + cairo_set_line_width (cr, priv->border_width); cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); cairo_set_source_rgba @@ -296,13 +296,13 @@ calculate_font_size_key_callback (EekElement *element, gpointer user_data) g_free (label); pango_layout_get_extents (layout, NULL, &extents); + g_object_unref (layout); sx = sy = 1.0; if (extents.width > bounds.width * PANGO_SCALE) sx = bounds.width * PANGO_SCALE / extents.width; if (extents.height > bounds.height * PANGO_SCALE) sy = bounds.height * PANGO_SCALE / extents.height; - g_object_unref (layout); size *= MIN(sx, sy); if (size < data->size && @@ -326,7 +326,7 @@ calculate_font_size (EekRenderer *renderer) PangoFontDescription *base_font; base_font = pango_context_get_font_description (priv->pcontext); - data.size = pango_font_description_get_size (base_font); + data.size = G_MAXDOUBLE; data.renderer = renderer; eek_container_foreach_child (EEK_CONTAINER(priv->keyboard), calculate_font_size_section_callback, diff --git a/src/eekboard.c b/src/eekboard.c index e96de36e..8b137184 100644 --- a/src/eekboard.c +++ b/src/eekboard.c @@ -1046,7 +1046,9 @@ on_allocation_changed (ClutterActor *stage, eek_element_get_bounds (EEK_ELEMENT(eekboard->keyboard), &bounds); scale = MIN((box->x2 - box->x1) / bounds.width, (box->y2 - box->y1) / bounds.height); - clutter_actor_set_scale (eekboard->actor, scale, scale); + clutter_actor_set_size (eekboard->actor, + bounds.width * scale, + bounds.height * scale); } #endif