| Index: chrome/browser/ui/views/panels/panel_frame_view.cc
|
| diff --git a/chrome/browser/ui/views/panels/panel_frame_view.cc b/chrome/browser/ui/views/panels/panel_frame_view.cc
|
| deleted file mode 100644
|
| index 3c7b41b8029d223a092c6dd2470eba772de7958b..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/views/panels/panel_frame_view.cc
|
| +++ /dev/null
|
| @@ -1,790 +0,0 @@
|
| -// Copyright (c) 2012 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/ui/views/panels/panel_frame_view.h"
|
| -
|
| -#include "build/build_config.h"
|
| -#include "chrome/browser/ui/panels/panel.h"
|
| -#include "chrome/browser/ui/panels/panel_constants.h"
|
| -#include "chrome/browser/ui/views/panels/panel_view.h"
|
| -#include "chrome/browser/ui/views/tab_icon_view.h"
|
| -#include "chrome/grit/generated_resources.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "grit/theme_resources.h"
|
| -#include "ui/base/hit_test.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/display/screen.h"
|
| -#include "ui/gfx/canvas.h"
|
| -#include "ui/gfx/font_list.h"
|
| -#include "ui/gfx/path.h"
|
| -#include "ui/resources/grit/ui_resources.h"
|
| -#include "ui/views/controls/button/image_button.h"
|
| -#include "ui/views/controls/label.h"
|
| -#include "ui/views/resources/grit/views_resources.h"
|
| -#include "ui/views/widget/widget.h"
|
| -#include "ui/views/widget/widget_delegate.h"
|
| -
|
| -#if defined(USE_AURA)
|
| -#include "ui/aura/window.h"
|
| -#endif
|
| -
|
| -#if defined(OS_WIN)
|
| -#include "base/win/scoped_gdi_object.h"
|
| -#include "ui/base/win/shell.h"
|
| -#include "ui/gfx/path_win.h"
|
| -#include "ui/views/win/hwnd_util.h"
|
| -#endif
|
| -
|
| -namespace {
|
| -
|
| -// The thickness of the border when Aero is not enabled. In this case, the
|
| -// shadow around the window will not be painted by the system and we need to
|
| -// paint a frame in order to differentiate the client area from the background.
|
| -const int kNonAeroBorderThickness = 1;
|
| -
|
| -// The height and width in pixels of the icon.
|
| -const int kIconSize = 16;
|
| -
|
| -// The extra padding between the button and the top edge.
|
| -const int kExtraPaddingBetweenButtonAndTop = 1;
|
| -
|
| -// Colors used to draw titlebar background under default theme.
|
| -const SkColor kActiveBackgroundDefaultColor = SkColorSetRGB(0x3a, 0x3d, 0x3d);
|
| -const SkColor kInactiveBackgroundDefaultColor = SkColorSetRGB(0x7a, 0x7c, 0x7c);
|
| -const SkColor kAttentionBackgroundDefaultColor =
|
| - SkColorSetRGB(0x53, 0xa9, 0x3f);
|
| -
|
| -// Color used to draw the minimized panel.
|
| -const SkColor kMinimizeBackgroundDefaultColor = SkColorSetRGB(0xf5, 0xf4, 0xf0);
|
| -
|
| -// Color used to draw the title text under default theme.
|
| -const SkColor kTitleTextDefaultColor = SkColorSetRGB(0xf9, 0xf9, 0xf9);
|
| -
|
| -gfx::ImageSkia* CreateImageForColor(SkColor color) {
|
| - gfx::Canvas canvas(gfx::Size(1, 1), 1.0f, true);
|
| - canvas.DrawColor(color);
|
| - return new gfx::ImageSkia(canvas.ExtractImageRep());
|
| -}
|
| -
|
| -#if defined(OS_WIN)
|
| -const gfx::ImageSkia& GetTopLeftCornerImage(panel::CornerStyle corner_style) {
|
| - static gfx::ImageSkia* rounded_image = NULL;
|
| - static gfx::ImageSkia* non_rounded_image = NULL;
|
| - if (!rounded_image) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - rounded_image = rb.GetImageSkiaNamed(IDR_WINDOW_TOP_LEFT_CORNER);
|
| - non_rounded_image = rb.GetImageSkiaNamed(IDR_PANEL_TOP_LEFT_CORNER);
|
| - }
|
| - return (corner_style & panel::TOP_ROUNDED) ? *rounded_image
|
| - : *non_rounded_image;
|
| -}
|
| -
|
| -const gfx::ImageSkia& GetTopRightCornerImage(panel::CornerStyle corner_style) {
|
| - static gfx::ImageSkia* rounded_image = NULL;
|
| - static gfx::ImageSkia* non_rounded_image = NULL;
|
| - if (!rounded_image) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - rounded_image = rb.GetImageSkiaNamed(IDR_WINDOW_TOP_RIGHT_CORNER);
|
| - non_rounded_image = rb.GetImageSkiaNamed(IDR_PANEL_TOP_RIGHT_CORNER);
|
| - }
|
| - return (corner_style & panel::TOP_ROUNDED) ? *rounded_image
|
| - : *non_rounded_image;
|
| -}
|
| -
|
| -const gfx::ImageSkia& GetBottomLeftCornerImage(
|
| - panel::CornerStyle corner_style) {
|
| - static gfx::ImageSkia* rounded_image = NULL;
|
| - static gfx::ImageSkia* non_rounded_image = NULL;
|
| - if (!rounded_image) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - rounded_image = rb.GetImageSkiaNamed(IDR_WINDOW_BOTTOM_LEFT_CORNER);
|
| - non_rounded_image = rb.GetImageSkiaNamed(IDR_PANEL_BOTTOM_LEFT_CORNER);
|
| - }
|
| - return (corner_style & panel::BOTTOM_ROUNDED) ? *rounded_image
|
| - : *non_rounded_image;
|
| -}
|
| -
|
| -const gfx::ImageSkia& GetBottomRightCornerImage(
|
| - panel::CornerStyle corner_style) {
|
| - static gfx::ImageSkia* rounded_image = NULL;
|
| - static gfx::ImageSkia* non_rounded_image = NULL;
|
| - if (!rounded_image) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - rounded_image = rb.GetImageSkiaNamed(IDR_WINDOW_BOTTOM_RIGHT_CORNER);
|
| - non_rounded_image = rb.GetImageSkiaNamed(IDR_PANEL_BOTTOM_RIGHT_CORNER);
|
| - }
|
| - return (corner_style & panel::BOTTOM_ROUNDED) ? *rounded_image
|
| - : *non_rounded_image;
|
| -}
|
| -
|
| -const gfx::ImageSkia& GetTopEdgeImage() {
|
| - static gfx::ImageSkia* image = NULL;
|
| - if (!image) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - image = rb.GetImageSkiaNamed(IDR_WINDOW_TOP_CENTER);
|
| - }
|
| - return *image;
|
| -}
|
| -
|
| -const gfx::ImageSkia& GetBottomEdgeImage() {
|
| - static gfx::ImageSkia* image = NULL;
|
| - if (!image) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - image = rb.GetImageSkiaNamed(IDR_WINDOW_BOTTOM_CENTER);
|
| - }
|
| - return *image;
|
| -}
|
| -
|
| -const gfx::ImageSkia& GetLeftEdgeImage() {
|
| - static gfx::ImageSkia* image = NULL;
|
| - if (!image) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - image = rb.GetImageSkiaNamed(IDR_WINDOW_LEFT_SIDE);
|
| - }
|
| - return *image;
|
| -}
|
| -
|
| -const gfx::ImageSkia& GetRightEdgeImage() {
|
| - static gfx::ImageSkia* image = NULL;
|
| - if (!image) {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - image = rb.GetImageSkiaNamed(IDR_WINDOW_RIGHT_SIDE);
|
| - }
|
| - return *image;
|
| -}
|
| -#endif // defined(OS_WIN)
|
| -
|
| -const gfx::ImageSkia* GetActiveBackgroundDefaultImage() {
|
| - static gfx::ImageSkia* image = NULL;
|
| - if (!image)
|
| - image = CreateImageForColor(kActiveBackgroundDefaultColor);
|
| - return image;
|
| -}
|
| -
|
| -const gfx::ImageSkia* GetInactiveBackgroundDefaultImage() {
|
| - static gfx::ImageSkia* image = NULL;
|
| - if (!image)
|
| - image = CreateImageForColor(kInactiveBackgroundDefaultColor);
|
| - return image;
|
| -}
|
| -
|
| -const gfx::ImageSkia* GetAttentionBackgroundDefaultImage() {
|
| - static gfx::ImageSkia* image = NULL;
|
| - if (!image)
|
| - image = CreateImageForColor(kAttentionBackgroundDefaultColor);
|
| - return image;
|
| -}
|
| -
|
| -const gfx::ImageSkia* GetMinimizeBackgroundDefaultImage() {
|
| - static gfx::ImageSkia* image = NULL;
|
| - if (!image)
|
| - image = CreateImageForColor(kMinimizeBackgroundDefaultColor);
|
| - return image;
|
| -}
|
| -
|
| -int GetFrameEdgeHitTest(const gfx::Point& point,
|
| - const gfx::Size& frame_size,
|
| - int resize_area_size,
|
| - panel::Resizability resizability) {
|
| - int x = point.x();
|
| - int y = point.y();
|
| - int width = frame_size.width();
|
| - int height = frame_size.height();
|
| - if (x < resize_area_size) {
|
| - if (y < resize_area_size && (resizability & panel::RESIZABLE_TOP_LEFT)) {
|
| - return HTTOPLEFT;
|
| - } else if (y >= height - resize_area_size &&
|
| - (resizability & panel::RESIZABLE_BOTTOM_LEFT)) {
|
| - return HTBOTTOMLEFT;
|
| - } else if (resizability & panel::RESIZABLE_LEFT) {
|
| - return HTLEFT;
|
| - }
|
| - } else if (x >= width - resize_area_size) {
|
| - if (y < resize_area_size && (resizability & panel::RESIZABLE_TOP_RIGHT)) {
|
| - return HTTOPRIGHT;
|
| - } else if (y >= height - resize_area_size &&
|
| - (resizability & panel::RESIZABLE_BOTTOM_RIGHT)) {
|
| - return HTBOTTOMRIGHT;
|
| - } else if (resizability & panel::RESIZABLE_RIGHT) {
|
| - return HTRIGHT;
|
| - }
|
| - }
|
| -
|
| - if (y < resize_area_size && (resizability & panel::RESIZABLE_TOP)) {
|
| - return HTTOP;
|
| - } else if (y >= height - resize_area_size &&
|
| - (resizability & panel::RESIZABLE_BOTTOM)) {
|
| - return HTBOTTOM;
|
| - }
|
| -
|
| - return HTNOWHERE;
|
| -}
|
| -
|
| -// Frameless is only supported when Aero is enabled and shadow effect is
|
| -// present.
|
| -bool ShouldRenderAsFrameless() {
|
| -#if defined(OS_WIN)
|
| - bool is_frameless = ui::win::IsAeroGlassEnabled();
|
| - if (is_frameless) {
|
| - BOOL shadow_enabled = FALSE;
|
| - if (::SystemParametersInfo(SPI_GETDROPSHADOW, 0, &shadow_enabled, 0) &&
|
| - !shadow_enabled)
|
| - is_frameless = false;
|
| - }
|
| - return is_frameless;
|
| -#else
|
| - return false;
|
| -#endif
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// static
|
| -const char PanelFrameView::kViewClassName[] = "PanelFrameView";
|
| -
|
| -PanelFrameView::PanelFrameView(PanelView* panel_view)
|
| - : is_frameless_(ShouldRenderAsFrameless()),
|
| - panel_view_(panel_view),
|
| - close_button_(NULL),
|
| - minimize_button_(NULL),
|
| - restore_button_(NULL),
|
| - title_icon_(NULL),
|
| - title_label_(NULL),
|
| - corner_style_(panel::ALL_ROUNDED) {
|
| -}
|
| -
|
| -PanelFrameView::~PanelFrameView() {
|
| -}
|
| -
|
| -void PanelFrameView::Init() {
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| -
|
| - close_button_ = new views::ImageButton(this);
|
| - close_button_->SetImage(views::CustomButton::STATE_NORMAL,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_CLOSE));
|
| - close_button_->SetImage(views::CustomButton::STATE_HOVERED,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_CLOSE_H));
|
| - close_button_->SetImage(views::CustomButton::STATE_PRESSED,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_CLOSE_C));
|
| - close_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
|
| - views::ImageButton::ALIGN_MIDDLE);
|
| - base::string16 tooltip_text =
|
| - l10n_util::GetStringUTF16(IDS_PANEL_CLOSE_TOOLTIP);
|
| - close_button_->SetTooltipText(tooltip_text);
|
| - AddChildView(close_button_);
|
| -
|
| - minimize_button_ = new views::ImageButton(this);
|
| - minimize_button_->SetImage(views::CustomButton::STATE_NORMAL,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_MINIMIZE));
|
| - minimize_button_->SetImage(views::CustomButton::STATE_HOVERED,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_MINIMIZE_H));
|
| - minimize_button_->SetImage(views::CustomButton::STATE_PRESSED,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_MINIMIZE_C));
|
| - tooltip_text = l10n_util::GetStringUTF16(IDS_PANEL_MINIMIZE_TOOLTIP);
|
| - minimize_button_->SetTooltipText(tooltip_text);
|
| - minimize_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
|
| - views::ImageButton::ALIGN_MIDDLE);
|
| - AddChildView(minimize_button_);
|
| -
|
| - restore_button_ = new views::ImageButton(this);
|
| - restore_button_->SetImage(views::CustomButton::STATE_NORMAL,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_RESTORE));
|
| - restore_button_->SetImage(views::CustomButton::STATE_HOVERED,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_RESTORE_H));
|
| - restore_button_->SetImage(views::CustomButton::STATE_PRESSED,
|
| - rb.GetImageSkiaNamed(IDR_PANEL_RESTORE_C));
|
| - restore_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
|
| - views::ImageButton::ALIGN_MIDDLE);
|
| - tooltip_text = l10n_util::GetStringUTF16(IDS_PANEL_RESTORE_TOOLTIP);
|
| - restore_button_->SetTooltipText(tooltip_text);
|
| - restore_button_->SetVisible(false); // only visible when panel is minimized
|
| - AddChildView(restore_button_);
|
| -
|
| - title_icon_ = new TabIconView(this, NULL);
|
| - title_icon_->set_is_light(true);
|
| - AddChildView(title_icon_);
|
| - title_icon_->Update();
|
| -
|
| - title_label_ = new views::Label(
|
| - panel_view_->panel()->GetWindowTitle(),
|
| - rb.GetFontList(ui::ResourceBundle::BoldFont));
|
| - title_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| - title_label_->SetAutoColorReadabilityEnabled(false);
|
| - AddChildView(title_label_);
|
| -
|
| -#if defined(USE_AURA)
|
| - // Compute the thickness of the client area that needs to be counted towards
|
| - // mouse resizing.
|
| - // TODO(tdanderson): Remove this if possible (crbug.com/344924).
|
| - int thickness_for_mouse_resizing =
|
| - PanelView::kResizeInsideBoundsSize - BorderThickness();
|
| - aura::Window* window = panel_view_->GetNativePanelWindow();
|
| - window->set_hit_test_bounds_override_inner(
|
| - gfx::Insets(thickness_for_mouse_resizing));
|
| -#endif
|
| -}
|
| -
|
| -void PanelFrameView::UpdateTitle() {
|
| - UpdateWindowTitle();
|
| -}
|
| -
|
| -void PanelFrameView::UpdateIcon() {
|
| - UpdateWindowIcon();
|
| -}
|
| -
|
| -void PanelFrameView::UpdateThrobber() {
|
| - title_icon_->Update();
|
| -}
|
| -
|
| -void PanelFrameView::UpdateTitlebarMinimizeRestoreButtonVisibility() {
|
| - Panel* panel = panel_view_->panel();
|
| - minimize_button_->SetVisible(panel->CanShowMinimizeButton());
|
| - restore_button_->SetVisible(panel->CanShowRestoreButton());
|
| -
|
| - // Reset the button states in case that the hover states are not cleared when
|
| - // mouse is clicked but not moved.
|
| - minimize_button_->SetState(views::CustomButton::STATE_NORMAL);
|
| - restore_button_->SetState(views::CustomButton::STATE_NORMAL);
|
| -}
|
| -
|
| -void PanelFrameView::SetWindowCornerStyle(panel::CornerStyle corner_style) {
|
| - corner_style_ = corner_style;
|
| -
|
| -#if defined(OS_WIN)
|
| - // Changing the window region is going to force a paint. Only change the
|
| - // window region if the region really differs.
|
| - HWND native_window = views::HWNDForWidget(panel_view_->window());
|
| - base::win::ScopedRegion current_region(::CreateRectRgn(0, 0, 0, 0));
|
| - ::GetWindowRgn(native_window, current_region.get());
|
| -
|
| - gfx::Path window_mask;
|
| - GetWindowMask(size(), &window_mask);
|
| - base::win::ScopedRegion new_region;
|
| - if (!window_mask.isEmpty())
|
| - new_region.reset(gfx::CreateHRGNFromSkPath(window_mask));
|
| -
|
| - const bool has_current_region = current_region != NULL;
|
| - const bool has_new_region = new_region != NULL;
|
| - if (has_current_region != has_new_region ||
|
| - (has_current_region &&
|
| - !::EqualRgn(current_region.get(), new_region.get()))) {
|
| - // SetWindowRgn takes ownership of the new_region.
|
| - ::SetWindowRgn(native_window, new_region.release(), TRUE);
|
| - }
|
| -#endif
|
| -}
|
| -
|
| -gfx::Rect PanelFrameView::GetBoundsForClientView() const {
|
| - // The origin of client-area bounds starts after left border and titlebar and
|
| - // spans until hitting the right and bottom borders.
|
| - // +------------------------------+
|
| - // | Top Titlebar |
|
| - // |-+--------------------------+-|
|
| - // |L| |R|
|
| - // |e| |i|
|
| - // |f| |g|
|
| - // |t| |h|
|
| - // | | Client |t|
|
| - // | | | |
|
| - // |B| Area |B|
|
| - // |o| |o|
|
| - // |r| |r|
|
| - // |d| |d|
|
| - // |e| |e|
|
| - // |r| |r|
|
| - // | +--------------------------+ |
|
| - // | Bottom Border |
|
| - // +------------------------------+
|
| - int titlebar_height = TitlebarHeight();
|
| - int border_thickness = BorderThickness();
|
| - return gfx::Rect(border_thickness,
|
| - titlebar_height,
|
| - std::max(0, width() - border_thickness * 2),
|
| - std::max(0, height() - titlebar_height - border_thickness));
|
| -}
|
| -
|
| -gfx::Rect PanelFrameView::GetWindowBoundsForClientBounds(
|
| - const gfx::Rect& client_bounds) const {
|
| - int titlebar_height = TitlebarHeight();
|
| - int border_thickness = BorderThickness();
|
| - // The window bounds include both client area and non-client area (titlebar
|
| - // and left, right and bottom borders).
|
| - return gfx::Rect(client_bounds.x() - border_thickness,
|
| - client_bounds.y() - titlebar_height,
|
| - client_bounds.width() + border_thickness * 2,
|
| - client_bounds.height() + titlebar_height + border_thickness);
|
| -}
|
| -
|
| -int PanelFrameView::NonClientHitTest(const gfx::Point& point) {
|
| - panel::Resizability resizability = panel_view_->panel()->CanResizeByMouse();
|
| -
|
| - // Check the frame first, as we allow a small area overlapping the contents
|
| - // to be used for resize handles.
|
| - int frame_component = GetFrameEdgeHitTest(
|
| - point, size(), PanelView::kResizeInsideBoundsSize, resizability);
|
| -
|
| - if (frame_component != HTNOWHERE)
|
| - return frame_component;
|
| -
|
| - int client_component =
|
| - panel_view_->window()->client_view()->NonClientHitTest(point);
|
| - if (client_component != HTNOWHERE)
|
| - return client_component;
|
| -
|
| - if (close_button_ && close_button_->visible() &&
|
| - close_button_->GetMirroredBounds().Contains(point))
|
| - return HTCLOSE;
|
| -
|
| - if (minimize_button_ && minimize_button_->visible() &&
|
| - minimize_button_->GetMirroredBounds().Contains(point))
|
| - return HTMINBUTTON;
|
| -
|
| - if (restore_button_ && restore_button_->visible() &&
|
| - restore_button_->GetMirroredBounds().Contains(point))
|
| - return HTMAXBUTTON;
|
| -
|
| - return HTNOWHERE;
|
| -}
|
| -
|
| -void PanelFrameView::GetWindowMask(const gfx::Size& size,
|
| - gfx::Path* window_mask) {
|
| - int width = size.width();
|
| - int height = size.height();
|
| -
|
| - if (corner_style_ & panel::TOP_ROUNDED) {
|
| - window_mask->moveTo(0, 3);
|
| - window_mask->lineTo(1, 2);
|
| - window_mask->lineTo(1, 1);
|
| - window_mask->lineTo(2, 1);
|
| - window_mask->lineTo(3, 0);
|
| - window_mask->lineTo(SkIntToScalar(width - 3), 0);
|
| - window_mask->lineTo(SkIntToScalar(width - 2), 1);
|
| - window_mask->lineTo(SkIntToScalar(width - 1), 1);
|
| - window_mask->lineTo(SkIntToScalar(width - 1), 2);
|
| - window_mask->lineTo(SkIntToScalar(width - 1), 3);
|
| - } else {
|
| - window_mask->moveTo(0, 0);
|
| - window_mask->lineTo(width, 0);
|
| - }
|
| -
|
| - if (corner_style_ & panel::BOTTOM_ROUNDED) {
|
| - window_mask->lineTo(SkIntToScalar(width - 1), SkIntToScalar(height - 4));
|
| - window_mask->lineTo(SkIntToScalar(width - 2), SkIntToScalar(height - 3));
|
| - window_mask->lineTo(SkIntToScalar(width - 2), SkIntToScalar(height - 2));
|
| - window_mask->lineTo(SkIntToScalar(width - 3), SkIntToScalar(height - 2));
|
| - window_mask->lineTo(SkIntToScalar(width - 4), SkIntToScalar(height - 1));
|
| - window_mask->lineTo(3, SkIntToScalar(height - 1));
|
| - window_mask->lineTo(2, SkIntToScalar(height - 2));
|
| - window_mask->lineTo(1, SkIntToScalar(height - 2));
|
| - window_mask->lineTo(1, SkIntToScalar(height - 3));
|
| - window_mask->lineTo(0, SkIntToScalar(height - 4));
|
| - } else {
|
| - window_mask->lineTo(SkIntToScalar(width), SkIntToScalar(height));
|
| - window_mask->lineTo(0, SkIntToScalar(height));
|
| - }
|
| -
|
| - window_mask->close();
|
| -}
|
| -
|
| -void PanelFrameView::ResetWindowControls() {
|
| - // The controls aren't affected by this constraint.
|
| -}
|
| -
|
| -void PanelFrameView::UpdateWindowIcon() {
|
| - title_icon_->SchedulePaint();
|
| -}
|
| -
|
| -void PanelFrameView::UpdateWindowTitle() {
|
| - title_label_->SetText(panel_view_->panel()->GetWindowTitle());
|
| -}
|
| -
|
| -void PanelFrameView::SizeConstraintsChanged() {
|
| -}
|
| -
|
| -gfx::Size PanelFrameView::GetPreferredSize() const {
|
| - gfx::Size pref_size =
|
| - panel_view_->window()->client_view()->GetPreferredSize();
|
| - gfx::Rect bounds(0, 0, pref_size.width(), pref_size.height());
|
| - return panel_view_->window()->non_client_view()->
|
| - GetWindowBoundsForClientBounds(bounds).size();
|
| -}
|
| -
|
| -const char* PanelFrameView::GetClassName() const {
|
| - return kViewClassName;
|
| -}
|
| -
|
| -gfx::Size PanelFrameView::GetMinimumSize() const {
|
| - return panel_view_->GetMinimumSize();
|
| -}
|
| -
|
| -gfx::Size PanelFrameView::GetMaximumSize() const {
|
| - return panel_view_->GetMaximumSize();
|
| -}
|
| -
|
| -void PanelFrameView::Layout() {
|
| - is_frameless_ = ShouldRenderAsFrameless();
|
| -
|
| - // Layout the close button.
|
| - int right = width();
|
| - close_button_->SetBounds(
|
| - width() - panel::kTitlebarRightPadding - panel::kPanelButtonSize,
|
| - (TitlebarHeight() - panel::kPanelButtonSize) / 2 +
|
| - kExtraPaddingBetweenButtonAndTop,
|
| - panel::kPanelButtonSize,
|
| - panel::kPanelButtonSize);
|
| - right = close_button_->x();
|
| -
|
| - // Layout the minimize and restore button. Both occupy the same space,
|
| - // but at most one is visible at any time.
|
| - minimize_button_->SetBounds(
|
| - right - panel::kButtonPadding - panel::kPanelButtonSize,
|
| - (TitlebarHeight() - panel::kPanelButtonSize) / 2 +
|
| - kExtraPaddingBetweenButtonAndTop,
|
| - panel::kPanelButtonSize,
|
| - panel::kPanelButtonSize);
|
| - restore_button_->SetBoundsRect(minimize_button_->bounds());
|
| - right = minimize_button_->x();
|
| -
|
| - // Layout the icon.
|
| - int icon_y = (TitlebarHeight() - kIconSize) / 2;
|
| - title_icon_->SetBounds(
|
| - panel::kTitlebarLeftPadding,
|
| - icon_y,
|
| - kIconSize,
|
| - kIconSize);
|
| -
|
| - // Layout the title.
|
| - int title_x = title_icon_->bounds().right() + panel::kIconAndTitlePadding;
|
| - int title_height = title_label_->font_list().GetHeight();
|
| - title_label_->SetBounds(
|
| - title_x,
|
| - icon_y + ((kIconSize - title_height - 1) / 2),
|
| - std::max(0, right - panel::kTitleAndButtonPadding - title_x),
|
| - title_height);
|
| -}
|
| -
|
| -void PanelFrameView::OnPaint(gfx::Canvas* canvas) {
|
| - UpdateControlStyles(GetPaintState());
|
| - PaintFrameBackground(canvas);
|
| - PaintFrameEdge(canvas);
|
| -}
|
| -
|
| -bool PanelFrameView::OnMousePressed(const ui::MouseEvent& event) {
|
| - // If the mouse location falls within the resizing area of the titlebar, do
|
| - // not handle the event so that the system resizing logic can kick in.
|
| - if (event.IsOnlyLeftMouseButton() &&
|
| - !IsWithinResizingArea(event.location())) {
|
| - // |event.location| is in the view's coordinate system. Convert it to the
|
| - // screen coordinate system.
|
| - gfx::Point mouse_location = event.location();
|
| - views::View::ConvertPointToScreen(this, &mouse_location);
|
| -
|
| - if (panel_view_->OnTitlebarMousePressed(mouse_location))
|
| - return true;
|
| - }
|
| - return NonClientFrameView::OnMousePressed(event);
|
| -}
|
| -
|
| -bool PanelFrameView::OnMouseDragged(const ui::MouseEvent& event) {
|
| -#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
|
| - // Converting the mouse location to screen coordinates returns an incorrect
|
| - // location while the panel is moving. See crbug.com/353393 for more details.
|
| - // TODO(pkotwicz): Fix conversion to screen coordinates
|
| - display::Screen* screen = display::Screen::GetScreen();
|
| - gfx::Point mouse_location = screen->GetCursorScreenPoint();
|
| -#else
|
| - // |event.location| is in the view's coordinate system. Convert it to the
|
| - // screen coordinate system.
|
| - gfx::Point mouse_location = event.location();
|
| - views::View::ConvertPointToScreen(this, &mouse_location);
|
| -#endif
|
| -
|
| - if (panel_view_->OnTitlebarMouseDragged(mouse_location))
|
| - return true;
|
| - return NonClientFrameView::OnMouseDragged(event);
|
| -}
|
| -
|
| -void PanelFrameView::OnMouseReleased(const ui::MouseEvent& event) {
|
| - if (panel_view_->OnTitlebarMouseReleased(
|
| - event.IsControlDown() ? panel::APPLY_TO_ALL : panel::NO_MODIFIER))
|
| - return;
|
| - NonClientFrameView::OnMouseReleased(event);
|
| -}
|
| -
|
| -void PanelFrameView::OnMouseCaptureLost() {
|
| - if (panel_view_->OnTitlebarMouseCaptureLost())
|
| - return;
|
| - NonClientFrameView::OnMouseCaptureLost();
|
| -}
|
| -
|
| -void PanelFrameView::ButtonPressed(views::Button* sender,
|
| - const ui::Event& event) {
|
| - if (sender == close_button_) {
|
| - panel_view_->ClosePanel();
|
| - } else {
|
| - panel::ClickModifier modifier =
|
| - event.IsControlDown() ? panel::APPLY_TO_ALL : panel::NO_MODIFIER;
|
| - if (sender == minimize_button_)
|
| - panel_view_->panel()->OnMinimizeButtonClicked(modifier);
|
| - else if (sender == restore_button_)
|
| - panel_view_->panel()->OnRestoreButtonClicked(modifier);
|
| - }
|
| -}
|
| -
|
| -bool PanelFrameView::ShouldTabIconViewAnimate() const {
|
| - // This function is queried during the creation of the window as the
|
| - // TabIconView we host is initialized, so we need to NULL check the selected
|
| - // WebContents because in this condition there is not yet a selected tab.
|
| - content::WebContents* contents = panel_view_->panel()->GetWebContents();
|
| - return contents ? contents->IsLoading() : false;
|
| -}
|
| -
|
| -gfx::ImageSkia PanelFrameView::GetFaviconForTabIconView() {
|
| - return panel_view_->window()->widget_delegate()->GetWindowIcon();
|
| -}
|
| -
|
| -gfx::Size PanelFrameView::NonClientAreaSize() const {
|
| - if (is_frameless_)
|
| - return gfx::Size(0, TitlebarHeight());
|
| - // When the frame is present, the width of non-client area consists of
|
| - // left and right borders, while the height consists of the top area
|
| - // (titlebar) and the bottom border.
|
| - return gfx::Size(2 * kNonAeroBorderThickness,
|
| - TitlebarHeight() + kNonAeroBorderThickness);
|
| -}
|
| -
|
| -int PanelFrameView::TitlebarHeight() const {
|
| - return panel::kTitlebarHeight;
|
| -}
|
| -
|
| -int PanelFrameView::BorderThickness() const {
|
| - return is_frameless_ ? 0 : kNonAeroBorderThickness;
|
| -}
|
| -
|
| -PanelFrameView::PaintState PanelFrameView::GetPaintState() const {
|
| - if (panel_view_->panel()->IsDrawingAttention())
|
| - return PAINT_FOR_ATTENTION;
|
| - if (bounds().height() <= panel::kMinimizedPanelHeight)
|
| - return PAINT_AS_MINIMIZED;
|
| - if (panel_view_->IsPanelActive() &&
|
| - !panel_view_->force_to_paint_as_inactive())
|
| - return PAINT_AS_ACTIVE;
|
| - return PAINT_AS_INACTIVE;
|
| -}
|
| -
|
| -SkColor PanelFrameView::GetTitleColor(PaintState paint_state) const {
|
| - return kTitleTextDefaultColor;
|
| -}
|
| -
|
| -const gfx::ImageSkia* PanelFrameView::GetFrameBackground(
|
| - PaintState paint_state) const {
|
| - switch (paint_state) {
|
| - case PAINT_AS_INACTIVE:
|
| - return GetInactiveBackgroundDefaultImage();
|
| - case PAINT_AS_ACTIVE:
|
| - return GetActiveBackgroundDefaultImage();
|
| - case PAINT_AS_MINIMIZED:
|
| - return GetMinimizeBackgroundDefaultImage();
|
| - case PAINT_FOR_ATTENTION:
|
| - return GetAttentionBackgroundDefaultImage();
|
| - default:
|
| - NOTREACHED();
|
| - return GetInactiveBackgroundDefaultImage();
|
| - }
|
| -}
|
| -
|
| -void PanelFrameView::UpdateControlStyles(PaintState paint_state) {
|
| - title_label_->SetEnabledColor(GetTitleColor(paint_state));
|
| -}
|
| -
|
| -void PanelFrameView::PaintFrameBackground(gfx::Canvas* canvas) {
|
| - // We only need to paint the title-bar since no resizing border is shown.
|
| - // Instead, we allow part of the inner content area be used to trigger the
|
| - // mouse resizing.
|
| - int titlebar_height = TitlebarHeight();
|
| - const gfx::ImageSkia* image = GetFrameBackground(GetPaintState());
|
| - canvas->TileImageInt(*image, 0, 0, width(), titlebar_height);
|
| -
|
| - if (is_frameless_)
|
| - return;
|
| -
|
| - // Left border, below title-bar.
|
| - canvas->TileImageInt(*image, 0, titlebar_height, kNonAeroBorderThickness,
|
| - height() - titlebar_height);
|
| -
|
| - // Right border, below title-bar.
|
| - canvas->TileImageInt(*image, width() - kNonAeroBorderThickness,
|
| - titlebar_height, kNonAeroBorderThickness, height() - titlebar_height);
|
| -
|
| - // Bottom border.
|
| - canvas->TileImageInt(*image, 0, height() - kNonAeroBorderThickness, width(),
|
| - kNonAeroBorderThickness);
|
| -}
|
| -
|
| -void PanelFrameView::PaintFrameEdge(gfx::Canvas* canvas) {
|
| -#if defined(OS_WIN)
|
| - // Border is not needed when panel is not shown as minimized.
|
| - if (GetPaintState() != PAINT_AS_MINIMIZED)
|
| - return;
|
| -
|
| - const gfx::ImageSkia& top_left_image = GetTopLeftCornerImage(corner_style_);
|
| - const gfx::ImageSkia& top_right_image = GetTopRightCornerImage(corner_style_);
|
| - const gfx::ImageSkia& bottom_left_image =
|
| - GetBottomLeftCornerImage(corner_style_);
|
| - const gfx::ImageSkia& bottom_right_image =
|
| - GetBottomRightCornerImage(corner_style_);
|
| - const gfx::ImageSkia& top_image = GetTopEdgeImage();
|
| - const gfx::ImageSkia& bottom_image = GetBottomEdgeImage();
|
| - const gfx::ImageSkia& left_image = GetLeftEdgeImage();
|
| - const gfx::ImageSkia& right_image = GetRightEdgeImage();
|
| -
|
| - // Draw the top border.
|
| - canvas->DrawImageInt(top_left_image, 0, 0);
|
| - canvas->TileImageInt(top_image,
|
| - top_left_image.width(),
|
| - 0,
|
| - width() - top_right_image.width(),
|
| - top_image.height());
|
| - canvas->DrawImageInt(top_right_image, width() - top_right_image.width(), 0);
|
| -
|
| - // Draw the right border.
|
| - canvas->TileImageInt(right_image,
|
| - width() - right_image.width(),
|
| - top_right_image.height(),
|
| - right_image.width(),
|
| - height() - top_right_image.height() -
|
| - bottom_right_image.height());
|
| -
|
| - // Draw the bottom border.
|
| - canvas->DrawImageInt(bottom_right_image,
|
| - width() - bottom_right_image.width(),
|
| - height() - bottom_right_image.height());
|
| - canvas->TileImageInt(bottom_image,
|
| - bottom_left_image.width(),
|
| - height() - bottom_image.height(),
|
| - width() - bottom_left_image.width() -
|
| - bottom_right_image.width(),
|
| - bottom_image.height());
|
| - canvas->DrawImageInt(bottom_left_image,
|
| - 0,
|
| - height() - bottom_left_image.height());
|
| -
|
| - // Draw the left border.
|
| - canvas->TileImageInt(left_image,
|
| - 0,
|
| - top_left_image.height(),
|
| - left_image.width(),
|
| - height() - top_left_image.height() -
|
| - bottom_left_image.height());
|
| -#endif
|
| -}
|
| -
|
| -bool PanelFrameView::IsWithinResizingArea(
|
| - const gfx::Point& mouse_location) const {
|
| - panel::Resizability resizability = panel_view_->panel()->CanResizeByMouse();
|
| - int edge_hittest = GetFrameEdgeHitTest(
|
| - mouse_location, size(), PanelView::kResizeInsideBoundsSize, resizability);
|
| - return edge_hittest != HTNOWHERE;
|
| -}
|
|
|