Index: chrome/browser/dock_info.cc |
=================================================================== |
--- chrome/browser/dock_info.cc (revision 68008) |
+++ chrome/browser/dock_info.cc (working copy) |
@@ -1,268 +0,0 @@ |
-// Copyright (c) 2006-2008 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 "chrome/browser/dock_info.h" |
- |
-#if defined(TOOLKIT_VIEWS) |
-#include "chrome/browser/views/tabs/tab.h" |
-#else |
-#include "chrome/browser/gtk/tabs/tab_gtk.h" |
-#endif |
- |
-namespace { |
- |
-// Distance in pixels between the hotspot and when the hint should be shown. |
-const int kHotSpotDeltaX = 120; |
-const int kHotSpotDeltaY = 120; |
- |
-// Size of the popup window. |
-const int kPopupWidth = 70; |
-const int kPopupHeight = 70; |
- |
-} // namespace |
- |
-// static |
-DockInfo::Factory* DockInfo::factory_ = NULL; |
- |
-// static |
-bool DockInfo::IsCloseToPoint(const gfx::Point& screen_loc, |
- int x, |
- int y, |
- bool* in_enable_area) { |
- int delta_x = abs(x - screen_loc.x()); |
- int delta_y = abs(y - screen_loc.y()); |
- *in_enable_area = (delta_x < kPopupWidth / 2 && delta_y < kPopupHeight / 2); |
- return *in_enable_area || (delta_x < kHotSpotDeltaX && |
- delta_y < kHotSpotDeltaY); |
-} |
- |
-// static |
-bool DockInfo::IsCloseToMonitorPoint(const gfx::Point& screen_loc, |
- int x, |
- int y, |
- DockInfo::Type type, |
- bool* in_enable_area) { |
- // Because the monitor relative positions are aligned with the edge of the |
- // monitor these need to be handled differently. |
- int delta_x = abs(x - screen_loc.x()); |
- int delta_y = abs(y - screen_loc.y()); |
- |
- int enable_delta_x = kPopupWidth / 2; |
- int enable_delta_y = kPopupHeight / 2; |
- int hot_spot_delta_x = kHotSpotDeltaX; |
- int hot_spot_delta_y = kHotSpotDeltaY; |
- |
- switch (type) { |
- case DockInfo::LEFT_HALF: |
- case DockInfo::RIGHT_HALF: |
- enable_delta_x += enable_delta_x; |
- hot_spot_delta_x += hot_spot_delta_x; |
- break; |
- |
- |
- case DockInfo::MAXIMIZE: { |
- // Make the maximize height smaller than the tab height to avoid showing |
- // the dock indicator when close to maximized browser. |
-#if defined(TOOLKIT_VIEWS) |
- hot_spot_delta_y = Tab::GetMinimumUnselectedSize().height() - 1; |
-#else |
- hot_spot_delta_y = TabGtk::GetMinimumUnselectedSize().height() - 1; |
-#endif |
- enable_delta_y = hot_spot_delta_y / 2; |
- break; |
- } |
- case DockInfo::BOTTOM_HALF: |
- enable_delta_y += enable_delta_y; |
- hot_spot_delta_y += hot_spot_delta_y; |
- break; |
- |
- default: |
- NOTREACHED(); |
- return false; |
- } |
- *in_enable_area = (delta_x < enable_delta_x && delta_y < enable_delta_y); |
- bool result = (*in_enable_area || (delta_x < hot_spot_delta_x && |
- delta_y < hot_spot_delta_y)); |
- if (type != DockInfo::MAXIMIZE) |
- return result; |
- |
- // Make the hot spot/enable spot for maximized windows the whole top of the |
- // monitor. |
- int max_delta_y = abs(screen_loc.y() - y); |
- *in_enable_area = (*in_enable_area || (max_delta_y < enable_delta_y)); |
- return *in_enable_area || (max_delta_y < hot_spot_delta_y); |
-} |
- |
-// static |
-int DockInfo::popup_width() { |
- return kPopupWidth; |
-} |
- |
-// static |
-int DockInfo::popup_height() { |
- return kPopupHeight; |
-} |
- |
-bool DockInfo::IsValidForPoint(const gfx::Point& screen_point) { |
- if (type_ == NONE) |
- return false; |
- |
- if (window_) { |
- return IsCloseToPoint(screen_point, hot_spot_.x(), hot_spot_.y(), |
- &in_enable_area_); |
- } |
- |
- return monitor_bounds_.Contains(screen_point) && |
- IsCloseToMonitorPoint(screen_point, hot_spot_.x(), |
- hot_spot_.y(), type_, &in_enable_area_); |
-} |
- |
-bool DockInfo::GetNewWindowBounds(gfx::Rect* new_window_bounds, |
- bool* maximize_new_window) const { |
- if (type_ == NONE || !in_enable_area_) |
- return false; |
- |
- gfx::Rect window_bounds; |
- if (window_ && !GetWindowBounds(&window_bounds)) |
- return false; |
- |
- int half_m_width = (monitor_bounds_.right() - monitor_bounds_.x()) / 2; |
- int half_m_height = (monitor_bounds_.bottom() - monitor_bounds_.y()) / 2; |
- |
- *maximize_new_window = false; |
- |
- switch (type_) { |
- case LEFT_OF_WINDOW: |
- new_window_bounds->SetRect(monitor_bounds_.x(), window_bounds.y(), |
- half_m_width, window_bounds.height()); |
- break; |
- |
- case RIGHT_OF_WINDOW: |
- new_window_bounds->SetRect(monitor_bounds_.x() + half_m_width, |
- window_bounds.y(), half_m_width, |
- window_bounds.height()); |
- break; |
- |
- case TOP_OF_WINDOW: |
- new_window_bounds->SetRect(window_bounds.x(), monitor_bounds_.y(), |
- window_bounds.width(), half_m_height); |
- break; |
- |
- case BOTTOM_OF_WINDOW: |
- new_window_bounds->SetRect(window_bounds.x(), |
- monitor_bounds_.y() + half_m_height, |
- window_bounds.width(), half_m_height); |
- break; |
- |
- case LEFT_HALF: |
- new_window_bounds->SetRect(monitor_bounds_.x(), monitor_bounds_.y(), |
- half_m_width, monitor_bounds_.height()); |
- break; |
- |
- case RIGHT_HALF: |
- new_window_bounds->SetRect(monitor_bounds_.right() - half_m_width, |
- monitor_bounds_.y(), half_m_width, monitor_bounds_.height()); |
- break; |
- |
- case BOTTOM_HALF: |
- new_window_bounds->SetRect(monitor_bounds_.x(), |
- monitor_bounds_.y() + half_m_height, |
- monitor_bounds_.width(), half_m_height); |
- break; |
- |
- case MAXIMIZE: |
- *maximize_new_window = true; |
- break; |
- |
- default: |
- NOTREACHED(); |
- } |
- return true; |
-} |
- |
-void DockInfo::AdjustOtherWindowBounds() const { |
- if (!in_enable_area_) |
- return; |
- |
- gfx::Rect window_bounds; |
- if (!window_ || !GetWindowBounds(&window_bounds)) |
- return; |
- |
- gfx::Rect other_window_bounds; |
- int half_m_width = (monitor_bounds_.right() - monitor_bounds_.x()) / 2; |
- int half_m_height = (monitor_bounds_.bottom() - monitor_bounds_.y()) / 2; |
- |
- switch (type_) { |
- case LEFT_OF_WINDOW: |
- other_window_bounds.SetRect(monitor_bounds_.x() + half_m_width, |
- window_bounds.y(), half_m_width, |
- window_bounds.height()); |
- break; |
- |
- case RIGHT_OF_WINDOW: |
- other_window_bounds.SetRect(monitor_bounds_.x(), window_bounds.y(), |
- half_m_width, window_bounds.height()); |
- break; |
- |
- case TOP_OF_WINDOW: |
- other_window_bounds.SetRect(window_bounds.x(), |
- monitor_bounds_.y() + half_m_height, |
- window_bounds.width(), half_m_height); |
- break; |
- |
- case BOTTOM_OF_WINDOW: |
- other_window_bounds.SetRect(window_bounds.x(), monitor_bounds_.y(), |
- window_bounds.width(), half_m_height); |
- break; |
- |
- default: |
- return; |
- } |
- |
- SizeOtherWindowTo(other_window_bounds); |
-} |
- |
-gfx::Rect DockInfo::GetPopupRect() const { |
- int x = hot_spot_.x() - popup_width() / 2; |
- int y = hot_spot_.y() - popup_height() / 2; |
- switch (type_) { |
- case LEFT_OF_WINDOW: |
- case RIGHT_OF_WINDOW: |
- case TOP_OF_WINDOW: |
- case BOTTOM_OF_WINDOW: { |
- // Constrain the popup to the monitor's bounds. |
- gfx::Rect ideal_bounds(x, y, popup_width(), popup_height()); |
- ideal_bounds = ideal_bounds.AdjustToFit(monitor_bounds_); |
- return ideal_bounds; |
- } |
- case DockInfo::MAXIMIZE: |
- y += popup_height() / 2; |
- break; |
- case DockInfo::LEFT_HALF: |
- x += popup_width() / 2; |
- break; |
- case DockInfo::RIGHT_HALF: |
- x -= popup_width() / 2; |
- break; |
- case DockInfo::BOTTOM_HALF: |
- y -= popup_height() / 2; |
- break; |
- |
- default: |
- NOTREACHED(); |
- } |
- return gfx::Rect(x, y, popup_width(), popup_height()); |
-} |
- |
-bool DockInfo::CheckMonitorPoint(const gfx::Point& screen_loc, |
- int x, |
- int y, |
- Type type) { |
- if (IsCloseToMonitorPoint(screen_loc, x, y, type, &in_enable_area_)) { |
- hot_spot_.SetPoint(x, y); |
- type_ = type; |
- return true; |
- } |
- return false; |
-} |