#include "ui/aura/test/test_window_builder.h"
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/client/window_parenting_client.h"
#include "ui/aura/test/test_windows.h"
#include "ui/aura/window.h"
#include "ui/display/display.h"
#include "ui/wm/core/coordinate_conversion.h"
namespace aura::test {
TestWindowBuilder::TestWindowBuilder(WindowBuilderParams params)
: params_(std::move(params)) {}
TestWindowBuilder::TestWindowBuilder(TestWindowBuilder& others)
: params_(std::move(others.params_)),
window_title_(std::move(others.window_title_)),
init_properties_(std::move(others.init_properties_)) {
DCHECK(!others.built_);
others.built_ = true;
}
TestWindowBuilder::~TestWindowBuilder() = default;
TestWindowBuilder& TestWindowBuilder::SetParent(Window* parent) {
DCHECK(!built_);
DCHECK(!params_.parent);
params_.parent = parent;
return *this;
}
TestWindowBuilder& TestWindowBuilder::SetWindowType(client::WindowType type) {
DCHECK(!built_);
params_.window_type = type;
return *this;
}
TestWindowBuilder& TestWindowBuilder::SetWindowId(int id) {
DCHECK(!built_);
params_.window_id = id;
return *this;
}
TestWindowBuilder& TestWindowBuilder::SetWindowTitle(
const std::u16string& title) {
DCHECK(!built_);
window_title_ = title;
return *this;
}
TestWindowBuilder& TestWindowBuilder::SetBounds(const gfx::Rect& bounds) {
DCHECK(!built_);
params_.bounds = bounds;
return *this;
}
TestWindowBuilder& TestWindowBuilder::SetDelegate(WindowDelegate* delegate) {
DCHECK(!built_);
DCHECK(!params_.delegate);
params_.delegate = delegate;
return *this;
}
TestWindowBuilder& TestWindowBuilder::SetColorWindowDelegate(SkColor color) {
DCHECK(!built_);
DCHECK(!params_.delegate);
params_.delegate = new ColorTestWindowDelegate(color);
return *this;
}
TestWindowBuilder& TestWindowBuilder::SetTestWindowDelegate() {
DCHECK(!built_);
DCHECK(!params_.delegate);
params_.delegate = TestWindowDelegate::CreateSelfDestroyingDelegate();
return *this;
}
TestWindowBuilder& TestWindowBuilder::AllowAllWindowStates() {
DCHECK(!built_);
init_properties_.SetProperty(client::kResizeBehaviorKey,
client::kResizeBehaviorCanFullscreen |
client::kResizeBehaviorCanMaximize |
client::kResizeBehaviorCanMinimize |
client::kResizeBehaviorCanResize);
return *this;
}
TestWindowBuilder& TestWindowBuilder::SetShow(bool show) {
DCHECK(!built_);
params_.show = show;
return *this;
}
std::unique_ptr<Window> TestWindowBuilder::Build() {
auto window = CreateWindowInternal();
auto* parent = release_parent();
if (!params_.bounds.IsEmpty()) {
window->SetBounds(params_.bounds);
}
if (parent) {
parent->AddChild(window.get());
}
if (params_.show) {
window->Show();
}
return window;
}
std::unique_ptr<Window> TestWindowBuilder::CreateWindowInternal() {
DCHECK(!built_);
built_ = true;
std::unique_ptr<Window> window =
std::make_unique<Window>(params_.delegate, params_.window_type);
params_.delegate = nullptr;
if (params_.window_id != Window::kInitialId) {
window->SetId(params_.window_id);
}
window->Init(params_.layer_type);
window->AcquireAllPropertiesFrom(std::move(init_properties_));
if (!window_title_.empty()) {
window->SetTitle(window_title_);
}
return window;
}
}