layout: Minor generalizations

This commit is contained in:
Dorota Czaplejewicz
2020-02-26 07:59:29 +00:00
parent 22daefba3a
commit 784f9127fa
5 changed files with 24 additions and 22 deletions

View File

@ -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);

View File

@ -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())

View File

@ -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

View File

@ -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);

View File

@ -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);