OLD | NEW |
| (Empty) |
1 /* | |
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. | |
5 * | |
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. | |
10 * | |
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. | |
15 * | |
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. | |
20 * | |
21 */ | |
22 | |
23 #ifndef RenderFrameSet_h | |
24 #define RenderFrameSet_h | |
25 | |
26 #include "core/rendering/RenderBox.h" | |
27 | |
28 namespace blink { | |
29 | |
30 class HTMLDimension; | |
31 class HTMLFrameSetElement; | |
32 class MouseEvent; | |
33 | |
34 enum FrameEdge { LeftFrameEdge, RightFrameEdge, TopFrameEdge, BottomFrameEdge }; | |
35 | |
36 struct FrameEdgeInfo { | |
37 FrameEdgeInfo(bool preventResize = false, bool allowBorder = true) | |
38 : m_preventResize(4) | |
39 , m_allowBorder(4) | |
40 { | |
41 m_preventResize.fill(preventResize); | |
42 m_allowBorder.fill(allowBorder); | |
43 } | |
44 | |
45 bool preventResize(FrameEdge edge) const { return m_preventResize[edge]; } | |
46 bool allowBorder(FrameEdge edge) const { return m_allowBorder[edge]; } | |
47 | |
48 void setPreventResize(FrameEdge edge, bool preventResize) { m_preventResize[
edge] = preventResize; } | |
49 void setAllowBorder(FrameEdge edge, bool allowBorder) { m_allowBorder[edge]
= allowBorder; } | |
50 | |
51 private: | |
52 Vector<bool> m_preventResize; | |
53 Vector<bool> m_allowBorder; | |
54 }; | |
55 | |
56 class RenderFrameSet final : public RenderBox { | |
57 public: | |
58 RenderFrameSet(HTMLFrameSetElement*); | |
59 virtual ~RenderFrameSet(); | |
60 | |
61 LayoutObject* firstChild() const { ASSERT(children() == virtualChildren());
return children()->firstChild(); } | |
62 LayoutObject* lastChild() const { ASSERT(children() == virtualChildren()); r
eturn children()->lastChild(); } | |
63 | |
64 // If you have a RenderFrameSet, use firstChild or lastChild instead. | |
65 void slowFirstChild() const = delete; | |
66 void slowLastChild() const = delete; | |
67 | |
68 const LayoutObjectChildList* children() const { return &m_children; } | |
69 LayoutObjectChildList* children() { return &m_children; } | |
70 | |
71 FrameEdgeInfo edgeInfo() const; | |
72 | |
73 bool userResize(MouseEvent*); | |
74 | |
75 bool canResizeRow(const IntPoint&) const; | |
76 bool canResizeColumn(const IntPoint&) const; | |
77 | |
78 void notifyFrameEdgeInfoChanged(); | |
79 HTMLFrameSetElement* frameSet() const; | |
80 | |
81 class GridAxis { | |
82 WTF_MAKE_NONCOPYABLE(GridAxis); | |
83 public: | |
84 GridAxis(); | |
85 void resize(int); | |
86 | |
87 Vector<int> m_sizes; | |
88 Vector<int> m_deltas; | |
89 Vector<bool> m_preventResize; | |
90 Vector<bool> m_allowBorder; | |
91 int m_splitBeingResized; | |
92 int m_splitResizeOffset; | |
93 }; | |
94 | |
95 const GridAxis& rows() { return m_rows; } | |
96 const GridAxis& columns() { return m_cols; } | |
97 | |
98 private: | |
99 static const int noSplit = -1; | |
100 | |
101 virtual LayoutObjectChildList* virtualChildren() override { return children(
); } | |
102 virtual const LayoutObjectChildList* virtualChildren() const override { retu
rn children(); } | |
103 | |
104 virtual const char* renderName() const override { return "RenderFrameSet"; } | |
105 virtual bool isOfType(LayoutObjectType type) const override { return type ==
LayoutObjectFrameSet || RenderBox::isOfType(type); } | |
106 | |
107 virtual void layout() override; | |
108 virtual void paint(const PaintInfo&, const LayoutPoint&) override; | |
109 virtual void computePreferredLogicalWidths() override; | |
110 virtual bool isChildAllowed(LayoutObject*, const LayoutStyle&) const overrid
e; | |
111 virtual CursorDirective getCursor(const LayoutPoint&, Cursor&) const overrid
e; | |
112 | |
113 void setIsResizing(bool); | |
114 | |
115 void layOutAxis(GridAxis&, const Vector<HTMLDimension>&, int availableSpace)
; | |
116 void computeEdgeInfo(); | |
117 void fillFromEdgeInfo(const FrameEdgeInfo& edgeInfo, int r, int c); | |
118 void positionFrames(); | |
119 | |
120 int splitPosition(const GridAxis&, int split) const; | |
121 int hitTestSplit(const GridAxis&, int position) const; | |
122 | |
123 void startResizing(GridAxis&, int position); | |
124 void continueResizing(GridAxis&, int position); | |
125 | |
126 LayoutObjectChildList m_children; | |
127 | |
128 GridAxis m_rows; | |
129 GridAxis m_cols; | |
130 | |
131 bool m_isResizing; | |
132 bool m_isChildResizing; | |
133 }; | |
134 | |
135 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(RenderFrameSet, isFrameSet()); | |
136 | |
137 } // namespace blink | |
138 | |
139 #endif // RenderFrameSet_h | |
OLD | NEW |