Need Help with C-to-Swift (finally)


(Gage Morgan) #1

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.


(Jason Dusek) #2

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@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@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


(Gage Morgan) #3

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--

When you say, output to Swift, do you mean, call it from Swift? Return the
PNG or surface to Swift?

···

Sent from Outlook Mobile
On Thu, Dec 10, 2015 at 10:40 PM -0800, "Jason Dusek" <jason.dusek@gmail.com> wrote:

On Thu, 10 Dec 2015 at 22:39 Gage Morgan via swift-users < swift-users@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@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


(Harlan Haskins) #4

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@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@gmail.com <mailto:jason.dusek@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@swift.org <mailto:swift-users@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@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


(Gage Morgan) #5

Do so here in a few. Want a bug report for that?

Mind sending your CCairo modulemap?

I’d love to help you get this translated to Swift.

···

Sent from Outlook Mobile
On Fri, Dec 11, 2015 at 12:08 PM -0800, "Harlan Haskins" <harlan@harlanhaskins.com> wrote:

On Dec 11, 2015, at 2:44 PM, Gage Morgan via swift-users <swift-users@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@gmail.com <mailto:jason.dusek@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@swift.org <mailto:swift-users@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@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


(Farhan Ahmed) #6

That is awesome!

Best,
Farhan


(Harlan Haskins) #7

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@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@harlanhaskins.com <mailto:harlan@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@swift.org <mailto:swift-users@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@gmail.com <mailto:jason.dusek@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@swift.org <mailto:swift-users@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@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users


(Gage Morgan) #8

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@harlanhaskins.com
Date: Fri, 11 Dec 2015 15:24:48 -0500
CC: jason.dusek@gmail.com; swift-users@swift.org
To: gagemorgan@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@outlook.com> wrote:

Do so here in a few. Want a bug report for that?

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 12:08 PM -0800, "Harlan Haskins" <harlan@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@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

On Thu, Dec 10, 2015 at 10:40 PM -0800, "Jason Dusek" <jason.dusek@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@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@swift.org

https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________

swift-users mailing list

swift-users@swift.org

https://lists.swift.org/mailman/listinfo/swift-users


(Harlan Haskins) #9

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@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@harlanhaskins.com <mailto:harlan@harlanhaskins.com>
Date: Fri, 11 Dec 2015 15:24:48 -0500
CC: jason.dusek@gmail.com <mailto:jason.dusek@gmail.com>; swift-users@swift.org <mailto:swift-users@swift.org>
To: gagemorgan@outlook.com <mailto:gagemorgan@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@outlook.com <mailto:gagemorgan@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@harlanhaskins.com <mailto:harlan@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@swift.org <mailto:swift-users@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@gmail.com <mailto:jason.dusek@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@swift.org <mailto:swift-users@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@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________
swift-users mailing list
swift-users@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users


(Gage Morgan) #10

Could you put some comments explaining what you did in that code? I wouldn't mind learning to write some wrappers...it's inevitable in the end anyways.

···

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com
Date: Fri, 11 Dec 2015 15:46:21 -0500
CC: jason.dusek@gmail.com; swift-users@swift.org
To: gagemorgan@outlook.com

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@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@harlanhaskins.com
Date: Fri, 11 Dec 2015 15:24:48 -0500
CC: jason.dusek@gmail.com; swift-users@swift.org
To: gagemorgan@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@outlook.com> wrote:Do so here in a few. Want a bug report for that?

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 12:08 PM -0800, "Harlan Haskins" <harlan@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@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

On Thu, Dec 10, 2015 at 10:40 PM -0800, "Jason Dusek" <jason.dusek@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@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@swift.org
https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


(Kwame Bryan) #11

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame


(Gage Morgan) #12

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

···

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan" <kwame.bryan@gmail.com> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame


(Gage Morgan) #13

I went and looked at it, and even now it looks like I want to take every function I've used in Cairo and translate it to Swift. Swift is such a...simple language compared to everything else. That being said, as a result of the specs, it is also much more verbose in terms of writing the code. Compared to other languages, it is written out instead of shoved onto a few lines.
Is there a way to import modules into other modules? Because it looks like a weekend project that will eventually get posted by myself at http://github.com/Christoffen-Corporation.

···

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org> wrote:

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan" <kwame.bryan@gmail.com> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame


(Gage Morgan) #14

Harlan,
I read on cairographics.org about bindings awhile back. I think they want cairo, not surface, so we would have something like:
let cairo = Surface(format: CAIRO_FORMAT_ARGB32, width: 240, height: 80)cairo.setFontFace("serif", weight: CAIRO_FONT_WEIGHT_BOLD)cairo.setFontSize(32.0)cairo.setSourceRGB(0.0, g: 0.0, b: 1.0)cairo.moveTo(x: 10, y: 50)cairo.showText("Hello, World!")cairo.writeToPNG("hello.png")
Would this work the same as before without "surface" but instead "cairo"?

