| 
									
										
										
										
											2021-08-11 11:07:36 -07:00
										 |  |  | // Copyright 2020 The Chromium Authors. All rights reserved.
 | 
					
						
							|  |  |  | // Use of this source code is governed by a BSD-style license that can be
 | 
					
						
							|  |  |  | // found in the LICENSE file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-24 14:09:21 -08:00
										 |  |  | // Modified from
 | 
					
						
							|  |  |  | // chrome/browser/ui/views/frame/glass_browser_caption_button_container.h
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-22 08:34:31 +01:00
										 |  |  | #ifndef ELECTRON_SHELL_BROWSER_UI_VIEWS_WIN_CAPTION_BUTTON_CONTAINER_H_
 | 
					
						
							|  |  |  | #define ELECTRON_SHELL_BROWSER_UI_VIEWS_WIN_CAPTION_BUTTON_CONTAINER_H_
 | 
					
						
							| 
									
										
										
										
											2021-08-11 11:07:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-09 16:08:36 -07:00
										 |  |  | #include "base/memory/raw_ptr.h"
 | 
					
						
							| 
									
										
										
										
											2021-08-11 11:07:36 -07:00
										 |  |  | #include "base/scoped_observation.h"
 | 
					
						
							|  |  |  | #include "ui/base/metadata/metadata_header_macros.h"
 | 
					
						
							| 
									
										
										
										
											2023-11-28 13:40:12 -08:00
										 |  |  | #include "ui/base/metadata/metadata_impl_macros.h"
 | 
					
						
							| 
									
										
										
										
											2021-08-11 11:07:36 -07:00
										 |  |  | #include "ui/base/pointer/touch_ui_controller.h"
 | 
					
						
							|  |  |  | #include "ui/views/controls/button/button.h"
 | 
					
						
							|  |  |  | #include "ui/views/view.h"
 | 
					
						
							|  |  |  | #include "ui/views/widget/widget.h"
 | 
					
						
							|  |  |  | #include "ui/views/widget/widget_observer.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace electron { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class WinFrameView; | 
					
						
							|  |  |  | class WinCaptionButton; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Provides a container for Windows 10 caption buttons that can be moved between
 | 
					
						
							|  |  |  | // frame and browser window as needed. When extended horizontally, becomes a
 | 
					
						
							|  |  |  | // grab bar for moving the window.
 | 
					
						
							|  |  |  | class WinCaptionButtonContainer : public views::View, | 
					
						
							| 
									
										
										
										
											2024-05-29 13:07:02 -05:00
										 |  |  |                                   private views::WidgetObserver { | 
					
						
							| 
									
										
										
										
											2023-11-28 13:40:12 -08:00
										 |  |  |   METADATA_HEADER(WinCaptionButtonContainer, views::View) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-11 11:07:36 -07:00
										 |  |  |  public: | 
					
						
							|  |  |  |   explicit WinCaptionButtonContainer(WinFrameView* frame_view); | 
					
						
							|  |  |  |   ~WinCaptionButtonContainer() override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Tests to see if the specified |point| (which is expressed in this view's
 | 
					
						
							|  |  |  |   // coordinates and which must be within this view's bounds) is within one of
 | 
					
						
							|  |  |  |   // the caption buttons. Returns one of HitTestCompat enum defined in
 | 
					
						
							|  |  |  |   // ui/base/hit_test.h, HTCAPTION if the area hit would be part of the window's
 | 
					
						
							|  |  |  |   // drag handle, and HTNOWHERE otherwise.
 | 
					
						
							|  |  |  |   // See also ClientView::NonClientHitTest.
 | 
					
						
							|  |  |  |   int NonClientHitTest(const gfx::Point& point) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-24 14:09:21 -08:00
										 |  |  |   void SetButtonSize(gfx::Size size); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-20 12:45:08 +01:00
										 |  |  |   // Add tooltip text to caption buttons.
 | 
					
						
							|  |  |  |   void UpdateButtonToolTipsForWindowControlsOverlay(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-09 12:57:57 -04:00
										 |  |  |   // Sets caption button container background color.
 | 
					
						
							|  |  |  |   void UpdateBackground(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-23 19:08:32 +02:00
										 |  |  |   // Sets caption button visibility and enabled state based on window state.
 | 
					
						
							|  |  |  |   // Only one of maximize or restore button should ever be visible at the same
 | 
					
						
							|  |  |  |   // time, and both are disabled in tablet UI mode.
 | 
					
						
							|  |  |  |   void UpdateButtons(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-07 17:17:20 +02:00
										 |  |  |   // Reset window button states to STATE_NORMAL.
 | 
					
						
							|  |  |  |   void ResetWindowControls(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-11 11:07:36 -07:00
										 |  |  |  private: | 
					
						
							|  |  |  |   // views::View:
 | 
					
						
							|  |  |  |   void AddedToWidget() override; | 
					
						
							|  |  |  |   void RemovedFromWidget() override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // views::WidgetObserver:
 | 
					
						
							|  |  |  |   void OnWidgetBoundsChanged(views::Widget* widget, | 
					
						
							|  |  |  |                              const gfx::Rect& new_bounds) override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-07 09:20:46 -05:00
										 |  |  |   const raw_ptr<WinFrameView> frame_view_; | 
					
						
							|  |  |  |   const raw_ptr<WinCaptionButton> minimize_button_; | 
					
						
							|  |  |  |   const raw_ptr<WinCaptionButton> maximize_button_; | 
					
						
							|  |  |  |   const raw_ptr<WinCaptionButton> restore_button_; | 
					
						
							|  |  |  |   const raw_ptr<WinCaptionButton> close_button_; | 
					
						
							| 
									
										
										
										
											2021-08-11 11:07:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   base::ScopedObservation<views::Widget, views::WidgetObserver> | 
					
						
							|  |  |  |       widget_observation_{this}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   base::CallbackListSubscription subscription_ = | 
					
						
							|  |  |  |       ui::TouchUiController::Get()->RegisterCallback( | 
					
						
							|  |  |  |           base::BindRepeating(&WinCaptionButtonContainer::UpdateButtons, | 
					
						
							|  |  |  |                               base::Unretained(this))); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | }  // namespace electron
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-22 08:34:31 +01:00
										 |  |  | #endif  // ELECTRON_SHELL_BROWSER_UI_VIEWS_WIN_CAPTION_BUTTON_CONTAINER_H_
 |