Home | History | Annotate | Download | only in frame
      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