From 6dcb00864967ae10fefa4cd48829c263c1db6edf Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Fri, 1 May 2015 07:52:26 -0700 Subject: [PATCH] More work on Cairo bindings --- lime/graphics/CairoRenderContext.hx | 50 ++------------- lime/graphics/RenderContext.hx | 2 +- lime/graphics/cairo/Cairo.hx | 66 ++++++++++++++++++++ lime/graphics/cairo/CairoFormat.hx | 14 +++++ lime/graphics/cairo/CairoSurface.hx | 14 +++++ project/src/graphics/cairo/CairoBindings.cpp | 8 +++ 6 files changed, 109 insertions(+), 45 deletions(-) create mode 100644 lime/graphics/cairo/Cairo.hx create mode 100644 lime/graphics/cairo/CairoFormat.hx create mode 100644 lime/graphics/cairo/CairoSurface.hx diff --git a/lime/graphics/CairoRenderContext.hx b/lime/graphics/CairoRenderContext.hx index 85a1222d4..9c5437ed5 100644 --- a/lime/graphics/CairoRenderContext.hx +++ b/lime/graphics/CairoRenderContext.hx @@ -1,7 +1,7 @@ -package lime.graphics; #if (cpp || neko || nodejs) +package lime.graphics; -import lime.system.System; +import lime.graphics.cairo.Cairo; class CairoRenderContext { @@ -25,56 +25,18 @@ class CairoRenderContext { - private function get_version ():Int { + private inline function get_version ():Int { - return lime_cairo_version (); + return Cairo.version; } private function get_versionString ():String { - return lime_cairo_version_string (); + return Cairo.versionString; } - - - // Native Methods - - - - - private var lime_cairo_version = System.load ("lime", "lime_cairo_version", 0); - private var lime_cairo_version_string = System.load ("lime", "lime_cairo_version_string", 0); - - -} - - -#else - - -class CairoRenderContext { - - - public var version (get, null):Int; - public var versionString (get, null):String; - - - public function new () { - - - - } - - - private function get_version ():Int { return 0; } - private function get_versionString ():String { return ""; } - - -} - - -#end \ No newline at end of file +} \ No newline at end of file diff --git a/lime/graphics/RenderContext.hx b/lime/graphics/RenderContext.hx index 4d3d9bc9d..eb88b3d30 100644 --- a/lime/graphics/RenderContext.hx +++ b/lime/graphics/RenderContext.hx @@ -13,7 +13,7 @@ enum RenderContext { CANVAS (context:CanvasRenderContext); DOM (element:DOMRenderContext); FLASH (stage:FlashRenderContext); - CAIRO (context:CairoRenderContext); + CAIRO (cairo:CairoRenderContext); CONSOLE (context:ConsoleRenderContext); CUSTOM (data:Dynamic); diff --git a/lime/graphics/cairo/Cairo.hx b/lime/graphics/cairo/Cairo.hx new file mode 100644 index 000000000..57028e42e --- /dev/null +++ b/lime/graphics/cairo/Cairo.hx @@ -0,0 +1,66 @@ +package lime.graphics.cairo; + + +import lime.system.System; + + +class Cairo { + + + public static var version (get, null):Int; + public static var versionString (get, null):String; + + + public static function imageSurfaceCreate (format:CairoFormat, width:Int, height:Int):CairoSurface { + + #if sys + return lime_cairo_image_surface_create (format, width, height); + #else + return null; + #end + + } + + + // Get & Set Methods + + + + + private static function get_version ():Int { + + #if sys + return lime_cairo_version (); + #else + return 0; + #end + + } + + + private static function get_versionString ():String { + + #if sys + return lime_cairo_version_string (); + #else + return ""; + #end + + } + + + + + // Native Methods + + + + + #if sys + private static var lime_cairo_image_surface_create = System.load ("lime", "lime_cairo_image_surface_create", 3); + private static var lime_cairo_version = System.load ("lime", "lime_cairo_version", 0); + private static var lime_cairo_version_string = System.load ("lime", "lime_cairo_version_string", 0); + #end + + +} \ No newline at end of file diff --git a/lime/graphics/cairo/CairoFormat.hx b/lime/graphics/cairo/CairoFormat.hx new file mode 100644 index 000000000..625fa352e --- /dev/null +++ b/lime/graphics/cairo/CairoFormat.hx @@ -0,0 +1,14 @@ +package lime.graphics.cairo; + + +@:enum abstract CairoFormat(Int) from Int to Int { + + public var INVALID = -1; + public var ARGB32 = 0; + public var RGB24 = 1; + public var A8 = 2; + public var A1 = 3; + public var RGB16_565 = 4; + public var RGB30 = 5; + +} \ No newline at end of file diff --git a/lime/graphics/cairo/CairoSurface.hx b/lime/graphics/cairo/CairoSurface.hx new file mode 100644 index 000000000..021ace13e --- /dev/null +++ b/lime/graphics/cairo/CairoSurface.hx @@ -0,0 +1,14 @@ +package lime.graphics.cairo; + + +abstract CairoSurface(Dynamic) { + + + public function new (handle) { + + this = handle; + + } + + +} \ No newline at end of file diff --git a/project/src/graphics/cairo/CairoBindings.cpp b/project/src/graphics/cairo/CairoBindings.cpp index 00a76647d..863d1e4cd 100644 --- a/project/src/graphics/cairo/CairoBindings.cpp +++ b/project/src/graphics/cairo/CairoBindings.cpp @@ -5,6 +5,13 @@ namespace lime { + value lime_cairo_image_surface_create (value format, value width, value height) { + + return alloc_float ((intptr_t)cairo_image_surface_create ((cairo_format_t)val_int (format), val_int (width), val_int (height))); + + } + + value lime_cairo_version () { return alloc_int (cairo_version ()); @@ -19,6 +26,7 @@ namespace lime { } + DEFINE_PRIM (lime_cairo_image_surface_create, 3); DEFINE_PRIM (lime_cairo_version, 0); DEFINE_PRIM (lime_cairo_version_string, 0);