[Bf-extensions-cvs] [be3f162e] master: BlenderKit: fix asset bar thumbnail refresh
Vilem Duha
noreply at git.blender.org
Fri Oct 22 15:47:37 CEST 2021
Commit: be3f162ef7c966750535c6c03d1e84be81d0b846
Author: Vilem Duha
Date: Fri Oct 22 15:10:00 2021 +0200
Branches: master
https://developer.blender.org/rBAbe3f162ef7c966750535c6c03d1e84be81d0b846
BlenderKit: fix asset bar thumbnail refresh
also sevearal small UI tweaks and fix of the asset-bar scaling when switching on toolbar/properties in 3d view
remove debug prints
===================================================================
M blenderkit/__init__.py
M blenderkit/asset_bar_op.py
M blenderkit/bl_ui_widgets/bl_ui_button.py
M blenderkit/download.py
M blenderkit/ratings.py
M blenderkit/search.py
M blenderkit/ui_panels.py
===================================================================
diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index 698de633..4a25c9d6 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -365,8 +365,8 @@ class BlenderKitUIProps(PropertyGroup):
highlight_margin: IntProperty(name="Highlight Margin", default=int(margin_def / 2), min=-10, max=256)
bar_height: IntProperty(name="Bar Height", default=thumb_size_def + 2 * margin_def, min=-1, max=2048)
- bar_x_offset: IntProperty(name="Bar X Offset", default=0, min=0, max=5000)
- bar_y_offset: IntProperty(name="Bar Y Offset", default=60, min=0, max=5000)
+ bar_x_offset: IntProperty(name="Bar X Offset", default=40, min=0, max=5000)
+ bar_y_offset: IntProperty(name="Bar Y Offset", default=80, min=0, max=5000)
bar_x: IntProperty(name="Bar X", default=100, min=0, max=5000)
bar_y: IntProperty(name="Bar Y", default=100, min=50, max=5000)
diff --git a/blenderkit/asset_bar_op.py b/blenderkit/asset_bar_op.py
index 403eb039..d13c3767 100644
--- a/blenderkit/asset_bar_op.py
+++ b/blenderkit/asset_bar_op.py
@@ -13,6 +13,7 @@ from blenderkit.bl_ui_widgets.bl_ui_draw_op import *
# from blenderkit.bl_ui_widgets.bl_ui_textbox import *
import random
import math
+import time
import blenderkit
from blenderkit import ui, paths, utils, search, comments_utils
@@ -47,7 +48,8 @@ def get_area_height(self):
BL_UI_Widget.get_area_height = get_area_height
-def modal_inside(self,context,event):
+
+def modal_inside(self, context, event):
ui_props = bpy.context.window_manager.blenderkitUI
if ui_props.turn_off:
ui_props.turn_off = False
@@ -62,20 +64,27 @@ def modal_inside(self,context,event):
self.finish()
return {'FINISHED'}
- # progress bar
- # Todo: put this into a timer?
- sr = bpy.context.window_manager.get('search results')
- ui_scale = bpy.context.preferences.view.ui_scale
- for asset_button in self.asset_buttons:
+ self.update_timer +=1
+
+ if self.update_timer > self.update_timer_limit:
+ self.update_timer = 0
+ # print('timer', time.time())
+ self.update_images()
+
+ # progress bar
+ sr = bpy.context.window_manager.get('search results')
+ ui_scale = bpy.context.preferences.view.ui_scale
+ for asset_button in self.asset_buttons:
+ if sr is not None and len(sr) > asset_button.asset_index:
+ asset_data = sr[asset_button.asset_index]
+
+ if asset_data['downloaded'] > 0:
+ asset_button.progress_bar.width = int(self.button_size * ui_scale * asset_data['downloaded'] / 100)
+ asset_button.progress_bar.visible = True
+ else:
+ asset_button.progress_bar.visible = False
- if sr is not None and len(sr) > asset_button.asset_index:
- asset_data = sr[asset_button.asset_index]
- if asset_data['downloaded'] > 0:
- asset_button.progress_bar.width = int(self.button_size * ui_scale * asset_data['downloaded'] / 100)
- asset_button.progress_bar.visible = True
- else:
- asset_button.progress_bar.visible = False
if self.handle_widget_events(event):
return {'RUNNING_MODAL'}
@@ -85,12 +94,12 @@ def modal_inside(self,context,event):
self.mouse_x = event.mouse_region_x
self.mouse_y = event.mouse_region_y
if event.type == 'WHEELUPMOUSE' and self.panel.is_in_rect(self.mouse_x, self.mouse_y):
- self.scroll_offset -= 5
+ self.scroll_offset -= 2
self.scroll_update()
return {'RUNNING_MODAL'}
elif event.type == 'WHEELDOWNMOUSE' and self.panel.is_in_rect(self.mouse_x, self.mouse_y):
- self.scroll_offset += 5
+ self.scroll_offset += 2
self.scroll_update()
return {'RUNNING_MODAL'}
@@ -101,8 +110,9 @@ def modal_inside(self,context,event):
return {"PASS_THROUGH"}
+
def asset_bar_modal(self, context, event):
- return modal_inside(self,context,event)
+ return modal_inside(self, context, event)
def asset_bar_invoke(self, context, event):
@@ -113,6 +123,11 @@ def asset_bar_invoke(self, context, event):
self.register_handlers(args, context)
+ self.update_timer_limit = 30
+ self.update_timer =0
+ # print('adding timer')
+ # self._timer = context.window_manager.event_timer_add(10.0, window=context.window)
+
context.window_manager.modal_handler_add(self)
return {"RUNNING_MODAL"}
@@ -298,42 +313,34 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
return True
return False
- def check_ui_resized(self, context):
- # TODO this should only check if region was resized, not really care about the UI elements size.
- region = context.region
- area = context.area
- ui_props = bpy.context.window_manager.blenderkitUI
- ui_scale = bpy.context.preferences.view.ui_scale
+ def get_region_size(self, context):
# just check the size of region..
- if not hasattr(self, 'region_width'):
- self.region_width = region.width
- self.region_height = region.height
- if region.height != self.region_height or region.width != self.region_width:
- self.region_height = region.height
- self.region_width = region.width
- return True
- return False
- # this actually calculated UI elements, which is unnecessary
- reg_multiplier = 1
- if not bpy.context.preferences.system.use_region_overlap:
- reg_multiplier = 0
+ region = context.region
+ area = context.area
+ ui_width = 0
+ tools_width = 0
for r in area.regions:
+ if r.type == 'UI':
+ ui_width = r.width
if r.type == 'TOOLS':
- self.bar_x = r.width * reg_multiplier + self.margin + ui_props.bar_x_offset * ui_scale
- elif r.type == 'UI':
- self.bar_end = r.width * reg_multiplier + 100 * ui_scale
+ tools_width = r.width
+ total_width = region.width - tools_width - ui_width
+ return total_width, region.height
- bar_width = region.width - self.bar_x - self.bar_end
+ def check_ui_resized(self, context):
+ # TODO this should only check if region was resized, not really care about the UI elements size.
+ region_width, region_height = self.get_region_size(context)
- bar_y = ui_props.bar_y_offset * ui_scale
+ if not hasattr(self, 'total_width'):
+ self.total_width = region_width
+ self.region_height = region_height
- changed = False
- if bar_width != self.bar_width:
- changed = True
- if bar_y != self.bar_y:
- changed = True
- return changed
+ if region_height != self.region_height or region_width != self.total_width:
+ self.region_height = region_height
+ self.total_width = region_width
+ return True
+ return False
def update_ui_size(self, context):
@@ -364,12 +371,18 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
if not bpy.context.preferences.system.use_region_overlap:
reg_multiplier = 0
+ ui_width = 0
+ tools_width = 0
+ reg_multiplier = 1
+ if not bpy.context.preferences.system.use_region_overlap:
+ reg_multiplier = 0
for r in area.regions:
+ if r.type == 'UI' :
+ ui_width = r.width * reg_multiplier
if r.type == 'TOOLS':
- self.bar_x = r.width * reg_multiplier + self.margin + ui_props.bar_x_offset * ui_scale
- elif r.type == 'UI':
- self.bar_end = r.width * reg_multiplier + 120 * ui_scale
-
+ tools_width = r.width * reg_multiplier
+ self.bar_x = tools_width + self.margin + ui_props.bar_x_offset * ui_scale
+ self.bar_end = ui_width + 180 * ui_scale + self.other_button_size
self.bar_width = region.width - self.bar_x - self.bar_end
self.wcount = math.floor((self.bar_width) / (self.button_size))
@@ -402,13 +415,13 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.position_and_hide_buttons()
self.button_close.set_location(self.bar_width - self.other_button_size, -self.other_button_size)
- if hasattr(self,'button_notifications'):
- self.button_notifications.set_location(self.bar_width - self.other_button_size*2, -self.other_button_size)
+ if hasattr(self, 'button_notifications'):
+ self.button_notifications.set_location(self.bar_width - self.other_button_size * 2, -self.other_button_size)
self.button_scroll_up.set_location(self.bar_width, 0)
self.panel.width = self.bar_width
self.panel.height = self.bar_height
- self.panel.set_location(self.panel.x, self.panel.y)
+ self.panel.set_location(self.bar_x, self.panel.y)
# to hide arrows accordingly
self.scroll_update()
@@ -460,8 +473,6 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
new_button.progress_bar = progress_bar
self.progress_bars.append(progress_bar)
-
-
# if result['downloaded'] > 0:
# ui_bgl.draw_rect(x, y, int(ui_props.thumb_size * result['downloaded'] / 100.0), 2, green)
@@ -498,7 +509,8 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.asset_buttons.append(new_button)
button_idx += 1
- self.button_close = BL_UI_Button(self.bar_width - self.other_button_size, -self.other_button_size, self.other_button_size,
+ self.button_close = BL_UI_Button(self.bar_width - self.other_button_size, -self.other_button_size,
+ self.other_button_size,
self.other_button_size)
self.button_close.bg_color = button_bg_color
self.button_close.hover_bg_color = button_hover_color
@@ -534,11 +546,11 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.widgets_panel.append(self
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list