OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All r
ights reserved. |
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 3148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3159 | 3159 |
3160 // Fix for https://bugs.webkit.org/show_bug.cgi?id=54995. | 3160 // Fix for https://bugs.webkit.org/show_bug.cgi?id=54995. |
3161 if (logicalBottom < 0 || logicalBottom < logicalTop || logicalTo
p == numeric_limits<int>::max()) | 3161 if (logicalBottom < 0 || logicalBottom < logicalTop || logicalTo
p == numeric_limits<int>::max()) |
3162 logicalBottom = numeric_limits<int>::max(); | 3162 logicalBottom = numeric_limits<int>::max(); |
3163 else { | 3163 else { |
3164 // Special-case zero- and less-than-zero-height floats: thos
e don't touch | 3164 // Special-case zero- and less-than-zero-height floats: thos
e don't touch |
3165 // the line that they're on, but it still needs to be dirtie
d. This is | 3165 // the line that they're on, but it still needs to be dirtie
d. This is |
3166 // accomplished by pretending they have a height of 1. | 3166 // accomplished by pretending they have a height of 1. |
3167 logicalBottom = max(logicalBottom, logicalTop + 1); | 3167 logicalBottom = max(logicalBottom, logicalTop + 1); |
3168 } | 3168 } |
| 3169 if (r->m_originatingLine) { |
| 3170 ASSERT(r->m_originatingLine->renderer() == this); |
| 3171 r->m_originatingLine->markDirty(); |
| 3172 #if !ASSERT_DISABLED |
| 3173 r->m_originatingLine = 0; |
| 3174 #endif |
| 3175 } |
3169 markLinesDirtyInBlockRange(0, logicalBottom); | 3176 markLinesDirtyInBlockRange(0, logicalBottom); |
3170 } | 3177 } |
3171 m_floatingObjects->decreaseObjectsCount(r->type()); | 3178 m_floatingObjects->decreaseObjectsCount(r->type()); |
3172 floatingObjectSet.remove(it); | 3179 floatingObjectSet.remove(it); |
| 3180 ASSERT(!r->m_originatingLine); |
3173 delete r; | 3181 delete r; |
3174 } | 3182 } |
3175 } | 3183 } |
3176 } | 3184 } |
3177 | 3185 |
3178 void RenderBlock::removeFloatingObjectsBelow(FloatingObject* lastFloat, int logi
calOffset) | 3186 void RenderBlock::removeFloatingObjectsBelow(FloatingObject* lastFloat, int logi
calOffset) |
3179 { | 3187 { |
3180 if (!m_floatingObjects) | 3188 if (!m_floatingObjects) |
3181 return; | 3189 return; |
3182 | 3190 |
3183 FloatingObjectSet& floatingObjectSet = m_floatingObjects->set(); | 3191 FloatingObjectSet& floatingObjectSet = m_floatingObjects->set(); |
3184 FloatingObject* curr = floatingObjectSet.last(); | 3192 FloatingObject* curr = floatingObjectSet.last(); |
3185 while (curr != lastFloat && (!curr->isPlaced() || logicalTopForFloat(curr) >
= logicalOffset)) { | 3193 while (curr != lastFloat && (!curr->isPlaced() || logicalTopForFloat(curr) >
= logicalOffset)) { |
3186 m_floatingObjects->decreaseObjectsCount(curr->type()); | 3194 m_floatingObjects->decreaseObjectsCount(curr->type()); |
3187 floatingObjectSet.removeLast(); | 3195 floatingObjectSet.removeLast(); |
| 3196 ASSERT(!curr->m_originatingLine); |
3188 delete curr; | 3197 delete curr; |
3189 curr = floatingObjectSet.last(); | 3198 curr = floatingObjectSet.last(); |
3190 } | 3199 } |
3191 } | 3200 } |
3192 | 3201 |
3193 bool RenderBlock::positionNewFloats() | 3202 bool RenderBlock::positionNewFloats() |
3194 { | 3203 { |
3195 if (!m_floatingObjects) | 3204 if (!m_floatingObjects) |
3196 return false; | 3205 return false; |
3197 | 3206 |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3615 int oldLogicalBottom = logicalBottomForFloat(oldFloatingObje
ct); | 3624 int oldLogicalBottom = logicalBottomForFloat(oldFloatingObje
ct); |
3616 if (logicalWidthForFloat(f) != logicalWidthForFloat(oldFloat
ingObject) || logicalLeftForFloat(f) != logicalLeftForFloat(oldFloatingObject))
{ | 3625 if (logicalWidthForFloat(f) != logicalWidthForFloat(oldFloat
ingObject) || logicalLeftForFloat(f) != logicalLeftForFloat(oldFloatingObject))
{ |
3617 changeLogicalTop = 0; | 3626 changeLogicalTop = 0; |
3618 changeLogicalBottom = max(changeLogicalBottom, max(logic
alBottom, oldLogicalBottom)); | 3627 changeLogicalBottom = max(changeLogicalBottom, max(logic
alBottom, oldLogicalBottom)); |
3619 } else if (logicalBottom != oldLogicalBottom) { | 3628 } else if (logicalBottom != oldLogicalBottom) { |
3620 changeLogicalTop = min(changeLogicalTop, min(logicalBott
om, oldLogicalBottom)); | 3629 changeLogicalTop = min(changeLogicalTop, min(logicalBott
om, oldLogicalBottom)); |
3621 changeLogicalBottom = max(changeLogicalBottom, max(logic
alBottom, oldLogicalBottom)); | 3630 changeLogicalBottom = max(changeLogicalBottom, max(logic
alBottom, oldLogicalBottom)); |
3622 } | 3631 } |
3623 | 3632 |
3624 floatMap.remove(f->m_renderer); | 3633 floatMap.remove(f->m_renderer); |
| 3634 if (oldFloatingObject->m_originatingLine) { |
| 3635 ASSERT(oldFloatingObject->m_originatingLine->renderer()
== this); |
| 3636 oldFloatingObject->m_originatingLine->markDirty(); |
| 3637 } |
3625 delete oldFloatingObject; | 3638 delete oldFloatingObject; |
3626 } else { | 3639 } else { |
3627 changeLogicalTop = 0; | 3640 changeLogicalTop = 0; |
3628 changeLogicalBottom = max(changeLogicalBottom, logicalBottom
); | 3641 changeLogicalBottom = max(changeLogicalBottom, logicalBottom
); |
3629 } | 3642 } |
3630 } | 3643 } |
3631 } | 3644 } |
3632 | 3645 |
3633 RendererToFloatInfoMap::iterator end = floatMap.end(); | 3646 RendererToFloatInfoMap::iterator end = floatMap.end(); |
3634 for (RendererToFloatInfoMap::iterator it = floatMap.begin(); it != end;
++it) { | 3647 for (RendererToFloatInfoMap::iterator it = floatMap.begin(); it != end;
++it) { |
(...skipping 2628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6263 | 6276 |
6264 inline void RenderBlock::FloatingObjects::decreaseObjectsCount(FloatingObject::T
ype type) | 6277 inline void RenderBlock::FloatingObjects::decreaseObjectsCount(FloatingObject::T
ype type) |
6265 { | 6278 { |
6266 if (type == FloatingObject::FloatLeft) | 6279 if (type == FloatingObject::FloatLeft) |
6267 m_leftObjectsCount--; | 6280 m_leftObjectsCount--; |
6268 else | 6281 else |
6269 m_rightObjectsCount--; | 6282 m_rightObjectsCount--; |
6270 } | 6283 } |
6271 | 6284 |
6272 } // namespace WebCore | 6285 } // namespace WebCore |
OLD | NEW |