Move stage resize handler from eekboard to libeek.

This commit is contained in:
Daiki Ueno
2010-06-18 14:58:10 +09:00
parent 3af13fb38a
commit 74ea63fbed
2 changed files with 41 additions and 54 deletions

View File

@ -20,7 +20,7 @@
/** /**
* SECTION:eek-clutter-keyboard * SECTION:eek-clutter-keyboard
* @short_description: #EekKeyboard embedding a #ClutterActor * @short_description: #EekKeyboard that can be converted into a #ClutterActor
*/ */
#include <string.h> #include <string.h>
@ -219,7 +219,38 @@ on_clutter_key_release_event (ClutterActor *actor,
} }
static void 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; EekClutterKeyboard *keyboard = user_data;
EekClutterKeyboardPrivate *priv = EekClutterKeyboardPrivate *priv =
@ -233,6 +264,10 @@ on_clutter_realize (ClutterActor *actor, gpointer user_data)
priv->key_release_event_handler = priv->key_release_event_handler =
g_signal_connect (stage, "key-release-event", g_signal_connect (stage, "key-release-event",
G_CALLBACK (on_clutter_key_release_event), keyboard); 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 static void

View File

@ -97,7 +97,9 @@ static const char ui_description[] =
" <menuitem action='Quit'/>" " <menuitem action='Quit'/>"
" </menu>" " </menu>"
" <menu action='KeyboardMenu'>" " <menu action='KeyboardMenu'>"
#if 0
" <menuitem action='MonitorKeyEvent'/>" " <menuitem action='MonitorKeyEvent'/>"
#endif
" <menu action='SetLayout'>" " <menu action='SetLayout'>"
" <placeholder name='LayoutsPH'/>" " <placeholder name='LayoutsPH'/>"
" </menu>" " </menu>"
@ -369,39 +371,6 @@ create_menus (Eekboard *eekboard,
create_layouts_menu (eekboard, ui_manager); 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 * static GtkWidget *
create_widget_clutter (Eekboard *eekboard, create_widget_clutter (Eekboard *eekboard,
gint initial_width, gint initial_width,
@ -433,10 +402,6 @@ create_widget_clutter (Eekboard *eekboard,
clutter_actor_get_size (actor, &eekboard->width, &eekboard->height); clutter_actor_get_size (actor, &eekboard->width, &eekboard->height);
clutter_container_add_actor (CLUTTER_CONTAINER(stage), actor); clutter_container_add_actor (CLUTTER_CONTAINER(stage), actor);
clutter_actor_set_size (stage, eekboard->width, eekboard->height); 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; return eekboard->widget;
} }
@ -526,19 +491,6 @@ main (int argc, char *argv[])
if (env && g_strcmp0 (env, "1") == 0) if (env && g_strcmp0 (env, "1") == 0)
use_clutter = FALSE; 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 && if (use_clutter &&
gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) { gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) {
g_warning ("Can't init Clutter-Gtk...fallback to GTK"); g_warning ("Can't init Clutter-Gtk...fallback to GTK");