comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Where do I get my Cairo context from (in GTK3)?
Date: Mon, 25 Apr 2016 09:40:22 +0200
Date: 2016-04-25T09:40:22+02:00	[thread overview]
Message-ID: <nfkhm1$18de$1@gioia.aioe.org> (raw)
In-Reply-To: do4ph6Fa6ghU1@mid.individual.net

On 24/04/2016 22:44, hreba wrote:
> In GTk2 you got it from a call of Gdk.Cairo.Create.
>
> In GTK3 it is passed as a parameter of the callback function for the
> "draw" signal with the C prototype:
>
>    gboolean
>    user_function (GtkWidget    *widget,
>                   CairoContext *cr,
>                   gpointer      user_data)
>
> So I wrote in my Ada program (GNAT, gtkada):
>
>    package DA_Ret_Callback is new Gtk.Handlers.User_Return_Callback
>      (Gtk.Widget.Gtk_Widget_Record, Boolean, Handler_DataD);
>
>
>    function Draw_Handler
>      (da: access Gtk.Widget.Gtk_Widget_Record'Class;

If you instantiate it with GObject, why using Gtk_Widget instead?

>       cc: Cairo.Cairo_Context;
>       hd: Handler_DataD) return Boolean is
>    begin
>       ...
>    end Draw_Handler;
>
>
>    procedure Connect_Handlers
>      (obj: Glib.Object.GObject; hd: Handler_DataD;
>       sn_realize, sn_config, sn_draw: Glib.Signal_Name) is
>    begin
>       ...
>       DA_Ret_Callback.Connect
>     (Gtk.Widget.Gtk_Widget(obj), sn_draw,

I suppose sn_draw is "draw".

>      DA_Ret_Callback.To_Marshaller(Draw_Handler'Access),
>      hd);
>    end Connect_Handlers;
>
> The compiler then tells me
>
>    gui-canvas.adb:79:25: no candidate interpretations match the actuals:
>    gui-canvas.adb:79:52: expected type "Handler" defined at
>    gtk-marshallers.ads:309, instance at gtk-handlers.ads:468,
>    instance at line 20

These messages are always misleading. There are too many overloading 
Connects in the package. When there is any problem with any parameter, 
GNAT is practically never able to pinpoint the true reason.

> That means that he expects a handler
>
>          type Handler is access function
>                (Widget    : access Widget_Type'Class;
>                 User_Data : User_Type) return Return_Type;
>
> So where do I get the cairo context from?

As you did. Just make sure that all parameters of Connect match. Instead 
of pointer conversion use object conversion. E.g.

    Gtk_Widget_Record'Class (Obj.all)'Unchecked_Access

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2016-04-25  7:40 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-24 20:44 Where do I get my Cairo context from (in GTK3)? hreba
2016-04-25  7:40 ` Dmitry A. Kazakov [this message]
2016-04-25 10:03   ` hreba
2016-04-25 11:58     ` Dmitry A. Kazakov
2016-04-26  7:22       ` briot.emmanuel
2016-04-26  7:34         ` hreba
2016-04-27  7:47           ` briot.emmanuel
2016-04-27  8:08             ` Dmitry A. Kazakov
2016-04-28  7:48               ` briot.emmanuel
2016-04-27 13:15             ` hreba
2016-04-27 13:37               ` Dmitry A. Kazakov
2016-04-28  7:49                 ` briot.emmanuel
2016-08-05 15:56 ` borisgaertner56
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox