#ifndef UI_VIEWS_CONTROLS_IMAGE_VIEW_BASE_H_
#define UI_VIEWS_CONTROLS_IMAGE_VIEW_BASE_H_
#include <optional>
#include <string>
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/view.h"
namespace views {
class VIEWS_EXPORT ImageViewBase : public View {
METADATA_HEADER(ImageViewBase, View)
public:
enum class Alignment { kLeading, kCenter, kTrailing };
ImageViewBase();
ImageViewBase(const ImageViewBase&) = delete;
ImageViewBase& operator=(const ImageViewBase&) = delete;
~ImageViewBase() override;
void SetImageSize(const gfx::Size& image_size);
gfx::Rect GetImageBounds() const;
void ResetImageSize();
void SetHorizontalAlignment(Alignment ha);
Alignment GetHorizontalAlignment() const;
void SetVerticalAlignment(Alignment va);
Alignment GetVerticalAlignment() const;
void OnTooltipTextChanged(const std::u16string& old_tooltip_text) override;
void AdjustAccessibleName(std::u16string& new_name,
ax::mojom::NameFrom& name_from) override;
gfx::Size CalculatePreferredSize(
const SizeBounds& ) const override;
views::PaintInfo::ScaleType GetPaintScaleType() const override;
void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
void PreferredSizeChanged() override;
protected:
virtual gfx::Size GetImageSize() const = 0;
std::optional<gfx::Size> image_size_;
private:
friend class ImageViewTest;
void UpdateImageOrigin();
gfx::Point image_origin_;
Alignment horizontal_alignment_ = Alignment::kCenter;
Alignment vertical_alignment_ = Alignment::kCenter;
std::u16string tooltip_text_;
};
BEGIN_VIEW_BUILDER(VIEWS_EXPORT, ImageViewBase, View)
VIEW_BUILDER_PROPERTY(gfx::Size, ImageSize)
VIEW_BUILDER_PROPERTY(ImageViewBase::Alignment, HorizontalAlignment)
VIEW_BUILDER_PROPERTY(ImageViewBase::Alignment, VerticalAlignment)
VIEW_BUILDER_PROPERTY(std::u16string, TooltipText)
END_VIEW_BUILDER
}
DEFINE_VIEW_BUILDER(VIEWS_EXPORT, ImageViewBase)
#endif