From cf833a765009d1b7f9620e7f3c14238f874ce98a Mon Sep 17 00:00:00 2001 From: Victor Bennich Date: Fri, 13 Dec 2019 17:08:30 +0100 Subject: [PATCH] feat: add win.getBackgroundColor() for macOS (#21448) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit thanks @vbennich - great work on this 🌟 --- docs/api/browser-window.md | 5 ++++ shell/browser/api/atom_api_browser_view.h | 1 - .../browser/api/atom_api_top_level_window.cc | 5 ++++ shell/browser/api/atom_api_top_level_window.h | 1 + shell/browser/native_window.h | 1 + shell/browser/native_window_mac.h | 1 + shell/browser/native_window_mac.mm | 5 ++++ shell/browser/native_window_views.cc | 4 ++++ shell/browser/native_window_views.h | 1 + spec-main/api-browser-window-spec.ts | 23 +++++++++++++++++++ 10 files changed, 46 insertions(+), 1 deletion(-) diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index d54d4c1457bf..9455d2cf1764 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -1019,6 +1019,11 @@ console.log(win.getBounds()) Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window as `Object`. +#### `win.getBackgroundColor()` + +Returns `String` - Gets the background color of the window. See [Setting +`backgroundColor`](#setting-backgroundcolor). + #### `win.setContentBounds(bounds[, animate])` * `bounds` [Rectangle](structures/rectangle.md) diff --git a/shell/browser/api/atom_api_browser_view.h b/shell/browser/api/atom_api_browser_view.h index 8e767a40e839..9dae4c86bbb6 100644 --- a/shell/browser/api/atom_api_browser_view.h +++ b/shell/browser/api/atom_api_browser_view.h @@ -56,7 +56,6 @@ class BrowserView : public gin_helper::TrackableObject, void SetBounds(const gfx::Rect& bounds); gfx::Rect GetBounds(); void SetBackgroundColor(const std::string& color_name); - v8::Local GetWebContents(); v8::Global web_contents_; diff --git a/shell/browser/api/atom_api_top_level_window.cc b/shell/browser/api/atom_api_top_level_window.cc index 47d6e61f83b5..81b6680777ce 100644 --- a/shell/browser/api/atom_api_top_level_window.cc +++ b/shell/browser/api/atom_api_top_level_window.cc @@ -620,6 +620,10 @@ void TopLevelWindow::SetBackgroundColor(const std::string& color_name) { window_->SetBackgroundColor(color); } +std::string TopLevelWindow::GetBackgroundColor() { + return ToRGBHex(window_->GetBackgroundColor()); +} + void TopLevelWindow::SetHasShadow(bool has_shadow) { window_->SetHasShadow(has_shadow); } @@ -1145,6 +1149,7 @@ void TopLevelWindow::BuildPrototype(v8::Isolate* isolate, .SetMethod("setKiosk", &TopLevelWindow::SetKiosk) .SetMethod("isKiosk", &TopLevelWindow::IsKiosk) .SetMethod("setBackgroundColor", &TopLevelWindow::SetBackgroundColor) + .SetMethod("getBackgroundColor", &TopLevelWindow::GetBackgroundColor) .SetMethod("setHasShadow", &TopLevelWindow::SetHasShadow) .SetMethod("hasShadow", &TopLevelWindow::HasShadow) .SetMethod("setOpacity", &TopLevelWindow::SetOpacity) diff --git a/shell/browser/api/atom_api_top_level_window.h b/shell/browser/api/atom_api_top_level_window.h index 0ead23d09ca3..5b86c88e61df 100644 --- a/shell/browser/api/atom_api_top_level_window.h +++ b/shell/browser/api/atom_api_top_level_window.h @@ -155,6 +155,7 @@ class TopLevelWindow : public gin_helper::TrackableObject, void SetKiosk(bool kiosk); bool IsKiosk(); virtual void SetBackgroundColor(const std::string& color_name); + std::string GetBackgroundColor(); void SetHasShadow(bool has_shadow); bool HasShadow(); void SetOpacity(const double opacity); diff --git a/shell/browser/native_window.h b/shell/browser/native_window.h index 4e80ba5a873b..36da3c2edab1 100644 --- a/shell/browser/native_window.h +++ b/shell/browser/native_window.h @@ -149,6 +149,7 @@ class NativeWindow : public base::SupportsUserData, virtual void SetKiosk(bool kiosk) = 0; virtual bool IsKiosk() = 0; virtual void SetBackgroundColor(SkColor color) = 0; + virtual SkColor GetBackgroundColor() = 0; virtual void SetHasShadow(bool has_shadow) = 0; virtual bool HasShadow() = 0; virtual void SetOpacity(const double opacity) = 0; diff --git a/shell/browser/native_window_mac.h b/shell/browser/native_window_mac.h index 761dc09041a3..f8191ae58462 100644 --- a/shell/browser/native_window_mac.h +++ b/shell/browser/native_window_mac.h @@ -93,6 +93,7 @@ class NativeWindowMac : public NativeWindow { void SetKiosk(bool kiosk) override; bool IsKiosk() override; void SetBackgroundColor(SkColor color) override; + SkColor GetBackgroundColor() override; void SetHasShadow(bool has_shadow) override; bool HasShadow() override; void SetOpacity(const double opacity) override; diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index f6ea715c14ce..84c9498a6afb 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -1102,6 +1102,11 @@ void NativeWindowMac::SetBackgroundColor(SkColor color) { [[[window_ contentView] layer] setBackgroundColor:cgcolor]; } +SkColor NativeWindowMac::GetBackgroundColor() { + return skia::CGColorRefToSkColor( + [[[window_ contentView] layer] backgroundColor]); +} + void NativeWindowMac::SetHasShadow(bool has_shadow) { [window_ setHasShadow:has_shadow]; } diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index c15d85ab4c64..06bdb2bce71a 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -903,6 +903,10 @@ bool NativeWindowViews::IsKiosk() { return IsFullscreen(); } +SkColor NativeWindowViews::GetBackgroundColor() { + return root_view_->background()->get_color(); +} + void NativeWindowViews::SetBackgroundColor(SkColor background_color) { // web views' background color. root_view_->SetBackground(views::CreateSolidBackground(background_color)); diff --git a/shell/browser/native_window_views.h b/shell/browser/native_window_views.h index 7b428cab2670..0f1ad3ef46bb 100644 --- a/shell/browser/native_window_views.h +++ b/shell/browser/native_window_views.h @@ -66,6 +66,7 @@ class NativeWindowViews : public NativeWindow, gfx::Rect GetContentBounds() override; gfx::Size GetContentSize() override; gfx::Rect GetNormalBounds() override; + SkColor GetBackgroundColor() override; void SetContentSizeConstraints( const extensions::SizeConstraints& size_constraints) override; void SetResizable(bool resizable) override; diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index f1464ec07762..d7ccfcbe0a52 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -834,6 +834,29 @@ describe('BrowserWindow module', () => { }) }) + describe('BrowserWindow.getBackgroundColor()', () => { + it('returns default value if no backgroundColor is set', () => { + w.destroy() + w = new BrowserWindow({}) + expect(w.getBackgroundColor()).to.equal('#FFFFFF') + }) + it('returns correct value if backgroundColor is set', () => { + const backgroundColor = '#BBAAFF' + w.destroy() + w = new BrowserWindow({ + backgroundColor: backgroundColor + }) + expect(w.getBackgroundColor()).to.equal(backgroundColor) + }) + it('returns correct value from setBackgroundColor()', () => { + const backgroundColor = '#AABBFF' + w.destroy() + w = new BrowserWindow({}) + w.setBackgroundColor(backgroundColor) + expect(w.getBackgroundColor()).to.equal(backgroundColor) + }) + }) + describe(`BrowserWindow.getNormalBounds()`, () => { describe(`Normal state`, () => { it(`checks normal bounds after resize`, (done) => {