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_ */