screen_capture_tray_item_view.cc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright 2022 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/system/unified/screen_capture_tray_item_view.h"
  5. #include "ash/multi_capture/multi_capture_service_client.h"
  6. #include "ash/resources/vector_icons/vector_icons.h"
  7. #include "ash/shell.h"
  8. #include "ash/strings/grit/ash_strings.h"
  9. #include "ash/style/ash_color_provider.h"
  10. #include "ash/system/tray/tray_constants.h"
  11. #include "components/vector_icons/vector_icons.h"
  12. #include "ui/base/l10n/l10n_util.h"
  13. #include "ui/gfx/paint_vector_icon.h"
  14. #include "ui/gfx/vector_icon_types.h"
  15. #include "ui/views/controls/image_view.h"
  16. namespace ash {
  17. ScreenCaptureTrayItemView::ScreenCaptureTrayItemView(Shelf* shelf)
  18. : TrayItemView(shelf) {
  19. CreateImageView();
  20. const gfx::VectorIcon* icon = &kSystemTrayRecordingIcon;
  21. image_view()->SetImage(gfx::CreateVectorIcon(gfx::IconDescription(
  22. *icon, kUnifiedTrayIconSize,
  23. AshColorProvider::Get()->GetContentLayerColor(
  24. AshColorProvider::ContentLayerType::kIconColorAlert))));
  25. Shell::Get()->multi_capture_service_client()->AddObserver(this);
  26. Refresh();
  27. }
  28. ScreenCaptureTrayItemView::~ScreenCaptureTrayItemView() {
  29. Shell::Get()->multi_capture_service_client()->RemoveObserver(this);
  30. }
  31. const char* ScreenCaptureTrayItemView::GetClassName() const {
  32. return "ScreenCaptureTrayItemView";
  33. }
  34. views::View* ScreenCaptureTrayItemView::GetTooltipHandlerForPoint(
  35. const gfx::Point& point) {
  36. return HitTestPoint(point) ? this : nullptr;
  37. }
  38. std::u16string ScreenCaptureTrayItemView::GetTooltipText(
  39. const gfx::Point& point) const {
  40. return l10n_util::GetStringUTF16(IDS_ASH_ADMIN_SCREEN_CAPTURE);
  41. }
  42. void ScreenCaptureTrayItemView::Refresh() {
  43. SetVisible(!request_ids_.empty());
  44. }
  45. void ScreenCaptureTrayItemView::MultiCaptureStarted(const std::string& label,
  46. const url::Origin& origin) {
  47. request_ids_.insert(label);
  48. Refresh();
  49. }
  50. void ScreenCaptureTrayItemView::MultiCaptureStopped(const std::string& label) {
  51. request_ids_.erase(label);
  52. Refresh();
  53. }
  54. } // namespace ash