Changeset 167168 in webkit
- Timestamp:
- Apr 11, 2014 4:20:27 PM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r167167 r167168 1 2014-04-11 Owen Taylor <otaylor@redhat.com> 2 3 [GTK] Add HighDPI support for non-accelerated compositing contents 4 https://bugs.webkit.org/show_bug.cgi?id=131562 5 6 Reviewed by Martin Robinson. 7 8 No new tests. This will be tested once we have the proper dependencies in the WebKit testing 9 JHBuild. 10 11 * platform/cairo/WidgetBackingStore.h: 12 (WebCore::WidgetBackingStore::WidgetBackingStore): Accept a device scale argument. 13 * platform/cairo/WidgetBackingStoreCairo.cpp: Use the device scale argument to make the surface the proper size and set the surface device scale. 14 * platform/cairo/WidgetBackingStoreCairo.h: Accept a device scale argument. 15 * platform/graphics/cairo/CairoUtilities.cpp: Add a new helper to set the device scale if Cairo built against is new enough. 16 * platform/graphics/cairo/CairoUtilities.h: 17 * platform/gtk/GtkVersioning.h: Add the HAVE_GTK_SCALE_FACTOR macro. 18 * platform/gtk/WidgetBackingStoreGtkX11.cpp: Use the device scale argument to make the surface the proper size and set the surface device scale. 19 * platform/gtk/WidgetBackingStoreGtkX11.h: Accept a device scale argument. 20 1 21 2014-04-11 Jon Honeycutt <jhoneycutt@apple.com> 2 22 -
trunk/Source/WebCore/platform/cairo/WidgetBackingStore.h
r162451 r167168 50 50 virtual void scroll(const IntRect& scrollRect, const IntSize& scrollOffset) = 0; 51 51 const IntSize& size() { return m_size; } 52 WidgetBackingStore(const IntSize& size) : m_size(size) { } 52 53 WidgetBackingStore(const IntSize& size, float deviceScaleFactor) 54 : m_size(size) 55 , m_deviceScaleFactor(deviceScaleFactor) 56 { } 57 53 58 virtual ~WidgetBackingStore() { } 54 59 55 pr ivate:60 protected: 56 61 IntSize m_size; 62 float m_deviceScaleFactor; 57 63 }; 58 64 -
trunk/Source/WebCore/platform/cairo/WidgetBackingStoreCairo.cpp
r151398 r167168 27 27 namespace WebCore { 28 28 29 static PassRefPtr<cairo_surface_t> createSurfaceForBackingStore(PlatformWidget widget, const IntSize& size)29 static PassRefPtr<cairo_surface_t> createSurfaceForBackingStore(PlatformWidget widget, IntSize size, float deviceScaleFactor) 30 30 { 31 size.scale(deviceScaleFactor); 32 31 33 #if PLATFORM(GTK) 32 34 return adoptRef(gdk_window_create_similar_surface(gtk_widget_get_window(widget), CAIRO_CONTENT_COLOR_ALPHA, size.width(), size.height())); … … 37 39 } 38 40 39 PassOwnPtr<WidgetBackingStore> WidgetBackingStoreCairo::create(PlatformWidget widget, const IntSize& size )41 PassOwnPtr<WidgetBackingStore> WidgetBackingStoreCairo::create(PlatformWidget widget, const IntSize& size, float deviceScaleFactor) 40 42 { 41 return adoptPtr(new WidgetBackingStoreCairo(widget, size ));43 return adoptPtr(new WidgetBackingStoreCairo(widget, size, deviceScaleFactor)); 42 44 } 43 45 … … 45 47 // scrolling performance since we do not have to keep reallocating a memory region during 46 48 // quick scrolling requests. 47 WidgetBackingStoreCairo::WidgetBackingStoreCairo(PlatformWidget widget, const IntSize& size) 48 : WidgetBackingStore(size) 49 , m_surface(createSurfaceForBackingStore(widget, size)) 50 , m_scrollSurface(createSurfaceForBackingStore(widget, size)) 51 49 WidgetBackingStoreCairo::WidgetBackingStoreCairo(PlatformWidget widget, const IntSize& size, float deviceScaleFactor) 50 : WidgetBackingStore(size, deviceScaleFactor) 51 , m_surface(createSurfaceForBackingStore(widget, size, deviceScaleFactor)) 52 , m_scrollSurface(createSurfaceForBackingStore(widget, size, deviceScaleFactor)) 52 53 { 54 cairoSurfaceSetDeviceScale(m_surface.get(), deviceScaleFactor, deviceScaleFactor); 53 55 } 54 56 -
trunk/Source/WebCore/platform/cairo/WidgetBackingStoreCairo.h
r166138 r167168 28 28 29 29 public: 30 static PassOwnPtr<WidgetBackingStore> create(PlatformWidget, const IntSize& );31 WidgetBackingStoreCairo(PlatformWidget, const IntSize& );30 static PassOwnPtr<WidgetBackingStore> create(PlatformWidget, const IntSize&, float deviceScaleFactor); 31 WidgetBackingStoreCairo(PlatformWidget, const IntSize&, float deviceScaleFactor); 32 32 ~WidgetBackingStoreCairo(); 33 33 cairo_surface_t* cairoSurface(); -
trunk/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp
r165676 r167168 37 37 #include "PlatformPathCairo.h" 38 38 #include "RefPtrCairo.h" 39 #include <wtf/Assertions.h> 39 40 #include <wtf/Vector.h> 40 41 … … 260 261 } 261 262 263 void cairoSurfaceSetDeviceScale(cairo_surface_t* surface, double xScale, double yScale) 264 { 265 // This function was added pretty much simultaneous to when 1.13 was branched. 266 #if HAVE(CAIRO_SURFACE_SET_DEVICE_SCALE) 267 cairo_surface_set_device_scale(surface, xScale, yScale); 268 #else 269 UNUSED_PARAM(surface); 270 ASSERT_UNUSED(xScale, 1 == xScale); 271 ASSERT_UNUSED(yScale, 1 == yScale); 272 #endif 273 } 262 274 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/cairo/CairoUtilities.h
r165676 r167168 32 32 #include <cairo.h> 33 33 34 // This function was added pretty much simultaneous to when 1.13 was branched. 35 #define HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE CAIRO_VERSION_MAJOR > 1 || (CAIRO_VERSION_MAJOR == 1 && CAIRO_VERSION_MINOR >= 13) 36 34 37 namespace WebCore { 35 38 class AffineTransform; … … 57 60 58 61 IntSize cairoSurfaceSize(cairo_surface_t*); 62 void cairoSurfaceSetDeviceScale(cairo_surface_t*, double xScale, double yScale); 59 63 60 64 } // namespace WebCore -
trunk/Source/WebCore/platform/gtk/WidgetBackingStoreGtkX11.cpp
r167078 r167168 20 20 #include "WidgetBackingStoreGtkX11.h" 21 21 22 #include "CairoUtilities.h" 22 23 #include "GtkVersioning.h" 23 24 #include "RefPtrCairo.h" … … 28 29 namespace WebCore { 29 30 30 PassOwnPtr<WidgetBackingStore> WidgetBackingStoreGtkX11::create(GtkWidget* widget, const IntSize& size )31 PassOwnPtr<WidgetBackingStore> WidgetBackingStoreGtkX11::create(GtkWidget* widget, const IntSize& size, float deviceScaleFactor) 31 32 { 32 return adoptPtr(new WidgetBackingStoreGtkX11(widget, size ));33 return adoptPtr(new WidgetBackingStoreGtkX11(widget, size, deviceScaleFactor)); 33 34 } 34 35 35 WidgetBackingStoreGtkX11::WidgetBackingStoreGtkX11(GtkWidget* widget, const IntSize& size )36 : WidgetBackingStore(size )36 WidgetBackingStoreGtkX11::WidgetBackingStoreGtkX11(GtkWidget* widget, const IntSize& size, float deviceScaleFactor) 37 : WidgetBackingStore(size, deviceScaleFactor) 37 38 { 39 IntSize scaledSize = size; 40 scaledSize.scale(deviceScaleFactor); 41 38 42 GdkVisual* visual = gtk_widget_get_visual(widget); 39 43 GdkScreen* screen = gdk_visual_get_screen(visual); 40 44 m_display = GDK_SCREEN_XDISPLAY(screen); 41 45 m_pixmap = XCreatePixmap(m_display, GDK_WINDOW_XID(gdk_screen_get_root_window(screen)), 42 s ize.width(), size.height(), gdk_visual_get_depth(visual));46 scaledSize.width(), scaledSize.height(), gdk_visual_get_depth(visual)); 43 47 m_gc = XCreateGC(m_display, m_pixmap, 0, 0); 44 48 45 49 m_surface = adoptRef(cairo_xlib_surface_create(m_display, m_pixmap, 46 GDK_VISUAL_XVISUAL(visual), size.width(), size.height())); 50 GDK_VISUAL_XVISUAL(visual), scaledSize.width(), scaledSize.height())); 51 52 cairoSurfaceSetDeviceScale(m_surface.get(), deviceScaleFactor, deviceScaleFactor); 47 53 } 48 54 … … 68 74 return; 69 75 76 targetRect.scale(m_deviceScaleFactor); 77 78 IntSize scaledScrollOffset = scrollOffset; 79 scaledScrollOffset.scale(m_deviceScaleFactor); 80 70 81 cairo_surface_flush(m_surface.get()); 71 82 XCopyArea(m_display, m_pixmap, m_pixmap, m_gc, 72 targetRect.x() - sc rollOffset.width(), targetRect.y() - scrollOffset.height(),83 targetRect.x() - scaledScrollOffset.width(), targetRect.y() - scaledScrollOffset.height(), 73 84 targetRect.width(), targetRect.height(), 74 85 targetRect.x(), targetRect.y()); -
trunk/Source/WebCore/platform/gtk/WidgetBackingStoreGtkX11.h
r166138 r167168 30 30 31 31 public: 32 static PassOwnPtr<WidgetBackingStore> create(GtkWidget*, const IntSize& );33 WidgetBackingStoreGtkX11(GtkWidget*, const IntSize& );32 static PassOwnPtr<WidgetBackingStore> create(GtkWidget*, const IntSize&, float deviceScaleFactor); 33 WidgetBackingStoreGtkX11(GtkWidget*, const IntSize&, float deviceScaleFactor); 34 34 ~WidgetBackingStoreGtkX11(); 35 35 cairo_surface_t* cairoSurface(); -
trunk/Source/WebKit2/ChangeLog
r167164 r167168 1 2014-04-11 Owen Taylor <otaylor@redhat.com> 2 3 [GTK] Add HighDPI support for non-accelerated compositing contents 4 https://bugs.webkit.org/show_bug.cgi?id=131562 5 6 Reviewed by Martin Robinson. 7 8 * UIProcess/API/gtk/WebKitWebViewBase.cpp: 9 (scaleFactorChanged): Added this callback to pass scale changes to the page proxy. 10 (webkitWebViewBaseCreateWebPage): Attach the callback to the notify signal. 11 * UIProcess/cairo/BackingStoreCairo.cpp: 12 (WebKit::createBackingStoreForGTK): Pass the scale factor to the WebCore backing store. 13 (WebKit::BackingStore::incorporateUpdate): Ditto. 14 1 15 2014-04-10 Jer Noble <jer.noble@apple.com> 2 16 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
r167084 r167168 47 47 #include "WebPreferences.h" 48 48 #include "WebViewBaseInputMethodFilter.h" 49 #include <WebCore/CairoUtilities.h> 49 50 #include <WebCore/ClipboardUtilitiesGtk.h> 50 51 #include <WebCore/DataObjectGtk.h> … … 78 79 #include <WebCore/RedirectedXCompositeWindow.h> 79 80 #endif 81 82 // gtk_widget_get_scale_factor() appeared in GTK 3.10, but we also need 83 // to make sure we have cairo new enough to support cairo_surface_set_device_scale 84 #define HAVE_GTK_SCALE_FACTOR HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE && GTK_CHECK_VERSION(3, 10, 0) 80 85 81 86 using namespace WebKit; … … 962 967 } 963 968 969 #if HAVE(GTK_SCALE_FACTOR) 970 static void scaleFactorChanged(GObject* object, GParamSpec*) 971 { 972 WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(object)->priv; 973 ASSERT(priv->pageProxy); 974 priv->pageProxy->setIntrinsicDeviceScaleFactor(gtk_widget_get_scale_factor(GTK_WIDGET(object))); 975 } 976 #endif // HAVE(GTK_SCALE_FACTOR) 977 964 978 void webkitWebViewBaseCreateWebPage(WebKitWebViewBase* webkitWebViewBase, WebContext* context, WebPageGroup* pageGroup, WebPageProxy* relatedPage) 965 979 { … … 975 989 if (priv->redirectedWindow) 976 990 priv->pageProxy->setAcceleratedCompositingWindowId(priv->redirectedWindow->windowId()); 991 #endif 992 993 #if HAVE(GTK_SCALE_FACTOR) 994 // We attach this here, because changes in scale factor are passed directly to the page proxy. 995 priv->pageProxy->setIntrinsicDeviceScaleFactor(gtk_widget_get_scale_factor(GTK_WIDGET(webkitWebViewBase))); 996 g_signal_connect(object, "notify::scale-factor", G_CALLBACK(scaleFactorChanged), NULL); 977 997 #endif 978 998 -
trunk/Source/WebKit2/UIProcess/cairo/BackingStoreCairo.cpp
r155032 r167168 49 49 50 50 #if PLATFORM(GTK) 51 static OwnPtr<WidgetBackingStore> createBackingStoreForGTK(GtkWidget* widget, const IntSize& size )51 static OwnPtr<WidgetBackingStore> createBackingStoreForGTK(GtkWidget* widget, const IntSize& size, float deviceScaleFactor) 52 52 { 53 53 #if PLATFORM(X11) && defined(GDK_WINDOWING_X11) 54 54 GdkDisplay* display = gdk_display_manager_get_default_display(gdk_display_manager_get()); 55 55 if (GDK_IS_X11_DISPLAY(display)) 56 return WebCore::WidgetBackingStoreGtkX11::create(widget, size );56 return WebCore::WidgetBackingStoreGtkX11::create(widget, size, deviceScaleFactor); 57 57 #endif 58 return WebCore::WidgetBackingStoreCairo::create(widget, size );58 return WebCore::WidgetBackingStoreCairo::create(widget, size, deviceScaleFactor); 59 59 } 60 60 #endif … … 74 74 if (!m_backingStore) 75 75 #if PLATFORM(EFL) 76 m_backingStore = WidgetBackingStoreCairo::create(EwkView::toEvasObject(toAPI(m_webPageProxy)), size() );76 m_backingStore = WidgetBackingStoreCairo::create(EwkView::toEvasObject(toAPI(m_webPageProxy)), size(), deviceScaleFactor()); 77 77 #else 78 m_backingStore = createBackingStoreForGTK(m_webPageProxy->viewWidget(), size() );78 m_backingStore = createBackingStoreForGTK(m_webPageProxy->viewWidget(), size(), deviceScaleFactor()); 79 79 #endif 80 80 … … 89 89 IntRect srcRect = updateRect; 90 90 srcRect.move(-updateRectLocation.x(), -updateRectLocation.y()); 91 bitmap->paint(graphicsContext, updateRect.location(), srcRect);91 bitmap->paint(graphicsContext, deviceScaleFactor(), updateRect.location(), srcRect); 92 92 } 93 93 }
Note: See TracChangeset
for help on using the changeset viewer.