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/frame/browser_frame_view_chromeos.h"
6
7#include "chrome/browser/ui/views/frame/browser_view.h"
8#include "grit/generated_resources.h"
9#include "grit/theme_resources.h"
10#include "views/window/hit_test.h"
11#include "views/window/window.h"
12#include "ui/base/theme_provider.h"
13
14namespace {
15// Additional pixels of pad above the tabs.
16const int kTopPad = 4;
17// To align theme bitmaps correctly we return this offset.
18const int kThemeOffset = -5;
19}
20
21namespace chromeos {
22
23// BrowserFrameViewChromeos adds a few pixels of pad to the top of the tabstrip.
24// To enable this we have to grab mouse events in that area and forward them on
25// to the NonClientView. We do this by overriding HitTest(), NonClientHitTest()
26// and GetEventHandlerForPoint().
27BrowserFrameViewChromeos::BrowserFrameViewChromeos(
28    BrowserFrame* frame, BrowserView* browser_view)
29    : OpaqueBrowserFrameView(frame, browser_view) {
30}
31
32BrowserFrameViewChromeos::~BrowserFrameViewChromeos() {
33}
34
35int BrowserFrameViewChromeos::NonClientHitTest(const gfx::Point& point) {
36  if (point.y() < kTopPad)
37    return HTNOWHERE;
38  return OpaqueBrowserFrameView::NonClientHitTest(point);
39}
40
41bool BrowserFrameViewChromeos::HitTest(const gfx::Point& l) const {
42  if (l.y() < kTopPad)
43    return true;
44  return OpaqueBrowserFrameView::HitTest(l);
45}
46
47views::View* BrowserFrameViewChromeos::GetEventHandlerForPoint(
48    const gfx::Point& point) {
49  if (point.y() < kTopPad) {
50    gfx::Point nc_point(point.x(), kTopPad);
51    views::NonClientView* nc_view = frame()->GetWindow()->non_client_view();
52    View::ConvertPointToView(this, nc_view, &nc_point);
53    return nc_view->GetEventHandlerForPoint(nc_point);
54  }
55  return OpaqueBrowserFrameView::GetEventHandlerForPoint(point);
56}
57
58int BrowserFrameViewChromeos::GetHorizontalTabStripVerticalOffset(
59    bool restored) const {
60  return NonClientTopBorderHeight(restored, true) + kTopPad;
61}
62
63void BrowserFrameViewChromeos::ModifyMaximizedFramePainting(
64    int* top_offset, SkBitmap** left_corner, SkBitmap** right_corner) {
65  *top_offset = kThemeOffset;
66  ui::ThemeProvider* tp = GetThemeProvider();
67  if (tp->HasCustomImage(IDR_THEME_FRAME))
68    return;
69  if (browser_view()->IsOffTheRecord()) {
70    *left_corner = tp->GetBitmapNamed(IDR_THEME_FRAME_INCOGNITO_LEFT);
71    *right_corner = tp->GetBitmapNamed(IDR_THEME_FRAME_INCOGNITO_RIGHT);
72  } else {
73    *left_corner = tp->GetBitmapNamed(IDR_THEME_FRAME_LEFT);
74    *right_corner = tp->GetBitmapNamed(IDR_THEME_FRAME_RIGHT);
75  }
76}
77
78}  // namespace chromeos
79