Cleanup: quiet float argument to in type warning
[blender-addons.git] / magic_uv / utils / compatibility.py
blob6fcf93b83b2fa7319e6fcb2bff6dc2418076ab1d
1 # SPDX-License-Identifier: GPL-2.0-or-later
3 __author__ = "Nutti <nutti.metro@gmail.com>"
4 __status__ = "production"
5 __version__ = "6.7"
6 __date__ = "22 Sep 2022"
8 import bpy
9 import blf
12 def check_version(major, minor, _):
13 """
14 Check blender version
15 """
17 if bpy.app.version[0] == major and bpy.app.version[1] == minor:
18 return 0
19 if bpy.app.version[0] > major:
20 return 1
21 if bpy.app.version[1] > minor:
22 return 1
23 return -1
26 def make_annotations(cls):
27 if check_version(2, 80, 0) < 0:
28 return cls
30 # make annotation from attributes
31 props = {k: v
32 for k, v in cls.__dict__.items()
33 if isinstance(v, getattr(bpy.props, '_PropertyDeferred', tuple))}
34 if props:
35 if '__annotations__' not in cls.__dict__:
36 setattr(cls, '__annotations__', {})
37 annotations = cls.__dict__['__annotations__']
38 for k, v in props.items():
39 annotations[k] = v
40 delattr(cls, k)
42 return cls
45 class ChangeRegionType:
46 def __init__(self, *_, **kwargs):
47 self.region_type = kwargs.get('region_type', False)
49 def __call__(self, cls):
50 if check_version(2, 80, 0) >= 0:
51 return cls
53 cls.bl_region_type = self.region_type
55 return cls
58 def matmul(m1, m2):
59 if check_version(2, 80, 0) < 0:
60 return m1 * m2
62 return m1 @ m2
65 def layout_split(layout, factor=0.0, align=False):
66 if check_version(2, 80, 0) < 0:
67 return layout.split(percentage=factor, align=align)
69 return layout.split(factor=factor, align=align)
72 def get_user_preferences(context):
73 if hasattr(context, "user_preferences"):
74 return context.user_preferences
76 return context.preferences
79 def get_object_select(obj):
80 if check_version(2, 80, 0) < 0:
81 return obj.select
83 return obj.select_get()
86 def set_object_select(obj, select):
87 if check_version(2, 80, 0) < 0:
88 obj.select = select
89 else:
90 obj.select_set(select)
93 def set_active_object(obj):
94 if check_version(2, 80, 0) < 0:
95 bpy.context.scene.objects.active = obj
96 else:
97 bpy.context.view_layer.objects.active = obj
100 def get_active_object(context):
101 if check_version(2, 80, 0) < 0:
102 return context.scene.objects.active
103 else:
104 return context.view_layer.objects.active
107 def object_has_uv_layers(obj):
108 if check_version(2, 80, 0) < 0:
109 return hasattr(obj.data, "uv_textures")
110 else:
111 return hasattr(obj.data, "uv_layers")
114 def get_object_uv_layers(obj):
115 if check_version(2, 80, 0) < 0:
116 return obj.data.uv_textures
117 else:
118 return obj.data.uv_layers
121 def icon(icon):
122 if icon == 'IMAGE':
123 if check_version(2, 80, 0) < 0:
124 return 'IMAGE_COL'
126 return icon
129 def set_blf_font_color(font_id, r, g, b, a):
130 blf.color(font_id, r, g, b, a)
133 def set_blf_blur(font_id, radius):
134 if check_version(2, 80, 0) < 0:
135 blf.blur(font_id, radius)
138 def get_all_space_types():
139 if check_version(2, 80, 0) >= 0:
140 return {
141 'CLIP_EDITOR': bpy.types.SpaceClipEditor,
142 'CONSOLE': bpy.types.SpaceConsole,
143 'DOPESHEET_EDITOR': bpy.types.SpaceDopeSheetEditor,
144 'FILE_BROWSER': bpy.types.SpaceFileBrowser,
145 'GRAPH_EDITOR': bpy.types.SpaceGraphEditor,
146 'IMAGE_EDITOR': bpy.types.SpaceImageEditor,
147 'INFO': bpy.types.SpaceInfo,
148 'NLA_EDITOR': bpy.types.SpaceNLA,
149 'NODE_EDITOR': bpy.types.SpaceNodeEditor,
150 'OUTLINER': bpy.types.SpaceOutliner,
151 'PROPERTIES': bpy.types.SpaceProperties,
152 'SEQUENCE_EDITOR': bpy.types.SpaceSequenceEditor,
153 'TEXT_EDITOR': bpy.types.SpaceTextEditor,
154 'USER_PREFERENCES': bpy.types.SpacePreferences,
155 'VIEW_3D': bpy.types.SpaceView3D,
157 else:
158 return {
159 'VIEW_3D': bpy.types.SpaceView3D,
160 'TIMELINE': bpy.types.SpaceTimeline,
161 'GRAPH_EDITOR': bpy.types.SpaceGraphEditor,
162 'DOPESHEET_EDITOR': bpy.types.SpaceDopeSheetEditor,
163 'NLA_EDITOR': bpy.types.SpaceNLA,
164 'IMAGE_EDITOR': bpy.types.SpaceImageEditor,
165 'SEQUENCE_EDITOR': bpy.types.SpaceSequenceEditor,
166 'CLIP_EDITOR': bpy.types.SpaceClipEditor,
167 'TEXT_EDITOR': bpy.types.SpaceTextEditor,
168 'NODE_EDITOR': bpy.types.SpaceNodeEditor,
169 'LOGIC_EDITOR': bpy.types.SpaceLogicEditor,
170 'PROPERTIES': bpy.types.SpaceProperties,
171 'OUTLINER': bpy.types.SpaceOutliner,
172 'USER_PREFERENCES': bpy.types.SpaceUserPreferences,
173 'INFO': bpy.types.SpaceInfo,
174 'FILE_BROWSER': bpy.types.SpaceFileBrowser,
175 'CONSOLE': bpy.types.SpaceConsole,