From e58165ed7aa3b1968e38595d9e27f3ff6cefb372 Mon Sep 17 00:00:00 2001 From: Rodrigo Tobar Date: Mon, 21 Nov 2022 13:19:26 +0800 Subject: [PATCH] LibPDF: Render cubic bezier curves The implementation of bezier curves already exists on Gfx, so implementing the PDF rendering of this command is trivial. --- Userland/Libraries/LibPDF/Renderer.cpp | 37 +++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibPDF/Renderer.cpp b/Userland/Libraries/LibPDF/Renderer.cpp index 35db2e697e..0d0a3d57ff 100644 --- a/Userland/Libraries/LibPDF/Renderer.cpp +++ b/Userland/Libraries/LibPDF/Renderer.cpp @@ -225,9 +225,40 @@ RENDERER_HANDLER(path_line) return {}; } -RENDERER_TODO(path_cubic_bezier_curve) -RENDERER_TODO(path_cubic_bezier_curve_no_first_control) -RENDERER_TODO(path_cubic_bezier_curve_no_second_control) +RENDERER_HANDLER(path_cubic_bezier_curve) +{ + VERIFY(args.size() == 6); + m_current_path.cubic_bezier_curve_to( + map(args[0].to_float(), args[1].to_float()), + map(args[2].to_float(), args[3].to_float()), + map(args[4].to_float(), args[5].to_float())); + return {}; +} + +RENDERER_HANDLER(path_cubic_bezier_curve_no_first_control) +{ + VERIFY(args.size() == 4); + VERIFY(!m_current_path.segments().is_empty()); + auto current_point = m_current_path.segments().rbegin()->point(); + m_current_path.cubic_bezier_curve_to( + current_point, + map(args[0].to_float(), args[1].to_float()), + map(args[2].to_float(), args[3].to_float())); + return {}; +} + +RENDERER_HANDLER(path_cubic_bezier_curve_no_second_control) +{ + VERIFY(args.size() == 4); + VERIFY(!m_current_path.segments().is_empty()); + auto first_control_point = map(args[0].to_float(), args[1].to_float()); + auto second_control_point = map(args[2].to_float(), args[3].to_float()); + m_current_path.cubic_bezier_curve_to( + first_control_point, + second_control_point, + second_control_point); + return {}; +} RENDERER_HANDLER(path_close) {