layout: Minor generalizations
This commit is contained in:
		@ -44,11 +44,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
typedef struct _EekGtkKeyboardPrivate
 | 
					typedef struct _EekGtkKeyboardPrivate
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekRenderer *renderer;
 | 
					    EekRenderer *renderer; // owned, nullable
 | 
				
			||||||
    EekboardContextService *eekboard_context; // unowned reference
 | 
					    EekboardContextService *eekboard_context; // unowned reference
 | 
				
			||||||
    struct submission *submission; // 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
 | 
					    LevelKeyboard *keyboard; // unowned reference; it's kept in server-context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GdkEventSequence *sequence; // unowned reference
 | 
					    GdkEventSequence *sequence; // unowned reference
 | 
				
			||||||
@ -92,13 +92,14 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
 | 
				
			|||||||
                    pcontext);
 | 
					                    pcontext);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        eek_renderer_set_allocation_size (priv->renderer,
 | 
					        eek_renderer_set_allocation_size (priv->renderer,
 | 
				
			||||||
 | 
					                                          priv->keyboard->layout,
 | 
				
			||||||
                                          allocation.width,
 | 
					                                          allocation.width,
 | 
				
			||||||
                                          allocation.height);
 | 
					                                          allocation.height);
 | 
				
			||||||
        eek_renderer_set_scale_factor (priv->renderer,
 | 
					        eek_renderer_set_scale_factor (priv->renderer,
 | 
				
			||||||
                                       gtk_widget_get_scale_factor (self));
 | 
					                                       gtk_widget_get_scale_factor (self));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eek_renderer_render_keyboard (priv->renderer, cr);
 | 
					    eek_renderer_render_keyboard (priv->renderer, cr, priv->keyboard);
 | 
				
			||||||
    return FALSE;
 | 
					    return FALSE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -129,6 +130,7 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget     *self,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (priv->renderer)
 | 
					    if (priv->renderer)
 | 
				
			||||||
        eek_renderer_set_allocation_size (priv->renderer,
 | 
					        eek_renderer_set_allocation_size (priv->renderer,
 | 
				
			||||||
 | 
					                                          priv->keyboard->layout,
 | 
				
			||||||
                                          allocation->width,
 | 
					                                          allocation->width,
 | 
				
			||||||
                                          allocation->height);
 | 
					                                          allocation->height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -32,7 +32,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct submission;
 | 
					struct submission;
 | 
				
			||||||
struct squeek_layout_state;
 | 
					struct squeek_layout_state;
 | 
				
			||||||
typedef struct _LevelKeyboard LevelKeyboard; // including causes weird bugs
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_BEGIN_DECLS
 | 
					G_BEGIN_DECLS
 | 
				
			||||||
#define EEK_TYPE_GTK_KEYBOARD (eek_gtk_keyboard_get_type())
 | 
					#define EEK_TYPE_GTK_KEYBOARD (eek_gtk_keyboard_get_type())
 | 
				
			||||||
 | 
				
			|||||||
@ -193,9 +193,9 @@ render_button_label (cairo_t     *cr,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_renderer_render_keyboard (EekRenderer *self,
 | 
					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_width > 0.0);
 | 
				
			||||||
    g_return_if_fail (self->allocation_height > 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_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);
 | 
					    cairo_scale (cr, self->widget_to_layout.scale, self->widget_to_layout.scale);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    squeek_draw_layout_base_view(self->keyboard->layout, self, cr);
 | 
					    squeek_draw_layout_base_view(keyboard->layout, self, cr);
 | 
				
			||||||
    squeek_layout_draw_all_changed(self->keyboard->layout, self, cr);
 | 
					    squeek_layout_draw_all_changed(keyboard->layout, self, cr);
 | 
				
			||||||
    cairo_restore (cr);
 | 
					    cairo_restore (cr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_renderer_free (EekRenderer        *self)
 | 
					eek_renderer_free (EekRenderer        *self)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (self->keyboard) {
 | 
					 | 
				
			||||||
        self->keyboard = NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (self->pcontext) {
 | 
					    if (self->pcontext) {
 | 
				
			||||||
        g_object_unref (self->pcontext);
 | 
					        g_object_unref (self->pcontext);
 | 
				
			||||||
        self->pcontext = NULL;
 | 
					        self->pcontext = NULL;
 | 
				
			||||||
@ -261,7 +258,6 @@ static GType button_type() {
 | 
				
			|||||||
static void
 | 
					static void
 | 
				
			||||||
renderer_init (EekRenderer *self)
 | 
					renderer_init (EekRenderer *self)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    self->keyboard = NULL;
 | 
					 | 
				
			||||||
    self->pcontext = NULL;
 | 
					    self->pcontext = NULL;
 | 
				
			||||||
    self->allocation_width = 0.0;
 | 
					    self->allocation_width = 0.0;
 | 
				
			||||||
    self->allocation_height = 0.0;
 | 
					    self->allocation_height = 0.0;
 | 
				
			||||||
@ -282,7 +278,6 @@ eek_renderer_new (LevelKeyboard  *keyboard,
 | 
				
			|||||||
    renderer_init(renderer);
 | 
					    renderer_init(renderer);
 | 
				
			||||||
    renderer->pcontext = pcontext;
 | 
					    renderer->pcontext = pcontext;
 | 
				
			||||||
    g_object_ref (renderer->pcontext);
 | 
					    g_object_ref (renderer->pcontext);
 | 
				
			||||||
    renderer->keyboard = keyboard;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Create a style context for the layout */
 | 
					    /* Create a style context for the layout */
 | 
				
			||||||
    GtkWidgetPath *path = gtk_widget_path_new();
 | 
					    GtkWidgetPath *path = gtk_widget_path_new();
 | 
				
			||||||
@ -291,7 +286,7 @@ eek_renderer_new (LevelKeyboard  *keyboard,
 | 
				
			|||||||
    renderer->view_context = gtk_style_context_new();
 | 
					    renderer->view_context = gtk_style_context_new();
 | 
				
			||||||
    gtk_style_context_set_path(renderer->view_context, path);
 | 
					    gtk_style_context_set_path(renderer->view_context, path);
 | 
				
			||||||
    gtk_widget_path_unref(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_class(renderer->view_context, "wide");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    gtk_style_context_add_provider (renderer->view_context,
 | 
					    gtk_style_context_add_provider (renderer->view_context,
 | 
				
			||||||
@ -301,7 +296,7 @@ eek_renderer_new (LevelKeyboard  *keyboard,
 | 
				
			|||||||
    /* Create a style context for the buttons */
 | 
					    /* Create a style context for the buttons */
 | 
				
			||||||
    path = gtk_widget_path_new();
 | 
					    path = gtk_widget_path_new();
 | 
				
			||||||
    gtk_widget_path_append_type(path, view_type());
 | 
					    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_iter_add_class(path, -1, "wide");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    gtk_widget_path_append_type(path, button_type());
 | 
					    gtk_widget_path_append_type(path, button_type());
 | 
				
			||||||
@ -318,6 +313,7 @@ eek_renderer_new (LevelKeyboard  *keyboard,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_renderer_set_allocation_size (EekRenderer *renderer,
 | 
					eek_renderer_set_allocation_size (EekRenderer *renderer,
 | 
				
			||||||
 | 
					                                  struct squeek_layout *layout,
 | 
				
			||||||
                                  gdouble      width,
 | 
					                                  gdouble      width,
 | 
				
			||||||
                                  gdouble      height)
 | 
					                                  gdouble      height)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -327,7 +323,7 @@ eek_renderer_set_allocation_size (EekRenderer *renderer,
 | 
				
			|||||||
    renderer->allocation_height = height;
 | 
					    renderer->allocation_height = height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    renderer->widget_to_layout = squeek_layout_calculate_transformation(
 | 
					    renderer->widget_to_layout = squeek_layout_calculate_transformation(
 | 
				
			||||||
                renderer->keyboard->layout,
 | 
					                layout,
 | 
				
			||||||
                renderer->allocation_width, renderer->allocation_height);
 | 
					                renderer->allocation_width, renderer->allocation_height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // This is where size-dependent surfaces would be released
 | 
					    // This is where size-dependent surfaces would be released
 | 
				
			||||||
 | 
				
			|||||||
@ -26,17 +26,25 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "eek-types.h"
 | 
					#include "eek-types.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct squeek_layout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Renders LevelKayboards
 | 
				
			||||||
 | 
					/// It cannot adjust styles at runtime.
 | 
				
			||||||
typedef struct EekRenderer
 | 
					typedef struct EekRenderer
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    LevelKeyboard *keyboard; // unowned
 | 
					 | 
				
			||||||
    PangoContext *pcontext; // owned
 | 
					    PangoContext *pcontext; // owned
 | 
				
			||||||
    GtkCssProvider *css_provider; // owned
 | 
					    GtkCssProvider *css_provider; // owned
 | 
				
			||||||
    GtkStyleContext *view_context; // owned
 | 
					    GtkStyleContext *view_context; // owned
 | 
				
			||||||
    GtkStyleContext *button_context; // TODO: maybe move a copy to each button
 | 
					    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_width;
 | 
				
			||||||
    gdouble allocation_height;
 | 
					    gdouble allocation_height;
 | 
				
			||||||
    gint scale_factor; /* the outputs scale factor */
 | 
					    gint scale_factor; /* the outputs scale factor */
 | 
				
			||||||
 | 
					    /// Coords transformation
 | 
				
			||||||
    struct transformation widget_to_layout;
 | 
					    struct transformation widget_to_layout;
 | 
				
			||||||
} EekRenderer;
 | 
					} EekRenderer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -45,7 +53,7 @@ GType            eek_renderer_get_type         (void) G_GNUC_CONST;
 | 
				
			|||||||
EekRenderer     *eek_renderer_new              (LevelKeyboard     *keyboard,
 | 
					EekRenderer     *eek_renderer_new              (LevelKeyboard     *keyboard,
 | 
				
			||||||
                                                PangoContext    *pcontext);
 | 
					                                                PangoContext    *pcontext);
 | 
				
			||||||
void             eek_renderer_set_allocation_size
 | 
					void             eek_renderer_set_allocation_size
 | 
				
			||||||
                                               (EekRenderer     *renderer,
 | 
					                                               (EekRenderer     *renderer, struct squeek_layout *layout,
 | 
				
			||||||
                                                gdouble          width,
 | 
					                                                gdouble          width,
 | 
				
			||||||
                                                gdouble          height);
 | 
					                                                gdouble          height);
 | 
				
			||||||
void             eek_renderer_set_scale_factor (EekRenderer     *renderer,
 | 
					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);
 | 
					                                                gint             scale);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void             eek_renderer_render_keyboard  (EekRenderer     *renderer,
 | 
					void             eek_renderer_render_keyboard  (EekRenderer     *renderer,
 | 
				
			||||||
                                                cairo_t         *cr);
 | 
					                                                cairo_t         *cr, LevelKeyboard *keyboard);
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_renderer_free (EekRenderer        *self);
 | 
					eek_renderer_free (EekRenderer        *self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -72,9 +72,6 @@ struct _EekboardContextServiceClass {
 | 
				
			|||||||
    GObjectClass parent_class;
 | 
					    GObjectClass parent_class;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*< public >*/
 | 
					    /*< public >*/
 | 
				
			||||||
    struct squeek_view *(*create_keyboard)    (EekboardContextService *self,
 | 
					 | 
				
			||||||
                                        const gchar            *keyboard_type);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* signals */
 | 
					    /* signals */
 | 
				
			||||||
    void         (*destroyed)          (EekboardContextService *self);
 | 
					    void         (*destroyed)          (EekboardContextService *self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user