Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(956)

Side by Side Diff: third_party/WebKit/Source/web/FindInPageCoordinates.cpp

Issue 2389633002: reflow comments in web/ (Closed)
Patch Set: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 #include "platform/geometry/FloatPoint.h" 43 #include "platform/geometry/FloatPoint.h"
44 #include "platform/geometry/FloatQuad.h" 44 #include "platform/geometry/FloatQuad.h"
45 #include "platform/geometry/IntPoint.h" 45 #include "platform/geometry/IntPoint.h"
46 46
47 namespace blink { 47 namespace blink {
48 48
49 static const LayoutBlock* enclosingScrollableAncestor( 49 static const LayoutBlock* enclosingScrollableAncestor(
50 const LayoutObject* layoutObject) { 50 const LayoutObject* layoutObject) {
51 DCHECK(!layoutObject->isLayoutView()); 51 DCHECK(!layoutObject->isLayoutView());
52 52
53 // Trace up the containingBlocks until we reach either the layoutObject view o r a scrollable object. 53 // Trace up the containingBlocks until we reach either the layoutObject view
54 // or a scrollable object.
54 const LayoutBlock* container = layoutObject->containingBlock(); 55 const LayoutBlock* container = layoutObject->containingBlock();
55 while (!container->hasOverflowClip() && !container->isLayoutView()) 56 while (!container->hasOverflowClip() && !container->isLayoutView())
56 container = container->containingBlock(); 57 container = container->containingBlock();
57 return container; 58 return container;
58 } 59 }
59 60
60 static FloatRect toNormalizedRect(const FloatRect& absoluteRect, 61 static FloatRect toNormalizedRect(const FloatRect& absoluteRect,
61 const LayoutObject* layoutObject, 62 const LayoutObject* layoutObject,
62 const LayoutBlock* container) { 63 const LayoutBlock* container) {
63 DCHECK(layoutObject); 64 DCHECK(layoutObject);
64 65
65 DCHECK(container || layoutObject->isLayoutView()); 66 DCHECK(container || layoutObject->isLayoutView());
66 if (!container) 67 if (!container)
67 return FloatRect(); 68 return FloatRect();
68 69
69 // We want to normalize by the max layout overflow size instead of only the vi sible bounding box. 70 // We want to normalize by the max layout overflow size instead of only the
70 // Quads and their enclosing bounding boxes need to be used in order to keep r esults transform-friendly. 71 // visible bounding box. Quads and their enclosing bounding boxes need to be
72 // used in order to keep results transform-friendly.
71 FloatPoint scrolledOrigin; 73 FloatPoint scrolledOrigin;
72 74
73 // For overflow:scroll we need to get where the actual origin is independently of the scroll. 75 // For overflow:scroll we need to get where the actual origin is independently
76 // of the scroll.
74 if (container->hasOverflowClip()) 77 if (container->hasOverflowClip())
75 scrolledOrigin = -IntPoint(container->scrolledContentOffset()); 78 scrolledOrigin = -IntPoint(container->scrolledContentOffset());
76 79
77 FloatRect overflowRect(scrolledOrigin, 80 FloatRect overflowRect(scrolledOrigin,
78 FloatSize(container->maxLayoutOverflow())); 81 FloatSize(container->maxLayoutOverflow()));
79 FloatRect containerRect = 82 FloatRect containerRect =
80 container->localToAbsoluteQuad(FloatQuad(overflowRect)) 83 container->localToAbsoluteQuad(FloatQuad(overflowRect))
81 .enclosingBoundingBox(); 84 .enclosingBoundingBox();
82 85
83 if (containerRect.isEmpty()) 86 if (containerRect.isEmpty())
84 return FloatRect(); 87 return FloatRect();
85 88
86 // Make the coordinates relative to the container enclosing bounding box. 89 // Make the coordinates relative to the container enclosing bounding box.
87 // Since we work with rects enclosing quad unions this is still transform-frie ndly. 90 // Since we work with rects enclosing quad unions this is still
91 // transform-friendly.
88 FloatRect normalizedRect = absoluteRect; 92 FloatRect normalizedRect = absoluteRect;
89 normalizedRect.moveBy(-containerRect.location()); 93 normalizedRect.moveBy(-containerRect.location());
90 94
91 // Fixed positions do not make sense in this coordinate system, but need to le ave consistent tickmarks. 95 // Fixed positions do not make sense in this coordinate system, but need to
92 // So, use their position when the view is not scrolled, like an absolute posi tion. 96 // leave consistent tickmarks. So, use their position when the view is not
97 // scrolled, like an absolute position.
93 if (layoutObject->style()->position() == FixedPosition && 98 if (layoutObject->style()->position() == FixedPosition &&
94 container->isLayoutView()) 99 container->isLayoutView())
95 normalizedRect.moveBy( 100 normalizedRect.moveBy(
96 -toLayoutView(container)->frameView()->scrollPosition()); 101 -toLayoutView(container)->frameView()->scrollPosition());
97 102
98 normalizedRect.scale(1 / containerRect.width(), 1 / containerRect.height()); 103 normalizedRect.scale(1 / containerRect.width(), 1 / containerRect.height());
99 return normalizedRect; 104 return normalizedRect;
100 } 105 }
101 106
102 FloatRect findInPageRectFromAbsoluteRect(const FloatRect& inputRect, 107 FloatRect findInPageRectFromAbsoluteRect(const FloatRect& inputRect,
103 const LayoutObject* baseLayoutObject) { 108 const LayoutObject* baseLayoutObject) {
104 if (!baseLayoutObject || inputRect.isEmpty()) 109 if (!baseLayoutObject || inputRect.isEmpty())
105 return FloatRect(); 110 return FloatRect();
106 111
107 // Normalize the input rect to its container block. 112 // Normalize the input rect to its container block.
108 const LayoutBlock* baseContainer = 113 const LayoutBlock* baseContainer =
109 enclosingScrollableAncestor(baseLayoutObject); 114 enclosingScrollableAncestor(baseLayoutObject);
110 FloatRect normalizedRect = 115 FloatRect normalizedRect =
111 toNormalizedRect(inputRect, baseLayoutObject, baseContainer); 116 toNormalizedRect(inputRect, baseLayoutObject, baseContainer);
112 117
113 // Go up across frames. 118 // Go up across frames.
114 for (const LayoutBox* layoutObject = baseContainer; layoutObject;) { 119 for (const LayoutBox* layoutObject = baseContainer; layoutObject;) {
115 // Go up the layout tree until we reach the root of the current frame (the L ayoutView). 120 // Go up the layout tree until we reach the root of the current frame (the
121 // LayoutView).
116 while (!layoutObject->isLayoutView()) { 122 while (!layoutObject->isLayoutView()) {
117 const LayoutBlock* container = enclosingScrollableAncestor(layoutObject); 123 const LayoutBlock* container = enclosingScrollableAncestor(layoutObject);
118 124
119 // Compose the normalized rects. 125 // Compose the normalized rects.
120 FloatRect normalizedBoxRect = toNormalizedRect( 126 FloatRect normalizedBoxRect = toNormalizedRect(
121 layoutObject->absoluteBoundingBoxRect(), layoutObject, container); 127 layoutObject->absoluteBoundingBoxRect(), layoutObject, container);
122 normalizedRect.scale(normalizedBoxRect.width(), 128 normalizedRect.scale(normalizedBoxRect.width(),
123 normalizedBoxRect.height()); 129 normalizedBoxRect.height());
124 normalizedRect.moveBy(normalizedBoxRect.location()); 130 normalizedRect.moveBy(normalizedBoxRect.location());
125 131
(...skipping 13 matching lines...) Expand all
139 FloatRect findInPageRectFromRange(Range* range) { 145 FloatRect findInPageRectFromRange(Range* range) {
140 if (!range || !range->firstNode()) 146 if (!range || !range->firstNode())
141 return FloatRect(); 147 return FloatRect();
142 148
143 return findInPageRectFromAbsoluteRect( 149 return findInPageRectFromAbsoluteRect(
144 LayoutObject::absoluteBoundingBoxRectForRange(range), 150 LayoutObject::absoluteBoundingBoxRectForRange(range),
145 range->firstNode()->layoutObject()); 151 range->firstNode()->layoutObject());
146 } 152 }
147 153
148 } // namespace blink 154 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/FindInPageCoordinates.h ('k') | third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698