summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/graphics/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/platform/graphics/gtk')
-rw-r--r--Source/WebCore/platform/graphics/gtk/ColorGtk.cpp18
-rw-r--r--Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp24
-rw-r--r--Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.h11
-rw-r--r--Source/WebCore/platform/graphics/gtk/IconGtk.cpp12
-rw-r--r--Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp6
-rw-r--r--Source/WebCore/platform/graphics/gtk/ImageGtk.cpp78
-rw-r--r--Source/WebCore/platform/graphics/gtk/IntPointGtk.cpp41
-rw-r--r--Source/WebCore/platform/graphics/gtk/IntRectGtk.cpp41
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