2
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3
* (C) 2000 Simon Hausmann <hausmann@kde.org>
4
* Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Library General Public
8
* License as published by the Free Software Foundation; either
9
* version 2 of the License, or (at your option) any later version.
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Library General Public License for more details.
16
* You should have received a copy of the GNU Library General Public License
17
* along with this library; see the file COPYING.LIB. If not, write to
18
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19
* Boston, MA 02110-1301, USA.
23
#ifndef RenderFrameSet_h
24
#define RenderFrameSet_h
26
#include "RenderBox.h"
30
class HTMLFrameSetElement;
34
enum FrameEdge { LeftFrameEdge, RightFrameEdge, TopFrameEdge, BottomFrameEdge };
36
struct FrameEdgeInfo {
37
FrameEdgeInfo(bool preventResize = false, bool allowBorder = true)
41
m_preventResize.fill(preventResize);
42
m_allowBorder.fill(allowBorder);
45
bool preventResize(FrameEdge edge) const { return m_preventResize[edge]; }
46
bool allowBorder(FrameEdge edge) const { return m_allowBorder[edge]; }
48
void setPreventResize(FrameEdge edge, bool preventResize) { m_preventResize[edge] = preventResize; }
49
void setAllowBorder(FrameEdge edge, bool allowBorder) { m_allowBorder[edge] = allowBorder; }
52
Vector<bool> m_preventResize;
53
Vector<bool> m_allowBorder;
56
class RenderFrameSet : public RenderBox {
58
RenderFrameSet(HTMLFrameSetElement*);
59
virtual ~RenderFrameSet();
61
RenderObject* firstChild() const { ASSERT(children() == virtualChildren()); return children()->firstChild(); }
62
RenderObject* lastChild() const { ASSERT(children() == virtualChildren()); return children()->lastChild(); }
64
const RenderObjectChildList* children() const { return &m_children; }
65
RenderObjectChildList* children() { return &m_children; }
67
FrameEdgeInfo edgeInfo() const;
69
bool userResize(MouseEvent*);
71
bool isResizingRow() const;
72
bool isResizingColumn() const;
74
bool canResizeRow(const IntPoint&) const;
75
bool canResizeColumn(const IntPoint&) const;
77
void notifyFrameEdgeInfoChanged();
80
static const int noSplit = -1;
83
WTF_MAKE_NONCOPYABLE(GridAxis);
89
Vector<bool> m_preventResize;
90
Vector<bool> m_allowBorder;
91
int m_splitBeingResized;
92
int m_splitResizeOffset;
95
virtual RenderObjectChildList* virtualChildren() { return children(); }
96
virtual const RenderObjectChildList* virtualChildren() const { return children(); }
98
virtual const char* renderName() const { return "RenderFrameSet"; }
99
virtual bool isFrameSet() const { return true; }
101
virtual void layout();
102
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) OVERRIDE;
103
virtual void paint(PaintInfo&, const LayoutPoint&);
104
virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
105
virtual CursorDirective getCursor(const LayoutPoint&, Cursor&) const;
107
inline HTMLFrameSetElement* frameSet() const;
109
bool flattenFrameSet() const;
111
void setIsResizing(bool);
113
void layOutAxis(GridAxis&, const Length*, int availableSpace);
114
void computeEdgeInfo();
115
void fillFromEdgeInfo(const FrameEdgeInfo& edgeInfo, int r, int c);
116
void positionFrames();
117
void positionFramesWithFlattening();
119
int splitPosition(const GridAxis&, int split) const;
120
int hitTestSplit(const GridAxis&, int position) const;
122
void startResizing(GridAxis&, int position);
123
void continueResizing(GridAxis&, int position);
125
void paintRowBorder(const PaintInfo&, const IntRect&);
126
void paintColumnBorder(const PaintInfo&, const IntRect&);
128
RenderObjectChildList m_children;
134
bool m_isChildResizing;
138
inline RenderFrameSet* toRenderFrameSet(RenderObject* object)
140
ASSERT(!object || object->isFrameSet());
141
return static_cast<RenderFrameSet*>(object);
144
// This will catch anyone doing an unnecessary cast.
145
void toRenderFrameSet(const RenderFrameSet*);
147
} // namespace WebCore
149
#endif // RenderFrameSet_h