gfx/2d/Types.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/gfx/2d/Types.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,273 @@
     1.4 +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
     1.5 + * This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.8 +
     1.9 +#ifndef MOZILLA_GFX_TYPES_H_
    1.10 +#define MOZILLA_GFX_TYPES_H_
    1.11 +
    1.12 +#include "mozilla/NullPtr.h"
    1.13 +#include "mozilla/TypedEnum.h"
    1.14 +
    1.15 +#include <stddef.h>
    1.16 +#include <stdint.h>
    1.17 +
    1.18 +namespace mozilla {
    1.19 +namespace gfx {
    1.20 +
    1.21 +typedef float Float;
    1.22 +
    1.23 +MOZ_BEGIN_ENUM_CLASS(SurfaceType, int8_t)
    1.24 +  DATA, /* Data surface - bitmap in memory */
    1.25 +  D2D1_BITMAP, /* Surface wrapping a ID2D1Bitmap */
    1.26 +  D2D1_DRAWTARGET, /* Surface made from a D2D draw target */
    1.27 +  CAIRO, /* Surface wrapping a cairo surface */
    1.28 +  CAIRO_IMAGE, /* Data surface wrapping a cairo image surface */
    1.29 +  COREGRAPHICS_IMAGE, /* Surface wrapping a CoreGraphics Image */
    1.30 +  COREGRAPHICS_CGCONTEXT, /* Surface wrapping a CG context */
    1.31 +  SKIA, /* Surface wrapping a Skia bitmap */
    1.32 +  DUAL_DT, /* Snapshot of a dual drawtarget */
    1.33 +  D2D1_1_IMAGE, /* A D2D 1.1 ID2D1Image SourceSurface */
    1.34 +  RECORDING /* Surface used for recording */
    1.35 +MOZ_END_ENUM_CLASS(SurfaceType)
    1.36 +
    1.37 +MOZ_BEGIN_ENUM_CLASS(SurfaceFormat, int8_t)
    1.38 +  B8G8R8A8,
    1.39 +  B8G8R8X8,
    1.40 +  R8G8B8A8,
    1.41 +  R8G8B8X8,
    1.42 +  R5G6B5,
    1.43 +  A8,
    1.44 +  YUV,
    1.45 +  UNKNOWN
    1.46 +MOZ_END_ENUM_CLASS(SurfaceFormat)
    1.47 +
    1.48 +MOZ_BEGIN_ENUM_CLASS(FilterType, int8_t)
    1.49 +  BLEND = 0,
    1.50 +  TRANSFORM,
    1.51 +  MORPHOLOGY,
    1.52 +  COLOR_MATRIX,
    1.53 +  FLOOD,
    1.54 +  TILE,
    1.55 +  TABLE_TRANSFER,
    1.56 +  DISCRETE_TRANSFER,
    1.57 +  LINEAR_TRANSFER,
    1.58 +  GAMMA_TRANSFER,
    1.59 +  CONVOLVE_MATRIX,
    1.60 +  DISPLACEMENT_MAP,
    1.61 +  TURBULENCE,
    1.62 +  ARITHMETIC_COMBINE,
    1.63 +  COMPOSITE,
    1.64 +  DIRECTIONAL_BLUR,
    1.65 +  GAUSSIAN_BLUR,
    1.66 +  POINT_DIFFUSE,
    1.67 +  POINT_SPECULAR,
    1.68 +  SPOT_DIFFUSE,
    1.69 +  SPOT_SPECULAR,
    1.70 +  DISTANT_DIFFUSE,
    1.71 +  DISTANT_SPECULAR,
    1.72 +  CROP,
    1.73 +  PREMULTIPLY,
    1.74 +  UNPREMULTIPLY
    1.75 +MOZ_END_ENUM_CLASS(FilterType)
    1.76 +
    1.77 +MOZ_BEGIN_ENUM_CLASS(BackendType, int8_t)
    1.78 +  NONE = 0,
    1.79 +  DIRECT2D,
    1.80 +  COREGRAPHICS,
    1.81 +  COREGRAPHICS_ACCELERATED,
    1.82 +  CAIRO,
    1.83 +  SKIA,
    1.84 +  RECORDING,
    1.85 +  DIRECT2D1_1
    1.86 +MOZ_END_ENUM_CLASS(BackendType)
    1.87 +
    1.88 +MOZ_BEGIN_ENUM_CLASS(FontType, int8_t)
    1.89 +  DWRITE,
    1.90 +  GDI,
    1.91 +  MAC,
    1.92 +  SKIA,
    1.93 +  CAIRO,
    1.94 +  COREGRAPHICS
    1.95 +MOZ_END_ENUM_CLASS(FontType)
    1.96 +
    1.97 +MOZ_BEGIN_ENUM_CLASS(NativeSurfaceType, int8_t)
    1.98 +  D3D10_TEXTURE,
    1.99 +  CAIRO_SURFACE,
   1.100 +  CAIRO_CONTEXT,
   1.101 +  CGCONTEXT,
   1.102 +  CGCONTEXT_ACCELERATED,
   1.103 +  OPENGL_TEXTURE
   1.104 +MOZ_END_ENUM_CLASS(NativeSurfaceType)
   1.105 +
   1.106 +MOZ_BEGIN_ENUM_CLASS(NativeFontType, int8_t)
   1.107 +  DWRITE_FONT_FACE,
   1.108 +  GDI_FONT_FACE,
   1.109 +  MAC_FONT_FACE,
   1.110 +  SKIA_FONT_FACE,
   1.111 +  CAIRO_FONT_FACE
   1.112 +MOZ_END_ENUM_CLASS(NativeFontType)
   1.113 +
   1.114 +MOZ_BEGIN_ENUM_CLASS(FontStyle, int8_t)
   1.115 +  NORMAL,
   1.116 +  ITALIC,
   1.117 +  BOLD,
   1.118 +  BOLD_ITALIC
   1.119 +MOZ_END_ENUM_CLASS(FontStyle)
   1.120 +
   1.121 +MOZ_BEGIN_ENUM_CLASS(FontHinting, int8_t)
   1.122 +  NONE,
   1.123 +  LIGHT,
   1.124 +  NORMAL,
   1.125 +  FULL
   1.126 +MOZ_END_ENUM_CLASS(FontHinting)
   1.127 +
   1.128 +MOZ_BEGIN_ENUM_CLASS(CompositionOp, int8_t)
   1.129 +  OP_OVER,
   1.130 +  OP_ADD,
   1.131 +  OP_ATOP,
   1.132 +  OP_OUT,
   1.133 +  OP_IN,
   1.134 +  OP_SOURCE,
   1.135 +  OP_DEST_IN,
   1.136 +  OP_DEST_OUT,
   1.137 +  OP_DEST_OVER,
   1.138 +  OP_DEST_ATOP,
   1.139 +  OP_XOR,
   1.140 +  OP_MULTIPLY,
   1.141 +  OP_SCREEN,
   1.142 +  OP_OVERLAY,
   1.143 +  OP_DARKEN,
   1.144 +  OP_LIGHTEN,
   1.145 +  OP_COLOR_DODGE,
   1.146 +  OP_COLOR_BURN,
   1.147 +  OP_HARD_LIGHT,
   1.148 +  OP_SOFT_LIGHT,
   1.149 +  OP_DIFFERENCE,
   1.150 +  OP_EXCLUSION,
   1.151 +  OP_HUE,
   1.152 +  OP_SATURATION,
   1.153 +  OP_COLOR,
   1.154 +  OP_LUMINOSITY,
   1.155 +  OP_COUNT
   1.156 +MOZ_END_ENUM_CLASS(CompositionOp)
   1.157 +
   1.158 +MOZ_BEGIN_ENUM_CLASS(ExtendMode, int8_t)
   1.159 +  CLAMP,
   1.160 +  REPEAT,
   1.161 +  REFLECT
   1.162 +MOZ_END_ENUM_CLASS(ExtendMode)
   1.163 +
   1.164 +MOZ_BEGIN_ENUM_CLASS(FillRule, int8_t)
   1.165 +  FILL_WINDING,
   1.166 +  FILL_EVEN_ODD
   1.167 +MOZ_END_ENUM_CLASS(FillRule)
   1.168 +
   1.169 +MOZ_BEGIN_ENUM_CLASS(AntialiasMode, int8_t)
   1.170 +  NONE,
   1.171 +  GRAY,
   1.172 +  SUBPIXEL,
   1.173 +  DEFAULT
   1.174 +MOZ_END_ENUM_CLASS(AntialiasMode)
   1.175 +
   1.176 +MOZ_BEGIN_ENUM_CLASS(Filter, int8_t)
   1.177 +  GOOD,
   1.178 +  LINEAR,
   1.179 +  POINT
   1.180 +MOZ_END_ENUM_CLASS(Filter)
   1.181 +
   1.182 +MOZ_BEGIN_ENUM_CLASS(PatternType, int8_t)
   1.183 +  COLOR,
   1.184 +  SURFACE,
   1.185 +  LINEAR_GRADIENT,
   1.186 +  RADIAL_GRADIENT
   1.187 +MOZ_END_ENUM_CLASS(PatternType)
   1.188 +
   1.189 +MOZ_BEGIN_ENUM_CLASS(JoinStyle, int8_t)
   1.190 +  BEVEL,
   1.191 +  ROUND,
   1.192 +  MITER,
   1.193 +  MITER_OR_BEVEL
   1.194 +MOZ_END_ENUM_CLASS(JoinStyle)
   1.195 +
   1.196 +MOZ_BEGIN_ENUM_CLASS(CapStyle, int8_t)
   1.197 +  BUTT,
   1.198 +  ROUND,
   1.199 +  SQUARE
   1.200 +MOZ_END_ENUM_CLASS(CapStyle)
   1.201 +
   1.202 +MOZ_BEGIN_ENUM_CLASS(SamplingBounds, int8_t)
   1.203 +  UNBOUNDED,
   1.204 +  BOUNDED
   1.205 +MOZ_END_ENUM_CLASS(SamplingBounds)
   1.206 +
   1.207 +/* Color is stored in non-premultiplied form */
   1.208 +struct Color
   1.209 +{
   1.210 +public:
   1.211 +  Color()
   1.212 +    : r(0.0f), g(0.0f), b(0.0f), a(0.0f)
   1.213 +  {}
   1.214 +  Color(Float aR, Float aG, Float aB, Float aA)
   1.215 +    : r(aR), g(aG), b(aB), a(aA)
   1.216 +  {}
   1.217 +  Color(Float aR, Float aG, Float aB)
   1.218 +    : r(aR), g(aG), b(aB), a(1.0f)
   1.219 +  {}
   1.220 +
   1.221 +  static Color FromABGR(uint32_t aColor)
   1.222 +  {
   1.223 +    Color newColor(((aColor >> 0) & 0xff) * (1.0f / 255.0f),
   1.224 +                   ((aColor >> 8) & 0xff) * (1.0f / 255.0f),
   1.225 +                   ((aColor >> 16) & 0xff) * (1.0f / 255.0f),
   1.226 +                   ((aColor >> 24) & 0xff) * (1.0f / 255.0f));
   1.227 +
   1.228 +    return newColor;
   1.229 +  }
   1.230 +
   1.231 +  uint32_t ToABGR() const
   1.232 +  {
   1.233 +    return uint32_t(r * 255.0f) | uint32_t(g * 255.0f) << 8 |
   1.234 +           uint32_t(b * 255.0f) << 16 | uint32_t(a * 255.0f) << 24;
   1.235 +  }
   1.236 +
   1.237 +  Float r, g, b, a;
   1.238 +};
   1.239 +
   1.240 +struct GradientStop
   1.241 +{
   1.242 +  bool operator<(const GradientStop& aOther) const {
   1.243 +    return offset < aOther.offset;
   1.244 +  }
   1.245 +
   1.246 +  Float offset;
   1.247 +  Color color;
   1.248 +};
   1.249 +
   1.250 +}
   1.251 +}
   1.252 +
   1.253 +#if defined(XP_WIN) && defined(MOZ_GFX)
   1.254 +#ifdef GFX2D_INTERNAL
   1.255 +#define GFX2D_API __declspec(dllexport)
   1.256 +#else
   1.257 +#define GFX2D_API __declspec(dllimport)
   1.258 +#endif
   1.259 +#else
   1.260 +#define GFX2D_API
   1.261 +#endif
   1.262 +
   1.263 +// Side constants for use in various places
   1.264 +namespace mozilla {
   1.265 +  namespace css {
   1.266 +    enum Side {eSideTop, eSideRight, eSideBottom, eSideLeft};
   1.267 +  }
   1.268 +}
   1.269 +
   1.270 +// XXX - These don't really belong here. But for now this is where they go.
   1.271 +#define NS_SIDE_TOP     mozilla::css::eSideTop
   1.272 +#define NS_SIDE_RIGHT   mozilla::css::eSideRight
   1.273 +#define NS_SIDE_BOTTOM  mozilla::css::eSideBottom
   1.274 +#define NS_SIDE_LEFT    mozilla::css::eSideLeft
   1.275 +
   1.276 +#endif /* MOZILLA_GFX_TYPES_H_ */

mercurial