Add Clutter support to eekboard-server.
This commit is contained in:
		@ -23,6 +23,10 @@
 | 
				
			|||||||
#include "config.h"
 | 
					#include "config.h"
 | 
				
			||||||
#endif  /* HAVE_CONFIG_H */
 | 
					#endif  /* HAVE_CONFIG_H */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if HAVE_CLUTTER_GTK
 | 
				
			||||||
 | 
					#include <clutter-gtk/clutter-gtk.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "server.h"
 | 
					#include "server.h"
 | 
				
			||||||
#include "eek/eek.h"
 | 
					#include "eek/eek.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -34,10 +38,17 @@ main (int argc, char **argv)
 | 
				
			|||||||
    GError *error;
 | 
					    GError *error;
 | 
				
			||||||
    GMainLoop *loop;
 | 
					    GMainLoop *loop;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!gtk_init_check (&argc, &argv)) {
 | 
					#if HAVE_CLUTTER_GTK
 | 
				
			||||||
        g_warning ("Can't init GTK");
 | 
					    if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) {
 | 
				
			||||||
 | 
					        g_printerr ("Can't init GTK with Clutter\n");
 | 
				
			||||||
        exit (1);
 | 
					        exit (1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    if (!gtk_init_check (&argc, &argv)) {
 | 
				
			||||||
 | 
					        g_printerr ("Can't init GTK\n");
 | 
				
			||||||
 | 
					        exit (1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    error = NULL;
 | 
					    error = NULL;
 | 
				
			||||||
    connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
 | 
					    connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										45
									
								
								src/server.c
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								src/server.c
									
									
									
									
									
								
							@ -22,7 +22,14 @@
 | 
				
			|||||||
#endif  /* HAVE_CONFIG_H */
 | 
					#endif  /* HAVE_CONFIG_H */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "eek/eek.h"
 | 
					#include "eek/eek.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if HAVE_CLUTTER_GTK
 | 
				
			||||||
 | 
					#include <clutter-gtk/clutter-gtk.h>
 | 
				
			||||||
 | 
					#include "eek/eek-clutter.h"
 | 
				
			||||||
 | 
					#else  /* HAVE_CLUTTER_GTK */
 | 
				
			||||||
#include "eek/eek-gtk.h"
 | 
					#include "eek/eek-gtk.h"
 | 
				
			||||||
 | 
					#endif  /* !HAVE_CLUTTER_GTK */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "server.h"
 | 
					#include "server.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CSW 640
 | 
					#define CSW 640
 | 
				
			||||||
@ -79,6 +86,20 @@ struct _EekboardServerClass {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
G_DEFINE_TYPE (EekboardServer, eekboard_server, G_TYPE_OBJECT);
 | 
					G_DEFINE_TYPE (EekboardServer, eekboard_server, G_TYPE_OBJECT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if HAVE_CLUTTER_GTK
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					on_allocation_changed (ClutterActor          *stage,
 | 
				
			||||||
 | 
					                       ClutterActorBox       *box,
 | 
				
			||||||
 | 
					                       ClutterAllocationFlags flags,
 | 
				
			||||||
 | 
					                       gpointer               user_data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ClutterActor *actor = user_data;
 | 
				
			||||||
 | 
					    clutter_actor_set_size (actor,
 | 
				
			||||||
 | 
					                            box->x2 - box->x1,
 | 
				
			||||||
 | 
					                            box->y2 - box->y1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
update_widget (EekboardServer *server)
 | 
					update_widget (EekboardServer *server)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -87,6 +108,10 @@ update_widget (EekboardServer *server)
 | 
				
			|||||||
    gint monitor;
 | 
					    gint monitor;
 | 
				
			||||||
    GdkRectangle rect;
 | 
					    GdkRectangle rect;
 | 
				
			||||||
    EekBounds bounds;
 | 
					    EekBounds bounds;
 | 
				
			||||||
 | 
					#if HAVE_CLUTTER_GTK
 | 
				
			||||||
 | 
					    ClutterActor *stage, *actor;
 | 
				
			||||||
 | 
					    ClutterColor stage_color = { 0xff, 0xff, 0xff, 0xff };
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (server->widget)
 | 
					    if (server->widget)
 | 
				
			||||||
        gtk_widget_destroy (server->widget);
 | 
					        gtk_widget_destroy (server->widget);
 | 
				
			||||||
@ -94,9 +119,25 @@ update_widget (EekboardServer *server)
 | 
				
			|||||||
    if (server->window)
 | 
					    if (server->window)
 | 
				
			||||||
        gtk_widget_destroy (server->window);
 | 
					        gtk_widget_destroy (server->window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    server->widget = eek_gtk_keyboard_new (server->keyboard);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    eek_element_get_bounds (EEK_ELEMENT(server->keyboard), &bounds);
 | 
					    eek_element_get_bounds (EEK_ELEMENT(server->keyboard), &bounds);
 | 
				
			||||||
 | 
					#if HAVE_CLUTTER_GTK
 | 
				
			||||||
 | 
					    server->widget = gtk_clutter_embed_new ();
 | 
				
			||||||
 | 
					    stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED(server->widget));
 | 
				
			||||||
 | 
					    actor = eek_clutter_keyboard_new (server->keyboard);
 | 
				
			||||||
 | 
					    clutter_container_add_actor (CLUTTER_CONTAINER(stage), actor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    clutter_stage_set_color (CLUTTER_STAGE(stage), &stage_color);
 | 
				
			||||||
 | 
					    clutter_stage_set_user_resizable (CLUTTER_STAGE(stage), TRUE);
 | 
				
			||||||
 | 
					    clutter_stage_set_minimum_size (CLUTTER_STAGE(stage),
 | 
				
			||||||
 | 
					                                    bounds.width / 3,
 | 
				
			||||||
 | 
					                                    bounds.height / 3);
 | 
				
			||||||
 | 
					    g_signal_connect (stage,
 | 
				
			||||||
 | 
					                      "allocation-changed",
 | 
				
			||||||
 | 
					                      G_CALLBACK(on_allocation_changed),
 | 
				
			||||||
 | 
					                      actor);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    server->widget = eek_gtk_keyboard_new (server->keyboard);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    gtk_widget_set_size_request (server->widget, bounds.width, bounds.height);
 | 
					    gtk_widget_set_size_request (server->widget, bounds.width, bounds.height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    server->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 | 
					    server->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user