Make eraser pressure sensitive

This commit is contained in:
Yousef Khadadeh 2026-05-25 14:46:22 +03:00
parent ad6f942a34
commit c12cd14f6e
9 changed files with 244 additions and 176 deletions

View file

@ -19,6 +19,9 @@
#pragma once
#include "../CoordSpaceHelper.hpp"
#include <include/core/SkPathBuilder.h>
#include "../InputManager.hpp"
class DrawingProgram;
struct MeshShapeData {
std::vector<std::vector<Vector2f>> contours;
@ -36,8 +39,24 @@ namespace BrushComponentCode {
}
};
struct BrushStrokeGenerationData {
bool addedTemporaryPoint = false;
std::vector<BrushComponentCode::BrushPoint> brushPoints;
Vector2f prevPointUnaltered = {0, 0};
float penWidth = 1.0f;
CoordSpaceHelper coords;
};
SkPath brush_stroke_to_skpath(const std::vector<BrushPoint>& brushPoints, bool hasRoundCaps);
SkPath create_triangles(const std::vector<BrushPoint>& regularPoints, const std::vector<BrushPoint>& smoothedPoints, bool hasRoundCaps);
std::vector<size_t> get_wedge_indices(const std::vector<BrushPoint>& points);
std::vector<BrushPoint> smooth_points(const std::vector<BrushPoint>& points, size_t beginIndex, size_t endIndex, unsigned numOfDivisions);
void smooth_out_points(std::vector<BrushPoint>& brushPoints, float smoothFactor);
void fix_tip(std::vector<BrushPoint>& brushPoints);
void mouse_button(DrawingProgram& drawP, BrushStrokeGenerationData& genData, const CoordSpaceHelper& strokeCoordSpace, const InputManager::MouseButtonCallbackArgs& button, float brushSize);
void mouse_motion(DrawingProgram& drawP, BrushStrokeGenerationData& genData, const Vector2f& motionPos, float brushSize);
void pen_pressure(DrawingProgram& drawP, BrushStrokeGenerationData& genData, float brushSize);
bool extensive_point_checking(const std::vector<BrushPoint>& points, const Vector2f& newPoint, float minimumDistance);
bool extensive_point_checking_back(const std::vector<BrushPoint>& points, const Vector2f& newPoint);
}