layer_dimmer.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2021 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. #ifndef COMPONENTS_JAVASCRIPT_DIALOGS_VIEWS_LAYER_DIMMER_H_
  5. #define COMPONENTS_JAVASCRIPT_DIALOGS_VIEWS_LAYER_DIMMER_H_
  6. #include <memory>
  7. #include "base/memory/raw_ptr.h"
  8. #include "ui/aura/window_observer.h"
  9. namespace ui {
  10. class Layer;
  11. } // namespace ui
  12. namespace javascript_dialogs {
  13. class LayerDimmer : public aura::WindowObserver {
  14. public:
  15. explicit LayerDimmer(aura::Window* parent, aura::Window* dialog);
  16. LayerDimmer(const LayerDimmer&) = delete;
  17. LayerDimmer& operator=(const LayerDimmer&) = delete;
  18. ~LayerDimmer() override;
  19. void Show();
  20. void Hide();
  21. // NOTE: WindowDimmer is an observer for both |parent_| and |dialog_|.
  22. // aura::WindowObserver:
  23. void OnWindowBoundsChanged(aura::Window* window,
  24. const gfx::Rect& old_bounds,
  25. const gfx::Rect& new_bounds,
  26. ui::PropertyChangeReason reason) override;
  27. void OnWindowDestroying(aura::Window* window) override;
  28. void OnWindowStackingChanged(aura::Window* window) override;
  29. // Test only functions
  30. ui::Layer* GetLayerForTest() const { return layer_.get(); }
  31. private:
  32. void StackLayerUnderDialog();
  33. std::unique_ptr<ui::Layer> layer_;
  34. raw_ptr<aura::Window> parent_;
  35. raw_ptr<aura::Window> dialog_;
  36. };
  37. } // namespace javascript_dialogs
  38. #endif // COMPONENTS_JAVASCRIPT_DIALOGS_VIEWS_LAYER_DIMMER_H_