Add compatibility code for GTK2.
This commit is contained in:
@ -326,22 +326,21 @@ prepare_keyboard_surface (EekGtkKeyboard *keyboard)
|
|||||||
cairo_destroy (cr);
|
cairo_destroy (cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
on_draw (GtkWidget *widget,
|
redraw_keyboard (cairo_t *cr,
|
||||||
cairo_t *cr,
|
EekGtkKeyboard *keyboard,
|
||||||
gpointer user_data)
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height)
|
||||||
{
|
{
|
||||||
EekGtkKeyboard *keyboard = user_data;
|
|
||||||
EekGtkKeyboardPrivate *priv =
|
EekGtkKeyboardPrivate *priv =
|
||||||
EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||||
GtkStyle *style;
|
GtkStyle *style;
|
||||||
GtkStateType state;
|
GtkStateType state;
|
||||||
GtkAllocation allocation;
|
|
||||||
|
|
||||||
g_return_val_if_fail (widget == priv->widget, FALSE);
|
style = gtk_widget_get_style (priv->widget);
|
||||||
|
state = gtk_widget_get_state (priv->widget);
|
||||||
style = gtk_widget_get_style (widget);
|
|
||||||
state = gtk_widget_get_state (widget);
|
|
||||||
|
|
||||||
if (!priv->keyboard_surface) {
|
if (!priv->keyboard_surface) {
|
||||||
PangoFontDescription *base_font;
|
PangoFontDescription *base_font;
|
||||||
@ -349,7 +348,7 @@ on_draw (GtkWidget *widget,
|
|||||||
PangoLayout *layout;
|
PangoLayout *layout;
|
||||||
|
|
||||||
/* compute font sizes which fit in each key shape */
|
/* compute font sizes which fit in each key shape */
|
||||||
context = gtk_widget_get_pango_context (widget);
|
context = gtk_widget_get_pango_context (priv->widget);
|
||||||
layout = pango_layout_new (context);
|
layout = pango_layout_new (context);
|
||||||
base_font = style->font_desc;
|
base_font = style->font_desc;
|
||||||
pango_layout_set_font_description (layout, base_font);
|
pango_layout_set_font_description (layout, base_font);
|
||||||
@ -362,22 +361,60 @@ on_draw (GtkWidget *widget,
|
|||||||
|
|
||||||
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
||||||
|
|
||||||
gtk_widget_get_allocation (widget, &allocation);
|
|
||||||
cairo_set_source_surface (cr,
|
cairo_set_source_surface (cr,
|
||||||
priv->keyboard_surface,
|
priv->keyboard_surface,
|
||||||
0, 0);
|
x, y);
|
||||||
cairo_rectangle (cr,
|
cairo_rectangle (cr, x, y, width, height);
|
||||||
0, 0,
|
|
||||||
allocation.width, allocation.height);
|
|
||||||
cairo_fill (cr);
|
cairo_fill (cr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if GTK_CHECK_VERSION (2, 91, 2)
|
||||||
|
static gboolean
|
||||||
|
on_draw (GtkWidget *widget,
|
||||||
|
cairo_t *cr,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
EekGtkKeyboard *keyboard = user_data;
|
||||||
|
EekGtkKeyboardPrivate *priv =
|
||||||
|
EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||||
|
GtkAllocation allocation;
|
||||||
|
|
||||||
|
g_return_val_if_fail (widget == priv->widget, FALSE);
|
||||||
|
|
||||||
|
gtk_widget_get_allocation (priv->widget, &allocation);
|
||||||
|
|
||||||
|
redraw_keyboard (cr, keyboard, 0, 0, allocation.width, allocation.height);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static gboolean
|
||||||
|
on_expose_event (GtkWidget *widget,
|
||||||
|
GdkEventExpose *event,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
EekGtkKeyboard *keyboard = user_data;
|
||||||
|
EekGtkKeyboardPrivate *priv =
|
||||||
|
EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||||
|
cairo_t *cr;
|
||||||
|
|
||||||
|
g_return_val_if_fail (widget == priv->widget, FALSE);
|
||||||
|
|
||||||
|
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
|
||||||
|
redraw_keyboard (cr, keyboard,
|
||||||
|
event->area.x, event->area.y,
|
||||||
|
event->area.width, event->area.height);
|
||||||
|
cairo_destroy (cr);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
redraw_key (EekGtkKeyboard *keyboard,
|
redraw_key (cairo_t *cr,
|
||||||
EekKey *key,
|
EekKey *key,
|
||||||
gint key_surface_type)
|
gint key_surface_type,
|
||||||
|
EekGtkKeyboard *keyboard)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv =
|
EekGtkKeyboardPrivate *priv =
|
||||||
EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||||
@ -388,7 +425,6 @@ redraw_key (EekGtkKeyboard *keyboard,
|
|||||||
GtkStyle *style;
|
GtkStyle *style;
|
||||||
GtkStateType state;
|
GtkStateType state;
|
||||||
cairo_surface_t **key_surfaces, *large_surface;
|
cairo_surface_t **key_surfaces, *large_surface;
|
||||||
cairo_t *cr;
|
|
||||||
|
|
||||||
g_return_if_fail (priv->keyboard_surface);
|
g_return_if_fail (priv->keyboard_surface);
|
||||||
|
|
||||||
@ -406,8 +442,6 @@ redraw_key (EekGtkKeyboard *keyboard,
|
|||||||
x -= (width - bounds.width) / 2;
|
x -= (width - bounds.width) / 2;
|
||||||
y -= (height - bounds.height) / 2;
|
y -= (height - bounds.height) / 2;
|
||||||
|
|
||||||
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
|
|
||||||
|
|
||||||
style = gtk_widget_get_style (priv->widget);
|
style = gtk_widget_get_style (priv->widget);
|
||||||
state = gtk_widget_get_state (priv->widget);
|
state = gtk_widget_get_state (priv->widget);
|
||||||
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
||||||
@ -435,7 +469,6 @@ redraw_key (EekGtkKeyboard *keyboard,
|
|||||||
eek_draw_key_label (cr, key, priv->fonts);
|
eek_draw_key_label (cr, key, priv->fonts);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cairo_destroy (cr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -443,8 +476,12 @@ on_key_pressed (EekKey *key, gpointer user_data)
|
|||||||
{
|
{
|
||||||
EekGtkKeyboard *keyboard = user_data;
|
EekGtkKeyboard *keyboard = user_data;
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||||
|
cairo_t *cr;
|
||||||
|
|
||||||
|
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
|
||||||
|
redraw_key (cr, key, KEY_SURFACE_LARGE, keyboard);
|
||||||
|
cairo_destroy (cr);
|
||||||
|
|
||||||
redraw_key (EEK_GTK_KEYBOARD(keyboard), key, KEY_SURFACE_LARGE);
|
|
||||||
priv->key = key;
|
priv->key = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,12 +490,15 @@ on_key_released (EekKey *key, gpointer user_data)
|
|||||||
{
|
{
|
||||||
EekGtkKeyboard *keyboard = user_data;
|
EekGtkKeyboard *keyboard = user_data;
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||||
|
cairo_t *cr;
|
||||||
|
|
||||||
|
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
|
||||||
if (priv->key) {
|
if (priv->key) {
|
||||||
redraw_key (EEK_GTK_KEYBOARD(keyboard), priv->key, KEY_SURFACE_NORMAL);
|
redraw_key (cr, priv->key, KEY_SURFACE_NORMAL, keyboard);
|
||||||
priv->key = NULL;
|
priv->key = NULL;
|
||||||
}
|
}
|
||||||
redraw_key (EEK_GTK_KEYBOARD(keyboard), key, KEY_SURFACE_NORMAL);
|
redraw_key (cr, key, KEY_SURFACE_NORMAL, keyboard);
|
||||||
|
cairo_destroy (cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -567,8 +607,13 @@ eek_gtk_keyboard_get_widget (EekGtkKeyboard *keyboard)
|
|||||||
GDK_KEY_RELEASE_MASK |
|
GDK_KEY_RELEASE_MASK |
|
||||||
GDK_BUTTON_PRESS_MASK |
|
GDK_BUTTON_PRESS_MASK |
|
||||||
GDK_BUTTON_RELEASE_MASK);
|
GDK_BUTTON_RELEASE_MASK);
|
||||||
|
#if GTK_CHECK_VERSION (2, 91, 2)
|
||||||
g_signal_connect (priv->widget, "draw",
|
g_signal_connect (priv->widget, "draw",
|
||||||
G_CALLBACK (on_draw), keyboard);
|
G_CALLBACK (on_draw), keyboard);
|
||||||
|
#else
|
||||||
|
g_signal_connect (priv->widget, "expose_event",
|
||||||
|
G_CALLBACK (on_expose_event), keyboard);
|
||||||
|
#endif
|
||||||
g_signal_connect (priv->widget, "size-allocate",
|
g_signal_connect (priv->widget, "size-allocate",
|
||||||
G_CALLBACK (on_size_allocate), keyboard);
|
G_CALLBACK (on_size_allocate), keyboard);
|
||||||
g_signal_connect (priv->widget, "key-press-event",
|
g_signal_connect (priv->widget, "key-press-event",
|
||||||
|
|||||||
Reference in New Issue
Block a user