0

[PDF Ink Signatures] Refactor PdfInkModule code that records strokes

Every time a new position gets added to a stroke, the following happens:

1) The position gets converted to a canonical position.
2) A time stamp is calculated.
3) The result of (1) and (2) gets appended to a vector.

Since this happens in several places, consolidate the repeated code that
performs the above actions into PdfInkModule::RecordStrokePosition().

Change-Id: I676bc66af7c8b9d085c2df82138ec85d1563d4f9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5750615
Reviewed-by: Andy Phan <andyphan@chromium.org>
Reviewed-by: Alan Screen <awscreen@chromium.org>
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1335829}
This commit is contained in:
Lei Zhang
2024-08-01 01:59:35 +00:00
committed by Chromium LUCI CQ
parent 708304a827
commit 30991981df
2 changed files with 19 additions and 26 deletions

@ -359,16 +359,7 @@ bool PdfInkModule::ContinueStroke(const gfx::PointF& position) {
if (boundary_position != last_position) {
// Record the last point before leaving the page, if `last_position` was
// not already on the page boundary.
gfx::PointF canonical_boundary_position =
ConvertEventPositionToCanonicalPosition(boundary_position,
state.page_index);
base::TimeDelta time_diff = base::Time::Now() - state.start_time.value();
state.inputs.back().push_back({
.position = InkPoint{canonical_boundary_position.x(),
canonical_boundary_position.y()},
.elapsed_time_seconds = static_cast<float>(time_diff.InSecondsF()),
});
RecordStrokePosition(boundary_position);
client_->Invalidate(
state.brush->GetInvalidateArea(last_position, boundary_position));
}
@ -389,26 +380,12 @@ bool PdfInkModule::ContinueStroke(const gfx::PointF& position) {
last_position);
if (boundary_position != position) {
// Record the first point after entering the page.
gfx::PointF canonical_boundary_position =
ConvertEventPositionToCanonicalPosition(boundary_position,
state.page_index);
base::TimeDelta time_diff = base::Time::Now() - state.start_time.value();
state.inputs.back().push_back({
.position = InkPoint{canonical_boundary_position.x(),
canonical_boundary_position.y()},
.elapsed_time_seconds = static_cast<float>(time_diff.InSecondsF()),
});
RecordStrokePosition(boundary_position);
invalidation_position = boundary_position;
}
}
gfx::PointF canonical_position =
ConvertEventPositionToCanonicalPosition(position, state.page_index);
base::TimeDelta time_diff = base::Time::Now() - state.start_time.value();
state.inputs.back().push_back({
.position = InkPoint{canonical_position.x(), canonical_position.y()},
.elapsed_time_seconds = static_cast<float>(time_diff.InSecondsF()),
});
RecordStrokePosition(position);
// Invalidate area covering a straight line between this position and the
// previous one.
@ -670,6 +647,18 @@ gfx::PointF PdfInkModule::ConvertEventPositionToCanonicalPosition(
client_->GetZoom());
}
void PdfInkModule::RecordStrokePosition(const gfx::PointF& position) {
CHECK(is_drawing_stroke());
DrawingStrokeState& state = drawing_stroke_state();
gfx::PointF canonical_position =
ConvertEventPositionToCanonicalPosition(position, state.page_index);
base::TimeDelta time_diff = base::Time::Now() - state.start_time.value();
state.inputs.back().push_back({
.position = InkPoint{canonical_position.x(), canonical_position.y()},
.elapsed_time_seconds = static_cast<float>(time_diff.InSecondsF()),
});
}
void PdfInkModule::ApplyUndoRedoCommands(
const PdfInkUndoRedoModel::Commands& commands) {
switch (PdfInkUndoRedoModel::GetCommandsType(commands)) {

@ -266,6 +266,10 @@ class PdfInkModule {
const gfx::PointF& position,
int page_index);
// Helper to convert `position` to a canonical position and record it into
// `current_tool_state_`. Can only be called when drawing.
void RecordStrokePosition(const gfx::PointF& position);
void ApplyUndoRedoCommands(const PdfInkUndoRedoModel::Commands& commands);
void ApplyUndoRedoCommandsHelper(std::set<size_t> ids, bool should_draw);