Re: Invisible GtkImage



On Thu, Jun 13, 2013 at 9:54 PM, Kip Warner <kip thevertigo com> wrote:
What you can do to (try to) prevent that situation is to set the widget to
do "height for width" allocation, and override
get_preferred_height_for_width() to honor your aspect ratio. In some
situations of course the toolkit won't be able to perfectly honor the
allocation request, so be sure not to scale out of bounds no matter what.

Right. What I will do is resize to exactly what is passed into my
do_size_allocate() override since that size should theoretically meet
the aspect ratio I am maintaining via my
do_get_preferred_height_for_width() override.
    def do_get_preferred_height_for_width(self, width):
        return (width / self._aspectRatio)

    def do_get_request_mode(self):
        return Gtk.SizeRequestMode.HEIGHT_FOR_WIDTH

...but something very interesting happens immediately after the return
in do_get_preferred_height_for_width(). I get an assertion fail buried
deep somewhere in python-gi...


I suspect something weird is happening because you have the wrong
function signature. I can't find any reference to the basic widget
methods on the python gtk documentation website, but the C signature
is:

void                gtk_widget_get_preferred_height_for_width
                                                        (GtkWidget *widget,
                                                         gint width,
                                                         gint *minimum_height,
                                                         gint *natural_height);


So try:
def do_get_preferred_height_for_width(self, width, minimum_height,
natural_height):
  minimum_height = width / self._aspectRatio
  natural_height = width / self._aspectRatio

If that doesn't work, try and find out how the python gintrospection
stuff deals with out parameters.


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