From 48e64f1c326a21048e135b00922fdd6529e21029 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Tue, 25 Jan 2011 16:14:18 +0900 Subject: [PATCH] Move eek_keyboard_new to eek-layout.c; add utility functions. --- eek/eek-keyboard.c | 71 ++++++++++++++++++++++++++++---------------- eek/eek-keyboard.h | 4 +++ eek/eek-layout.c | 22 ++++++++------ eek/eek-layout.h | 22 +++++++------- eek/eek-xkb-layout.c | 18 +++++++++-- 5 files changed, 89 insertions(+), 48 deletions(-) diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index 733f3b21..947f8b80 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -40,6 +40,7 @@ enum { PROP_0, PROP_GROUP, PROP_LEVEL, + PROP_LAYOUT, PROP_LAST }; @@ -198,6 +199,7 @@ eek_keyboard_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { + EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(object); gint group, level; switch (prop_id) { @@ -213,6 +215,10 @@ eek_keyboard_set_property (GObject *object, group, g_value_get_int (value)); break; + case PROP_LAYOUT: + priv->layout = g_value_get_object (value); + g_object_ref (priv->layout); + break; default: g_object_set_property (object, g_param_spec_get_name (pspec), @@ -227,9 +233,9 @@ eek_keyboard_get_property (GObject *object, GValue *value, GParamSpec *pspec) { + EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(object); gint group, level; - g_return_if_fail (EEK_IS_KEYBOARD(object)); switch (prop_id) { case PROP_GROUP: eek_keyboard_get_keysym_index (EEK_KEYBOARD(object), &group, &level); @@ -239,6 +245,9 @@ eek_keyboard_get_property (GObject *object, eek_keyboard_get_keysym_index (EEK_KEYBOARD(object), &level, &level); g_value_set_int (value, level); break; + case PROP_LAYOUT: + g_value_set_object (value, priv->layout); + break; default: g_object_get_property (object, g_param_spec_get_name (pspec), @@ -302,6 +311,20 @@ eek_keyboard_class_init (EekKeyboardClass *klass) PROP_LEVEL, pspec); + /** + * EekKeyboard:layout: + * + * The layout used to create this #EekKeyboard. + */ + pspec = g_param_spec_object ("layout", + "Layout", + "Layout used to create the keyboard", + EEK_TYPE_LAYOUT, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, + PROP_LAYOUT, + pspec); + /** * EekKeyboard::key-pressed: * @keyboard: an #EekKeyboard @@ -440,34 +463,30 @@ EekKey * eek_keyboard_find_key_by_keycode (EekKeyboard *keyboard, guint keycode) { - g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL); - return EEK_KEYBOARD_GET_CLASS(keyboard)->find_key_by_keycode (keyboard, - keycode); + g_assert (EEK_IS_KEYBOARD(keyboard)); + return EEK_KEYBOARD_GET_CLASS(keyboard)-> + find_key_by_keycode (keyboard, keycode); } -/** - * eek_keyboard_new: - * @layout: an #EekLayout - * @initial_width: default width of returned keyboard - * @initial_height: default height of returned keyboard - * - * Create a new #EekKeyboard instance based on @layout. - */ -EekKeyboard * -eek_keyboard_new (EekLayout *layout, - gint initial_width, - gint initial_height) +EekLayout * +eek_keyboard_get_layout (EekKeyboard *keyboard) +{ + EekKeyboardPrivate *priv; + + g_assert (EEK_IS_KEYBOARD(keyboard)); + priv = EEK_KEYBOARD_GET_PRIVATE(keyboard); + return priv->layout; +} + +void +eek_keyboard_get_size (EekKeyboard *keyboard, + gdouble *width, + gdouble *height) { - EekKeyboard *keyboard = g_object_new (EEK_TYPE_KEYBOARD, NULL); EekBounds bounds; - g_return_val_if_fail (EEK_IS_LAYOUT (layout), NULL); - - bounds.x = bounds.y = 0.0; - bounds.width = initial_width; - bounds.height = initial_height; - eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds); - eek_layout_apply (layout, keyboard); - - return keyboard; + g_assert (EEK_IS_KEYBOARD(keyboard)); + eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds); + *width = bounds.width; + *height = bounds.height; } diff --git a/eek/eek-keyboard.h b/eek/eek-keyboard.h index 8d384467..939bba9c 100644 --- a/eek/eek-keyboard.h +++ b/eek/eek-keyboard.h @@ -89,6 +89,10 @@ GType eek_keyboard_get_type (void) G_GNUC_CONST; EekKeyboard *eek_keyboard_new (EekLayout *layout, gint initial_width, gint initial_height); +EekLayout *eek_keyboard_get_layout (EekKeyboard *keyboard); +void eek_keyboard_get_size (EekKeyboard *keyboard, + gdouble *width, + gdouble *height); void eek_keyboard_set_keysym_index (EekKeyboard *keyboard, gint group, gint level); diff --git a/eek/eek-layout.c b/eek/eek-layout.c index 82458b63..ac0f391d 100644 --- a/eek/eek-layout.c +++ b/eek/eek-layout.c @@ -91,20 +91,24 @@ eek_layout_init (EekLayout *self) } /** - * eek_layout_apply: + * eek_keyboard_new: * @layout: an #EekLayout - * @keyboard: an #EekKeyboard + * @initial_width: initial width of the keyboard + * @initial_height: initial height of the keyboard * - * Relayout @keyboard with the @layout. + * Create a new #EekKeyboard based on @layout. */ -void -eek_layout_apply (EekLayout *layout, EekKeyboard *keyboard) +EekKeyboard * +eek_keyboard_new (EekLayout *layout, + gint initial_width, + gint initial_height) { - g_return_if_fail (EEK_IS_LAYOUT(layout)); - g_return_if_fail (EEK_IS_KEYBOARD(keyboard)); - g_return_if_fail (EEK_LAYOUT_GET_CLASS(layout)->apply); + g_assert (EEK_IS_LAYOUT(layout)); + g_assert (EEK_LAYOUT_GET_CLASS(layout)->create_keyboard); - return EEK_LAYOUT_GET_CLASS(layout)->apply (layout, keyboard); + return EEK_LAYOUT_GET_CLASS(layout)->create_keyboard (layout, + initial_width, + initial_height); } /** diff --git a/eek/eek-layout.h b/eek/eek-layout.h index f7986f37..b8b5dc4c 100644 --- a/eek/eek-layout.h +++ b/eek/eek-layout.h @@ -56,24 +56,26 @@ struct _EekLayoutClass GObjectClass parent_class; /*< public >*/ - void (* apply) (EekLayout *self, - EekKeyboard *keyboard); - gint (* get_group) (EekLayout *self); + EekKeyboard* (* create_keyboard) (EekLayout *self, + gdouble initial_width, + gdouble initial_height); + gint (* get_group) (EekLayout *self); /* signals */ - void (* group_changed) (EekLayout *self, - gint group); - void (* changed) (EekLayout *self); + void (* group_changed) (EekLayout *self, + gint group); + void (* changed) (EekLayout *self); /*< private >*/ /* padding */ gpointer pdummy[24]; }; -GType eek_layout_get_type (void) G_GNUC_CONST; -void eek_layout_apply (EekLayout *layout, - EekKeyboard *keyboard); -gint eek_layout_get_group (EekLayout *layout); +GType eek_layout_get_type (void) G_GNUC_CONST; +EekKeyboard *eek_layout_new (EekLayout *layout, + gdouble initial_width, + gdouble initial_height); +gint eek_layout_get_group (EekLayout *layout); G_END_DECLS #endif /* EEK_LAYOUT_H */ diff --git a/eek/eek-xkb-layout.c b/eek/eek-xkb-layout.c index 7cca09a9..28a0f74b 100644 --- a/eek/eek-xkb-layout.c +++ b/eek/eek-xkb-layout.c @@ -309,10 +309,20 @@ outline_free (gpointer data) g_boxed_free (EEK_TYPE_OUTLINE, outline); } -static void -eek_xkb_layout_real_apply (EekLayout *self, EekKeyboard *keyboard) +static EekKeyboard * +eek_xkb_layout_real_create_keyboard (EekLayout *self, + gdouble initial_width, + gdouble initial_height) { EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (self); + EekBounds bounds; + EekKeyboard *keyboard; + + keyboard = g_object_new (EEK_TYPE_KEYBOARD, "layout", self, NULL); + bounds.x = bounds.y = 0.0; + bounds.width = initial_width; + bounds.height = initial_height; + eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds); if (priv->outline_hash) g_hash_table_unref (priv->outline_hash); @@ -323,6 +333,8 @@ eek_xkb_layout_real_apply (EekLayout *self, EekKeyboard *keyboard) outline_free); create_keyboard (EEK_XKB_LAYOUT(self), keyboard); + + return keyboard; } static gint @@ -432,7 +444,7 @@ eek_xkb_layout_class_init (EekXkbLayoutClass *klass) g_type_class_add_private (gobject_class, sizeof (EekXkbLayoutPrivate)); - layout_class->apply = eek_xkb_layout_real_apply; + layout_class->create_keyboard = eek_xkb_layout_real_create_keyboard; layout_class->get_group = eek_xkb_layout_real_get_group; gobject_class->finalize = eek_xkb_layout_finalize;