capture_mode_button.cc 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/capture_mode/capture_mode_button.h"
  5. #include "ash/capture_mode/capture_mode_constants.h"
  6. #include "ash/resources/vector_icons/vector_icons.h"
  7. #include "ash/style/ash_color_provider.h"
  8. #include "ash/style/style_util.h"
  9. #include "base/bind.h"
  10. #include "ui/base/metadata/metadata_impl_macros.h"
  11. #include "ui/color/color_id.h"
  12. #include "ui/gfx/paint_vector_icon.h"
  13. #include "ui/views/accessibility/view_accessibility.h"
  14. #include "ui/views/border.h"
  15. #include "ui/views/controls/focus_ring.h"
  16. #include "ui/views/controls/highlight_path_generator.h"
  17. namespace ash {
  18. CaptureModeButton::CaptureModeButton(views::Button::PressedCallback callback,
  19. const gfx::VectorIcon& icon)
  20. : views::ImageButton(callback) {
  21. ConfigureButton(this, views::FocusRing::Get(this));
  22. const SkColor normal_color = AshColorProvider::Get()->GetContentLayerColor(
  23. AshColorProvider::ContentLayerType::kButtonIconColor);
  24. SetImage(views::Button::STATE_NORMAL,
  25. gfx::CreateVectorIcon(icon, normal_color));
  26. }
  27. // static
  28. void CaptureModeButton::ConfigureButton(views::ImageButton* button,
  29. views::FocusRing* focus_ring) {
  30. StyleUtil::SetUpInkDropForButton(button, gfx::Insets(),
  31. /*highlight_on_hover=*/false,
  32. /*highlight_on_focus=*/false);
  33. button->SetImageHorizontalAlignment(ALIGN_CENTER);
  34. button->SetImageVerticalAlignment(ALIGN_MIDDLE);
  35. button->SetPreferredSize(capture_mode::kButtonSize);
  36. button->SetBorder(views::CreateEmptyBorder(capture_mode::kButtonPadding));
  37. button->GetViewAccessibility().OverrideIsLeaf(true);
  38. button->SetInstallFocusRingOnFocus(true);
  39. focus_ring->SetColorId(ui::kColorAshFocusRing);
  40. focus_ring->SetPathGenerator(
  41. std::make_unique<views::CircleHighlightPathGenerator>(
  42. capture_mode::kButtonPadding));
  43. views::InstallCircleHighlightPathGenerator(button,
  44. capture_mode::kButtonPadding);
  45. }
  46. views::View* CaptureModeButton::GetView() {
  47. return this;
  48. }
  49. BEGIN_METADATA(CaptureModeButton, views::ImageButton)
  50. END_METADATA
  51. } // namespace ash