| Index: Source/WebCore/platform/graphics/surfaces/glx/X11Helper.cpp
|
| diff --git a/Source/WebCore/platform/graphics/surfaces/glx/X11Helper.cpp b/Source/WebCore/platform/graphics/surfaces/glx/X11Helper.cpp
|
| deleted file mode 100644
|
| index c366bdf5f00aa7edc3a25edb9eacc21da817c535..0000000000000000000000000000000000000000
|
| --- a/Source/WebCore/platform/graphics/surfaces/glx/X11Helper.cpp
|
| +++ /dev/null
|
| @@ -1,309 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2013 Intel Corporation. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
|
| - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
| - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
|
| - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
| - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
| - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
| - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
| - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
| - * THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "config.h"
|
| -#include "X11Helper.h"
|
| -
|
| -namespace WebCore {
|
| -
|
| -// Used for handling XError.
|
| -static bool validOperation = true;
|
| -static int handleXPixmapCreationError(Display*, XErrorEvent* event)
|
| -{
|
| - if (event->error_code == BadMatch || event->error_code == BadWindow || event->error_code == BadAlloc) {
|
| - validOperation = false;
|
| -
|
| - switch (event->error_code) {
|
| - case BadMatch:
|
| - LOG_ERROR("BadMatch.");
|
| - break;
|
| - case BadWindow:
|
| - LOG_ERROR("BadWindow.");
|
| - break;
|
| - case BadAlloc:
|
| - LOG_ERROR("BadAlloc.");
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| - }
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -struct DisplayConnection {
|
| - DisplayConnection()
|
| - {
|
| - m_display = XOpenDisplay(0);
|
| -
|
| - if (!m_display)
|
| - LOG_ERROR("Failed to make connection with X");
|
| - }
|
| -
|
| - ~DisplayConnection()
|
| - {
|
| - XCloseDisplay(m_display);
|
| - }
|
| -
|
| - Display* display() { return m_display; }
|
| -private:
|
| - Display* m_display;
|
| -};
|
| -
|
| -struct OffScreenRootWindow {
|
| -
|
| - OffScreenRootWindow()
|
| - {
|
| - m_window = 0;
|
| - Display* dpy = X11Helper::nativeDisplay();
|
| - if (!dpy)
|
| - return;
|
| -
|
| - XSetWindowAttributes attributes;
|
| - attributes.override_redirect = true;
|
| - m_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), -1, -1, 1, 1, 0, BlackPixel(dpy, 0), WhitePixel(dpy, 0));
|
| - // From http://tronche.com/gui/x/xlib/window/attributes/
|
| - XChangeWindowAttributes(dpy, m_window, CWOverrideRedirect, &attributes);
|
| - XMapWindow(dpy, m_window);
|
| -
|
| - if (!m_window)
|
| - LOG_ERROR("Failed to create offscreen root window.");
|
| - }
|
| -
|
| - ~OffScreenRootWindow()
|
| - {
|
| - if (!X11Helper::nativeDisplay())
|
| - return;
|
| -
|
| - if (m_window) {
|
| - XUnmapWindow(X11Helper::nativeDisplay(), m_window);
|
| - XDestroyWindow(X11Helper::nativeDisplay(), m_window);
|
| - m_window = 0;
|
| - }
|
| - }
|
| -
|
| - Window rootWindow()
|
| - {
|
| - return m_window;
|
| - }
|
| -
|
| -private:
|
| - Window m_window;
|
| -};
|
| -
|
| -ScopedXPixmapCreationErrorHandler::ScopedXPixmapCreationErrorHandler()
|
| -{
|
| - // XSync must be called to ensure that current errors are handled by the original handler.
|
| - XSync(X11Helper::nativeDisplay(), false);
|
| - m_previousErrorHandler = XSetErrorHandler(handleXPixmapCreationError);
|
| -}
|
| -
|
| -ScopedXPixmapCreationErrorHandler::~ScopedXPixmapCreationErrorHandler()
|
| -{
|
| - // Restore the original handler.
|
| - XSetErrorHandler(m_previousErrorHandler);
|
| -}
|
| -
|
| -bool ScopedXPixmapCreationErrorHandler::isValidOperation() const
|
| -{
|
| - validOperation = true;
|
| - // XSync is needed to catch possible errors as they are generated asynchronously.
|
| - XSync(X11Helper::nativeDisplay(), false);
|
| - return validOperation;
|
| -}
|
| -
|
| -void X11Helper::resizeWindow(const IntRect& newRect, const uint32_t windowId)
|
| -{
|
| - XResizeWindow(nativeDisplay(), windowId, newRect.width(), newRect.height());
|
| - XFlush(nativeDisplay());
|
| -}
|
| -
|
| -void X11Helper::createPixmap(Pixmap* handleId, const XVisualInfo& visualInfo, const IntSize& size)
|
| -{
|
| - Display* display = nativeDisplay();
|
| - if (!display)
|
| - return;
|
| -
|
| - if (!visualInfo.visual) {
|
| - LOG_ERROR("Failed to find valid XVisual.");
|
| - return;
|
| - }
|
| -
|
| - Window xWindow = offscreenRootWindow();
|
| - if (!xWindow) {
|
| - LOG_ERROR("Failed to create offscreen root window.");
|
| - return;
|
| - }
|
| -
|
| - Pixmap tempHandleId = XCreatePixmap(display, xWindow, size.width(), size.height(), visualInfo.depth);
|
| -
|
| - if (!tempHandleId) {
|
| - LOG_ERROR("Failed to create offscreen pixmap.");
|
| - return;
|
| - }
|
| -
|
| - *handleId = tempHandleId;
|
| - XSync(X11Helper::nativeDisplay(), false);
|
| -}
|
| -
|
| -void X11Helper::destroyPixmap(const uint32_t pixmapId)
|
| -{
|
| - if (!pixmapId)
|
| - return;
|
| -
|
| - Display* display = nativeDisplay();
|
| - if (!display)
|
| - return;
|
| -
|
| - XFreePixmap(display, pixmapId);
|
| - XSync(X11Helper::nativeDisplay(), false);
|
| -}
|
| -
|
| -void X11Helper::createOffScreenWindow(uint32_t* handleId, const XVisualInfo& visInfo, const IntSize& size)
|
| -{
|
| -#if USE(GRAPHICS_SURFACE) && USE(GLX)
|
| - Display* display = nativeDisplay();
|
| - if (!display)
|
| - return;
|
| -
|
| - if (!visInfo.visual) {
|
| - LOG_ERROR("Failed to find valid XVisual.");
|
| - return;
|
| - }
|
| -
|
| - Window xWindow = offscreenRootWindow();
|
| - if (!xWindow)
|
| - return;
|
| -
|
| - Colormap cmap = XCreateColormap(display, xWindow, visInfo.visual, AllocNone);
|
| - XSetWindowAttributes attribute;
|
| - attribute.background_pixel = WhitePixel(display, 0);
|
| - attribute.border_pixel = BlackPixel(display, 0);
|
| - attribute.colormap = cmap;
|
| - attribute.event_mask = ResizeRedirectMask;
|
| - uint32_t tempHandleId = XCreateWindow(display, xWindow, 0, 0, size.width(), size.height(), 0, visInfo.depth, InputOutput, visInfo.visual, CWBackPixel | CWBorderPixel | CWColormap, &attribute);
|
| -
|
| - if (!tempHandleId) {
|
| - LOG_ERROR("Failed to create offscreen window.");
|
| - return;
|
| - }
|
| -
|
| - XSetWindowBackgroundPixmap(display, tempHandleId, 0);
|
| - XCompositeRedirectWindow(display, tempHandleId, CompositeRedirectManual);
|
| - XMapWindow(display, tempHandleId);
|
| - *handleId = tempHandleId;
|
| -#else
|
| - UNUSED_PARAM(handleId);
|
| - UNUSED_PARAM(visInfo);
|
| - UNUSED_PARAM(size);
|
| -#endif
|
| -}
|
| -
|
| -#if USE(EGL)
|
| -void X11Helper::createOffScreenWindow(uint32_t* handleId, const EGLint id, bool supportsAlpha, const IntSize& size)
|
| -{
|
| -#if USE(GRAPHICS_SURFACE)
|
| - VisualID visualId = static_cast<VisualID>(id);
|
| -
|
| - if (!visualId)
|
| - return;
|
| -
|
| - // EGL has suggested a visual id, so get the rest of the visual info for that id.
|
| - XVisualInfo visualInfoTemplate;
|
| - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo));
|
| - visualInfoTemplate.visualid = visualId;
|
| - int matchingCount = 0;
|
| - OwnPtrX11<XVisualInfo> matchingVisuals(XGetVisualInfo(nativeDisplay(), VisualIDMask, &visualInfoTemplate, &matchingCount));
|
| - XVisualInfo* foundVisual = 0;
|
| -
|
| - if (matchingVisuals) {
|
| - for (int i = 0; i< matchingCount; i++) {
|
| - XVisualInfo* temp = &matchingVisuals[i];
|
| - int matchingdepth = supportsAlpha ? 32 : 24;
|
| -
|
| - if (temp->depth == matchingdepth) {
|
| - foundVisual = temp;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - if (foundVisual)
|
| - createOffScreenWindow(handleId, *foundVisual, size);
|
| - }
|
| -#else
|
| - UNUSED_PARAM(handleId);
|
| - UNUSED_PARAM(id);
|
| - UNUSED_PARAM(size);
|
| -#endif
|
| -}
|
| -#endif
|
| -
|
| -void X11Helper::destroyWindow(const uint32_t windowId)
|
| -{
|
| - if (!windowId)
|
| - return;
|
| -
|
| - Display* display = nativeDisplay();
|
| - if (!display)
|
| - return;
|
| -
|
| - XDestroyWindow(display, windowId);
|
| -}
|
| -
|
| -bool X11Helper::isXRenderExtensionSupported()
|
| -{
|
| - static bool queryDone = false;
|
| - static bool supportsXRenderExtension = false;
|
| -
|
| - if (!queryDone) {
|
| - queryDone = true;
|
| -#if USE(GRAPHICS_SURFACE) && USE(GLX)
|
| - Display* display = nativeDisplay();
|
| -
|
| - if (display) {
|
| - int eventBasep, errorBasep;
|
| - supportsXRenderExtension = XRenderQueryExtension(display, &eventBasep, &errorBasep);
|
| - }
|
| -#endif
|
| - }
|
| -
|
| - return supportsXRenderExtension;
|
| -}
|
| -
|
| -Display* X11Helper::nativeDisplay()
|
| -{
|
| - // Display connection will only be broken at program shutdown.
|
| - static DisplayConnection displayConnection;
|
| - return displayConnection.display();
|
| -}
|
| -
|
| -Window X11Helper::offscreenRootWindow()
|
| -{
|
| - static OffScreenRootWindow offscreenWindow;
|
| - return offscreenWindow.rootWindow();
|
| -}
|
| -
|
| -}
|
| -
|
|
|