Move eek_keyboard_new to eek-layout.c; add utility functions.
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user