11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/main/athena_frame_view.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/utf_string_conversions.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/skia/include/core/SkColor.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/hit_test.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/views/background.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/views/controls/label.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/views/view.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/views/widget/widget.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/views/widget/widget_delegate.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/views/window/client_view.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace athena { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The height of the top border necessary to display the title without the icon. 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kDefaultTitleHeight = 13; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The default background color for athena's frame. This is placeholder. 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst SkColor kDefaultTitleBackground = 0xFFcccccc; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char AthenaFrameView::kViewClassName[] = "AthenaFrameView"; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAthenaFrameView::AthenaFrameView(views::Widget* frame) : frame_(frame) { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci set_background( 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci views::Background::CreateSolidBackground(kDefaultTitleBackground)); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UpdateWindowTitle(); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAthenaFrameView::~AthenaFrameView() { 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigfx::Rect AthenaFrameView::GetBoundsForClientView() const { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect client_bounds = bounds(); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client_bounds.Inset(NonClientBorderInsets()); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return client_bounds; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigfx::Rect AthenaFrameView::GetWindowBoundsForClientBounds( 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::Rect& client_bounds) const { 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect window_bounds = client_bounds; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_bounds.Inset(-NonClientBorderInsets()); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return window_bounds; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint AthenaFrameView::NonClientHitTest(const gfx::Point& point) { 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!bounds().Contains(point)) 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return HTNOWHERE; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int client_hit_test = frame_->client_view()->NonClientHitTest(point); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (client_hit_test != HTNOWHERE) 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return client_hit_test; 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int window_hit_test = 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetHTComponentForFrame(point, 0, NonClientBorderThickness(), 0, 0, false); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return (window_hit_test == HTNOWHERE) ? HTCAPTION : client_hit_test; 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigfx::Size AthenaFrameView::GetPreferredSize() const { 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Size pref = frame_->client_view()->GetPreferredSize(); 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect bounds(0, 0, pref.width(), pref.height()); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return frame_->non_client_view() 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetWindowBoundsForClientBounds(bounds) 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .size(); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char* AthenaFrameView::GetClassName() const { 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kViewClassName; 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigfx::Insets AthenaFrameView::NonClientBorderInsets() const { 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int border_thickness = NonClientBorderThickness(); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return gfx::Insets(NonClientTopBorderHeight(), 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci border_thickness, 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci border_thickness, 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci border_thickness); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint AthenaFrameView::NonClientBorderThickness() const { 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return 0; 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint AthenaFrameView::NonClientTopBorderHeight() const { 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDefaultTitleHeight; 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace athena 93