···

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 2:00 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org> wrote:

I went and looked at it, and even now it looks like I want to take every function I've used in Cairo and translate it to Swift. Swift is such a...simple language compared to everything else. That being said, as a result of the specs, it is also much more verbose in terms of writing the code. Compared to other languages, it is written out instead of shoved onto a few lines.
Is there a way to import modules into other modules? Because it looks like a weekend project that will eventually get posted by myself at http://github.com/Christoffen-Corporation.

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org> wrote:

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan" <kwame.bryan@gmail.com> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame


(Jack Lawrence) #15

For getter-setter pairs like `setLineWidth`, you might consider turning them into properties:

cairo.setLineWidth(0.1) // old
cairo.lineWidth = 0.1 // new

···

On Dec 11, 2015, at 4:22 PM, Gage Morgan via swift-users <swift-users@swift.org> wrote:

Harlan,

The answer is yes. I even managed to get a couple you didn't list on my own:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
cairo.scale(10.0, y: 10.0)
cairo.moveTo(29.0, y: 14.7)
cairo.lineTo(37.6, y: 13.0)
cairo.moveTo(37.6, y: 13.0)
cairo.lineTo(30.4, y: 22.2)
cairo.moveTo(30.4, y: 22.2)
cairo.lineTo(29.0, y: 14.7)
cairo.setLineWidth(0.1)
cairo.stroke()
cairo.surfaceWriteToPNG("boobs.png")

Swift is both really neat and really frustrating when learning it.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com <mailto:harlan@harlanhaskins.com>
Date: Fri, 11 Dec 2015 17:21:38 -0500
CC: kwame.bryan@gmail.com <mailto:kwame.bryan@gmail.com>; swift-users@swift.org <mailto:swift-users@swift.org>
To: gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>

Gage,

Sorry, I just got back from class.

I’ll respond in line!

On Dec 11, 2015, at 5:09 PM, Gage Morgan <gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>> wrote:

Harlan,

I read on cairographics.org <http://cairographics.org/> about bindings awhile back. I think they want cairo, not surface, so we would have something like:

let cairo = Surface(format: CAIRO_FORMAT_ARGB32, width: 240, height: 80)
cairo.setFontFace("serif", weight: CAIRO_FONT_WEIGHT_BOLD)
cairo.setFontSize(32.0)
cairo.setSourceRGB(0.0, g: 0.0, b: 1.0)
cairo.moveTo(x: 10, y: 50)
cairo.showText("Hello, World!")
cairo.writeToPNG("hello.png")

Would this work the same as before without "surface" but instead "cairo”?

Absolutely! That’s just a variable name — it could be called ‘puppies’, though that’s not very readable.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

On Fri, Dec 11, 2015 at 2:00 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

I went and looked at it, and even now it looks like I want to take every function I've used in Cairo and translate it to Swift. Swift is such a...simple language compared to everything else. That being said, as a result of the specs, it is also much more verbose in terms of writing the code. Compared to other languages, it is written out instead of shoved onto a few lines.

Is there a way to import modules into other modules? Because it looks like a weekend project that will eventually get posted by myself at http://github.com/Christoffen-Corporation.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I’d recommend having a look at the Swift package manager example again — https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

There’s an example of using those modules together.

On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I’ll go ahead and comment it, but I think it’s simplistic enough that it should be readable with a grasp of some Swift concepts. Perhaps it’s a good idea to look through The Swift Programming Language to figure out some of the constructs I used — they’re fairly basic constructs.

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan"<kwame.bryan@gmail.com <mailto:kwame.bryan@gmail.com>> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame

<Mail Attachment.txt><Mail Attachment.txt>

_______________________________________________
swift-users mailing list
swift-users@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users


(Harlan Haskins) #16

Gage,

Sorry, I just got back from class.

I’ll respond in line!

Harlan,

I read on cairographics.org <http://cairographics.org/> about bindings awhile back. I think they want cairo, not surface, so we would have something like:

let cairo = Surface(format: CAIRO_FORMAT_ARGB32, width: 240, height: 80)
cairo.setFontFace("serif", weight: CAIRO_FONT_WEIGHT_BOLD)
cairo.setFontSize(32.0)
cairo.setSourceRGB(0.0, g: 0.0, b: 1.0)
cairo.moveTo(x: 10, y: 50)
cairo.showText("Hello, World!")
cairo.writeToPNG("hello.png")

Would this work the same as before without "surface" but instead "cairo”?

