OLD | NEW |
1 /* | 1 /* |
2 * (C) 1999 Lars Knoll (knoll@kde.org) | 2 * (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2000 Gunnstein Lye (gunnstein@netcom.no) | 3 * (C) 2000 Gunnstein Lye (gunnstein@netcom.no) |
4 * (C) 2000 Frederik Holljen (frederik.holljen@hig.no) | 4 * (C) 2000 Frederik Holljen (frederik.holljen@hig.no) |
5 * (C) 2001 Peter Kelly (pmk@post.com) | 5 * (C) 2001 Peter Kelly (pmk@post.com) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
7 * Copyright (C) 2011 Motorola Mobility. All rights reserved. | 7 * Copyright (C) 2011 Motorola Mobility. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 1282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1293 IntRect result; | 1293 IntRect result; |
1294 Vector<IntRect> rects; | 1294 Vector<IntRect> rects; |
1295 textRects(rects); | 1295 textRects(rects); |
1296 for (const IntRect& rect : rects) | 1296 for (const IntRect& rect : rects) |
1297 result.unite(rect); | 1297 result.unite(rect); |
1298 return result; | 1298 return result; |
1299 } | 1299 } |
1300 | 1300 |
1301 void Range::textRects(Vector<IntRect>& rects, bool useSelectionHeight, RangeInFi
xedPosition* inFixed) const | 1301 void Range::textRects(Vector<IntRect>& rects, bool useSelectionHeight, RangeInFi
xedPosition* inFixed) const |
1302 { | 1302 { |
1303 Node* startContainer = m_start.container(); | |
1304 ASSERT(startContainer); | |
1305 Node* endContainer = m_end.container(); | |
1306 ASSERT(endContainer); | |
1307 | |
1308 bool allFixed = true; | 1303 bool allFixed = true; |
1309 bool someFixed = false; | 1304 bool someFixed = false; |
1310 | 1305 collectTextBoundsInRange( |
1311 Node* stopNode = pastLastNode(); | 1306 m_start.container(), m_start.offset(), m_end.container(), m_end.offset()
, |
1312 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next(
*node)) { | 1307 firstNode(), pastLastNode(), &NodeTraversal::next, |
1313 LayoutObject* r = node->layoutObject(); | 1308 rects, useSelectionHeight, &allFixed, &someFixed); |
1314 if (!r || !r->isText()) | |
1315 continue; | |
1316 LayoutText* layoutText = toLayoutText(r); | |
1317 int startOffset = node == startContainer ? m_start.offset() : 0; | |
1318 int endOffset = node == endContainer ? m_end.offset() : std::numeric_lim
its<int>::max(); | |
1319 bool isFixed = false; | |
1320 layoutText->absoluteRectsForRange(rects, startOffset, endOffset, useSele
ctionHeight, &isFixed); | |
1321 allFixed &= isFixed; | |
1322 someFixed |= isFixed; | |
1323 } | |
1324 | 1309 |
1325 if (inFixed) | 1310 if (inFixed) |
1326 *inFixed = allFixed ? EntirelyFixedPosition : (someFixed ? PartiallyFixe
dPosition : NotFixedPosition); | 1311 *inFixed = allFixed ? EntirelyFixedPosition : (someFixed ? PartiallyFixe
dPosition : NotFixedPosition); |
1327 } | 1312 } |
1328 | 1313 |
1329 void Range::textQuads(Vector<FloatQuad>& quads, bool useSelectionHeight, RangeIn
FixedPosition* inFixed) const | 1314 void Range::textQuads(Vector<FloatQuad>& quads, bool useSelectionHeight, RangeIn
FixedPosition* inFixed) const |
1330 { | 1315 { |
1331 Node* startContainer = m_start.container(); | |
1332 ASSERT(startContainer); | |
1333 Node* endContainer = m_end.container(); | |
1334 ASSERT(endContainer); | |
1335 | |
1336 bool allFixed = true; | 1316 bool allFixed = true; |
1337 bool someFixed = false; | 1317 bool someFixed = false; |
1338 | 1318 collectTextBoundsInRange( |
1339 Node* stopNode = pastLastNode(); | 1319 m_start.container(), m_start.offset(), m_end.container(), m_end.offset()
, |
1340 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next(
*node)) { | 1320 firstNode(), pastLastNode(), &NodeTraversal::next, |
1341 LayoutObject* r = node->layoutObject(); | 1321 quads, useSelectionHeight, &allFixed, &someFixed); |
1342 if (!r || !r->isText()) | |
1343 continue; | |
1344 LayoutText* layoutText = toLayoutText(r); | |
1345 int startOffset = node == startContainer ? m_start.offset() : 0; | |
1346 int endOffset = node == endContainer ? m_end.offset() : std::numeric_lim
its<int>::max(); | |
1347 bool isFixed = false; | |
1348 layoutText->absoluteQuadsForRange(quads, startOffset, endOffset, useSele
ctionHeight, &isFixed); | |
1349 allFixed &= isFixed; | |
1350 someFixed |= isFixed; | |
1351 } | |
1352 | 1322 |
1353 if (inFixed) | 1323 if (inFixed) |
1354 *inFixed = allFixed ? EntirelyFixedPosition : (someFixed ? PartiallyFixe
dPosition : NotFixedPosition); | 1324 *inFixed = allFixed ? EntirelyFixedPosition : (someFixed ? PartiallyFixe
dPosition : NotFixedPosition); |
1355 } | 1325 } |
1356 | 1326 |
1357 #ifndef NDEBUG | 1327 #ifndef NDEBUG |
1358 void Range::formatForDebugger(char* buffer, unsigned length) const | 1328 void Range::formatForDebugger(char* buffer, unsigned length) const |
1359 { | 1329 { |
1360 StringBuilder result; | 1330 StringBuilder result; |
1361 | 1331 |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1651 { | 1621 { |
1652 if (range && range->boundaryPointsValid()) { | 1622 if (range && range->boundaryPointsValid()) { |
1653 range->startContainer()->showTreeAndMark(range->startContainer(), "S", r
ange->endContainer(), "E"); | 1623 range->startContainer()->showTreeAndMark(range->startContainer(), "S", r
ange->endContainer(), "E"); |
1654 fprintf(stderr, "start offset: %d, end offset: %d\n", range->startOffset
(), range->endOffset()); | 1624 fprintf(stderr, "start offset: %d, end offset: %d\n", range->startOffset
(), range->endOffset()); |
1655 } else { | 1625 } else { |
1656 fprintf(stderr, "Cannot show tree if range is null, or if boundary point
s are invalid.\n"); | 1626 fprintf(stderr, "Cannot show tree if range is null, or if boundary point
s are invalid.\n"); |
1657 } | 1627 } |
1658 } | 1628 } |
1659 | 1629 |
1660 #endif | 1630 #endif |
OLD | NEW |