Re: GtkImageView

On Mon, 2007-12-17 at 14:11 +0100, Jeffrey Ratcliffe wrote:
Unfortunately, there's no automatic way to convert raw structs to Perl
land.  In this case, I think the best option would be to represent
GdkPixbufDrawOpts as a hash reference with keys zoom, zoom_rect, etc.
For an example of this kind of thing, take a look at the way
GtkStockItem is handled in Gtk2/xs/GtkStock.xs.

Ah. Thanks! Might I suggest that this and the GdkEvent issue be added
to binding_howto.pod?

Sounds like a good idea.  Can you take a stab at it?  The formulations
might make more sense to newcomers if they're written by someone who
just recently learned about them.

Once you have the converter newSVGdkPixbufDrawOpts[1], you can take this
one step further by installing a custom typemap for GdkPixbufDrawOpts:
"GdkPixbufDrawOpts * T_GPERL_GENERIC_WRAPPER" in a typemap file
installed via ExtUtils::Depends->add_typemaps in Makefile.PL -- like

OK. Almost working. As my Perl is much better than my C these days, I
just can't find the correct syntax:

IImageTool.xs: In function `newSVDrawSettings':
IImageTool.xs:33: error: cannot convert to a pointer type
IImageTool.xs: In function `SvDrawSettings':
IImageTool.xs:62: error: incompatible types in assignment

where the relevant lines are:

  hv_store (hv, "zoom_rect", 9, newSVGdkRectangle (settings->zoom_rect), 0);


  if (svp) settings->zoom_rect = SvGdkRectangle (*svp);

You're trying to use a GdkRectangle where a GdkRectangle* is wanted.  I
think this should work:

  hv_store (hv, "zoom_rect", 9, newSVGdkRectangle (&(settings->zoom_rect)), 0);

  if (svp) settings->zoom_rect = *(SvGdkRectangle (*svp));

If the settings struct passed into newSVDrawSettings might be free'd
while the corresponding hash reference still lives, you might have to
use newSVGdkRectangle_copy instead.

By the way, why 'DrawSettings' instead of 'GdkPixbufDrawOpts'?

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]