Closed
Bug 868416
Opened 12 years ago
Closed 11 years ago
Scrollbar size should not be altered by page-zoom
Categories
(Core :: Widget: Cocoa, defect)
Tracking
()
RESOLVED
FIXED
mozilla25
Tracking | Status | |
---|---|---|
firefox21 | --- | unaffected |
firefox22 | --- | unaffected |
firefox23 | + | verified |
firefox24 | + | verified |
firefox25 | --- | verified |
firefox-esr17 | --- | unaffected |
People
(Reporter: rik, Assigned: spohl)
References
Details
(Whiteboard: [lion-scrollbars+])
Attachments
(2 files, 10 obsolete files)
453.04 KB,
image/png
|
Details | |
4.82 KB,
patch
|
spohl
:
review+
bajaj
:
approval-mozilla-aurora+
lsblakk
:
approval-mozilla-beta+
|
Details | Diff | Splinter Review |
If you're using a zoom level greater than 100% on a page, the scrollbars are larger than they should be. See attached screenshot.
Updated•12 years ago
|
Summary: New scrollbars width should not depend of the zoom level → Scrollbar size should not be altered by page-zoom
Comment 1•12 years ago
|
||
I have the same issue. Here, the details :
User Agent: Build identifier: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20130508 Firefox/23.0
Steps to reproduce: Open any webpage and zoomm in or zoom out ("Cmd"-"+" or "Cmd"-"-"). This bug appear with the integration of Lion's (MacOS X.7) Overlay Scrollbars.
Actual results:
All the scrollbars of the page(vertical, horizontal ones, of the navigator window and in a text box for example) gain width when zoom in and loose width when zoom out.
Expected results:
Constant width of the scroll bar.
Comment 2•12 years ago
|
||
This is the beginning of a patch, which mostly works fine, except that the zoomed scrollbar's background is a bit too short. For example, for the vertical scrollbar, the background does not span the entire height of the document. Stephen, do you have any idea what else I need to handle?
Assignee: nobody → ehsan
Status: NEW → ASSIGNED
Attachment #751277 -
Flags: feedback?(spohl.mozilla.bugs)
Assignee | ||
Comment 3•12 years ago
|
||
Comment on attachment 751277 [details] [diff] [review]
WIP
Review of attachment 751277 [details] [diff] [review]:
-----------------------------------------------------------------
Thank you for taking this on!
I can't reproduce the background being too short (or I'm just not seeing it). Is it possible that you're in a scenario with both vertical and horizontal scrollbars? In that case, the bottom right corner is 'empty' in order for the scrollbars to not overlap. This matches what Safari is doing.
What I did notice however is that the thumb is still affected by the zoom level. If the page is zoomed in and scrolled to the bottom, the thumb is only half way down the page. The opposite is the case when the page is zoomed out.
When scrolling in and out, the width of the scrollbars change minimally, but noticeably. A rounding error maybe, resulting in different widths being returned?
The only other thing I noticed is that your patch doesn't currently work with HiDPI. The scrollbars are barely visible (1px?) in HiDPI mode.
Could you use GetMinimumWidgetSize to determine the width and height of the scrollbar instead of determining the zoomRatio and risking rounding errors?
Attachment #751277 -
Flags: feedback?(spohl.mozilla.bugs)
Comment 4•12 years ago
|
||
I wonder what bug 636564 changed, this should have been fixed by bug 800668...
Maybe on of the changes in nsGfxScrollFrameInner::LayoutScrollbars caused this. There is a CSSPixelsToAppUnits(15) in there, which could potentially be affected by page zoom.
Comment 5•12 years ago
|
||
Changing this code in GetMinimumWidgetSize doesn't fix the bug...
Comment 6•12 years ago
|
||
OK, the problem is that when the margins specified here <https://hg.mozilla.org/mozilla-central/rev/0c513ba74137#l22.23> deflate the scrollbar rects in nsGfxScrollFrameInner::LayoutScrollbars, we get huge rectangles in zoomed mode because those values are specified in px.
Unassigning as I'm not sure what the best way to solve that is.
Assignee: ehsan → nobody
Comment 8•12 years ago
|
||
(In reply to :Ehsan Akhgari (needinfo? me!) from comment #6)
> OK, the problem is that when the margins specified here
> <https://hg.mozilla.org/mozilla-central/rev/0c513ba74137#l22.23> deflate the
> scrollbar rects
Oh, I see. Hmm, so -moz-margin-start: -16px should really be -moz-margin-start: -15devpx... or more generally, "used width"...
Or maybe we should use the system metric "use overlay scrollbars" to make nsGfxScrollFrameInner apply the correct negative margins automatically, and take them out of the CSS. Roc, any ideas?
Comment 9•12 years ago
|
||
Is bug 401213 affected by the same reason as this bug?
Assignee | ||
Comment 10•12 years ago
|
||
This patch seems to fix this bug. It may be too narrow for what we need to do and we may want to address it more generally (see comment 8).
Requesting feedback to get roc's view on this patch and comment 8.
Attachment #751277 -
Attachment is obsolete: true
Attachment #751441 -
Flags: feedback?(roc)
(In reply to Markus Stange from comment #8)
> Or maybe we should use the system metric "use overlay scrollbars" to make
> nsGfxScrollFrameInner apply the correct negative margins automatically, and
> take them out of the CSS. Roc, any ideas?
That sounds like the best option. So something like Stephen's patch, but for overlay scrollbars remove the existing CSS margin and just add a negative margin of the width we know it should have.
Updated•12 years ago
|
Whiteboard: [lion-scrollbars+]
Assignee | ||
Updated•12 years ago
|
Assignee: nobody → spohl.mozilla.bugs
Assignee | ||
Comment 13•12 years ago
|
||
(In reply to Robert O'Callahan (:roc) (Mozilla Corporation) from comment #11)
> That sounds like the best option. So something like Stephen's patch, but for
> overlay scrollbars remove the existing CSS margin and just add a negative
> margin of the width we know it should have.
Could you help me understand your feedback a bit better? I might be repeating obvious things here, please bear with me:
The negative margin for overlay scrollbars should change depending on the zoom level. In the case of the vertical scrollbar, margin.left should be >= -960. -960 is the -16px times 60 app units per CSS pixel at 0 zoom level. Getting the regular margin first and then scaling as my patch is doing (for overlay scrollbars only) seemed reasonable since this would continue to be correct even if the -16px margin in the CSS changed in the future.
Are you saying that instead of dividing -960 back to -16px and then scaling based on the zoom level we should query the theme for the -16px directly and then scale? Or are you suggesting we generate this negative margin somewhere/somehow else?
Flags: needinfo?(roc)
Comment 14•12 years ago
|
||
(In reply to Stephen Pohl [:spohl] from comment #13)
> Or are you suggesting we generate this negative margin
> somewhere/somehow else?
My suggestion was to override any margin specified in the CSS and hardcode it to "equal to the negative used width" - but only when the overlay scrollbars pref is set, of course.
In LayoutScrollbars can get the size of the scrollbar using scrollbarbox->GetPrefSize. In the other places where you apply the margin, you can probably just set the width or height of the resulting box to zero instead.
Flags: needinfo?(roc)
Assignee | ||
Comment 15•12 years ago
|
||
Incorporated Markus' feedback. I kept this patch strictly limited to LayoutScrollbars for now. It seems to be all we need to fix the bug here.
Confirmed to be working with HiDPI on and off as well as positive and negative zoom.
Attachment #751441 -
Attachment is obsolete: true
Attachment #751441 -
Flags: feedback?(roc)
Attachment #752926 -
Flags: review?(roc)
Comment on attachment 752926 [details] [diff] [review]
Patch
Review of attachment 752926 [details] [diff] [review]:
-----------------------------------------------------------------
::: layout/generic/nsGfxScrollFrame.cpp
@@ +3716,5 @@
> nsMargin margin;
> mVScrollbarBox->GetMargin(margin);
> + if (LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars) != 0) {
> + nscoord left = -1 * mVScrollbarBox->GetPrefSize(aState).width;
> + margin.left = std::max(margin.left, left);
I think you should just be setting margin here, not overwriting it. Then we can remove the negative margin from the stylesheet.
Assignee | ||
Comment 17•12 years ago
|
||
Removed margin for overlay scrollbars from stylesheet and defaulting to (0, 0, 0, 0) margin in LayoutScrollbars. This seems to work properly everywhere I tested it.
Attachment #752926 -
Attachment is obsolete: true
Attachment #752926 -
Flags: review?(roc)
Attachment #753351 -
Flags: review?(roc)
Assignee | ||
Comment 18•12 years ago
|
||
Comment on attachment 753351 [details] [diff] [review]
Patch
Argh, I focused my attention on the size of the scrollbars and missed the fact that we started to draw a white background for the scrollbars.
Attachment #753351 -
Flags: review?(roc)
Assignee | ||
Comment 19•12 years ago
|
||
This seems to work properly now. Flagging mstange for feedback to make sure that I incorporated all of his comments from our conversation on IRC.
Attachment #753351 -
Attachment is obsolete: true
Attachment #753459 -
Flags: review?(roc)
Attachment #753459 -
Flags: feedback?(mstange)
Comment 20•12 years ago
|
||
Comment on attachment 753459 [details] [diff] [review]
Patch
This is what I had in mind, yes.
Roc: To clarify, should we ignore any CSS margins on the scrollbar completely?
>diff --git a/layout/generic/nsGfxScrollFrame.cpp b/layout/generic/nsGfxScrollFrame.cpp
>--- a/layout/generic/nsGfxScrollFrame.cpp
>+++ b/layout/generic/nsGfxScrollFrame.cpp
>@@ -219,34 +219,32 @@ static void
> GetScrollbarMetrics(nsBoxLayoutState& aState, nsIFrame* aBox, nsSize* aMin,
> nsSize* aPref, bool aVertical)
> {
> NS_ASSERTION(aState.GetRenderingContext(),
> "Must have rendering context in layout state for size "
> "computations");
>
> if (aMin) {
>- *aMin = aBox->GetMinSize(aState);
>- nsBox::AddMargin(aBox, *aMin);
>- if (aMin->width < 0) {
>- aMin->width = 0;
>+ if (LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars) == 0) {
>+ *aMin = aBox->GetMinSize(aState);
>+ nsBox::AddMargin(aBox, *aMin);
If we want to be consistent with ignoring CSS margins, this line should be removed, too.
> }
>- if (aMin->height < 0) {
>- aMin->height = 0;
>+ else {
>+ *aMin = nsSize(0, 0);
maybe simpler as aMin->SizeTo(0, 0);, your choice
>+ nsMargin margin(0, 0, 0, 0);
>+ vRect.Deflate(margin);
This does exactly nothing. :)
>+ }
>+ else {
} else {
>+ vRect.x -= mVScrollbarBox->GetPrefSize(aState).width;
>+ vRect.width += mVScrollbarBox->GetPrefSize(aState).width;
I think I would prefer:
nscoord prefWidth = mVScrollbarBox->GetPrefSize(aState).width;
vRect.Inflate(nsMargin(0, 0, 0, prefWidth));
Attachment #753459 -
Flags: feedback?(mstange) → feedback+
Assignee | ||
Comment 21•12 years ago
|
||
Comment on attachment 753459 [details] [diff] [review]
Patch
Addressing Markus' feedback before asking for review again. :-)
Attachment #753459 -
Flags: review?(roc)
Assignee | ||
Comment 22•12 years ago
|
||
Addressed Markus' feedback. This patch assumes that we want to ignore margins for scrollbars that are specified in CSS.
Markus, always feel free to chime in if I missed anything. Thanks!
Attachment #753459 -
Attachment is obsolete: true
Attachment #753477 -
Flags: review?(roc)
Comment 23•12 years ago
|
||
Comment on attachment 753477 [details] [diff] [review]
Patch
>+ nscoord prefWidth = mVScrollbarBox->GetPrefSize(aState).width;
>+ vRect.Inflate(nsMargin(0, 0, 0, prefWidth));
I just realized that this might not work in right-to-left mode. The CSS handled this by using -moz-margin-start instead of margin-left, but now it may need to be handled explicitly.
The only place where I've been able to observe a scrollbar on the left is in the locationbar autocomplete dropdown after setting intl.uidirection.en to rtl in about:config.
Oh no, and now I've noticed still another problem: Removing the CSS margin breaks the overlay effect for XUL trees, which don't have an nsGfxScrollbarFrame to layout their scrollbars.
Assignee | ||
Comment 24•12 years ago
|
||
... and we're running into a bunch of failures on try, on all platforms:
https://tbpl.mozilla.org/?tree=Try&rev=8f9725c03201
I guess the question I have for roc is: Should we continue down this path, or go back to a patch similar to the one reviewed in comment 16?
Comment 25•12 years ago
|
||
(In reply to Stephen Pohl [:spohl] from comment #24)
> ... and we're running into a bunch of failures on try, on all platforms:
So devtools use negative margins on scrollbars (floating-scrollbars.css) to achieve floating scrollbars even on platforms where the pref is not set. Good to know.
How about for non-overlay scrollbars you continue doing what we're already doing, and for overlay scrollbars, treat the preferred/min width as 0 instead of calling GetPrefSize/GetMinSize, and remove the negative margins from the stylesheet?
Assignee | ||
Comment 27•12 years ago
|
||
(In reply to Robert O'Callahan (:roc) (Mozilla Corporation) from comment #26)
> How about for non-overlay scrollbars you continue doing what we're already
> doing, and for overlay scrollbars, treat the preferred/min width as 0
> instead of calling GetPrefSize/GetMinSize, and remove the negative margins
> from the stylesheet?
Wouldn't this still leave us with the problems mentioned in comment 23? I'm not worried about the RTL support, since we can be explicit there. But what about the overlay effect for XUL trees?
Assignee | ||
Updated•12 years ago
|
Flags: needinfo?(roc)
Updated•12 years ago
|
status-firefox21:
--- → unaffected
status-firefox22:
--- → unaffected
status-firefox23:
--- → affected
status-firefox24:
--- → affected
status-firefox-esr17:
--- → unaffected
tracking-firefox23:
--- → ?
OS: All → Mac OS X
I'm not sure what to do about XUL trees. Hmm.
Maybe we should modify computation of scrollbar frames' margins during reflow to override the style system's margins with a negative margin equal to the frame's width/height. Say in nsCSSOffsetState::ComputeMargin.
Flags: needinfo?(roc)
Updated•12 years ago
|
tracking-firefox24:
--- → +
Comment 29•11 years ago
|
||
Or maybe we should just keep the negative margins in the CSS as an additional measure for trees. Trees are usually not shown in any zoomable context, so this bug doesn't really apply to them. So, to sum up:
- Start with the current patch
- Add the old margin handling back in, but make it only apply when the overlay
pref isn't set, so that devtools scrollbars on Linux/Windows work again
- Add the old CSS back in so that XUL trees work again
How does that sound?
Assignee | ||
Comment 30•11 years ago
|
||
This is a work in progress that computes margins in nsCSSOffsetState::ComputeMargin without margins specified in CSS. One of the problems I ran into with this approach is that during reflow, the scrollable frame is reflown before the scrollbars (initiated in PresShell::ProcessReflowCommands). This means that the new margins were computed only after the scrollbars had been laid out (resulting in zoomed scrollbars). The way I currently work around this is by initiating a reflow of the scrollbars during the reflow of the scrollable frame in GetScrollbarMetrics.
One thing that still doesn't work is switching between regular and overlay scrollbars (bug 868498), and I haven't made this work for XUL trees yet.
Assignee | ||
Comment 31•11 years ago
|
||
(In reply to Markus Stange from comment #29)
> Or maybe we should just keep the negative margins in the CSS as an
> additional measure for trees. Trees are usually not shown in any zoomable
> context, so this bug doesn't really apply to them. So, to sum up:
> - Start with the current patch
> - Add the old margin handling back in, but make it only apply when the
> overlay
> pref isn't set, so that devtools scrollbars on Linux/Windows work again
> - Add the old CSS back in so that XUL trees work again
>
> How does that sound?
Based on the fact that the wip patch in comment 30 is quickly becoming messy (forcing reflows of scrollbars during reflow of scrollable frame, etc.), I like this idea. On the other hand, there may be clean ways to work around the problems I'm facing in the wip patch.
roc, would you mind telling me what path I should proceed on? Thanks!
Flags: needinfo?(roc)
(In reply to Markus Stange from comment #29)
> Or maybe we should just keep the negative margins in the CSS as an
> additional measure for trees. Trees are usually not shown in any zoomable
> context, so this bug doesn't really apply to them. So, to sum up:
> - Start with the current patch
> - Add the old margin handling back in, but make it only apply when the
> overlay
> pref isn't set, so that devtools scrollbars on Linux/Windows work again
> - Add the old CSS back in so that XUL trees work again
>
> How does that sound?
This won't work on High-DPI systems where 1 CSS pixel != 1 device pixel by default.
Flags: needinfo?(roc)
(In reply to Stephen Pohl [:spohl] from comment #30)
> Created attachment 759499 [details] [diff] [review]
> Wip that computes margins in nsCSSOffsetState::ComputeMargin
>
> This is a work in progress that computes margins in
> nsCSSOffsetState::ComputeMargin without margins specified in CSS. One of the
> problems I ran into with this approach is that during reflow, the scrollable
> frame is reflown before the scrollbars (initiated in
> PresShell::ProcessReflowCommands). This means that the new margins were
> computed only after the scrollbars had been laid out (resulting in zoomed
> scrollbars). The way I currently work around this is by initiating a reflow
> of the scrollbars during the reflow of the scrollable frame in
> GetScrollbarMetrics.
>
> One thing that still doesn't work is switching between regular and overlay
> scrollbars (bug 868498), and I haven't made this work for XUL trees yet.
For the overlay scrollbars case, can't we just ask the theme directly for the width instead of reflowing the scrollbar to find out what it is?
Comment 34•11 years ago
|
||
(In reply to Robert O'Callahan (:roc) (Mozilla Corporation) from comment #32)
> (In reply to Markus Stange from comment #29)
> > Or maybe we should just keep the negative margins in the CSS as an
> > additional measure for trees. Trees are usually not shown in any zoomable
> > context, so this bug doesn't really apply to them. So, to sum up:
> > - Start with the current patch
> > - Add the old margin handling back in, but make it only apply when the
> > overlay
> > pref isn't set, so that devtools scrollbars on Linux/Windows work again
> > - Add the old CSS back in so that XUL trees work again
> >
> > How does that sound?
>
> This won't work on High-DPI systems where 1 CSS pixel != 1 device pixel by
> default.
But in that case, at least on Mac the native theme scales up the scrollbar size so that it corresponds to CSS pixels again. Overlay scrollbars return a width of 16devpx in LoDPI mode and 32devpx in HiDPI mode. So it should still work.
Comment 35•11 years ago
|
||
(In reply to Markus Stange from comment #34)
> But in that case, at least on Mac the native theme scales up the scrollbar
> size so that it corresponds to CSS pixels
or rather, to "screen points", which usually correspond to CSS pixels when the page is not zoomed.
(In reply to Markus Stange from comment #34)
> But in that case, at least on Mac the native theme scales up the scrollbar
> size so that it corresponds to CSS pixels again. Overlay scrollbars return a
> width of 16devpx in LoDPI mode and 32devpx in HiDPI mode. So it should still
> work.
I don't think we should rely on that.
Comment 37•11 years ago
|
||
Fair enough.
Assignee | ||
Comment 38•11 years ago
|
||
This patch eliminates the margins from the CSS completely. Works with XUL trees and RTL.
This patch also works around the flickering of scrollbars in the page info dialog (bug 870917).
Attachment #753477 -
Attachment is obsolete: true
Attachment #759499 -
Attachment is obsolete: true
Attachment #753477 -
Flags: review?(roc)
Attachment #766922 -
Flags: review?(roc)
Comment on attachment 766922 [details] [diff] [review]
Patch
Review of attachment 766922 [details] [diff] [review]:
-----------------------------------------------------------------
::: layout/generic/nsGfxScrollFrame.cpp
@@ +69,5 @@
> +/*static*/ nsMargin
> +nsGfxScrollFrameUtility::GetMargin(nsIFrame* aBox,
> + nsSize* aSize,
> + bool aVertical,
> + bool aScrollbarOnRight)
This could just be a static method defined right here, couldn't it?
::: layout/generic/nsGfxScrollFrame.h
@@ +49,5 @@
> +{
> +public:
> + static nsMargin GetMargin(nsIFrame* aBox, nsSize* aSize, bool aVertical,
> + bool aScrollbarOnRight);
> +};
Why does this need to be exposed in nsGfxScrollFrame.h?
::: layout/xul/base/src/nsBox.cpp
@@ +382,5 @@
> + else {
> + aMargin.left = -1 * mRect.Width();
> + }
> + }
> + return NS_OK;
Can't nsScrollbarFrame override GetMargin and check LookAndFeel directly?
::: layout/xul/base/src/nsScrollbarFrame.cpp
@@ +50,5 @@
> mState |= NS_FRAME_REFLOW_ROOT;
> +
> + if (LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars) != 0) {
> + aContent->SetAttr(kNameSpaceID_None, nsGkAtoms::overlay_scrollbars,
> + NS_LITERAL_STRING("1"), false);
It is not a good idea to mutate the DOM like this.
Why do we even need this attribute? We can just check LookAndFeel directly instead?
Assignee | ||
Comment 40•11 years ago
|
||
Thanks :roc! I agree with all of your points. Your feedback should be addressed in this patch.
Attachment #766922 -
Attachment is obsolete: true
Attachment #766922 -
Flags: review?(roc)
Attachment #767556 -
Flags: review?(roc)
Comment on attachment 767556 [details] [diff] [review]
Patch
Review of attachment 767556 [details] [diff] [review]:
-----------------------------------------------------------------
::: layout/generic/nsGfxScrollFrame.cpp
@@ +87,5 @@
> + }
> + else {
> + margin.top = -1 * aSize->height;
> + }
> + }
It's not clear to me why the nsGfxScrollFrame changes are needed. aBox->GetMargin should return the correct negative margin for nsScrollbarFrames now, shouldn't it?
::: layout/xul/base/src/nsScrollbarFrame.cpp
@@ +171,5 @@
> + else {
> + aMargin.left = -1 * mRect.Width();
> + }
> + }
> + return NS_OK;
Making the margin depend on mRect is bad.
I think in this case you should call GetPrefSize and negate its dimensions.
Assignee | ||
Comment 42•11 years ago
|
||
(In reply to Robert O'Callahan (:roc) (Mozilla Corporation) from comment #41)
> ::: layout/xul/base/src/nsScrollbarFrame.cpp
> @@ +171,5 @@
> > + else {
> > + aMargin.left = -1 * mRect.Width();
> > + }
> > + }
> > + return NS_OK;
>
> Making the margin depend on mRect is bad.
>
> I think in this case you should call GetPrefSize and negate its dimensions.
Calling GetPrefSize requires an nsBoxLayoutState. I could pass this to GetMargin and therefore overload it, but then I wouldn't be overriding nsBox::GetMargin. We also call GetMargin in the GetMinSize case (see GetScrollbarMetrics in nsGfxScrollFrame.cpp), so this would either be a special case or a new function. I'd have to call GetMinSize instead of GetPrefSize and negate its dimensions. Is this what I should do?
> ::: layout/generic/nsGfxScrollFrame.cpp
> @@ +87,5 @@
> > + }
> > + else {
> > + margin.top = -1 * aSize->height;
> > + }
> > + }
>
> It's not clear to me why the nsGfxScrollFrame changes are needed.
> aBox->GetMargin should return the correct negative margin for
> nsScrollbarFrames now, shouldn't it?
With an overloaded GetMargin that accepts an nsBoxLayoutState parameter, yes it would.
Assignee | ||
Comment 43•11 years ago
|
||
(In reply to Stephen Pohl [:spohl] from comment #42)
> (In reply to Robert O'Callahan (:roc) (Mozilla Corporation) from comment #41)
> > ::: layout/generic/nsGfxScrollFrame.cpp
> > @@ +87,5 @@
> > > + }
> > > + else {
> > > + margin.top = -1 * aSize->height;
> > > + }
> > > + }
> >
> > It's not clear to me why the nsGfxScrollFrame changes are needed.
> > aBox->GetMargin should return the correct negative margin for
> > nsScrollbarFrames now, shouldn't it?
>
> With an overloaded GetMargin that accepts an nsBoxLayoutState parameter, yes
> it would.
... but it would not work for XUL trees anymore (which requires GetMargin to be overridden). I'd appreciate some guidance as to how to move forward here. Maybe the solution in comment 40 is acceptable based on this?
Flags: needinfo?(roc)
(In reply to Stephen Pohl [:spohl] from comment #42)
> Calling GetPrefSize requires an nsBoxLayoutState. I could pass this to
> GetMargin and therefore overload it, but then I wouldn't be overriding
> nsBox::GetMargin. We also call GetMargin in the GetMinSize case (see
> GetScrollbarMetrics in nsGfxScrollFrame.cpp), so this would either be a
> special case or a new function. I'd have to call GetMinSize instead of
> GetPrefSize and negate its dimensions. Is this what I should do?
OK then, have nsScrollbarFrame::GetMargin call into the theme to get the scrollbar size and use that.
Flags: needinfo?(roc)
Assignee | ||
Comment 45•11 years ago
|
||
Addressed feedback and made scrollbars appear in the correct place in RTL.
Attachment #767556 -
Attachment is obsolete: true
Attachment #767556 -
Flags: review?(roc)
Attachment #768134 -
Flags: review?(roc)
Comment on attachment 768134 [details] [diff] [review]
Patch
Review of attachment 768134 [details] [diff] [review]:
-----------------------------------------------------------------
Hurrah!
::: layout/xul/base/src/nsScrollbarFrame.cpp
@@ +167,5 @@
> + if (theme) {
> + nsIntSize size;
> + bool isOverridable;
> + nsRefPtr<nsRenderingContext> rc =
> + PresContext()->PresShell()->GetReferenceRenderingContext();
Factor out calls to PresContext() into a local variable.
@@ +171,5 @@
> + PresContext()->PresShell()->GetReferenceRenderingContext();
> + theme->GetMinimumWidgetSize(rc, this, NS_THEME_SCROLLBAR, &size,
> + &isOverridable);
> + if (IsHorizontal()) {
> + aMargin.top = -1 * PresContext()->DevPixelsToAppUnits(size.height);
Just -presContext->DevPixelsToAppUnits(size.height) (and likewise below).
Attachment #768134 -
Flags: review?(roc) → review+
Assignee | ||
Comment 47•11 years ago
|
||
Thanks roc! Addressed review feedback. Carrying over r+.
Attachment #768134 -
Attachment is obsolete: true
Attachment #768137 -
Flags: review+
Assignee | ||
Comment 48•11 years ago
|
||
Comment 49•11 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla25
Assignee | ||
Comment 50•11 years ago
|
||
Comment on attachment 768137 [details] [diff] [review]
Patch
[Approval Request Comment]
Bug caused by (feature/regressing bug #): Bug 636564
User impact if declined: Overlay scrollbars change size when the web page is zoomed in/out on Mac OSX.
Testing completed (on m-c, etc.): Has been on trunk for a few days. I've also verified that scrollbars keep the correct size in recent nightlies.
Risk to taking this patch (and alternatives if risky): low
String or IDL/UUID changes made by this patch: none
Attachment #768137 -
Flags: approval-mozilla-aurora?
Updated•11 years ago
|
Attachment #768137 -
Flags: approval-mozilla-aurora? → approval-mozilla-aurora+
Comment 52•11 years ago
|
||
https://hg.mozilla.org/releases/mozilla-aurora/rev/e4f20ca64ee3
Does this need to go on beta too? Please request approval if so or set status-firefox23 to wontfix if not.
Assignee | ||
Comment 53•11 years ago
|
||
Comment on attachment 768137 [details] [diff] [review]
Patch
[Approval Request Comment]
Bug caused by (feature/regressing bug #): Bug 636564
User impact if declined: Overlay scrollbars change size when the web page is zoomed in/out on Mac OSX.
Testing completed (on m-c, etc.): Has been on trunk for a few days. I've also verified that scrollbars keep the correct size in recent nightlies.
Risk to taking this patch (and alternatives if risky): low
String or IDL/UUID changes made by this patch: none
Attachment #768137 -
Flags: approval-mozilla-beta?
Updated•11 years ago
|
Attachment #768137 -
Flags: approval-mozilla-beta? → approval-mozilla-beta+
Comment 54•11 years ago
|
||
Assignee | ||
Comment 55•11 years ago
|
||
Thank you, RyanVM!
Comment 56•11 years ago
|
||
I tried to reproduce this issue several times on Mac OS X 10.7 and on Mac OS X 10.8 on a 05/08 Nightly 23 but I can't. I don't see any difference in the size of the scrollbars when normal and zoomed.
If anyone else in QA can reproduce this bug, please verify the fix.
Comment 58•11 years ago
|
||
I don't see anymore the problem Verified Fixed with
Beta:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20100101 Firefox/23.0
BuildID: 20130711122148
Aurora:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20130711 Firefox/24.0
buildID: 20130717004002
Nightly:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20130715 Firefox/25.0
buildID:20130717030207
You need to log in
before you can comment on or make changes to this bug.
Description
•