Move stage resize handler from eekboard to libeek.
This commit is contained in:
		@ -20,7 +20,7 @@
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * SECTION:eek-clutter-keyboard
 | 
			
		||||
 * @short_description: #EekKeyboard embedding a #ClutterActor
 | 
			
		||||
 * @short_description: #EekKeyboard that can be converted into a #ClutterActor
 | 
			
		||||
 */
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
@ -219,7 +219,38 @@ on_clutter_key_release_event (ClutterActor *actor,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_clutter_realize (ClutterActor *actor, gpointer user_data)
 | 
			
		||||
on_clutter_stage_resize (GObject *object,
 | 
			
		||||
                         GParamSpec *param_spec,
 | 
			
		||||
                         gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    ClutterActor *stage = object;
 | 
			
		||||
    EekClutterKeyboard *keyboard = user_data;
 | 
			
		||||
    GValue value = {0};
 | 
			
		||||
    gfloat width, height, scale;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
 | 
			
		||||
    g_object_get (G_OBJECT(stage), "width", &width, NULL);
 | 
			
		||||
    g_object_get (G_OBJECT(stage), "height", &height, NULL);
 | 
			
		||||
 | 
			
		||||
    g_value_init (&value, G_TYPE_DOUBLE);
 | 
			
		||||
 | 
			
		||||
    scale = width > height ? width / bounds.width : width / bounds.height;
 | 
			
		||||
 | 
			
		||||
    g_value_set_double (&value, scale);
 | 
			
		||||
    g_object_set_property (G_OBJECT (stage),
 | 
			
		||||
                           "scale-x",
 | 
			
		||||
                           &value);
 | 
			
		||||
 | 
			
		||||
    g_value_set_double (&value, scale);
 | 
			
		||||
    g_object_set_property (G_OBJECT (stage),
 | 
			
		||||
                           "scale-y",
 | 
			
		||||
                           &value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_clutter_realize (ClutterActor *actor,
 | 
			
		||||
                    gpointer      user_data)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboard *keyboard = user_data;
 | 
			
		||||
    EekClutterKeyboardPrivate *priv =
 | 
			
		||||
@ -233,6 +264,10 @@ on_clutter_realize (ClutterActor *actor, gpointer user_data)
 | 
			
		||||
    priv->key_release_event_handler =
 | 
			
		||||
        g_signal_connect (stage, "key-release-event",
 | 
			
		||||
                          G_CALLBACK (on_clutter_key_release_event), keyboard);
 | 
			
		||||
    g_signal_connect (stage, "notify::width",
 | 
			
		||||
                      G_CALLBACK (on_clutter_stage_resize), keyboard);
 | 
			
		||||
    g_signal_connect (stage, "notify::height",
 | 
			
		||||
                      G_CALLBACK (on_clutter_stage_resize), keyboard);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 | 
			
		||||
@ -97,7 +97,9 @@ static const char ui_description[] =
 | 
			
		||||
    "      <menuitem action='Quit'/>"
 | 
			
		||||
    "    </menu>"
 | 
			
		||||
    "    <menu action='KeyboardMenu'>"
 | 
			
		||||
#if 0
 | 
			
		||||
    "      <menuitem action='MonitorKeyEvent'/>"
 | 
			
		||||
#endif
 | 
			
		||||
    "      <menu action='SetLayout'>"
 | 
			
		||||
    "        <placeholder name='LayoutsPH'/>"
 | 
			
		||||
    "      </menu>"
 | 
			
		||||
@ -369,39 +371,6 @@ create_menus (Eekboard      *eekboard,
 | 
			
		||||
    create_layouts_menu (eekboard, ui_manager);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_resize (GObject *object,
 | 
			
		||||
	   GParamSpec *param_spec,
 | 
			
		||||
	   gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    Eekboard *eekboard = user_data;
 | 
			
		||||
    GValue value = {0};
 | 
			
		||||
    gfloat width, height, scale;
 | 
			
		||||
    ClutterActor *stage, *actor;
 | 
			
		||||
 | 
			
		||||
    actor = eek_clutter_keyboard_get_actor
 | 
			
		||||
        (EEK_CLUTTER_KEYBOARD(eekboard->keyboard));
 | 
			
		||||
    stage = clutter_actor_get_stage (actor);
 | 
			
		||||
 | 
			
		||||
    g_object_get (G_OBJECT(stage), "width", &width, NULL);
 | 
			
		||||
    g_object_get (G_OBJECT(stage), "height", &height, NULL);
 | 
			
		||||
 | 
			
		||||
    g_value_init (&value, G_TYPE_DOUBLE);
 | 
			
		||||
 | 
			
		||||
    scale = width > height ? width / eekboard->width :
 | 
			
		||||
        width / eekboard->height;
 | 
			
		||||
 | 
			
		||||
    g_value_set_double (&value, scale);
 | 
			
		||||
    g_object_set_property (G_OBJECT (stage),
 | 
			
		||||
                           "scale-x",
 | 
			
		||||
                           &value);
 | 
			
		||||
 | 
			
		||||
    g_value_set_double (&value, scale);
 | 
			
		||||
    g_object_set_property (G_OBJECT (stage),
 | 
			
		||||
                           "scale-y",
 | 
			
		||||
                           &value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static GtkWidget *
 | 
			
		||||
create_widget_clutter (Eekboard *eekboard,
 | 
			
		||||
                       gint      initial_width,
 | 
			
		||||
@ -433,10 +402,6 @@ create_widget_clutter (Eekboard *eekboard,
 | 
			
		||||
    clutter_actor_get_size (actor, &eekboard->width, &eekboard->height);
 | 
			
		||||
    clutter_container_add_actor (CLUTTER_CONTAINER(stage), actor);
 | 
			
		||||
    clutter_actor_set_size (stage, eekboard->width, eekboard->height);
 | 
			
		||||
    g_signal_connect (stage, "notify::width",
 | 
			
		||||
                      G_CALLBACK (on_resize), eekboard);
 | 
			
		||||
    g_signal_connect (stage, "notify::height",
 | 
			
		||||
                      G_CALLBACK (on_resize), eekboard);
 | 
			
		||||
    return eekboard->widget;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -526,19 +491,6 @@ main (int argc, char *argv[])
 | 
			
		||||
    if (env && g_strcmp0 (env, "1") == 0)
 | 
			
		||||
        use_clutter = FALSE;
 | 
			
		||||
 | 
			
		||||
    if (use_clutter &&
 | 
			
		||||
        clutter_feature_available (CLUTTER_FEATURE_SWAP_EVENTS) &&
 | 
			
		||||
#ifdef CLUTTER_GTK_CHECK_VERSION
 | 
			
		||||
        !CLUTTER_GTK_CHECK_VERSION(0, 10, 5)
 | 
			
		||||
#else
 | 
			
		||||
        TRUE
 | 
			
		||||
#endif
 | 
			
		||||
        ) {
 | 
			
		||||
        g_warning ("Clutter-Gtk <= 0.10.4 does not work well with "
 | 
			
		||||
                   "Clutter >= 1.2...fallback to GTK");
 | 
			
		||||
        use_clutter = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (use_clutter &&
 | 
			
		||||
        gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) {
 | 
			
		||||
        g_warning ("Can't init Clutter-Gtk...fallback to GTK");
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user