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

Unified Diff: components/native_app_window/app_window_create_params.cc

Issue 616253002: Extract NativeAppWindow from src/extensions Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: might fix athena. similarity=33 Created 6 years, 3 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
Index: components/native_app_window/app_window_create_params.cc
diff --git a/components/native_app_window/app_window_create_params.cc b/components/native_app_window/app_window_create_params.cc
new file mode 100644
index 0000000000000000000000000000000000000000..8e882ab051945afad7a45803095d4bcc5eb2ed1e
--- /dev/null
+++ b/components/native_app_window/app_window_create_params.cc
@@ -0,0 +1,141 @@
+// Copyright 2014 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.
+
+#include "components/native_app_window/app_window_create_params.h"
+
+#include <algorithm>
+
+#include "components/native_app_window/size_constraints.h"
+#include "ui/gfx/geometry/insets.h"
+
+namespace native_app_window {
+
+namespace {
+
+// Combines the constraints of the content and window, and returns constraints
+// for the window.
+gfx::Size GetCombinedWindowConstraints(const gfx::Size& window_constraints,
+ const gfx::Size& content_constraints,
+ const gfx::Insets& frame_insets) {
+ gfx::Size combined_constraints(window_constraints);
+ if (content_constraints.width() > 0) {
+ combined_constraints.set_width(content_constraints.width() +
+ frame_insets.width());
+ }
+ if (content_constraints.height() > 0) {
+ combined_constraints.set_height(content_constraints.height() +
+ frame_insets.height());
+ }
+ return combined_constraints;
+}
+
+// Combines the constraints of the content and window, and returns constraints
+// for the content.
+gfx::Size GetCombinedContentConstraints(const gfx::Size& window_constraints,
+ const gfx::Size& content_constraints,
+ const gfx::Insets& frame_insets) {
+ gfx::Size combined_constraints(content_constraints);
+ if (window_constraints.width() > 0) {
+ combined_constraints.set_width(
+ std::max(0, window_constraints.width() - frame_insets.width()));
+ }
+ if (window_constraints.height() > 0) {
+ combined_constraints.set_height(
+ std::max(0, window_constraints.height() - frame_insets.height()));
+ }
+ return combined_constraints;
+}
+
+} // namespace
+
+// BoundsSpecification
+
+const int BoundsSpecification::kUnspecifiedPosition = INT_MIN;
+
+BoundsSpecification::BoundsSpecification()
+ : bounds(kUnspecifiedPosition, kUnspecifiedPosition, 0, 0) {
+}
+
+BoundsSpecification::~BoundsSpecification() {
+}
+
+void BoundsSpecification::ResetBounds() {
+ bounds.SetRect(kUnspecifiedPosition, kUnspecifiedPosition, 0, 0);
+}
+
+// AppWindowCreateParams
+
+AppWindowCreateParams::AppWindowCreateParams()
+ : window_type(WINDOW_TYPE_DEFAULT),
+ frame(FRAME_CHROME),
+ has_frame_color(false),
+ active_frame_color(SK_ColorBLACK),
+ inactive_frame_color(SK_ColorBLACK),
+ alpha_enabled(false),
+ is_ime_window(false),
+ creator_process_id(0),
+ state(ui::SHOW_STATE_DEFAULT),
+ hidden(false),
+ resizable(true),
+ focused(true),
+ always_on_top(false),
+ visible_on_all_workspaces(false) {
+}
+
+AppWindowCreateParams::~AppWindowCreateParams() {
+}
+
+gfx::Rect AppWindowCreateParams::GetInitialWindowBounds(
+ const gfx::Insets& frame_insets) const {
+ // Combine into a single window bounds.
+ gfx::Rect combined_bounds(window_spec.bounds);
+ if (content_spec.bounds.x() != BoundsSpecification::kUnspecifiedPosition)
+ combined_bounds.set_x(content_spec.bounds.x() - frame_insets.left());
+ if (content_spec.bounds.y() != BoundsSpecification::kUnspecifiedPosition)
+ combined_bounds.set_y(content_spec.bounds.y() - frame_insets.top());
+ if (content_spec.bounds.width() > 0) {
+ combined_bounds.set_width(content_spec.bounds.width() +
+ frame_insets.width());
+ }
+ if (content_spec.bounds.height() > 0) {
+ combined_bounds.set_height(content_spec.bounds.height() +
+ frame_insets.height());
+ }
+
+ // Constrain the bounds.
+ SizeConstraints constraints(
+ GetCombinedWindowConstraints(
+ window_spec.minimum_size, content_spec.minimum_size, frame_insets),
+ GetCombinedWindowConstraints(
+ window_spec.maximum_size, content_spec.maximum_size, frame_insets));
+ combined_bounds.set_size(constraints.ClampSize(combined_bounds.size()));
+
+ return combined_bounds;
+}
+
+gfx::Size AppWindowCreateParams::GetContentMinimumSize(
+ const gfx::Insets& frame_insets) const {
+ return GetCombinedContentConstraints(
+ window_spec.minimum_size, content_spec.minimum_size, frame_insets);
+}
+
+gfx::Size AppWindowCreateParams::GetContentMaximumSize(
+ const gfx::Insets& frame_insets) const {
+ return GetCombinedContentConstraints(
+ window_spec.maximum_size, content_spec.maximum_size, frame_insets);
+}
+
+gfx::Size AppWindowCreateParams::GetWindowMinimumSize(
+ const gfx::Insets& frame_insets) const {
+ return GetCombinedWindowConstraints(
+ window_spec.minimum_size, content_spec.minimum_size, frame_insets);
+}
+
+gfx::Size AppWindowCreateParams::GetWindowMaximumSize(
+ const gfx::Insets& frame_insets) const {
+ return GetCombinedWindowConstraints(
+ window_spec.maximum_size, content_spec.maximum_size, frame_insets);
+}
+
+} // namespace native_app_window
« no previous file with comments | « components/native_app_window/app_window_create_params.h ('k') | components/native_app_window/draggable_region.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698