From 7af0329bf4fcbd902a3d2dda96bdf215b14d62a4 Mon Sep 17 00:00:00 2001 From: punkrockguy318 Date: Thu, 17 Dec 2009 06:19:08 +0000 Subject: [PATCH] added functional GTK2/SDL framework currently seperate from all fceux code but will soon be integrated into fceux in order to create an integrated UI on the linux build --- src/drivers/sdl/build_gui.sh | 4 ++ src/drivers/sdl/gui.cpp | 94 +++++++++++++++++++++++++++++++++++ src/drivers/sdl/hello.bmp | Bin 0 -> 852854 bytes src/drivers/sdl/sdl.cpp | 36 +++++++------- 4 files changed, 116 insertions(+), 18 deletions(-) create mode 100755 src/drivers/sdl/build_gui.sh create mode 100644 src/drivers/sdl/gui.cpp create mode 100644 src/drivers/sdl/hello.bmp diff --git a/src/drivers/sdl/build_gui.sh b/src/drivers/sdl/build_gui.sh new file mode 100755 index 00000000..73282a7c --- /dev/null +++ b/src/drivers/sdl/build_gui.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# builds the gtk2 gui test app +# requires gtk2 libraries +g++ `pkg-config --cflags --libs gtk+-2.0` -lSDL gui.cpp -o gui diff --git a/src/drivers/sdl/gui.cpp b/src/drivers/sdl/gui.cpp new file mode 100644 index 00000000..22e8e22f --- /dev/null +++ b/src/drivers/sdl/gui.cpp @@ -0,0 +1,94 @@ +#include +#include + +#include + +#define WIDTH 600 +#define HEIGHT 600 + +GtkWidget* MainWindow; +SDL_Surface* screen = NULL; +SDL_Surface* hello = NULL; + +gint mainLoop(gpointer data) +{ + SDL_UpdateRect(screen, 0, 0, WIDTH, HEIGHT); + // TODO: integrate main SDL loop here + + + SDL_BlitSurface (hello, NULL, screen, NULL); + + SDL_Flip( screen ); + return TRUE; +} + +gint configureEvent (GtkWidget* widget, GdkEventConfigure* event) +{ + screen = SDL_SetVideoMode(event->width, event->height, 0, 0); + + return TRUE; +} + +int main(int argc, char** argv) +{ + + gtk_init(&argc, &argv); + + MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(MainWindow), "fceuX GTK GUI - WIP"); + gtk_widget_set_usize(MainWindow, WIDTH, HEIGHT); + gtk_widget_realize(MainWindow); + + // event handlers + gtk_widget_add_events(MainWindow, GDK_BUTTON_PRESS_MASK); + gtk_signal_connect(GTK_OBJECT(MainWindow), "configure_event", + GTK_SIGNAL_FUNC(configureEvent), 0); + + + + GtkWidget* socket = gtk_socket_new(); + gtk_widget_show (socket) ; + gtk_container_add (GTK_CONTAINER(MainWindow), socket); + + gtk_widget_realize (socket); + + + // Hack to get SDL to use GTK window + // broken as fuck? + char SDL_windowhack[24]; + sprintf(SDL_windowhack, "SDL_WINDOWID=%ld", (long int)gtk_socket_get_id (GTK_SOCKET(socket))); + putenv(SDL_windowhack); + + + // init SDL + if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) + { + fprintf(stderr, "Couldn't init SDL: %s\n", SDL_GetError()); + gtk_main_quit(); + } + + screen = SDL_SetVideoMode(WIDTH, HEIGHT, 0, 0); + + + hello = SDL_LoadBMP( "hello.bmp" ); + + SDL_BlitSurface (hello, NULL, screen, NULL); + + SDL_Flip( screen ); + + + + + + + // signal handlers + g_signal_connect(G_OBJECT(MainWindow), "delete-event", gtk_main_quit, NULL); + gtk_idle_add(mainLoop, MainWindow); + + gtk_widget_show_all(MainWindow); + + gtk_main(); + SDL_Quit(); + + return 0; +} diff --git a/src/drivers/sdl/hello.bmp b/src/drivers/sdl/hello.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d08f51ccac66987e5e565b26c21a703d2fccc324 GIT binary patch literal 852854 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