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 * | 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. |
(...skipping 1150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1161 typedef FloatingObjectSet::const_iterator FloatingObjectSetIterator; | 1161 typedef FloatingObjectSet::const_iterator FloatingObjectSetIterator; |
1162 typedef PODInterval<int, FloatingObject*> FloatingObjectInterval; | 1162 typedef PODInterval<int, FloatingObject*> FloatingObjectInterval; |
1163 typedef PODIntervalTree<int, FloatingObject*> FloatingObjectTree; | 1163 typedef PODIntervalTree<int, FloatingObject*> FloatingObjectTree; |
1164 typedef PODFreeListArena<PODRedBlackTree<FloatingObjectInterval>::Node> Inte
rvalArena; | 1164 typedef PODFreeListArena<PODRedBlackTree<FloatingObjectInterval>::Node> Inte
rvalArena; |
1165 | 1165 |
1166 template <FloatingObject::Type FloatTypeValue> | 1166 template <FloatingObject::Type FloatTypeValue> |
1167 class FloatIntervalSearchAdapter { | 1167 class FloatIntervalSearchAdapter { |
1168 public: | 1168 public: |
1169 typedef FloatingObjectInterval IntervalType; | 1169 typedef FloatingObjectInterval IntervalType; |
1170 | 1170 |
1171 FloatIntervalSearchAdapter(const RenderBlock* renderer, int lowValue, in
t highValue, LayoutUnit& offset, LayoutUnit* heightRemaining) | 1171 FloatIntervalSearchAdapter(const RenderBlock* renderer, int lowValue, in
t highValue, LayoutUnit& offset) |
1172 : m_renderer(renderer) | 1172 : m_renderer(renderer) |
1173 , m_lowValue(lowValue) | 1173 , m_lowValue(lowValue) |
1174 , m_highValue(highValue) | 1174 , m_highValue(highValue) |
1175 , m_offset(offset) | 1175 , m_offset(offset) |
1176 , m_heightRemaining(heightRemaining) | |
1177 , m_last(0) | 1176 , m_last(0) |
| 1177 , m_floatForHeight(0) |
1178 { | 1178 { |
1179 } | 1179 } |
1180 | 1180 |
1181 inline int lowValue() const { return m_lowValue; } | 1181 inline int lowValue() const { return m_lowValue; } |
1182 inline int highValue() const { return m_highValue; } | 1182 inline int highValue() const { return m_highValue; } |
1183 void collectIfNeeded(const IntervalType&) const; | 1183 void collectIfNeeded(const IntervalType&); |
1184 | 1184 |
1185 // When computing the offset caused by the floats on a given line, if | 1185 // When computing the offset caused by the floats on a given line, if |
1186 // the outermost float on that line has a shape-outside, the inline | 1186 // the outermost float on that line has a shape-outside, the inline |
1187 // content that butts up against that float must be positioned using | 1187 // content that butts up against that float must be positioned using |
1188 // the contours of the shape, not the margin box of the float. | 1188 // the contours of the shape, not the margin box of the float. |
1189 // We save the last float encountered so that the offset can be | 1189 // We save the last float encountered so that the offset can be |
1190 // computed correctly by the code using this adapter. | 1190 // computed correctly by the code using this adapter. |
1191 const FloatingObject* lastFloat() const { return m_last; } | 1191 const FloatingObject* lastFloat() const { return m_last; } |
1192 | 1192 |
| 1193 LayoutUnit getHeightRemaining() const; |
| 1194 |
1193 private: | 1195 private: |
1194 bool updateOffsetIfNeeded(const FloatingObject*) const; | 1196 bool updateOffsetIfNeeded(const FloatingObject*) const; |
1195 | 1197 |
1196 const RenderBlock* m_renderer; | 1198 const RenderBlock* m_renderer; |
1197 int m_lowValue; | 1199 int m_lowValue; |
1198 int m_highValue; | 1200 int m_highValue; |
1199 LayoutUnit& m_offset; | 1201 LayoutUnit& m_offset; |
1200 LayoutUnit* m_heightRemaining; | 1202 const FloatingObject* m_last; |
1201 // This member variable is mutable because the collectIfNeeded method | 1203 const FloatingObject* m_floatForHeight; |
1202 // is declared as const, even though it doesn't actually respect that | |
1203 // contract. It modifies other member variables via loopholes in the | |
1204 // const behavior. Instead of using loopholes, I decided it was better | |
1205 // to make the fact that this is modified in a const method explicit. | |
1206 mutable const FloatingObject* m_last; | |
1207 }; | 1204 }; |
1208 | 1205 |
1209 void createFloatingObjects(); | 1206 void createFloatingObjects(); |
1210 | 1207 |
1211 public: | 1208 public: |
1212 | 1209 |
1213 class FloatingObjects { | 1210 class FloatingObjects { |
1214 WTF_MAKE_NONCOPYABLE(FloatingObjects); WTF_MAKE_FAST_ALLOCATED; | 1211 WTF_MAKE_NONCOPYABLE(FloatingObjects); WTF_MAKE_FAST_ALLOCATED; |
1215 public: | 1212 public: |
1216 void clear(); | 1213 void clear(); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1342 static String string(const int value); | 1339 static String string(const int value); |
1343 }; | 1340 }; |
1344 template<> struct ValueToString<RenderBlock::FloatingObject*> { | 1341 template<> struct ValueToString<RenderBlock::FloatingObject*> { |
1345 static String string(const RenderBlock::FloatingObject*); | 1342 static String string(const RenderBlock::FloatingObject*); |
1346 }; | 1343 }; |
1347 #endif | 1344 #endif |
1348 | 1345 |
1349 } // namespace WebCore | 1346 } // namespace WebCore |
1350 | 1347 |
1351 #endif // RenderBlock_h | 1348 #endif // RenderBlock_h |
OLD | NEW |