12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/frame/top_container_view.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_frame.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/frame/immersive_mode_controller.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TopContainerView::TopContainerView(BrowserView* browser_view) 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : browser_view_(browser_view) { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TopContainerView::~TopContainerView() { 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)gfx::Size TopContainerView::GetPreferredSize() { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The view wants to be as wide as its parent and tall enough to fully show 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // all its children. In particular, the bottom of the bookmark bar can be 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // be above the bottom of the toolbar while the bookmark bar is animating. 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int height = 0; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (int i = 0; i < child_count(); ++i) { 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) views::View* child = child_at(i); 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!child->visible()) 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) continue; 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int child_bottom = child->bounds().bottom(); 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (child_bottom > height) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) height = child_bottom; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (browser_view_->immersive_mode_controller()->IsRevealed()) { 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // In immersive fullscreen, the TopContainerView paints the window header 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // (themes, window title, window controls). The TopContainerView must still 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // paint these even if it does not have any visible children. 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) height = std::max(height, browser_view_->frame()->GetTopInset()); 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size(browser_view_->width(), height); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 40b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)const char* TopContainerView::GetClassName() const { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "TopContainerView"; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void TopContainerView::OnPaintBackground(gfx::Canvas* canvas) { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (browser_view_->immersive_mode_controller()->IsRevealed()) { 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Top-views depend on parts of the frame (themes, window title, 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // window controls) being painted underneath them. Clip rect has already 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // been set to the bounds of this view, so just paint the frame. 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* frame = browser_view_->frame()->GetFrameView(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) frame->Paint(canvas); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 53