0

Implemented window class on linux. Standalone demos are working on linux now.

Review URL: http://codereview.chromium.org/565041

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38106 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
alokp@chromium.org
2010-02-04 15:59:35 +00:00
parent 267580c14d
commit 3bd19b38cc
3 changed files with 63 additions and 8 deletions

@ -43,17 +43,22 @@
'../gpu.gyp:command_buffer_service',
],
'sources': [
'framework/main_exe.cc',
'framework/window.cc',
'framework/window.h',
],
'conditions': [
['OS=="linux"', {'sources': ['framework/window_linux.cc']}],
['OS=="mac"', {'sources': ['framework/window_mac.mm']}],
['OS=="win"', {'sources': ['framework/window_win.cc']}],
['OS=="linux"', {
'sources': ['framework/window_linux.cc'],
'dependencies': ['../../build/linux/system.gyp:gtk'],
}],
['OS=="mac"', {
'sources': ['framework/window_mac.mm'],
}],
['OS=="win"', {
'sources': ['framework/window_win.cc'],
}],
],
'direct_dependent_settings': {
'sources': ['framework/main_exe.cc'],
},
},
{
'target_name': 'gpu_demo_framework_pepper',

@ -6,12 +6,20 @@
#include "base/logging.h"
#include "gpu/demos/framework/window.h"
#if defined(OS_LINUX)
#include <gtk/gtk.h>
#endif // OS_LINUX
namespace {
static const int kWindowWidth = 512;
static const int kWindowHeight = 512;
} // namespace.
int main(int argc, char *argv[]) {
#if defined(OS_LINUX)
gtk_init(&argc, &argv);
#endif // OS_LINUX
// AtExitManager is used by singleton classes to delete themselves when
// the program terminates.
base::AtExitManager at_exit_manager_;
@ -22,3 +30,4 @@ int main(int argc, char *argv[]) {
window.MainLoop();
return EXIT_SUCCESS;
}

@ -4,19 +4,60 @@
#include "gpu/demos/framework/window.h"
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include "base/utf_string_conversions.h"
namespace {
using gpu::demos::Window;
gboolean OnDelete(GtkWidget* widget, GdkEventExpose* event) {
gtk_main_quit();
return FALSE;
}
gboolean OnExpose(GtkWidget* widget, GdkEventExpose* event, gpointer data) {
Window* window = static_cast<Window*>(data);
window->OnPaint();
// TODO(alokp): Figure out why this is crashing. Animation will not work
// until then.
//gtk_widget_queue_draw(widget);
return FALSE;
}
} // namespace
namespace gpu {
namespace demos {
void Window::MainLoop() {
gtk_signal_connect(GTK_OBJECT(window_handle_),
"delete_event",
reinterpret_cast<GtkSignalFunc>(OnDelete),
NULL);
gtk_signal_connect(GTK_OBJECT(window_handle_),
"expose_event",
reinterpret_cast<GtkSignalFunc>(OnExpose),
this);
gtk_main();
}
gfx::NativeWindow Window::CreateNativeWindow(const wchar_t* title,
int width, int height) {
return NULL;
GtkWidget* hwnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(hwnd), WideToUTF8(title).c_str());
gtk_window_set_default_size(GTK_WINDOW(hwnd), width, height);
gtk_widget_set_double_buffered(hwnd, FALSE);
gtk_widget_set_app_paintable(hwnd, TRUE);
gtk_widget_show(hwnd);
return GTK_WINDOW(hwnd);
}
gfx::PluginWindowHandle Window::PluginWindow(gfx::NativeWindow hwnd) {
return gfx::kNullPluginWindow;
return GDK_WINDOW_XWINDOW(GTK_WIDGET(hwnd)->window);
}
} // namespace demos