Expose line cap features to C
This commit is contained in:
parent
712c69faf1
commit
eeaf51ce72
|
@ -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();
|
||||||
|
|
15
c/src/lib.rs
15
c/src/lib.rs
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue