summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/cairo/src/cairo-d2d-private.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/cairo/src/cairo-d2d-private.h')
-rw-r--r--gfx/cairo/cairo/src/cairo-d2d-private.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/gfx/cairo/cairo/src/cairo-d2d-private.h b/gfx/cairo/cairo/src/cairo-d2d-private.h
new file mode 100644
index 000000000..15810eb6d
--- /dev/null
+++ b/gfx/cairo/cairo/src/cairo-d2d-private.h
@@ -0,0 +1,191 @@
+/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright © 2010 Mozilla Foundation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is the Mozilla Foundation
+ *
+ * Contributor(s):
+ * Bas Schouten <bschouten@mozilla.com>
+ */
+#ifndef CAIRO_D2D_PRIVATE_H
+#define CAIRO_D2D_PRIVATE_H
+
+#ifdef CAIRO_HAS_D2D_SURFACE
+
+#include <windows.h>
+#include <d2d1.h>
+#include <d3d10.h>
+#include <dxgi.h>
+
+#include "cairoint.h"
+#include "cairo-surface-clipper-private.h"
+
+#include "cairo-win32-refptr.h"
+#include "cairo-d2d-private-fx.h"
+#include "cairo-win32.h"
+#include "cairo-list-private.h"
+
+/* describes the type of the currently applied clip so that we can pop it */
+struct d2d_clip_t;
+
+#define MAX_OPERATORS CAIRO_OPERATOR_HSL_LUMINOSITY + 1
+
+struct _cairo_d2d_device
+{
+ cairo_device_t base;
+
+ HMODULE mD3D10_1;
+ RefPtr<ID3D10Device1> mD3D10Device;
+ RefPtr<ID3D10Effect> mSampleEffect;
+ RefPtr<ID3D10InputLayout> mInputLayout;
+ RefPtr<ID3D10Buffer> mQuadBuffer;
+ RefPtr<ID3D10RasterizerState> mRasterizerState;
+ RefPtr<ID3D10BlendState> mBlendStates[MAX_OPERATORS];
+ /** Texture used for manual glyph rendering */
+ RefPtr<ID3D10Texture2D> mTextTexture;
+ RefPtr<ID3D10ShaderResourceView> mTextTextureView;
+ int mVRAMUsage;
+};
+
+const unsigned int TEXT_TEXTURE_WIDTH = 2048;
+const unsigned int TEXT_TEXTURE_HEIGHT = 512;
+typedef struct _cairo_d2d_device cairo_d2d_device_t;
+
+struct _cairo_d2d_surface {
+ _cairo_d2d_surface() : d2d_clip(NULL), clipping(false), isDrawing(false),
+ textRenderingState(TEXT_RENDERING_UNINITIALIZED)
+ {
+ _cairo_clip_init (&this->clip);
+ cairo_list_init(&this->dependent_surfaces);
+ }
+
+ ~_cairo_d2d_surface();
+
+
+ cairo_surface_t base;
+ /* Device used by this surface
+ * NOTE: In upstream cairo this is in the surface base class */
+ cairo_d2d_device_t *device;
+
+ /** Render target of the texture we render to */
+ RefPtr<ID2D1RenderTarget> rt;
+ /** Surface containing our backstore */
+ RefPtr<ID3D10Resource> surface;
+ /**
+ * Surface used to temporarily store our surface if a bitmap isn't available
+ * straight from our render target surface.
+ */
+ RefPtr<ID3D10Texture2D> bufferTexture;
+ /** Backbuffer surface hwndrt renders to (NULL if not a window surface) */
+ RefPtr<IDXGISurface> backBuf;
+ /** Bitmap shared with texture and rendered to by rt */
+ RefPtr<ID2D1Bitmap> surfaceBitmap;
+ /** Swap chain holding our backbuffer (NULL if not a window surface) */
+ RefPtr<IDXGISwapChain> dxgiChain;
+ /** Window handle of the window we belong to */
+ HWND hwnd;
+ /** Format of the surface */
+ cairo_format_t format;
+
+ cairo_clip_t clip;
+ d2d_clip_t *d2d_clip;
+
+
+ /** Mask layer used by surface_mask to push opacity masks */
+ RefPtr<ID2D1Layer> maskLayer;
+ /**
+ * Layer used for clipping when tiling, and also for clearing out geometries
+ * - lazily initialized
+ */
+ RefPtr<ID2D1Layer> helperLayer;
+ /** If this layer currently is clipping, used to prevent excessive push/pops */
+ bool clipping;
+ /** Brush used for bitmaps */
+ RefPtr<ID2D1BitmapBrush> bitmapBrush;
+ /** Brush used for solid colors */
+ RefPtr<ID2D1SolidColorBrush> solidColorBrush;
+ /** Indicates if our render target is currently in drawing mode */
+ bool isDrawing;
+ /** Indicates if text rendering is initialized */
+ enum TextRenderingState {
+ TEXT_RENDERING_UNINITIALIZED,
+ TEXT_RENDERING_NO_CLEARTYPE,
+ TEXT_RENDERING_NORMAL,
+ TEXT_RENDERING_GDI_CLASSIC
+ };
+ TextRenderingState textRenderingState;
+
+ RefPtr<ID3D10RenderTargetView> buffer_rt_view;
+ RefPtr<ID3D10ShaderResourceView> buffer_sr_view;
+
+ // Other d2d surfaces which depend on this one and need to be flushed if
+ // it is drawn to. This is required for situations where this surface is
+ // drawn to another surface, but may be modified before the other surface
+ // has flushed. When the flush of the other surface then happens and the
+ // drawing command is actually executed, the contents of this surface will
+ // no longer be what it was when the drawing command was issued.
+ cairo_list_t dependent_surfaces;
+ //cairo_surface_clipper_t clipper;
+};
+typedef struct _cairo_d2d_surface cairo_d2d_surface_t;
+
+struct _cairo_d2d_surface_entry
+{
+ cairo_list_t link;
+ cairo_d2d_surface_t *surface;
+};
+
+typedef HRESULT (WINAPI*D2D1CreateFactoryFunc)(
+ D2D1_FACTORY_TYPE factoryType,
+ REFIID iid,
+ CONST D2D1_FACTORY_OPTIONS *pFactoryOptions,
+ void **factory
+);
+
+typedef HRESULT (WINAPI*D3D10CreateDevice1Func)(
+ IDXGIAdapter *pAdapter,
+ D3D10_DRIVER_TYPE DriverType,
+ HMODULE Software,
+ UINT Flags,
+ D3D10_FEATURE_LEVEL1 HardwareLevel,
+ UINT SDKVersion,
+ ID3D10Device1 **ppDevice
+);
+
+typedef HRESULT (WINAPI*D3D10CreateEffectFromMemoryFunc)(
+ void *pData,
+ SIZE_T DataLength,
+ UINT FXFlags,
+ ID3D10Device *pDevice,
+ ID3D10EffectPool *pEffectPool,
+ ID3D10Effect **ppEffect
+);
+
+#endif /* CAIRO_HAS_D2D_SURFACE */
+#endif /* CAIRO_D2D_PRIVATE_H */