// Copyright (c) 2014 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #ifndef ELECTRON_SHELL_BROWSER_UI_VIEWS_FRAMELESS_VIEW_H_ #define ELECTRON_SHELL_BROWSER_UI_VIEWS_FRAMELESS_VIEW_H_ #include "base/memory/raw_ptr.h" #include "ui/base/metadata/metadata_header_macros.h" #include "ui/views/window/non_client_view.h" namespace views { class Widget; } namespace electron { class NativeWindowViews; class FramelessView : public views::NonClientFrameView { METADATA_HEADER(FramelessView, views::NonClientFrameView) public: FramelessView(); ~FramelessView() override; // disable copy FramelessView(const FramelessView&) = delete; FramelessView& operator=(const FramelessView&) = delete; virtual void Init(NativeWindowViews* window, views::Widget* frame); // Returns whether the |point| is on frameless window's resizing border. virtual int ResizingBorderHitTest(const gfx::Point& point); // Tells the NonClientView to invalidate caption buttons // and forces a re-layout and re-paint. virtual void InvalidateCaptionButtons(); NativeWindowViews* window() const { return window_; } views::Widget* frame() const { return frame_; } protected: // Helper function for subclasses to implement ResizingBorderHitTest with a // custom resize inset. int ResizingBorderHitTestImpl(const gfx::Point& point, const gfx::Insets& resize_border); // views::NonClientFrameView: gfx::Rect GetBoundsForClientView() const override; gfx::Rect GetWindowBoundsForClientBounds( const gfx::Rect& client_bounds) const override; int NonClientHitTest(const gfx::Point& point) override; void GetWindowMask(const gfx::Size& size, SkPath* window_mask) override; void ResetWindowControls() override; void UpdateWindowIcon() override; void UpdateWindowTitle() override; void SizeConstraintsChanged() override; // views::ViewTargeterDelegate: views::View* TargetForRect(views::View* root, const gfx::Rect& rect) override; // views::View: gfx::Size CalculatePreferredSize( const views::SizeBounds& available_size) const override; gfx::Size GetMinimumSize() const override; gfx::Size GetMaximumSize() const override; // Not owned. raw_ptr window_ = nullptr; raw_ptr frame_ = nullptr; friend class NativeWindowsViews; }; } // namespace electron #endif // ELECTRON_SHELL_BROWSER_UI_VIEWS_FRAMELESS_VIEW_H_