feat: expose window.invalidateShadow() (#32452)

Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Darshan Sen <raisinten@gmail.com>
This commit is contained in:
Shelley Vohr 2022-12-01 19:24:44 +01:00 committed by GitHub
parent 35a7c07306
commit d092e6bda4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 23 additions and 2 deletions

View file

@ -1565,6 +1565,13 @@ screen readers
Sets a 16 x 16 pixel overlay onto the current taskbar icon, usually used to Sets a 16 x 16 pixel overlay onto the current taskbar icon, usually used to
convey some sort of application status or to passively notify the user. convey some sort of application status or to passively notify the user.
#### `win.invalidateShadow()` _macOS_
Invalidates the window shadow so that it is recomputed based on the current window shape.
`BrowserWindows` that are transparent can sometimes leave behind visual artifacts on macOS.
This method can be used to clear these artifacts when, for example, performing an animation.
#### `win.setHasShadow(hasShadow)` #### `win.setHasShadow(hasShadow)`
* `hasShadow` boolean * `hasShadow` boolean

View file

@ -639,6 +639,10 @@ std::string BaseWindow::GetBackgroundColor(gin_helper::Arguments* args) {
return ToRGBHex(window_->GetBackgroundColor()); return ToRGBHex(window_->GetBackgroundColor());
} }
void BaseWindow::InvalidateShadow() {
window_->InvalidateShadow();
}
void BaseWindow::SetHasShadow(bool has_shadow) { void BaseWindow::SetHasShadow(bool has_shadow) {
window_->SetHasShadow(has_shadow); window_->SetHasShadow(has_shadow);
} }
@ -1259,6 +1263,7 @@ void BaseWindow::BuildPrototype(v8::Isolate* isolate,
.SetMethod("isVisibleOnAllWorkspaces", .SetMethod("isVisibleOnAllWorkspaces",
&BaseWindow::IsVisibleOnAllWorkspaces) &BaseWindow::IsVisibleOnAllWorkspaces)
#if BUILDFLAG(IS_MAC) #if BUILDFLAG(IS_MAC)
.SetMethod("invalidateShadow", &BaseWindow::InvalidateShadow)
.SetMethod("_getAlwaysOnTopLevel", &BaseWindow::GetAlwaysOnTopLevel) .SetMethod("_getAlwaysOnTopLevel", &BaseWindow::GetAlwaysOnTopLevel)
.SetMethod("setAutoHideCursor", &BaseWindow::SetAutoHideCursor) .SetMethod("setAutoHideCursor", &BaseWindow::SetAutoHideCursor)
#endif #endif

View file

@ -156,6 +156,7 @@ class BaseWindow : public gin_helper::TrackableObject<BaseWindow>,
bool IsTabletMode() const; bool IsTabletMode() const;
virtual void SetBackgroundColor(const std::string& color_name); virtual void SetBackgroundColor(const std::string& color_name);
std::string GetBackgroundColor(gin_helper::Arguments* args); std::string GetBackgroundColor(gin_helper::Arguments* args);
void InvalidateShadow();
void SetHasShadow(bool has_shadow); void SetHasShadow(bool has_shadow);
bool HasShadow(); bool HasShadow();
void SetOpacity(const double opacity); void SetOpacity(const double opacity);

View file

@ -421,6 +421,8 @@ void NativeWindow::SetParentWindow(NativeWindow* parent) {
parent_ = parent; parent_ = parent;
} }
void NativeWindow::InvalidateShadow() {}
void NativeWindow::SetAutoHideCursor(bool auto_hide) {} void NativeWindow::SetAutoHideCursor(bool auto_hide) {}
void NativeWindow::SelectPreviousTab() {} void NativeWindow::SelectPreviousTab() {}

View file

@ -169,6 +169,7 @@ class NativeWindow : public base::SupportsUserData,
virtual bool IsTabletMode() const; virtual bool IsTabletMode() const;
virtual void SetBackgroundColor(SkColor color) = 0; virtual void SetBackgroundColor(SkColor color) = 0;
virtual SkColor GetBackgroundColor() = 0; virtual SkColor GetBackgroundColor() = 0;
virtual void InvalidateShadow();
virtual void SetHasShadow(bool has_shadow) = 0; virtual void SetHasShadow(bool has_shadow) = 0;
virtual bool HasShadow() = 0; virtual bool HasShadow() = 0;
virtual void SetOpacity(const double opacity) = 0; virtual void SetOpacity(const double opacity) = 0;

View file

@ -94,6 +94,7 @@ class NativeWindowMac : public NativeWindow,
bool IsKiosk() override; bool IsKiosk() override;
void SetBackgroundColor(SkColor color) override; void SetBackgroundColor(SkColor color) override;
SkColor GetBackgroundColor() override; SkColor GetBackgroundColor() override;
void InvalidateShadow() override;
void SetHasShadow(bool has_shadow) override; void SetHasShadow(bool has_shadow) override;
bool HasShadow() override; bool HasShadow() override;
void SetOpacity(const double opacity) override; void SetOpacity(const double opacity) override;

View file

@ -226,8 +226,8 @@ NativeWindowMac::NativeWindowMac(const gin_helper::Dictionary& options,
NSUInteger styleMask = NSWindowStyleMaskTitled; NSUInteger styleMask = NSWindowStyleMaskTitled;
// Removing NSWindowStyleMaskTitled removes window title, which removes // The NSWindowStyleMaskFullSizeContentView style removes rounded corners
// rounded corners of window. // for frameless window.
bool rounded_corner = true; bool rounded_corner = true;
options.Get(options::kRoundedCorners, &rounded_corner); options.Get(options::kRoundedCorners, &rounded_corner);
if (!rounded_corner && !has_frame()) if (!rounded_corner && !has_frame())
@ -1061,6 +1061,10 @@ bool NativeWindowMac::HasShadow() {
return [window_ hasShadow]; return [window_ hasShadow];
} }
void NativeWindowMac::InvalidateShadow() {
[window_ invalidateShadow];
}
void NativeWindowMac::SetOpacity(const double opacity) { void NativeWindowMac::SetOpacity(const double opacity) {
const double boundedOpacity = base::clamp(opacity, 0.0, 1.0); const double boundedOpacity = base::clamp(opacity, 0.0, 1.0);
[window_ setAlphaValue:boundedOpacity]; [window_ setAlphaValue:boundedOpacity];