[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