std::unique_ptr<BackingStoreBackendCairo> BackingStore::createBackend() { #if PLATFORM(GTK) && PLATFORM(X11) const auto& sharedDisplay = PlatformDisplay::sharedDisplay(); if (is<PlatformDisplayX11>(sharedDisplay)) { GdkVisual* visual = gtk_widget_get_visual(m_webPageProxy.viewWidget()); GdkScreen* screen = gdk_visual_get_screen(visual); ASSERT(downcast<PlatformDisplayX11>(sharedDisplay).native() == GDK_SCREEN_XDISPLAY(screen)); return std::make_unique<BackingStoreBackendCairoX11>(downcast<PlatformDisplayX11>(sharedDisplay).native(), GDK_WINDOW_XID(gdk_screen_get_root_window(screen)), GDK_VISUAL_XVISUAL(visual), gdk_visual_get_depth(visual), m_size, m_deviceScaleFactor); } #endif IntSize scaledSize = m_size; scaledSize.scale(m_deviceScaleFactor); #if PLATFORM(GTK) RefPtr<cairo_surface_t> surface = adoptRef(gdk_window_create_similar_surface(gtk_widget_get_window(m_webPageProxy.viewWidget()), CAIRO_CONTENT_COLOR_ALPHA, scaledSize.width(), scaledSize.height())); #else RefPtr<cairo_surface_t> surface = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, scaledSize.width(), scaledSize.height())); #endif cairoSurfaceSetDeviceScale(surface.get(), m_deviceScaleFactor, m_deviceScaleFactor); return std::make_unique<BackingStoreBackendCairoImpl>(surface.get(), m_size); }
/* private at present... */ gboolean _gdk_x11_gl_overlay_get_info (GdkVisual *visual, GdkGLOverlayInfo *overlay_info) { __SOVPropArray *sov_props; VisualID xvisualid; int i; GDK_GL_NOTE_FUNC_PRIVATE (); g_return_val_if_fail (GDK_IS_VISUAL (visual), FALSE); g_return_val_if_fail (overlay_info != NULL, FALSE); /* Get SOV properties. */ #ifdef GDKGLEXT_MULTIHEAD_SUPPORT sov_props = gdk_gl_overlay_get_sov_props (gdk_visual_get_screen (visual)); #else /* GDKGLEXT_MULTIHEAD_SUPPORT */ sov_props = gdk_gl_overlay_get_sov_props (NULL); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ /* Look up SOV property for the visual. */ xvisualid = GDK_VISUAL_XVISUAL (visual)->visualid; for (i = 0; i < sov_props->num; i++) { if ((VisualID) (sov_props->prop[i].overlay_visual) == xvisualid) { overlay_info->visual = visual; overlay_info->transparent_type = sov_props->prop[i].transparent_type; overlay_info->value = sov_props->prop[i].value; overlay_info->layer = sov_props->prop[i].layer; GDK_GL_NOTE (MISC, g_message (" -- overlay visual")); GDK_GL_NOTE (MISC, g_print ("transparent_type = %d\n", overlay_info->transparent_type)); GDK_GL_NOTE (MISC, g_print ("value = %u\n", overlay_info->value)); GDK_GL_NOTE (MISC, g_print ("layer = %d\n", overlay_info->layer)); return TRUE; } } /* meaningless */ overlay_info->visual = visual; overlay_info->transparent_type = GDK_GL_OVERLAY_TRANSPARENT_NONE; overlay_info->value = 0; overlay_info->layer = 0; GDK_GL_NOTE (MISC, g_message (" -- not overlay visual")); return FALSE; }
WidgetBackingStoreGtkX11::WidgetBackingStoreGtkX11(GtkWidget* widget, const IntSize& size) : WidgetBackingStore(size) { GdkVisual* visual = gtk_widget_get_visual(widget); GdkScreen* screen = gdk_visual_get_screen(visual); m_display = GDK_SCREEN_XDISPLAY(screen); m_pixmap = XCreatePixmap(m_display, GDK_WINDOW_XID(gdk_screen_get_root_window(screen)), size.width(), size.height(), gdk_visual_get_depth(visual)); m_gc = XCreateGC(m_display, m_pixmap, 0, 0); m_surface = adoptRef(cairo_xlib_surface_create(m_display, m_pixmap, GDK_VISUAL_XVISUAL(visual), size.width(), size.height())); }
static VALUE rg_screen(VALUE self) { return GOBJ2RVAL(gdk_visual_get_screen(_SELF(self))); }