Move EekGtkRenderer features into EekRenderer
This commit is contained in:
		@ -33,7 +33,7 @@
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "eek-gtk-keyboard.h"
 | 
			
		||||
#include "eek-gtk-renderer.h"
 | 
			
		||||
#include "eek-renderer.h"
 | 
			
		||||
#include "eek-keyboard.h"
 | 
			
		||||
#include "eek-section.h"
 | 
			
		||||
#include "eek-key.h"
 | 
			
		||||
@ -112,7 +112,7 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
 | 
			
		||||
        PangoContext *pcontext;
 | 
			
		||||
 | 
			
		||||
        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)
 | 
			
		||||
            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 <string.h>
 | 
			
		||||
#include <gdk-pixbuf/gdk-pixbuf.h>
 | 
			
		||||
#include <gtk/gtk.h>
 | 
			
		||||
 | 
			
		||||
#include "eek-key.h"
 | 
			
		||||
#include "eek-section.h"
 | 
			
		||||
@ -52,6 +54,7 @@ typedef struct _EekRendererPrivate
 | 
			
		||||
    PangoFontDescription *font;
 | 
			
		||||
    GHashTable *outline_surface_cache;
 | 
			
		||||
    GHashTable *active_outline_surface_cache;
 | 
			
		||||
    GHashTable *icons;
 | 
			
		||||
    cairo_surface_t *keyboard_surface;
 | 
			
		||||
    gulong symbol_index_changed_handler;
 | 
			
		||||
 | 
			
		||||
@ -776,6 +779,8 @@ eek_renderer_dispose (GObject *object)
 | 
			
		||||
        priv->pcontext = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    g_clear_pointer (&priv->icons, g_hash_table_destroy);
 | 
			
		||||
 | 
			
		||||
    /* this will release all allocated surfaces and font if any */
 | 
			
		||||
    invalidate (EEK_RENDERER(object));
 | 
			
		||||
 | 
			
		||||
@ -857,6 +862,14 @@ eek_renderer_init (EekRenderer *self)
 | 
			
		||||
                               (GDestroyNotify)cairo_surface_destroy);
 | 
			
		||||
    priv->keyboard_surface = NULL;
 | 
			
		||||
    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
 | 
			
		||||
@ -1083,14 +1096,32 @@ eek_renderer_get_icon_surface (EekRenderer *renderer,
 | 
			
		||||
                               gint size,
 | 
			
		||||
                               gint scale)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererClass *klass;
 | 
			
		||||
    GError *error = NULL;
 | 
			
		||||
    cairo_surface_t *surface;
 | 
			
		||||
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
 | 
			
		||||
 | 
			
		||||
    klass = EEK_RENDERER_GET_CLASS(renderer);
 | 
			
		||||
    if (klass->get_icon_surface)
 | 
			
		||||
        return klass->get_icon_surface (renderer, icon_name, size, scale);
 | 
			
		||||
    return NULL;
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
    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 surface;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,6 @@ sources = [
 | 
			
		||||
  '../eek/eek-container.c',
 | 
			
		||||
  '../eek/eek-element.c',
 | 
			
		||||
  '../eek/eek-gtk-keyboard.c',
 | 
			
		||||
  '../eek/eek-gtk-renderer.c',
 | 
			
		||||
  '../eek/eek-key.c',
 | 
			
		||||
  '../eek/eek-keyboard.c',
 | 
			
		||||
  '../eek/eek-keyboard-drawing.c',
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user