Absolutely! That’s just a variable name — it could be called ‘puppies’, though that’s not very readable.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I went and looked at it, and even now it looks like I want to take every function I've used in Cairo and translate it to Swift. Swift is such a...simple language compared to everything else. That being said, as a result of the specs, it is also much more verbose in terms of writing the code. Compared to other languages, it is written out instead of shoved onto a few lines.

Is there a way to import modules into other modules? Because it looks like a weekend project that will eventually get posted by myself at http://github.com/Christoffen-Corporation.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I’d recommend having a look at the Swift package manager example again — https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

There’s an example of using those modules together.

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I’ll go ahead and comment it, but I think it’s simplistic enough that it should be readable with a grasp of some Swift concepts. Perhaps it’s a good idea to look through The Swift Programming Language to figure out some of the constructs I used — they’re fairly basic constructs.

···

On Dec 11, 2015, at 5:09 PM, Gage Morgan <gagemorgan@outlook.com> wrote:
On Fri, Dec 11, 2015 at 2:00 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan" <kwame.bryan@gmail.com <mailto:kwame.bryan@gmail.com>> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame

<Mail Attachment.txt><Mail Attachment.txt>


(Jordan Rose) #17

If you're using multiple modules, then you'll need to define which parts of your API are intended to be used from outside the module. That means using the 'public' keyword. Swift takes publishing API seriously, so 'public' is never* inferred.

Jordan

* technically "almost never"

···

On Dec 11, 2015, at 18:16 , Gage Morgan via swift-users <swift-users@swift.org> wrote:

Here's what I'm getting:

