Merge branch 'merge-renderers' into 'master'
Move EekGtkRenderer features into EekRenderer Closes #61 See merge request Librem5/squeekboard!84
This commit is contained in:
@ -33,7 +33,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "eek-gtk-keyboard.h"
|
#include "eek-gtk-keyboard.h"
|
||||||
#include "eek-gtk-renderer.h"
|
#include "eek-renderer.h"
|
||||||
#include "eek-keyboard.h"
|
#include "eek-keyboard.h"
|
||||||
#include "eek-section.h"
|
#include "eek-section.h"
|
||||||
#include "eek-key.h"
|
#include "eek-key.h"
|
||||||
@ -112,7 +112,7 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
|
|||||||
PangoContext *pcontext;
|
PangoContext *pcontext;
|
||||||
|
|
||||||
pcontext = gtk_widget_get_pango_context (self);
|
pcontext = gtk_widget_get_pango_context (self);
|
||||||
priv->renderer = eek_gtk_renderer_new (priv->keyboard, pcontext, self);
|
priv->renderer = eek_renderer_new (priv->keyboard, pcontext);
|
||||||
if (priv->theme)
|
if (priv->theme)
|
||||||
eek_renderer_set_theme (priv->renderer, priv->theme);
|
eek_renderer_set_theme (priv->renderer, priv->theme);
|
||||||
|
|
||||||
|
|||||||
@ -1,110 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
* Copyright (C) 2011 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
* 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
|
||||||
|
|
||||||
#include "eek-gtk-renderer.h"
|
|
||||||
#include "eek-key.h"
|
|
||||||
|
|
||||||
struct _EekGtkRenderer {
|
|
||||||
EekRenderer parent;
|
|
||||||
|
|
||||||
GHashTable *icons;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekGtkRenderer, eek_gtk_renderer, EEK_TYPE_RENDERER);
|
|
||||||
|
|
||||||
static cairo_surface_t *
|
|
||||||
eek_gtk_renderer_real_get_icon_surface (EekRenderer *renderer,
|
|
||||||
const gchar *icon_name,
|
|
||||||
gint size,
|
|
||||||
gint scale)
|
|
||||||
{
|
|
||||||
EekGtkRenderer *self = EEK_GTK_RENDERER (renderer);
|
|
||||||
GError *error = NULL;
|
|
||||||
cairo_surface_t *surface;
|
|
||||||
|
|
||||||
surface = g_hash_table_lookup (self->icons, icon_name);
|
|
||||||
if (!surface) {
|
|
||||||
surface = gtk_icon_theme_load_surface (gtk_icon_theme_get_default (),
|
|
||||||
icon_name,
|
|
||||||
size,
|
|
||||||
scale,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
&error);
|
|
||||||
g_hash_table_insert (self->icons, g_strdup(icon_name), surface);
|
|
||||||
if (surface == NULL) {
|
|
||||||
g_warning ("can't get icon surface for %s: %s",
|
|
||||||
icon_name,
|
|
||||||
error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return surface;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eek_gtk_renderer_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
EekGtkRenderer *self = EEK_GTK_RENDERER (object);
|
|
||||||
|
|
||||||
g_clear_pointer (&self->icons, g_hash_table_destroy);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (eek_gtk_renderer_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eek_gtk_renderer_class_init (EekGtkRendererClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = (GObjectClass *)klass;
|
|
||||||
EekRendererClass *renderer_class = EEK_RENDERER_CLASS (klass);
|
|
||||||
|
|
||||||
object_class->dispose = eek_gtk_renderer_dispose;
|
|
||||||
|
|
||||||
renderer_class->get_icon_surface = eek_gtk_renderer_real_get_icon_surface;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eek_gtk_renderer_init (EekGtkRenderer *self)
|
|
||||||
{
|
|
||||||
GtkIconTheme *theme = gtk_icon_theme_get_default ();
|
|
||||||
|
|
||||||
gtk_icon_theme_add_resource_path (theme, "/sm/puri/squeekboard/icons");
|
|
||||||
self->icons = g_hash_table_new_full (g_str_hash,
|
|
||||||
g_str_equal,
|
|
||||||
g_free,
|
|
||||||
(GDestroyNotify)cairo_surface_destroy);
|
|
||||||
}
|
|
||||||
|
|
||||||
EekRenderer *
|
|
||||||
eek_gtk_renderer_new (EekKeyboard *keyboard,
|
|
||||||
PangoContext *pcontext,
|
|
||||||
GtkWidget *widget)
|
|
||||||
{
|
|
||||||
return g_object_new (EEK_TYPE_GTK_RENDERER,
|
|
||||||
"keyboard", keyboard,
|
|
||||||
"pango-context", pcontext,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
* Copyright (C) 2010-2011 Red Hat, Inc.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
* 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef EEK_GTK_RENDERER_H
|
|
||||||
#define EEK_GTK_RENDERER_H 1
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include "eek-renderer.h"
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define EEK_TYPE_GTK_RENDERER (eek_gtk_renderer_get_type())
|
|
||||||
G_DECLARE_FINAL_TYPE (EekGtkRenderer, eek_gtk_renderer, EEK, GTK_RENDERER, EekRenderer)
|
|
||||||
|
|
||||||
GType eek_gtk_renderer_get_type (void) G_GNUC_CONST;
|
|
||||||
EekRenderer *eek_gtk_renderer_new (EekKeyboard *keyboard,
|
|
||||||
PangoContext *pcontext,
|
|
||||||
GtkWidget *widget);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
#endif /* EEK_GTK_RENDERER_H */
|
|
||||||
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#include "eek-key.h"
|
#include "eek-key.h"
|
||||||
#include "eek-section.h"
|
#include "eek-section.h"
|
||||||
@ -52,6 +54,7 @@ typedef struct _EekRendererPrivate
|
|||||||
PangoFontDescription *font;
|
PangoFontDescription *font;
|
||||||
GHashTable *outline_surface_cache;
|
GHashTable *outline_surface_cache;
|
||||||
GHashTable *active_outline_surface_cache;
|
GHashTable *active_outline_surface_cache;
|
||||||
|
GHashTable *icons;
|
||||||
cairo_surface_t *keyboard_surface;
|
cairo_surface_t *keyboard_surface;
|
||||||
gulong symbol_index_changed_handler;
|
gulong symbol_index_changed_handler;
|
||||||
|
|
||||||
@ -776,6 +779,8 @@ eek_renderer_dispose (GObject *object)
|
|||||||
priv->pcontext = NULL;
|
priv->pcontext = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_clear_pointer (&priv->icons, g_hash_table_destroy);
|
||||||
|
|
||||||
/* this will release all allocated surfaces and font if any */
|
/* this will release all allocated surfaces and font if any */
|
||||||
invalidate (EEK_RENDERER(object));
|
invalidate (EEK_RENDERER(object));
|
||||||
|
|
||||||
@ -857,6 +862,14 @@ eek_renderer_init (EekRenderer *self)
|
|||||||
(GDestroyNotify)cairo_surface_destroy);
|
(GDestroyNotify)cairo_surface_destroy);
|
||||||
priv->keyboard_surface = NULL;
|
priv->keyboard_surface = NULL;
|
||||||
priv->symbol_index_changed_handler = 0;
|
priv->symbol_index_changed_handler = 0;
|
||||||
|
|
||||||
|
GtkIconTheme *theme = gtk_icon_theme_get_default ();
|
||||||
|
|
||||||
|
gtk_icon_theme_add_resource_path (theme, "/sm/puri/squeekboard/icons");
|
||||||
|
priv->icons = g_hash_table_new_full (g_str_hash,
|
||||||
|
g_str_equal,
|
||||||
|
g_free,
|
||||||
|
(GDestroyNotify)cairo_surface_destroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1083,15 +1096,33 @@ eek_renderer_get_icon_surface (EekRenderer *renderer,
|
|||||||
gint size,
|
gint size,
|
||||||
gint scale)
|
gint scale)
|
||||||
{
|
{
|
||||||
EekRendererClass *klass;
|
GError *error = NULL;
|
||||||
|
cairo_surface_t *surface;
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
|
g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
|
||||||
|
|
||||||
klass = EEK_RENDERER_GET_CLASS(renderer);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
if (klass->get_icon_surface)
|
|
||||||
return klass->get_icon_surface (renderer, icon_name, size, scale);
|
surface = g_hash_table_lookup (priv->icons, icon_name);
|
||||||
|
if (!surface) {
|
||||||
|
surface = gtk_icon_theme_load_surface (gtk_icon_theme_get_default (),
|
||||||
|
icon_name,
|
||||||
|
size,
|
||||||
|
scale,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
&error);
|
||||||
|
g_hash_table_insert (priv->icons, g_strdup(icon_name), surface);
|
||||||
|
if (surface == NULL) {
|
||||||
|
g_warning ("can't get icon surface for %s: %s",
|
||||||
|
icon_name,
|
||||||
|
error->message);
|
||||||
|
g_error_free (error);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return surface;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
eek_renderer_render_key (EekRenderer *renderer,
|
eek_renderer_render_key (EekRenderer *renderer,
|
||||||
|
|||||||
@ -16,7 +16,6 @@ sources = [
|
|||||||
'../eek/eek-container.c',
|
'../eek/eek-container.c',
|
||||||
'../eek/eek-element.c',
|
'../eek/eek-element.c',
|
||||||
'../eek/eek-gtk-keyboard.c',
|
'../eek/eek-gtk-keyboard.c',
|
||||||
'../eek/eek-gtk-renderer.c',
|
|
||||||
'../eek/eek-key.c',
|
'../eek/eek-key.c',
|
||||||
'../eek/eek-keyboard.c',
|
'../eek/eek-keyboard.c',
|
||||||
'../eek/eek-keyboard-drawing.c',
|
'../eek/eek-keyboard-drawing.c',
|
||||||
|
|||||||
Reference in New Issue
Block a user