diff options
author | beng@google.com <beng@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-09-12 22:44:06 +0000 |
---|---|---|
committer | beng@google.com <beng@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-09-12 22:44:06 +0000 |
commit | 3146282c2250c51569d971234fbc9756b4d7a2d4 (patch) | |
tree | 0f9f418993163cd7a67955d10e89928b28787978 /chrome/browser/views/tabs/dragged_tab_view.h | |
parent | 5db2a6ed0d09ef82cf84ba2677ecfcdff6192c79 (diff) | |
download | chromium_src-3146282c2250c51569d971234fbc9756b4d7a2d4.zip chromium_src-3146282c2250c51569d971234fbc9756b4d7a2d4.tar.gz chromium_src-3146282c2250c51569d971234fbc9756b4d7a2d4.tar.bz2 |
Move View components of the Browser's tab strip into the browser_views project, and into the views/ subdirectory on disk.
B=2198
Review URL: http://codereview.chromium.org/3020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2140 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/tabs/dragged_tab_view.h')
-rw-r--r-- | chrome/browser/views/tabs/dragged_tab_view.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/chrome/browser/views/tabs/dragged_tab_view.h b/chrome/browser/views/tabs/dragged_tab_view.h new file mode 100644 index 0000000..e59582c --- /dev/null +++ b/chrome/browser/views/tabs/dragged_tab_view.h @@ -0,0 +1,119 @@ +// Copyright (c) 2006-2008 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 CHROME_BROWSER_VIEWS_TABS_DRAGGED_TAB_VIEW_H_ +#define CHROME_BROWSER_VIEWS_TABS_DRAGGED_TAB_VIEW_H_ + +#include "base/gfx/point.h" +#include "base/gfx/size.h" +#include "base/task.h" +#include "chrome/common/slide_animation.h" +#include "chrome/views/view.h" +#include "skia/include/SkBitmap.h" + +namespace ChromeViews { +class HWNDViewContainer; +} +namespace gfx { +class Point; +} +class HWNDPhotobooth; +class Tab; +class TabContents; +class TabRenderer; + +class DraggedTabView : public ChromeViews::View, + public AnimationDelegate { + public: + DraggedTabView(TabContents* datasource, + const gfx::Point& mouse_tab_offset, + const gfx::Size& contents_size); + virtual ~DraggedTabView(); + + // Moves the DraggedTabView to the appropriate location given the mouse + // pointer at |screen_point|. + void MoveTo(const gfx::Point& screen_point); + + // Notifies the DraggedTabView that it has become attached to a TabStrip. + void Attach(int selected_width); + + // Notifies the DraggedTabView that it has been detached from a TabStrip. + void Detach(HWNDPhotobooth* photobooth); + + // Notifies the DraggedTabView that it should update itself. + void Update(); + + // Animates the DraggedTabView to the specified bounds, then calls back to + // |callback|. + void AnimateToBounds(const gfx::Rect& bounds, Callback0::Type* callback); + + // Returns the size of the DraggedTabView. Used when attaching to a TabStrip + // to determine where to place the Tab in the attached TabStrip. + gfx::Size attached_tab_size() const { return attached_tab_size_; } + + private: + // Overridden from AnimationDelegate: + virtual void AnimationProgressed(const Animation* animation); + virtual void AnimationEnded(const Animation* animation); + virtual void AnimationCanceled(const Animation* animation); + + // Overridden from ChromeViews::View: + virtual void Paint(ChromeCanvas* canvas); + virtual void Layout(); + virtual void GetPreferredSize(CSize* out); + + // Paint the view, when it's attached to a TabStrip. + void PaintAttachedTab(ChromeCanvas* canvas); + + // Paint the view, when it's not attached to any TabStrip. + void PaintDetachedView(ChromeCanvas* canvas); + + // Resizes the container to fit the content for the current attachment mode. + void ResizeContainer(); + + // Utility for scaling a size by the current scaling factor. + int ScaleValue(int value); + + // The window that contains the DraggedTabView. + ChromeViews::HWNDViewContainer* container_; + + // The renderer that paints the Tab shape. + scoped_ptr<TabRenderer> renderer_; + + // True if the view is currently attached to a TabStrip. Controls rendering + // and sizing modes. + bool attached_; + + // The unscaled offset of the mouse from the top left of the dragged Tab. + // This is used to maintain an appropriate offset for the mouse pointer when + // dragging scaled and unscaled representations, and also to calculate the + // position of detached windows. + gfx::Point mouse_tab_offset_; + + // The desired width of the TabRenderer when the DraggedTabView is attached + // to a TabStrip. + gfx::Size attached_tab_size_; + + // A handle to the DIB containing the current screenshot of the TabContents + // we are dragging. + HWNDPhotobooth* photobooth_; + + // The dimensions of the TabContents being dragged. + gfx::Size contents_size_; + + // The animation used to slide the attached view to its final location. + SlideAnimation close_animation_; + + // A callback notified when the animation is complete. + scoped_ptr<Callback0::Type> animation_callback_; + + // The start and end bounds of the animation sequence. + gfx::Rect animation_start_bounds_; + gfx::Rect animation_end_bounds_; + + DISALLOW_EVIL_CONSTRUCTORS(DraggedTabView); +}; + +#endif // CHROME_BROWSER_VIEWS_TABS_DRAGGED_TAB_VIEW_H_ + |