#ifndef UI_AURA_TEST_TEST_WINDOW_DELEGATE_H_
#define UI_AURA_TEST_TEST_WINDOW_DELEGATE_H_
#include <string>
#include "third_party/skia/include/core/SkColor.h"
#include "ui/aura/window_delegate.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/gfx/geometry/rect.h"
namespace aura {
namespace test {
class TestWindowDelegate : public WindowDelegate {
public:
TestWindowDelegate();
TestWindowDelegate(const TestWindowDelegate&) = delete;
TestWindowDelegate& operator=(const TestWindowDelegate&) = delete;
~TestWindowDelegate() override;
static TestWindowDelegate* CreateSelfDestroyingDelegate();
void set_window_component(int window_component) {
window_component_ = window_component;
}
void set_minimum_size(const gfx::Size& minimum_size) {
minimum_size_ = minimum_size;
}
void set_maximum_size(const std::optional<gfx::Size>& maximum_size) {
maximum_size_ = maximum_size;
}
void set_can_focus(bool can_focus) { can_focus_ = can_focus; }
void set_on_occlusion_changed(base::RepeatingClosure callback) {
on_occlusion_changed_ = std::move(callback);
}
gfx::Size GetMinimumSize() const override;
std::optional<gfx::Size> GetMaximumSize() const override;
void OnBoundsChanged(const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds) override;
gfx::NativeCursor GetCursor(const gfx::Point& point) override;
int GetNonClientComponent(const gfx::Point& point) const override;
bool ShouldDescendIntoChildForEventHandling(
Window* child,
const gfx::Point& location) override;
bool CanFocus() override;
void OnCaptureLost() override;
void OnPaint(const ui::PaintContext& context) override;
void OnDeviceScaleFactorChanged(float old_device_scale_factor,
float new_device_scale_factor) override;
void OnWindowDestroying(Window* window) override;
void OnWindowDestroyed(Window* window) override;
void OnWindowTargetVisibilityChanged(bool visible) override;
void OnWindowOcclusionChanged(
Window::OcclusionState old_occlusion_state,
Window::OcclusionState new_occlusion_state) override;
bool HasHitTestMask() const override;
void GetHitTestMask(SkPath* mask) const override;
private:
int window_component_;
bool delete_on_destroyed_;
gfx::Size minimum_size_;
std::optional<gfx::Size> maximum_size_;
bool can_focus_;
base::RepeatingClosure on_occlusion_changed_;
};
class ColorTestWindowDelegate : public TestWindowDelegate {
public:
explicit ColorTestWindowDelegate(SkColor color);
ColorTestWindowDelegate(const ColorTestWindowDelegate&) = delete;
ColorTestWindowDelegate& operator=(const ColorTestWindowDelegate&) = delete;
~ColorTestWindowDelegate() override;
ui::KeyboardCode last_key_code() const { return last_key_code_; }
void OnBoundsChanged(const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds) override;
void OnKeyEvent(ui::KeyEvent* event) override;
void OnWindowDestroyed(Window* window) override;
void OnPaint(const ui::PaintContext& context) override;
private:
SkColor color_;
ui::KeyboardCode last_key_code_;
gfx::Size window_size_;
};
class MaskedWindowDelegate : public TestWindowDelegate {
public:
explicit MaskedWindowDelegate(const gfx::Rect mask_rect);
MaskedWindowDelegate(const MaskedWindowDelegate&) = delete;
MaskedWindowDelegate& operator=(const MaskedWindowDelegate&) = delete;
bool HasHitTestMask() const override;
void GetHitTestMask(SkPath* mask) const override;
private:
gfx::Rect mask_rect_;
};
class EventCountDelegate : public TestWindowDelegate {
public:
EventCountDelegate();
EventCountDelegate(const EventCountDelegate&) = delete;
EventCountDelegate& operator=(const EventCountDelegate&) = delete;
void OnKeyEvent(ui::KeyEvent* event) override;
void OnMouseEvent(ui::MouseEvent* event) override;
void OnGestureEvent(ui::GestureEvent* event) override;
std::string GetMouseMotionCountsAndReset();
std::string GetMouseButtonCountsAndReset();
std::string GetKeyCountsAndReset();
int GetGestureCountAndReset();
private:
int mouse_enter_count_;
int mouse_move_count_;
int mouse_leave_count_;
int mouse_press_count_;
int mouse_release_count_;
int key_press_count_;
int key_release_count_;
int gesture_count_;
};
}
}
#endif