OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2007, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 } | 109 } |
110 | 110 |
111 namespace blink { | 111 namespace blink { |
112 | 112 |
113 NSAttributedString* WebSubstringUtil::attributedWordAtPoint(WebView* view, WebPo
int point, WebPoint& baselinePoint) | 113 NSAttributedString* WebSubstringUtil::attributedWordAtPoint(WebView* view, WebPo
int point, WebPoint& baselinePoint) |
114 { | 114 { |
115 HitTestResult result = view->hitTestResultAt(point); | 115 HitTestResult result = view->hitTestResultAt(point); |
116 LocalFrame* frame = result.targetNode()->document().frame(); | 116 LocalFrame* frame = result.targetNode()->document().frame(); |
117 FrameView* frameView = frame->view(); | 117 FrameView* frameView = frame->view(); |
118 | 118 |
119 RefPtr<Range> range = frame->rangeForPoint(result.roundedPointInInnerNodeFra
me()); | 119 RefPtrWillBeRawPtr<Range> range = frame->rangeForPoint(result.roundedPointIn
InnerNodeFrame()); |
120 if (!range) | 120 if (!range) |
121 return nil; | 121 return nil; |
122 | 122 |
123 // Expand to word under point. | 123 // Expand to word under point. |
124 VisibleSelection selection(range.get()); | 124 VisibleSelection selection(range.get()); |
125 selection.expandUsingGranularity(WordGranularity); | 125 selection.expandUsingGranularity(WordGranularity); |
126 RefPtr<Range> wordRange = selection.toNormalizedRange(); | 126 RefPtrWillBeRawPtr<Range> wordRange = selection.toNormalizedRange(); |
127 | 127 |
128 // Convert to NSAttributedString. | 128 // Convert to NSAttributedString. |
129 NSAttributedString* string = attributedSubstringFromRange(wordRange.get()); | 129 NSAttributedString* string = attributedSubstringFromRange(wordRange.get()); |
130 | 130 |
131 // Compute bottom left corner and convert to AppKit coordinates. | 131 // Compute bottom left corner and convert to AppKit coordinates. |
132 IntRect stringRect = enclosingIntRect(wordRange->boundingRect()); | 132 IntRect stringRect = enclosingIntRect(wordRange->boundingRect()); |
133 IntPoint stringPoint = frameView->contentsToWindow(stringRect).minXMaxYCorne
r(); | 133 IntPoint stringPoint = frameView->contentsToWindow(stringRect).minXMaxYCorne
r(); |
134 stringPoint.setY(frameView->height() - stringPoint.y()); | 134 stringPoint.setY(frameView->height() - stringPoint.y()); |
135 | 135 |
136 // Adjust for the font's descender. AppKit wants the baseline point. | 136 // Adjust for the font's descender. AppKit wants the baseline point. |
137 if ([string length]) { | 137 if ([string length]) { |
138 NSDictionary* attributes = [string attributesAtIndex:0 effectiveRange:NU
LL]; | 138 NSDictionary* attributes = [string attributesAtIndex:0 effectiveRange:NU
LL]; |
139 NSFont* font = [attributes objectForKey:NSFontAttributeName]; | 139 NSFont* font = [attributes objectForKey:NSFontAttributeName]; |
140 if (font) | 140 if (font) |
141 stringPoint.move(0, ceil(-[font descender])); | 141 stringPoint.move(0, ceil(-[font descender])); |
142 } | 142 } |
143 | 143 |
144 baselinePoint = stringPoint; | 144 baselinePoint = stringPoint; |
145 return string; | 145 return string; |
146 } | 146 } |
147 | 147 |
148 NSAttributedString* WebSubstringUtil::attributedSubstringInRange(WebFrame* webFr
ame, size_t location, size_t length) | 148 NSAttributedString* WebSubstringUtil::attributedSubstringInRange(WebFrame* webFr
ame, size_t location, size_t length) |
149 { | 149 { |
150 LocalFrame* frame = toWebFrameImpl(webFrame)->frame(); | 150 LocalFrame* frame = toWebFrameImpl(webFrame)->frame(); |
151 if (frame->view()->needsLayout()) | 151 if (frame->view()->needsLayout()) |
152 frame->view()->layout(); | 152 frame->view()->layout(); |
153 | 153 |
154 Element* editable = frame->selection().rootEditableElementOrDocumentElement(
); | 154 Element* editable = frame->selection().rootEditableElementOrDocumentElement(
); |
155 ASSERT(editable); | 155 ASSERT(editable); |
156 RefPtr<Range> range(PlainTextRange(location, location + length).createRange(
*editable)); | 156 RefPtrWillBeRawPtr<Range> range(PlainTextRange(location, location + length).
createRange(*editable)); |
157 if (!range) | 157 if (!range) |
158 return nil; | 158 return nil; |
159 | 159 |
160 return attributedSubstringFromRange(range.get()); | 160 return attributedSubstringFromRange(range.get()); |
161 } | 161 } |
162 | 162 |
163 } // namespace blink | 163 } // namespace blink |
OLD | NEW |