window_backdrop.cc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright 2020 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. #include "ash/public/cpp/window_backdrop.h"
  5. #include "ash/public/cpp/window_properties.h"
  6. #include "ui/aura/window.h"
  7. namespace ash {
  8. namespace {
  9. constexpr SkColor kSemiOpaqueBackdropColor =
  10. SkColorSetARGB(0x99, 0x20, 0x21, 0x24);
  11. } // namespace
  12. WindowBackdrop::WindowBackdrop(aura::Window* window) : window_(window) {}
  13. WindowBackdrop::~WindowBackdrop() = default;
  14. // static
  15. WindowBackdrop* WindowBackdrop::Get(aura::Window* window) {
  16. DCHECK(window);
  17. WindowBackdrop* window_backdrop = window->GetProperty(kWindowBackdropKey);
  18. if (window_backdrop)
  19. return window_backdrop;
  20. window_backdrop = new WindowBackdrop(window);
  21. window->SetProperty(kWindowBackdropKey, window_backdrop);
  22. return window_backdrop;
  23. }
  24. void WindowBackdrop::SetBackdropMode(WindowBackdrop::BackdropMode mode) {
  25. if (mode_ == mode)
  26. return;
  27. mode_ = mode;
  28. NotifyWindowBackdropPropertyChanged();
  29. }
  30. void WindowBackdrop::SetBackdropType(WindowBackdrop::BackdropType type) {
  31. if (type_ == type)
  32. return;
  33. type_ = type;
  34. NotifyWindowBackdropPropertyChanged();
  35. }
  36. void WindowBackdrop::DisableBackdrop() {
  37. if (temporarily_disabled_)
  38. return;
  39. temporarily_disabled_ = true;
  40. NotifyWindowBackdropPropertyChanged();
  41. }
  42. void WindowBackdrop::RestoreBackdrop() {
  43. if (!temporarily_disabled_)
  44. return;
  45. temporarily_disabled_ = false;
  46. NotifyWindowBackdropPropertyChanged();
  47. }
  48. SkColor WindowBackdrop::GetBackdropColor() const {
  49. if (type_ == BackdropType::kSemiOpaque)
  50. return kSemiOpaqueBackdropColor;
  51. DCHECK(type_ == BackdropType::kOpaque);
  52. return SK_ColorBLACK;
  53. }
  54. void WindowBackdrop::AddObserver(WindowBackdrop::Observer* observer) {
  55. observers_.AddObserver(observer);
  56. }
  57. void WindowBackdrop::RemoveObserver(WindowBackdrop::Observer* observer) {
  58. observers_.RemoveObserver(observer);
  59. }
  60. void WindowBackdrop::NotifyWindowBackdropPropertyChanged() {
  61. for (auto& observer : observers_)
  62. observer.OnWindowBackdropPropertyChanged(window_);
  63. }
  64. } // namespace ash