- global rename, done by script
[WebKit-https.git] / WebCore / rendering / RenderBox.h
1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
5  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
6  * Copyright (C) 2003 Apple Computer, Inc.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  *
23  */
24 #ifndef RENDER_BOX_H
25 #define RENDER_BOX_H
26
27 #include "RenderObject.h"
28 #include "loader.h"
29 #include "RenderLayer.h"
30
31 namespace WebCore {
32     class CachedObject;
33     
34     enum WidthType { Width, MinWidth, MaxWidth };
35     enum HeightType { Height, MinHeight, MaxHeight };
36     
37 class RenderBox : public RenderObject
38 {
39
40
41 // combines Elem & PosEl (all rendering objects are positioned)
42 // should contain all border and padding handling
43
44 public:
45     RenderBox(WebCore::Node* node);
46     virtual ~RenderBox();
47
48     virtual const char *renderName() const { return "RenderBox"; }
49
50     virtual void setStyle(RenderStyle *style);
51     virtual void paint(PaintInfo& i, int _tx, int _ty);
52     virtual bool nodeAtPoint(NodeInfo& i, int _x, int _y, int _tx, int _ty, HitTestAction hitTestAction);
53
54     virtual void destroy();
55     
56     virtual int minWidth() const { return m_minWidth; }
57     virtual int maxWidth() const { return m_maxWidth; }
58
59     virtual int contentWidth() const;
60     virtual int contentHeight() const;
61
62     virtual int overrideSize() const { return m_overrideSize; }
63     virtual int overrideWidth() const;
64     virtual int overrideHeight() const;
65     virtual void setOverrideSize(int s) { m_overrideSize = s; }
66     
67     virtual bool absolutePosition(int &xPos, int &yPos, bool f = false);
68
69     virtual void setPos( int xPos, int yPos );
70
71     virtual int xPos() const { return m_x; }
72     virtual int yPos() const { return m_y; }
73     virtual int width() const;
74     virtual int height() const;
75
76     virtual int marginTop() const { return m_marginTop; }
77     virtual int marginBottom() const { return m_marginBottom; }
78     virtual int marginLeft() const { return m_marginLeft; }
79     virtual int marginRight() const { return m_marginRight; }
80
81     virtual void setWidth( int width ) { m_width = width; }
82     virtual void setHeight( int height ) { m_height = height; }
83
84     virtual IntRect borderBox() const { return IntRect(0, -borderTopExtra(), width(), height() + borderTopExtra() + borderBottomExtra()); }
85
86     int calcBorderBoxWidth(int w) const;
87     int calcBorderBoxHeight(int h) const;
88     int calcContentBoxWidth(int w) const;
89     int calcContentBoxHeight(int h) const;
90     
91     // This method is now public so that centered objects like tables that are
92     // shifted right by left-aligned floats can recompute their left and
93     // right margins (so that they can remain centered after being 
94     // shifted. -dwh
95     void calcHorizontalMargins(const Length& ml, const Length& mr, int cw);
96
97     virtual void position(InlineBox* box, int from, int len, bool reverse, bool override);
98     
99     virtual void dirtyLineBoxes(bool fullLayout, bool isRootLineBox=false);
100
101     // For inline replaced elements, this function returns the inline box that owns us.  Enables
102     // the replaced RenderObject to quickly determine what line it is contained on and to easily
103     // iterate over structures on the line.
104     virtual InlineBox* inlineBoxWrapper() const;
105     virtual void setInlineBoxWrapper(InlineBox* b);
106     virtual void deleteLineBoxWrapper();
107     
108     virtual int lowestPosition(bool includeOverflowInterior=true, bool includeSelf=true) const;
109     virtual int rightmostPosition(bool includeOverflowInterior=true, bool includeSelf=true) const;
110     virtual int leftmostPosition(bool includeOverflowInterior=true, bool includeSelf=true) const;
111
112     virtual IntRect getAbsoluteRepaintRect();
113     virtual void computeAbsoluteRepaintRect(IntRect& r, bool f=false);
114
115     virtual void repaintDuringLayoutIfMoved(int oldX, int oldY);
116     
117     virtual int containingBlockWidth() const;
118
119     virtual void calcWidth();
120     virtual void calcHeight();
121
122     // Whether or not the element shrinks to its intrinsic width (rather than filling the width
123     // of a containing block).  HTML4 buttons, <select>s, <input>s, legends, and floating/compact elements do this.
124     bool sizesToIntrinsicWidth(WidthType widthType) const;
125
126     int calcWidthUsing(WidthType widthType, int cw, LengthType& lengthType);
127     int calcHeightUsing(const Length& height);
128     int calcReplacedWidthUsing(WidthType widthType) const;
129     int calcReplacedHeightUsing(HeightType heightType) const;
130     
131     virtual int calcReplacedWidth() const;
132     virtual int calcReplacedHeight() const;
133
134     int calcPercentageHeight(const Length& height);
135
136     virtual int availableHeight() const;
137     int availableHeightUsing(const Length& h) const;
138     
139     void calcVerticalMargins();
140
141     void relativePositionOffset(int &tx, int &ty);
142
143     virtual RenderLayer* layer() const { return m_layer; }
144     
145     virtual IntRect caretRect(int offset, EAffinity affinity = UPSTREAM, int *extraWidthToEndOfLine = 0);
146
147     virtual void paintBackgroundExtended(GraphicsContext*, const Color& c, const BackgroundLayer* bgLayer, int clipy, int cliph,
148                                          int _tx, int _ty, int w, int height,
149                                          int bleft, int bright, int pleft, int pright);
150
151     virtual void setStaticX(int staticX);
152     virtual void setStaticY(int staticY);
153     virtual int staticX() const { return m_staticX; }
154     virtual int staticY() const { return m_staticY; }
155
156 protected:
157     virtual void paintBoxDecorations(PaintInfo& i, int _tx, int _ty);
158     void paintRootBoxDecorations(PaintInfo& i, int _tx, int _ty);
159
160     void paintBackgrounds(GraphicsContext*, const Color&, const BackgroundLayer*, int clipy, int cliph, int _tx, int _ty, int w, int h);
161     void paintBackground(GraphicsContext*, const Color&, const BackgroundLayer*, int clipy, int cliph, int _tx, int _ty, int w, int h);
162     void outlineBox(GraphicsContext*, int _tx, int _ty, const char *color = "red");
163
164     void calcAbsoluteHorizontal();
165     void calcAbsoluteVertical();
166     void calcAbsoluteHorizontalValues(WidthType widthType, RenderObject* cb, int cw, int pab, int static_distance,
167                                       int l, int r, int& w, int& ml, int& mr, int& x);
168     void calcAbsoluteVerticalValues(HeightType heightType, RenderObject* cb, int ch, int pab, 
169                                     int t, int b, int& h, int& mt, int& mb, int& y); 
170     
171     virtual IntRect getOverflowClipRect(int tx, int ty);
172     virtual IntRect getClipRect(int tx, int ty);
173
174     // the actual height of the contents + borders + padding
175     int m_height;
176
177     int m_y;
178
179     int m_x;
180     int m_width;
181
182     int m_marginTop;
183     int m_marginBottom;
184
185     int m_marginLeft;
186     int m_marginRight;
187
188     /*
189      * the minimum width the element needs, to be able to render
190      * it's content without clipping
191      */
192     int m_minWidth;
193     /* The maximum width the element can fill horizontally
194      * ( = the width of the element with line breaking disabled)
195      */
196     int m_maxWidth;
197
198     // Used by flexible boxes when flexing this element.
199     int m_overrideSize;
200
201     // Cached normal flow values for absolute positioned elements with static left/top values.
202     int m_staticX;
203     int m_staticY;
204     
205     // A pointer to our layer if we have one.  Currently only positioned elements
206     // and floaters have layers.
207     RenderLayer* m_layer;
208     
209     // For inline replaced elements, the inline box that owns us.
210     InlineBox* m_inlineBoxWrapper;
211 };
212
213
214 }; //namespace
215
216 #endif