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

Unified Diff: apps/shell_window.cc

Issue 26751003: Factor out [min|max]_size into ShellWindow::SizeConstraints (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments, fix bug 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/shell_window.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: apps/shell_window.cc
diff --git a/apps/shell_window.cc b/apps/shell_window.cc
index 691bff8d947aaa19dc33249435b81464fc39e65f..590784ee39e954d99caca80582fd239bdd8e0f31 100644
--- a/apps/shell_window.cc
+++ b/apps/shell_window.cc
@@ -56,6 +56,57 @@ const int kDefaultHeight = 384;
namespace apps {
+ShellWindow::SizeConstraints::SizeConstraints()
+ : maximum_size_(kUnboundedSize, kUnboundedSize) {
+}
+
+ShellWindow::SizeConstraints::SizeConstraints(const gfx::Size& min_size,
+ const gfx::Size& max_size)
+ : minimum_size_(min_size),
+ maximum_size_(max_size) {
+}
+
+ShellWindow::SizeConstraints::~SizeConstraints() {}
+
+gfx::Size ShellWindow::SizeConstraints::ClampSize(gfx::Size size) const {
+ const gfx::Size max_size = GetMaximumSize();
+ if (max_size.width() != kUnboundedSize)
+ size.set_width(std::min(size.width(), GetMaximumSize().width()));
+ if (max_size.height() != kUnboundedSize)
+ size.set_height(std::min(size.height(), GetMaximumSize().height()));
+ size.SetToMax(GetMinimumSize());
+ return size;
+}
+
+bool ShellWindow::SizeConstraints::HasMinimumSize() const {
+ return GetMinimumSize().width() != kUnboundedSize ||
+ GetMinimumSize().height() != kUnboundedSize;
+}
+
+bool ShellWindow::SizeConstraints::HasMaximumSize() const {
+ const gfx::Size max_size = GetMaximumSize();
+ return max_size.width() != kUnboundedSize ||
+ max_size.height() != kUnboundedSize;
+}
+
+bool ShellWindow::SizeConstraints::HasFixedSize() const {
+ return !GetMinimumSize().IsEmpty() && GetMinimumSize() == GetMaximumSize();
+}
+
+gfx::Size ShellWindow::SizeConstraints::GetMinimumSize() const {
+ return minimum_size_;
+}
+
+gfx::Size ShellWindow::SizeConstraints::GetMaximumSize() const {
+ return gfx::Size(
+ maximum_size_.width() == kUnboundedSize ?
+ kUnboundedSize :
+ std::max(maximum_size_.width(), minimum_size_.width()),
+ maximum_size_.height() == kUnboundedSize ?
+ kUnboundedSize :
+ std::max(maximum_size_.height(), minimum_size_.height()));
+}
+
ShellWindow::CreateParams::CreateParams()
: window_type(ShellWindow::WINDOW_TYPE_DEFAULT),
frame(ShellWindow::FRAME_CHROME),
@@ -101,67 +152,9 @@ void ShellWindow::Init(const GURL& url,
extensions::SetViewType(web_contents, extensions::VIEW_TYPE_APP_SHELL);
// Initialize the window
- window_type_ = params.window_type;
-
- gfx::Rect bounds = params.bounds;
-
- if (bounds.width() == 0)
- bounds.set_width(kDefaultWidth);
- if (bounds.height() == 0)
- bounds.set_height(kDefaultHeight);
-
- // If left and top are left undefined, the native shell window will center
- // the window on the main screen in a platform-defined manner.
-
- CreateParams new_params = params;
-
- // Load cached state if it exists.
- if (!params.window_key.empty()) {
- window_key_ = params.window_key;
-
- ShellWindowGeometryCache* cache = ShellWindowGeometryCache::Get(profile());
-
- gfx::Rect cached_bounds;
- gfx::Rect cached_screen_bounds;
- ui::WindowShowState cached_state = ui::SHOW_STATE_DEFAULT;
- if (cache->GetGeometry(extension()->id(), params.window_key, &cached_bounds,
- &cached_screen_bounds, &cached_state)) {
- // App window has cached screen bounds, make sure it fits on screen in
- // case the screen resolution changed.
- gfx::Screen* screen = gfx::Screen::GetNativeScreen();
- gfx::Display display = screen->GetDisplayMatching(cached_bounds);
- gfx::Rect current_screen_bounds = display.work_area();
- AdjustBoundsToBeVisibleOnScreen(cached_bounds,
- cached_screen_bounds,
- current_screen_bounds,
- params.minimum_size,
- &bounds);
- new_params.state = cached_state;
- }
- }
-
- gfx::Size& minimum_size = new_params.minimum_size;
- gfx::Size& maximum_size = new_params.maximum_size;
-
- // In the case that minimum size > maximum size, we consider the minimum
- // size to be more important.
- if (maximum_size.width() && maximum_size.width() < minimum_size.width())
- maximum_size.set_width(minimum_size.width());
- if (maximum_size.height() && maximum_size.height() < minimum_size.height())
- maximum_size.set_height(minimum_size.height());
-
- if (maximum_size.width() && bounds.width() > maximum_size.width())
- bounds.set_width(maximum_size.width());
- if (bounds.width() != INT_MIN && bounds.width() < minimum_size.width())
- bounds.set_width(minimum_size.width());
-
- if (maximum_size.height() && bounds.height() > maximum_size.height())
- bounds.set_height(maximum_size.height());
- if (bounds.height() != INT_MIN && bounds.height() < minimum_size.height())
- bounds.set_height(minimum_size.height());
-
- new_params.bounds = bounds;
-
+ CreateParams new_params = LoadDefaultsAndConstrain(params);
+ window_type_ = new_params.window_type;
+ window_key_ = new_params.window_key;
native_app_window_.reset(delegate_->CreateNativeAppWindow(this, new_params));
if (!new_params.hidden) {
@@ -190,7 +183,7 @@ void ShellWindow::Init(const GURL& url,
registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING,
content::NotificationService::AllSources());
- shell_window_contents_->LoadContents(params.creator_process_id);
+ shell_window_contents_->LoadContents(new_params.creator_process_id);
// Prevent the browser process from shutting down while this window is open.
chrome::StartKeepAlive();
@@ -643,6 +636,50 @@ void ShellWindow::AdjustBoundsToBeVisibleOnScreen(
}
}
+ShellWindow::CreateParams ShellWindow::LoadDefaultsAndConstrain(
+ CreateParams params) const {
+ gfx::Rect bounds = params.bounds;
+
+ if (bounds.width() == 0)
+ bounds.set_width(kDefaultWidth);
+ if (bounds.height() == 0)
+ bounds.set_height(kDefaultHeight);
+
+ // If left and top are left undefined, the native shell window will center
+ // the window on the main screen in a platform-defined manner.
+
+ // Load cached state if it exists.
+ if (!params.window_key.empty()) {
+ ShellWindowGeometryCache* cache = ShellWindowGeometryCache::Get(profile());
+
+ gfx::Rect cached_bounds;
+ gfx::Rect cached_screen_bounds;
+ ui::WindowShowState cached_state = ui::SHOW_STATE_DEFAULT;
+ if (cache->GetGeometry(extension()->id(), params.window_key,
+ &cached_bounds, &cached_screen_bounds,
+ &cached_state)) {
+ // App window has cached screen bounds, make sure it fits on screen in
+ // case the screen resolution changed.
+ gfx::Screen* screen = gfx::Screen::GetNativeScreen();
+ gfx::Display display = screen->GetDisplayMatching(cached_bounds);
+ gfx::Rect current_screen_bounds = display.work_area();
+ AdjustBoundsToBeVisibleOnScreen(cached_bounds,
+ cached_screen_bounds,
+ current_screen_bounds,
+ params.minimum_size,
+ &bounds);
+ params.state = cached_state;
+ }
+ }
+
+ SizeConstraints size_constraints(params.minimum_size, params.maximum_size);
+ params.bounds.set_size(size_constraints.ClampSize(bounds.size()));
+ params.minimum_size = size_constraints.GetMinimumSize();
+ params.maximum_size = size_constraints.GetMaximumSize();
+
+ return params;
+}
+
// static
SkRegion* ShellWindow::RawDraggableRegionsToSkRegion(
const std::vector<extensions::DraggableRegion>& regions) {
« no previous file with comments | « apps/shell_window.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698