From: Hendrik Boom <hendrik@topoi.pooq.com>
To: caml-list@inria.fr
Cc: Hendrik Boom <hendrik@topoi.pooq.com>
Subject: [Caml-list] Using Pango with Cairo in Ocaml
Date: Sun, 2 Aug 2015 21:46:54 -0400 [thread overview]
Message-ID: <20150803014654.GA30848@topoi.pooq.com> (raw)
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.
Pango.context would appear to be defined in pango.ml:28
type context = [`pangocontext] obj
and for cairo.context I can merely find the line
type context
in both cairo.ml1 and cairo.ml.
(I didn't think type definitions could be this abbreviated, but there
it is. Is this some way of mentioning a type definition elsewhere tht
I haven't found yet?)
In the earlier cairo, the one before cairo2, there was a function fo
convert a Cairo context to a Pango context. It is not present in
cairo2.
Now it is possibile to obtain a Cairo context from a gtk window, and
also a Pango context. But since cairo can be used independently of gtk
windows (for example, to prooduce a pdf), there should be a mechanism
to obtain a pango context from a cairo context independent of any use
of gtk.
Or is there some deep secret about OCaml that I haven't divined yet (I
am an OCaml beginner) that there's some way of using the fact that the
two types are the same in C?
Or is it a bug in Cairo or Pango that this conversion is absent?
-- hendrik
next reply other threads:[~2015-08-03 1:46 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-03 1:46 Hendrik Boom [this message]
2015-08-03 10:52 ` Ivan Gotovchits
2015-08-03 13:00 ` Ivan
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=20150803014654.GA30848@topoi.pooq.com \
--to=hendrik@topoi.pooq.com \
--cc=caml-list@inria.fr \
/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