• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/chromeos/wm_overview_title.h"
6 
7 #include <vector>
8 
9 #include "base/string16.h"
10 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/chromeos/drop_shadow_label.h"
12 #include "chrome/browser/chromeos/wm_ipc.h"
13 #include "chrome/browser/chromeos/wm_overview_snapshot.h"
14 #include "chrome/browser/ui/browser_window.h"
15 #include "third_party/cros/chromeos_wm_ipc_enums.h"
16 #include "third_party/skia/include/core/SkBitmap.h"
17 #include "ui/base/x/x11_util.h"
18 #include "views/border.h"
19 #include "views/layout/grid_layout.h"
20 #include "views/view.h"
21 
22 using std::vector;
23 using views::ColumnSet;
24 using views::GridLayout;
25 using views::View;
26 using gfx::Font;
27 
28 #if !defined(OS_CHROMEOS)
29 #error This file is only meant to be compiled for ChromeOS
30 #endif
31 
32 namespace chromeos {
33 
34 // The padding between the title and the URL, in pixels.
35 static const int kVerticalPadding = 2;
36 
37 // This is the size (in pixels) of the drop shadow on the title and url text.
38 static const int kDropShadowSize = 2;
39 
40 namespace {
41 // Finds a font based on the base font that is no taller than the
42 // given value (well, unless the font at size 1 is taller than the
43 // given value).
FindFontThisHigh(int pixels,Font base)44 Font FindFontThisHigh(int pixels, Font base) {
45   Font font(base.GetFontName(), 1);
46   Font last_font = font;
47   while (font.GetHeight() < pixels) {
48     last_font = font;
49     font = font.DeriveFont(1, Font::BOLD);
50   }
51   return last_font;
52 }
53 }  // Anonymous namespace
54 
WmOverviewTitle()55 WmOverviewTitle::WmOverviewTitle()
56   : WidgetGtk(TYPE_WINDOW),
57     title_label_(NULL),
58     url_label_(NULL) {
59 }
60 
Init(const gfx::Size & size,WmOverviewSnapshot * snapshot)61 void WmOverviewTitle::Init(const gfx::Size& size,
62                            WmOverviewSnapshot* snapshot) {
63   MakeTransparent();
64 
65   title_label_ = new DropShadowLabel();
66   title_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
67   title_label_->SetColor(SkColorSetARGB(0xFF, 0xFF, 0xFF, 0xFF));
68   title_label_->SetDropShadowSize(kDropShadowSize);
69   title_label_->SetFont(FindFontThisHigh(16, title_label_->font()));
70 
71   url_label_ = new DropShadowLabel();
72   url_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
73   url_label_->SetColor(SkColorSetARGB(0x80, 0xFF, 0xFF, 0xFF));
74   url_label_->SetDropShadowSize(kDropShadowSize);
75   url_label_->SetFont(FindFontThisHigh(14, title_label_->font()));
76 
77   // Create a new view to be the host for the grid.
78   View* view = new View();
79   GridLayout* layout = new GridLayout(view);
80   view->SetLayoutManager(layout);
81 
82   int title_cs_id = 0;
83   ColumnSet* columns = layout->AddColumnSet(title_cs_id);
84   columns->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0,
85                      GridLayout::FIXED, size.width(), 0);
86 
87   layout->StartRow(0, title_cs_id);
88   layout->AddView(title_label_);
89   layout->StartRowWithPadding(1, title_cs_id, 0, kVerticalPadding);
90   layout->AddView(url_label_);
91 
92   // Realize the widget.
93   WidgetGtk::Init(NULL, gfx::Rect(size));
94 
95   // Make the view the contents view for this widget.
96   SetContentsView(view);
97 
98   // Set the window type
99   vector<int> params;
100   params.push_back(ui::GetX11WindowFromGtkWidget(
101       GTK_WIDGET(snapshot->GetNativeView())));
102   WmIpc::instance()->SetWindowType(
103       GetNativeView(),
104       WM_IPC_WINDOW_CHROME_TAB_TITLE,
105       &params);
106 }
107 
SetTitle(const string16 & title)108 void WmOverviewTitle::SetTitle(const string16& title) {
109   title_label_->SetText(UTF16ToWide(title));
110 }
111 
SetUrl(const GURL & url)112 void WmOverviewTitle::SetUrl(const GURL& url) {
113   url_label_->SetURL(url);
114 }
115 }  // namespace chromeos
116