nim owned seq helpers, fix nim unref

This commit is contained in:
Ryan Oldenburg 2021-08-26 13:06:29 -05:00
parent fc39e79a5b
commit 6ba0813007
4 changed files with 173 additions and 119 deletions

View file

@ -691,24 +691,6 @@ proc pixie_context_get_text_align*(context: Context): HorizontalAlignment {.rais
proc pixie_context_set_text_align*(context: Context, textAlign: HorizontalAlignment) {.raises: [], cdecl, exportc, dynlib.} =
context.textAlign = textAlign
proc pixie_context_line_dash_len*(context: Context): int {.raises: [], cdecl, exportc, dynlib.} =
context.lineDash.len
proc pixie_context_line_dash_add*(context: Context, v: float32) {.raises: [], cdecl, exportc, dynlib.} =
context.lineDash.add(v)
proc pixie_context_line_dash_get*(context: Context, i: int): float32 {.raises: [], cdecl, exportc, dynlib.} =
context.lineDash[i]
proc pixie_context_line_dash_set*(context: Context, i: int, v: float32) {.raises: [], cdecl, exportc, dynlib.} =
context.lineDash[i] = v
proc pixie_context_line_dash_remove*(context: Context, i: int) {.raises: [], cdecl, exportc, dynlib.} =
context.lineDash.delete(i)
proc pixie_context_line_dash_clear*(context: Context) {.raises: [], cdecl, exportc, dynlib.} =
context.lineDash.setLen(0)
proc pixie_context_save*(ctx: Context) {.raises: [], cdecl, exportc, dynlib.} =
try:
save(ctx)

View file

@ -96,92 +96,114 @@ type ColorStop* = object
type TextMetrics* = object
width*: float32
type SeqFloat32* = object
type SeqFloat32Obj* = object
reference: pointer
proc pixie_seq_float_32_unref*(x: SeqFloat32) {.importc: "pixie_seq_float_32_unref", cdecl.}
type SeqFloat32* = ref SeqFloat32Obj
proc `=destroy`(x: var SeqFloat32) =
proc pixie_seq_float_32_unref(x: SeqFloat32Obj) {.importc: "pixie_seq_float_32_unref", cdecl.}
proc `=destroy`(x: var SeqFloat32Obj) =
pixie_seq_float_32_unref(x)
type SeqSpan* = object
type SeqSpanObj* = object
reference: pointer
proc pixie_seq_span_unref*(x: SeqSpan) {.importc: "pixie_seq_span_unref", cdecl.}
type SeqSpan* = ref SeqSpanObj
proc `=destroy`(x: var SeqSpan) =
proc pixie_seq_span_unref(x: SeqSpanObj) {.importc: "pixie_seq_span_unref", cdecl.}
proc `=destroy`(x: var SeqSpanObj) =
pixie_seq_span_unref(x)
type Image* = object
type ImageObj* = object
reference: pointer
proc pixie_image_unref*(x: Image) {.importc: "pixie_image_unref", cdecl.}
type Image* = ref ImageObj
proc `=destroy`(x: var Image) =
proc pixie_image_unref(x: ImageObj) {.importc: "pixie_image_unref", cdecl.}
proc `=destroy`(x: var ImageObj) =
pixie_image_unref(x)
type Mask* = object
type MaskObj* = object
reference: pointer
proc pixie_mask_unref*(x: Mask) {.importc: "pixie_mask_unref", cdecl.}
type Mask* = ref MaskObj
proc `=destroy`(x: var Mask) =
proc pixie_mask_unref(x: MaskObj) {.importc: "pixie_mask_unref", cdecl.}
proc `=destroy`(x: var MaskObj) =
pixie_mask_unref(x)
type Paint* = object
type PaintObj* = object
reference: pointer
proc pixie_paint_unref*(x: Paint) {.importc: "pixie_paint_unref", cdecl.}
type Paint* = ref PaintObj
proc `=destroy`(x: var Paint) =
proc pixie_paint_unref(x: PaintObj) {.importc: "pixie_paint_unref", cdecl.}
proc `=destroy`(x: var PaintObj) =
pixie_paint_unref(x)
type Path* = object
type PathObj* = object
reference: pointer
proc pixie_path_unref*(x: Path) {.importc: "pixie_path_unref", cdecl.}
type Path* = ref PathObj
proc `=destroy`(x: var Path) =
proc pixie_path_unref(x: PathObj) {.importc: "pixie_path_unref", cdecl.}
proc `=destroy`(x: var PathObj) =
pixie_path_unref(x)
type Typeface* = object
type TypefaceObj* = object
reference: pointer
proc pixie_typeface_unref*(x: Typeface) {.importc: "pixie_typeface_unref", cdecl.}
type Typeface* = ref TypefaceObj
proc `=destroy`(x: var Typeface) =
proc pixie_typeface_unref(x: TypefaceObj) {.importc: "pixie_typeface_unref", cdecl.}
proc `=destroy`(x: var TypefaceObj) =
pixie_typeface_unref(x)
type Font* = object
type FontObj* = object
reference: pointer
proc pixie_font_unref*(x: Font) {.importc: "pixie_font_unref", cdecl.}
type Font* = ref FontObj
proc `=destroy`(x: var Font) =
proc pixie_font_unref(x: FontObj) {.importc: "pixie_font_unref", cdecl.}
proc `=destroy`(x: var FontObj) =
pixie_font_unref(x)
type Span* = object
type SpanObj* = object
reference: pointer
proc pixie_span_unref*(x: Span) {.importc: "pixie_span_unref", cdecl.}
type Span* = ref SpanObj
proc `=destroy`(x: var Span) =
proc pixie_span_unref(x: SpanObj) {.importc: "pixie_span_unref", cdecl.}
proc `=destroy`(x: var SpanObj) =
pixie_span_unref(x)
type Arrangement* = object
type ArrangementObj* = object
reference: pointer
proc pixie_arrangement_unref*(x: Arrangement) {.importc: "pixie_arrangement_unref", cdecl.}
type Arrangement* = ref ArrangementObj
proc `=destroy`(x: var Arrangement) =
proc pixie_arrangement_unref(x: ArrangementObj) {.importc: "pixie_arrangement_unref", cdecl.}
proc `=destroy`(x: var ArrangementObj) =
pixie_arrangement_unref(x)
type Context* = object
type ContextObj* = object
reference: pointer
proc pixie_context_unref*(x: Context) {.importc: "pixie_context_unref", cdecl.}
type Context* = ref ContextObj
proc `=destroy`(x: var Context) =
proc pixie_context_unref(x: ContextObj) {.importc: "pixie_context_unref", cdecl.}
proc `=destroy`(x: var ContextObj) =
pixie_context_unref(x)
proc pixie_check_error(): bool {.importc: "pixie_check_error", cdecl.}
@ -196,16 +218,34 @@ proc takeError*(): cstring {.inline.} =
proc pixie_seq_float_32_len(s: SeqFloat32): int {.importc: "pixie_seq_float_32_len", cdecl.}
proc len*(s: SeqFloat32): int =
pixie_seq_float_32_len(s)
proc pixie_seq_float_32_add(s: SeqFloat32, v: float32) {.importc: "pixie_seq_float_32_add", cdecl.}
proc add*(s: SeqFloat32, v: float32) =
pixie_seq_float_32_add(s, v)
proc pixie_seq_float_32_get(s: SeqFloat32, i: int): float32 {.importc: "pixie_seq_float_32_get", cdecl.}
proc `[]`*(s: SeqFloat32, i: int): float32 =
pixie_seq_float_32_get(s, i)
proc pixie_seq_float_32_set(s: SeqFloat32, i: int, v: float32) {.importc: "pixie_seq_float_32_set", cdecl.}
proc `[]=`*(s: SeqFloat32, i: int, v: float32) =
pixie_seq_float_32_set(s, i, v)
proc pixie_seq_float_32_remove(s: SeqFloat32, i: int) {.importc: "pixie_seq_float_32_remove", cdecl.}
proc remove*(s: SeqFloat32, i: int) =
pixie_seq_float_32_remove(s, i)
proc pixie_seq_float_32_clear(s: SeqFloat32) {.importc: "pixie_seq_float_32_clear", cdecl.}
proc clear*(s: SeqFloat32) =
pixie_seq_float_32_clear(s)
proc pixie_new_seq_float_32*(): SeqFloat32 {.importc: "pixie_new_seq_float_32", cdecl.}
proc newSeqFloat32*(): SeqFloat32 =
@ -213,16 +253,34 @@ proc newSeqFloat32*(): SeqFloat32 =
proc pixie_seq_span_len(s: SeqSpan): int {.importc: "pixie_seq_span_len", cdecl.}
proc len*(s: SeqSpan): int =
pixie_seq_span_len(s)
proc pixie_seq_span_add(s: SeqSpan, v: Span) {.importc: "pixie_seq_span_add", cdecl.}
proc add*(s: SeqSpan, v: Span) =
pixie_seq_span_add(s, v)
proc pixie_seq_span_get(s: SeqSpan, i: int): Span {.importc: "pixie_seq_span_get", cdecl.}
proc `[]`*(s: SeqSpan, i: int): Span =
pixie_seq_span_get(s, i)
proc pixie_seq_span_set(s: SeqSpan, i: int, v: Span) {.importc: "pixie_seq_span_set", cdecl.}
proc `[]=`*(s: SeqSpan, i: int, v: Span) =
pixie_seq_span_set(s, i, v)
proc pixie_seq_span_remove(s: SeqSpan, i: int) {.importc: "pixie_seq_span_remove", cdecl.}
proc remove*(s: SeqSpan, i: int) =
pixie_seq_span_remove(s, i)
proc pixie_seq_span_clear(s: SeqSpan) {.importc: "pixie_seq_span_clear", cdecl.}
proc clear*(s: SeqSpan) =
pixie_seq_span_clear(s)
proc pixie_new_seq_span*(): SeqSpan {.importc: "pixie_new_seq_span", cdecl.}
proc newSeqSpan*(): SeqSpan =
@ -649,30 +707,78 @@ proc pixie_paint_set_image_mat(paint: Paint, imageMat: Mat3) {.importc: "pixie_p
proc `imageMat=`*(paint: Paint, imageMat: Mat3) =
pixie_paint_set_image_mat(paint, imageMat)
type PaintGradientHandlePositions = object
paint: Paint
proc gradientHandlePositions*(paint: Paint): PaintGradientHandlePositions =
PaintGradientHandlePositions(paint: paint)
proc pixie_paint_gradient_handle_positions_len(s: Paint): int {.importc: "pixie_paint_gradient_handle_positions_len", cdecl.}
proc len*(s: PaintGradientHandlePositions): int =
pixie_paint_gradient_handle_positions_len(s.paint)
proc pixie_paint_gradient_handle_positions_add(s: Paint, v: Vec2) {.importc: "pixie_paint_gradient_handle_positions_add", cdecl.}
proc add*(s: PaintGradientHandlePositions, v: Vec2) =
pixie_paint_gradient_handle_positions_add(s.paint, v)
proc pixie_paint_gradient_handle_positions_get(s: Paint, i: int): Vec2 {.importc: "pixie_paint_gradient_handle_positions_get", cdecl.}
proc `[]`*(s: PaintGradientHandlePositions, i: int): Vec2 =
pixie_paint_gradient_handle_positions_get(s.paint, i)
proc pixie_paint_gradient_handle_positions_set(s: Paint, i: int, v: Vec2) {.importc: "pixie_paint_gradient_handle_positions_set", cdecl.}
proc `[]=`*(s: PaintGradientHandlePositions, i: int, v: Vec2) =
pixie_paint_gradient_handle_positions_set(s.paint, i, v)
proc pixie_paint_gradient_handle_positions_remove(s: Paint, i: int) {.importc: "pixie_paint_gradient_handle_positions_remove", cdecl.}
proc remove*(s: PaintGradientHandlePositions, i: int) =
pixie_paint_gradient_handle_positions_remove(s.paint, i)
proc pixie_paint_gradient_handle_positions_clear(s: Paint) {.importc: "pixie_paint_gradient_handle_positions_clear", cdecl.}
proc clear*(s: PaintGradientHandlePositions) =
pixie_paint_gradient_handle_positions_clear(s.paint)
type PaintGradientStops = object
paint: Paint
proc gradientStops*(paint: Paint): PaintGradientStops =
PaintGradientStops(paint: paint)
proc pixie_paint_gradient_stops_len(s: Paint): int {.importc: "pixie_paint_gradient_stops_len", cdecl.}
proc len*(s: PaintGradientStops): int =
pixie_paint_gradient_stops_len(s.paint)
proc pixie_paint_gradient_stops_add(s: Paint, v: ColorStop) {.importc: "pixie_paint_gradient_stops_add", cdecl.}
proc add*(s: PaintGradientStops, v: ColorStop) =
pixie_paint_gradient_stops_add(s.paint, v)
proc pixie_paint_gradient_stops_get(s: Paint, i: int): ColorStop {.importc: "pixie_paint_gradient_stops_get", cdecl.}
proc `[]`*(s: PaintGradientStops, i: int): ColorStop =
pixie_paint_gradient_stops_get(s.paint, i)
proc pixie_paint_gradient_stops_set(s: Paint, i: int, v: ColorStop) {.importc: "pixie_paint_gradient_stops_set", cdecl.}
proc `[]=`*(s: PaintGradientStops, i: int, v: ColorStop) =
pixie_paint_gradient_stops_set(s.paint, i, v)
proc pixie_paint_gradient_stops_remove(s: Paint, i: int) {.importc: "pixie_paint_gradient_stops_remove", cdecl.}
proc remove*(s: PaintGradientStops, i: int) =
pixie_paint_gradient_stops_remove(s.paint, i)
proc pixie_paint_gradient_stops_clear(s: Paint) {.importc: "pixie_paint_gradient_stops_clear", cdecl.}
proc clear*(s: PaintGradientStops) =
pixie_paint_gradient_stops_clear(s.paint)
proc pixie_paint_new_paint(paint: Paint): Paint {.importc: "pixie_paint_new_paint", cdecl.}
proc newPaint*(paint: Paint): Paint {.inline.} =
@ -860,18 +966,42 @@ proc pixie_font_set_line_height(font: Font, lineHeight: float32) {.importc: "pix
proc `lineHeight=`*(font: Font, lineHeight: float32) =
pixie_font_set_line_height(font, lineHeight)
type FontPaints = object
font: Font
proc paints*(font: Font): FontPaints =
FontPaints(font: font)
proc pixie_font_paints_len(s: Font): int {.importc: "pixie_font_paints_len", cdecl.}
proc len*(s: FontPaints): int =
pixie_font_paints_len(s.font)
proc pixie_font_paints_add(s: Font, v: Paint) {.importc: "pixie_font_paints_add", cdecl.}
proc add*(s: FontPaints, v: Paint) =
pixie_font_paints_add(s.font, v)
proc pixie_font_paints_get(s: Font, i: int): Paint {.importc: "pixie_font_paints_get", cdecl.}
proc `[]`*(s: FontPaints, i: int): Paint =
pixie_font_paints_get(s.font, i)
proc pixie_font_paints_set(s: Font, i: int, v: Paint) {.importc: "pixie_font_paints_set", cdecl.}
proc `[]=`*(s: FontPaints, i: int, v: Paint) =
pixie_font_paints_set(s.font, i, v)
proc pixie_font_paints_remove(s: Font, i: int) {.importc: "pixie_font_paints_remove", cdecl.}
proc remove*(s: FontPaints, i: int) =
pixie_font_paints_remove(s.font, i)
proc pixie_font_paints_clear(s: Font) {.importc: "pixie_font_paints_clear", cdecl.}
proc clear*(s: FontPaints) =
pixie_font_paints_clear(s.font)
proc pixie_font_get_text_case(font: Font): TextCase {.importc: "pixie_font_get_text_case", cdecl.}
proc textCase*(font: Font): TextCase {.inline.} =
@ -1067,18 +1197,6 @@ proc pixie_context_set_text_align(context: Context, textAlign: HorizontalAlignme
proc `textAlign=`*(context: Context, textAlign: HorizontalAlignment) =
pixie_context_set_text_align(context, textAlign)
proc pixie_context_line_dash_len(s: Context): int {.importc: "pixie_context_line_dash_len", cdecl.}
proc pixie_context_line_dash_add(s: Context, v: float32) {.importc: "pixie_context_line_dash_add", cdecl.}
proc pixie_context_line_dash_get(s: Context, i: int): float32 {.importc: "pixie_context_line_dash_get", cdecl.}
proc pixie_context_line_dash_set(s: Context, i: int, v: float32) {.importc: "pixie_context_line_dash_set", cdecl.}
proc pixie_context_line_dash_remove(s: Context, i: int) {.importc: "pixie_context_line_dash_remove", cdecl.}
proc pixie_context_line_dash_clear(s: Context) {.importc: "pixie_context_line_dash_clear", cdecl.}
proc pixie_context_save(ctx: Context) {.importc: "pixie_context_save", cdecl.}
proc save*(ctx: Context) {.inline.} =
@ -1403,4 +1521,3 @@ proc pixie_angle_to_miter_limit(angle: float32): float32 {.importc: "pixie_angle
proc angleToMiterLimit*(angle: float32): float32 {.inline.} =
result = pixie_angle_to_miter_limit(angle)

View file

@ -607,7 +607,7 @@ class Paint(Structure):
def image_mat(self, image_mat):
dll.pixie_paint_set_image_mat(self, image_mat)
class GradientHandlePositions:
class PaintGradientHandlePositions:
def __init__(self, paint):
self.paint = paint
@ -631,10 +631,10 @@ class Paint(Structure):
dll.pixie_paint_gradient_handle_positions_clear(self.paint)
@property
def gradient_handle_positions(self):
return self.GradientHandlePositions(self)
def paint_gradient_handle_positions(self):
return self.PaintGradientHandlePositions(self)
class GradientStops:
class PaintGradientStops:
def __init__(self, paint):
self.paint = paint
@ -658,8 +658,8 @@ class Paint(Structure):
dll.pixie_paint_gradient_stops_clear(self.paint)
@property
def gradient_stops(self):
return self.GradientStops(self)
def paint_gradient_stops(self):
return self.PaintGradientStops(self)
def new_paint(self):
result = dll.pixie_paint_new_paint(self)
@ -834,7 +834,7 @@ class Font(Structure):
def line_height(self, line_height):
dll.pixie_font_set_line_height(self, line_height)
class Paints:
class FontPaints:
def __init__(self, font):
self.font = font
@ -858,8 +858,8 @@ class Font(Structure):
dll.pixie_font_paints_clear(self.font)
@property
def paints(self):
return self.Paints(self)
def font_paints(self):
return self.FontPaints(self)
@property
def text_case(self):
@ -1053,33 +1053,6 @@ class Context(Structure):
def text_align(self, text_align):
dll.pixie_context_set_text_align(self, text_align)
class LineDash:
def __init__(self, context):
self.context = context
def __len__(self):
return dll.pixie_context_line_dash_len(self.context)
def __getitem__(self, index):
return dll.pixie_context_line_dash_get(self.context, index)
def __setitem__(self, index, value):
dll.pixie_context_line_dash_set(self.context, index, value)
def __delitem__(self, index):
dll.pixie_context_line_dash_remove(self.context, index)
def append(self, value):
dll.pixie_context_line_dash_add(self.context, value)
def clear(self):
dll.pixie_context_line_dash_clear(self.context)
@property
def line_dash(self):
return self.LineDash(self)
def save(self):
dll.pixie_context_save(self)
if check_error():
@ -1886,24 +1859,6 @@ dll.pixie_context_get_text_align.restype = HorizontalAlignment
dll.pixie_context_set_text_align.argtypes = [Context, HorizontalAlignment]
dll.pixie_context_set_text_align.restype = None
dll.pixie_context_line_dash_len.argtypes = [Context]
dll.pixie_context_line_dash_len.restype = c_longlong
dll.pixie_context_line_dash_get.argtypes = [Context, c_longlong]
dll.pixie_context_line_dash_get.restype = c_float
dll.pixie_context_line_dash_set.argtypes = [Context, c_longlong, c_float]
dll.pixie_context_line_dash_set.restype = None
dll.pixie_context_line_dash_remove.argtypes = [Context, c_longlong]
dll.pixie_context_line_dash_remove.restype = None
dll.pixie_context_line_dash_add.argtypes = [Context, c_float]
dll.pixie_context_line_dash_add.restype = None
dll.pixie_context_line_dash_clear.argtypes = [Context]
dll.pixie_context_line_dash_clear.restype = None
dll.pixie_context_save.argtypes = [Context]
dll.pixie_context_save.restype = None

View file

@ -18,7 +18,7 @@ type
font*: string ## File path to a .ttf or .otf file.
fontSize*: float32
textAlign*: HorizontalAlignment
lineDash*: seq[float32]
lineDash: seq[float32]
path: Path
mat: Mat3
mask: Mask