gfx/thebes/gfxD2DSurface.cpp

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:e972b56cb98b
1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
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/. */
5
6 #include "gfxD2DSurface.h"
7 #include "cairo.h"
8 #include "cairo-win32.h"
9 #include "gfxWindowsPlatform.h"
10
11 gfxD2DSurface::gfxD2DSurface(HWND aWnd, gfxContentType aContent)
12 {
13 Init(cairo_d2d_surface_create_for_hwnd(
14 gfxWindowsPlatform::GetPlatform()->GetD2DDevice(),
15 aWnd,
16 (cairo_content_t)(int)aContent));
17 }
18
19 gfxD2DSurface::gfxD2DSurface(HANDLE handle, gfxContentType aContent)
20 {
21 Init(cairo_d2d_surface_create_for_handle(
22 gfxWindowsPlatform::GetPlatform()->GetD2DDevice(),
23 handle,
24 (cairo_content_t)(int)aContent));
25 }
26
27 gfxD2DSurface::gfxD2DSurface(ID3D10Texture2D *texture, gfxContentType aContent)
28 {
29 Init(cairo_d2d_surface_create_for_texture(
30 gfxWindowsPlatform::GetPlatform()->GetD2DDevice(),
31 texture,
32 (cairo_content_t)(int)aContent));
33 }
34
35 gfxD2DSurface::gfxD2DSurface(cairo_surface_t *csurf)
36 {
37 Init(csurf, true);
38 }
39
40 gfxD2DSurface::gfxD2DSurface(const gfxIntSize& size,
41 gfxImageFormat imageFormat)
42 {
43 Init(cairo_d2d_surface_create(
44 gfxWindowsPlatform::GetPlatform()->GetD2DDevice(),
45 (cairo_format_t)(int)imageFormat,
46 size.width, size.height));
47 }
48
49 gfxD2DSurface::~gfxD2DSurface()
50 {
51 }
52
53 void
54 gfxD2DSurface::Present()
55 {
56 cairo_d2d_present_backbuffer(CairoSurface());
57 }
58
59 void
60 gfxD2DSurface::Scroll(const nsIntPoint &aDelta, const nsIntRect &aClip)
61 {
62 cairo_rectangle_t rect;
63 rect.x = aClip.x;
64 rect.y = aClip.y;
65 rect.width = aClip.width;
66 rect.height = aClip.height;
67 cairo_d2d_scroll(CairoSurface(), aDelta.x, aDelta.y, &rect);
68 }
69
70 ID3D10Texture2D*
71 gfxD2DSurface::GetTexture()
72 {
73 return cairo_d2d_surface_get_texture(CairoSurface());
74 }
75
76 HDC
77 gfxD2DSurface::GetDC(bool aRetainContents)
78 {
79 return cairo_d2d_get_dc(CairoSurface(), aRetainContents);
80 }
81
82 void
83 gfxD2DSurface::ReleaseDC(const nsIntRect *aUpdatedRect)
84 {
85 if (!aUpdatedRect) {
86 return cairo_d2d_release_dc(CairoSurface(), nullptr);
87 }
88
89 cairo_rectangle_int_t rect;
90 rect.x = aUpdatedRect->x;
91 rect.y = aUpdatedRect->y;
92 rect.width = aUpdatedRect->width;
93 rect.height = aUpdatedRect->height;
94 cairo_d2d_release_dc(CairoSurface(), &rect);
95 }
96
97 const gfxIntSize gfxD2DSurface::GetSize() const
98 {
99 return gfxIntSize(cairo_d2d_surface_get_width(mSurface),
100 cairo_d2d_surface_get_height(mSurface));
101 }

mercurial