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