// 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 ATOM_BROWSER_NATIVE_WINDOW_VIEWS_H_ #define ATOM_BROWSER_NATIVE_WINDOW_VIEWS_H_ #include "atom/browser/native_window.h" #include #include #include "atom/browser/ui/accelerator_util.h" #include "ui/views/widget/widget_delegate.h" #include "ui/views/widget/widget_observer.h" namespace views { class UnhandledKeyboardEventHandler; } namespace atom { class GlobalMenuBarX11; class MenuBar; class NativeWindowViews : public NativeWindow, public views::WidgetDelegateView, public views::WidgetObserver { public: explicit NativeWindowViews(content::WebContents* web_contents, const mate::Dictionary& options); virtual ~NativeWindowViews(); // NativeWindow: virtual void Close() OVERRIDE; virtual void CloseImmediately() OVERRIDE; virtual void Move(const gfx::Rect& pos) OVERRIDE; virtual void Focus(bool focus) OVERRIDE; virtual bool IsFocused() OVERRIDE; virtual void Show() OVERRIDE; virtual void ShowInactive() OVERRIDE; virtual void Hide() OVERRIDE; virtual bool IsVisible() OVERRIDE; virtual void Maximize() OVERRIDE; virtual void Unmaximize() OVERRIDE; virtual bool IsMaximized() OVERRIDE; virtual void Minimize() OVERRIDE; virtual void Restore() OVERRIDE; virtual bool IsMinimized() OVERRIDE; virtual void SetFullscreen(bool fullscreen) OVERRIDE; virtual bool IsFullscreen() OVERRIDE; virtual void SetSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetSize() OVERRIDE; virtual void SetContentSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetContentSize() OVERRIDE; virtual void SetMinimumSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetMinimumSize() OVERRIDE; virtual void SetMaximumSize(const gfx::Size& size) OVERRIDE; virtual gfx::Size GetMaximumSize() OVERRIDE; virtual void SetResizable(bool resizable) OVERRIDE; virtual bool IsResizable() OVERRIDE; virtual void SetAlwaysOnTop(bool top) OVERRIDE; virtual bool IsAlwaysOnTop() OVERRIDE; virtual void Center() OVERRIDE; virtual void SetPosition(const gfx::Point& position) OVERRIDE; virtual gfx::Point GetPosition() OVERRIDE; virtual void SetTitle(const std::string& title) OVERRIDE; virtual std::string GetTitle() OVERRIDE; virtual void FlashFrame(bool flash) OVERRIDE; virtual void SetSkipTaskbar(bool skip) OVERRIDE; virtual void SetKiosk(bool kiosk) OVERRIDE; virtual bool IsKiosk() OVERRIDE; virtual void SetMenu(ui::MenuModel* menu_model) OVERRIDE; virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; virtual void SetProgressBar(double value) OVERRIDE; gfx::AcceleratedWidget GetAcceleratedWidget(); SkRegion* draggable_region() const { return draggable_region_.get(); } views::Widget* widget() const { return window_.get(); } private: // NativeWindow: virtual void UpdateDraggableRegions( const std::vector& regions) OVERRIDE; // views::WidgetObserver: virtual void OnWidgetActivationChanged( views::Widget* widget, bool active) OVERRIDE; // views::WidgetDelegate: virtual void DeleteDelegate() OVERRIDE; virtual views::View* GetInitiallyFocusedView() OVERRIDE; virtual bool CanResize() const OVERRIDE; virtual bool CanMaximize() const OVERRIDE; virtual base::string16 GetWindowTitle() const OVERRIDE; virtual bool ShouldHandleSystemCommands() const OVERRIDE; virtual gfx::ImageSkia GetWindowAppIcon() OVERRIDE; virtual gfx::ImageSkia GetWindowIcon() OVERRIDE; virtual views::Widget* GetWidget() OVERRIDE; virtual const views::Widget* GetWidget() const OVERRIDE; virtual views::View* GetContentsView() OVERRIDE; virtual bool ShouldDescendIntoChildForEventHandling( gfx::NativeView child, const gfx::Point& location) OVERRIDE; virtual views::ClientView* CreateClientView(views::Widget* widget) OVERRIDE; virtual views::NonClientFrameView* CreateNonClientFrameView( views::Widget* widget) OVERRIDE; // brightray::InspectableWebContentsDelegate: virtual gfx::ImageSkia GetDevToolsWindowIcon() OVERRIDE; // content::WebContentsDelegate: virtual void HandleMouseDown() OVERRIDE; virtual void HandleKeyboardEvent( content::WebContents*, const content::NativeWebKeyboardEvent& event) OVERRIDE; // views::View: virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; // Register accelerators supported by the menu model. void RegisterAccelerators(ui::MenuModel* menu_model); // Converts between client area and window area, since we include the menu bar // in client area we need to substract/add menu bar's height in convertions. gfx::Rect ContentBoundsToWindowBounds(const gfx::Rect& content_bounds); // Show/Hide the menu bar. void SetMenuBarVisibility(bool visible); scoped_ptr window_; views::View* web_view_; // Managed by inspectable_web_contents_. scoped_ptr menu_bar_; bool menu_bar_autohide_; bool menu_bar_visible_; bool menu_bar_alt_pressed_; #if defined(USE_X11) scoped_ptr global_menu_bar_; #endif // Handles unhandled keyboard messages coming back from the renderer process. scoped_ptr keyboard_event_handler_; // Map from accelerator to menu item's command id. accelerator_util::AcceleratorTable accelerator_table_; bool use_content_size_; bool resizable_; std::string title_; gfx::Size minimum_size_; gfx::Size maximum_size_; scoped_ptr draggable_region_; DISALLOW_COPY_AND_ASSIGN(NativeWindowViews); }; } // namespace atom #endif // ATOM_BROWSER_NATIVE_WINDOW_VIEWS_H_