On Mon, Sep 25, 2017 at 1:59 AM, Jethram Cockson
<jethram.cock...@gmail.com> wrote:
> Hi group,
>
> I'm having issues with gdk-pixbuf loader and JPEGs on my Windows 10
> system with MSYS. The
> loader works okay to construct pixbufs. But for some reason, it
> refuses to emit area-updated and
> area-prepared until the jpeg is 100% loaded already. That kind of
> defeats the purpose of that
> feature. On Linux, it successfully emits these signals with the same jpeg 
> files.
>
> I'm wondering, is there any trick to getting this to work on Windows
> that I'm missing, or is this just
> expected behavior? Or maybe a bug?
>
>
> On MSYS(using the pacman packages for these):
> $ pkg-config --modversion gdk-pixbuf-2.0
> 2.36.10
> $ pkg-config --modversion gtk+-3.0
> 3.22.19
>
> On Linux:
> $ uname -a
> $ pkg-config --modversion gdk-pixbuf-2.0
> 2.36.9
> $ pkg-config --modversion gtk+-3.0
> 3.22.21
>
> I've made a small test script in Python that demos this problem:
> https://gist.github.com/anonymous/95424447867e1d6a99e32f3622a06565
>
> import gi
> gi.require_version('GdkPixbuf', '2.0')
> from gi.repository import GdkPixbuf
> from urllib import request
> import sys
>
> pbl = GdkPixbuf.PixbufLoader()
> url = sys.argv[1]
>
> def prepped(*args):
>     pb: GdkPixbuf.Pixbuf = pbl.get_pixbuf()
>     print('prepped', pb, pb.get_width(), 'x', pb.get_height())
>
> def updated(*args):
>     print('updated', *args)
>
> pbl.connect('area-prepared', prepped)
> pbl.connect('area-updated', updated)
>
> with request.urlopen(url) as fp:
>     while True:
>         buf = fp.read(1024)
>         if not buf:
>             break
>         pbl.write(buf)
>     pbl.close()
>
> pb: GdkPixbuf.Pixbuf = pbl.get_pixbuf()
> print('pixbuf', pb, pb.get_width(), 'x', pb.get_height())
>
>
> Notice on MSYS it only emits area-updated when its fully loaded.
> MSYS:
> $python3 pbl.py https://upload.wikimedia.org/wikipedia/en/5/58/Penny_test.jpg
> prepped <GdkPixbuf.Pixbuf object at 0x000000000372e438 (GdkPixbuf at
> 0x0000000002d41600)> 198 x 238
> updated <GdkPixbuf.PixbufLoader object at 0x0000000003147ea0
> (GdkPixbufLoader at 0x0000000002d431e0)> 0 0 198 238
> pixbuf <GdkPixbuf.Pixbuf object at 0x000000000372e438 (GdkPixbuf at
> 0x0000000002d41600)> 198 x 238
>
>
> On Linux:
> $ python3 pbl.py https://upload.wikimedia.org/wikipedia/en/5/58/Penny_test.jpg
> prepped <GdkPixbuf.Pixbuf object at 0x7f89db837bd0 (GdkPixbuf at
> 0x56545f04f460)> 198 x 238
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 0 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 1 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 2 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 3 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 4 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 5 198 1
>
> <a few hundred scanlines snipped for brevity>
>
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 232 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 233 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 234 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 235 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 236 198 1
> updated <GdkPixbuf.PixbufLoader object at 0x7f89debd1480
> (GdkPixbufLoader at 0x56545f05fcc0)> 0 237 198 1
> pixbuf <GdkPixbuf.Pixbuf object at 0x7f89dd080480 (GdkPixbuf at
> 0x56545f04f460)> 198 x 238


Realized there was a stray type annotation in the script. Removed in
case it causes problems:

https://gist.github.com/anonymous/592658623d5317e7db40164e4d75b95c

import gi
gi.require_version('GdkPixbuf', '2.0')
from gi.repository import GdkPixbuf
from urllib import request
import sys

pbl = GdkPixbuf.PixbufLoader()
url = sys.argv[1]

def prepped(*args):
    pb: GdkPixbuf.Pixbuf = pbl.get_pixbuf()
    print('prepped', pb, pb.get_width(), 'x', pb.get_height())

def updated(*args):
    print('updated', *args)

pbl.connect('area-prepared', prepped)
pbl.connect('area-updated', updated)

with request.urlopen(url) as fp:
    while True:
        buf = fp.read(1024)
        if not buf:
            break
        pbl.write(buf)
    pbl.close()

pb = pbl.get_pixbuf()
print('pixbuf', pb, pb.get_width(), 'x', pb.get_height())
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to