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