diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index d1d76fb6..ddcf09e1 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -44,11 +44,11 @@ typedef struct _EekGtkKeyboardPrivate { - EekRenderer *renderer; + EekRenderer *renderer; // owned, nullable EekboardContextService *eekboard_context; // unowned reference struct submission *submission; // unowned reference - struct squeek_layout_state *layout; + struct squeek_layout_state *layout; // unowned LevelKeyboard *keyboard; // unowned reference; it's kept in server-context GdkEventSequence *sequence; // unowned reference @@ -92,13 +92,14 @@ eek_gtk_keyboard_real_draw (GtkWidget *self, pcontext); eek_renderer_set_allocation_size (priv->renderer, + priv->keyboard->layout, allocation.width, allocation.height); eek_renderer_set_scale_factor (priv->renderer, gtk_widget_get_scale_factor (self)); } - eek_renderer_render_keyboard (priv->renderer, cr); + eek_renderer_render_keyboard (priv->renderer, cr, priv->keyboard); return FALSE; } @@ -129,6 +130,7 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget *self, if (priv->renderer) eek_renderer_set_allocation_size (priv->renderer, + priv->keyboard->layout, allocation->width, allocation->height); diff --git a/eek/eek-gtk-keyboard.h b/eek/eek-gtk-keyboard.h index ca127011..7570ac05 100644 --- a/eek/eek-gtk-keyboard.h +++ b/eek/eek-gtk-keyboard.h @@ -32,7 +32,6 @@ struct submission; struct squeek_layout_state; -typedef struct _LevelKeyboard LevelKeyboard; // including causes weird bugs G_BEGIN_DECLS #define EEK_TYPE_GTK_KEYBOARD (eek_gtk_keyboard_get_type()) diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 0db5f813..39c60951 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -193,9 +193,9 @@ render_button_label (cairo_t *cr, void eek_renderer_render_keyboard (EekRenderer *self, - cairo_t *cr) + cairo_t *cr, + LevelKeyboard *keyboard) { - g_return_if_fail (self->keyboard); g_return_if_fail (self->allocation_width > 0.0); g_return_if_fail (self->allocation_height > 0.0); @@ -209,17 +209,14 @@ eek_renderer_render_keyboard (EekRenderer *self, cairo_translate (cr, self->widget_to_layout.origin_x, self->widget_to_layout.origin_y); cairo_scale (cr, self->widget_to_layout.scale, self->widget_to_layout.scale); - squeek_draw_layout_base_view(self->keyboard->layout, self, cr); - squeek_layout_draw_all_changed(self->keyboard->layout, self, cr); + squeek_draw_layout_base_view(keyboard->layout, self, cr); + squeek_layout_draw_all_changed(keyboard->layout, self, cr); cairo_restore (cr); } void eek_renderer_free (EekRenderer *self) { - if (self->keyboard) { - self->keyboard = NULL; - } if (self->pcontext) { g_object_unref (self->pcontext); self->pcontext = NULL; @@ -261,7 +258,6 @@ static GType button_type() { static void renderer_init (EekRenderer *self) { - self->keyboard = NULL; self->pcontext = NULL; self->allocation_width = 0.0; self->allocation_height = 0.0; @@ -282,7 +278,6 @@ eek_renderer_new (LevelKeyboard *keyboard, renderer_init(renderer); renderer->pcontext = pcontext; g_object_ref (renderer->pcontext); - renderer->keyboard = keyboard; /* Create a style context for the layout */ GtkWidgetPath *path = gtk_widget_path_new(); @@ -291,7 +286,7 @@ eek_renderer_new (LevelKeyboard *keyboard, renderer->view_context = gtk_style_context_new(); gtk_style_context_set_path(renderer->view_context, path); gtk_widget_path_unref(path); - if (squeek_layout_get_kind(renderer->keyboard->layout) == ARRANGEMENT_KIND_WIDE) { + if (squeek_layout_get_kind(keyboard->layout) == ARRANGEMENT_KIND_WIDE) { gtk_style_context_add_class(renderer->view_context, "wide"); } gtk_style_context_add_provider (renderer->view_context, @@ -301,7 +296,7 @@ eek_renderer_new (LevelKeyboard *keyboard, /* Create a style context for the buttons */ path = gtk_widget_path_new(); gtk_widget_path_append_type(path, view_type()); - if (squeek_layout_get_kind(renderer->keyboard->layout) == ARRANGEMENT_KIND_WIDE) { + if (squeek_layout_get_kind(keyboard->layout) == ARRANGEMENT_KIND_WIDE) { gtk_widget_path_iter_add_class(path, -1, "wide"); } gtk_widget_path_append_type(path, button_type()); @@ -318,6 +313,7 @@ eek_renderer_new (LevelKeyboard *keyboard, void eek_renderer_set_allocation_size (EekRenderer *renderer, + struct squeek_layout *layout, gdouble width, gdouble height) { @@ -327,7 +323,7 @@ eek_renderer_set_allocation_size (EekRenderer *renderer, renderer->allocation_height = height; renderer->widget_to_layout = squeek_layout_calculate_transformation( - renderer->keyboard->layout, + layout, renderer->allocation_width, renderer->allocation_height); // This is where size-dependent surfaces would be released diff --git a/eek/eek-renderer.h b/eek/eek-renderer.h index 4e7284d7..a90deeb9 100644 --- a/eek/eek-renderer.h +++ b/eek/eek-renderer.h @@ -26,17 +26,25 @@ #include "eek-types.h" +struct squeek_layout; + +/// Renders LevelKayboards +/// It cannot adjust styles at runtime. typedef struct EekRenderer { - LevelKeyboard *keyboard; // unowned PangoContext *pcontext; // owned GtkCssProvider *css_provider; // owned GtkStyleContext *view_context; // owned GtkStyleContext *button_context; // TODO: maybe move a copy to each button + /// Style class for rendering the view and button CSS. + gchar *extra_style; // owned + // Mutable state + /// Background extents gdouble allocation_width; gdouble allocation_height; gint scale_factor; /* the outputs scale factor */ + /// Coords transformation struct transformation widget_to_layout; } EekRenderer; @@ -45,7 +53,7 @@ GType eek_renderer_get_type (void) G_GNUC_CONST; EekRenderer *eek_renderer_new (LevelKeyboard *keyboard, PangoContext *pcontext); void eek_renderer_set_allocation_size - (EekRenderer *renderer, + (EekRenderer *renderer, struct squeek_layout *layout, gdouble width, gdouble height); void eek_renderer_set_scale_factor (EekRenderer *renderer, @@ -56,7 +64,7 @@ cairo_surface_t *eek_renderer_get_icon_surface(const gchar *icon_name, gint scale); void eek_renderer_render_keyboard (EekRenderer *renderer, - cairo_t *cr); + cairo_t *cr, LevelKeyboard *keyboard); void eek_renderer_free (EekRenderer *self); diff --git a/eekboard/eekboard-context-service.h b/eekboard/eekboard-context-service.h index b5f17988..8547e3e7 100644 --- a/eekboard/eekboard-context-service.h +++ b/eekboard/eekboard-context-service.h @@ -72,9 +72,6 @@ struct _EekboardContextServiceClass { GObjectClass parent_class; /*< public >*/ - struct squeek_view *(*create_keyboard) (EekboardContextService *self, - const gchar *keyboard_type); - /* signals */ void (*destroyed) (EekboardContextService *self);