6bfde83b3bb059334a9fef54a6265823a79f7c16
[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(GTK)
40 #include <pango/pango.h>
41 typedef struct _GdkExposeEvent GdkExposeEvent;
42 #elif PLATFORM(WIN)
43 #include <cairo-win32.h>
44 #endif
45
46 namespace WebCore {
47
48 class GraphicsContextPlatformPrivate {
49 public:
50     GraphicsContextPlatformPrivate(PlatformContextCairo* newPlatformContext)
51         : platformContext(newPlatformContext)
52 #if PLATFORM(GTK)
53         , expose(0)
54 #endif
55 #if PLATFORM(WIN) || (PLATFORM(GTK) && OS(WINDOWS))
56         // NOTE:  These may note be needed: review and remove once Cairo implementation is complete
57         , m_hdc(0)
58         , m_shouldIncludeChildWindows(false)
59 #endif
60     {
61     }
62
63     virtual ~GraphicsContextPlatformPrivate()
64     {
65     }
66
67 #if PLATFORM(WIN)
68     // On Windows, we need to update the HDC for form controls to draw in the right place.
69     void save();
70     void restore();
71     void flush();
72     void clip(const FloatRect&);
73     void clip(const Path&);
74     void scale(const FloatSize&);
75     void rotate(float);
76     void translate(float, float);
77     void concatCTM(const AffineTransform&);
78     void setCTM(const AffineTransform&);
79     void syncContext(cairo_t* cr);
80 #else
81     // On everything else, we do nothing.
82     void save() {}
83     void restore() {}
84     void flush() {}
85     void clip(const FloatRect&) {}
86     void clip(const Path&) {}
87     void scale(const FloatSize&) {}
88     void rotate(float) {}
89     void translate(float, float) {}
90     void concatCTM(const AffineTransform&) {}
91     void setCTM(const AffineTransform&) {}
92     void syncContext(cairo_t*) { }
93 #endif
94
95     PlatformContextCairo* platformContext;
96     Vector<float> layers;
97
98 #if PLATFORM(GTK)
99     GdkEventExpose* expose;
100 #endif
101 #if PLATFORM(WIN) || (PLATFORM(GTK) && OS(WINDOWS))
102     HDC m_hdc;
103     bool m_shouldIncludeChildWindows;
104 #endif
105 };
106
107 // This is a specialized private section for the Cairo GraphicsContext, which knows how
108 // to clean up the heap allocated PlatformContextCairo that we must use for the top-level
109 // GraphicsContext.
110 class GraphicsContextPlatformPrivateToplevel : public GraphicsContextPlatformPrivate {
111 public:
112     GraphicsContextPlatformPrivateToplevel(PlatformContextCairo* platformContext)
113         : GraphicsContextPlatformPrivate(platformContext)
114     {
115     }
116
117     virtual ~GraphicsContextPlatformPrivateToplevel()
118     {
119         delete platformContext;
120     }
121 };
122
123
124 } // namespace WebCore
125
126 #endif // GraphicsContextPlatformPrivateCairo_h