Add C bindings to fill and stroke styles
This commit is contained in:
parent
36db39883c
commit
3f601be08c
|
@ -53,6 +53,8 @@ struct PFPath;
|
||||||
typedef struct PFPath *PFPathRef;
|
typedef struct PFPath *PFPathRef;
|
||||||
struct PFCanvasFontContext;
|
struct PFCanvasFontContext;
|
||||||
typedef struct PFCanvasFontContext *PFCanvasFontContextRef;
|
typedef struct PFCanvasFontContext *PFCanvasFontContextRef;
|
||||||
|
struct PFFillStyle;
|
||||||
|
typedef struct PFFillStyle *PFFillStyleRef;
|
||||||
typedef uint8_t PFLineCap;
|
typedef uint8_t PFLineCap;
|
||||||
typedef uint8_t PFLineJoin;
|
typedef uint8_t PFLineJoin;
|
||||||
typedef uint8_t PFArcDirection;
|
typedef uint8_t PFArcDirection;
|
||||||
|
@ -67,6 +69,10 @@ struct PFColorF {
|
||||||
float r, g, b, a;
|
float r, g, b, a;
|
||||||
};
|
};
|
||||||
typedef struct PFColorF PFColorF;
|
typedef struct PFColorF PFColorF;
|
||||||
|
struct PFColorU {
|
||||||
|
uint8_t r, g, b, a;
|
||||||
|
};
|
||||||
|
typedef struct PFColorU PFColorU;
|
||||||
struct PFVector2F {
|
struct PFVector2F {
|
||||||
float x, y;
|
float x, y;
|
||||||
};
|
};
|
||||||
|
@ -149,6 +155,8 @@ void PFCanvasSetLineDash(PFCanvasRef canvas,
|
||||||
const float *new_line_dashes,
|
const float *new_line_dashes,
|
||||||
size_t new_line_dash_count);
|
size_t new_line_dash_count);
|
||||||
void PFCanvasSetLineDashOffset(PFCanvasRef canvas, float offset);
|
void PFCanvasSetLineDashOffset(PFCanvasRef canvas, float offset);
|
||||||
|
void PFCanvasSetFillStyle(PFCanvasRef canvas, PFFillStyleRef fill_style);
|
||||||
|
void PFCanvasSetStrokeStyle(PFCanvasRef canvas, PFFillStyleRef stroke_style);
|
||||||
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();
|
||||||
|
@ -176,6 +184,8 @@ void PFPathEllipse(PFPathRef path,
|
||||||
float start_angle,
|
float start_angle,
|
||||||
float end_angle);
|
float end_angle);
|
||||||
void PFPathClosePath(PFPathRef path);
|
void PFPathClosePath(PFPathRef path);
|
||||||
|
PFFillStyleRef PFFillStyleCreateColor(PFColorU color);
|
||||||
|
void PFFillStyleDestroy(PFFillStyleRef fill_style);
|
||||||
|
|
||||||
// `gl`
|
// `gl`
|
||||||
|
|
||||||
|
|
40
c/src/lib.rs
40
c/src/lib.rs
|
@ -11,11 +11,11 @@
|
||||||
//! C bindings to Pathfinder.
|
//! C bindings to Pathfinder.
|
||||||
|
|
||||||
use gl;
|
use gl;
|
||||||
use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, LineJoin};
|
use pathfinder_canvas::{CanvasFontContext, CanvasRenderingContext2D, FillStyle, LineJoin};
|
||||||
use pathfinder_canvas::{Path2D, TextMetrics};
|
use pathfinder_canvas::{Path2D, TextMetrics};
|
||||||
use pathfinder_geometry::basic::rect::{RectF, RectI};
|
use pathfinder_geometry::basic::rect::{RectF, RectI};
|
||||||
use pathfinder_geometry::basic::vector::{Vector2F, Vector2I};
|
use pathfinder_geometry::basic::vector::{Vector2F, Vector2I};
|
||||||
use pathfinder_geometry::color::ColorF;
|
use pathfinder_geometry::color::{ColorF, ColorU};
|
||||||
use pathfinder_geometry::outline::ArcDirection;
|
use pathfinder_geometry::outline::ArcDirection;
|
||||||
use pathfinder_geometry::stroke::LineCap;
|
use pathfinder_geometry::stroke::LineCap;
|
||||||
use pathfinder_gl::{GLDevice, GLVersion};
|
use pathfinder_gl::{GLDevice, GLVersion};
|
||||||
|
@ -59,6 +59,7 @@ pub const PF_RENDERER_OPTIONS_FLAGS_HAS_BACKGROUND_COLOR: u8 = 0x1;
|
||||||
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 PFFillStyleRef = *mut FillStyle;
|
||||||
pub type PFLineCap = u8;
|
pub type PFLineCap = u8;
|
||||||
pub type PFLineJoin = u8;
|
pub type PFLineJoin = u8;
|
||||||
pub type PFArcDirection = u8;
|
pub type PFArcDirection = u8;
|
||||||
|
@ -95,6 +96,13 @@ pub struct PFColorF {
|
||||||
pub b: f32,
|
pub b: f32,
|
||||||
pub a: f32,
|
pub a: f32,
|
||||||
}
|
}
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct PFColorU {
|
||||||
|
pub r: u8,
|
||||||
|
pub g: u8,
|
||||||
|
pub b: u8,
|
||||||
|
pub a: u8,
|
||||||
|
}
|
||||||
|
|
||||||
// `gl`
|
// `gl`
|
||||||
pub type PFGLDeviceRef = *mut GLDevice;
|
pub type PFGLDeviceRef = *mut GLDevice;
|
||||||
|
@ -240,6 +248,17 @@ pub unsafe extern "C" fn PFCanvasSetLineDashOffset(canvas: PFCanvasRef, new_offs
|
||||||
(*canvas).set_line_dash_offset(new_offset)
|
(*canvas).set_line_dash_offset(new_offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn PFCanvasSetFillStyle(canvas: PFCanvasRef, fill_style: PFFillStyleRef) {
|
||||||
|
(*canvas).set_fill_style(*fill_style)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn PFCanvasSetStrokeStyle(canvas: PFCanvasRef,
|
||||||
|
stroke_style: PFFillStyleRef) {
|
||||||
|
(*canvas).set_stroke_style(*stroke_style)
|
||||||
|
}
|
||||||
|
|
||||||
/// 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) {
|
||||||
|
@ -331,6 +350,16 @@ pub unsafe extern "C" fn PFPathClosePath(path: PFPathRef) {
|
||||||
(*path).close_path()
|
(*path).close_path()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn PFFillStyleCreateColor(color: *const PFColorU) -> PFFillStyleRef {
|
||||||
|
Box::into_raw(Box::new(FillStyle::Color((*color).to_rust())))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn PFFillStyleDestroy(fill_style: PFFillStyleRef) {
|
||||||
|
drop(Box::from_raw(fill_style))
|
||||||
|
}
|
||||||
|
|
||||||
// `gl`
|
// `gl`
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -452,6 +481,13 @@ impl PFColorF {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PFColorU {
|
||||||
|
#[inline]
|
||||||
|
pub fn to_rust(&self) -> ColorU {
|
||||||
|
ColorU { r: self.r, g: self.g, b: self.b, a: self.a }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl PFRectF {
|
impl PFRectF {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn to_rust(&self) -> RectF {
|
pub fn to_rust(&self) -> RectF {
|
||||||
|
|
Loading…
Reference in New Issue