fune/widget/ThemeCocoa.cpp
Sam Johnson b47354dd67 Bug 1871612 - Improve non-native theme tooltips on macOS. r=emilio
After bug 1696988, the non-native theme can draw tooltips on macOS in some scenarios such as about:preferences. The non-native theme draws a rounded rectangle with a border that is the same color as the text, which looks pretty out-of-place on macOS--tooltips on macOS do not have rounded corners, and the border is subtle compared to the text color.

However, after bug 1871507, the window server is drawing both the correct background and border for the tooltip already. The non-native theme no longer needs to draw any background or border for tooltips on macOS.

Differential Revision: https://phabricator.services.mozilla.com/D197299
2024-01-01 09:50:27 +00:00

63 lines
2.2 KiB
C++

/* -*- Mode: C++; tab-width: 40; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "ThemeCocoa.h"
#include "cocoa/MacThemeGeometryType.h"
#include "gfxPlatform.h"
#include "mozilla/ClearOnShutdown.h"
#include "mozilla/gfx/Helpers.h"
#include "mozilla/LookAndFeel.h"
#include "mozilla/ServoStyleConsts.h"
namespace mozilla::widget {
LayoutDeviceIntSize ThemeCocoa::GetMinimumWidgetSize(
nsPresContext* aPresContext, nsIFrame* aFrame,
StyleAppearance aAppearance) {
if (aAppearance == StyleAppearance::MozMenulistArrowButton) {
auto size =
GetScrollbarSize(aPresContext, StyleScrollbarWidth::Auto, Overlay::No);
return {size, size};
}
return Theme::GetMinimumWidgetSize(aPresContext, aFrame, aAppearance);
}
NS_IMETHODIMP
ThemeCocoa::DrawWidgetBackground(gfxContext* aContext, nsIFrame* aFrame,
StyleAppearance aAppearance,
const nsRect& aRect, const nsRect& aDirtyRect,
DrawOverflow aDrawOverflow) {
switch (aAppearance) {
case StyleAppearance::Tooltip:
// Cocoa tooltip background and border are already drawn by the
// OS window server.
return NS_OK;
default:
break;
}
return Theme::DrawWidgetBackground(aContext, aFrame, aAppearance, aRect,
aDirtyRect, aDrawOverflow);
}
bool ThemeCocoa::CreateWebRenderCommandsForWidget(
mozilla::wr::DisplayListBuilder& aBuilder,
mozilla::wr::IpcResourceUpdateQueue& aResources,
const mozilla::layers::StackingContextHelper& aSc,
mozilla::layers::RenderRootStateManager* aManager, nsIFrame* aFrame,
StyleAppearance aAppearance, const nsRect& aRect) {
switch (aAppearance) {
case StyleAppearance::Tooltip:
// Cocoa tooltip background and border are already drawn by the
// OS window server.
return true;
default:
break;
}
return Theme::CreateWebRenderCommandsForWidget(
aBuilder, aResources, aSc, aManager, aFrame, aAppearance, aRect);
}
} // namespace mozilla::widget