summaryrefslogtreecommitdiffstats
path: root/gfx/thebes/gfxPlatformGtk.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/thebes/gfxPlatformGtk.h')
-rw-r--r--gfx/thebes/gfxPlatformGtk.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/gfx/thebes/gfxPlatformGtk.h b/gfx/thebes/gfxPlatformGtk.h
new file mode 100644
index 000000000..982390d18
--- /dev/null
+++ b/gfx/thebes/gfxPlatformGtk.h
@@ -0,0 +1,172 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef GFX_PLATFORM_GTK_H
+#define GFX_PLATFORM_GTK_H
+
+#include "gfxPlatform.h"
+#include "nsAutoRef.h"
+#include "nsTArray.h"
+#include "mozilla/gfx/gfxVars.h"
+
+#if (MOZ_WIDGET_GTK == 2)
+extern "C" {
+ typedef struct _GdkDrawable GdkDrawable;
+}
+#endif
+
+#ifdef MOZ_X11
+struct _XDisplay;
+typedef struct _XDisplay Display;
+#endif // MOZ_X11
+
+class gfxFontconfigUtils;
+
+class gfxPlatformGtk : public gfxPlatform {
+public:
+ gfxPlatformGtk();
+ virtual ~gfxPlatformGtk();
+
+ static gfxPlatformGtk *GetPlatform() {
+ return (gfxPlatformGtk*) gfxPlatform::GetPlatform();
+ }
+
+ virtual already_AddRefed<gfxASurface>
+ CreateOffscreenSurface(const IntSize& aSize,
+ gfxImageFormat aFormat) override;
+
+ virtual already_AddRefed<mozilla::gfx::ScaledFont>
+ GetScaledFontForFont(mozilla::gfx::DrawTarget* aTarget, gfxFont *aFont) override;
+
+ virtual nsresult GetFontList(nsIAtom *aLangGroup,
+ const nsACString& aGenericFamily,
+ nsTArray<nsString>& aListOfFonts) override;
+
+ virtual nsresult UpdateFontList() override;
+
+ virtual void
+ GetCommonFallbackFonts(uint32_t aCh, uint32_t aNextCh,
+ Script aRunScript,
+ nsTArray<const char*>& aFontList) override;
+
+ virtual gfxPlatformFontList* CreatePlatformFontList() override;
+
+ virtual nsresult GetStandardFamilyName(const nsAString& aFontName,
+ nsAString& aFamilyName) override;
+
+ gfxFontGroup*
+ CreateFontGroup(const mozilla::FontFamilyList& aFontFamilyList,
+ const gfxFontStyle *aStyle,
+ gfxTextPerfMetrics* aTextPerf,
+ gfxUserFontSet *aUserFontSet,
+ gfxFloat aDevToCssSize) override;
+
+ /**
+ * Look up a local platform font using the full font face name (needed to
+ * support @font-face src local() )
+ */
+ virtual gfxFontEntry* LookupLocalFont(const nsAString& aFontName,
+ uint16_t aWeight,
+ int16_t aStretch,
+ uint8_t aStyle) override;
+
+ /**
+ * Activate a platform font (needed to support @font-face src url() )
+ *
+ */
+ virtual gfxFontEntry* MakePlatformFont(const nsAString& aFontName,
+ uint16_t aWeight,
+ int16_t aStretch,
+ uint8_t aStyle,
+ const uint8_t* aFontData,
+ uint32_t aLength) override;
+
+ /**
+ * Check whether format is supported on a platform or not (if unclear,
+ * returns true).
+ */
+ virtual bool IsFontFormatSupported(nsIURI *aFontURI,
+ uint32_t aFormatFlags) override;
+
+ /**
+ * Calls XFlush if xrender is enabled.
+ */
+ virtual void FlushContentDrawing() override;
+
+#if (MOZ_WIDGET_GTK == 2)
+ static void SetGdkDrawable(cairo_surface_t *target,
+ GdkDrawable *drawable);
+ static GdkDrawable *GetGdkDrawable(cairo_surface_t *target);
+#endif
+
+ static int32_t GetDPI();
+ static double GetDPIScale();
+
+#ifdef MOZ_X11
+ virtual void GetAzureBackendInfo(mozilla::widget::InfoObject &aObj) override {
+ gfxPlatform::GetAzureBackendInfo(aObj);
+ aObj.DefineProperty("CairoUseXRender", mozilla::gfx::gfxVars::UseXRender());
+ }
+#endif
+
+ static bool UseFcFontList() { return sUseFcFontList; }
+
+ bool UseImageOffscreenSurfaces();
+
+ virtual gfxImageFormat GetOffscreenFormat() override;
+
+ bool SupportsApzWheelInput() const override {
+ return true;
+ }
+
+ bool SupportsApzTouchInput() const override;
+
+ void FontsPrefsChanged(const char *aPref) override;
+
+ // maximum number of fonts to substitute for a generic
+ uint32_t MaxGenericSubstitions();
+
+ bool SupportsPluginDirectBitmapDrawing() override {
+ return true;
+ }
+
+ bool AccelerateLayersByDefault() override {
+#ifdef NIGHTLY_BUILD
+ // Only enable the GL compositor on Nightly for now until we have
+ // sufficient data for blocklisting.
+ return true;
+#endif
+ return false;
+ }
+
+#ifdef GL_PROVIDER_GLX
+ already_AddRefed<mozilla::gfx::VsyncSource> CreateHardwareVsyncSource() override;
+#endif
+
+#ifdef MOZ_X11
+ Display* GetCompositorDisplay() {
+ return mCompositorDisplay;
+ }
+#endif // MOZ_X11
+
+protected:
+ static gfxFontconfigUtils *sFontconfigUtils;
+
+ int8_t mMaxGenericSubstitutions;
+
+private:
+ virtual void GetPlatformCMSOutputProfile(void *&mem,
+ size_t &size) override;
+
+#ifdef MOZ_X11
+ Display* mCompositorDisplay;
+#endif
+
+ // xxx - this will be removed once the new fontconfig platform font list
+ // replaces gfxPangoFontGroup
+ static bool sUseFcFontList;
+};
+
+#endif /* GFX_PLATFORM_GTK_H */