blob: 2455bd4bdff72fb63aa59e5fc770c4eaeadc5d05 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_HIGHLIGHTER_HIGHLIGHTER_CONTROLLER_H_
#define ASH_HIGHLIGHTER_HIGHLIGHTER_CONTROLLER_H_
#include <memory>
#include "ash/fast_ink/fast_ink_pointer_controller.h"
namespace base {
class OneShotTimer;
}
namespace ash {
class HighlighterResultView;
class HighlighterSelectionObserver;
class HighlighterView;
// Controller for the highlighter functionality.
// Enables/disables highlighter as well as receives points
// and passes them off to be rendered.
class ASH_EXPORT HighlighterController : public FastInkPointerController {
public:
HighlighterController();
~HighlighterController() override;
// Set the observer to handle selection results.
void SetObserver(HighlighterSelectionObserver* observer);
// FastInkPointerController:
void SetEnabled(bool enabled) override;
private:
friend class HighlighterControllerTestApi;
// FastInkPointerController:
views::View* GetPointerView() const override;
void CreatePointerView(base::TimeDelta presentation_delay,
aura::Window* root_window) override;
void UpdatePointerView(ui::TouchEvent* event) override;
void DestroyPointerView() override;
bool CanStartNewGesture(ui::TouchEvent* event) override;
// Performs gesture recognition, initiates appropriate visual effects,
// notifies the observer if necessary.
void RecognizeGesture();
// Destroys |highlighter_view_|, if it exists.
void DestroyHighlighterView();
// Destroys |result_view_|, if it exists.
void DestroyResultView();
// |highlighter_view_| will only hold an instance when the highlighter is
// enabled and activated (pressed or dragged) and until the fade out
// animation is done.
std::unique_ptr<HighlighterView> highlighter_view_;
// |result_view_| will only hold an instance when the selection result
// animation is in progress.
std::unique_ptr<HighlighterResultView> result_view_;
// |observer_| is not owned by the controller.
HighlighterSelectionObserver* observer_ = nullptr;
// Time of the session start (e.g. when the controller was enabled).
base::TimeTicks session_start_;
// Time of the previous gesture end, valid after the first gesture
// within the session is complete.
base::TimeTicks previous_gesture_end_;
// Gesture counter withing a session.
int gesture_counter_ = 0;
// Recognized gesture counter withing a session.
int recognized_gesture_counter_ = 0;
// Not null while waiting for the next event to continue an interrupted
// stroke.
std::unique_ptr<base::OneShotTimer> interrupted_stroke_timer_;
DISALLOW_COPY_AND_ASSIGN(HighlighterController);
};
} // namespace ash
#endif // ASH_HIGHLIGHTER_HIGHLIGHTER_CONTROLLER_H_