| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ASH_ANNOTATOR_ANNOTATION_SOURCE_WATCHER_H_ |
| #define ASH_ANNOTATOR_ANNOTATION_SOURCE_WATCHER_H_ |
| |
| #include "ash/capture_mode/capture_mode_controller.h" |
| #include "ash/capture_mode/capture_mode_observer.h" |
| #include "ash/public/cpp/projector/projector_session.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/scoped_observation.h" |
| |
| namespace aura { |
| class Window; |
| } // namespace aura |
| |
| namespace gfx { |
| class ImageSkia; |
| } // namespace gfx |
| |
| namespace ash { |
| class AnnotatorController; |
| |
| // Observes different sources for annotating in the OS and notifies the |
| // AnnotatorController to display the annotation tray on the source window. For |
| // example, the tray should be displayed when the user is video capturing the |
| // screen or when the user is in a meeting. Currently, only the capture mode as |
| // a source is supported. |
| class ASH_EXPORT AnnotationSourceWatcher : public CaptureModeObserver, |
| public ProjectorSessionObserver { |
| public: |
| explicit AnnotationSourceWatcher(AnnotatorController* annotator_controller); |
| AnnotationSourceWatcher(const AnnotationSourceWatcher&) = delete; |
| AnnotationSourceWatcher& operator=(const AnnotationSourceWatcher&) = delete; |
| ~AnnotationSourceWatcher() override; |
| |
| void NotifyMarkerEnabled(aura::Window* current_root); |
| void NotifyMarkerDisabled(); |
| |
| // CaptureModeObserver: |
| void OnRecordingStarted(aura::Window* current_root) override; |
| void OnRecordingEnded() override; |
| void OnVideoFileFinalized(bool user_deleted_video_file, |
| const gfx::ImageSkia& thumbnail) override; |
| void OnRecordedWindowChangingRoot(aura::Window* new_root) override; |
| void OnRecordingStartAborted() override; |
| |
| // ProjectorSessionObserver: |
| void OnProjectorSessionActiveStateChanged(bool active) override; |
| |
| private: |
| raw_ptr<AnnotatorController> annotator_controller_ = nullptr; |
| raw_ptr<CaptureModeController> capture_mode_controller_ = nullptr; |
| bool is_projector_session_active_ = false; |
| base::ScopedObservation<CaptureModeController, CaptureModeObserver> |
| capture_mode_observation_{this}; |
| base::ScopedObservation<ProjectorSession, ProjectorSessionObserver> |
| projector_session_observation_{this}; |
| }; |
| } // namespace ash |
| |
| #endif // ASH_ANNOTATOR_ANNOTATION_SOURCE_WATCHER_H_ |