/home/mgage/swift-cairo-bindings/test/main.swift:4:15: error: module 'Cairo' has no member named 'Surface'
let surface = Cairo.Surface(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
              ^~~~~ ~~~~~~~
<unknown>:0: error: build had 1 command failures

So what I'm trying to do is to put all wrappings in a separate module named Cairo. Then, I want to use those methods outside of the module named Cairo. I renamed the class to Surface and fixed all references, but for some reason it keeps saying something about Surface not present. I need to look into whether a git repo may be needed.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com <mailto:harlan@harlanhaskins.com>
Date: Fri, 11 Dec 2015 20:31:20 -0500
CC: jackl@apple.com <mailto:jackl@apple.com>; swift-users@swift.org <mailto:swift-users@swift.org>
To: gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>

Nope, but you’ll need a way to specify the class inside the module (the fully-qualified type name)

Cairo.Cairo should work fine.

On Dec 11, 2015, at 8:14 PM, Gage Morgan <gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>> wrote:

The module is Cairo. Do I need to change something (I'm assuming by struct you mean the name of the class containing wrappings). The class is named Cairo as well. Could renaming the module to ModCairo fix this?

Sent from Outlook Mobile <https://aka.ms/qtex0l>

On Fri, Dec 11, 2015 at 5:11 PM -0800, "Harlan Haskins" <harlan@harlanhaskins.com <mailto:harlan@harlanhaskins.com>> wrote:

Is your struct named Cairo or Surface?

If Cairo is the module name, you're trying to instantiate the module.

- Harlan

On Dec 11, 2015, at 7:55 PM, Gage Morgan <gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>> wrote:

How would you use things like cairo.moveTo() outside of the wrapping file? I've gone as far as writing a module named "Cairo," taking the methods as mentioned above out, and moving them to their own directory "tests." I have added "Cairo" as a dependency for "tests," but there appears to be something wrong when I try to call:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)

Why can I not call Cairo()? The error:

Compiling Swift Module 'test' (1 sources)
/home/mgage/swift-cairo-bindings/test/main.swift:4:18: error: cannot call value of non-function type 'module<Cairo>'
let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
            ~~~~~^
<unknown>:0: error: build had 1 command failures
swift-build: exit(1): ["/home/mgage/Downloads/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/bin/swift-build-tool", "-f", "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]

I don't know whether or not I want to translate methods into straight-up properties yet.

Thanks, support here has been great so far. Cheers!
--MGage--

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com <mailto:harlan@harlanhaskins.com>
Date: Fri, 11 Dec 2015 19:35:46 -0500
CC: gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>; swift-users@swift.org <mailto:swift-users@swift.org>
To: jackl@apple.com <mailto:jackl@apple.com>

I considered that but couldn't find a cairo_get_font_scale function quickly to complement the setter

But yes, a full wrapper would transparently handle getting and setting.

- Harlan

On Dec 11, 2015, at 7:28 PM, Jack Lawrence <jackl@apple.com <mailto:jackl@apple.com>> wrote:

For getter-setter pairs like `setLineWidth`, you might consider turning them into properties:

cairo.setLineWidth(0.1) // old
cairo.lineWidth = 0.1 // new

On Dec 11, 2015, at 4:22 PM, Gage Morgan via swift-users <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

Harlan,

The answer is yes. I even managed to get a couple you didn't list on my own:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
cairo.scale(10.0, y: 10.0)
cairo.moveTo(29.0, y: 14.7)
cairo.lineTo(37.6, y: 13.0)
cairo.moveTo(37.6, y: 13.0)
cairo.lineTo(30.4, y: 22.2)
cairo.moveTo(30.4, y: 22.2)
cairo.lineTo(29.0, y: 14.7)
cairo.setLineWidth(0.1)
cairo.stroke()
cairo.surfaceWriteToPNG("boobs.png")

Swift is both really neat and really frustrating when learning it.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com <mailto:harlan@harlanhaskins.com>
Date: Fri, 11 Dec 2015 17:21:38 -0500
CC: kwame.bryan@gmail.com <mailto:kwame.bryan@gmail.com>; swift-users@swift.org <mailto:swift-users@swift.org>
To: gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>

Gage,

Sorry, I just got back from class.

I’ll respond in line!

On Dec 11, 2015, at 5:09 PM, Gage Morgan <gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>> wrote:

Harlan,

I read on cairographics.org <http://cairographics.org/> about bindings awhile back. I think they want cairo, not surface, so we would have something like:

let cairo = Surface(format: CAIRO_FORMAT_ARGB32, width: 240, height: 80)
cairo.setFontFace("serif", weight: CAIRO_FONT_WEIGHT_BOLD)
cairo.setFontSize(32.0)
cairo.setSourceRGB(0.0, g: 0.0, b: 1.0)
cairo.moveTo(x: 10, y: 50)
cairo.showText("Hello, World!")
cairo.writeToPNG("hello.png")

Would this work the same as before without "surface" but instead "cairo”?

Absolutely! That’s just a variable name — it could be called ‘puppies’, though that’s not very readable.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

On Fri, Dec 11, 2015 at 2:00 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

I went and looked at it, and even now it looks like I want to take every function I've used in Cairo and translate it to Swift. Swift is such a...simple language compared to everything else. That being said, as a result of the specs, it is also much more verbose in terms of writing the code. Compared to other languages, it is written out instead of shoved onto a few lines.

Is there a way to import modules into other modules? Because it looks like a weekend project that will eventually get posted by myself at http://github.com/Christoffen-Corporation.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I’d recommend having a look at the Swift package manager example again — https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

There’s an example of using those modules together.

On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I’ll go ahead and comment it, but I think it’s simplistic enough that it should be readable with a grasp of some Swift concepts. Perhaps it’s a good idea to look through The Swift Programming Language to figure out some of the constructs I used — they’re fairly basic constructs.

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan"<kwame.bryan@gmail.com <mailto:kwame.bryan@gmail.com>> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame

<Mail Attachment.txt><Mail Attachment.txt>

_______________________________________________
swift-users mailing list
swift-users@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________
swift-users mailing list
swift-users@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users


(Jack Lawrence) #18

Did you make the class and its methods public?

Jack

···

On Dec 11, 2015, at 6:16 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

Here's what I'm getting:

/home/mgage/swift-cairo-bindings/test/main.swift:4:15: error: module 'Cairo' has no member named 'Surface'
let surface = Cairo.Surface(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
              ^~~~~ ~~~~~~~
<unknown>:0: error: build had 1 command failures

So what I'm trying to do is to put all wrappings in a separate module named Cairo. Then, I want to use those methods outside of the module named Cairo. I renamed the class to Surface and fixed all references, but for some reason it keeps saying something about Surface not present. I need to look into whether a git repo may be needed.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com
Date: Fri, 11 Dec 2015 20:31:20 -0500
CC: jackl@apple.com; swift-users@swift.org
To: gagemorgan@outlook.com

Nope, but you’ll need a way to specify the class inside the module (the fully-qualified type name)

Cairo.Cairo should work fine.

On Dec 11, 2015, at 8:14 PM, Gage Morgan <gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>> wrote:

The module is Cairo. Do I need to change something (I'm assuming by struct you mean the name of the class containing wrappings). The class is named Cairo as well. Could renaming the module to ModCairo fix this?

Sent from Outlook Mobile <https://aka.ms/qtex0l>

On Fri, Dec 11, 2015 at 5:11 PM -0800, "Harlan Haskins" <harlan@harlanhaskins.com <mailto:harlan@harlanhaskins.com>> wrote:

Is your struct named Cairo or Surface?

If Cairo is the module name, you're trying to instantiate the module.

- Harlan

On Dec 11, 2015, at 7:55 PM, Gage Morgan <gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>> wrote:

How would you use things like cairo.moveTo() outside of the wrapping file? I've gone as far as writing a module named "Cairo," taking the methods as mentioned above out, and moving them to their own directory "tests." I have added "Cairo" as a dependency for "tests," but there appears to be something wrong when I try to call:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)

Why can I not call Cairo()? The error:

Compiling Swift Module 'test' (1 sources)
/home/mgage/swift-cairo-bindings/test/main.swift:4:18: error: cannot call value of non-function type 'module<Cairo>'
let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
            ~~~~~^
<unknown>:0: error: build had 1 command failures
swift-build: exit(1): ["/home/mgage/Downloads/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/bin/swift-build-tool", "-f", "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]

I don't know whether or not I want to translate methods into straight-up properties yet.

Thanks, support here has been great so far. Cheers!
--MGage--

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com <mailto:harlan@harlanhaskins.com>
Date: Fri, 11 Dec 2015 19:35:46 -0500
CC: gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>; swift-users@swift.org <mailto:swift-users@swift.org>
To: jackl@apple.com <mailto:jackl@apple.com>

I considered that but couldn't find a cairo_get_font_scale function quickly to complement the setter

But yes, a full wrapper would transparently handle getting and setting.

- Harlan

On Dec 11, 2015, at 7:28 PM, Jack Lawrence <jackl@apple.com <mailto:jackl@apple.com>> wrote:

For getter-setter pairs like `setLineWidth`, you might consider turning them into properties:

cairo.setLineWidth(0.1) // old
cairo.lineWidth = 0.1 // new

On Dec 11, 2015, at 4:22 PM, Gage Morgan via swift-users <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

Harlan,

The answer is yes. I even managed to get a couple you didn't list on my own:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
cairo.scale(10.0, y: 10.0)
cairo.moveTo(29.0, y: 14.7)
cairo.lineTo(37.6, y: 13.0)
cairo.moveTo(37.6, y: 13.0)
cairo.lineTo(30.4, y: 22.2)
cairo.moveTo(30.4, y: 22.2)
cairo.lineTo(29.0, y: 14.7)
cairo.setLineWidth(0.1)
cairo.stroke()
cairo.surfaceWriteToPNG("boobs.png")

Swift is both really neat and really frustrating when learning it.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com <mailto:harlan@harlanhaskins.com>
Date: Fri, 11 Dec 2015 17:21:38 -0500
CC: kwame.bryan@gmail.com <mailto:kwame.bryan@gmail.com>; swift-users@swift.org <mailto:swift-users@swift.org>
To: gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>

Gage,

Sorry, I just got back from class.

I’ll respond in line!

On Dec 11, 2015, at 5:09 PM, Gage Morgan <gagemorgan@outlook.com <mailto:gagemorgan@outlook.com>> wrote:

Harlan,

I read on cairographics.org <http://cairographics.org/> about bindings awhile back. I think they want cairo, not surface, so we would have something like:

let cairo = Surface(format: CAIRO_FORMAT_ARGB32, width: 240, height: 80)
cairo.setFontFace("serif", weight: CAIRO_FONT_WEIGHT_BOLD)
cairo.setFontSize(32.0)
cairo.setSourceRGB(0.0, g: 0.0, b: 1.0)
cairo.moveTo(x: 10, y: 50)
cairo.showText("Hello, World!")
cairo.writeToPNG("hello.png")

Would this work the same as before without "surface" but instead "cairo”?

Absolutely! That’s just a variable name — it could be called ‘puppies’, though that’s not very readable.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

On Fri, Dec 11, 2015 at 2:00 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

I went and looked at it, and even now it looks like I want to take every function I've used in Cairo and translate it to Swift. Swift is such a...simple language compared to everything else. That being said, as a result of the specs, it is also much more verbose in terms of writing the code. Compared to other languages, it is written out instead of shoved onto a few lines.

Is there a way to import modules into other modules? Because it looks like a weekend project that will eventually get posted by myself at http://github.com/Christoffen-Corporation.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I’d recommend having a look at the Swift package manager example again — https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

There’s an example of using those modules together.

On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

Sent from Outlook Mobile <https://aka.ms/qtex0l>

I’ll go ahead and comment it, but I think it’s simplistic enough that it should be readable with a grasp of some Swift concepts. Perhaps it’s a good idea to look through The Swift Programming Language to figure out some of the constructs I used — they’re fairly basic constructs.

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan"<kwame.bryan@gmail.com <mailto:kwame.bryan@gmail.com>> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame

<Mail Attachment.txt><Mail Attachment.txt>

_______________________________________________
swift-users mailing list
swift-users@swift.org <mailto:swift-users@swift.org>
https://lists.swift.org/mailman/listinfo/swift-users


(Max Howell) #19

If you could publish your sources on GitHub or somewhere similar we could probably be more help.

···

On Dec 11, 2015, at 6:21 PM, Gage Morgan via swift-users <swift-users@swift.org> wrote:

I'm going to. Now, does this mean anything labelled func inside the struct needs tacked on as well?

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: jackl@apple.com
Date: Fri, 11 Dec 2015 18:19:55 -0800
CC: harlan@harlanhaskins.com; swift-users@swift.org
To: gagemorgan@outlook.com

Did you make the class and its methods public?

Jack
On Dec 11, 2015, at 6:16 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

Here's what I'm getting:

/home/mgage/swift-cairo-bindings/test/main.swift:4:15: error: module 'Cairo' has no member named 'Surface'
let surface = Cairo.Surface(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
              ^~~~~ ~~~~~~~
<unknown>:0: error: build had 1 command failures

So what I'm trying to do is to put all wrappings in a separate module named Cairo. Then, I want to use those methods outside of the module named Cairo. I renamed the class to Surface and fixed all references, but for some reason it keeps saying something about Surface not present. I need to look into whether a git repo may be needed.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com
Date: Fri, 11 Dec 2015 20:31:20 -0500
CC: jackl@apple.com; swift-users@swift.org
To: gagemorgan@outlook.com

Nope, but you’ll need a way to specify the class inside the module (the fully-qualified type name)

Cairo.Cairo should work fine.

On Dec 11, 2015, at 8:14 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

The module is Cairo. Do I need to change something (I'm assuming by struct you mean the name of the class containing wrappings). The class is named Cairo as well. Could renaming the module to ModCairo fix this?

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 5:11 PM -0800, "Harlan Haskins" <harlan@harlanhaskins.com> wrote:

Is your struct named Cairo or Surface?

If Cairo is the module name, you're trying to instantiate the module.

- Harlan

On Dec 11, 2015, at 7:55 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

How would you use things like cairo.moveTo() outside of the wrapping file? I've gone as far as writing a module named "Cairo," taking the methods as mentioned above out, and moving them to their own directory "tests." I have added "Cairo" as a dependency for "tests," but there appears to be something wrong when I try to call:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)

Why can I not call Cairo()? The error:

Compiling Swift Module 'test' (1 sources)
/home/mgage/swift-cairo-bindings/test/main.swift:4:18: error: cannot call value of non-function type 'module<Cairo>'
let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
            ~~~~~^
<unknown>:0: error: build had 1 command failures
swift-build: exit(1): ["/home/mgage/Downloads/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/bin/swift-build-tool", "-f", "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]

I don't know whether or not I want to translate methods into straight-up properties yet.

Thanks, support here has been great so far. Cheers!
--MGage--

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com
Date: Fri, 11 Dec 2015 19:35:46 -0500
CC: gagemorgan@outlook.com; swift-users@swift.org
To: jackl@apple.com

I considered that but couldn't find a cairo_get_font_scale function quickly to complement the setter

But yes, a full wrapper would transparently handle getting and setting.

- Harlan

On Dec 11, 2015, at 7:28 PM, Jack Lawrence <jackl@apple.com> wrote:

For getter-setter pairs like `setLineWidth`, you might consider turning them into properties:

cairo.setLineWidth(0.1) // old
cairo.lineWidth = 0.1 // new

On Dec 11, 2015, at 4:22 PM, Gage Morgan via swift-users <swift-users@swift.org> wrote:

Harlan,

The answer is yes. I even managed to get a couple you didn't list on my own:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
cairo.scale(10.0, y: 10.0)
cairo.moveTo(29.0, y: 14.7)
cairo.lineTo(37.6, y: 13.0)
cairo.moveTo(37.6, y: 13.0)
cairo.lineTo(30.4, y: 22.2)
cairo.moveTo(30.4, y: 22.2)
cairo.lineTo(29.0, y: 14.7)
cairo.setLineWidth(0.1)
cairo.stroke()
cairo.surfaceWriteToPNG("boobs.png")

Swift is both really neat and really frustrating when learning it.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com
Date: Fri, 11 Dec 2015 17:21:38 -0500
CC: kwame.bryan@gmail.com; swift-users@swift.org
To: gagemorgan@outlook.com

Gage,

Sorry, I just got back from class.

I’ll respond in line!

On Dec 11, 2015, at 5:09 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

Harlan,

I read on cairographics.org about bindings awhile back. I think they want cairo, not surface, so we would have something like:

let cairo = Surface(format: CAIRO_FORMAT_ARGB32, width: 240, height: 80)
cairo.setFontFace("serif", weight: CAIRO_FONT_WEIGHT_BOLD)
cairo.setFontSize(32.0)
cairo.setSourceRGB(0.0, g: 0.0, b: 1.0)
cairo.moveTo(x: 10, y: 50)
cairo.showText("Hello, World!")
cairo.writeToPNG("hello.png")

Would this work the same as before without "surface" but instead "cairo”?

Absolutely! That’s just a variable name — it could be called ‘puppies’, though that’s not very readable.

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 2:00 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org> wrote:

I went and looked at it, and even now it looks like I want to take every function I've used in Cairo and translate it to Swift. Swift is such a...simple language compared to everything else. That being said, as a result of the specs, it is also much more verbose in terms of writing the code. Compared to other languages, it is written out instead of shoved onto a few lines.

Is there a way to import modules into other modules? Because it looks like a weekend project that will eventually get posted by myself at http://github.com/Christoffen-Corporation.

Sent from Outlook Mobile

I’d recommend having a look at the Swift package manager example again — https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

There’s an example of using those modules together.

On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org> wrote:

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

Sent from Outlook Mobile

I’ll go ahead and comment it, but I think it’s simplistic enough that it should be readable with a grasp of some Swift concepts. Perhaps it’s a good idea to look through The Swift Programming Language to figure out some of the constructs I used — they’re fairly basic constructs.

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan"<kwame.bryan@gmail.com> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame

<Mail Attachment.txt><Mail Attachment.txt>

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users


(Max Howell) #20

The link failure is for the constructor for your Cairo class.

I'll have to test this out myself. Can't for a few hours at least.

In the mean time try `swift build -v` for some more information.

···

On Dec 11, 2015, at 6:42 PM, Gage Morgan via swift-users <swift-users@swift.org> wrote:

I have no idea what happened here, but:

Cloning Packages/CCairo
Cloning Packages/Cairo
Compiling Swift Module 'Cairo' (1 sources)
Linking Executable: .build/debug/Cairo
Compiling Swift Module 'test' (1 sources)
Linking Executable: .build/debug/test
/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/main.swift.o: In function `main':
/home/mgage/swift-cairo-bindings/test/main.swift:4: undefined reference to `_TMaC5Cairo7Surface'
/home/mgage/swift-cairo-bindings/test/main.swift:4: undefined reference to `_TFC5Cairo7SurfaceCfT6formatVSC13_cairo_format5widthSi6heightSi_S0_'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: build had 1 command failures
swift-build: exit(1): ["/home/mgage/Downloads/swift/usr/bin/swift-build-tool", "-f", "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]

I've made everything public, and I think the initializer needs to be public or something like that. That said, I have no idea what I need to do for this to work. Deinit doesn't seem to want to be public, so leaving that alone. I need to know why the reference to Surface won't come up.

Here's the bits for the actual Cairo module (wrappings, etc.) and all:
https://gist.github.com/anonymous/72c4d2db7953c0d832c7

And this is the one in the "test" directory where I'm trying to get the methods in the above file to work without complaint outside of the directory:
https://gist.github.com/anonymous/11691be627d619066b8b

I'm hoping someone can tell me what I'm doing wrong, because I'm trying to do whatever possible. Also, I did upgrade the Swift components earlier when released.

To: jackl@apple.com
Date: Fri, 11 Dec 2015 21:21:06 -0500
CC: swift-users@swift.org
Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: swift-users@swift.org

I'm going to. Now, does this mean anything labelled func inside the struct needs tacked on as well?

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: jackl@apple.com
Date: Fri, 11 Dec 2015 18:19:55 -0800
CC: harlan@harlanhaskins.com; swift-users@swift.org
To: gagemorgan@outlook.com

Did you make the class and its methods public?

Jack
On Dec 11, 2015, at 6:16 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

Here's what I'm getting:

/home/mgage/swift-cairo-bindings/test/main.swift:4:15: error: module 'Cairo' has no member named 'Surface'
let surface = Cairo.Surface(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
              ^~~~~ ~~~~~~~
<unknown>:0: error: build had 1 command failures

So what I'm trying to do is to put all wrappings in a separate module named Cairo. Then, I want to use those methods outside of the module named Cairo. I renamed the class to Surface and fixed all references, but for some reason it keeps saying something about Surface not present. I need to look into whether a git repo may be needed.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com
Date: Fri, 11 Dec 2015 20:31:20 -0500
CC: jackl@apple.com; swift-users@swift.org
To: gagemorgan@outlook.com

Nope, but you’ll need a way to specify the class inside the module (the fully-qualified type name)

Cairo.Cairo should work fine.

On Dec 11, 2015, at 8:14 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

The module is Cairo. Do I need to change something (I'm assuming by struct you mean the name of the class containing wrappings). The class is named Cairo as well. Could renaming the module to ModCairo fix this?

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 5:11 PM -0800, "Harlan Haskins" <harlan@harlanhaskins.com> wrote:

Is your struct named Cairo or Surface?

If Cairo is the module name, you're trying to instantiate the module.

- Harlan

On Dec 11, 2015, at 7:55 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

How would you use things like cairo.moveTo() outside of the wrapping file? I've gone as far as writing a module named "Cairo," taking the methods as mentioned above out, and moving them to their own directory "tests." I have added "Cairo" as a dependency for "tests," but there appears to be something wrong when I try to call:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)

Why can I not call Cairo()? The error:

Compiling Swift Module 'test' (1 sources)
/home/mgage/swift-cairo-bindings/test/main.swift:4:18: error: cannot call value of non-function type 'module<Cairo>'
let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
            ~~~~~^
<unknown>:0: error: build had 1 command failures
swift-build: exit(1): ["/home/mgage/Downloads/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/bin/swift-build-tool", "-f", "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]

I don't know whether or not I want to translate methods into straight-up properties yet.

Thanks, support here has been great so far. Cheers!
--MGage--

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com
Date: Fri, 11 Dec 2015 19:35:46 -0500
CC: gagemorgan@outlook.com; swift-users@swift.org
To: jackl@apple.com

I considered that but couldn't find a cairo_get_font_scale function quickly to complement the setter

But yes, a full wrapper would transparently handle getting and setting.

- Harlan

On Dec 11, 2015, at 7:28 PM, Jack Lawrence <jackl@apple.com> wrote:

For getter-setter pairs like `setLineWidth`, you might consider turning them into properties:

cairo.setLineWidth(0.1) // old
cairo.lineWidth = 0.1 // new

On Dec 11, 2015, at 4:22 PM, Gage Morgan via swift-users <swift-users@swift.org> wrote:

Harlan,

The answer is yes. I even managed to get a couple you didn't list on my own:

let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
cairo.scale(10.0, y: 10.0)
cairo.moveTo(29.0, y: 14.7)
cairo.lineTo(37.6, y: 13.0)
cairo.moveTo(37.6, y: 13.0)
cairo.lineTo(30.4, y: 22.2)
cairo.moveTo(30.4, y: 22.2)
cairo.lineTo(29.0, y: 14.7)
cairo.setLineWidth(0.1)
cairo.stroke()
cairo.surfaceWriteToPNG("boobs.png")

Swift is both really neat and really frustrating when learning it.

Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
From: harlan@harlanhaskins.com
Date: Fri, 11 Dec 2015 17:21:38 -0500
CC: kwame.bryan@gmail.com; swift-users@swift.org
To: gagemorgan@outlook.com

Gage,

Sorry, I just got back from class.

I’ll respond in line!

On Dec 11, 2015, at 5:09 PM, Gage Morgan <gagemorgan@outlook.com> wrote:

Harlan,

I read on cairographics.org about bindings awhile back. I think they want cairo, not surface, so we would have something like:

let cairo = Surface(format: CAIRO_FORMAT_ARGB32, width: 240, height: 80)
cairo.setFontFace("serif", weight: CAIRO_FONT_WEIGHT_BOLD)
cairo.setFontSize(32.0)
cairo.setSourceRGB(0.0, g: 0.0, b: 1.0)
cairo.moveTo(x: 10, y: 50)
cairo.showText("Hello, World!")
cairo.writeToPNG("hello.png")

Would this work the same as before without "surface" but instead "cairo”?

Absolutely! That’s just a variable name — it could be called ‘puppies’, though that’s not very readable.

Sent from Outlook Mobile

On Fri, Dec 11, 2015 at 2:00 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org> wrote:

I went and looked at it, and even now it looks like I want to take every function I've used in Cairo and translate it to Swift. Swift is such a...simple language compared to everything else. That being said, as a result of the specs, it is also much more verbose in terms of writing the code. Compared to other languages, it is written out instead of shoved onto a few lines.

Is there a way to import modules into other modules? Because it looks like a weekend project that will eventually get posted by myself at http://github.com/Christoffen-Corporation.

Sent from Outlook Mobile

I’d recommend having a look at the Swift package manager example again — https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md

There’s an example of using those modules together.

On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" <swift-users@swift.org> wrote:

I meant the code posted in the Gist link above. I don't know jack squat about qsort. I'm hoping that if I can reverse-engineer code already produced, I can apply it to other parts of Cairo.

Sent from Outlook Mobile

I’ll go ahead and comment it, but I think it’s simplistic enough that it should be readable with a grasp of some Swift concepts. Perhaps it’s a good idea to look through The Swift Programming Language to figure out some of the constructs I used — they’re fairly basic constructs.

On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan"<kwame.bryan@gmail.com> wrote:

Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html

Regards
Kwame

<Mail Attachment.txt><Mail Attachment.txt>

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users