Re: Invisible GtkImage



On Thu, 2013-06-27 at 16:01 -0700, Andrew Potter wrote:
Please show the code that deals with the TextView and ScrolledWindow.
The clipping is almost certainly due to setting the minimum size on
either the TextView, or the GtkBox the two are contained in. I have
example GtkAssistant code at the bottom of this email that does not
exhibit this issue until extraordinarily small window sizes.

Hey Andrew. The code I posted on pastebin was the only GUI related code
for that stuff. The TextView and ScrolledWindow were all created via
GtkBuilder / Glade, so there isn't really anything to show, save the XML
unless you want that too. That's the bad news. 

The good news is by changing the minimum height returned in the
following override for your Gtk.Drawing subclass to 1, the clipping
issue seems solved - well, almost.

    def do_get_preferred_height_for_width(self, width):
        preferredHeight = width / self.get_aspect_ratio()
        return (1, preferredHeight)

When scaling an image, both its height and width are changing. In
order to fit the allocated rectangle without clipping, one must figure
out which dimension is smallest (normalized to the aspect ratio). For
example, if a 200x100 image is allocated 200x50, the allocation is
height-limited and the image must be scaled to 100x50. OTOH if
allocated 100x100, the image is width-limited and must be scaled to
100x50.

Right. Makes sense. Thank you for that clarification.

I'm getting motivated to work on a patch to GtkImage to add scaling support...

I think that given how much work it took for us to figure out how to get
it working, probably a lot of other people might benefit from your
patch, so I applaud your efforts.

-------------

Below is an example program with ScalableImage in a GtkAssistant.

Example 1, start up:
http://i.imgur.com/ZdqwUZG.jpg

Example 2, Resized to less height. Notice the TextView/ScrolledWindow
had plenty of space to "give up" because it has no minimum height
http://i.imgur.com/wTN5rY9.jpg

Example 3, Clipping occurs at this very small size due to minimum size
on the ScalableImage as well as the ScrolledWindow/TextView
http://i.imgur.com/EAzFYOG.jpg

Yup. That's what I had observed.

Example 4, ScalableImage is modified to return a 0 minimum size in
get_preferred_height_for_width(). This means that at very small
heights the image will not have enough space to fill the allocated
width, allowing the other widgets get some space in this corner case.
http://i.imgur.com/ZrOPt75.jpg

It is your choice whether or not to allow your header image to become
smaller when the window is pressured for height.

Ok, for the sake of my application, setting it to zero / one vs leaving
it at the preferred height seems to solve the clipping issue, but
creates a new problem. On subsequent assistant pages, the image starts
off too small and is not using the full width available. However on the
first page, it fits the full width. Resizing the assistant makes it fill
the full width, but only after a certain amount is met. 

-- 
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]