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_SQUARE 1
|
||||||
#define PF_LINE_CAP_ROUND 2
|
#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`
|
// `gl`
|
||||||
|
|
||||||
#define PF_GL_VERSION_GL3 0
|
#define PF_GL_VERSION_GL3 0
|
||||||
|
@ -45,6 +49,7 @@ typedef struct PFPath *PFPathRef;
|
||||||
struct PFCanvasFontContext;
|
struct PFCanvasFontContext;
|
||||||
typedef struct PFCanvasFontContext *PFCanvasFontContextRef;
|
typedef struct PFCanvasFontContext *PFCanvasFontContextRef;
|
||||||
typedef uint8_t PFLineCap;
|
typedef uint8_t PFLineCap;
|
||||||
|
typedef uint8_t PFLineJoin;
|
||||||
|
|
||||||
// `geometry`
|
// `geometry`
|
||||||
|
|
||||||
|
@ -116,6 +121,12 @@ void PFCanvasFillRect(PFCanvasRef canvas, const PFRectF *rect);
|
||||||
void PFCanvasStrokeRect(PFCanvasRef canvas, const PFRectF *rect);
|
void PFCanvasStrokeRect(PFCanvasRef canvas, const PFRectF *rect);
|
||||||
void PFCanvasSetLineWidth(PFCanvasRef canvas, float new_line_width);
|
void PFCanvasSetLineWidth(PFCanvasRef canvas, float new_line_width);
|
||||||
void PFCanvasSetLineCap(PFCanvasRef canvas, PFLineCap new_line_cap);
|
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 PFCanvasFillPath(PFCanvasRef canvas, PFPathRef path);
|
||||||
void PFCanvasStrokePath(PFCanvasRef canvas, PFPathRef path);
|
void PFCanvasStrokePath(PFCanvasRef canvas, PFPathRef path);
|
||||||
PFPathRef PFPathCreate();
|
PFPathRef PFPathCreate();
|
||||||
|
|
35
c/src/lib.rs
35
c/src/lib.rs
|
@ -11,7 +11,7 @@
|
||||||
//! C bindings to Pathfinder.
|
//! C bindings to Pathfinder.
|
||||||
|
|
||||||
use gl;
|
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::vector::{Vector2F, Vector2I};
|
||||||
use pathfinder_geometry::basic::rect::{RectF, RectI};
|
use pathfinder_geometry::basic::rect::{RectF, RectI};
|
||||||
use pathfinder_geometry::color::ColorF;
|
use pathfinder_geometry::color::ColorF;
|
||||||
|
@ -27,14 +27,20 @@ use pathfinder_renderer::scene::Scene;
|
||||||
use pathfinder_simd::default::F32x4;
|
use pathfinder_simd::default::F32x4;
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::os::raw::{c_char, c_void};
|
use std::os::raw::{c_char, c_void};
|
||||||
|
use std::slice;
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
|
|
||||||
// `canvas`
|
// `canvas`
|
||||||
|
|
||||||
pub const PF_LINE_CAP_BUTT: u8 = 0;
|
pub const PF_LINE_CAP_BUTT: u8 = 0;
|
||||||
pub const PF_LINE_CAP_SQUARE: u8 = 1;
|
pub const PF_LINE_CAP_SQUARE: u8 = 1;
|
||||||
pub const PF_LINE_CAP_ROUND: u8 = 2;
|
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`
|
// `renderer`
|
||||||
pub const PF_RENDERER_OPTIONS_FLAGS_HAS_BACKGROUND_COLOR: u8 = 0x1;
|
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 PFPathRef = *mut Path2D;
|
||||||
pub type PFCanvasFontContextRef = *mut CanvasFontContext;
|
pub type PFCanvasFontContextRef = *mut CanvasFontContext;
|
||||||
pub type PFLineCap = u8;
|
pub type PFLineCap = u8;
|
||||||
|
pub type PFLineJoin = u8;
|
||||||
|
|
||||||
// `geometry`
|
// `geometry`
|
||||||
#[repr(C)]
|
#[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.
|
/// Consumes the path.
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn PFCanvasFillPath(canvas: PFCanvasRef, path: PFPathRef) {
|
pub unsafe extern "C" fn PFCanvasFillPath(canvas: PFCanvasRef, path: PFPathRef) {
|
||||||
|
|
Loading…
Reference in New Issue