[cairo] GraphicsContext should not depend on GTK+
[WebKit-https.git] / Source / WebCore / platform / graphics / cairo / GraphicsContextPlatformPrivateCairo.h
1 /*
2  * Copyright (C) 2006 Apple Inc.  All rights reserved.
3  * Copyright (C) 2007 Alp Toker <alp@atoker.com>
4  * Copyright (C) 2008 Brent Fulgham <bfulgham@gmail.com>
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
26  */
27
28 #ifndef GraphicsContextPlatformPrivateCairo_h
29 #define GraphicsContextPlatformPrivateCairo_h
30
31 #include "GraphicsContext.h"
32
33 #include "PlatformContextCairo.h"
34 #include "RefPtrCairo.h"
35 #include <cairo.h>
36 #include <math.h>
37 #include <stdio.h>
38
39 #if PLATFORM(WIN)
40 #include <cairo-win32.h>
41 #endif
42
43 namespace WebCore {
44
45 class GraphicsContextPlatformPrivate {
46 public:
47     GraphicsContextPlatformPrivate(PlatformContextCairo* newPlatformContext)
48         : platformContext(newPlatformContext)
49 #if PLATFORM(WIN) || (PLATFORM(GTK) && OS(WINDOWS))
50         // NOTE:  These may note be needed: review and remove once Cairo implementation is complete
51         , m_hdc(0)
52         , m_shouldIncludeChildWindows(false)
53 #endif
54     {
55     }
56
57     virtual ~GraphicsContextPlatformPrivate()
58     {
59     }
60
61 #if PLATFORM(WIN)
62     // On Windows, we need to update the HDC for form controls to draw in the right place.
63     void save();
64     void restore();
65     void flush();
66     void clip(const FloatRect&);
67     void clip(const Path&);
68     void scale(const FloatSize&);
69     void rotate(float);
70     void translate(float, float);
71     void concatCTM(const AffineTransform&);
72     void setCTM(const AffineTransform&);
73     void syncContext(cairo_t* cr);
74 #else
75     // On everything else, we do nothing.
76     void save() {}
77     void restore() {}
78     void flush() {}
79     void clip(const FloatRect&) {}
80     void clip(const Path&) {}
81     void scale(const FloatSize&) {}
82     void rotate(float) {}
83     void translate(float, float) {}
84     void concatCTM(const AffineTransform&) {}
85     void setCTM(const AffineTransform&) {}
86     void syncContext(cairo_t*) { }
87 #endif
88
89     PlatformContextCairo* platformContext;
90     Vector<float> layers;
91
92 #if PLATFORM(WIN) || (PLATFORM(GTK) && OS(WINDOWS))
93     HDC m_hdc;
94     bool m_shouldIncludeChildWindows;
95 #endif
96 };
97
98 // This is a specialized private section for the Cairo GraphicsContext, which knows how
99 // to clean up the heap allocated PlatformContextCairo that we must use for the top-level
100 // GraphicsContext.
101 class GraphicsContextPlatformPrivateToplevel : public GraphicsContextPlatformPrivate {
102 public:
103     GraphicsContextPlatformPrivateToplevel(PlatformContextCairo* platformContext)
104         : GraphicsContextPlatformPrivate(platformContext)
105     {
106     }
107
108     virtual ~GraphicsContextPlatformPrivateToplevel()
109     {
110         delete platformContext;
111     }
112 };
113
114
115 } // namespace WebCore
116
117 #endif // GraphicsContextPlatformPrivateCairo_h