From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Where do I get my Cairo context from (in GTK3)? Date: Mon, 25 Apr 2016 09:40:22 +0200 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: G7MXAklp0OAVRSdfcmpxRQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:30272 Date: 2016-04-25T09:40:22+02:00 List-Id: 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