Move eek_keyboard_new to eek-layout.c; add utility functions.
This commit is contained in:
@ -40,6 +40,7 @@ enum {
|
|||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_GROUP,
|
PROP_GROUP,
|
||||||
PROP_LEVEL,
|
PROP_LEVEL,
|
||||||
|
PROP_LAYOUT,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -198,6 +199,7 @@ eek_keyboard_set_property (GObject *object,
|
|||||||
const GValue *value,
|
const GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
|
EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(object);
|
||||||
gint group, level;
|
gint group, level;
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
@ -213,6 +215,10 @@ eek_keyboard_set_property (GObject *object,
|
|||||||
group,
|
group,
|
||||||
g_value_get_int (value));
|
g_value_get_int (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_LAYOUT:
|
||||||
|
priv->layout = g_value_get_object (value);
|
||||||
|
g_object_ref (priv->layout);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
g_object_set_property (object,
|
g_object_set_property (object,
|
||||||
g_param_spec_get_name (pspec),
|
g_param_spec_get_name (pspec),
|
||||||
@ -227,9 +233,9 @@ eek_keyboard_get_property (GObject *object,
|
|||||||
GValue *value,
|
GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
|
EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(object);
|
||||||
gint group, level;
|
gint group, level;
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_KEYBOARD(object));
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_GROUP:
|
case PROP_GROUP:
|
||||||
eek_keyboard_get_keysym_index (EEK_KEYBOARD(object), &group, &level);
|
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);
|
eek_keyboard_get_keysym_index (EEK_KEYBOARD(object), &level, &level);
|
||||||
g_value_set_int (value, level);
|
g_value_set_int (value, level);
|
||||||
break;
|
break;
|
||||||
|
case PROP_LAYOUT:
|
||||||
|
g_value_set_object (value, priv->layout);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
g_object_get_property (object,
|
g_object_get_property (object,
|
||||||
g_param_spec_get_name (pspec),
|
g_param_spec_get_name (pspec),
|
||||||
@ -302,6 +311,20 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
|
|||||||
PROP_LEVEL,
|
PROP_LEVEL,
|
||||||
pspec);
|
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:
|
* EekKeyboard::key-pressed:
|
||||||
* @keyboard: an #EekKeyboard
|
* @keyboard: an #EekKeyboard
|
||||||
@ -440,34 +463,30 @@ EekKey *
|
|||||||
eek_keyboard_find_key_by_keycode (EekKeyboard *keyboard,
|
eek_keyboard_find_key_by_keycode (EekKeyboard *keyboard,
|
||||||
guint keycode)
|
guint keycode)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL);
|
g_assert (EEK_IS_KEYBOARD(keyboard));
|
||||||
return EEK_KEYBOARD_GET_CLASS(keyboard)->find_key_by_keycode (keyboard,
|
return EEK_KEYBOARD_GET_CLASS(keyboard)->
|
||||||
keycode);
|
find_key_by_keycode (keyboard, keycode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
EekLayout *
|
||||||
* eek_keyboard_new:
|
eek_keyboard_get_layout (EekKeyboard *keyboard)
|
||||||
* @layout: an #EekLayout
|
{
|
||||||
* @initial_width: default width of returned keyboard
|
EekKeyboardPrivate *priv;
|
||||||
* @initial_height: default height of returned keyboard
|
|
||||||
*
|
g_assert (EEK_IS_KEYBOARD(keyboard));
|
||||||
* Create a new #EekKeyboard instance based on @layout.
|
priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||||
*/
|
return priv->layout;
|
||||||
EekKeyboard *
|
}
|
||||||
eek_keyboard_new (EekLayout *layout,
|
|
||||||
gint initial_width,
|
void
|
||||||
gint initial_height)
|
eek_keyboard_get_size (EekKeyboard *keyboard,
|
||||||
|
gdouble *width,
|
||||||
|
gdouble *height)
|
||||||
{
|
{
|
||||||
EekKeyboard *keyboard = g_object_new (EEK_TYPE_KEYBOARD, NULL);
|
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_LAYOUT (layout), NULL);
|
g_assert (EEK_IS_KEYBOARD(keyboard));
|
||||||
|
eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
|
||||||
bounds.x = bounds.y = 0.0;
|
*width = bounds.width;
|
||||||
bounds.width = initial_width;
|
*height = bounds.height;
|
||||||
bounds.height = initial_height;
|
|
||||||
eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
|
|
||||||
eek_layout_apply (layout, keyboard);
|
|
||||||
|
|
||||||
return keyboard;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -89,6 +89,10 @@ GType eek_keyboard_get_type (void) G_GNUC_CONST;
|
|||||||
EekKeyboard *eek_keyboard_new (EekLayout *layout,
|
EekKeyboard *eek_keyboard_new (EekLayout *layout,
|
||||||
gint initial_width,
|
gint initial_width,
|
||||||
gint initial_height);
|
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,
|
void eek_keyboard_set_keysym_index (EekKeyboard *keyboard,
|
||||||
gint group,
|
gint group,
|
||||||
gint level);
|
gint level);
|
||||||
|
|||||||
@ -91,20 +91,24 @@ eek_layout_init (EekLayout *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* eek_layout_apply:
|
* eek_keyboard_new:
|
||||||
* @layout: an #EekLayout
|
* @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
|
EekKeyboard *
|
||||||
eek_layout_apply (EekLayout *layout, EekKeyboard *keyboard)
|
eek_keyboard_new (EekLayout *layout,
|
||||||
|
gint initial_width,
|
||||||
|
gint initial_height)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_LAYOUT(layout));
|
g_assert (EEK_IS_LAYOUT(layout));
|
||||||
g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
|
g_assert (EEK_LAYOUT_GET_CLASS(layout)->create_keyboard);
|
||||||
g_return_if_fail (EEK_LAYOUT_GET_CLASS(layout)->apply);
|
|
||||||
|
|
||||||
return EEK_LAYOUT_GET_CLASS(layout)->apply (layout, keyboard);
|
return EEK_LAYOUT_GET_CLASS(layout)->create_keyboard (layout,
|
||||||
|
initial_width,
|
||||||
|
initial_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -56,8 +56,9 @@ struct _EekLayoutClass
|
|||||||
GObjectClass parent_class;
|
GObjectClass parent_class;
|
||||||
|
|
||||||
/*< public >*/
|
/*< public >*/
|
||||||
void (* apply) (EekLayout *self,
|
EekKeyboard* (* create_keyboard) (EekLayout *self,
|
||||||
EekKeyboard *keyboard);
|
gdouble initial_width,
|
||||||
|
gdouble initial_height);
|
||||||
gint (* get_group) (EekLayout *self);
|
gint (* get_group) (EekLayout *self);
|
||||||
|
|
||||||
/* signals */
|
/* signals */
|
||||||
@ -71,8 +72,9 @@ struct _EekLayoutClass
|
|||||||
};
|
};
|
||||||
|
|
||||||
GType eek_layout_get_type (void) G_GNUC_CONST;
|
GType eek_layout_get_type (void) G_GNUC_CONST;
|
||||||
void eek_layout_apply (EekLayout *layout,
|
EekKeyboard *eek_layout_new (EekLayout *layout,
|
||||||
EekKeyboard *keyboard);
|
gdouble initial_width,
|
||||||
|
gdouble initial_height);
|
||||||
gint eek_layout_get_group (EekLayout *layout);
|
gint eek_layout_get_group (EekLayout *layout);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
@ -309,10 +309,20 @@ outline_free (gpointer data)
|
|||||||
g_boxed_free (EEK_TYPE_OUTLINE, outline);
|
g_boxed_free (EEK_TYPE_OUTLINE, outline);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static EekKeyboard *
|
||||||
eek_xkb_layout_real_apply (EekLayout *self, EekKeyboard *keyboard)
|
eek_xkb_layout_real_create_keyboard (EekLayout *self,
|
||||||
|
gdouble initial_width,
|
||||||
|
gdouble initial_height)
|
||||||
{
|
{
|
||||||
EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
|
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)
|
if (priv->outline_hash)
|
||||||
g_hash_table_unref (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);
|
outline_free);
|
||||||
|
|
||||||
create_keyboard (EEK_XKB_LAYOUT(self), keyboard);
|
create_keyboard (EEK_XKB_LAYOUT(self), keyboard);
|
||||||
|
|
||||||
|
return keyboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
@ -432,7 +444,7 @@ eek_xkb_layout_class_init (EekXkbLayoutClass *klass)
|
|||||||
|
|
||||||
g_type_class_add_private (gobject_class, sizeof (EekXkbLayoutPrivate));
|
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;
|
layout_class->get_group = eek_xkb_layout_real_get_group;
|
||||||
|
|
||||||
gobject_class->finalize = eek_xkb_layout_finalize;
|
gobject_class->finalize = eek_xkb_layout_finalize;
|
||||||
|
|||||||
Reference in New Issue
Block a user