Bug 868396 - Add pref to enable/disable overlay scrollbars on Mac OSX 10.7+. r=smichaud

This commit is contained in:
Stephen Pohl 2013-05-06 09:04:17 -04:00
Родитель 754efdf384
Коммит f0cdea178b
2 изменённых файлов: 17 добавлений и 9 удалений

Просмотреть файл

@ -24,13 +24,13 @@ public:
return 0x2022;
}
static bool UseOverlayScrollbars();
protected:
// Apple hasn't defined a constant for scollbars with two arrows on each end, so we'll use this one.
static const int kThemeScrollBarArrowsBoth = 2;
static const int kThemeScrollBarArrowsUpperLeft = 3;
static bool UseOverlayScrollbars();
};
#endif // nsLookAndFeel_h_

Просмотреть файл

@ -2286,13 +2286,15 @@ nsNativeThemeCocoa::DrawWidgetBackground(nsRenderingContext* aContext,
case NS_THEME_SCROLLBAR_SMALL:
case NS_THEME_SCROLLBAR:
if (!nsLookAndFeel::UseOverlayScrollbars()) {
if (nsLookAndFeel::GetInt(
nsLookAndFeel::eIntID_UseOverlayScrollbars) == 0) {
DrawScrollbar(cgContext, macRect, aFrame);
}
break;
case NS_THEME_SCROLLBAR_THUMB_VERTICAL:
case NS_THEME_SCROLLBAR_THUMB_HORIZONTAL:
if (nsLookAndFeel::UseOverlayScrollbars()) {
if (nsLookAndFeel::GetInt(
nsLookAndFeel::eIntID_UseOverlayScrollbars) != 0) {
BOOL isHorizontal = (aWidgetType == NS_THEME_SCROLLBAR_THUMB_HORIZONTAL);
BOOL isRolledOver = CheckBooleanAttr(GetParentScrollbarFrame(aFrame),
nsGkAtoms::hover);
@ -2336,7 +2338,8 @@ nsNativeThemeCocoa::DrawWidgetBackground(nsRenderingContext* aContext,
break;
case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL:
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
if (nsLookAndFeel::UseOverlayScrollbars() &&
if (nsLookAndFeel::GetInt(
nsLookAndFeel::eIntID_UseOverlayScrollbars) != 0 &&
CheckBooleanAttr(GetParentScrollbarFrame(aFrame), nsGkAtoms::hover)) {
BOOL isHorizontal = (aWidgetType == NS_THEME_SCROLLBAR_TRACK_HORIZONTAL);
const BOOL isOnTopOfBrightBackground = YES; // TODO: detect this properly
@ -2545,7 +2548,8 @@ nsNativeThemeCocoa::GetWidgetBorder(nsDeviceContext* aContext,
}
}
if (nsLookAndFeel::UseOverlayScrollbars()) {
if (nsLookAndFeel::GetInt(
nsLookAndFeel::eIntID_UseOverlayScrollbars) != 0) {
if (isHorizontal) {
aResult->SizeTo(1, 2, 1, 1);
} else {
@ -2802,7 +2806,8 @@ nsNativeThemeCocoa::GetMinimumWidgetSize(nsRenderingContext* aContext,
{
*aIsOverridable = false;
if (nsLookAndFeel::UseOverlayScrollbars()) {
if (nsLookAndFeel::GetInt(
nsLookAndFeel::eIntID_UseOverlayScrollbars) != 0) {
aResult->SizeTo(16, 16);
break;
}
@ -3035,7 +3040,8 @@ nsNativeThemeCocoa::ThemeSupportsWidget(nsPresContext* aPresContext, nsIFrame* a
// overriden, and the custom transparent resizer looks better when
// scrollbars are not present.
nsIScrollableFrame* scrollFrame = do_QueryFrame(parentFrame);
return (!nsLookAndFeel::UseOverlayScrollbars() &&
return (nsLookAndFeel::GetInt(
nsLookAndFeel::eIntID_UseOverlayScrollbars) == 0 &&
scrollFrame && scrollFrame->GetScrollbarVisibility());
break;
}
@ -3091,7 +3097,9 @@ nsNativeThemeCocoa::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
case NS_THEME_SCROLLBAR_SMALL:
case NS_THEME_SCROLLBAR:
return nsLookAndFeel::UseOverlayScrollbars() ? eTransparent : eOpaque;
return nsLookAndFeel::GetInt(
nsLookAndFeel::eIntID_UseOverlayScrollbars) != 0 ?
eTransparent : eOpaque;
case NS_THEME_STATUSBAR:
// Knowing that scrollbars and statusbars are opaque improves