Index: apps/ui/views/native_app_window_views.h |
diff --git a/apps/ui/views/native_app_window_views.h b/apps/ui/views/native_app_window_views.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8ea1cfe5f99d1562b5796b52eaed8da2d1cf7ad4 |
--- /dev/null |
+++ b/apps/ui/views/native_app_window_views.h |
@@ -0,0 +1,250 @@ |
+// Copyright 2013 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. |
+ |
+#ifndef APPS_UI_VIEWS_NATIVE_APP_WINDOW_VIEWS_H_ |
+#define APPS_UI_VIEWS_NATIVE_APP_WINDOW_VIEWS_H_ |
+ |
+#include "apps/app_window.h" |
+#include "apps/ui/native_app_window.h" |
+#include "base/observer_list.h" |
+#include "content/public/browser/web_contents_observer.h" |
+#include "third_party/skia/include/core/SkRegion.h" |
+#include "ui/gfx/image/image_skia.h" |
+#include "ui/gfx/rect.h" |
+//#include "ui/views/context_menu_controller.h" |
+#include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" |
+#include "ui/views/widget/widget.h" |
+#include "ui/views/widget/widget_delegate.h" |
+#include "ui/views/widget/widget_observer.h" |
+ |
+//#if defined(USE_ASH) |
+//namespace ash { |
+//class ImmersiveFullscreenController; |
+//} |
+//#endif |
+ |
+namespace apps { |
+class AppWindowFrameView; |
+} |
+ |
+namespace content { |
+class BrowserContext; |
+class RenderViewHost; |
+class WebContents; |
+} |
+ |
+namespace extensions { |
+class Extension; |
+} |
+ |
+namespace ui { |
+class MenuModel; |
+} |
+ |
+namespace views { |
+class MenuRunner; |
+class WebView; |
+} |
+ |
+class NativeAppWindowViews : public apps::NativeAppWindow, |
+ public content::WebContentsObserver, |
+// public views::ContextMenuController, |
+ public views::WidgetDelegateView, |
+ public views::WidgetObserver { |
+ public: |
+ NativeAppWindowViews(); |
+ virtual ~NativeAppWindowViews(); |
+ void Init(apps::AppWindow* app_window, |
+ const apps::AppWindow::CreateParams& create_params); |
+ |
+ SkRegion* shape() { return shape_.get(); } |
+ |
+ protected: |
+ // Initializes the views::Widget for |app_window|. |
+ virtual void InitializeWindow( |
+ apps::AppWindow* app_window, |
+ const apps::AppWindow::CreateParams& create_params) = 0; |
+ |
+// // Called before views::Widget::Init() to allow subclasses to customize |
+// // the InitParams that would be passed. |
+// virtual void OnBeforeWidgetInit(views::Widget::InitParams* init_params, |
+// views::Widget* widget); |
+ |
+ // ui::BaseWindow implementation that subclasses may override. |
+ virtual bool IsMaximized() const OVERRIDE;//for access |
+ virtual bool IsFullscreen() const OVERRIDE;//for access |
+ virtual void Show() OVERRIDE; |
+ virtual void Activate() OVERRIDE; |
+ virtual void Close() OVERRIDE; |
+ |
+ //james - make the whole thing protected? re-order the .cc file? |
+ //nativeappwindow: |
+ virtual bool IsFrameless() const OVERRIDE;//for access |
+ virtual gfx::Insets GetFrameInsets() const OVERRIDE;//for access |
+ |
+ content::BrowserContext* browser_context() { |
+ return app_window_->browser_context(); |
+ } |
+ |
+ const extensions::Extension* extension() { return app_window_->extension(); } |
+ views::Widget* window() { return window_; } |
+ const views::Widget* window() const { return window_; } |
+ views::WebView* web_view() { return web_view_; } |
+ const apps::AppWindow* app_window() const { return app_window_; } |
+ |
+// virtual void InitializeDefaultWindow( |
+// const apps::AppWindow::CreateParams& create_params); |
+// virtual void InitializePanelWindow( |
+// const apps::AppWindow::CreateParams& create_params); |
+ |
+// bool ShouldUseChromeStyleFrame() const; |
+ |
+// // Caller owns the returned object. |
+// apps::AppWindowFrameView* CreateAppWindowFrameView(); |
+ |
+ // ui::BaseWindow implementation. |
+ virtual bool IsActive() const OVERRIDE; |
+// virtual bool IsMaximized() const OVERRIDE; |
+ virtual bool IsMinimized() const OVERRIDE; |
+// virtual bool IsFullscreen() const OVERRIDE; |
+ virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; |
+ virtual gfx::Rect GetRestoredBounds() const OVERRIDE; |
+ virtual ui::WindowShowState GetRestoredState() const OVERRIDE; |
+ virtual gfx::Rect GetBounds() const OVERRIDE; |
+ virtual void ShowInactive() OVERRIDE; |
+ virtual void Hide() OVERRIDE; |
+// virtual void Close() OVERRIDE; |
+ virtual void Deactivate() OVERRIDE; |
+ virtual void Maximize() OVERRIDE; |
+ virtual void Minimize() OVERRIDE; |
+ virtual void Restore() OVERRIDE; |
+ virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; |
+ virtual void FlashFrame(bool flash) OVERRIDE; |
+// virtual bool IsAlwaysOnTop() const OVERRIDE; |
+ virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE; |
+ |
+// // Overridden from views::ContextMenuController: |
+// virtual void ShowContextMenuForView(views::View* source, |
+// const gfx::Point& p, |
+// ui::MenuSourceType source_type) OVERRIDE; |
+ |
+ // WidgetDelegate implementation. |
+ virtual void OnWidgetMove() OVERRIDE; |
+ virtual views::View* GetInitiallyFocusedView() OVERRIDE; |
+ virtual bool CanResize() const OVERRIDE; |
+ virtual bool CanMaximize() const OVERRIDE; |
+ virtual base::string16 GetWindowTitle() const OVERRIDE; |
+ virtual bool ShouldShowWindowTitle() const OVERRIDE; |
+ virtual gfx::ImageSkia GetWindowAppIcon() OVERRIDE; |
+// virtual gfx::ImageSkia GetWindowIcon() OVERRIDE; |
+ virtual bool ShouldShowWindowIcon() const OVERRIDE; |
+ virtual void SaveWindowPlacement(const gfx::Rect& bounds, |
+ ui::WindowShowState show_state) OVERRIDE; |
+ virtual void DeleteDelegate() OVERRIDE; |
+ virtual views::Widget* GetWidget() OVERRIDE; |
+ virtual const views::Widget* GetWidget() const OVERRIDE; |
+ virtual views::View* GetContentsView() OVERRIDE; |
+// virtual views::NonClientFrameView* CreateNonClientFrameView( |
+// views::Widget* widget) OVERRIDE; |
+ virtual bool WidgetHasHitTestMask() const OVERRIDE; |
+ virtual void GetWidgetHitTestMask(gfx::Path* mask) const OVERRIDE; |
+ virtual bool ShouldDescendIntoChildForEventHandling( |
+ gfx::NativeView child, |
+ const gfx::Point& location) OVERRIDE; |
+ |
+ // WidgetObserver implementation. |
+ virtual void OnWidgetVisibilityChanged(views::Widget* widget, |
+ bool visible) OVERRIDE; |
+ virtual void OnWidgetActivationChanged(views::Widget* widget, |
+ bool active) OVERRIDE; |
+ |
+ // WebContentsObserver implementation. |
+ virtual void RenderViewCreated( |
+ content::RenderViewHost* render_view_host) OVERRIDE; |
+ virtual void RenderViewHostChanged( |
+ content::RenderViewHost* old_host, |
+ content::RenderViewHost* new_host) OVERRIDE; |
+ |
+ // views::View implementation. |
+ virtual void Layout() OVERRIDE; |
+ virtual void ViewHierarchyChanged( |
+ const ViewHierarchyChangedDetails& details) OVERRIDE; |
+// virtual gfx::Size GetPreferredSize() OVERRIDE; |
+ virtual gfx::Size GetMinimumSize() OVERRIDE; |
+ virtual gfx::Size GetMaximumSize() OVERRIDE; |
+ virtual void OnFocus() OVERRIDE; |
+ |
+ // NativeAppWindow implementation. |
+// virtual void SetFullscreen(int fullscreen_types) OVERRIDE; |
+// virtual bool IsFullscreenOrPending() const OVERRIDE; |
+// virtual bool IsDetached() const OVERRIDE; |
+ virtual void UpdateWindowIcon() OVERRIDE; |
+ virtual void UpdateWindowTitle() OVERRIDE; |
+// virtual void UpdateBadgeIcon() OVERRIDE; |
+ virtual void UpdateDraggableRegions( |
+ const std::vector<extensions::DraggableRegion>& regions) OVERRIDE; |
+ virtual SkRegion* GetDraggableRegion() OVERRIDE; |
+ virtual void UpdateShape(scoped_ptr<SkRegion> region) OVERRIDE; |
+ virtual void HandleKeyboardEvent( |
+ const content::NativeWebKeyboardEvent& event) OVERRIDE; |
+// virtual bool IsFrameless() const OVERRIDE; |
+// virtual gfx::Insets GetFrameInsets() const OVERRIDE; |
+ virtual void HideWithApp() OVERRIDE; |
+ virtual void ShowWithApp() OVERRIDE; |
+ virtual void UpdateWindowMinMaxSize() OVERRIDE; |
+ |
+ // web_modal::WebContentsModalDialogHost implementation. |
+ virtual gfx::NativeView GetHostView() const OVERRIDE; |
+ virtual gfx::Point GetDialogPosition(const gfx::Size& size) OVERRIDE; |
+ virtual gfx::Size GetMaximumDialogSize() OVERRIDE; |
+ virtual void AddObserver( |
+ web_modal::ModalDialogHostObserver* observer) OVERRIDE; |
+ virtual void RemoveObserver( |
+ web_modal::ModalDialogHostObserver* observer) OVERRIDE; |
+ |
+ private: |
+ friend class ShapedAppWindowTargeterTest; |
+ |
+ void OnViewWasResized(); |
+ |
+// content::WebContents* web_contents() { return app_window_->web_contents(); } |
+ |
+ apps::AppWindow* app_window_; // Not owned. |
+ views::WebView* web_view_; |
+ views::Widget* window_; |
+// bool is_fullscreen_; |
+ |
+ // Custom shape of the window. If this is not set then the window has a |
+ // default shape, usually rectangular. |
+ scoped_ptr<SkRegion> shape_; |
+ |
+ scoped_ptr<SkRegion> draggable_region_; |
+ |
+ bool frameless_; |
+ bool transparent_background_; |
+// gfx::Size preferred_size_; |
+ bool resizable_; |
+ |
+ views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_; |
+ |
+//#if defined(USE_ASH) |
+// // Used to put non-frameless windows into immersive fullscreen on ChromeOS. In |
+// // immersive fullscreen, the window header (title bar and window controls) |
+// // slides onscreen as an overlay when the mouse is hovered at the top of the |
+// // screen. |
+// scoped_ptr<ash::ImmersiveFullscreenController> |
+// immersive_fullscreen_controller_; |
+//#endif |
+ |
+ ObserverList<web_modal::ModalDialogHostObserver> observer_list_; |
+ |
+// base::WeakPtrFactory<NativeAppWindowViews> weak_ptr_factory_; |
+ |
+// // Used to show the system menu. |
+// scoped_ptr<views::MenuRunner> menu_runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NativeAppWindowViews); |
+}; |
+ |
+#endif // APPS_UI_VIEWS_NATIVE_APP_WINDOW_VIEWS_H_ |