blob: 833d0c5a317cc1bffd7abaee147b12226981f6ca [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/overlay/simple_overlay_window_image_button.h"
#include "chrome/browser/ui/color/chrome_color_id.h"
#include "chrome/browser/ui/views/overlay/constants.h"
#include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/base/models/image_model.h"
#include "ui/gfx/vector_icon_types.h"
SimpleOverlayWindowImageButton::SimpleOverlayWindowImageButton(
PressedCallback callback,
const gfx::VectorIcon& icon,
std::u16string label)
: OverlayWindowImageButton(std::move(callback)), icon_(icon) {
UpdateImage();
// Accessibility.
SetAccessibleName(label);
SetTooltipText(label);
}
void SimpleOverlayWindowImageButton::SetVisible(bool visible) {
// We need to do more than the usual visibility change because otherwise the
// overlay window cannot be dragged when grabbing within the button area.
views::ImageButton::SetVisible(visible);
SetSize(visible ? last_visible_size_ : gfx::Size());
}
void SimpleOverlayWindowImageButton::OnBoundsChanged(
const gfx::Rect& previous_bounds) {
if (!size().IsEmpty())
last_visible_size_ = size();
if (size() == previous_bounds.size())
return;
UpdateImage();
}
void SimpleOverlayWindowImageButton::UpdateImage() {
const int icon_size = std::max(0, width() - (2 * kPipWindowIconPadding));
SetImageModel(views::Button::STATE_NORMAL,
ui::ImageModel::FromVectorIcon(
*icon_, kColorPipWindowForeground, icon_size));
}
BEGIN_METADATA(SimpleOverlayWindowImageButton)
END_METADATA