1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_TOUCH_H_ 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_TOUCH_H_ 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#pragma once 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <vector> 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/tab_contents/tab_contents_view.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/gfx/size.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/view.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ConstrainedWindowGtk; 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsentypedef struct _GtkFloatingContainer GtkFloatingContainer; 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass RenderViewContextMenuViews; 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SadTabView; 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SkBitmap; 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TabContentsDragSource; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass WebDragDestGtk; 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace gfx { 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass Point; 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace gfx 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace views { 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NativeViewHost; 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace views 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Touch-specific implementation of the TabContentsView for the touch UI. 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TabContentsViewTouch : public TabContentsView, public views::View { 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The corresponding TabContents is passed in the constructor, and manages our 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // lifetime. This doesn't need to be the case, but is this way currently 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // because that's what was easiest when they were split. 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit TabContentsViewTouch(TabContents* tab_contents); 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~TabContentsViewTouch(); 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Unlike Windows, ConstrainedWindows need to collaborate with the 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TabContentsViewTouch to position the dialogs. 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void AttachConstrainedWindow(ConstrainedWindowGtk* constrained_window); 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void RemoveConstrainedWindow(ConstrainedWindowGtk* constrained_window); 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TabContentsView implementation 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void CreateView(const gfx::Size& initial_size) OVERRIDE; 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual RenderWidgetHostView* CreateViewForWidget( 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen RenderWidgetHost* render_widget_host) OVERRIDE; 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::NativeView GetNativeView() const OVERRIDE; 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::NativeView GetContentNativeView() const OVERRIDE; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void GetContainerBounds(gfx::Rect* out) const OVERRIDE; 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetPageTitle(const std::wstring& title) OVERRIDE; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnTabCrashed(base::TerminationStatus status, 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int error_code) OVERRIDE; 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SizeContents(const gfx::Size& size) OVERRIDE; 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Focus() OVERRIDE; 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetInitialFocus() OVERRIDE; 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void StoreFocus() OVERRIDE; 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void RestoreFocus() OVERRIDE; 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void GetViewBounds(gfx::Rect* out) const OVERRIDE; 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // views::View implementation 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Backend implementation of RenderViewHostDelegate::View. 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ShowContextMenu(const ContextMenuParams& params); 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ShowPopupMenu(const gfx::Rect& bounds, 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int item_height, 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen double item_font_size, 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int selected_item, 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<WebMenuItem>& items, 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool right_aligned) OVERRIDE; 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void StartDragging(const WebDropData& drop_data, 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WebKit::WebDragOperationsMask ops_allowed, 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const SkBitmap& image, 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const gfx::Point& image_offset) OVERRIDE; 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void UpdateDragCursor(WebKit::WebDragOperation operation) OVERRIDE; 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void GotFocus() OVERRIDE; 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void TakeFocus(bool reverse) OVERRIDE; 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void VisibilityChanged(views::View *, bool is_visible) OVERRIDE; 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Signal handlers ----------------------------------------------------------- 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Handles notifying the TabContents and other operations when the window was 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // shown or hidden. 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void WasHidden(); 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void WasShown(); 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Handles resizing of the contents. This will notify the RenderWidgetHostView 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // of the change, reposition popups, and the find in page bar. 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void WasSized(const gfx::Size& size); 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // For any floating views (ConstrainedDialogs) this function centers them 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // within this view. It's called whem a ConstrainedDialog is attached and 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // when this view is resized. 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetFloatingPosition(const gfx::Size& size); 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Used to render the sad tab. This will be non-NULL only when the sad tab is 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // visible. 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<SadTabView> sad_tab_; 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Whether to ignore the next CHAR keyboard event. 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ignore_next_char_event_; 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The id used in the ViewStorage to store the last focused view. 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int last_focused_view_storage_id_; 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The context menu. Callbacks are asynchronous so we need to keep it around. 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<RenderViewContextMenuViews> context_menu_; 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Handle drags from this TabContentsView. 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(anicolao): figure out what's needed for drag'n'drop 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The event for the last mouse down we handled. We need this for drags. 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GdkEventButton last_mouse_down_; 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Current size. See comment in WidgetGtk as to why this is cached. 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen gfx::Size size_; 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Each individual UI for constrained dialogs currently displayed. The 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // objects in this vector are owned by the TabContents, not the view. 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<ConstrainedWindowGtk*> constrained_windows_; 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(TabContentsViewTouch); 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_TOUCH_H_ 132