diff options
author | Matthias Baumgartner <dev@igsor.net> | 2023-02-03 17:24:40 +0100 |
---|---|---|
committer | Matthias Baumgartner <dev@igsor.net> | 2023-02-03 17:24:40 +0100 |
commit | e4b98fb261c83588ca1151a1c3f8891965051b2f (patch) | |
tree | 23fc90186db6acab73c1b91dc2c21b044bd5628e /tagit/widgets | |
parent | 7bb4c0f40c8666ef94a4dcf7fdf03a9058b64a8e (diff) | |
download | tagit-e4b98fb261c83588ca1151a1c3f8891965051b2f.tar.gz tagit-e4b98fb261c83588ca1151a1c3f8891965051b2f.tar.bz2 tagit-e4b98fb261c83588ca1151a1c3f8891965051b2f.zip |
previews in browser
Diffstat (limited to 'tagit/widgets')
-rw-r--r-- | tagit/widgets/browser.py | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/tagit/widgets/browser.py b/tagit/widgets/browser.py index 0cc65f6..4a254ee 100644 --- a/tagit/widgets/browser.py +++ b/tagit/widgets/browser.py @@ -26,7 +26,7 @@ import kivy.properties as kp # tagit imports from tagit import config from tagit.external.setproperty import SetProperty -from tagit.utils import Frame, Resolution, Struct, clamp, ns, ttime +from tagit.utils import Frame, Resolution, Struct, clamp, ns, ttime, rmatcher from tagit.utils.bsfs import ast # inner-module imports @@ -394,26 +394,39 @@ class Browser(GridLayout, StorageAwareMixin, ConfigAwareMixin): for _ in range(self.page_size - len(items)): next(childs).clear() - # load previews for items - # FIXME: Only relevant items, not all of them - #thumbs = items.preview(default=open(resource_find('no_preview.png'), 'rb')) # FIXME: mb/port - #resolution = self._cell_resolution() # FIXME: mb/port - #for ent, thumb, child in zip(reversed(items), reversed(thumbs), childs): # FIXME: mb/port + if len(items) == 0: # FIXME: mb/port + return + + # fetch previews + node_preview = reduce(operator.add, items).get(ns.bse.preview, node=True) + previews = {p for previews in node_preview.values() for p in previews} + previews = reduce(operator.add, previews) + # fetch preview resolutions + res_preview = previews.get(ns.bsp.width, ns.bsp.height, node=True) + # get target resolution + resolution = self._cell_resolution() + # get default preview + default = resource_find('no_preview.png') + # select a preview for each item for ent, child in zip(reversed(items), childs): - # FIXME: default/no preview handling - #thumb = best_resolution_match(thumb, resolution) # FIXME: mb/port - #child.update(ent, thumb, f'{ent.guid}x{resolution}') # FIXME: mb/port - thumb = open(resource_find('no_preview.png'), 'rb') - child.update(ent, thumb, f'{ent}x{1234}') - - # load previews for items - #resolution = self._cell_resolution() - #for obj, child in zip(reversed(items), childs): - # try: - # thumb = obj.get('preview').best_match(resolution) - # except PredicateNotSet: - # thumb = open(resource_find('no_preview.png'), 'rb') - # child.update(obj, thumb, f'{obj.guid}x{resolution}') + try: + # get previews and their resolution for this ent + options = [] + for preview in node_preview[ent]: + # unpack resolution + res = res_preview[preview] + width = res.get(ns.bsp.width, 0) + height = res.get(ns.bsp.height, 0) + options.append((preview, Resolution(width, height))) + # select the best fitting preview + chosen = rmatcher.by_area_min(resolution, options) + # open the preview file, default if no asset is available + thumb = open(chosen.get(ns.bsp.asset, default=default), 'rb') # FIXME: mb/port: asset storage + except IndexError: + # no viable resolution found + thumb = open(default, 'rb') + # update the image in the child widget + child.update(ent, thumb, f'{ent}x{resolution}') #def _preload_all(self): # # prefer loading from start to end @@ -517,7 +530,8 @@ class BrowserItem(RelativeLayout): class BrowserImage(BrowserItem): def update(self, obj, buffer, source): super(BrowserImage, self).update(obj) - self.preview.load_image(buffer, source, obj.orientation(default=1)) + self.preview.load_image(buffer, source, 1) + #self.preview.load_image(buffer, source, obj.orientation(default=1)) # FIXME: mb/port self.preview.set_size(self.size) @@ -534,7 +548,8 @@ class BrowserDescription(BrowserItem): def update(self, obj, buffer, source): super(BrowserDescription, self).update(obj) - self.preview.load_image(buffer, source, obj.orientation(default=1)) + self.preview.load_image(buffer, source, 1) + #self.preview.load_image(buffer, source, obj.orientation(default=1)) # FIXME: mb/port self.preview.set_size((self.height, self.height)) def clear(self): |