Expose line cap features to C

This commit is contained in:
Patrick Walton 2019-05-30 21:28:52 -07:00
parent 712c69faf1
commit eeaf51ce72
2 changed files with 23 additions and 0 deletions

View File

@ -19,6 +19,12 @@ extern "C" {
// Macros // Macros
// `canvas`
#define PF_LINE_CAP_BUTT 0
#define PF_LINE_CAP_SQUARE 1
#define PF_LINE_CAP_ROUND 2
// `gl` // `gl`
#define PF_GL_VERSION_GL3 0 #define PF_GL_VERSION_GL3 0
@ -41,6 +47,7 @@ struct PFPath;
typedef struct PFPath *PFPathRef; typedef struct PFPath *PFPathRef;
struct PFCanvasFontContext; struct PFCanvasFontContext;
typedef struct PFCanvasFontContext *PFCanvasFontContextRef; typedef struct PFCanvasFontContext *PFCanvasFontContextRef;
typedef uint8_t PFLineCap;
// `geometry` // `geometry`
@ -113,6 +120,7 @@ PFSceneRef PFCanvasCreateScene(PFCanvasRef canvas);
void PFCanvasFillRect(PFCanvasRef canvas, const PFRectF *rect); 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 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();

View File

@ -15,6 +15,7 @@ use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, Path2D};
use pathfinder_geometry::basic::point::{Point2DF, Point2DI}; use pathfinder_geometry::basic::point::{Point2DF, Point2DI};
use pathfinder_geometry::basic::rect::{RectF, RectI}; use pathfinder_geometry::basic::rect::{RectF, RectI};
use pathfinder_geometry::color::ColorF; use pathfinder_geometry::color::ColorF;
use pathfinder_geometry::stroke::LineCap;
use pathfinder_gl::{GLDevice, GLVersion}; use pathfinder_gl::{GLDevice, GLVersion};
use pathfinder_gpu::resources::{FilesystemResourceLoader, ResourceLoader}; use pathfinder_gpu::resources::{FilesystemResourceLoader, ResourceLoader};
use pathfinder_gpu::{ClearParams, Device}; use pathfinder_gpu::{ClearParams, Device};
@ -29,6 +30,10 @@ use std::os::raw::{c_char, c_void};
// Constants // Constants
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_CLEAR_FLAGS_HAS_COLOR: u8 = 0x1; pub const PF_CLEAR_FLAGS_HAS_COLOR: u8 = 0x1;
pub const PF_CLEAR_FLAGS_HAS_DEPTH: u8 = 0x2; pub const PF_CLEAR_FLAGS_HAS_DEPTH: u8 = 0x2;
pub const PF_CLEAR_FLAGS_HAS_STENCIL: u8 = 0x4; pub const PF_CLEAR_FLAGS_HAS_STENCIL: u8 = 0x4;
@ -40,6 +45,7 @@ pub const PF_CLEAR_FLAGS_HAS_RECT: u8 = 0x8;
pub type PFCanvasRef = *mut CanvasRenderingContext2D; 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;
// `geometry` // `geometry`
#[repr(C)] #[repr(C)]
@ -146,6 +152,15 @@ pub unsafe extern "C" fn PFCanvasSetLineWidth(canvas: PFCanvasRef, new_line_widt
(*canvas).set_line_width(new_line_width) (*canvas).set_line_width(new_line_width)
} }
#[no_mangle]
pub unsafe extern "C" fn PFCanvasSetLineCap(canvas: PFCanvasRef, new_line_cap: PFLineCap) {
(*canvas).set_line_cap(match new_line_cap {
PF_LINE_CAP_SQUARE => LineCap::Square,
PF_LINE_CAP_ROUND => LineCap::Round,
_ => LineCap::Butt,
});
}
/// 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) {