Files
blender-addons/magic_uv/utils/compatibility.py
Campbell Barton e8da6131fd License headers: use SPDX-FileCopyrightText for all addons
Move copyright text to SPDX-FileCopyrightText or set to the
Blender Foundation so "make check_licenses" now runs without warnings.
2023-06-15 16:54:05 +10:00

179 lines
4.8 KiB
Python

# SPDX-FileCopyrightText: 2019-2022 Blender Foundation
#
# SPDX-License-Identifier: GPL-2.0-or-later
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
__version__ = "6.7"
__date__ = "22 Sep 2022"
import bpy
import blf
def check_version(major, minor, _):
"""
Check blender version
"""
if bpy.app.version[0] == major and bpy.app.version[1] == minor:
return 0
if bpy.app.version[0] > major:
return 1
if bpy.app.version[1] > minor:
return 1
return -1
def make_annotations(cls):
if check_version(2, 80, 0) < 0:
return cls
# make annotation from attributes
props = {k: v
for k, v in cls.__dict__.items()
if isinstance(v, getattr(bpy.props, '_PropertyDeferred', tuple))}
if props:
if '__annotations__' not in cls.__dict__:
setattr(cls, '__annotations__', {})
annotations = cls.__dict__['__annotations__']
for k, v in props.items():
annotations[k] = v
delattr(cls, k)
return cls
class ChangeRegionType:
def __init__(self, *_, **kwargs):
self.region_type = kwargs.get('region_type', False)
def __call__(self, cls):
if check_version(2, 80, 0) >= 0:
return cls
cls.bl_region_type = self.region_type
return cls
def matmul(m1, m2):
if check_version(2, 80, 0) < 0:
return m1 * m2
return m1 @ m2
def layout_split(layout, factor=0.0, align=False):
if check_version(2, 80, 0) < 0:
return layout.split(percentage=factor, align=align)
return layout.split(factor=factor, align=align)
def get_user_preferences(context):
if hasattr(context, "user_preferences"):
return context.user_preferences
return context.preferences
def get_object_select(obj):
if check_version(2, 80, 0) < 0:
return obj.select
return obj.select_get()
def set_object_select(obj, select):
if check_version(2, 80, 0) < 0:
obj.select = select
else:
obj.select_set(select)
def set_active_object(obj):
if check_version(2, 80, 0) < 0:
bpy.context.scene.objects.active = obj
else:
bpy.context.view_layer.objects.active = obj
def get_active_object(context):
if check_version(2, 80, 0) < 0:
return context.scene.objects.active
else:
return context.view_layer.objects.active
def object_has_uv_layers(obj):
if check_version(2, 80, 0) < 0:
return hasattr(obj.data, "uv_textures")
else:
return hasattr(obj.data, "uv_layers")
def get_object_uv_layers(obj):
if check_version(2, 80, 0) < 0:
return obj.data.uv_textures
else:
return obj.data.uv_layers
def icon(icon):
if icon == 'IMAGE':
if check_version(2, 80, 0) < 0:
return 'IMAGE_COL'
return icon
def set_blf_font_color(font_id, r, g, b, a):
blf.color(font_id, r, g, b, a)
def set_blf_blur(font_id, radius):
if check_version(2, 80, 0) < 0:
blf.blur(font_id, radius)
def get_all_space_types():
if check_version(2, 80, 0) >= 0:
return {
'CLIP_EDITOR': bpy.types.SpaceClipEditor,
'CONSOLE': bpy.types.SpaceConsole,
'DOPESHEET_EDITOR': bpy.types.SpaceDopeSheetEditor,
'FILE_BROWSER': bpy.types.SpaceFileBrowser,
'GRAPH_EDITOR': bpy.types.SpaceGraphEditor,
'IMAGE_EDITOR': bpy.types.SpaceImageEditor,
'INFO': bpy.types.SpaceInfo,
'NLA_EDITOR': bpy.types.SpaceNLA,
'NODE_EDITOR': bpy.types.SpaceNodeEditor,
'OUTLINER': bpy.types.SpaceOutliner,
'PROPERTIES': bpy.types.SpaceProperties,
'SEQUENCE_EDITOR': bpy.types.SpaceSequenceEditor,
'TEXT_EDITOR': bpy.types.SpaceTextEditor,
'USER_PREFERENCES': bpy.types.SpacePreferences,
'VIEW_3D': bpy.types.SpaceView3D,
}
else:
return {
'VIEW_3D': bpy.types.SpaceView3D,
'TIMELINE': bpy.types.SpaceTimeline,
'GRAPH_EDITOR': bpy.types.SpaceGraphEditor,
'DOPESHEET_EDITOR': bpy.types.SpaceDopeSheetEditor,
'NLA_EDITOR': bpy.types.SpaceNLA,
'IMAGE_EDITOR': bpy.types.SpaceImageEditor,
'SEQUENCE_EDITOR': bpy.types.SpaceSequenceEditor,
'CLIP_EDITOR': bpy.types.SpaceClipEditor,
'TEXT_EDITOR': bpy.types.SpaceTextEditor,
'NODE_EDITOR': bpy.types.SpaceNodeEditor,
'LOGIC_EDITOR': bpy.types.SpaceLogicEditor,
'PROPERTIES': bpy.types.SpaceProperties,
'OUTLINER': bpy.types.SpaceOutliner,
'USER_PREFERENCES': bpy.types.SpaceUserPreferences,
'INFO': bpy.types.SpaceInfo,
'FILE_BROWSER': bpy.types.SpaceFileBrowser,
'CONSOLE': bpy.types.SpaceConsole,
}