blob: 0432d464a333d8ab3141f4f9cc007b9566e82b95 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
// Copyright (c) 2010 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_
#pragma once
#include "build/build_config.h"
#include "gfx/point.h"
#include "gfx/size.h"
#include "views/view.h"
namespace views {
#if defined(OS_WIN)
class WidgetWin;
#elif defined(OS_LINUX)
class WidgetGtk;
#endif
}
namespace gfx {
class Point;
}
class NativeViewPhotobooth;
class Tab;
class TabRenderer;
class DraggedTabView : public views::View {
public:
// Creates a new DraggedTabView using |renderer| as the View. DraggedTabView
// takes ownership of |renderer|.
DraggedTabView(views::View* renderer,
const gfx::Point& mouse_tab_offset,
const gfx::Size& contents_size,
const gfx::Size& min_size);
virtual ~DraggedTabView();
// Moves the DraggedTabView to the appropriate location given the mouse
// pointer at |screen_point|.
void MoveTo(const gfx::Point& screen_point);
// Sets the offset of the mouse from the upper left corner of the tab.
void set_mouse_tab_offset(const gfx::Point& offset) {
mouse_tab_offset_ = offset;
}
// Sets the width of the dragged tab and updates the dragged image.
void SetTabWidthAndUpdate(int width, NativeViewPhotobooth* photobooth);
// Notifies the DraggedTabView that it should update itself.
void Update();
private:
// Overridden from views::View:
virtual void Paint(gfx::Canvas* canvas);
virtual void Layout();
virtual gfx::Size GetPreferredSize();
// Paint the view, when it's not attached to any TabStrip.
void PaintDetachedView(gfx::Canvas* canvas);
// Paint the view, when "Show window contents while dragging" is disabled.
void PaintFocusRect(gfx::Canvas* 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.
#if defined(OS_WIN)
scoped_ptr<views::WidgetWin> container_;
#elif defined(OS_LINUX)
scoped_ptr<views::WidgetGtk> container_;
#endif
// The renderer that paints the Tab shape.
scoped_ptr<views::View> renderer_;
// True if "Show window contents while dragging" is enabled.
bool show_contents_on_drag_;
// 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 size of the tab renderer.
gfx::Size tab_size_;
// A handle to the DIB containing the current screenshot of the TabContents
// we are dragging.
NativeViewPhotobooth* photobooth_;
// Size of the TabContents being dragged.
gfx::Size contents_size_;
DISALLOW_COPY_AND_ASSIGN(DraggedTabView);
};
#endif // CHROME_BROWSER_VIEWS_TABS_DRAGGED_TAB_VIEW_H_
|