Browse Source

feat: view.getVisible() (#45409)

* feat: view.getVisible()

Co-authored-by: Samuel Maddock <[email protected]>

* test: visible apis

Co-authored-by: Samuel Maddock <[email protected]>

* docs: clarify getVisible

Co-authored-by: Samuel Maddock <[email protected]>

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Samuel Maddock <[email protected]>
trop[bot] 2 months ago
parent
commit
f40fc49461

+ 6 - 0
docs/api/view.md

@@ -106,6 +106,12 @@ Examples of valid `color` values:
 
 * `visible` boolean - If false, the view will be hidden from display.
 
+#### `view.getVisible()`
+
+Returns `boolean` - Whether the view should be drawn. Note that this is
+different from whether the view is visible on screen—it may still be obscured
+or out of view.
+
 ### Instance Properties
 
 Objects created with `new View` have the following properties:

+ 6 - 1
shell/browser/api/electron_api_view.cc

@@ -387,6 +387,10 @@ void View::SetVisible(bool visible) {
   view_->SetVisible(visible);
 }
 
+bool View::GetVisible() const {
+  return view_ ? view_->GetVisible() : false;
+}
+
 void View::OnViewBoundsChanged(views::View* observed_view) {
   ApplyBorderRadius();
   Emit("bounds-changed");
@@ -445,7 +449,8 @@ void View::BuildPrototype(v8::Isolate* isolate,
       .SetMethod("setBackgroundColor", &View::SetBackgroundColor)
       .SetMethod("setBorderRadius", &View::SetBorderRadius)
       .SetMethod("setLayout", &View::SetLayout)
-      .SetMethod("setVisible", &View::SetVisible);
+      .SetMethod("setVisible", &View::SetVisible)
+      .SetMethod("getVisible", &View::GetVisible);
 }
 
 }  // namespace electron::api

+ 1 - 0
shell/browser/api/electron_api_view.h

@@ -45,6 +45,7 @@ class View : public gin_helper::EventEmitter<View>,
   void SetBackgroundColor(std::optional<WrappedSkColor> color);
   void SetBorderRadius(int radius);
   void SetVisible(bool visible);
+  bool GetVisible() const;
 
   // views::ViewObserver
   void OnViewBoundsChanged(views::View* observed_view) override;

+ 13 - 0
spec/api-view-spec.ts

@@ -79,4 +79,17 @@ describe('View', () => {
     v.setBorderRadius(9999999);
     v.setBorderRadius(-9999999);
   });
+
+  describe('view.getVisible|setVisible', () => {
+    it('is visible by default', () => {
+      const v = new View();
+      expect(v.getVisible()).to.be.true();
+    });
+
+    it('can be set to not visible', () => {
+      const v = new View();
+      v.setVisible(false);
+      expect(v.getVisible()).to.be.false();
+    });
+  });
 });