Fixed <rdar://problem/3704339> Context2D forces integer positions in drawImage
[WebKit-https.git] / WebCore / kwq / KWQPainter.h
1 /*
2  * Copyright (C) 2003 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef QPAINTER_H_
27 #define QPAINTER_H_
28
29 #include "KWQNamespace.h"
30 #include "KWQPaintDevice.h"
31 #include "KWQColor.h"
32 #include "KWQPen.h"
33 #include "KWQBrush.h"
34 #include "KWQRect.h"
35 #include "KWQRegion.h"
36 #include "KWQPointArray.h"
37 #include "KWQString.h"
38 #include "KWQFontMetrics.h"
39
40 #include <ApplicationServices/ApplicationServices.h>
41
42 class QFont;
43 class QPixmap;
44 class QWidget;
45 class QPainterPrivate;
46
47 class QPainter : public Qt {
48 public:
49     typedef enum { RTL, LTR } TextDirection;
50
51     QPainter();
52     QPainter(bool forPrinting);
53     ~QPainter();
54
55     QPaintDevice *device() const;
56     
57     const QFont &font() const;
58     void setFont(const QFont &);
59     QFontMetrics fontMetrics() const;
60     
61     const QPen &pen() const;
62     void setPen(const QPen &);
63     void setPen(PenStyle);
64     void setPen(QRgb);
65     
66     const QBrush &QPainter::brush() const;
67     void setBrush(const QBrush &);
68     void setBrush(BrushStyle);
69     void setBrush(QRgb);
70
71     QRect xForm(const QRect &) const;
72
73     void save();
74     void restore();
75     
76     void drawRect(int, int, int, int);
77     void drawLine(int, int, int, int);
78     void drawLineSegments(const QPointArray &, int index=0, int nlines=-1);
79     void drawEllipse(int, int, int, int);
80     void drawArc(int, int, int, int, int, int);
81     void drawPolyline(const QPointArray &, int index=0, int npoints=-1);
82     void drawPolygon(const QPointArray &, bool winding=FALSE, int index=0, int npoints=-1);
83     void drawConvexPolygon(const QPointArray &);
84
85     void fillRect(int, int, int, int, const QBrush &);
86
87     void drawPixmap(const QPoint &, const QPixmap &);
88     void drawPixmap(const QPoint &, const QPixmap &, const QRect &);
89     void drawPixmap(const QPoint &, const QPixmap &, const QRect &, const QString &);
90     void drawPixmap( int x, int y, const QPixmap &,
91                             int sx=0, int sy=0, int sw=-1, int sh=-1, int compositeOperator=-1, CGContextRef context=0);
92     void drawPixmap( int x, int y, int w, int h, const QPixmap &,
93                             int sx=0, int sy=0, int sw=-1, int sh=-1, int compositeOperator=-1, CGContextRef context=0);
94     void drawFloatPixmap( float x, float y, float w, float h, const QPixmap &,
95                             float sx=0, float sy=0, float sw=-1, float sh=-1, int compositeOperator=-1, CGContextRef context=0);
96     void drawTiledPixmap(int, int, int, int, const QPixmap &, int sx=0, int sy=0, CGContextRef context=0);
97
98     void addClip(const QRect &);
99
100     RasterOp rasterOp() const;
101     void setRasterOp(RasterOp);
102
103     void drawText(int x, int y, int, int, int alignmentFlags, const QString &);
104     void drawHighlightForText(int x, int minX, int maxX, int y, int h, 
105                   const QChar *, int length, int from, int to, int toAdd,
106                   const QColor& backgroundColor, QPainter::TextDirection d, bool visuallyOrdered,
107                   int letterSpacing, int wordSpacing, bool smallCaps);
108     void drawText(int x, int y, const QChar *, int length, int from, int to, int toAdd,
109                   const QColor& backgroundColor, QPainter::TextDirection d, bool visuallyOrdered,
110                   int letterSpacing, int wordSpacing, bool smallCaps);
111     void drawLineForText(int x, int y, int yOffset, int width);
112     void drawLineForMisspelling(int x, int y, int width);
113
114     QColor selectedTextBackgroundColor() const;
115     void setUsesInactiveTextBackgroundColor(bool u) { _usesInactiveTextBackgroundColor = u; }
116     
117     bool paintingDisabled() const;
118     void setPaintingDisabled(bool);
119         
120     void beginTransparencyLayer(float opacity);
121     void endTransparencyLayer();
122
123     void setShadow(int x, int y, int blur, const QColor& color);
124     void clearShadow();
125
126     void initFocusRing(int width, int offset);
127     void initFocusRing(int width, int offset, const QColor& color);
128     void addFocusRingRect(int x, int y, int width, int height);
129     void drawFocusRing();
130     void clearFocusRing();
131     void setDrawsFocusRing(bool flag) { _drawsFocusRing = flag; }
132     
133     CGContextRef currentContext();
134     
135     static int compositeOperatorFromString (QString aString);
136     static int getCompositeOperation(CGContextRef context);
137     static void setCompositeOperation (CGContextRef context, QString operation);
138     static void setCompositeOperation (CGContextRef context, int operation);
139
140 private:
141     // no copying or assignment
142     QPainter(const QPainter &);
143     QPainter &operator=(const QPainter &);
144
145     void _setColorFromBrush();
146     void _setColorFromPen();
147
148     void _fillRect(float x, float y, float w, float h, const QColor& color);
149     
150     void _drawPoints(const QPointArray &_points, bool winding, int index, int _npoints, bool fill);
151
152     void _updateRenderer();
153
154     QPainterPrivate *data;
155     bool _isForPrinting;
156     bool _usesInactiveTextBackgroundColor;
157     bool _drawsFocusRing;
158 };
159
160 #endif