15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/panels/panel_constants.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/tab_icon_view_model.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/button.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/window/non_client_view.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PanelView; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabIconView; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageButton; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Label; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PanelFrameView : public views::NonClientFrameView, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::ButtonListener, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public chrome::TabIconViewModel { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum PaintState { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PAINT_AS_INACTIVE, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PAINT_AS_ACTIVE, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PAINT_AS_MINIMIZED, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PAINT_FOR_ATTENTION 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit PanelFrameView(PanelView* panel_view); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PanelFrameView(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateTitle(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateIcon(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateThrobber(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateTitlebarMinimizeRestoreButtonVisibility(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetWindowCornerStyle(panel::CornerStyle corner_style); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the size of the non-client area, that is, the window size minus 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the size of the client area. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size NonClientAreaSize() const; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int BorderThickness() const; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PaintState GetPaintState() const; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageButton* close_button() const { return close_button_; } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageButton* minimize_button() const { return minimize_button_; } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageButton* restore_button() const { return restore_button_; } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabIconView* title_icon() const { return title_icon_; } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* title_label() const { return title_label_; } 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) panel::CornerStyle corner_style() const { return corner_style_; } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from views::NonClientFrameView: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetBoundsForClientView() const OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetWindowBoundsForClientBounds( 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& client_bounds) const OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetWindowMask(const gfx::Size& size, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Path* window_mask) OVERRIDE; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ResetWindowControls() OVERRIDE; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateWindowIcon() OVERRIDE; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateWindowTitle() OVERRIDE; 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SizeConstraintsChanged() OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from views::View: 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE; 72b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual const char* GetClassName() const OVERRIDE; 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetMinimumSize() const OVERRIDE; 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetMaximumSize() const OVERRIDE; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Layout() OVERRIDE; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnMouseCaptureLost() OVERRIDE; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from views::ButtonListener: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ButtonPressed(views::Button* sender, const ui::Event& event) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from chrome::TabIconViewModel: 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldTabIconViewAnimate() const OVERRIDE; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::ImageSkia GetFaviconForTabIconView() OVERRIDE; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int TitlebarHeight() const; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::ImageSkia* GetFrameBackground(PaintState paint_state) const; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update control styles to indicate if the titlebar is active or not. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateControlStyles(PaintState paint_state); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Custom draw the frame. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PaintFrameBackground(gfx::Canvas* canvas); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PaintFrameEdge(gfx::Canvas* canvas); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves the drawing metrics based on the current painting state. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor GetTitleColor(PaintState paint_state) const; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns true if |mouse_location| is within the panel's resizing area. 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool IsWithinResizingArea(const gfx::Point& mouse_location) const; 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kViewClassName[]; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_frameless_; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelView* panel_view_; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageButton* close_button_; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageButton* minimize_button_; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageButton* restore_button_; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabIconView* title_icon_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* title_label_; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) panel::CornerStyle corner_style_; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PanelFrameView); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_ 122