blob: 62ab66f46014abd3ec5e72e632957449416e9daf [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_TEST_TEST_VIEWS_H_
#define UI_VIEWS_TEST_TEST_VIEWS_H_
#include <memory>
#include "base/macros.h"
#include "ui/events/event_constants.h"
#include "ui/views/view.h"
namespace views {
// A view that requests a set amount of space.
class StaticSizedView : public View {
public:
explicit StaticSizedView(const gfx::Size& preferred_size = gfx::Size());
~StaticSizedView() override;
void set_minimum_size(const gfx::Size& minimum_size) {
minimum_size_ = minimum_size;
}
void set_maximum_size(const gfx::Size& maximum_size) {
maximum_size_ = maximum_size;
}
// View overrides:
gfx::Size CalculatePreferredSize() const override;
gfx::Size GetMinimumSize() const override;
gfx::Size GetMaximumSize() const override;
private:
gfx::Size preferred_size_;
gfx::Size minimum_size_;
gfx::Size maximum_size_;
DISALLOW_COPY_AND_ASSIGN(StaticSizedView);
};
// A view that accomodates testing layouts that use GetHeightForWidth.
class ProportionallySizedView : public View {
public:
explicit ProportionallySizedView(int factor);
~ProportionallySizedView() override;
void SetPreferredWidth(int width);
int GetHeightForWidth(int w) const override;
gfx::Size CalculatePreferredSize() const override;
private:
// The multiplicative factor between width and height, i.e.
// height = width * factor_.
int factor_;
// The width used as the preferred size. -1 if not used.
int preferred_width_;
DISALLOW_COPY_AND_ASSIGN(ProportionallySizedView);
};
// Class that closes the widget (which ends up deleting it immediately) when the
// appropriate event is received.
class CloseWidgetView : public View {
public:
explicit CloseWidgetView(ui::EventType event_type);
// ui::EventHandler override:
void OnEvent(ui::Event* event) override;
private:
const ui::EventType event_type_;
DISALLOW_COPY_AND_ASSIGN(CloseWidgetView);
};
// A view that keeps track of the events it receives, optionally consuming them.
class EventCountView : public View {
public:
// Whether to call SetHandled() on events as they are received. For some event
// types, this will allow EventCountView to receives future events in the
// event sequence, such as a drag.
enum HandleMode { PROPAGATE_EVENTS, CONSUME_EVENTS };
EventCountView();
~EventCountView() override;
int GetEventCount(ui::EventType type);
void ResetCounts();
int last_flags() const { return last_flags_; }
void set_handle_mode(HandleMode handle_mode) { handle_mode_ = handle_mode; }
protected:
// Overridden from View:
void OnMouseMoved(const ui::MouseEvent& event) override;
// Overridden from ui::EventHandler:
void OnKeyEvent(ui::KeyEvent* event) override;
void OnMouseEvent(ui::MouseEvent* event) override;
void OnScrollEvent(ui::ScrollEvent* event) override;
void OnGestureEvent(ui::GestureEvent* event) override;
private:
void RecordEvent(ui::Event* event);
std::map<ui::EventType, int> event_count_;
int last_flags_;
HandleMode handle_mode_;
DISALLOW_COPY_AND_ASSIGN(EventCountView);
};
// A view which reacts to PreferredSizeChanged() from its children and calls
// Layout().
class ResizeAwareParentView : public View {
public:
ResizeAwareParentView();
// Overridden from View:
void ChildPreferredSizeChanged(View* child) override;
private:
DISALLOW_COPY_AND_ASSIGN(ResizeAwareParentView);
};
} // namespace views
#endif // UI_VIEWS_TEST_TEST_VIEWS_H_