| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/views/constrained_window_impl.h" | 5 #include "chrome/browser/views/constrained_window_impl.h" |
| 6 | 6 |
| 7 #include "base/gfx/rect.h" | 7 #include "base/gfx/rect.h" |
| 8 #include "chrome/app/chrome_dll_resource.h" | 8 #include "chrome/app/chrome_dll_resource.h" |
| 9 #include "chrome/app/theme/theme_resources.h" | 9 #include "chrome/app/theme/theme_resources.h" |
| 10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 public views::BaseButton::ButtonListener { | 192 public views::BaseButton::ButtonListener { |
| 193 public: | 193 public: |
| 194 ConstrainedWindowNonClientView(ConstrainedWindowImpl* container, | 194 ConstrainedWindowNonClientView(ConstrainedWindowImpl* container, |
| 195 TabContents* owner); | 195 TabContents* owner); |
| 196 virtual ~ConstrainedWindowNonClientView(); | 196 virtual ~ConstrainedWindowNonClientView(); |
| 197 | 197 |
| 198 void UpdateWindowTitle(); | 198 void UpdateWindowTitle(); |
| 199 | 199 |
| 200 // Overridden from views::NonClientView: | 200 // Overridden from views::NonClientView: |
| 201 virtual gfx::Rect CalculateClientAreaBounds(int width, int height) const; | 201 virtual gfx::Rect CalculateClientAreaBounds(int width, int height) const; |
| 202 virtual gfx::Size CalculateWindowSizeForClientSize(int width, | |
| 203 int height) const; | |
| 204 virtual CPoint GetSystemMenuPoint() const; | 202 virtual CPoint GetSystemMenuPoint() const; |
| 205 virtual int NonClientHitTest(const gfx::Point& point); | 203 virtual int NonClientHitTest(const gfx::Point& point); |
| 206 virtual void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask); | 204 virtual void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask); |
| 207 virtual void EnableClose(bool enable); | 205 virtual void EnableClose(bool enable); |
| 208 virtual void ResetWindowControls() { } | 206 virtual void ResetWindowControls() { } |
| 209 | 207 |
| 210 // Overridden from views::View: | 208 // Overridden from views::View: |
| 211 virtual void Paint(ChromeCanvas* canvas); | 209 virtual void Paint(ChromeCanvas* canvas); |
| 212 virtual void Layout(); | 210 virtual void Layout(); |
| 213 virtual gfx::Size GetPreferredSize(); | |
| 214 virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child); | 211 virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child); |
| 215 | 212 |
| 216 // Overridden from views::BaseButton::ButtonListener: | 213 // Overridden from views::BaseButton::ButtonListener: |
| 217 virtual void ButtonPressed(views::BaseButton* sender); | 214 virtual void ButtonPressed(views::BaseButton* sender); |
| 218 | 215 |
| 219 private: | 216 private: |
| 220 // Returns the thickness of the border that makes up the window frame edges. | 217 // Returns the thickness of the border that makes up the window frame edges. |
| 221 // This does not include any client edge. | 218 // This does not include any client edge. |
| 222 int FrameBorderThickness() const; | 219 int FrameBorderThickness() const; |
| 223 | 220 |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 gfx::Rect ConstrainedWindowNonClientView::CalculateClientAreaBounds( | 336 gfx::Rect ConstrainedWindowNonClientView::CalculateClientAreaBounds( |
| 340 int width, | 337 int width, |
| 341 int height) const { | 338 int height) const { |
| 342 int top_height = NonClientTopBorderHeight(); | 339 int top_height = NonClientTopBorderHeight(); |
| 343 int border_thickness = NonClientBorderThickness(); | 340 int border_thickness = NonClientBorderThickness(); |
| 344 return gfx::Rect(border_thickness, top_height, | 341 return gfx::Rect(border_thickness, top_height, |
| 345 std::max(0, width - (2 * border_thickness)), | 342 std::max(0, width - (2 * border_thickness)), |
| 346 std::max(0, height - top_height - border_thickness)); | 343 std::max(0, height - top_height - border_thickness)); |
| 347 } | 344 } |
| 348 | 345 |
| 349 gfx::Size ConstrainedWindowNonClientView::CalculateWindowSizeForClientSize( | |
| 350 int width, | |
| 351 int height) const { | |
| 352 int border_thickness = NonClientBorderThickness(); | |
| 353 return gfx::Size(width + (2 * border_thickness), | |
| 354 height + NonClientTopBorderHeight() + border_thickness); | |
| 355 } | |
| 356 | |
| 357 CPoint ConstrainedWindowNonClientView::GetSystemMenuPoint() const { | 346 CPoint ConstrainedWindowNonClientView::GetSystemMenuPoint() const { |
| 358 // Doesn't matter what we return, since this is only used when the user clicks | 347 // Doesn't matter what we return, since this is only used when the user clicks |
| 359 // a window icon, and we never have an icon. | 348 // a window icon, and we never have an icon. |
| 360 return CPoint(); | 349 return CPoint(); |
| 361 } | 350 } |
| 362 | 351 |
| 363 int ConstrainedWindowNonClientView::NonClientHitTest(const gfx::Point& point) { | 352 int ConstrainedWindowNonClientView::NonClientHitTest(const gfx::Point& point) { |
| 364 // First see if it's within the grow box area, since that overlaps the client | 353 if (!bounds().Contains(point)) |
| 365 // bounds. | 354 return HTNOWHERE; |
| 355 |
| 366 int frame_component = container_->client_view()->NonClientHitTest(point); | 356 int frame_component = container_->client_view()->NonClientHitTest(point); |
| 367 if (frame_component != HTNOWHERE) | 357 if (frame_component != HTNOWHERE) |
| 368 return frame_component; | 358 return frame_component; |
| 369 | 359 |
| 370 // Then see if the point is within any of the window controls. | 360 // Then see if the point is within any of the window controls. |
| 371 if (close_button_->GetBounds(APPLY_MIRRORING_TRANSFORMATION).Contains(point)) | 361 if (close_button_->GetBounds(APPLY_MIRRORING_TRANSFORMATION).Contains(point)) |
| 372 return HTCLOSE; | 362 return HTCLOSE; |
| 373 | 363 |
| 374 int window_component = GetHTComponentForFrame(point, FrameBorderThickness(), | 364 int window_component = GetHTComponentForFrame(point, FrameBorderThickness(), |
| 375 NonClientBorderThickness(), kResizeAreaCornerSize, | 365 NonClientBorderThickness(), kResizeAreaCornerSize, kResizeAreaCornerSize, |
| 376 container_->window_delegate()->CanResize()); | 366 container_->window_delegate()->CanResize()); |
| 377 // Fall back to the caption if no other component matches. | 367 // Fall back to the caption if no other component matches. |
| 378 return ((window_component == HTNOWHERE) && bounds().Contains(point)) ? | 368 return (window_component == HTNOWHERE) ? HTCAPTION : window_component; |
| 379 HTCAPTION : window_component; | |
| 380 } | 369 } |
| 381 | 370 |
| 382 void ConstrainedWindowNonClientView::GetWindowMask(const gfx::Size& size, | 371 void ConstrainedWindowNonClientView::GetWindowMask(const gfx::Size& size, |
| 383 gfx::Path* window_mask) { | 372 gfx::Path* window_mask) { |
| 384 DCHECK(window_mask); | 373 DCHECK(window_mask); |
| 385 | 374 |
| 386 // Redefine the window visible region for the new size. | 375 // Redefine the window visible region for the new size. |
| 387 window_mask->moveTo(0, 3); | 376 window_mask->moveTo(0, 3); |
| 388 window_mask->lineTo(1, 2); | 377 window_mask->lineTo(1, 2); |
| 389 window_mask->lineTo(1, 1); | 378 window_mask->lineTo(1, 1); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 414 PaintTitleBar(canvas); | 403 PaintTitleBar(canvas); |
| 415 PaintClientEdge(canvas); | 404 PaintClientEdge(canvas); |
| 416 } | 405 } |
| 417 | 406 |
| 418 void ConstrainedWindowNonClientView::Layout() { | 407 void ConstrainedWindowNonClientView::Layout() { |
| 419 LayoutWindowControls(); | 408 LayoutWindowControls(); |
| 420 LayoutTitleBar(); | 409 LayoutTitleBar(); |
| 421 LayoutClientView(); | 410 LayoutClientView(); |
| 422 } | 411 } |
| 423 | 412 |
| 424 gfx::Size ConstrainedWindowNonClientView::GetPreferredSize() { | |
| 425 gfx::Size prefsize(container_->client_view()->GetPreferredSize()); | |
| 426 int border_thickness = NonClientBorderThickness(); | |
| 427 prefsize.Enlarge(2 * border_thickness, | |
| 428 NonClientTopBorderHeight() + border_thickness); | |
| 429 return prefsize; | |
| 430 } | |
| 431 | |
| 432 void ConstrainedWindowNonClientView::ViewHierarchyChanged(bool is_add, | 413 void ConstrainedWindowNonClientView::ViewHierarchyChanged(bool is_add, |
| 433 View *parent, | 414 View *parent, |
| 434 View *child) { | 415 View *child) { |
| 435 // Add our Client View as we are added to the Container so that if we are | 416 // Add our Client View as we are added to the Container so that if we are |
| 436 // subsequently resized all the parent-child relationships are established. | 417 // subsequently resized all the parent-child relationships are established. |
| 437 if (is_add && GetWidget() && child == this) | 418 if (is_add && GetWidget() && child == this) |
| 438 AddChildView(container_->client_view()); | 419 AddChildView(container_->client_view()); |
| 439 } | 420 } |
| 440 | 421 |
| 441 //////////////////////////////////////////////////////////////////////////////// | 422 //////////////////////////////////////////////////////////////////////////////// |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 ConstrainedWindow* ConstrainedWindow::CreateConstrainedDialog( | 727 ConstrainedWindow* ConstrainedWindow::CreateConstrainedDialog( |
| 747 TabContents* parent, | 728 TabContents* parent, |
| 748 const gfx::Rect& initial_bounds, | 729 const gfx::Rect& initial_bounds, |
| 749 views::View* contents_view, | 730 views::View* contents_view, |
| 750 views::WindowDelegate* window_delegate) { | 731 views::WindowDelegate* window_delegate) { |
| 751 ConstrainedWindowImpl* window = new ConstrainedWindowImpl(parent, | 732 ConstrainedWindowImpl* window = new ConstrainedWindowImpl(parent, |
| 752 window_delegate); | 733 window_delegate); |
| 753 window->InitAsDialog(initial_bounds); | 734 window->InitAsDialog(initial_bounds); |
| 754 return window; | 735 return window; |
| 755 } | 736 } |
| OLD | NEW |