15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef UI_WM_CORE_VISIBILITY_CONTROLLER_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define UI_WM_CORE_VISIBILITY_CONTROLLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/visibility_client.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "ui/wm/wm_export.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace wm { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WM_EXPORT VisibilityController 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public aura::client::VisibilityClient { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VisibilityController(); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~VisibilityController(); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Subclasses override if they want to call a different implementation of 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // this function. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(beng): potentially replace by an actual window animator class in 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // window_animations.h. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool CallAnimateOnChildWindowVisibilityChanged(aura::Window* window, 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool visible); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from aura::client::VisibilityClient: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateLayerVisibility(aura::Window* window, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool visible) OVERRIDE; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(VisibilityController); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Suspends the animations for visibility changes during the lifetime of an 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instance of this class. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Example: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// void ViewName::UnanimatedAction() { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SuspendChildWindowVisibilityAnimations suspend(parent); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // Perform unanimated action here. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // ... 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // When the method finishes, visibility animations will return to their 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // previous state. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WM_EXPORT SuspendChildWindowVisibilityAnimations { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Suspend visibility animations of child windows. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SuspendChildWindowVisibilityAnimations(aura::Window* window); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore visibility animations to their original state. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~SuspendChildWindowVisibilityAnimations(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The window to manage. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::Window* window_; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the visibility animations on child windows were originally enabled. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool original_enabled_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SuspendChildWindowVisibilityAnimations); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tells |window| to animate visibility changes to its children. 690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid WM_EXPORT SetChildWindowVisibilityChangesAnimated( 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::Window* window); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace wm 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // UI_WM_CORE_VISIBILITY_CONTROLLER_H_ 75