gfx/2d/Types.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
     2  * This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #ifndef MOZILLA_GFX_TYPES_H_
     7 #define MOZILLA_GFX_TYPES_H_
     9 #include "mozilla/NullPtr.h"
    10 #include "mozilla/TypedEnum.h"
    12 #include <stddef.h>
    13 #include <stdint.h>
    15 namespace mozilla {
    16 namespace gfx {
    18 typedef float Float;
    20 MOZ_BEGIN_ENUM_CLASS(SurfaceType, int8_t)
    21   DATA, /* Data surface - bitmap in memory */
    22   D2D1_BITMAP, /* Surface wrapping a ID2D1Bitmap */
    23   D2D1_DRAWTARGET, /* Surface made from a D2D draw target */
    24   CAIRO, /* Surface wrapping a cairo surface */
    25   CAIRO_IMAGE, /* Data surface wrapping a cairo image surface */
    26   COREGRAPHICS_IMAGE, /* Surface wrapping a CoreGraphics Image */
    27   COREGRAPHICS_CGCONTEXT, /* Surface wrapping a CG context */
    28   SKIA, /* Surface wrapping a Skia bitmap */
    29   DUAL_DT, /* Snapshot of a dual drawtarget */
    30   D2D1_1_IMAGE, /* A D2D 1.1 ID2D1Image SourceSurface */
    31   RECORDING /* Surface used for recording */
    32 MOZ_END_ENUM_CLASS(SurfaceType)
    34 MOZ_BEGIN_ENUM_CLASS(SurfaceFormat, int8_t)
    35   B8G8R8A8,
    36   B8G8R8X8,
    37   R8G8B8A8,
    38   R8G8B8X8,
    39   R5G6B5,
    40   A8,
    41   YUV,
    42   UNKNOWN
    43 MOZ_END_ENUM_CLASS(SurfaceFormat)
    45 MOZ_BEGIN_ENUM_CLASS(FilterType, int8_t)
    46   BLEND = 0,
    47   TRANSFORM,
    48   MORPHOLOGY,
    49   COLOR_MATRIX,
    50   FLOOD,
    51   TILE,
    52   TABLE_TRANSFER,
    53   DISCRETE_TRANSFER,
    54   LINEAR_TRANSFER,
    55   GAMMA_TRANSFER,
    56   CONVOLVE_MATRIX,
    57   DISPLACEMENT_MAP,
    58   TURBULENCE,
    59   ARITHMETIC_COMBINE,
    60   COMPOSITE,
    61   DIRECTIONAL_BLUR,
    62   GAUSSIAN_BLUR,
    63   POINT_DIFFUSE,
    64   POINT_SPECULAR,
    65   SPOT_DIFFUSE,
    66   SPOT_SPECULAR,
    67   DISTANT_DIFFUSE,
    68   DISTANT_SPECULAR,
    69   CROP,
    70   PREMULTIPLY,
    71   UNPREMULTIPLY
    72 MOZ_END_ENUM_CLASS(FilterType)
    74 MOZ_BEGIN_ENUM_CLASS(BackendType, int8_t)
    75   NONE = 0,
    76   DIRECT2D,
    77   COREGRAPHICS,
    78   COREGRAPHICS_ACCELERATED,
    79   CAIRO,
    80   SKIA,
    81   RECORDING,
    82   DIRECT2D1_1
    83 MOZ_END_ENUM_CLASS(BackendType)
    85 MOZ_BEGIN_ENUM_CLASS(FontType, int8_t)
    86   DWRITE,
    87   GDI,
    88   MAC,
    89   SKIA,
    90   CAIRO,
    91   COREGRAPHICS
    92 MOZ_END_ENUM_CLASS(FontType)
    94 MOZ_BEGIN_ENUM_CLASS(NativeSurfaceType, int8_t)
    95   D3D10_TEXTURE,
    96   CAIRO_SURFACE,
    97   CAIRO_CONTEXT,
    98   CGCONTEXT,
    99   CGCONTEXT_ACCELERATED,
   100   OPENGL_TEXTURE
   101 MOZ_END_ENUM_CLASS(NativeSurfaceType)
   103 MOZ_BEGIN_ENUM_CLASS(NativeFontType, int8_t)
   104   DWRITE_FONT_FACE,
   105   GDI_FONT_FACE,
   106   MAC_FONT_FACE,
   107   SKIA_FONT_FACE,
   108   CAIRO_FONT_FACE
   109 MOZ_END_ENUM_CLASS(NativeFontType)
   111 MOZ_BEGIN_ENUM_CLASS(FontStyle, int8_t)
   112   NORMAL,
   113   ITALIC,
   114   BOLD,
   115   BOLD_ITALIC
   116 MOZ_END_ENUM_CLASS(FontStyle)
   118 MOZ_BEGIN_ENUM_CLASS(FontHinting, int8_t)
   119   NONE,
   120   LIGHT,
   121   NORMAL,
   122   FULL
   123 MOZ_END_ENUM_CLASS(FontHinting)
   125 MOZ_BEGIN_ENUM_CLASS(CompositionOp, int8_t)
   126   OP_OVER,
   127   OP_ADD,
   128   OP_ATOP,
   129   OP_OUT,
   130   OP_IN,
   131   OP_SOURCE,
   132   OP_DEST_IN,
   133   OP_DEST_OUT,
   134   OP_DEST_OVER,
   135   OP_DEST_ATOP,
   136   OP_XOR,
   137   OP_MULTIPLY,
   138   OP_SCREEN,
   139   OP_OVERLAY,
   140   OP_DARKEN,
   141   OP_LIGHTEN,
   142   OP_COLOR_DODGE,
   143   OP_COLOR_BURN,
   144   OP_HARD_LIGHT,
   145   OP_SOFT_LIGHT,
   146   OP_DIFFERENCE,
   147   OP_EXCLUSION,
   148   OP_HUE,
   149   OP_SATURATION,
   150   OP_COLOR,
   151   OP_LUMINOSITY,
   152   OP_COUNT
   153 MOZ_END_ENUM_CLASS(CompositionOp)
   155 MOZ_BEGIN_ENUM_CLASS(ExtendMode, int8_t)
   156   CLAMP,
   157   REPEAT,
   158   REFLECT
   159 MOZ_END_ENUM_CLASS(ExtendMode)
   161 MOZ_BEGIN_ENUM_CLASS(FillRule, int8_t)
   162   FILL_WINDING,
   163   FILL_EVEN_ODD
   164 MOZ_END_ENUM_CLASS(FillRule)
   166 MOZ_BEGIN_ENUM_CLASS(AntialiasMode, int8_t)
   167   NONE,
   168   GRAY,
   169   SUBPIXEL,
   170   DEFAULT
   171 MOZ_END_ENUM_CLASS(AntialiasMode)
   173 MOZ_BEGIN_ENUM_CLASS(Filter, int8_t)
   174   GOOD,
   175   LINEAR,
   176   POINT
   177 MOZ_END_ENUM_CLASS(Filter)
   179 MOZ_BEGIN_ENUM_CLASS(PatternType, int8_t)
   180   COLOR,
   181   SURFACE,
   182   LINEAR_GRADIENT,
   183   RADIAL_GRADIENT
   184 MOZ_END_ENUM_CLASS(PatternType)
   186 MOZ_BEGIN_ENUM_CLASS(JoinStyle, int8_t)
   187   BEVEL,
   188   ROUND,
   189   MITER,
   190   MITER_OR_BEVEL
   191 MOZ_END_ENUM_CLASS(JoinStyle)
   193 MOZ_BEGIN_ENUM_CLASS(CapStyle, int8_t)
   194   BUTT,
   195   ROUND,
   196   SQUARE
   197 MOZ_END_ENUM_CLASS(CapStyle)
   199 MOZ_BEGIN_ENUM_CLASS(SamplingBounds, int8_t)
   200   UNBOUNDED,
   201   BOUNDED
   202 MOZ_END_ENUM_CLASS(SamplingBounds)
   204 /* Color is stored in non-premultiplied form */
   205 struct Color
   206 {
   207 public:
   208   Color()
   209     : r(0.0f), g(0.0f), b(0.0f), a(0.0f)
   210   {}
   211   Color(Float aR, Float aG, Float aB, Float aA)
   212     : r(aR), g(aG), b(aB), a(aA)
   213   {}
   214   Color(Float aR, Float aG, Float aB)
   215     : r(aR), g(aG), b(aB), a(1.0f)
   216   {}
   218   static Color FromABGR(uint32_t aColor)
   219   {
   220     Color newColor(((aColor >> 0) & 0xff) * (1.0f / 255.0f),
   221                    ((aColor >> 8) & 0xff) * (1.0f / 255.0f),
   222                    ((aColor >> 16) & 0xff) * (1.0f / 255.0f),
   223                    ((aColor >> 24) & 0xff) * (1.0f / 255.0f));
   225     return newColor;
   226   }
   228   uint32_t ToABGR() const
   229   {
   230     return uint32_t(r * 255.0f) | uint32_t(g * 255.0f) << 8 |
   231            uint32_t(b * 255.0f) << 16 | uint32_t(a * 255.0f) << 24;
   232   }
   234   Float r, g, b, a;
   235 };
   237 struct GradientStop
   238 {
   239   bool operator<(const GradientStop& aOther) const {
   240     return offset < aOther.offset;
   241   }
   243   Float offset;
   244   Color color;
   245 };
   247 }
   248 }
   250 #if defined(XP_WIN) && defined(MOZ_GFX)
   251 #ifdef GFX2D_INTERNAL
   252 #define GFX2D_API __declspec(dllexport)
   253 #else
   254 #define GFX2D_API __declspec(dllimport)
   255 #endif
   256 #else
   257 #define GFX2D_API
   258 #endif
   260 // Side constants for use in various places
   261 namespace mozilla {
   262   namespace css {
   263     enum Side {eSideTop, eSideRight, eSideBottom, eSideLeft};
   264   }
   265 }
   267 // XXX - These don't really belong here. But for now this is where they go.
   268 #define NS_SIDE_TOP     mozilla::css::eSideTop
   269 #define NS_SIDE_RIGHT   mozilla::css::eSideRight
   270 #define NS_SIDE_BOTTOM  mozilla::css::eSideBottom
   271 #define NS_SIDE_LEFT    mozilla::css::eSideLeft
   273 #endif /* MOZILLA_GFX_TYPES_H_ */

mercurial