PageRenderTime 25ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/atom/browser/native_window_views.h

https://gitlab.com/Rockyspade/electron
C Header | 184 lines | 134 code | 31 blank | 19 comment | 0 complexity | 29e38171504098f4f0f45ee0aafd6977 MD5 | raw file
  1. // Copyright (c) 2014 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ATOM_BROWSER_NATIVE_WINDOW_VIEWS_H_
  5. #define ATOM_BROWSER_NATIVE_WINDOW_VIEWS_H_
  6. #include "atom/browser/native_window.h"
  7. #include <string>
  8. #include <vector>
  9. #include "atom/browser/ui/accelerator_util.h"
  10. #include "ui/views/widget/widget_delegate.h"
  11. #include "ui/views/widget/widget_observer.h"
  12. namespace views {
  13. class UnhandledKeyboardEventHandler;
  14. }
  15. namespace atom {
  16. class GlobalMenuBarX11;
  17. class MenuBar;
  18. class WindowStateWatcher;
  19. class NativeWindowViews : public NativeWindow,
  20. public views::WidgetDelegateView,
  21. public views::WidgetObserver {
  22. public:
  23. explicit NativeWindowViews(content::WebContents* web_contents,
  24. const mate::Dictionary& options);
  25. virtual ~NativeWindowViews();
  26. // NativeWindow:
  27. void Close() override;
  28. void CloseImmediately() override;
  29. void Focus(bool focus) override;
  30. bool IsFocused() override;
  31. void Show() override;
  32. void ShowInactive() override;
  33. void Hide() override;
  34. bool IsVisible() override;
  35. void Maximize() override;
  36. void Unmaximize() override;
  37. bool IsMaximized() override;
  38. void Minimize() override;
  39. void Restore() override;
  40. bool IsMinimized() override;
  41. void SetFullScreen(bool fullscreen) override;
  42. bool IsFullscreen() const override;
  43. void SetBounds(const gfx::Rect& bounds) override;
  44. gfx::Rect GetBounds() override;
  45. void SetContentSize(const gfx::Size& size) override;
  46. gfx::Size GetContentSize() override;
  47. void SetMinimumSize(const gfx::Size& size) override;
  48. gfx::Size GetMinimumSize() override;
  49. void SetMaximumSize(const gfx::Size& size) override;
  50. gfx::Size GetMaximumSize() override;
  51. void SetResizable(bool resizable) override;
  52. bool IsResizable() override;
  53. void SetAlwaysOnTop(bool top) override;
  54. bool IsAlwaysOnTop() override;
  55. void Center() override;
  56. void SetTitle(const std::string& title) override;
  57. std::string GetTitle() override;
  58. void FlashFrame(bool flash) override;
  59. void SetSkipTaskbar(bool skip) override;
  60. void SetKiosk(bool kiosk) override;
  61. bool IsKiosk() override;
  62. void SetMenu(ui::MenuModel* menu_model) override;
  63. gfx::NativeWindow GetNativeWindow() override;
  64. void SetOverlayIcon(const gfx::Image& overlay,
  65. const std::string& description) override;
  66. void SetProgressBar(double value) override;
  67. void SetAutoHideMenuBar(bool auto_hide) override;
  68. bool IsMenuBarAutoHide() override;
  69. void SetMenuBarVisibility(bool visible) override;
  70. bool IsMenuBarVisible() override;
  71. void SetVisibleOnAllWorkspaces(bool visible) override;
  72. bool IsVisibleOnAllWorkspaces() override;
  73. gfx::AcceleratedWidget GetAcceleratedWidget();
  74. SkRegion* draggable_region() const { return draggable_region_.get(); }
  75. views::Widget* widget() const { return window_.get(); }
  76. private:
  77. // NativeWindow:
  78. void UpdateDraggableRegions(
  79. const std::vector<DraggableRegion>& regions) override;
  80. // views::WidgetObserver:
  81. void OnWidgetActivationChanged(
  82. views::Widget* widget, bool active) override;
  83. // views::WidgetDelegate:
  84. void DeleteDelegate() override;
  85. views::View* GetInitiallyFocusedView() override;
  86. bool CanResize() const override;
  87. bool CanMaximize() const override;
  88. bool CanMinimize() const override;
  89. base::string16 GetWindowTitle() const override;
  90. bool ShouldHandleSystemCommands() const override;
  91. gfx::ImageSkia GetWindowAppIcon() override;
  92. gfx::ImageSkia GetWindowIcon() override;
  93. views::Widget* GetWidget() override;
  94. const views::Widget* GetWidget() const override;
  95. views::View* GetContentsView() override;
  96. bool ShouldDescendIntoChildForEventHandling(
  97. gfx::NativeView child,
  98. const gfx::Point& location) override;
  99. views::ClientView* CreateClientView(views::Widget* widget) override;
  100. views::NonClientFrameView* CreateNonClientFrameView(
  101. views::Widget* widget) override;
  102. #if defined(OS_WIN)
  103. bool ExecuteWindowsCommand(int command_id) override;
  104. #endif
  105. // brightray::InspectableWebContentsDelegate:
  106. gfx::ImageSkia GetDevToolsWindowIcon() override;
  107. #if defined(USE_X11)
  108. void GetDevToolsWindowWMClass(
  109. std::string* name, std::string* class_name) override;
  110. #endif
  111. // content::WebContentsDelegate:
  112. void HandleMouseDown() override;
  113. void HandleKeyboardEvent(
  114. content::WebContents*,
  115. const content::NativeWebKeyboardEvent& event) override;
  116. // views::View:
  117. bool AcceleratorPressed(const ui::Accelerator& accelerator) override;
  118. // Register accelerators supported by the menu model.
  119. void RegisterAccelerators(ui::MenuModel* menu_model);
  120. // Converts between client area and window area, since we include the menu bar
  121. // in client area we need to substract/add menu bar's height in convertions.
  122. gfx::Rect ContentBoundsToWindowBounds(const gfx::Rect& content_bounds);
  123. // Returns the restore state for the window.
  124. ui::WindowShowState GetRestoredState();
  125. scoped_ptr<views::Widget> window_;
  126. views::View* web_view_; // Managed by inspectable_web_contents_.
  127. scoped_ptr<MenuBar> menu_bar_;
  128. bool menu_bar_autohide_;
  129. bool menu_bar_visible_;
  130. bool menu_bar_alt_pressed_;
  131. #if defined(USE_X11)
  132. scoped_ptr<GlobalMenuBarX11> global_menu_bar_;
  133. // Handles window state events.
  134. scoped_ptr<WindowStateWatcher> window_state_watcher_;
  135. #elif defined(OS_WIN)
  136. // Records window was whether restored from minimized state or maximized
  137. // state.
  138. bool is_minimized_;
  139. #endif
  140. // Handles unhandled keyboard messages coming back from the renderer process.
  141. scoped_ptr<views::UnhandledKeyboardEventHandler> keyboard_event_handler_;
  142. // Map from accelerator to menu item's command id.
  143. accelerator_util::AcceleratorTable accelerator_table_;
  144. bool use_content_size_;
  145. bool resizable_;
  146. std::string title_;
  147. gfx::Size minimum_size_;
  148. gfx::Size maximum_size_;
  149. scoped_ptr<SkRegion> draggable_region_;
  150. DISALLOW_COPY_AND_ASSIGN(NativeWindowViews);
  151. };
  152. } // namespace atom
  153. #endif // ATOM_BROWSER_NATIVE_WINDOW_VIEWS_H_