Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Ivan <ivg@ieee.org>
To: Hendrik Boom <hendrik@topoi.pooq.com>
Cc: "caml-list\@inria.fr" <caml-list@inria.fr>
Subject: Re: [Caml-list] Using Pango with Cairo in Ocaml
Date: Mon, 03 Aug 2015 09:00:11 -0400	[thread overview]
Message-ID: <87oaiottlw.fsf@ieee.org> (raw)
In-Reply-To: <5EF3DBC5-DA38-44C9-AFEC-F5E009D869E8@ieee.org> (Ivan Gotovchits's message of "Mon, 3 Aug 2015 06:52:56 -0400")

Ivan Gotovchits <ivg@ieee.org> writes:

>  
>
>
>
>> On Aug 2, 2015, at 9:46 PM, Hendrik Boom <hendrik@topoi.pooq.com> wrote:
>> 
>> I'm writing here because I seem to have exhausted the wisdom of the 
>> ocam-beginners mailing list.  If there's a better place for me to have 
>> sent this, and there probably is, please let me know.
>> 
>> 
>> I'm trying to use Pango with Cairo, and to do it in OCaml.
>> 
>> I have an example written in C, that draws a multicoloured wheel of 
>> copies of the word "text".  I got it from
>> https://developer.gnome.org/pango/stable/pango-Cairo-Rendering.html
>> 
>> It works fine in C.
>> 
>> But I'm running into a snag with the OCaml conversion.
>> 
>> To make a layout, Pango wants to use a value of type Pango.context, and 
>> all I have from Cairo is a value of type Cairo.context.
>> 
>> There seems to be no way to obtain a Pango context from a Cairo 
>> context.
>> 
>> The obvious thing would seem to be to look at the C code to see what it 
>> did, and look for the corresponding function in the OCaml library 
>> source.
>> 
>> But it turns out the C code just uses the Cairo context as a Pango 
>> context without any conversion at all.  Pango, apparently, will just 
>> talk to a Cairo context as if it were a Pango context.  Presumably 
>> that's the normal way to use Cairo in C.
>> 
>> Now I'm not just saying that in the working C code, the Pango context 
>> and the Cairo context are the same type; that would be meaningless 
>> because both aree of the general-purpose gobject type.  I'm saying they 
>> are the same *value*, i.e., the same pointer, pointing to the same 
>> thing.
>> 
>> My immediate question is thus, how to I get Pango.context from a 
>> Cairo.context.  I seem to want a type change in OCaml without a change 
>> in value.
>
> There is an unsafe way to do this, that you should only do, if you
> understand, what you're doing. It is a typecasting in fact:
>
>     external pango_of_cairo : Cairo.context -> Pango.context = "%identity"
>
> This will define a function that will create (typecast) pango context from a cairo. 
>
> If underneath they're different type, then at best you will get segfault. 

I checked the source code, and it looks to me, that the types are
different, so it wouldn't be safe to use this conversion.

Looks like, that currently cairo library doesn't support this
functionality, i.e., there is no way to get pango context from cairo.

You can fix this, by stubbing `pango_cairo_create_context` function
directly or using OCaml cstubs library.

Or you can create an issue on a cairo2 issue tracker. 

  reply	other threads:[~2015-08-03 12:58 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-03  1:46 Hendrik Boom
2015-08-03 10:52 ` Ivan Gotovchits
2015-08-03 13:00   ` Ivan [this message]
2015-08-03 18:03     ` Hendrik Boom
2015-08-03 18:46       ` Ivan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87oaiottlw.fsf@ieee.org \
    --to=ivg@ieee.org \
    --cc=caml-list@inria.fr \
    --cc=hendrik@topoi.pooq.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox