[swift-users] Need Help with C-to-Swift (finally)

Harlan Haskins harlan at harlanhaskins.com
Fri Dec 11 14:46:21 CST 2015


It’s deceptively simple!

Using just the functions exposed by cairo will be a piece of cake. The code will look almost exactly the same and work just as fast/well.

However, bridging the C has some nasty effects to the types of your Swift code. For example, surface is of type COpaquePointer which is really unhelpful.

It’d probably be a great exercise for you and the community to make nice, Swifty wrappers around Cairo to allow people to write beautiful, Cairo-using code.

Like this, except with an actual understanding of libcairo: https://gist.github.com/6b96a1e0ec1ef838b5ea

Best,
Harlan


> On Dec 11, 2015, at 3:31 PM, Gage Morgan <gagemorgan at outlook.com> wrote:
> 
> Sir, you've just made my day. So it's really that simple?
> 
> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
> From: harlan at harlanhaskins.com <mailto:harlan at harlanhaskins.com>
> Date: Fri, 11 Dec 2015 15:24:48 -0500
> CC: jason.dusek at gmail.com <mailto:jason.dusek at gmail.com>; swift-users at swift.org <mailto:swift-users at swift.org>
> To: gagemorgan at outlook.com <mailto:gagemorgan at outlook.com>
> 
> So, it’s a very simple almost one-to-one translation of that C code block to Swift.
> You have to make sure to import CCairo at the beginning of the file, and change the variable declarations to use let instead of the C declaration.
> 
> This works for me, as is.
> 
> import CCairo
> 
> let surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 240, 80)
> let cr = cairo_create (surface);
> 
> cairo_select_font_face(cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD)
> cairo_set_font_size(cr, 32.0)
> cairo_set_source_rgb(cr, 0.0, 0.0, 1.0)
> cairo_move_to(cr, 10.0, 50.0)
> cairo_show_text(cr, "Hello, world")
> 
> cairo_destroy(cr)
> cairo_surface_write_to_png(surface, "hello.png")
> cairo_surface_destroy(surface)
> 
> On Dec 11, 2015, at 3:21 PM, Gage Morgan <gagemorgan at outlook.com <mailto:gagemorgan at outlook.com>> wrote:
> 
> Do so here in a few. Want a bug report for that?
> 
> Sent from Outlook Mobile <https://aka.ms/qtex0l>
> 
> 
> 
> On Fri, Dec 11, 2015 at 12:08 PM -0800, "Harlan Haskins" <harlan at harlanhaskins.com <mailto:harlan at harlanhaskins.com>> wrote:
> 
> Mind sending your CCairo modulemap?
> 
> I’d love to help you get this translated to Swift.
> 
> On Dec 11, 2015, at 2:44 PM, Gage Morgan via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
> 
> I want to call PNG surfaces from Swift, as well as use cairo_line_to() and cairo_move_to() in Swift. Thing is, I need an example of cairo used in Swift so I can apply it to the rest of cairo. 
> 
> My goal is to generate an executable that outputs *.png images using swift. 
> 
> Thanks for the support,
> --MGage--
> 
> Sent from Outlook Mobile <https://aka.ms/qtex0l>
> 
> 
> 
> On Thu, Dec 10, 2015 at 10:40 PM -0800, "Jason Dusek" <jason.dusek at gmail.com <mailto:jason.dusek at gmail.com>> wrote:
> 
> When you say, output to Swift, do you mean, call it from Swift? Return the PNG or surface to Swift?
> 
> On Thu, 10 Dec 2015 at 22:39 Gage Morgan via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
> So, if I had this code written in C:
> 
> int
> main (int argc, char *argv[])
> {
>         cairo_surface_t *surface =
>             cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 240, 80);
>         cairo_t *cr =
>             cairo_create (surface);
> 
>         cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
>         cairo_set_font_size (cr, 32.0);
>         cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
>         cairo_move_to (cr, 10.0, 50.0);
>         cairo_show_text (cr, "Hello, world");
> 
>         cairo_destroy (cr);
>         cairo_surface_write_to_png (surface, "hello.png");
>         cairo_surface_destroy (surface);
>         return 0;
> }
> 
> how would I output to Swift? If I can get one or two examples, I'll be closer to finished with using Cairo in Swift.
> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org <mailto:swift-users at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org <mailto:swift-users at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20151211/98fa2a6d/attachment.html>


More information about the swift-users mailing list