OLD | NEW |
1 /** | 1 /** |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2000 Simon Hausmann <hausmann@kde.org> | 3 * (C) 2000 Simon Hausmann <hausmann@kde.org> |
4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de) | 4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de) |
5 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. | 5 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
11 * | 11 * |
12 * This library is distributed in the hope that it will be useful, | 12 * This library is distributed in the hope that it will be useful, |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 * Library General Public License for more details. | 15 * Library General Public License for more details. |
16 * | 16 * |
17 * You should have received a copy of the GNU Library General Public License | 17 * You should have received a copy of the GNU Library General Public License |
18 * along with this library; see the file COPYING.LIB. If not, write to | 18 * along with this library; see the file COPYING.LIB. If not, write to |
19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
20 * Boston, MA 02110-1301, USA. | 20 * Boston, MA 02110-1301, USA. |
21 * | 21 * |
22 */ | 22 */ |
23 | 23 |
24 #include "config.h" | 24 #include "config.h" |
25 #include "core/rendering/RenderFrameSet.h" | 25 #include "core/layout/LayoutFrameSet.h" |
26 | 26 |
27 #include "core/dom/Document.h" | 27 #include "core/dom/Document.h" |
28 #include "core/events/MouseEvent.h" | 28 #include "core/events/MouseEvent.h" |
29 #include "core/frame/LocalFrame.h" | 29 #include "core/frame/LocalFrame.h" |
30 #include "core/html/HTMLDimension.h" | 30 #include "core/html/HTMLDimension.h" |
31 #include "core/html/HTMLFrameSetElement.h" | 31 #include "core/html/HTMLFrameSetElement.h" |
| 32 #include "core/layout/LayoutFrame.h" |
32 #include "core/layout/PaintInfo.h" | 33 #include "core/layout/PaintInfo.h" |
33 #include "core/page/EventHandler.h" | 34 #include "core/page/EventHandler.h" |
34 #include "core/paint/FrameSetPainter.h" | 35 #include "core/paint/FrameSetPainter.h" |
35 #include "core/rendering/RenderFrame.h" | |
36 #include "core/rendering/RenderView.h" | 36 #include "core/rendering/RenderView.h" |
37 #include "platform/Cursor.h" | 37 #include "platform/Cursor.h" |
38 #include "platform/graphics/GraphicsContext.h" | 38 #include "platform/graphics/GraphicsContext.h" |
39 | 39 |
40 namespace blink { | 40 namespace blink { |
41 | 41 |
42 RenderFrameSet::RenderFrameSet(HTMLFrameSetElement* frameSet) | 42 LayoutFrameSet::LayoutFrameSet(HTMLFrameSetElement* frameSet) |
43 : RenderBox(frameSet) | 43 : RenderBox(frameSet) |
44 , m_isResizing(false) | 44 , m_isResizing(false) |
45 , m_isChildResizing(false) | 45 , m_isChildResizing(false) |
46 { | 46 { |
47 setInline(false); | 47 setInline(false); |
48 } | 48 } |
49 | 49 |
50 RenderFrameSet::~RenderFrameSet() | 50 LayoutFrameSet::~LayoutFrameSet() |
51 { | 51 { |
52 } | 52 } |
53 | 53 |
54 RenderFrameSet::GridAxis::GridAxis() | 54 LayoutFrameSet::GridAxis::GridAxis() |
55 : m_splitBeingResized(noSplit) | 55 : m_splitBeingResized(noSplit) |
56 { | 56 { |
57 } | 57 } |
58 | 58 |
59 HTMLFrameSetElement* RenderFrameSet::frameSet() const | 59 HTMLFrameSetElement* LayoutFrameSet::frameSet() const |
60 { | 60 { |
61 return toHTMLFrameSetElement(node()); | 61 return toHTMLFrameSetElement(node()); |
62 } | 62 } |
63 | 63 |
64 void RenderFrameSet::paint(const PaintInfo& paintInfo, const LayoutPoint& paintO
ffset) | 64 void LayoutFrameSet::paint(const PaintInfo& paintInfo, const LayoutPoint& paintO
ffset) |
65 { | 65 { |
66 FrameSetPainter(*this).paint(paintInfo, paintOffset); | 66 FrameSetPainter(*this).paint(paintInfo, paintOffset); |
67 } | 67 } |
68 | 68 |
69 void RenderFrameSet::computePreferredLogicalWidths() | 69 void LayoutFrameSet::computePreferredLogicalWidths() |
70 { | 70 { |
71 m_minPreferredLogicalWidth = 0; | 71 m_minPreferredLogicalWidth = 0; |
72 m_maxPreferredLogicalWidth = 0; | 72 m_maxPreferredLogicalWidth = 0; |
73 clearPreferredLogicalWidthsDirty(); | 73 clearPreferredLogicalWidthsDirty(); |
74 } | 74 } |
75 | 75 |
76 void RenderFrameSet::GridAxis::resize(int size) | 76 void LayoutFrameSet::GridAxis::resize(int size) |
77 { | 77 { |
78 m_sizes.resize(size); | 78 m_sizes.resize(size); |
79 m_deltas.resize(size); | 79 m_deltas.resize(size); |
80 m_deltas.fill(0); | 80 m_deltas.fill(0); |
81 | 81 |
82 // To track edges for resizability and borders, we need to be (size + 1). Th
is is because a parent frameset | 82 // To track edges for resizability and borders, we need to be (size + 1). Th
is is because a parent frameset |
83 // may ask us for information about our left/top/right/bottom edges in order
to make its own decisions about | 83 // may ask us for information about our left/top/right/bottom edges in order
to make its own decisions about |
84 // what to do. We are capable of tainting that parent frameset's borders, so
we have to cache this info. | 84 // what to do. We are capable of tainting that parent frameset's borders, so
we have to cache this info. |
85 m_preventResize.resize(size + 1); | 85 m_preventResize.resize(size + 1); |
86 m_allowBorder.resize(size + 1); | 86 m_allowBorder.resize(size + 1); |
87 } | 87 } |
88 | 88 |
89 void RenderFrameSet::layOutAxis(GridAxis& axis, const Vector<HTMLDimension>& gri
d, int availableLen) | 89 void LayoutFrameSet::layOutAxis(GridAxis& axis, const Vector<HTMLDimension>& gri
d, int availableLen) |
90 { | 90 { |
91 availableLen = max(availableLen, 0); | 91 availableLen = max(availableLen, 0); |
92 | 92 |
93 int* gridLayout = axis.m_sizes.data(); | 93 int* gridLayout = axis.m_sizes.data(); |
94 | 94 |
95 if (grid.isEmpty()) { | 95 if (grid.isEmpty()) { |
96 gridLayout[0] = availableLen; | 96 gridLayout[0] = availableLen; |
97 return; | 97 return; |
98 } | 98 } |
99 | 99 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 // columns/rows we need to proportionally adjust their size. | 140 // columns/rows we need to proportionally adjust their size. |
141 if (totalFixed > remainingLen) { | 141 if (totalFixed > remainingLen) { |
142 int remainingFixed = remainingLen; | 142 int remainingFixed = remainingLen; |
143 | 143 |
144 for (int i = 0; i < gridLen; ++i) { | 144 for (int i = 0; i < gridLen; ++i) { |
145 if (grid[i].isAbsolute()) { | 145 if (grid[i].isAbsolute()) { |
146 gridLayout[i] = (gridLayout[i] * remainingFixed) / totalFixed; | 146 gridLayout[i] = (gridLayout[i] * remainingFixed) / totalFixed; |
147 remainingLen -= gridLayout[i]; | 147 remainingLen -= gridLayout[i]; |
148 } | 148 } |
149 } | 149 } |
150 } else | 150 } else { |
151 remainingLen -= totalFixed; | 151 remainingLen -= totalFixed; |
| 152 } |
152 | 153 |
153 // Percentage columns/rows are our second priority. Divide the remaining spa
ce proportionally | 154 // Percentage columns/rows are our second priority. Divide the remaining spa
ce proportionally |
154 // over all percentage columns/rows. IMPORTANT: the size of each column/row
is not relative | 155 // over all percentage columns/rows. IMPORTANT: the size of each column/row
is not relative |
155 // to 100%, but to the total percentage. For example, if there are three col
umns, each of 75%, | 156 // to 100%, but to the total percentage. For example, if there are three col
umns, each of 75%, |
156 // and the available space is 300px, each column will become 100px in width. | 157 // and the available space is 300px, each column will become 100px in width. |
157 if (totalPercent > remainingLen) { | 158 if (totalPercent > remainingLen) { |
158 int remainingPercent = remainingLen; | 159 int remainingPercent = remainingLen; |
159 | 160 |
160 for (int i = 0; i < gridLen; ++i) { | 161 for (int i = 0; i < gridLen; ++i) { |
161 if (grid[i].isPercentage()) { | 162 if (grid[i].isPercentage()) { |
162 gridLayout[i] = (gridLayout[i] * remainingPercent) / totalPercen
t; | 163 gridLayout[i] = (gridLayout[i] * remainingPercent) / totalPercen
t; |
163 remainingLen -= gridLayout[i]; | 164 remainingLen -= gridLayout[i]; |
164 } | 165 } |
165 } | 166 } |
166 } else | 167 } else { |
167 remainingLen -= totalPercent; | 168 remainingLen -= totalPercent; |
| 169 } |
168 | 170 |
169 // Relative columns/rows are our last priority. Divide the remaining space p
roportionally | 171 // Relative columns/rows are our last priority. Divide the remaining space p
roportionally |
170 // over all relative columns/rows. IMPORTANT: the relative value of 0* is tr
eated as 1*. | 172 // over all relative columns/rows. IMPORTANT: the relative value of 0* is tr
eated as 1*. |
171 if (countRelative) { | 173 if (countRelative) { |
172 int lastRelative = 0; | 174 int lastRelative = 0; |
173 int remainingRelative = remainingLen; | 175 int remainingRelative = remainingLen; |
174 | 176 |
175 for (int i = 0; i < gridLen; ++i) { | 177 for (int i = 0; i < gridLen; ++i) { |
176 if (grid[i].isRelative()) { | 178 if (grid[i].isRelative()) { |
177 gridLayout[i] = (max(grid[i].value(), 1.) * remainingRelative) /
totalRelative; | 179 gridLayout[i] = (max(grid[i].value(), 1.) * remainingRelative) /
totalRelative; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 gridLayout[i] += gridDelta[i]; | 272 gridLayout[i] += gridDelta[i]; |
271 } | 273 } |
272 // if the deltas broke something, undo them | 274 // if the deltas broke something, undo them |
273 if (!worked) { | 275 if (!worked) { |
274 for (int i = 0; i < gridLen; ++i) | 276 for (int i = 0; i < gridLen; ++i) |
275 gridLayout[i] -= gridDelta[i]; | 277 gridLayout[i] -= gridDelta[i]; |
276 axis.m_deltas.fill(0); | 278 axis.m_deltas.fill(0); |
277 } | 279 } |
278 } | 280 } |
279 | 281 |
280 void RenderFrameSet::notifyFrameEdgeInfoChanged() | 282 void LayoutFrameSet::notifyFrameEdgeInfoChanged() |
281 { | 283 { |
282 if (needsLayout()) | 284 if (needsLayout()) |
283 return; | 285 return; |
284 // FIXME: We should only recompute the edge info with respect to the frame t
hat changed | 286 // FIXME: We should only recompute the edge info with respect to the frame t
hat changed |
285 // and its adjacent frame(s) instead of recomputing the edge info for the en
tire frameset. | 287 // and its adjacent frame(s) instead of recomputing the edge info for the en
tire frameset. |
286 computeEdgeInfo(); | 288 computeEdgeInfo(); |
287 } | 289 } |
288 | 290 |
289 void RenderFrameSet::fillFromEdgeInfo(const FrameEdgeInfo& edgeInfo, int r, int
c) | 291 void LayoutFrameSet::fillFromEdgeInfo(const FrameEdgeInfo& edgeInfo, int r, int
c) |
290 { | 292 { |
291 if (edgeInfo.allowBorder(LeftFrameEdge)) | 293 if (edgeInfo.allowBorder(LeftFrameEdge)) |
292 m_cols.m_allowBorder[c] = true; | 294 m_cols.m_allowBorder[c] = true; |
293 if (edgeInfo.allowBorder(RightFrameEdge)) | 295 if (edgeInfo.allowBorder(RightFrameEdge)) |
294 m_cols.m_allowBorder[c + 1] = true; | 296 m_cols.m_allowBorder[c + 1] = true; |
295 if (edgeInfo.preventResize(LeftFrameEdge)) | 297 if (edgeInfo.preventResize(LeftFrameEdge)) |
296 m_cols.m_preventResize[c] = true; | 298 m_cols.m_preventResize[c] = true; |
297 if (edgeInfo.preventResize(RightFrameEdge)) | 299 if (edgeInfo.preventResize(RightFrameEdge)) |
298 m_cols.m_preventResize[c + 1] = true; | 300 m_cols.m_preventResize[c + 1] = true; |
299 | 301 |
300 if (edgeInfo.allowBorder(TopFrameEdge)) | 302 if (edgeInfo.allowBorder(TopFrameEdge)) |
301 m_rows.m_allowBorder[r] = true; | 303 m_rows.m_allowBorder[r] = true; |
302 if (edgeInfo.allowBorder(BottomFrameEdge)) | 304 if (edgeInfo.allowBorder(BottomFrameEdge)) |
303 m_rows.m_allowBorder[r + 1] = true; | 305 m_rows.m_allowBorder[r + 1] = true; |
304 if (edgeInfo.preventResize(TopFrameEdge)) | 306 if (edgeInfo.preventResize(TopFrameEdge)) |
305 m_rows.m_preventResize[r] = true; | 307 m_rows.m_preventResize[r] = true; |
306 if (edgeInfo.preventResize(BottomFrameEdge)) | 308 if (edgeInfo.preventResize(BottomFrameEdge)) |
307 m_rows.m_preventResize[r + 1] = true; | 309 m_rows.m_preventResize[r + 1] = true; |
308 } | 310 } |
309 | 311 |
310 void RenderFrameSet::computeEdgeInfo() | 312 void LayoutFrameSet::computeEdgeInfo() |
311 { | 313 { |
312 m_rows.m_preventResize.fill(frameSet()->noResize()); | 314 m_rows.m_preventResize.fill(frameSet()->noResize()); |
313 m_rows.m_allowBorder.fill(false); | 315 m_rows.m_allowBorder.fill(false); |
314 m_cols.m_preventResize.fill(frameSet()->noResize()); | 316 m_cols.m_preventResize.fill(frameSet()->noResize()); |
315 m_cols.m_allowBorder.fill(false); | 317 m_cols.m_allowBorder.fill(false); |
316 | 318 |
317 LayoutObject* child = firstChild(); | 319 LayoutObject* child = firstChild(); |
318 if (!child) | 320 if (!child) |
319 return; | 321 return; |
320 | 322 |
321 size_t rows = m_rows.m_sizes.size(); | 323 size_t rows = m_rows.m_sizes.size(); |
322 size_t cols = m_cols.m_sizes.size(); | 324 size_t cols = m_cols.m_sizes.size(); |
323 for (size_t r = 0; r < rows; ++r) { | 325 for (size_t r = 0; r < rows; ++r) { |
324 for (size_t c = 0; c < cols; ++c) { | 326 for (size_t c = 0; c < cols; ++c) { |
325 FrameEdgeInfo edgeInfo; | 327 FrameEdgeInfo edgeInfo; |
326 if (child->isFrameSet()) | 328 if (child->isFrameSet()) |
327 edgeInfo = toRenderFrameSet(child)->edgeInfo(); | 329 edgeInfo = toLayoutFrameSet(child)->edgeInfo(); |
328 else | 330 else |
329 edgeInfo = toRenderFrame(child)->edgeInfo(); | 331 edgeInfo = toLayoutFrame(child)->edgeInfo(); |
330 fillFromEdgeInfo(edgeInfo, r, c); | 332 fillFromEdgeInfo(edgeInfo, r, c); |
331 child = child->nextSibling(); | 333 child = child->nextSibling(); |
332 if (!child) | 334 if (!child) |
333 return; | 335 return; |
334 } | 336 } |
335 } | 337 } |
336 } | 338 } |
337 | 339 |
338 FrameEdgeInfo RenderFrameSet::edgeInfo() const | 340 FrameEdgeInfo LayoutFrameSet::edgeInfo() const |
339 { | 341 { |
340 FrameEdgeInfo result(frameSet()->noResize(), true); | 342 FrameEdgeInfo result(frameSet()->noResize(), true); |
341 | 343 |
342 int rows = frameSet()->totalRows(); | 344 int rows = frameSet()->totalRows(); |
343 int cols = frameSet()->totalCols(); | 345 int cols = frameSet()->totalCols(); |
344 if (rows && cols) { | 346 if (rows && cols) { |
345 result.setPreventResize(LeftFrameEdge, m_cols.m_preventResize[0]); | 347 result.setPreventResize(LeftFrameEdge, m_cols.m_preventResize[0]); |
346 result.setAllowBorder(LeftFrameEdge, m_cols.m_allowBorder[0]); | 348 result.setAllowBorder(LeftFrameEdge, m_cols.m_allowBorder[0]); |
347 result.setPreventResize(RightFrameEdge, m_cols.m_preventResize[cols]); | 349 result.setPreventResize(RightFrameEdge, m_cols.m_preventResize[cols]); |
348 result.setAllowBorder(RightFrameEdge, m_cols.m_allowBorder[cols]); | 350 result.setAllowBorder(RightFrameEdge, m_cols.m_allowBorder[cols]); |
349 result.setPreventResize(TopFrameEdge, m_rows.m_preventResize[0]); | 351 result.setPreventResize(TopFrameEdge, m_rows.m_preventResize[0]); |
350 result.setAllowBorder(TopFrameEdge, m_rows.m_allowBorder[0]); | 352 result.setAllowBorder(TopFrameEdge, m_rows.m_allowBorder[0]); |
351 result.setPreventResize(BottomFrameEdge, m_rows.m_preventResize[rows]); | 353 result.setPreventResize(BottomFrameEdge, m_rows.m_preventResize[rows]); |
352 result.setAllowBorder(BottomFrameEdge, m_rows.m_allowBorder[rows]); | 354 result.setAllowBorder(BottomFrameEdge, m_rows.m_allowBorder[rows]); |
353 } | 355 } |
354 | 356 |
355 return result; | 357 return result; |
356 } | 358 } |
357 | 359 |
358 void RenderFrameSet::layout() | 360 void LayoutFrameSet::layout() |
359 { | 361 { |
360 ASSERT(needsLayout()); | 362 ASSERT(needsLayout()); |
361 | 363 |
362 if (!parent()->isFrameSet() && !document().printing()) { | 364 if (!parent()->isFrameSet() && !document().printing()) { |
363 setWidth(view()->viewWidth()); | 365 setWidth(view()->viewWidth()); |
364 setHeight(view()->viewHeight()); | 366 setHeight(view()->viewHeight()); |
365 } | 367 } |
366 | 368 |
367 unsigned cols = frameSet()->totalCols(); | 369 unsigned cols = frameSet()->totalCols(); |
368 unsigned rows = frameSet()->totalRows(); | 370 unsigned rows = frameSet()->totalRows(); |
(...skipping 21 matching lines...) Expand all Loading... |
390 static void clearNeedsLayoutOnHiddenFrames(RenderBox* frame) | 392 static void clearNeedsLayoutOnHiddenFrames(RenderBox* frame) |
391 { | 393 { |
392 for (; frame; frame = frame->nextSiblingBox()) { | 394 for (; frame; frame = frame->nextSiblingBox()) { |
393 frame->setWidth(0); | 395 frame->setWidth(0); |
394 frame->setHeight(0); | 396 frame->setHeight(0); |
395 frame->clearNeedsLayout(); | 397 frame->clearNeedsLayout(); |
396 clearNeedsLayoutOnHiddenFrames(frame->firstChildBox()); | 398 clearNeedsLayoutOnHiddenFrames(frame->firstChildBox()); |
397 } | 399 } |
398 } | 400 } |
399 | 401 |
400 void RenderFrameSet::positionFrames() | 402 void LayoutFrameSet::positionFrames() |
401 { | 403 { |
402 RenderBox* child = firstChildBox(); | 404 RenderBox* child = firstChildBox(); |
403 if (!child) | 405 if (!child) |
404 return; | 406 return; |
405 | 407 |
406 int rows = frameSet()->totalRows(); | 408 int rows = frameSet()->totalRows(); |
407 int cols = frameSet()->totalCols(); | 409 int cols = frameSet()->totalCols(); |
408 | 410 |
409 int borderThickness = frameSet()->border(); | 411 int borderThickness = frameSet()->border(); |
410 LayoutSize size; | 412 LayoutSize size; |
(...skipping 18 matching lines...) Expand all Loading... |
429 if (!child) | 431 if (!child) |
430 return; | 432 return; |
431 } | 433 } |
432 position.setY(position.y() + size.height() + borderThickness); | 434 position.setY(position.y() + size.height() + borderThickness); |
433 } | 435 } |
434 | 436 |
435 // All the remaining frames are hidden to avoid ugly spurious unflowed frame
s. | 437 // All the remaining frames are hidden to avoid ugly spurious unflowed frame
s. |
436 clearNeedsLayoutOnHiddenFrames(child); | 438 clearNeedsLayoutOnHiddenFrames(child); |
437 } | 439 } |
438 | 440 |
439 void RenderFrameSet::startResizing(GridAxis& axis, int position) | 441 void LayoutFrameSet::startResizing(GridAxis& axis, int position) |
440 { | 442 { |
441 int split = hitTestSplit(axis, position); | 443 int split = hitTestSplit(axis, position); |
442 if (split == noSplit || axis.m_preventResize[split]) { | 444 if (split == noSplit || axis.m_preventResize[split]) { |
443 axis.m_splitBeingResized = noSplit; | 445 axis.m_splitBeingResized = noSplit; |
444 return; | 446 return; |
445 } | 447 } |
446 axis.m_splitBeingResized = split; | 448 axis.m_splitBeingResized = split; |
447 axis.m_splitResizeOffset = position - splitPosition(axis, split); | 449 axis.m_splitResizeOffset = position - splitPosition(axis, split); |
448 } | 450 } |
449 | 451 |
450 void RenderFrameSet::continueResizing(GridAxis& axis, int position) | 452 void LayoutFrameSet::continueResizing(GridAxis& axis, int position) |
451 { | 453 { |
452 if (needsLayout()) | 454 if (needsLayout()) |
453 return; | 455 return; |
454 if (axis.m_splitBeingResized == noSplit) | 456 if (axis.m_splitBeingResized == noSplit) |
455 return; | 457 return; |
456 int currentSplitPosition = splitPosition(axis, axis.m_splitBeingResized); | 458 int currentSplitPosition = splitPosition(axis, axis.m_splitBeingResized); |
457 int delta = (position - currentSplitPosition) - axis.m_splitResizeOffset; | 459 int delta = (position - currentSplitPosition) - axis.m_splitResizeOffset; |
458 if (!delta) | 460 if (!delta) |
459 return; | 461 return; |
460 axis.m_deltas[axis.m_splitBeingResized - 1] += delta; | 462 axis.m_deltas[axis.m_splitBeingResized - 1] += delta; |
461 axis.m_deltas[axis.m_splitBeingResized] -= delta; | 463 axis.m_deltas[axis.m_splitBeingResized] -= delta; |
462 setNeedsLayoutAndFullPaintInvalidation(); | 464 setNeedsLayoutAndFullPaintInvalidation(); |
463 } | 465 } |
464 | 466 |
465 bool RenderFrameSet::userResize(MouseEvent* evt) | 467 bool LayoutFrameSet::userResize(MouseEvent* evt) |
466 { | 468 { |
467 if (!m_isResizing) { | 469 if (!m_isResizing) { |
468 if (needsLayout()) | 470 if (needsLayout()) |
469 return false; | 471 return false; |
470 if (evt->type() == EventTypeNames::mousedown && evt->button() == LeftBut
ton) { | 472 if (evt->type() == EventTypeNames::mousedown && evt->button() == LeftBut
ton) { |
471 FloatPoint localPos = absoluteToLocal(FloatPoint(evt->absoluteLocati
on()), UseTransforms); | 473 FloatPoint localPos = absoluteToLocal(FloatPoint(evt->absoluteLocati
on()), UseTransforms); |
472 startResizing(m_cols, localPos.x()); | 474 startResizing(m_cols, localPos.x()); |
473 startResizing(m_rows, localPos.y()); | 475 startResizing(m_rows, localPos.y()); |
474 if (m_cols.m_splitBeingResized != noSplit || m_rows.m_splitBeingResi
zed != noSplit) { | 476 if (m_cols.m_splitBeingResized != noSplit || m_rows.m_splitBeingResi
zed != noSplit) { |
475 setIsResizing(true); | 477 setIsResizing(true); |
476 return true; | 478 return true; |
477 } | 479 } |
478 } | 480 } |
479 } else { | 481 } else { |
480 if (evt->type() == EventTypeNames::mousemove || (evt->type() == EventTyp
eNames::mouseup && evt->button() == LeftButton)) { | 482 if (evt->type() == EventTypeNames::mousemove || (evt->type() == EventTyp
eNames::mouseup && evt->button() == LeftButton)) { |
481 FloatPoint localPos = absoluteToLocal(FloatPoint(evt->absoluteLocati
on()), UseTransforms); | 483 FloatPoint localPos = absoluteToLocal(FloatPoint(evt->absoluteLocati
on()), UseTransforms); |
482 continueResizing(m_cols, localPos.x()); | 484 continueResizing(m_cols, localPos.x()); |
483 continueResizing(m_rows, localPos.y()); | 485 continueResizing(m_rows, localPos.y()); |
484 if (evt->type() == EventTypeNames::mouseup && evt->button() == LeftB
utton) { | 486 if (evt->type() == EventTypeNames::mouseup && evt->button() == LeftB
utton) { |
485 setIsResizing(false); | 487 setIsResizing(false); |
486 return true; | 488 return true; |
487 } | 489 } |
488 } | 490 } |
489 } | 491 } |
490 | 492 |
491 return false; | 493 return false; |
492 } | 494 } |
493 | 495 |
494 void RenderFrameSet::setIsResizing(bool isResizing) | 496 void LayoutFrameSet::setIsResizing(bool isResizing) |
495 { | 497 { |
496 m_isResizing = isResizing; | 498 m_isResizing = isResizing; |
497 for (LayoutObject* ancestor = parent(); ancestor; ancestor = ancestor->paren
t()) { | 499 for (LayoutObject* ancestor = parent(); ancestor; ancestor = ancestor->paren
t()) { |
498 if (ancestor->isFrameSet()) | 500 if (ancestor->isFrameSet()) |
499 toRenderFrameSet(ancestor)->m_isChildResizing = isResizing; | 501 toLayoutFrameSet(ancestor)->m_isChildResizing = isResizing; |
500 } | 502 } |
501 if (LocalFrame* frame = this->frame()) | 503 if (LocalFrame* frame = this->frame()) |
502 frame->eventHandler().setResizingFrameSet(isResizing ? frameSet() : 0); | 504 frame->eventHandler().setResizingFrameSet(isResizing ? frameSet() : 0); |
503 } | 505 } |
504 | 506 |
505 bool RenderFrameSet::canResizeRow(const IntPoint& p) const | 507 bool LayoutFrameSet::canResizeRow(const IntPoint& p) const |
506 { | 508 { |
507 int r = hitTestSplit(m_rows, p.y()); | 509 int r = hitTestSplit(m_rows, p.y()); |
508 return r != noSplit && !m_rows.m_preventResize[r]; | 510 return r != noSplit && !m_rows.m_preventResize[r]; |
509 } | 511 } |
510 | 512 |
511 bool RenderFrameSet::canResizeColumn(const IntPoint& p) const | 513 bool LayoutFrameSet::canResizeColumn(const IntPoint& p) const |
512 { | 514 { |
513 int c = hitTestSplit(m_cols, p.x()); | 515 int c = hitTestSplit(m_cols, p.x()); |
514 return c != noSplit && !m_cols.m_preventResize[c]; | 516 return c != noSplit && !m_cols.m_preventResize[c]; |
515 } | 517 } |
516 | 518 |
517 int RenderFrameSet::splitPosition(const GridAxis& axis, int split) const | 519 int LayoutFrameSet::splitPosition(const GridAxis& axis, int split) const |
518 { | 520 { |
519 if (needsLayout()) | 521 if (needsLayout()) |
520 return 0; | 522 return 0; |
521 | 523 |
522 int borderThickness = frameSet()->border(); | 524 int borderThickness = frameSet()->border(); |
523 | 525 |
524 int size = axis.m_sizes.size(); | 526 int size = axis.m_sizes.size(); |
525 if (!size) | 527 if (!size) |
526 return 0; | 528 return 0; |
527 | 529 |
528 int position = 0; | 530 int position = 0; |
529 for (int i = 0; i < split && i < size; ++i) | 531 for (int i = 0; i < split && i < size; ++i) |
530 position += axis.m_sizes[i] + borderThickness; | 532 position += axis.m_sizes[i] + borderThickness; |
531 return position - borderThickness; | 533 return position - borderThickness; |
532 } | 534 } |
533 | 535 |
534 int RenderFrameSet::hitTestSplit(const GridAxis& axis, int position) const | 536 int LayoutFrameSet::hitTestSplit(const GridAxis& axis, int position) const |
535 { | 537 { |
536 if (needsLayout()) | 538 if (needsLayout()) |
537 return noSplit; | 539 return noSplit; |
538 | 540 |
539 int borderThickness = frameSet()->border(); | 541 int borderThickness = frameSet()->border(); |
540 if (borderThickness <= 0) | 542 if (borderThickness <= 0) |
541 return noSplit; | 543 return noSplit; |
542 | 544 |
543 size_t size = axis.m_sizes.size(); | 545 size_t size = axis.m_sizes.size(); |
544 if (!size) | 546 if (!size) |
545 return noSplit; | 547 return noSplit; |
546 | 548 |
547 int splitPosition = axis.m_sizes[0]; | 549 int splitPosition = axis.m_sizes[0]; |
548 for (size_t i = 1; i < size; ++i) { | 550 for (size_t i = 1; i < size; ++i) { |
549 if (position >= splitPosition && position < splitPosition + borderThickn
ess) | 551 if (position >= splitPosition && position < splitPosition + borderThickn
ess) |
550 return i; | 552 return i; |
551 splitPosition += borderThickness + axis.m_sizes[i]; | 553 splitPosition += borderThickness + axis.m_sizes[i]; |
552 } | 554 } |
553 return noSplit; | 555 return noSplit; |
554 } | 556 } |
555 | 557 |
556 bool RenderFrameSet::isChildAllowed(LayoutObject* child, const LayoutStyle&) con
st | 558 bool LayoutFrameSet::isChildAllowed(LayoutObject* child, const LayoutStyle&) con
st |
557 { | 559 { |
558 return child->isFrame() || child->isFrameSet(); | 560 return child->isFrame() || child->isFrameSet(); |
559 } | 561 } |
560 | 562 |
561 CursorDirective RenderFrameSet::getCursor(const LayoutPoint& point, Cursor& curs
or) const | 563 CursorDirective LayoutFrameSet::getCursor(const LayoutPoint& point, Cursor& curs
or) const |
562 { | 564 { |
563 IntPoint roundedPoint = roundedIntPoint(point); | 565 IntPoint roundedPoint = roundedIntPoint(point); |
564 if (canResizeRow(roundedPoint)) { | 566 if (canResizeRow(roundedPoint)) { |
565 cursor = rowResizeCursor(); | 567 cursor = rowResizeCursor(); |
566 return SetCursor; | 568 return SetCursor; |
567 } | 569 } |
568 if (canResizeColumn(roundedPoint)) { | 570 if (canResizeColumn(roundedPoint)) { |
569 cursor = columnResizeCursor(); | 571 cursor = columnResizeCursor(); |
570 return SetCursor; | 572 return SetCursor; |
571 } | 573 } |
572 return RenderBox::getCursor(point, cursor); | 574 return RenderBox::getCursor(point, cursor); |
573 } | 575 } |
574 | 576 |
575 } // namespace blink | 577 } // namespace blink |
OLD | NEW |