test_widget_builder.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. #include "ash/test/test_widget_builder.h"
  5. #include "ash/shell.h"
  6. #include "ui/aura/client/aura_constants.h"
  7. #include "ui/aura/client/window_parenting_client.h"
  8. #include "ui/aura/test/test_windows.h"
  9. #include "ui/aura/window.h"
  10. #include "ui/views/widget/widget_delegate.h"
  11. #include "ui/wm/core/coordinate_conversion.h"
  12. namespace ash {
  13. namespace {
  14. // WidgetDelegate that is resizable and creates ash's NonClientFrameView
  15. // implementation.
  16. class TestWidgetDelegate : public views::WidgetDelegateView {
  17. public:
  18. TestWidgetDelegate() {
  19. SetCanMaximize(true);
  20. SetCanMinimize(true);
  21. SetCanResize(true);
  22. }
  23. TestWidgetDelegate(const TestWidgetDelegate& other) = delete;
  24. TestWidgetDelegate& operator=(const TestWidgetDelegate& other) = delete;
  25. ~TestWidgetDelegate() override = default;
  26. // views::WidgetDelegateView:
  27. std::unique_ptr<views::NonClientFrameView> CreateNonClientFrameView(
  28. views::Widget* widget) override {
  29. return Shell::Get()->CreateDefaultNonClientFrameView(widget);
  30. }
  31. };
  32. } // namespace
  33. TestWidgetBuilder::TestWidgetBuilder() = default;
  34. TestWidgetBuilder::~TestWidgetBuilder() = default;
  35. TestWidgetBuilder& TestWidgetBuilder::SetWidgetType(
  36. views::Widget::InitParams::Type type) {
  37. DCHECK(!built_);
  38. widget_init_params_.type = type;
  39. return *this;
  40. }
  41. TestWidgetBuilder& TestWidgetBuilder::SetZOrderLevel(ui::ZOrderLevel z_order) {
  42. DCHECK(!built_);
  43. widget_init_params_.z_order = z_order;
  44. return *this;
  45. }
  46. TestWidgetBuilder& TestWidgetBuilder::SetDelegate(
  47. views::WidgetDelegate* delegate) {
  48. DCHECK(!built_);
  49. widget_init_params_.delegate = delegate;
  50. return *this;
  51. }
  52. TestWidgetBuilder& TestWidgetBuilder::SetBounds(const gfx::Rect& bounds) {
  53. DCHECK(!built_);
  54. widget_init_params_.bounds = bounds;
  55. return *this;
  56. }
  57. TestWidgetBuilder& TestWidgetBuilder::SetParent(aura::Window* parent) {
  58. DCHECK(!built_);
  59. widget_init_params_.parent = parent;
  60. return *this;
  61. }
  62. TestWidgetBuilder& TestWidgetBuilder::SetContext(aura::Window* context) {
  63. DCHECK(!built_);
  64. widget_init_params_.context = context;
  65. return *this;
  66. }
  67. TestWidgetBuilder& TestWidgetBuilder::SetActivatable(bool activatable) {
  68. DCHECK(!built_);
  69. widget_init_params_.activatable =
  70. activatable ? views::Widget::InitParams::Activatable::kYes
  71. : views::Widget::InitParams::Activatable::kNo;
  72. return *this;
  73. }
  74. TestWidgetBuilder& TestWidgetBuilder::SetShowState(
  75. ui::WindowShowState show_state) {
  76. DCHECK(!built_);
  77. widget_init_params_.show_state = show_state;
  78. return *this;
  79. }
  80. TestWidgetBuilder& TestWidgetBuilder::SetWindowId(int window_id) {
  81. DCHECK(!built_);
  82. window_id_ = window_id;
  83. return *this;
  84. }
  85. TestWidgetBuilder& TestWidgetBuilder::SetShow(bool show) {
  86. DCHECK(!built_);
  87. show_ = show;
  88. return *this;
  89. }
  90. TestWidgetBuilder& TestWidgetBuilder::SetTestWidgetDelegate() {
  91. widget_init_params_.delegate = new TestWidgetDelegate();
  92. return *this;
  93. }
  94. std::unique_ptr<views::Widget> TestWidgetBuilder::BuildOwnsNativeWidget() {
  95. DCHECK(!built_);
  96. built_ = true;
  97. std::unique_ptr<views::Widget> widget = std::make_unique<views::Widget>();
  98. widget_init_params_.ownership =
  99. views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
  100. widget->Init(std::move(widget_init_params_));
  101. if (window_id_ != aura::Window::kInitialId)
  102. widget->GetNativeWindow()->SetId(window_id_);
  103. if (show_)
  104. widget->Show();
  105. return widget;
  106. }
  107. views::Widget* TestWidgetBuilder::BuildOwnedByNativeWidget() {
  108. DCHECK(!built_);
  109. built_ = true;
  110. views::Widget* widget = new views::Widget();
  111. widget_init_params_.ownership =
  112. views::Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET;
  113. widget->Init(std::move(widget_init_params_));
  114. if (window_id_ != aura::Window::kInitialId)
  115. widget->GetNativeWindow()->SetId(window_id_);
  116. if (show_)
  117. widget->Show();
  118. return widget;
  119. }
  120. } // namespace ash