Re: Drawing a widget as a drag icon (without going down to C)

Kjell Ahlstedt via gtkmm-list <[email protected]>
Newsgroups gmane.comp.gnome.gtkmm
Message-ID <[email protected]>
On 6/23/19 3:35 PM, Daniel Boles via gtkmm-list wrote:
> I have a small widget that can be a drag/drop source/sink. When it's 
> dragged, I want it to be the drag-icon, so you can see that you're 
> dragging that particular widget (and its particular label, etc.)
>
> However, Gtk::Widget::draw(Cairo::RefPtr<Cairo::Context> const&) is 
> protected in gtkmm, so it seems that in order to draw the widget onto 
> a surface that I can then set as drag-icon, I must do:
>
> ```
> auto const allocation = m_box_label.get_allocation();
> auto const surface = Cairo::ImageSurface::create(
>   Cairo::FORMAT_ARGB32, allocation.get_width(), allocation.get_height() );
> auto const cairoContext = Cairo::Context::create(surface);
> gtk_widget_draw( reinterpret_cast<GtkWidget*>( m_box_label.gobj() ), 
> cairoContext->cobj() );
> dragContext->set_icon(surface);
> ```
>
> Is there any better way that I didn't think of, any way to make this 
> nicer in gtkmm, or is it just a fact of life at this point? (Since 
> gtkmm-3 is stable and master is probably very different here.)
>
I don't know why Widget::draw() is protected. Perhaps someone 
misunderstood it, and thought that it draws from the cairo context to 
the widget, instead of the other way.

gtk_widget_draw() and Gtk::Widget::draw() don't exist in gtk4/gtkmm4.

An alternative, not necessarily better, but without C code:

class MyBoxLabel : public TheTypeOf_m_box_label
{
public:
   using TheTypeOf_m_box_label::TheTypeOf_m_box_label // same 
constructors as the base class
   void draw(const ::Cairo::RefPtr< ::Cairo::Context>& cr)
   {
     Gtk::Widget::draw(cr);
   }
};

This might work, but I'm not sure:

class MyBoxLabel : public TheTypeOf_m_box_label
{
public:
   using TheTypeOf_m_box_label::TheTypeOf_m_box_label // same 
constructors as the base class
   using Gtk::Widget::draw;
};

_______________________________________________
gtkmm-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.