diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/graphics/gtk | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/platform/graphics/gtk')
8 files changed, 70 insertions, 161 deletions
diff --git a/Source/WebCore/platform/graphics/gtk/ColorGtk.cpp b/Source/WebCore/platform/graphics/gtk/ColorGtk.cpp index 8f56ba6fb..4d94a6947 100644 --- a/Source/WebCore/platform/graphics/gtk/ColorGtk.cpp +++ b/Source/WebCore/platform/graphics/gtk/ColorGtk.cpp @@ -26,27 +26,27 @@ namespace WebCore { Color::Color(const GdkColor& c) - : m_color(makeRGB(c.red >> 8, c.green >> 8, c.blue >> 8)) - , m_valid(true) { + setRGB(makeRGB(c.red >> 8, c.green >> 8, c.blue >> 8)); } #ifndef GTK_API_VERSION_2 Color::Color(const GdkRGBA& c) - : m_color(makeRGBA(static_cast<int>(c.red * 255), - static_cast<int>(c.green * 255), - static_cast<int>(c.blue * 255), - static_cast<int>(c.alpha * 255))) - , m_valid(true) { + setRGB(makeRGBA(static_cast<int>(c.red * 255), + static_cast<int>(c.green * 255), + static_cast<int>(c.blue * 255), + static_cast<int>(c.alpha * 255))); } Color::operator GdkRGBA() const { + if (isExtended()) + return { asExtended().red(), asExtended().green(), asExtended().blue(), asExtended().alpha() }; + double red, green, blue, alpha; getRGBA(red, green, blue, alpha); - GdkRGBA rgba = { red, green, blue, alpha }; - return rgba; + return { red, green, blue, alpha }; } #endif diff --git a/Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp b/Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp index 4b28f0e0e..819441efa 100644 --- a/Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp +++ b/Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp @@ -10,10 +10,10 @@ * 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 COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * 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 @@ -31,8 +31,25 @@ #include "IntSize.h" #include <cairo.h> #include <gtk/gtk.h> +#include <mutex> +#include <wtf/NeverDestroyed.h> -using namespace WebCore; +namespace WebCore { + +const cairo_font_options_t* getDefaultCairoFontOptions() +{ + if (auto* screen = gdk_screen_get_default()) { + if (auto* options = gdk_screen_get_font_options(screen)) + return options; + } + + static LazyNeverDestroyed<cairo_font_options_t*> options; + static std::once_flag flag; + std::call_once(flag, [] { + options.construct(cairo_font_options_create()); + }); + return options; +} GdkPixbuf* cairoSurfaceToGdkPixbuf(cairo_surface_t* surface) { @@ -40,3 +57,4 @@ GdkPixbuf* cairoSurfaceToGdkPixbuf(cairo_surface_t* surface) return gdk_pixbuf_get_from_surface(surface, 0, 0, size.width(), size.height()); } +} diff --git a/Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.h b/Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.h index 43a9a0900..e2aeaae22 100644 --- a/Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.h +++ b/Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.h @@ -10,10 +10,10 @@ * 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 COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * 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 @@ -23,9 +23,10 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef GdkCairoUtilities_h -#define GdkCairoUtilities_h +#pragma once + +namespace WebCore { GdkPixbuf* cairoSurfaceToGdkPixbuf(cairo_surface_t*); -#endif // GdkCairoUtilities_h +} diff --git a/Source/WebCore/platform/graphics/gtk/IconGtk.cpp b/Source/WebCore/platform/graphics/gtk/IconGtk.cpp index 3e957b345..880c4c979 100644 --- a/Source/WebCore/platform/graphics/gtk/IconGtk.cpp +++ b/Source/WebCore/platform/graphics/gtk/IconGtk.cpp @@ -11,7 +11,7 @@ * 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. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * 3. Neither the name of Apple Inc. ("Apple") nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * @@ -36,7 +36,7 @@ #include <gtk/gtk.h> -#include <wtf/PassRefPtr.h> +#include <wtf/RefPtr.h> #include <wtf/text/CString.h> namespace WebCore { @@ -90,7 +90,7 @@ static String lookupIconName(String MIMEType) } // FIXME: Move the code to ChromeClient::iconForFiles(). -PassRefPtr<Icon> Icon::createIconForFiles(const Vector<String>& filenames) +RefPtr<Icon> Icon::createIconForFiles(const Vector<String>& filenames) { if (filenames.isEmpty()) return 0; @@ -113,13 +113,13 @@ PassRefPtr<Icon> Icon::createIconForFiles(const Vector<String>& filenames) return 0; } -void Icon::paint(GraphicsContext* context, const IntRect& rect) +void Icon::paint(GraphicsContext& context, const FloatRect& rect) { - if (context->paintingDisabled()) + if (context.paintingDisabled()) return; // TODO: Scale/clip the image if necessary. - cairo_t* cr = context->platformContext()->cr(); + cairo_t* cr = context.platformContext()->cr(); cairo_save(cr); gdk_cairo_set_source_pixbuf(cr, m_icon, rect.x(), rect.y()); cairo_paint(cr); diff --git a/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp b/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp index 78a60c1ef..b2fe2a909 100644 --- a/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp +++ b/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp @@ -25,14 +25,14 @@ #include "MIMETypeRegistry.h" #include <cairo.h> #include <gtk/gtk.h> -#include <wtf/gobject/GUniquePtr.h> +#include <wtf/glib/GUniquePtr.h> #include <wtf/text/Base64.h> #include <wtf/text/CString.h> #include <wtf/text/WTFString.h> namespace WebCore { -static bool encodeImage(cairo_surface_t* surface, const String& mimeType, const double* quality, GUniqueOutPtr<gchar>& buffer, gsize& bufferSize) +static bool encodeImage(cairo_surface_t* surface, const String& mimeType, std::optional<double> quality, GUniqueOutPtr<gchar>& buffer, gsize& bufferSize) { // List of supported image encoding types comes from the GdkPixbuf documentation. // http://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf-File-saving.html#gdk-pixbuf-save-to-bufferv @@ -75,7 +75,7 @@ static bool encodeImage(cairo_surface_t* surface, const String& mimeType, const return !error; } -String ImageBuffer::toDataURL(const String& mimeType, const double* quality, CoordinateSystem) const +String ImageBuffer::toDataURL(const String& mimeType, std::optional<double> quality, CoordinateSystem) const { ASSERT(MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType)); diff --git a/Source/WebCore/platform/graphics/gtk/ImageGtk.cpp b/Source/WebCore/platform/graphics/gtk/ImageGtk.cpp index 6208f7dc1..49ccc9118 100644 --- a/Source/WebCore/platform/graphics/gtk/ImageGtk.cpp +++ b/Source/WebCore/platform/graphics/gtk/ImageGtk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * Copyright (C) 2006 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,10 +10,10 @@ * 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 COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * 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 @@ -26,49 +26,31 @@ #include "config.h" #include "BitmapImage.h" -#include "FileSystem.h" #include "GUniquePtrGtk.h" #include "GdkCairoUtilities.h" #include "SharedBuffer.h" -#include <wtf/gobject/GUniquePtr.h> -#include <wtf/text/CString.h> #include <cairo.h> #include <gtk/gtk.h> +#include <wtf/glib/GRefPtr.h> +#include <wtf/glib/GUniquePtr.h> namespace WebCore { -static char* getPathToImageResource(char* resource) +static PassRefPtr<Image> loadImageFromGResource(const char* iconName) { - if (g_getenv("WEBKIT_TOP_LEVEL")) - return g_build_filename(g_getenv("WEBKIT_TOP_LEVEL"), "Source", "WebCore", "Resources", resource, NULL); - - return g_build_filename(sharedResourcesPath().data(), "images", resource, NULL); -} - -static CString getThemeIconFileName(const char* name, int size) -{ - GtkIconInfo* iconInfo = gtk_icon_theme_lookup_icon(gtk_icon_theme_get_default(), - name, size, GTK_ICON_LOOKUP_NO_SVG); - // Try to fallback on MISSING_IMAGE. - if (!iconInfo) - iconInfo = gtk_icon_theme_lookup_icon(gtk_icon_theme_get_default(), - GTK_STOCK_MISSING_IMAGE, size, - GTK_ICON_LOOKUP_NO_SVG); - if (iconInfo) { - GUniquePtr<GtkIconInfo> info(iconInfo); - return CString(gtk_icon_info_get_filename(info.get())); - } - - // No icon was found, this can happen if not GTK theme is set. In - // that case an empty Image will be created. - return CString(); + RefPtr<BitmapImage> icon = BitmapImage::create(); + GUniquePtr<char> path(g_strdup_printf("/org/webkitgtk/resources/images/%s", iconName)); + GRefPtr<GBytes> data = adoptGRef(g_resources_lookup_data(path.get(), G_RESOURCE_LOOKUP_FLAGS_NONE, nullptr)); + ASSERT(data); + icon->setData(SharedBuffer::create(static_cast<const unsigned char*>(g_bytes_get_data(data.get(), nullptr)), g_bytes_get_size(data.get())), true); + return icon.release(); } -static PassRefPtr<SharedBuffer> loadResourceSharedBuffer(CString name) +static PassRefPtr<SharedBuffer> loadResourceSharedBuffer(const char* filename) { GUniqueOutPtr<gchar> content; gsize length; - if (!g_file_get_contents(name.data(), &content.outPtr(), &length, 0)) + if (!g_file_get_contents(filename, &content.outPtr(), &length, nullptr)) return SharedBuffer::create(); return SharedBuffer::create(content.get(), length); @@ -78,33 +60,23 @@ void BitmapImage::invalidatePlatformData() { } -PassRefPtr<Image> loadImageFromFile(CString fileName) +static PassRefPtr<Image> loadMissingImageIconFromTheme(const char* name) { - RefPtr<BitmapImage> img = BitmapImage::create(); - if (!fileName.isNull()) { - RefPtr<SharedBuffer> buffer = loadResourceSharedBuffer(fileName); - img->setData(buffer.release(), true); - } - return img.release(); -} - -PassRefPtr<Image> Image::loadPlatformResource(const char* name) -{ - CString fileName; - if (!strcmp("missingImage", name)) - fileName = getThemeIconFileName(GTK_STOCK_MISSING_IMAGE, 16); - if (fileName.isNull()) { - GUniquePtr<gchar> imageName(g_strdup_printf("%s.png", name)); - GUniquePtr<gchar> glibFileName(getPathToImageResource(imageName.get())); - fileName = glibFileName.get(); + int iconSize = g_str_has_suffix(name, "@2x") ? 32 : 16; + RefPtr<BitmapImage> icon = BitmapImage::create(); + GUniquePtr<GtkIconInfo> iconInfo(gtk_icon_theme_lookup_icon(gtk_icon_theme_get_default(), GTK_STOCK_MISSING_IMAGE, iconSize, GTK_ICON_LOOKUP_NO_SVG)); + if (iconInfo) { + RefPtr<SharedBuffer> buffer = loadResourceSharedBuffer(gtk_icon_info_get_filename(iconInfo.get())); + icon->setData(buffer.release(), true); + return icon.release(); } - return loadImageFromFile(fileName); + return loadImageFromGResource(name); } -PassRefPtr<Image> Image::loadPlatformThemeIcon(const char* name, int size) +PassRefPtr<Image> Image::loadPlatformResource(const char* name) { - return loadImageFromFile(getThemeIconFileName(name, size)); + return g_str_has_prefix(name, "missingImage") ? loadMissingImageIconFromTheme(name) : loadImageFromGResource(name); } GdkPixbuf* BitmapImage::getGdkPixbuf() diff --git a/Source/WebCore/platform/graphics/gtk/IntPointGtk.cpp b/Source/WebCore/platform/graphics/gtk/IntPointGtk.cpp deleted file mode 100644 index c4021581e..000000000 --- a/Source/WebCore/platform/graphics/gtk/IntPointGtk.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2007 Alp Toker <alp@atoker.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" -#include "IntPoint.h" - -#include <gdk/gdk.h> - -namespace WebCore { - -IntPoint::IntPoint(const GdkPoint& p) - : m_x(p.x) - , m_y(p.y) -{ -} - -IntPoint::operator GdkPoint() const -{ - GdkPoint p = { x(), y() }; - return p; -} - -} - -// vim: ts=4 sw=4 et diff --git a/Source/WebCore/platform/graphics/gtk/IntRectGtk.cpp b/Source/WebCore/platform/graphics/gtk/IntRectGtk.cpp deleted file mode 100644 index 1f312819a..000000000 --- a/Source/WebCore/platform/graphics/gtk/IntRectGtk.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2007 Alp Toker <alp@atoker.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" -#include "IntRect.h" - -#include <gdk/gdk.h> - -#ifdef GTK_API_VERSION_2 -namespace WebCore { - -IntRect::IntRect(const GdkRectangle& r) - : m_location(IntPoint(r.x, r.y)) - , m_size(r.width, r.height) -{ -} - -IntRect::operator GdkRectangle() const -{ - GdkRectangle r = { x(), y(), width(), height() }; - return r; -} - -} -#endif |