Re: Invisible GtkImage



On Sun, 2013-06-23 at 00:08 +0200, David Nečas wrote:
Frankly, I don't quite understand what you are trying to achieve since
you have never posted anything runnable and your examples have never
included any actual drawing code.  

Hey David. I had posted my cairo drawing code a couple posts ago, but
this thread is getting long and you may have missed it:

        <http://pastebin.com/Mj7bTJLh>

Before that, I had posted several times code using GtkImage as well. In
any case, they didn't work properly, it doesn't matter now, and I'm
grateful for your help.

Anyway, it is trivial to create a
scaleable widget (whether it draws an image or anything else):

-----------------------------------------------------------------------
from gi.repository import Gtk, GdkPixbuf, Gdk

class ScalableImage(Gtk.DrawingArea):
    def __init__(self, filename):
        super(ScalableImage, self).__init__()
        self.pb = GdkPixbuf.Pixbuf.new_from_file(filename)

    def do_get_preferred_width(self):
        pw = self.pb.get_width()
        return (pw, pw)

    def do_get_preferred_height(self):
        ph = self.pb.get_height()
        return (ph, ph)

    def do_draw(self, cr):
        alloc = self.get_allocation()
        pw, ph = self.pb.get_width(), self.pb.get_height()
        aw, ah = float(alloc.width), float(alloc.height)
        r = min(aw/pw, ah/ph)
        cr.scale(r, r)
        Gdk.cairo_set_source_pixbuf(cr, self.pb, 0.0, 0.0)
        cr.paint()
        return False

w = Gtk.Window(Gtk.WindowType.TOPLEVEL)
w.connect('destroy', Gtk.main_quit)

b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
w.add(b)

b.pack_start(Gtk.Label(label='Test'), False, False, 0)
d = ScalableImage('/usr/share/icons/HighContrast/48x48/stock/gtk-ok.png')
b.pack_start(d, True, True, 0)
b.pack_start(Gtk.Label(label='Somewhat longer test'), False, False, 0)

w.show_all()

Gtk.main()
-----------------------------------------------------------------------

This might not be exactly what you need but as I noted I don't get where
the problem is...

Yes, your code is similar to what I had tried before with GtkImage,
only you're subclassing the DrawingArea instead which is probably a
better idea, except it still doesn't work properly either. My code
draws the image correctly, but it doesn't resize as the parent window is
resized...

        <http://pastebin.com/6LEzFk8A>

If you need your widget to be a GtkImage subclass things will likely
turn hairy because GtkImage is not scaleable, all its methods think it
is not scaleable so you will end up fighting the implementation of the
widget.

Yup.

-- 
Kip Warner -- Software Engineer
OpenPGP encrypted/signed mail preferred
http://www.thevertigo.com


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