mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-01 05:48:26 +00:00
Bug 1692721 - nsNativeBasicTheme should handle outline-offset like non-auto outline does. r=mstange
I thought we didn't support outline-offset on auto-style outline. The rect we get is already inflated, so we just got to compute the radius using that. Differential Revision: https://phabricator.services.mozilla.com/D105125
This commit is contained in:
parent
d9fd906046
commit
ca89009775
@ -0,0 +1,14 @@
|
||||
<!doctype html>
|
||||
<style>
|
||||
body { margin: 0 }
|
||||
div {
|
||||
width: 92px;
|
||||
height: 92px;
|
||||
border: 1px transparent;
|
||||
border-radius: 1px;
|
||||
outline: 1px auto;
|
||||
outline-offset: 4px;
|
||||
margin: 14px;
|
||||
}
|
||||
</style>
|
||||
<div></div>
|
@ -1,10 +1,12 @@
|
||||
<!doctype html>
|
||||
<style>
|
||||
body { margin: 0 }
|
||||
div {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border: 1px transparent;
|
||||
outline: 1px auto;
|
||||
margin: 10px;
|
||||
}
|
||||
</style>
|
||||
<div></div>
|
||||
|
@ -1,11 +1,13 @@
|
||||
<!doctype html>
|
||||
<style>
|
||||
body { margin: 0 }
|
||||
div {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border: 1px transparent;
|
||||
border-radius: 5px;
|
||||
outline: 1px auto;
|
||||
margin: 10px;
|
||||
}
|
||||
</style>
|
||||
<div></div>
|
||||
|
@ -11,6 +11,7 @@ fuzzy-if(gtkWidget,0-136,0-120) fuzzy-if(Android,0-255,0-356) fuzzy-if(d2d,0-16,
|
||||
pref(layout.css.outline-style-auto.enabled,true) skip-if(!gtkWidget&&!winWidget&&!cocoaWidget) == outline-auto-001.html outline-auto-001-ref.html # only works on platforms that supports StyleAppearance::FocusOutline
|
||||
pref(layout.css.outline-style-auto.enabled,false) == outline-auto-001.html outline-auto-001-solid-ref.html
|
||||
skip-if(nativeThemePref) != outline-auto-follows-border-radius-non-native.html outline-auto-follows-border-radius-non-native-notref.html
|
||||
skip-if(nativeThemePref) == outline-auto-follows-border-radius-non-native-02.html outline-auto-follows-border-radius-non-native.html
|
||||
== outline-initial-1a.html outline-initial-1-ref.html
|
||||
== outline-initial-1b.html outline-initial-1-ref.html
|
||||
== outline-on-table.html outline-on-table-ref.html
|
||||
|
@ -1395,13 +1395,19 @@ void nsNativeBasicTheme::PaintAutoStyleOutline(nsIFrame* aFrame,
|
||||
StrokeOptions(width));
|
||||
}
|
||||
|
||||
nsPresContext* pc = aFrame->PresContext();
|
||||
const nscoord offset = aFrame->StyleOutline()->mOutlineOffset.ToAppUnits();
|
||||
const Float devPixelOffset = pc->AppUnitsToFloatDevPixels(offset);
|
||||
|
||||
RectCornerRadii innerRadii;
|
||||
nsCSSRendering::ComputePixelRadii(
|
||||
cssRadii, aFrame->PresContext()->AppUnitsPerDevPixel(), &innerRadii);
|
||||
nsCSSRendering::ComputePixelRadii(cssRadii, pc->AppUnitsPerDevPixel(),
|
||||
&innerRadii);
|
||||
|
||||
RectCornerRadii outerRadii;
|
||||
Float borderSizes[4] = {halfWidth, halfWidth, halfWidth, halfWidth};
|
||||
nsCSSBorderRenderer::ComputeOuterRadii(innerRadii, borderSizes, &outerRadii);
|
||||
const Float widths[4] = {
|
||||
halfWidth + devPixelOffset, halfWidth + devPixelOffset,
|
||||
halfWidth + devPixelOffset, halfWidth + devPixelOffset};
|
||||
nsCSSBorderRenderer::ComputeOuterRadii(innerRadii, widths, &outerRadii);
|
||||
RefPtr<Path> path =
|
||||
MakePathForRoundedRect(*aDt, rect.ToUnknownRect(), outerRadii);
|
||||
aDt->Stroke(path, ColorPattern(ToDeviceColor(innerColor)),
|
||||
|
Loading…
x
Reference in New Issue
Block a user