Beispiel #1
0
GLContext* GLContext::getContextForWidget(GtkWidget* widget)
{
    ASSERT(widget);

    WindowContextMap& windowContexts = windowContextsMap();
    WindowContextMap::iterator i = windowContextsMap().find(widget);
    if (i != windowContexts.end())
        return i->second.get();

    // It's important that this context doesn't hang around after the window
    // is unmapped, so we make sure to clean it up once that happens.
    if (!g_signal_handler_find(widget, G_SIGNAL_MATCH_FUNC, 0, 0, 0, reinterpret_cast<void*>(shutdownGLContext), 0))
        g_signal_connect(widget, "unmap", G_CALLBACK(shutdownGLContext), 0);

    // If this GDK window doesn't have its own native window then, we don't want
    // to use it for rendering, since we'll be drawing over some other widget's area.
    GdkWindow* gdkWindow = gtk_widget_get_window(widget);
    GLContext* context = gdkWindow && gdk_window_has_native(gdkWindow) ?  createContext(GDK_WINDOW_XID(gdkWindow)) : createContext(0);

    if (!context)
        return 0;

    windowContexts.set(widget, adoptPtr(context));
    return context;
}
Beispiel #2
0
static void
save_window (GString *s,
             GdkWindow *window)
{
    gint x, y;
    GdkColor *color;

    gdk_window_get_position (window, &x, &y);
    color = g_object_get_data (G_OBJECT (window), "color");

    g_string_append_printf (s, "%d,%d %dx%d (%d,%d,%d) %d %d\n",
                            x, y,
                            gdk_window_get_width (window),
                            gdk_window_get_height (window),
                            color->red, color->green, color->blue,
                            gdk_window_has_native (window),
                            g_list_length (gdk_window_peek_children (window)));

    save_children (s, window);
}
Beispiel #3
0
static void
render_window_cell (GtkTreeViewColumn *tree_column,
                    GtkCellRenderer   *cell,
                    GtkTreeModel      *tree_model,
                    GtkTreeIter       *iter,
                    gpointer           data)
{
    GdkWindow *window;
    char *name;

    gtk_tree_model_get (GTK_TREE_MODEL (window_store),
                        iter,
                        0, &window,
                        -1);

    if (gdk_window_has_native (window))
        name = g_strdup_printf ("%p (native)", window);
    else
        name = g_strdup_printf ("%p", window);

    g_object_set (cell,
                  "text", name,
                  NULL);
}