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