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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
// Copyright (c) 2012 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_UI_PANELS_NATIVE_PANEL_H_
#define CHROME_BROWSER_UI_PANELS_NATIVE_PANEL_H_
#include "chrome/browser/ui/panels/panel.h"
#include "chrome/browser/ui/panels/panel_constants.h"
#include "ui/gfx/native_widget_types.h"
class NativePanelTesting;
namespace content {
struct NativeWebKeyboardEvent;
class WebContents;
}
namespace gfx {
class Rect;
} // namespace gfx
// An interface for a class that implements platform-specific behavior for panel
// windows to provide additional methods not found in ui::BaseWindow.
class NativePanel {
friend class BasePanelBrowserTest; // for CreateNativePanelTesting
friend class Panel;
friend class PanelBrowserWindow;
friend class PanelBrowserTest;
friend class PanelExtensionBrowserTest;
protected:
virtual ~NativePanel() {}
virtual void ShowPanel() = 0;
virtual void ShowPanelInactive() = 0;
virtual gfx::Rect GetPanelBounds() const = 0;
virtual void SetPanelBounds(const gfx::Rect& bounds) = 0;
virtual void SetPanelBoundsInstantly(const gfx::Rect& bounds) = 0;
virtual void ClosePanel() = 0;
virtual void ActivatePanel() = 0;
virtual void DeactivatePanel() = 0;
virtual bool IsPanelActive() const = 0;
virtual void PreventActivationByOS(bool prevent_activation) = 0;
virtual gfx::NativeWindow GetNativePanelWindow() = 0;
virtual void UpdatePanelTitleBar() = 0;
virtual void UpdatePanelLoadingAnimations(bool should_animate) = 0;
virtual void PanelWebContentsFocused(content::WebContents* contents) = 0;
virtual void PanelCut() = 0;
virtual void PanelCopy() = 0;
virtual void PanelPaste() = 0;
virtual void DrawAttention(bool draw_attention) = 0;
virtual bool IsDrawingAttention() const = 0;
virtual void HandlePanelKeyboardEvent(
const content::NativeWebKeyboardEvent& event) = 0;
virtual void FullScreenModeChanged(bool is_full_screen) = 0;
virtual void PanelExpansionStateChanging(Panel::ExpansionState old_state,
Panel::ExpansionState new_state) = 0;
virtual void AttachWebContents(content::WebContents* contents) = 0;
virtual void DetachWebContents(content::WebContents* contents) = 0;
// Returns the exterior size of the panel window given the client content
// size and vice versa.
virtual gfx::Size WindowSizeFromContentSize(
const gfx::Size& content_size) const = 0;
virtual gfx::Size ContentSizeFromWindowSize(
const gfx::Size& window_size) const = 0;
virtual int TitleOnlyHeight() const = 0;
// Gets or sets whether the panel window is always on top.
virtual bool IsPanelAlwaysOnTop() const = 0;
virtual void SetPanelAlwaysOnTop(bool on_top) = 0;
// Updates the visibility of the minimize and restore buttons.
virtual void UpdatePanelMinimizeRestoreButtonVisibility() = 0;
// Sets how the panel window displays its 4 corners, rounded or not.
virtual void SetWindowCornerStyle(panel::CornerStyle corner_style) = 0;
// Performs the system minimize for the panel, i.e. becoming iconic.
virtual void MinimizePanelBySystem() = 0;
// Returns true if the panel has been minimized by the system, i.e. becoming
// iconic.
virtual bool IsPanelMinimizedBySystem() const = 0;
// Returns true if the panel is shown in the active desktop. The user could
// create and use multiple virtual desktops or workspaces.
virtual bool IsPanelShownOnActiveDesktop() const = 0;
// Turns on/off the shadow effect around the window shape.
virtual void ShowShadow(bool show) = 0;
// Create testing interface for native panel. (Keep this last to separate
// it from regular API.)
virtual NativePanelTesting* CreateNativePanelTesting() = 0;
};
// A NativePanel utility interface used for accessing elements of the
// native panel used only by test automation.
class NativePanelTesting {
public:
virtual ~NativePanelTesting() {}
// Wrappers for the common cases when no modifier is needed.
void PressLeftMouseButtonTitlebar(const gfx::Point& mouse_location) {
PressLeftMouseButtonTitlebar(mouse_location, panel::NO_MODIFIER);
}
void ReleaseMouseButtonTitlebar() {
ReleaseMouseButtonTitlebar(panel::NO_MODIFIER);
}
// |mouse_location| is in screen coordinates.
virtual void PressLeftMouseButtonTitlebar(
const gfx::Point& mouse_location, panel::ClickModifier modifier) = 0;
virtual void ReleaseMouseButtonTitlebar(panel::ClickModifier modifier) = 0;
virtual void DragTitlebar(const gfx::Point& mouse_location) = 0;
virtual void CancelDragTitlebar() = 0;
virtual void FinishDragTitlebar() = 0;
// Verifies, on a deepest possible level, if the Panel is showing the "Draw
// Attention" effects to the user. May include checking colors etc.
virtual bool VerifyDrawingAttention() const = 0;
// Verifies, on a deepest possible level, if the native panel is really
// active, i.e. the titlebar is painted per its active state.
virtual bool VerifyActiveState(bool is_active) = 0;
// Verifies, on a deepest possible level, if the native panel is really
// showing a correct app icon (taskbar icon).
virtual bool VerifyAppIcon() const = 0;
// Verifies, on a deepest possible level, if the native panel is really
// minimized by the system.
virtual bool VerifySystemMinimizeState() const = 0;
virtual bool IsWindowVisible() const = 0;
virtual bool IsWindowSizeKnown() const = 0;
virtual bool IsAnimatingBounds() const = 0;
virtual bool IsButtonVisible(panel::TitlebarButtonType button_type) const = 0;
virtual panel::CornerStyle GetWindowCornerStyle() const = 0;
// Makes sure that the application is running on foreground. Returns false
// if the effort fails.
virtual bool EnsureApplicationRunOnForeground() = 0;
};
#endif // CHROME_BROWSER_UI_PANELS_NATIVE_PANEL_H_
|