WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 34915
Chromium: Need to be able to get the bounds of selection rectangle(s)
https://bugs.webkit.org/show_bug.cgi?id=34915
Summary
Chromium: Need to be able to get the bounds of selection rectangle(s)
Dmitriy Belenko
Reported
2010-02-12 18:06:20 PST
This change is necessary to fix Chromium
bug 28646
(which in turn will fix 23481 and 23481 ). The gist of that bug is that a red rectangle needs to be drawn around the selection, including the case where selection is transformed. The change will be in WebKit/chromium and is Chromium-specific. I already have a fix (diff is attached). The bug is caused by not having a way to retrieve the bounding rectangle coordinates for the selection rectangle(s). WebKit tests do this by calling an Objective-C selector dynamically and retrieving the corresponding rect. In order to accomplish the same in C++ a trivial helper method is introduced in the interface. I am creating this bug to have a vehicle to get the patch in. The corresponding Chromium bug can be found here:
http://code.google.com/p/chromium/issues/detail?id=28646&q=dbelenko&colspec=ID%20Stars%20Pri%20Area%20Type%20Status%20Summary%20Modified%20Owner%20Mstone%20OS
Attachments
Patch that fixes the issue.
(2.18 KB, patch)
2010-02-12 18:08 PST
,
Dmitriy Belenko
no flags
Details
Formatted Diff
Diff
This patch includes the changelog and stylistic changes as per style guide. It obsoletes the previously attached patch.
(3.40 KB, patch)
2010-02-12 19:20 PST
,
Dmitriy Belenko
no flags
Details
Formatted Diff
Diff
Fixed the spurious tab chars in Changelog
(3.41 KB, patch)
2010-02-13 00:32 PST
,
Dmitriy Belenko
fishd
: review-
Details
Formatted Diff
Diff
Changed patch to address reviewer feedback.
(2.98 KB, patch)
2010-02-18 10:37 PST
,
Dmitriy Belenko
fishd
: review-
Details
Formatted Diff
Diff
Incorporated review feedback.
(2.89 KB, patch)
2010-02-19 15:23 PST
,
Dmitriy Belenko
no flags
Details
Formatted Diff
Diff
Made things more concise
(2.83 KB, patch)
2010-02-19 18:25 PST
,
Dmitriy Belenko
no flags
Details
Formatted Diff
Diff
Using implicit conversion per Darin's request.
(2.81 KB, patch)
2010-02-21 23:34 PST
,
Dmitriy Belenko
levin
: review-
levin
: commit-queue-
Details
Formatted Diff
Diff
Fixed punctuation issues per David's feedback.
(2.85 KB, patch)
2010-02-22 21:27 PST
,
Dmitriy Belenko
no flags
Details
Formatted Diff
Diff
Show Obsolete
(7)
View All
Add attachment
proposed patch, testcase, etc.
Dmitriy Belenko
Comment 1
2010-02-12 18:08:04 PST
Created
attachment 48686
[details]
Patch that fixes the issue. Proposed patch. I will follow up with the proper submission for review.
Dmitriy Belenko
Comment 2
2010-02-12 19:20:37 PST
Created
attachment 48691
[details]
This patch includes the changelog and stylistic changes as per style guide. It obsoletes the previously attached patch. Attaching a patch which includes the changelog and stylistic changes as per style guide. It obsoletes the previously attached patch. This patch adds a selectionBoundsRect method. This method returns false if there is no selection. In case there is a selection, it sets the coordinates of the rectangle passed into it by reference to the absolute bounds enclosing all selections. I have verified that the boundary is identical to the one shown in Apple's "expected" images.
WebKit Review Bot
Comment 3
2010-02-12 19:23:55 PST
Attachment 48691
[details]
did not pass style-queue: Failed to run "WebKitTools/Scripts/check-webkit-style" exit_code: 1 WebKit/chromium/ChangeLog:13: Line contains tab character. [whitespace/tab] [5] Total errors found: 1 If any of these errors are false positives, please file a bug against check-webkit-style.
Dmitriy Belenko
Comment 4
2010-02-13 00:32:21 PST
Created
attachment 48700
[details]
Fixed the spurious tab chars in Changelog Fixed the spurious tab chars in Changelog
Dmitriy Belenko
Comment 5
2010-02-16 14:18:03 PST
See
http://code.google.com/p/chromium/issues/detail?id=28646&q=lttf&colspec=ID%20Stars%20Pri%20Area%20Type%20Status%20Summary%20Modified%20Owner%20Mstone%20OS
This is the corresponding Chromium bug.
Darin Fisher (:fishd, Google)
Comment 6
2010-02-16 15:02:52 PST
Comment on
attachment 48700
[details]
Fixed the spurious tab chars in Changelog
> + Reviewed by NOBODY (OOPS!). > + > + This change will enable 30 layout pixel tests to pass. The change > + simply exposes a helper function to return a bounding rectangle for the > + current (possibly transformed) selection rectangles. The displayed > + rectangle is not transformed, but it does adjust itself to completely > + enclose the transformed selection. In WebKit Apple makes this test work > + by using dynamic dispatch in Objective C, but here I had to introduce a > + method. > + > + This change does not require new test cases. > + > + Chromium: Need to be able to get the bounds of selection rectangle(s) > +
https://bugs.webkit.org/show_bug.cgi?id=34915
^^^ please move these two lines to the top, just below the Reviewed by line. That way tools that just show a snippet of the ChangeLog will show those lines.
> +++ b/WebKit/chromium/public/WebFrame.h > @@ -478,6 +478,12 @@ public: > // Returns a text representation of the render tree. This method is used > // to support layout tests. > virtual WebString renderTreeAsText() const = 0; > + > + // Returns bool true if there is a selection and false if there's none. > + // In case there is a selection, sets the rect to the "straight" bounding > + // rect of the (possibly transformed) selection rect. > + // This method is used to support layout tests. > + virtual bool selectionBoundsRect(WebRect&) const = 0;
This should just return WebRect. If the WebRect is empty, then it can mean that there was no selection.
> +bool WebFrameImpl::selectionBoundsRect(WebRect& boundsRect) const > +{ > + if (hasSelection()) { > + FloatRect r = frame()->selectionBounds(false); > + boundsRect.x = r.x(); > + boundsRect.y = r.y(); > + boundsRect.width = r.width(); > + boundsRect.height = r.height();
Is the loss of precision from float to int okay? -Darin
Dmitriy Belenko
Comment 7
2010-02-18 10:37:13 PST
Created
attachment 49029
[details]
Changed patch to address reviewer feedback. Code now simply returns a WebRect, and uses rounding (as opposed to truncation) to convert coordinates to integer.
Darin Fisher (:fishd, Google)
Comment 8
2010-02-19 11:27:31 PST
Comment on
attachment 49029
[details]
Changed patch to address reviewer feedback.
> diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog > index 4e8a629..0d90fd0 100644 > --- a/WebKit/chromium/ChangeLog > +++ b/WebKit/chromium/ChangeLog > @@ -1,3 +1,20 @@ > +2010-02-18 Dmitriy Belenko <
dbelenko@google.com
> > + > + Reviewed by NOBODY (OOPS!). > + > + This change will enable about 30 test cases to pass in Chromium. > + All of these test cases are related to selection rect boundaries. > + The three issues that this will solve can be found here: > + > +
http://code.google.com/p/chromium/issues/detail?id=28646
> +
http://code.google.com/p/chromium/issues/detail?id=23481
> +
http://code.google.com/p/chromium/issues/detail?id=23482
I'm sorry to nit-pick, but you should really just reference the WebKit bug number in the WebKit ChangeLog. (The bug can have references to these Chromium bug reports.)
> +++ b/WebKit/chromium/public/WebFrame.h > @@ -492,6 +492,11 @@ public: > float pageWidthInPixels, > float pageHeightInPixels) const = 0; > > + // Returns the bounds rect for current selection. If selection is performed > + // on transformed text, the rect will still bound the selection, but will > + // not be transformed itself. If no selection is present the rect will be > + // empty ((0,0), (0,0)) > + virtual WebRect selectionBoundsRect() const = 0; > protected:
nit: please preserve the new line above the "protected:" line.
> +++ b/WebKit/chromium/src/WebFrameImpl.cpp
...
> +WebRect WebFrameImpl::selectionBoundsRect() const > +{ > + if (hasSelection()) { > + FloatRect fr = frame()->selectionBounds(false); > + return WebRect(roundf(fr.x()), roundf(fr.y()), > + roundf(fr.width()), roundf(fr.height()));
Are you sure we want to round like this? IntRect(const FloatRect&) just rounds down.
> + } > + > + return WebRect(0, 0, 0, 0);
nit: Just do "return WebRect();" since the default constructor does the same thing.
Dmitriy Belenko
Comment 9
2010-02-19 15:23:40 PST
Created
attachment 49107
[details]
Incorporated review feedback. Third time's a charm?
Darin Fisher (:fishd, Google)
Comment 10
2010-02-19 16:10:17 PST
Comment on
attachment 49107
[details]
Incorporated review feedback.
> +++ b/WebKit/chromium/src/WebFrameImpl.cpp > @@ -1534,6 +1534,16 @@ int WebFrameImpl::pageNumberForElementById(const WebString& id, > return PrintContext::pageNumberForElement(element, pageSize); > } > > +WebRect WebFrameImpl::selectionBoundsRect() const > +{ > + if (hasSelection()) { > + FloatRect fr = frame()->selectionBounds(false); > + return WebRect(fr.x(), fr.y(), fr.width(), fr.height());
if (hasSelection()) return WebRect(frame()->selectionBounds(false)); ^^^ that should also compile, right? the FloatRect gets implicitly converted to IntRect, which matches a WebRect constructor.
Dmitriy Belenko
Comment 11
2010-02-19 18:25:06 PST
Created
attachment 49116
[details]
Made things more concise
Dmitriy Belenko
Comment 12
2010-02-21 23:34:48 PST
Created
attachment 49185
[details]
Using implicit conversion per Darin's request.
David Levin
Comment 13
2010-02-22 17:31:40 PST
Comment on
attachment 49185
[details]
Using implicit conversion per Darin's request. Some trivial nits to fix and then I'd be willing to r+, cq+ (based on this plus past reviews).
> diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog > @@ -1,3 +1,21 @@ > +2010-02-21 Dmitriy Belenko <
dbelenko@google.com
> > + > + Reviewed by NOBODY (OOPS!). > +
Typically one does: Bug title Bug link Description. Like this:
> + Chromium: Need to be able to get the bounds of selection rectangle(s) > +
https://bugs.webkit.org/show_bug.cgi?id=34915
> + > + This change will enable about 30 test cases to pass in Chromium. > + All of these test cases are related to selection rect boundaries. > + This change will enable the test cases to retrieve the selection > + rect boundary rectangle for the current selection. > + > + > + * public/WebFrame.h: > + * src/WebFrameImpl.cpp: > + (WebKit::WebFrameImpl::selectionBoundsRect): > + * src/WebFrameImpl.h: > +
> diff --git a/WebKit/chromium/public/WebFrame.h b/WebKit/chromium/public/WebFrame.h > + // Returns the bounds rect for current selection. If selection is performed > + // on transformed text, the rect will still bound the selection, but will
no comma before the but (since the phrase after but isn't a complete sentence.
> + // not be transformed itself. If no selection is present the rect will be
Add a comma after present.
> + // empty ((0,0), (0,0))
Add a period to the end of the sentence.
Dmitriy Belenko
Comment 14
2010-02-22 21:27:02 PST
Created
attachment 49264
[details]
Fixed punctuation issues per David's feedback.
WebKit Commit Bot
Comment 15
2010-02-23 02:53:54 PST
Comment on
attachment 49264
[details]
Fixed punctuation issues per David's feedback. Clearing flags on attachment: 49264 Committed
r55137
: <
http://trac.webkit.org/changeset/55137
>
WebKit Commit Bot
Comment 16
2010-02-23 02:54:00 PST
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug