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 54623
RTL web content should have left-hand scrollbar.
https://bugs.webkit.org/show_bug.cgi?id=54623
Summary
RTL web content should have left-hand scrollbar.
Jeremy Moskovich
Reported
2011-02-17 00:57:47 PST
Bug to discuss placing scrollbars on the left hand side for RTL web content. This includes overflow and select elements with a non-zero size attribute (see issue 50928)
Attachments
An initial change for starting technical discussion.
(10.33 KB, patch)
2011-03-28 09:52 PDT
,
Hironori Bono
no flags
Details
Formatted Diff
Diff
A trial change
(24.26 KB, patch)
2011-03-31 09:30 PDT
,
Hironori Bono
hyatt
: review-
Details
Formatted Diff
Diff
A trial change v2
(35.67 KB, patch)
2011-04-08 04:08 PDT
,
Hironori Bono
no flags
Details
Formatted Diff
Diff
A trial change v3
(38.50 KB, patch)
2011-04-12 04:13 PDT
,
Hironori Bono
no flags
Details
Formatted Diff
Diff
A trial change v4
(38.57 KB, patch)
2011-04-19 00:55 PDT
,
Hironori Bono
no flags
Details
Formatted Diff
Diff
Patch v6 (enabled only on Chromium)
(17.29 KB, patch)
2011-09-14 23:01 PDT
,
Hironori Bono
rniwa
: review-
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Patch v7
(15.56 KB, patch)
2011-11-08 02:24 PST
,
Hironori Bono
eric
: review-
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Patch v8 (refactored)
(14.72 KB, patch)
2012-01-06 05:14 PST
,
Hironori Bono
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Patch v9 (renamed function names)
(14.97 KB, patch)
2012-01-12 21:55 PST
,
Hironori Bono
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Patch v10 (Applied comments)
(15.39 KB, patch)
2012-02-03 03:32 PST
,
Hironori Bono
eric
: review+
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Patch v11 (Applied comments from Eric)
(15.30 KB, patch)
2012-02-16 03:32 PST
,
Hironori Bono
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Patch v12 (Updated to ToT)
(15.31 KB, patch)
2012-02-29 20:41 PST
,
Hironori Bono
no flags
Details
Formatted Diff
Diff
Test case. Extract the files in the zip and open iframe-scollbar-outer.html.
(22.13 KB, application/octet-stream)
2012-04-16 04:48 PDT
,
Aharon (Vladimir) Lanin
no flags
Details
Show Obsolete
(10)
View All
Add attachment
proposed patch, testcase, etc.
Yair Yogev
Comment 1
2011-02-17 01:15:22 PST
Is there a browser other than IE with scrollbars on the left hand side? A scrollbar moving from side to side throughout the browsing session can be annoying... I see it as a disadvantage but I guess it's a matter of taste.
Ryosuke Niwa
Comment 2
2011-02-17 01:28:53 PST
(In reply to
comment #1
)
> A scrollbar moving from side to side throughout the browsing session can be annoying... I see it as a disadvantage but I guess it's a matter of taste.
We can use the same side per frame. It probably doesn't make sense to change the side per block element.
Jeremy Moskovich
Comment 3
2011-02-17 01:29:37 PST
There have been extended discussions about this - Aharon can provide the full details. I think the current thinking is to only do this for scrollbars in web content, leaving the directionality of the main window scrollbar up to the OS.
Hironori Bono
Comment 4
2011-03-28 09:52:12 PDT
Created
attachment 87158
[details]
An initial change for starting technical discussion. Greetings, This is a change that moves the horizontal scrollbars and resizers of an RTL controls. (This change only moves the horizontal scrollbar of the RenderLayer class and it does not move the one of the RenderView class, though.) I notice this change causes layout-test failures for several tests because this change also moves the text in an RTL control right to prevent the text from being rendered on its horizontal scrollbar. fast/block/float/026.html -> failed fast/block/float/028.html -> failed fast/events/offsetX-offsetY.html -> failed fast/overflow/overflow-rtl-vertical.html -> failed fast/overflow/unreachable-overflow-rtl-bug.html -> failed Regards, Hironori Bono
Xiaomei Ji
Comment 5
2011-03-28 12:23:00 PDT
(In reply to
comment #4
)
> Created an attachment (id=87158) [details] > An initial change for starting technical discussion. > > Greetings, > > This is a change that moves the horizontal scrollbars and resizers of an RTL controls.
it is moving the vertical scrollbar, right?
Hironori Bono
Comment 6
2011-03-29 01:35:00 PDT
Greetings, (In reply to
comment #5
)
> it is moving the vertical scrollbar, right?
Right. This change also moves the resizer, though. Regards, Hironori Bono
Hironori Bono
Comment 7
2011-03-29 02:59:20 PDT
Greetings, (In reply to
comment #4
)
> fast/overflow/unreachable-overflow-rtl-bug.html -> failed
Oops, this seems to be a real regression. (I forgot moving the float objects right by the width of the horizontal scrollbar.) Regards, Hironori Bono
Eric Seidel (no email)
Comment 8
2011-03-29 06:36:23 PDT
Comment on
attachment 87158
[details]
An initial change for starting technical discussion. View in context:
https://bugs.webkit.org/attachment.cgi?id=87158&action=review
I think the approach seems fine (assuming its mirrors what we do when scrollbars are on the right). But the code needs further cleanup to abstract these functions nicely.
> Source/WebCore/rendering/RenderBlock.cpp:1751 > + if (style()->isHorizontalWritingMode() && !style()->isLeftToRightDirection())
This should be a style()->showScrollbarOnLeft() check.
> Source/WebCore/rendering/RenderBox.cpp:479 > +IntRect RenderBox::contentBoxRect() const {
style. { on next line.
> Source/WebCore/rendering/RenderBox.cpp:481 > + if (!style()->isLeftToRightDirection())
Same here. We may decide this is not related to writign direction at a later time. Whether we show a scrollbar on the left or right shoudl be an independent function check.
> Source/WebCore/rendering/RenderBox.cpp:1130 > + clipX += layer()->verticalScrollbarWidth(relevancy); > clipWidth -= layer()->verticalScrollbarWidth(relevancy);
Seems we should cache this value instead of asking it twice...
Hironori Bono
Comment 9
2011-03-31 09:30:50 PDT
Created
attachment 87748
[details]
A trial change Greetings, I have updated this change to add a CSS property that moves the vertical scrollbar to the left side. I would like to upload this change and set review? just to check if this change can complie on all platforms. (I understand I need to polish this change.) Sorry for my noisy review request in advance. Regards, Hironori Bono
WebKit Review Bot
Comment 10
2011-03-31 09:33:29 PDT
Attachment 87748
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/fast..." exit_code: 1 LayoutTests/ChangeLog:1: ChangeLog entry has no bug number [changelog/bugnumber] [5] Total errors found: 1 in 17 files If any of these errors are false positives, please file a bug against check-webkit-style.
Simon Fraser (smfr)
Comment 11
2011-03-31 13:51:02 PDT
Why is a new CSS property added? Who are you expecting to set that property?
Dave Hyatt
Comment 12
2011-03-31 13:53:27 PDT
I do not believe making this a CSS property is the right way to go. This should just be a global policy decision and not controllable by authors. I also don't believe we want this change on Mac OS X, since scrollbars stay on the right hand side even with RTL content in list boxes for example. Being inconsistent with iframe scrollbars and top-level document scrollbars also seems bad to me. Note also that you'd have to deal with vertical text scrollbars as well.
Dave Hyatt
Comment 13
2011-03-31 13:57:11 PDT
Comment on
attachment 87748
[details]
A trial change View in context:
https://bugs.webkit.org/attachment.cgi?id=87748&action=review
Minusing because of the use of a CSS property (and for the other reasons mentioned in the previous comment). Not all platforms are going to want this change, so I think this is better off as a Setting if you're going to do it.
> Source/WebCore/rendering/RenderBlock.cpp:1415 > + if (style()->isShowScrollbarOnLeft())
This is bad terminology and bad English.
Hironori Bono
Comment 14
2011-04-08 04:08:27 PDT
Created
attachment 88796
[details]
A trial change v2 Greetings, Thank you all for your review and comments. Even though I have updated my change, I realize this change still needs a lot of cases to discuss about. (In reply to
comment #12
)
> I do not believe making this a CSS property is the right way to go. This should just be a global policy decision and not controllable by authors. > I also don't believe we want this change on Mac OS X, since scrollbars stay on the right hand side even with RTL content in list boxes for example.
Thanks for your comment. (My last change added a CSS property just because I badly misunderstood a comment from Eric.) I have updated this change to use a setting. (If this feature is not needed by Mac, we need to move these layout tests to 'LayoutTests/platform' and use an ENABLE() macro?)
> Being inconsistent with iframe scrollbars and top-level document scrollbars also seems bad to me.
If I can recall comments from a native Hebrew speaker (Aharon), he suggested not to move the vertical scrollbars of <iframe> or <body> even when their direction is RTL. (He suggested to move them when the UI language is an RTL one.) I would like to check it again. By the way, I'm personally wondering if I shuuld include the code that moves the vertical scrollbars of RenderView objects to this change because this change already becomes >35KB. It would be definitely helpful to give me your opinions about it.
> Note also that you'd have to deal with vertical text scrollbars as well.
Yeah. Even though I notice vertical text, this change did not deal with it because I would like to ask Aharon about it with this change. (Maybe showing to the top-side?) (In reply to
comment #13
)
> Minusing because of the use of a CSS property (and for the other reasons mentioned in the previous comment). > Not all platforms are going to want this change, so I think this is better off as a Setting if you're going to do it.
Thank you. I have updated my change to use it.
> > Source/WebCore/rendering/RenderBlock.cpp:1415 > > + if (style()->isShowScrollbarOnLeft()) > > This is bad terminology and bad English.
Indeed. (This clearly shows my poor English skill.) Regards, Hironori Bono
WebKit Review Bot
Comment 15
2011-04-08 04:37:57 PDT
Attachment 88796
[details]
did not build on chromium: Build output:
http://queues.webkit.org/results/8347989
Aharon (Vladimir) Lanin
Comment 16
2011-04-10 00:21:15 PDT
(In reply to
comment #12
)
> Being inconsistent with iframe scrollbars and top-level document scrollbars also seems bad to me.
In frames and iframes hosting HTML documents, the dir attribute (and CSS direction) of the frame/iframe element has no visible effect, since it is completely overridden by the direction of the HTML document in the frame. Thus, the vertical scrollbar position should be determined by the frame's HTML document too. Thus, the exception for frames and iframes makes sense. The rule is simple: for RTL content, the vertical scrollbar should be on the left side. The direction of the content in a frame is given by the document, not the frame element. As for top-level documents, this is indeed an exception to the rule. The reason for the exception is that it is even more important to have the *window*'s vertical scrollbar in a fixed position as one surfs from one page to another of the opposite direction, since it saves the user having to check the direction of the page or visually find the scrollbar before starting to move the mouse to it. Please note that this rationale does not apply to internal elements, since their scrollbar is in an arbitrary position in the window anyway.
> I also don't believe we want this change on Mac OS X, since scrollbars stay on the right hand side even with RTL content in list boxes for example.
WebKit does try to emulate native control behavior, so I guess this comment makes sense. Although as far as I am concerned, Mac OS X behavior in this case is not optimal, and I would not be surprised if it will change some day.
Hironori Bono
Comment 17
2011-04-12 04:13:17 PDT
Created
attachment 89186
[details]
A trial change v3 Greetings, (In reply to
comment #15
)
>
Attachment 88796
[details]
did not build on chromium: > Build output:
http://queues.webkit.org/results/8347989
Oops, I forgot adding Chromium-specific files to this change. I have updated the change to include some Chromium-specific files. Regards, Hironori Bono
Hironori Bono
Comment 18
2011-04-19 00:55:27 PDT
Created
attachment 90162
[details]
A trial change v4 Greetings, I have updated this change just for fixing a conflict. Regards, Hironori Bono
Hajime Morrita
Comment 19
2011-04-19 13:37:07 PDT
Hi Bono-san, what about iframe? Is it a different story from this patch?
Hajime Morrita
Comment 20
2011-04-19 13:38:47 PDT
> Hi Bono-san, what about iframe? Is it a different story from this patch?
Oops. I missed aharon's comment... I'm sorry for disturbing.
Xiaomei Ji
Comment 21
2011-05-26 14:47:34 PDT
David, Simon, Dan, could you kindly review the patch? Thanks and appreciated!
Aharon (Vladimir) Lanin
Comment 22
2011-07-24 23:15:54 PDT
I am not sure in what version they made the change, but as of version 5, Firefox displays scrollbars on elements below <body> on the end side, i.e. on the left for an RTL element. The Firefox bugs for this are
https://bugzilla.mozilla.org/show_bug.cgi?id=556363
and
https://bugzilla.mozilla.org/show_bug.cgi?id=619963
.
Hironori Bono
Comment 23
2011-09-14 23:01:12 PDT
Created
attachment 107460
[details]
Patch v6 (enabled only on Chromium) Greetings, Even though my previous patch has not got any interest of reviewers, I have updated my change because my previous patch does not compile on the latest WebKit any longer. Also, I have changed the layout tests to a script test and added an ENABLED_OVERFLOW_MIRRORING flag so we can enable/disable this feature at compilation time. (It seems Safari does not need it.) Regards, Hironori Bono
Aharon (Vladimir) Lanin
Comment 24
2011-09-14 23:07:29 PDT
This bug, which lacks a workaround, is causing problems at several Google products. Is anyone available to review Hirinori's patch?
Jeremy Moskovich
Comment 25
2011-09-15 01:52:22 PDT
Comment on
attachment 107460
[details]
Patch v6 (enabled only on Chromium) View in context:
https://bugs.webkit.org/attachment.cgi?id=107460&action=review
informal review since I'm not a WebKit reviewer.
> Source/WebCore/ChangeLog:6 > + This change adds a new flag ENABLE_OVERFLOW_MIRRORING and render
nit: I think ENABLE_OVERFLOW_MIRRORING is a little hard to understand. How about ENABLE_RTL_SCROLLBARS ?
> Source/WebCore/rendering/RenderBlock.cpp:1468 > + if (positionedObject->style()->position() != FixedPosition) {
nit: I think rewriting this as: if (positionedObject->style()->position() == FixedPosition) continue; #ifdef ... Would be a little cleaner since you wouldn' t need to repeat the if inside the #ifdef.
> Source/WebCore/rendering/RenderBox.cpp:1194 > +#else
Can you remove the #else and reuse the same call to contract() ? This may make things easier to follow...
> Source/WebCore/rendering/style/RenderStyle.h:529 > + bool isRightToLeftDirection() const { return direction() == RTL; }
I may be wrong but I seem to recall Mitz mentioning that he wanted everything phrased as being related to isLTR so you may want to remove this and just use a locale isRTL = !bla->isLeftToRightDirection() where you need htat.
WebKit Review Bot
Comment 26
2011-09-15 10:53:12 PDT
Comment on
attachment 107460
[details]
Patch v6 (enabled only on Chromium)
Attachment 107460
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/9685143
New failing tests: fast/block/float/028.html fast/overflow/overflow-rtl-vertical.html fast/events/offsetX-offsetY.html fast/overflow/unreachable-overflow-rtl-bug.html fast/block/float/026.html
Antonio Gomes
Comment 27
2011-09-15 12:59:35 PDT
Comment on
attachment 107460
[details]
Patch v6 (enabled only on Chromium) View in context:
https://bugs.webkit.org/attachment.cgi?id=107460&action=review
> Source/WebCore/rendering/RenderBlock.cpp:1467 > +#if ENABLE(OVERFLOW_MIRRORING)
Adam Barth is "fixing" many of the mis using of "ENABLE". I believe you would be introducing yet another one, but I would like him to comment. Adam, ENABLE x USE here?
> Source/WebCore/rendering/RenderLayer.cpp:1769 > + const RenderStyle* style = layer->renderer()->style();
I would drop the 'const' here.
Antonio Gomes
Comment 28
2011-09-15 13:00:13 PDT
Adam, see
comment #27
.
Ryosuke Niwa
Comment 29
2011-10-10 09:43:34 PDT
Comment on
attachment 107460
[details]
Patch v6 (enabled only on Chromium) I would like to see some hit testing tests here especially when overflow contents are scrolled by a few pixels. r- due to lack of hit testing tests.
Ryosuke Niwa
Comment 30
2011-11-01 06:40:54 PDT
Comment on
attachment 107460
[details]
Patch v6 (enabled only on Chromium) View in context:
https://bugs.webkit.org/attachment.cgi?id=107460&action=review
> Source/WebCore/rendering/RenderLayer.cpp:1772 > + return LayoutRect(x, bounds.maxY() - verticalThickness - style->borderBottomWidth(), > + horizontalThickness, verticalThickness);
I'd note that indentation here is wrong. horizontalThickness should be on the right of "return LayoutRect" by exactly 4 spaces (8 spaces in the total). Ditto for the rest of the patch.
Hironori Bono
Comment 31
2011-11-08 02:24:36 PST
Created
attachment 114018
[details]
Patch v7 Greetings, Sorry for the lack of my updates. I have renamed ENABLE(OVERFLOW_MIRRORING) to USE(RTL_SCROLLBAR), re-implemented its layout test that hits a scrollbar track, and fixed a conflict. Regards, Hironori Bono
WebKit Review Bot
Comment 32
2011-11-08 05:06:00 PST
Comment on
attachment 114018
[details]
Patch v7
Attachment 114018
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/10370064
New failing tests: fast/block/float/028.html fast/overflow/overflow-rtl-vertical.html fast/events/offsetX-offsetY.html fast/overflow/unreachable-overflow-rtl-bug.html fast/block/float/026.html
Ryosuke Niwa
Comment 33
2011-11-25 15:58:07 PST
Do you know why those tests are failing?
Ryosuke Niwa
Comment 34
2011-11-25 16:04:05 PST
Comment on
attachment 114018
[details]
Patch v7 View in context:
https://bugs.webkit.org/attachment.cgi?id=114018&action=review
Nits.
> Source/WebCore/ChangeLog:10 > + Reviewed by NOBODY (OOPS!).
This line should appear before the long description.
> Source/WebCore/rendering/RenderLayer.cpp:2147 > + absBounds.y() + box->borderTop(), > + m_vBar->width(), > + absBounds.height() - (box->borderTop() + box->borderBottom()) - scrollCorner.height()));
Wrong indentation. "absBounds.y() + box->borderTop()" should be exactly 4 spaces to the right of "m_vBar->".
> Source/WebCore/rendering/RenderLayer.cpp:2157 > + m_hBar->height()));
Ditto.
> Source/WebCore/rendering/RenderLayer.cpp:2572 > + box->borderTop(), > + m_vBar->width(), > + box->height() - (box->borderTop() + box->borderBottom()) - (m_hBar ? m_hBar->height() : resizeControlSize));
Ditto.
> Source/WebCore/rendering/RenderLayer.cpp:2594 > + box->height() - box->borderBottom() - m_hBar->height(), > + box->width() - (box->borderLeft() + box->borderRight()) - (m_vBar ? m_vBar->width() : resizeControlSize), > + m_hBar->height());
Ditto.
> LayoutTests/ChangeLog:10 > + Reviewed by NOBODY (OOPS!).
This line should appear before the long description.
> LayoutTests/platform/chromium/fast/events/rtl-scrollbar.html:1 > +<html>
No DOCTYPE?
> LayoutTests/platform/chromium/fast/events/rtl-scrollbar.html:16 > +// Save the vertical-scroll offset of the above <div> element before sending a > +// click event. If we successfully scroll down the element, this offset should > +// become greather than this value.
I don't think we need this comment.
> LayoutTests/platform/chromium/fast/events/rtl-scrollbar.html:24 > + eventSender.mouseMoveTo(10, 300);
You can do mouseMoveTo(overflow.offsetLeft + 5, overflow.offsetTop + overflow.offsetHeight - 50); instead of putting div at the right location.
> LayoutTests/platform/chromium/fast/events/rtl-scrollbar.html:29 > + // Wait until we finish rendering the element. > + setTimeout(finished, 1000);
One second seems like an excess amount of time to wait. Probably setTimeout(finished, 0) is sufficient. Also, I don't this comment is useful because the code is quite self-evident.
> LayoutTests/platform/chromium/fast/events/rtl-scrollbar.html:34 > + // Verify the vertical-scroll offset becomes greater than the saved one.
The code is self-evident.
Eric Seidel (no email)
Comment 35
2011-12-13 15:49:07 PST
Comment on
attachment 114018
[details]
Patch v7 View in context:
https://bugs.webkit.org/attachment.cgi?id=114018&action=review
This patch feels like it begs for some sort of abstraction. It's unclear to me what that abstraction should look like, but a series of ifdefs seems wrong. Can you clarify for me (and in the ChangeLog) which platforms would want this behavior vs. not? Could we have a rtlAwareVerticalScrollbarWidth() which returns 0 when this is disabled, and thus we only would need the #ifdef in one place?
> Source/WebCore/rendering/RenderBlock.cpp:1475 > +#if USE(RTL_SCROLLBAR)
What platforms would want this disabled? Normally we have defaults for these sorts of things in Platform.h.
Eric Seidel (no email)
Comment 36
2011-12-13 15:54:39 PST
Comment on
attachment 114018
[details]
Patch v7 This seems like a lot of copy-paste code. I'm willing to believe that this *is* the right solution, but I need you to convince me of that. Why is this the right abstraction layer? Can we make this change at a lower level? Could we add helper functions like "adjustRectForRTLAwareScrollBar" which would contain this ifdef and do nothing when this ifdef is disabled? I'm nto sure what the right way to write this change is. You are *much* more familiar with this code than I am, and I trust your judgement! I do, however need you to convince me, and future readers of this patch, (in the ChangeLog, ideally) that this is the right way to go. If you can come up with a solution which involves less copy-paste code, that would be ideal. Thanks again for the patch!
Aharon (Vladimir) Lanin
Comment 37
2011-12-31 09:46:47 PST
A gentle reminder: this bug is causing problems in various Google apps. There is no workaround.
Hironori Bono
Comment 38
2012-01-06 05:14:03 PST
Created
attachment 121427
[details]
Patch v8 (refactored) Greetings, Many thanks for your review and comments. Also sorry for my slow update. This feature s enabled only on Chromium just because Dave told Safari did not need it as written in his
comment #12
. (Even though I'm not sure if other ports need it, I would like to disable it because it may surprise them to change the behavior of scrollbars without noticing them.) As you pointed out, my previous change has lots of copy-and-paste code. (This is just because I could not find good function names.) I have created three new functions (rtlAwareCornerX, rtlAwareVerticalScrollbarX, and rtlAwareHorizontalScrollbarX) to simplify this change. (Unfortunately, we need three functions: the first one is for moving a resizer, the second one is for moving a vertical scrollbar, and the third one is for moving a horizontal scrollbar, respectively.) Moving a vertical scrollbar needs to move a horizontal scrollbar and a resizer. Regards, Hironori Bono (In reply to
comment #36
)
> (From update of
attachment 114018
[details]
) > This seems like a lot of copy-paste code. > > I'm willing to believe that this *is* the right solution, but I need you to convince me of that. > > Why is this the right abstraction layer? Can we make this change at a lower level? Could we add helper functions like "adjustRectForRTLAwareScrollBar" which would contain this ifdef and do nothing when this ifdef is disabled? > > I'm nto sure what the right way to write this change is. You are *much* more familiar with this code than I am, and I trust your judgement! > > I do, however need you to convince me, and future readers of this patch, (in the ChangeLog, ideally) that this is the right way to go. > > If you can come up with a solution which involves less copy-paste code, that would be ideal. > > Thanks again for the patch!
WebKit Review Bot
Comment 39
2012-01-06 06:23:52 PST
Comment on
attachment 121427
[details]
Patch v8 (refactored)
Attachment 121427
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11145364
New failing tests: fast/block/float/028.html fast/overflow/overflow-rtl-vertical.html fast/events/offsetX-offsetY.html fast/block/float/026.html
WebKit Review Bot
Comment 40
2012-01-06 07:19:04 PST
Comment on
attachment 121427
[details]
Patch v8 (refactored)
Attachment 121427
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11142397
New failing tests: fast/block/float/028.html fast/overflow/overflow-rtl-vertical.html fast/events/offsetX-offsetY.html fast/block/float/026.html
Ryosuke Niwa
Comment 41
2012-01-06 10:40:16 PST
Comment on
attachment 121427
[details]
Patch v8 (refactored) View in context:
https://bugs.webkit.org/attachment.cgi?id=121427&action=review
Great! New patch looks much cleaner.
> Source/WebCore/rendering/RenderLayer.cpp:1952 > +LayoutUnit RenderLayer::rtlAwareVerticalScrollbarX(int minX, int maxX) const
We normally use the word "start" to mean left for LTR and right for RTL so how about verticalScrollbarStart?
> Source/WebCore/rendering/RenderLayer.cpp:1962 > +LayoutUnit RenderLayer::rtlAwareHorizontalScrollbarX(int minX) const
horizontalScrollbarStart?
Hironori Bono
Comment 42
2012-01-12 21:55:29 PST
Created
attachment 122368
[details]
Patch v9 (renamed function names) Greetings Niwa-san, Many thanks for your comments. I have renamed the functions added by this change. Also, I have disabled moving scrollbars when -webkit-writing-mode is vertical-lr or vertical rl. (I notice we also need to change Y positions to support them.) Should this change support them as well, or should I use another change to support them? By the way, this change ALWAYS moves horizontal scrollbars of RTL elements on Chromium. That is, this change needs rebaselines for some layout tests that use RTL elements: "fast/block/float/026.html", "fast/block/float/028.html", "fast/events/offsetX-offsetY.html". (Unfortunately, the first two tests are pixel ones and I cannot get rebaselined results for all platforms.) Regards, Hironori Bono (In reply to
comment #41
)
> (From update of
attachment 121427
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=121427&action=review
> > Great! New patch looks much cleaner. > > > Source/WebCore/rendering/RenderLayer.cpp:1952 > > +LayoutUnit RenderLayer::rtlAwareVerticalScrollbarX(int minX, int maxX) const > > We normally use the word "start" to mean left for LTR and right for RTL so how about verticalScrollbarStart? > > > Source/WebCore/rendering/RenderLayer.cpp:1962 > > +LayoutUnit RenderLayer::rtlAwareHorizontalScrollbarX(int minX) const > > horizontalScrollbarStart?
WebKit Review Bot
Comment 43
2012-01-12 23:15:22 PST
Comment on
attachment 122368
[details]
Patch v9 (renamed function names)
Attachment 122368
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11152456
New failing tests: fast/block/float/028.html fast/events/offsetX-offsetY.html fast/block/float/026.html
WebKit Review Bot
Comment 44
2012-01-13 00:03:33 PST
Comment on
attachment 122368
[details]
Patch v9 (renamed function names)
Attachment 122368
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11152465
New failing tests: fast/block/float/028.html fast/events/offsetX-offsetY.html fast/block/float/026.html
Ryosuke Niwa
Comment 45
2012-01-30 10:52:26 PST
Comment on
attachment 122368
[details]
Patch v9 (renamed function names) View in context:
https://bugs.webkit.org/attachment.cgi?id=122368&action=review
Does your patch work for a block with writing-mode: bt-rl?
> Source/WebCore/rendering/RenderBlock.cpp:1497 > + if (!style()->isLeftToRightDirection() && style()->isHorizontalWritingMode())
Can we move !style()->isLeftToRightDirection() to the outer if-statement so that we don't make an extra function call to addOverflowFromChild?
> Source/WebCore/rendering/RenderBlock.cpp:1898 > + if (!style()->isLeftToRightDirection() && style()->isHorizontalWritingMode())
Instead of duplicating this condition throughout the codebase, can we add an inline function to wrap it? e.g. style()->shouldPlaceVerticalScrollbarOnLeft()
> Source/WebCore/rendering/RenderBox.cpp:1232 > // Subtract out scrollbars if we have them.
You should add an early exit when !layer() to avoid duplicating the if-statement.
Hironori Bono
Comment 46
2012-01-31 01:59:28 PST
Greetings Niwa-san, Many thanks for your comments. Is it possible to clarify a couple of your comments before applying them? (In reply to
comment #45
)
> Can we move !style()->isLeftToRightDirection() to the outer if-statement so that we don't make an extra function call to addOverflowFromChild?
Does this mean we just call addOverflowFromChild(positionedObject) (not addOverflowFromChild(positionedObject, IntSize(...))) when !style()->isLeftToRightDirection() is true? (We need to call addOverflowFromChild itself for non-fixed objects as the original code calls.)
> > Source/WebCore/rendering/RenderBlock.cpp:1898 > > + if (!style()->isLeftToRightDirection() && style()->isHorizontalWritingMode()) > > Instead of duplicating this condition throughout the codebase, can we add an inline function to wrap it? > e.g. style()->shouldPlaceVerticalScrollbarOnLeft()
In my personal opinion, I wonder if we can call this function 'vertical'. When -webkit-writing-mode is vertical-rl or vertical-lr, this scrollbar is used for scrolling text "horizontally". For example, when we open "LayoutTests/fast/overflow/overflow-rtl-vertical.html" on Safari, it shows a scrollbar above its text. When we apply my patch v8, it moves the scrollbar below its text. Regards, Hironori Bono
Ryosuke Niwa
Comment 47
2012-01-31 11:37:49 PST
(In reply to
comment #46
)
> (In reply to
comment #45
) > > Can we move !style()->isLeftToRightDirection() to the outer if-statement so that we don't make an extra function call to addOverflowFromChild? > > Does this mean we just call addOverflowFromChild(positionedObject) (not addOverflowFromChild(positionedObject, IntSize(...))) when !style()->isLeftToRightDirection() is true? (We need to call addOverflowFromChild itself for non-fixed objects as the original code calls.)
Sorry, that comment seems bogus. What I really meant is move "if (positionedObject->style()->position() != FixedPosition)" outside of if-defs to be shared. Then, you only need to wrap two lines inside if-defs (x -= verticalScrollbarWidth(); and if before that).
> > > Source/WebCore/rendering/RenderBlock.cpp:1898 > > > + if (!style()->isLeftToRightDirection() && style()->isHorizontalWritingMode()) > > > > Instead of duplicating this condition throughout the codebase, can we add an inline function to wrap it? > > e.g. style()->shouldPlaceVerticalScrollbarOnLeft() > > In my personal opinion, I wonder if we can call this function 'vertical'. When -webkit-writing-mode is vertical-rl or vertical-lr, this scrollbar is used for scrolling text "horizontally". For example, when we open "LayoutTests/fast/overflow/overflow-rtl-vertical.html" on Safari, it shows a scrollbar above its text. When we apply my patch v8, it moves the scrollbar below its text.
Hm... how about shouldPlaceBlockDirectionScrollbarOnLogicalLeft() then ?
Hironori Bono
Comment 48
2012-02-03 03:32:43 PST
Created
attachment 125303
[details]
Patch v10 (Applied comments) Greetings Niwa-san, Many thanks for your comments. (In reply to
comment #47
)
> Sorry, that comment seems bogus. What I really meant is move "if (positionedObject->style()->position() != FixedPosition)" outside of if-defs to be shared. Then, you only need to wrap two lines inside if-defs (x -= verticalScrollbarWidth(); and if before that).
Done. Thanks for your correction.
> Hm... how about shouldPlaceBlockDirectionScrollbarOnLogicalLeft() then ?
Done. I should have describe this issue when I noticed it. Regards, Hironori Bono
WebKit Review Bot
Comment 49
2012-02-03 04:49:26 PST
Comment on
attachment 125303
[details]
Patch v10 (Applied comments)
Attachment 125303
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11418295
New failing tests: fast/block/float/028.html fast/events/offsetX-offsetY.html fast/block/float/026.html
WebKit Review Bot
Comment 50
2012-02-03 06:05:59 PST
Comment on
attachment 125303
[details]
Patch v10 (Applied comments)
Attachment 125303
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11422247
New failing tests: fast/block/float/028.html fast/events/offsetX-offsetY.html fast/block/float/026.html
Eric Seidel (no email)
Comment 51
2012-02-09 10:48:09 PST
Comment on
attachment 125303
[details]
Patch v10 (Applied comments) View in context:
https://bugs.webkit.org/attachment.cgi?id=125303&action=review
This code looks right to me. I think you could have simplified the #defines by moving them as noted below, but I also think this i OK. Thank you for hte patch.
> Source/WebCore/rendering/RenderLayer.cpp:1831 > + return IntRect(cornerStart(layer, bounds.x(), bounds.maxX(), horizontalThickness),
I'm not sure what you mean by "corner start" here?
> Source/WebCore/rendering/style/RenderStyle.h:966 > + bool shouldPlaceBlockDirectionScrollbarOnLogicalLeft() const { return !isLeftToRightDirection() && isHorizontalWritingMode(); }
It seems it would have been simpler to put the #if around this function, and just define a version of thsi function which only returns false when RTL_SCROLLBAR is disabled.
Hironori Bono
Comment 52
2012-02-16 03:32:45 PST
Created
attachment 127350
[details]
Patch v11 (Applied comments from Eric) Greetings Eric, Thanks for your review and comments. I have applied your comments and uploaded the updated one. Regards, Hironori Bono
WebKit Review Bot
Comment 53
2012-02-16 06:00:46 PST
Comment on
attachment 127350
[details]
Patch v11 (Applied comments from Eric)
Attachment 127350
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11534808
New failing tests: fast/block/float/028.html fast/events/offsetX-offsetY.html fast/block/float/026.html
Ryosuke Niwa
Comment 54
2012-02-23 14:02:42 PST
Comment on
attachment 127350
[details]
Patch v11 (Applied comments from Eric) Where is the resize box rendered after your patch? Ojan pointed out a good point in
https://bugs.webkit.org/show_bug.cgi?id=9223
that resize handles and scrollbar should appear on the same side. Does your patch move the resize box as well?
Hironori Bono
Comment 55
2012-02-23 17:44:26 PST
Greetings Niwa-san, Thanks for your feedbakc. Yes, cornerStart() moves it. (This RenderLayer class uses 'cornerRect' probably because not all input boxes have resizers.) Regards, Hironori Bono (In reply to
comment #54
)
> (From update of
attachment 127350
[details]
) > Where is the resize box rendered after your patch? Ojan pointed out a good point in
https://bugs.webkit.org/show_bug.cgi?id=9223
that resize handles and scrollbar should appear on the same side. > > Does your patch move the resize box as well?
Ryosuke Niwa
Comment 56
2012-02-23 18:15:43 PST
(In reply to
comment #55
)
> Greetings Niwa-san, > > Thanks for your feedbakc. > Yes, cornerStart() moves it. (This RenderLayer class uses 'cornerRect' probably because not all input boxes have resizers.)
Fantastic!
Ryosuke Niwa
Comment 57
2012-02-23 18:18:28 PST
Comment on
attachment 127350
[details]
Patch v11 (Applied comments from Eric) r=me trusting eseidel's previous review. Please add a test for resize handle (could be a followup patch on the
bug 9223
).
Hironori Bono
Comment 58
2012-02-29 20:41:54 PST
Created
attachment 129623
[details]
Patch v12 (Updated to ToT) Greetings, Somehow webkit-patch land-from-bug cannot land my previous change. I would like to upload the new one to see it works. Regards, Hironori Bono
Ryosuke Niwa
Comment 59
2012-02-29 20:46:57 PST
Comment on
attachment 129623
[details]
Patch v12 (Updated to ToT) View in context:
https://bugs.webkit.org/attachment.cgi?id=129623&action=review
Again, please add a test for resize handle as a follow up.
> Source/WebCore/ChangeLog:10 > + Reviewed by NOBODY (OOPS!).
Reviewed by line should appear above the description but below the bug url.
> Source/WebKit/chromium/ChangeLog:10 > + Reviewed by NOBODY (OOPS!).
Ditto.
> LayoutTests/ChangeLog:10 > + Reviewed by NOBODY (OOPS!).
Ditto.
Hironori Bono
Comment 60
2012-02-29 21:07:32 PST
Greetings Niwa-san, Thanks for your comment. (In reply to
comment #59
)
> Again, please add a test for resize handle as a follow up.
This change just moves a resizer to the left wide. In brief, I a little wonder if it is totally the expected behavior of
Bug 9223
. (Does it expect mirroring a resizer bitmap as well as moving it to the left side?) Regards, Hironori Bono
WebKit Review Bot
Comment 61
2012-03-01 03:26:21 PST
Comment on
attachment 129623
[details]
Patch v12 (Updated to ToT)
Attachment 129623
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11779380
New failing tests: fast/block/float/028.html fast/events/offsetX-offsetY.html fast/block/float/026.html
Hajime Morrita
Comment 62
2012-03-01 22:33:10 PST
Comment on
attachment 129623
[details]
Patch v12 (Updated to ToT) Clearing flags on attachment: 129623 Committed
r109512
: <
http://trac.webkit.org/changeset/109512
>
Hajime Morrita
Comment 63
2012-03-01 22:33:24 PST
All reviewed patches have been landed. Closing bug.
Kentaro Hara
Comment 64
2012-03-02 02:25:07 PST
Based on a discussion with morrita@ and hbono@, I marked the following tests as FAIL: fast/block/float/026.html fast/block/float/028.html fast/events/offsetX-offsetY.html fast/overflow/unreachable-overflow-rtl-bug.html
http://trac.webkit.org/changeset/109537
Hironori Bono
Comment 65
2012-03-02 02:42:37 PST
Greetings Hara-san, Thanks a lot for noticing these failures. I will rebaseline them. (It may be better to rebaseline them after fixing
Bug 9223
? Fixing
Bug 9223
needs to change a resizer image, i.e. it probably changes the output images of these tests.) Regards, Hironori Bono (In reply to
comment #64
)
> Based on a discussion with morrita@ and hbono@, I marked the following tests as FAIL: > > fast/block/float/026.html > fast/block/float/028.html > fast/events/offsetX-offsetY.html > fast/overflow/unreachable-overflow-rtl-bug.html > >
http://trac.webkit.org/changeset/109537
Ryosuke Niwa
Comment 66
2012-03-02 14:20:46 PST
I think adamk has already rebaselined them.
Aharon (Vladimir) Lanin
Comment 67
2012-04-16 04:19:49 PDT
I am reopening because iframes are not being handled properly. Their scrollbar is currently always on the right, even if both the <iframe> and the document inside it have direction:rtl. For an <iframe>, the scrollbar should be on the start side of the document inside it (even though when displayed in a separate tab, not an <iframe>, the document's direction should not determine the scrollbar side). If the thing inside the <iframe> does not have a direction, e.g. it is an image, it should be on the start side of the <iframe>'s direction. Attaching a test case. Please note that this is the same requirement I originally stated in
comment 16
(quoted below), although perhaps not clearly enough. (In reply to
comment #16
)
> In frames and iframes hosting HTML documents, the dir attribute (and CSS direction) of the frame/iframe element has no visible effect, since it is completely overridden by the direction of the HTML document in the frame. Thus, the vertical scrollbar position should be determined by the frame's HTML document too. Thus, the exception for frames and iframes makes sense. > > The rule is simple: for RTL content, the vertical scrollbar should be on the left side. The direction of the content in a frame is given by the document, not the frame element. > > As for top-level documents, this is indeed an exception to the rule. The reason for the exception is that it is even more important to have the *window*'s vertical scrollbar in a fixed position as one surfs from one page to another of the opposite direction, since it saves the user having to check the direction of the page or visually find the scrollbar before starting to move the mouse to it. > > Please note that this rationale does not apply to internal elements, since their scrollbar is in an arbitrary position in the window anyway.
Eric Seidel (no email)
Comment 68
2012-04-16 04:27:12 PDT
Probably better to open a new bug than to re-open this one. This one has served us well, but trying to work here further is likely just to make reviews harder as the number of patches/comments is somewhat intimidating. :) You can of course reference this bug for "further information", or mark it as a dependent when you file the new one with your test case.
Aharon (Vladimir) Lanin
Comment 69
2012-04-16 04:48:42 PDT
Created
attachment 137316
[details]
Test case. Extract the files in the zip and open iframe-scollbar-outer.html.
Aharon (Vladimir) Lanin
Comment 70
2012-04-16 05:49:34 PDT
(In reply to
comment #68
)
> Probably better to open a new bug than to re-open this one. This one has served us well, but trying to work here further is likely just to make reviews harder as the number of patches/comments is somewhat intimidating. :) > > You can of course reference this bug for "further information", or mark it as a dependent when you file the new one with your test case.
Ok, opened
bug 84026
for the <iframe> issue; marking this as resolved again.
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