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 14 namespace { 15 // Additional pixels of pad above the tabs. 16 const int kTopPad = 4; 17 // To align theme bitmaps correctly we return this offset. 18 const int kThemeOffset = -5; 19 } 20 21 namespace 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(). 27 BrowserFrameViewChromeos::BrowserFrameViewChromeos( 28 BrowserFrame* frame, BrowserView* browser_view) 29 : OpaqueBrowserFrameView(frame, browser_view) { 30 } 31 32 BrowserFrameViewChromeos::~BrowserFrameViewChromeos() { 33 } 34 35 int BrowserFrameViewChromeos::NonClientHitTest(const gfx::Point& point) { 36 if (point.y() < kTopPad) 37 return HTNOWHERE; 38 return OpaqueBrowserFrameView::NonClientHitTest(point); 39 } 40 41 bool BrowserFrameViewChromeos::HitTest(const gfx::Point& l) const { 42 if (l.y() < kTopPad) 43 return true; 44 return OpaqueBrowserFrameView::HitTest(l); 45 } 46 47 views::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 58 int BrowserFrameViewChromeos::GetHorizontalTabStripVerticalOffset( 59 bool restored) const { 60 return NonClientTopBorderHeight(restored, true) + kTopPad; 61 } 62 63 void 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