root/gpu/gles2_conform_support/native/egl_native_gtk.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. GTFNativeCreateDisplay
  2. GTFNativeDestroyDisplay
  3. GTFNativeDestroyWindow
  4. GTFNativeCreateWindow

// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>

extern "C" {

#if defined(GLES2_CONFORM_SUPPORT_ONLY)
#include "gpu/gles2_conform_support/gtf/gtf_stubs.h"
#else
#include "third_party/gles2_conform/GTF_ES/glsl/GTF/Source/eglNative.h"
#endif

GTFbool GTFNativeCreateDisplay(EGLNativeDisplayType *pNativeDisplay) {
  int argc = 0;
  char **argv = NULL;
  gtk_init(&argc, &argv);
  *pNativeDisplay = GDK_DISPLAY();;
  return *pNativeDisplay ? GTFtrue : GTFfalse;
}

void GTFNativeDestroyDisplay(EGLNativeDisplayType nativeDisplay) {
  gtk_exit(0);
}

void GTFNativeDestroyWindow(EGLNativeDisplayType nativeDisplay,
                            EGLNativeWindowType nativeWindow) {
  GdkWindow* window = gdk_window_lookup(nativeWindow);
  gpointer widget = NULL;
  gdk_window_get_user_data(window, &widget);
  gtk_widget_destroy(GTK_WIDGET(widget));
}

GTFbool GTFNativeCreateWindow(EGLNativeDisplayType nativeDisplay,
                              EGLDisplay eglDisplay, EGLConfig eglConfig,
                              const char* title, int width, int height,
                              EGLNativeWindowType *pNativeWindow) {
#ifdef CHROMEOS_GLES2_CONFORMANCE
  // Due to the behavior of ChromeOS window manager, which always resize the
  // top level window etc, we had to create a popup window.
  GtkWidget* hwnd = gtk_window_new(GTK_WINDOW_POPUP);
#else
  GtkWidget* hwnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);
#endif

  gtk_window_set_title(GTK_WINDOW(hwnd), title);
  gtk_window_set_default_size(GTK_WINDOW(hwnd), width, height);
  gtk_widget_set_double_buffered(hwnd, FALSE);
  gtk_widget_set_app_paintable(hwnd, TRUE);

  // We had to enter gtk main loop to realize the window on ChromeOS.
  gtk_widget_show_now(hwnd);

  *pNativeWindow = GDK_WINDOW_XWINDOW(hwnd->window);

  return GTFtrue;
}

}  // extern "C"

/* [<][>][^][v][top][bottom][index][help] */