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,8 +56,9 @@ struct _EekLayoutClass
 | 
			
		||||
    GObjectClass parent_class;
 | 
			
		||||
 | 
			
		||||
    /*< public >*/
 | 
			
		||||
    void (* apply)         (EekLayout   *self,
 | 
			
		||||
                            EekKeyboard *keyboard);
 | 
			
		||||
    EekKeyboard* (* create_keyboard) (EekLayout *self,
 | 
			
		||||
                                      gdouble    initial_width,
 | 
			
		||||
                                      gdouble    initial_height);
 | 
			
		||||
    gint         (* get_group)       (EekLayout *self);
 | 
			
		||||
 | 
			
		||||
    /* signals */
 | 
			
		||||
@ -71,8 +72,9 @@ struct _EekLayoutClass
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType        eek_layout_get_type  (void) G_GNUC_CONST;
 | 
			
		||||
void  eek_layout_apply     (EekLayout   *layout,
 | 
			
		||||
                            EekKeyboard *keyboard);
 | 
			
		||||
EekKeyboard *eek_layout_new       (EekLayout *layout,
 | 
			
		||||
                                   gdouble    initial_width,
 | 
			
		||||
                                   gdouble    initial_height);
 | 
			
		||||
gint         eek_layout_get_group (EekLayout *layout);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
@ -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