[Bf-extensions-cvs] [7c099b03] master: BlenderKit: improvements to new assetbar

Vilem Duha noreply at git.blender.org
Wed Oct 13 11:54:14 CEST 2021


Commit: 7c099b03e4ff3ffffc120bbcc7f30ca466763d24
Author: Vilem Duha
Date:   Wed Oct 13 11:53:58 2021 +0200
Branches: master
https://developer.blender.org/rBA7c099b03e4ff3ffffc120bbcc7f30ca466763d24

BlenderKit: improvements to new assetbar

Almost ready for the switch to default.

===================================================================

M	blenderkit/__init__.py
M	blenderkit/asset_bar_op.py
M	blenderkit/bl_ui_widgets/bl_ui_drag_panel.py
M	blenderkit/search.py
M	blenderkit/ui.py
M	blenderkit/utils.py

===================================================================

diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index f6fcb155..bbae65f3 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -311,7 +311,7 @@ def run_drag_drop_update(self, context):
         # ctx = utils.get_fake_context(bpy.context)
 
         bpy.ops.view3d.close_popup_button('INVOKE_DEFAULT')
-        bpy.ops.view3d.asset_drag_drop('INVOKE_DEFAULT', asset_search_index=ui_props.active_index + ui_props.scrolloffset)
+        bpy.ops.view3d.asset_drag_drop('INVOKE_DEFAULT', asset_search_index=ui_props.active_index + ui_props.scroll_offset)
 
         self.drag_init_button = False
 
@@ -378,7 +378,7 @@ class BlenderKitUIProps(PropertyGroup):
     mouse_y: IntProperty(name="Mouse Y", default=0)
 
     active_index: IntProperty(name="Active Index", default=-3)
-    scrolloffset: IntProperty(name="Scroll Offset", default=0)
+    scroll_offset: IntProperty(name="Scroll Offset", default=0)
     drawoffset: IntProperty(name="Draw Offset", default=0)
 
     dragging: BoolProperty(name="Dragging", default=False)
diff --git a/blenderkit/asset_bar_op.py b/blenderkit/asset_bar_op.py
index 8727698d..b3de3502 100644
--- a/blenderkit/asset_bar_op.py
+++ b/blenderkit/asset_bar_op.py
@@ -30,8 +30,11 @@ def draw_callback_tooltip(self, context):
         r = sr[self.active_index]
         ui.draw_tooltip_with_author(r, 0, 500)
 
+
 def get_area_height(self):
-    if type(self.context)!= dict:
+    if type(self.context) != dict:
+        if self.context is None:
+            self.context = bpy.context
         self.context = self.context.copy()
     # print(self.context)
     if self.context.get('area') is not None:
@@ -48,11 +51,12 @@ def get_area_height(self):
     # print('no area found')
     return 100
 
+
 BL_UI_Widget.get_area_height = get_area_height
 
 
 def asset_bar_modal(self, context, event):
-    ui_props = bpy.context.scene.blenderkitUI
+    ui_props = bpy.context.window_manager.blenderkitUI
     if ui_props.turn_off:
         ui_props.turn_off = False
         self.finish()
@@ -81,13 +85,14 @@ def asset_bar_modal(self, context, event):
         self.scroll_update()
         return {'RUNNING_MODAL'}
 
-    if self.check_ui_resized(context):
+    if self.check_ui_resized(context) or self.check_new_search_results(context):
         self.update_ui_size(context)
-        self.update_layout(context)
+        self.update_layout(context, event)
+
     return {"PASS_THROUGH"}
 
-def asset_bar_invoke(self, context, event):
 
+def asset_bar_invoke(self, context, event):
     if not self.on_invoke(context, event):
         return {"CANCELLED"}
 
@@ -98,6 +103,7 @@ def asset_bar_invoke(self, context, event):
     context.window_manager.modal_handler_add(self)
     return {"RUNNING_MODAL"}
 
+
 BL_UI_OT_draw_operator.modal = asset_bar_modal
 BL_UI_OT_draw_operator.invoke = asset_bar_invoke
 
@@ -118,6 +124,7 @@ def mouse_down_right(self, x, y):
 
     return False
 
+
 # def handle_event(self, event):
 #     x = event.mouse_region_x
 #     y = event.mouse_region_y
@@ -162,9 +169,9 @@ def mouse_down_right(self, x, y):
 
 BL_UI_Button.mouse_down_right = mouse_down_right
 BL_UI_Button.set_mouse_down_right = set_mouse_down_right
-# BL_UI_Button.handle_event = handle_event
 
 
+# BL_UI_Button.handle_event = handle_event
 
 
 class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
@@ -221,7 +228,7 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
         dark_panel.bg_color = (0.0, 0.0, 0.0, 0.7)
         self.tooltip_widgets.append(dark_panel)
 
-        name_label = self.new_text('', self.assetbar_margin*2, labels_start, text_size=16)
+        name_label = self.new_text('', self.assetbar_margin * 2, labels_start, text_size=16)
         self.asset_name = name_label
         self.tooltip_widgets.append(name_label)
         offset_y = 16 + self.margin
@@ -229,9 +236,6 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
         #                       text_size=14)
         # self.tooltip_widgets.append(label)
 
