Hi Jim, 

Good to hear you found a workaround and thanks for taking the time to share 
with us. 
I'm unfamiliar with gtkmm and the gory details of gdk-pixbuf, which is why I 
didn't comment further.

best, 
Richard. 

On 19/07/2012, at 4:30 AM, JIm Charlton wrote:

> A final post about the problems with Gdk::Pixbuf::create() on OS X 10.7 using 
> gtkmm-3.0...
> 
> I have not found a way to make this call work on the MAC.
> I found a work-around.  I needed to save the image drawn within a 
> Cairo::Context (cr).  Rather than getting a pixbuf from the Gdk::Window after 
> rendering the image, I do a cr->push_group() before the cairo draw 
> instructions.  After drawing the image I do a Cairo::RefPtr<Cairo::Pattern> 
> pattern_ = cr->pop_group().  This saves a pointer to the image.  I can then 
> render the image with cr->set_source(pattern_) and cr->paint().  Later, after 
> placing some additional features on the image I can revert to the original 
> image in pattern_ by wiping the context with cr->set_source_rgb( 
> 0.9,0.9,0.9); cr->paint(), and then restore the original image as above.
> 
> I am sure that most of my problems stem from a lack of familiarity with cairo 
> and cairomm.  But for now, I seem to have solved my immediate problems.
> 
> Sorry I could not be more helpful with the bug in the gtkmm/gtk libraries on 
> OS X.
> 
> jim...
> 
> 
> 
> On 12-07-14 05:08 PM, JIm Charlton wrote:
>> Further to my problem with a call to Gdk::Pixbuf::create(), I compiled the 
>> gtk libraries with debugging support and ran my test program under gdb.  
>> Here is the output from stepping into the Gdk library.  Any suggestions on 
>> where to go now?  Exactly where do I file a bug with bugzilla?  Sorry about 
>> my ignorance! :-)
>> ********************
>> (gdb) break 134
>> Breakpoint 1 at 0x1000021b9: file main-2.cc, line 134.
>> (gdb) run
>> Starting program: /Users/jim-2/pixbuf_test/bin/Debug/myprog 
>> Reading symbols for shared libraries 
>> ++++++++++++++++++++++....................................................................................................................................................
>>  done
>> Reading symbols for shared libraries . done
>> Reading symbols for shared libraries . done
>> Reading symbols for shared libraries . done
>> Reading symbols for shared libraries . done
>> Reading symbols for shared libraries . done
>> In Area::on_draw()...
>> In Area::on_draw()...
>> Realized 1
>> 
>> Breakpoint 1, PlotTest::on_test_clicked (this=0x7fff5fbfee98) at 
>> main-2.cc:134
>> warning: Source file is more recent than executable.
>> 134        Glib::RefPtr<Gdk::Pixbuf> pixbuf_ = 
>> Gdk::Pixbuf::create(myarea.myarea_win_, 0,0,winw,winh);
>> (gdb) s
>> Gdk::Pixbuf::create (src=@0x7fff5fbfeee0, src_x=0, src_y=0, width=500, 
>> height=300) at pixbuf.cc:381
>> 381      return Glib::RefPtr<Pixbuf>( new Pixbuf(src, src_x, src_y, width, 
>> height) );
>> (gdb) s
>> Gdk::Pixbuf::Pixbuf (this=0x102543b90, src=@0x7fff5fbfeee0, src_x=0, 
>> src_y=0, width=500, height=300)
>>     at pixbuf.cc:68
>> 68        src->gobj(), src_x, src_y, width, height))
>> (gdb) s
>> Glib::ObjectBase::ObjectBase (this=0x102543ba0, __vtt_parm=0x100a005a8) at 
>> objectbase.cc:49
>> 49      cpp_destruction_in_progress_  (false)
>> (gdb) s
>> 50    {}
>> (gdb) s
>> 
>> (myprog:38919): glibmm-CRITICAL **: Glib::Interface::Interface(const 
>> Glib::Interface_Class&): assertion `gobject_ != 0' failed
>> 
>> (myprog:38919): GLib-GObject-CRITICAL **: g_object_unref: assertion 
>> `G_IS_OBJECT (object)' failed
>> *********************
>> 
>> Here is the program
>> *********************
>> #include <gtkmm/main.h>
>> 
>> #include <gtkmm/box.h>
>> #include <gtkmm/window.h>
>> 
>> #include <gtkmm/separator.h>
>> #include <gtkmm/textview.h>
>> #include <gtkmm.h>
>> 
>> #include <gtkmm/drawingarea.h>
>> 
>> #include <gtkmm/image.h>
>> #include <gtkmm/stock.h>
>> #include <iostream>
>> #include <cairomm/context.h>
>> #include <gtkmm/button.h>
>> 
>> 
>> class Area : public Gtk::DrawingArea
>> {
>> public:
>>     Area();
>>     virtual ~Area();
>>      Glib::RefPtr<Gdk::Window> myarea_win_;
>> protected:
>>     virtual bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
>>     virtual void on_realize();
>> };
>> 
>> Area::Area()
>> {
>> 
>> }
>> 
>> Area::~Area()
>> {
>> }
>> 
>> bool Area::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
>> {
>> 
>>    printf("In Area::on_draw()...\n");
>>     return true;
>> }
>> 
>> void Area::on_realize()
>> {
>>   // We need to call the base on_realize()
>>   Gtk::DrawingArea::on_realize();
>>    myarea_win_ = get_window();
>> 
>> }
>> 
>> class PlotTest : public Gtk::Window
>> {
>> public:
>>   PlotTest();
>>   virtual ~PlotTest();
>> 
>>  protected:
>>     Area myarea;
>> 
>>   //Signal handlers:
>>     void on_close_clicked();
>>     void on_test_clicked();
>> 
>>   //Child widgets:
>>       Gtk::TextView t_view;
>>       Gtk::Box m_Box_Top;
>>       Gtk::Button m_Button_Close;
>>       Gtk::Button m_Button_Test;
>> };
>> 
>> PlotTest::PlotTest() :
>>   m_Box_Top(Gtk::ORIENTATION_VERTICAL),
>>   m_Button_Close("Close"),
>>   m_Button_Test("Test Pixbuf Code")
>> {
>>   // Set title and border of the window
>>   set_title("Cairo Test");
>>   set_border_width(0);
>> 
>>   add(m_Box_Top);
>> 
>> // Add myarea to m_Box3. myarea is an Area object (see myarea.h)
>> 
>>   myarea.set_size_request(500, 300);
>> 
>>   m_Box_Top.pack_start(myarea);
>> 
>>   // Put Close button in Box2:
>>   m_Box_Top.pack_start(m_Button_Close);
>>   m_Box_Top.pack_start(m_Button_Test);
>> 
>>   m_Button_Close.set_can_default();
>>   m_Button_Close.grab_default();
>> 
>>   // Connect the clicked signal of the button to
>>   m_Button_Close.signal_clicked().connect(sigc::mem_fun(*this,
>>               &PlotTest::on_close_clicked) );
>> 
>>   m_Button_Test.signal_clicked().connect(sigc::mem_fun(*this,
>>               &PlotTest::on_test_clicked) );
>> 
>>     show_all();
>> }
>> 
>> PlotTest::~PlotTest()
>> {
>> }
>> 
>> void PlotTest::on_close_clicked()
>> {
>>   hide(); //to close the application.
>> }
>> 
>> void PlotTest::on_test_clicked()
>> {
>>      int winx, winy, winw, winh;
>> 
>>      printf("Realized %i\n", myarea.get_realized());
>> 
>>      myarea.get_window()->get_geometry(winx, winy, winw, winh);
>> 
>>     Glib::RefPtr<Gdk::Pixbuf> pixbuf_ = 
>> Gdk::Pixbuf::create(myarea.myarea_win_, 0,0,winw,winh);
>> }
>> 
>> int main(int argc, char *argv[])
>> {
>>   Gtk::Main kit(argc, argv);
>> 
>>   PlotTest Prog;
>>   //Shows the window and returns when it is closed.
>> 
>>   Gtk::Main::run(Prog);
>> 
>>   return 0;
>> }
>> ****************************
>> 
>> 
>> 
>> _______________________________________________
>> Gtk-osx-devel-list mailing list
>> 
>> [email protected]
>> https://mail.gnome.org/mailman/listinfo/gtk-osx-devel-list
> 
> 
> _______________________________________________
> Gtk-osx-devel-list mailing list
> [email protected]
> https://mail.gnome.org/mailman/listinfo/gtk-osx-devel-list

_______________________________________________
Gtk-osx-devel-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtk-osx-devel-list

Reply via email to