Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2764)

Unified Diff: apps/ui/views/shell_window_frame_view.cc

Issue 27029006: apps: Move chrome's ShellWindowFrameView into apps/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix typo Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « apps/ui/views/shell_window_frame_view.h ('k') | chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: apps/ui/views/shell_window_frame_view.cc
diff --git a/chrome/browser/ui/views/extensions/shell_window_frame_view.cc b/apps/ui/views/shell_window_frame_view.cc
similarity index 81%
rename from chrome/browser/ui/views/extensions/shell_window_frame_view.cc
rename to apps/ui/views/shell_window_frame_view.cc
index 7143e1156a36988730e34466670c3e25f0fe11da..2159debf249329cd089d24f0dede1c109e33965b 100644
--- a/chrome/browser/ui/views/extensions/shell_window_frame_view.cc
+++ b/apps/ui/views/shell_window_frame_view.cc
@@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/ui/views/extensions/shell_window_frame_view.h"
+#include "apps/ui/views/shell_window_frame_view.h"
+#include "apps/native_app_window.h"
#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/ui/views/apps/native_app_window_views.h"
#include "extensions/common/draggable_region.h"
#include "grit/theme_resources.h"
#include "grit/ui_strings.h" // Accessibility names
@@ -20,48 +20,47 @@
#include "ui/views/layout/grid_layout.h"
#include "ui/views/views_delegate.h"
#include "ui/views/widget/widget.h"
-
-#if defined(OS_WIN) && !defined(USE_AURA)
-#include "chrome/browser/shell_integration.h"
-#include "chrome/browser/web_applications/web_app.h"
-#include "ui/base/win/shell.h"
-#endif
-
-#if defined(USE_ASH)
-#include "ash/ash_constants.h"
-#include "chrome/browser/ui/ash/ash_util.h"
-#include "ui/aura/env.h"
-#endif
+#include "ui/views/widget/widget_delegate.h"
#if defined(USE_AURA)
+#include "ui/aura/env.h"
#include "ui/aura/window.h"
#endif
namespace {
-const int kResizeInsideBoundsSize = 5;
-const int kResizeAreaCornerSize = 16;
-
// Height of the chrome-style caption, in pixels.
const int kCaptionHeight = 25;
} // namespace
+namespace apps {
const char ShellWindowFrameView::kViewClassName[] =
"browser/ui/views/extensions/ShellWindowFrameView";
-ShellWindowFrameView::ShellWindowFrameView(NativeAppWindowViews* window)
+ShellWindowFrameView::ShellWindowFrameView(NativeAppWindow* window)
: window_(window),
frame_(NULL),
- close_button_(NULL) {
+ close_button_(NULL),
+ maximize_button_(NULL),
+ restore_button_(NULL),
+ minimize_button_(NULL),
+ resize_inside_bounds_size_(0),
+ resize_area_corner_size_(0) {
}
ShellWindowFrameView::~ShellWindowFrameView() {
}
-void ShellWindowFrameView::Init(views::Widget* frame) {
+void ShellWindowFrameView::Init(views::Widget* frame,
+ int resize_inside_bounds_size,
+ int resize_outside_bounds_size,
+ int resize_outside_scale_for_touch,
+ int resize_area_corner_size) {
frame_ = frame;
+ resize_inside_bounds_size_ = resize_inside_bounds_size;
+ resize_area_corner_size_ = resize_area_corner_size;
- if (!window_->frameless()) {
+ if (!window_->IsFrameless()) {
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
close_button_ = new views::ImageButton(this);
close_button_->SetImage(views::CustomButton::STATE_NORMAL,
@@ -108,36 +107,30 @@ void ShellWindowFrameView::Init(views::Widget* frame) {
}
#if defined(USE_AURA)
- int resize_inside_bounds_size = kResizeInsideBoundsSize;
aura::Window* window = frame->GetNativeWindow();
-#if defined(USE_ASH)
- if (chrome::IsNativeWindowInAsh(window)) {
- gfx::Insets mouse_insets = gfx::Insets(-ash::kResizeOutsideBoundsSize,
- -ash::kResizeOutsideBoundsSize,
- -ash::kResizeOutsideBoundsSize,
- -ash::kResizeOutsideBoundsSize);
- gfx::Insets touch_insets = mouse_insets.Scale(
- ash::kResizeOutsideBoundsScaleForTouch);
+ // Some Aura implementations (Ash) allow resize handles outside the window.
+ if (resize_outside_bounds_size > 0) {
+ gfx::Insets mouse_insets = gfx::Insets(-resize_outside_bounds_size,
+ -resize_outside_bounds_size,
+ -resize_outside_bounds_size,
+ -resize_outside_bounds_size);
+ gfx::Insets touch_insets =
+ mouse_insets.Scale(resize_outside_scale_for_touch);
// Ensure we get resize cursors for a few pixels outside our bounds.
window->SetHitTestBoundsOverrideOuter(mouse_insets, touch_insets);
-
- // If the window is in ash, the inside area used for resizing will be
- // smaller due to the fact that outside area is also used for resizing.
- resize_inside_bounds_size = ash::kResizeInsideBoundsSize;
}
-#endif
// Ensure we get resize cursors just inside our bounds as well.
// TODO(jeremya): do we need to update these when in fullscreen/maximized?
window->set_hit_test_bounds_override_inner(
- gfx::Insets(resize_inside_bounds_size, resize_inside_bounds_size,
- resize_inside_bounds_size, resize_inside_bounds_size));
+ gfx::Insets(resize_inside_bounds_size_, resize_inside_bounds_size_,
+ resize_inside_bounds_size_, resize_inside_bounds_size_));
#endif
}
// views::NonClientFrameView implementation.
gfx::Rect ShellWindowFrameView::GetBoundsForClientView() const {
- if (window_->frameless() || frame_->IsFullscreen())
+ if (window_->IsFrameless() || frame_->IsFullscreen())
return bounds();
return gfx::Rect(0, kCaptionHeight, width(),
std::max(0, height() - kCaptionHeight));
@@ -145,7 +138,7 @@ gfx::Rect ShellWindowFrameView::GetBoundsForClientView() const {
gfx::Rect ShellWindowFrameView::GetWindowBoundsForClientBounds(
const gfx::Rect& client_bounds) const {
- if (window_->frameless()) {
+ if (window_->IsFrameless()) {
gfx::Rect window_bounds = client_bounds;
// Enforce minimum size (1, 1) in case that client_bounds is passed with
// empty size. This could occur when the frameless window is being
@@ -170,24 +163,19 @@ int ShellWindowFrameView::NonClientHitTest(const gfx::Point& point) {
if (frame_->IsFullscreen())
return HTCLIENT;
- int resize_inside_bounds_size = kResizeInsideBoundsSize;
- int resize_area_corner_size = kResizeAreaCornerSize;
-
-#if defined(USE_ASH)
+ gfx::Rect expanded_bounds = bounds();
+#if defined(USE_AURA)
+ // Some Aura implementations (Ash) optionally allow resize handles just
+ // outside the window bounds.
aura::Window* window = frame_->GetNativeWindow();
- if (chrome::IsNativeWindowInAsh(window)) {
- gfx::Rect expanded_bounds = bounds();
- int outside_bounds = ash::kResizeOutsideBoundsSize;
- if (aura::Env::GetInstance()->is_touch_down())
- outside_bounds *= ash::kResizeOutsideBoundsScaleForTouch;
- expanded_bounds.Inset(-outside_bounds, -outside_bounds);
- if (!expanded_bounds.Contains(point))
- return HTNOWHERE;
-
- resize_inside_bounds_size = ash::kResizeInsideBoundsSize;
- resize_area_corner_size = ash::kResizeAreaCornerSize;
- }
+ if (aura::Env::GetInstance()->is_touch_down())
+ expanded_bounds.Inset(window->hit_test_bounds_override_outer_touch());
+ else
+ expanded_bounds.Inset(window->hit_test_bounds_override_outer_mouse());
#endif
+ // Points outside the (possibly expanded) bounds can be discarded.
+ if (!expanded_bounds.Contains(point))
+ return HTNOWHERE;
// Check the frame first, as we allow a small area overlapping the contents
// to be used for resize handles.
@@ -198,22 +186,23 @@ int ShellWindowFrameView::NonClientHitTest(const gfx::Point& point) {
// fullscreen, as it can't be resized in those states.
int resize_border =
(frame_->IsMaximized() || frame_->IsFullscreen()) ? 0 :
- resize_inside_bounds_size;
+ resize_inside_bounds_size_;
int frame_component = GetHTComponentForFrame(point,
resize_border,
resize_border,
- resize_area_corner_size,
- resize_area_corner_size,
+ resize_area_corner_size_,
+ resize_area_corner_size_,
can_ever_resize);
if (frame_component != HTNOWHERE)
return frame_component;
// Check for possible draggable region in the client area for the frameless
// window.
- if (window_->frameless() &&
- window_->draggable_region() &&
- window_->draggable_region()->contains(point.x(), point.y()))
- return HTCAPTION;
+ if (window_->IsFrameless()) {
+ SkRegion* draggable_region = window_->GetDraggableRegion();
+ if (draggable_region && draggable_region->contains(point.x(), point.y()))
+ return HTCAPTION;
+ }
int client_component = frame_->client_view()->NonClientHitTest(point);
if (client_component != HTNOWHERE)
@@ -243,7 +232,7 @@ gfx::Size ShellWindowFrameView::GetPreferredSize() {
}
void ShellWindowFrameView::Layout() {
- if (window_->frameless())
+ if (window_->IsFrameless())
return;
gfx::Size close_size = close_button_->GetPreferredSize();
const int kButtonOffsetY = 0;
@@ -290,7 +279,7 @@ void ShellWindowFrameView::Layout() {
}
void ShellWindowFrameView::OnPaint(gfx::Canvas* canvas) {
- if (window_->frameless())
+ if (window_->IsFrameless())
return;
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
@@ -325,7 +314,7 @@ const char* ShellWindowFrameView::GetClassName() const {
gfx::Size ShellWindowFrameView::GetMinimumSize() {
gfx::Size min_size = frame_->client_view()->GetMinimumSize();
- if (window_->frameless())
+ if (window_->IsFrameless())
return min_size;
// Ensure we can display the top of the caption area.
@@ -358,7 +347,7 @@ gfx::Size ShellWindowFrameView::GetMaximumSize() {
void ShellWindowFrameView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
- DCHECK(!window_->frameless());
+ DCHECK(!window_->IsFrameless());
if (sender == close_button_)
frame_->Close();
else if (sender == maximize_button_)
@@ -368,3 +357,5 @@ void ShellWindowFrameView::ButtonPressed(views::Button* sender,
else if (sender == minimize_button_)
frame_->Minimize();
}
+
+} // namespace apps
« no previous file with comments | « apps/ui/views/shell_window_frame_view.h ('k') | chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698