-
-        self.hide_tooltip()
-
     def hide_tooltip(self):
         self.tooltip_panel.visible = False
         for w in self.tooltip_widgets:
@@ -242,16 +246,34 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
         for w in self.tooltip_widgets:
             w.visible = True
 
-    def check_ui_resized(self,context):
+    def check_new_search_results(self, context):
+        sr = bpy.context.window_manager.get('search results',[])
+        if not hasattr(self, 'search_results_count'):
+            self.search_results_count = len(sr)
+        if len(sr)!= self.search_results_count:
+            self.search_results_count = len(sr)
+            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.scene.blenderkitUI
+        ui_props = bpy.context.window_manager.blenderkitUI
         ui_scale = bpy.context.preferences.view.ui_scale
-
+        #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:
+            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
 
+
         for r in area.regions:
             if r.type == 'TOOLS':
                 self.bar_x = r.width * reg_multiplier + self.margin + ui_props.bar_x_offset * ui_scale
@@ -259,9 +281,15 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
                 self.bar_end = r.width * reg_multiplier + 100 * ui_scale
 
         bar_width = region.width - self.bar_x - self.bar_end
+
+        bar_y = ui_props.bar_y_offset * ui_scale
+
+        changed = False
         if bar_width != self.bar_width:
-            return True
-        return False
+            changed = True
+        if bar_y != self.bar_y:
+            changed = True
+        return changed
 
     def update_ui_size(self, context):
 
@@ -271,12 +299,12 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
         region = context.region
         area = context.area
 
-        ui_props = bpy.context.scene.blenderkitUI
+        ui_props = bpy.context.window_manager.blenderkitUI
         user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
         ui_scale = bpy.context.preferences.view.ui_scale
 
         self.margin = ui_props.bl_rna.properties['margin'].default * ui_scale
-        self.margin = 3
+        self.margin = 1
         self.assetbar_margin = self.margin
 
         self.thumb_size = user_preferences.thumb_size * ui_scale
@@ -299,11 +327,12 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
 
         search_results = bpy.context.window_manager.get('search results')
         # we need to init all possible thumb previews in advance/
-        self.hcount = user_preferences.max_assetbar_rows
-        # if search_results is not None and self.wcount > 0:
-        #     self.hcount = min(user_preferences.max_assetbar_rows, math.ceil(len(search_results) / self.wcount))
-        # else:
-        #     self.hcount = 1
+        # self.hcount = user_preferences.max_assetbar_rows
+        if search_results is not None and self.wcount > 0:
+            self.hcount = min(user_preferences.max_assetbar_rows, math.ceil(len(search_results) / self.wcount))
+            self.hcount = max(self.hcount,1)
+        else:
+            self.hcount = 1
 
         self.bar_height = (self.button_size) * self.hcount + 2 * self.assetbar_margin
         # self.bar_y = region.height - ui_props.bar_y_offset * ui_scale
@@ -315,26 +344,55 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
             self.reports_y = self.bar_y - self.bar_height - 100
             self.reports_x = self.bar_x
 
-    def update_layout(self, context):
-        pass;
-
-    def __init__(self):
-        super().__init__()
-
-        self.update_ui_size(bpy.context)
-
-        ui_props = bpy.context.scene.blenderkitUI
-
-        # todo move all this to update UI size
+    def update_layout(self, context, event):
+        self.init_ui()
+        self.setup_widgets(context, event)
 
-        self.draw_tooltip = False
-        self.scroll_offset = 0
-
-        self.text_color = (0.9, 0.9, 0.9, 1.0)
+    def asset_button_init(self, asset_x, asset_y, button_idx):
         button_bg_color = (0.2, 0.2, 0.2, .1)
         button_hover_color = (0.8, 0.8, 0.8, .2)
 
-        self.init_tooltip()
+        new_button = BL_UI_Button(asset_x, asset_y, self.button_size, self.button_size)
+
+        # asset_data = sr[asset_idx]
+        # iname = blenderkit.utils.previmg_name(asset_idx)
+        # img = bpy.data.images.get(iname)
+
+        new_button.bg_color = button_bg_color
+        new_button.hover_bg_color = button_hover_color
+        new_button.text = ""  # asset_data['name']
+        # if img:
+        #     new_button.set_image(img.filepath)
+
+        new_button.set_image_size((self.thumb_size, self.thumb_size))
+        new_button.set_image_position((self.margin, self.margin))
+        new_button.button_index = button_idx
+        new_button.search_index = button_idx
+        new_button.set_mouse_down(self.drag_drop_asset)
+        new_button.set_mouse_down_right(self.asset_menu)
+        new_button.set_mouse_enter(self.enter_button)
+        new_button.set_mouse_exit(self.exit_button)
+        new_button.text_input = self.handle_key_input
+        self.asset_buttons.append(new_button)
+        # add validation icon to button
+        icon_size = 24
+        validation_icon = BL_UI_Button(asset_x + self.button_size - icon_size - self.margin,
+                                       asset_y + self.button_size - icon_size - self.margin, 0, 0)
+
+        # v_icon = ui.verification_icons[asset_data.get('verificationStatus', 'validated')]
+        # if v_icon is not None:
+    

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list