Expose more stroke features in the C API
This commit is contained in:
parent
71623eaab3
commit
d2fbb23031
|
@ -25,6 +25,10 @@ extern "C" {
|
|||
#define PF_LINE_CAP_SQUARE 1
|
||||
#define PF_LINE_CAP_ROUND 2
|
||||
|
||||
#define PF_LINE_JOIN_MITER 0
|
||||
#define PF_LINE_JOIN_BEVEL 1
|
||||
#define PF_LINE_JOIN_ROUND 2
|
||||
|
||||
// `gl`
|
||||
|
||||
#define PF_GL_VERSION_GL3 0
|
||||
|
@ -45,6 +49,7 @@ typedef struct PFPath *PFPathRef;
|
|||
struct PFCanvasFontContext;
|
||||
typedef struct PFCanvasFontContext *PFCanvasFontContextRef;
|
||||
typedef uint8_t PFLineCap;
|
||||
typedef uint8_t PFLineJoin;
|
||||
|
||||
// `geometry`
|
||||
|
||||
|
@ -116,6 +121,12 @@ void PFCanvasFillRect(PFCanvasRef canvas, const PFRectF *rect);
|
|||
void PFCanvasStrokeRect(PFCanvasRef canvas, const PFRectF *rect);
|
||||
void PFCanvasSetLineWidth(PFCanvasRef canvas, float new_line_width);
|
||||
void PFCanvasSetLineCap(PFCanvasRef canvas, PFLineCap new_line_cap);
|
||||
void PFCanvasSetLineJoin(PFCanvasRef canvas, PFLineJoin new_line_join);
|
||||
void PFCanvasSetMiterLimit(PFCanvasRef canvas, float new_miter_limit);
|
||||
void PFCanvasSetLineDash(PFCanvasRef canvas,
|
||||
const float *new_line_dashes,
|
||||
size_t new_line_dash_count);
|
||||
void PFCanvasSetLineDashOffset(PFCanvasRef canvas, float offset);
|
||||
void PFCanvasFillPath(PFCanvasRef canvas, PFPathRef path);
|
||||
void PFCanvasStrokePath(PFCanvasRef canvas, PFPathRef path);
|
||||
PFPathRef PFPathCreate();
|
||||
|
|
35
c/src/lib.rs
35
c/src/lib.rs
|
@ -11,7 +11,7 @@
|
|||
//! C bindings to Pathfinder.
|
||||
|
||||
use gl;
|
||||
use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, Path2D};
|
||||
use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, LineJoin, Path2D};
|
||||
use pathfinder_geometry::basic::vector::{Vector2F, Vector2I};
|
||||
use pathfinder_geometry::basic::rect::{RectF, RectI};
|
||||
use pathfinder_geometry::color::ColorF;
|
||||
|
@ -27,14 +27,20 @@ use pathfinder_renderer::scene::Scene;
|
|||
use pathfinder_simd::default::F32x4;
|
||||
use std::ffi::CString;
|
||||
use std::os::raw::{c_char, c_void};
|
||||
use std::slice;
|
||||
|
||||
// Constants
|
||||
|
||||
// `canvas`
|
||||
|
||||
pub const PF_LINE_CAP_BUTT: u8 = 0;
|
||||
pub const PF_LINE_CAP_SQUARE: u8 = 1;
|
||||
pub const PF_LINE_CAP_ROUND: u8 = 2;
|
||||
|
||||
pub const PF_LINE_JOIN_MITER: u8 = 0;
|
||||
pub const PF_LINE_JOIN_BEVEL: u8 = 1;
|
||||
pub const PF_LINE_JOIN_ROUND: u8 = 2;
|
||||
|
||||
// `renderer`
|
||||
pub const PF_RENDERER_OPTIONS_FLAGS_HAS_BACKGROUND_COLOR: u8 = 0x1;
|
||||
|
||||
|
@ -45,6 +51,7 @@ pub type PFCanvasRef = *mut CanvasRenderingContext2D;
|
|||
pub type PFPathRef = *mut Path2D;
|
||||
pub type PFCanvasFontContextRef = *mut CanvasFontContext;
|
||||
pub type PFLineCap = u8;
|
||||
pub type PFLineJoin = u8;
|
||||
|
||||
// `geometry`
|
||||
#[repr(C)]
|
||||
|
@ -164,6 +171,32 @@ pub unsafe extern "C" fn PFCanvasSetLineCap(canvas: PFCanvasRef, new_line_cap: P
|
|||
});
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn PFCanvasSetLineJoin(canvas: PFCanvasRef, new_line_join: PFLineJoin) {
|
||||
(*canvas).set_line_join(match new_line_join {
|
||||
PF_LINE_JOIN_BEVEL => LineJoin::Bevel,
|
||||
PF_LINE_JOIN_ROUND => LineJoin::Round,
|
||||
_ => LineJoin::Miter,
|
||||
});
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn PFCanvasSetMiterLimit(canvas: PFCanvasRef, new_miter_limit: f32) {
|
||||
(*canvas).set_miter_limit(new_miter_limit);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn PFCanvasSetLineDash(canvas: PFCanvasRef,
|
||||
new_line_dashes: *const f32,
|
||||
new_line_dash_count: usize) {
|
||||
(*canvas).set_line_dash(slice::from_raw_parts(new_line_dashes, new_line_dash_count).to_vec())
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn PFCanvasSetLineDashOffset(canvas: PFCanvasRef, new_offset: f32) {
|
||||
(*canvas).set_line_dash_offset(new_offset)
|
||||
}
|
||||
|
||||
/// Consumes the path.
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn PFCanvasFillPath(canvas: PFCanvasRef, path: PFPathRef) {
|
||||
|
|
Loading…
Reference in New Issue