diff options
author | Gaia Clary <gaia.clary@machinimatrix.org> | 2018-11-23 00:03:35 +0300 |
---|---|---|
committer | Gaia Clary <gaia.clary@machinimatrix.org> | 2018-11-23 00:03:35 +0300 |
commit | 5df55e184ec2965af9387519e3051ab109a27437 (patch) | |
tree | fc5acd02e57f4d11cf518fe6b523c45631748a40 | |
parent | 76a18d555ce6a2af319b40a8131845f9123f7d31 (diff) | |
parent | 3fb77591f4d7cd31cfc4410b18d9d5e9ad135394 (diff) |
Merge remote-tracking branch 'origin/blender2.8' into collada2.8
502 files changed, 8956 insertions, 32613 deletions
diff --git a/doc/python_api/examples/gpu.1.py b/doc/python_api/examples/gpu.1.py index c8ae3b01ee3..831349e5430 100644 --- a/doc/python_api/examples/gpu.1.py +++ b/doc/python_api/examples/gpu.1.py @@ -4,7 +4,8 @@ Geometry Batches Geometry is drawn in batches. A batch contains the necessary data to perform the drawing. -That includes an obligatory *Vertex Buffer* and an optional *Index Buffer*, each of which is described in more detail in the following sections. +That includes an obligatory *Vertex Buffer* and an optional *Index Buffer*, +each of which is described in more detail in the following sections. A batch also defines a draw type. Typical draw types are `POINTS`, `LINES` and `TRIS`. The draw type determines how the data will be interpreted and drawn. @@ -12,25 +13,29 @@ The draw type determines how the data will be interpreted and drawn. Vertex Buffers ++++++++++++++ -A *Vertex Buffer Object* (VBO) (:class:`gpu.types.GPUVertBuf`) is an array that contains the vertex attributes needed for drawing using a specific shader. +A *Vertex Buffer Object* (VBO) (:class:`gpu.types.GPUVertBuf`) +is an array that contains the vertex attributes needed for drawing using a specific shader. Typical vertex attributes are *location*, *normal*, *color*, and *uv*. -Every vertex buffer has a *Vertex Format* (:class:`gpu.types.GPUVertFormat`) and a length corresponding to the number of vertices in the buffer. +Every vertex buffer has a *Vertex Format* (:class:`gpu.types.GPUVertFormat`) +and a length corresponding to the number of vertices in the buffer. A vertex format describes the attributes stored per vertex and their types. The following code demonstrates the creation of a vertex buffer that contains 6 vertices. -For each vertex 2 attributes will be stored: The position and the normal:: +For each vertex 2 attributes will be stored: The position and the normal. - import gpu - vertex_positions = [(0, 0, 0), ...] - vertex_normals = [(0, 0, 1), ...] +.. code-block:: python - fmt = gpu.types.GPUVertFormat() - fmt.attr_add(id="pos", comp_type='F32', len=3, fetch_mode='FLOAT') - fmt.attr_add(id="normal", comp_type='F32', len=3, fetch_mode='FLOAT') + import gpu + vertex_positions = [(0, 0, 0), ...] + vertex_normals = [(0, 0, 1), ...] - vbo = gpu.types.GPUVertBuf(len=6, format=fmt) - vbo.attr_fill(id="pos", data=vertex_positions) - vbo.attr_fill(id="normal", data=vertex_normals) + fmt = gpu.types.GPUVertFormat() + fmt.attr_add(id="pos", comp_type='F32', len=3, fetch_mode='FLOAT') + fmt.attr_add(id="normal", comp_type='F32', len=3, fetch_mode='FLOAT') + + vbo = gpu.types.GPUVertBuf(len=6, format=fmt) + vbo.attr_fill(id="pos", data=vertex_positions) + vbo.attr_fill(id="normal", data=vertex_normals) This vertex buffer could be used to draw 6 points, 3 separate lines, 5 consecutive lines, 2 separate triangles, ... E.g. in the case of lines, each two consecutive vertices define a line. @@ -42,19 +47,24 @@ Index Buffers Often triangles and lines share one or more vertices. With only a vertex buffer one would have to store all attributes for the these vertices multiple times. This is very inefficient because in a connected triangle mesh every vertex is used 6 times on average. -A more efficient approach would be to use an *Index Buffer* (IBO) (:class:`gpu.types.GPUIndexBuf`), sometimes referred to as *Element Buffer*. +A more efficient approach would be to use an *Index Buffer* (IBO) (:class:`gpu.types.GPUIndexBuf`), +sometimes referred to as *Element Buffer*. An *Index Buffer* is an array that references vertices based on their index in the vertex buffer. -For instance, to draw a rectangle composed of two triangles, one could use an index buffer:: - positions = ( - (-1, 1), (1, 1), - (-1, -1), (1, -1)) +For instance, to draw a rectangle composed of two triangles, one could use an index buffer. + +.. code-block:: python + + positions = ( + (-1, 1), (1, 1), + (-1, -1), (1, -1)) - indices = ((0, 1, 2), (2, 1, 3)) + indices = ((0, 1, 2), (2, 1, 3)) - ibo = gpu.types.GPUIndexBuf(type='TRIS', seq=indices) + ibo = gpu.types.GPUIndexBuf(type='TRIS', seq=indices) -Here the first tuple in `indices` describes which vertices should be used for the first triangle (same for the second tuple). +Here the first tuple in `indices` describes which vertices should be used for the first triangle +(same for the second tuple). Note how the diagonal vertices 1 and 2 are shared between both triangles. Shaders @@ -66,7 +76,8 @@ The most important ones are *Vertex Shaders* and *Fragment Shaders*. Typically multiple shaders are linked together into a *Program*. However, in the Blender Python API the term *Shader* refers to an OpenGL Program. Every :class:`gpu.types.GPUShader` consists of a vertex shader, a fragment shader and an optional geometry shader. -For common drawing tasks there are some built-in shaders accessible from :class:`gpu.shader.from_builtin` with an identifier such as `2D_UNIFORM_COLOR` or `3D_FLAT_COLOR`. +For common drawing tasks there are some built-in shaders accessible from :class:`gpu.shader.from_builtin` +with an identifier such as `2D_UNIFORM_COLOR` or `3D_FLAT_COLOR`. Every shader defines a set of attributes and uniforms that have to be set in order to use the shader. Attributes are properties that are set using a vertex buffer and can be different for individual vertices. @@ -89,14 +100,18 @@ Offscreen Rendering +++++++++++++++++++ What one can see on the screen after rendering is called the *Front Buffer*. -When draw calls are issued, batches are drawn on a *Back Buffer* that will only be displayed when all drawing is done and the current back buffer will become the new front buffer. -Sometimes, one might want to draw the batches into a distinct buffer that could be used as texture to display on another object or to be saved as image on disk. +When draw calls are issued, batches are drawn on a *Back Buffer* that will only be displayed +when all drawing is done and the current back buffer will become the new front buffer. +Sometimes, one might want to draw the batches into a distinct buffer that could be used as +texture to display on another object or to be saved as image on disk. This is called Offscreen Rendering. In Blender Offscreen Rendering is done using the :class:`gpu.types.GPUOffScreen` type. .. warning:: - `GPUOffScreen` objects are bound to the OpenGL context they have been created in. - This means that once Blender discards this context (i.e. the window is closed), the offscreen instance will be freed. + + `GPUOffScreen` objects are bound to the OpenGL context they have been created in. + This means that once Blender discards this context (i.e. the window is closed), + the offscreen instance will be freed. Examples ++++++++ @@ -104,4 +119,4 @@ Examples To try these examples, just copy them into Blenders text editor and execute them. To keep the examples relatively small, they just register a draw function that can't easily be removed anymore. Blender has to be restarted in order to delete the draw handlers. -"""
\ No newline at end of file +""" diff --git a/doc/python_api/examples/gpu.10.py b/doc/python_api/examples/gpu.10.py index aa5574c44bb..6e7a3f6db6f 100644 --- a/doc/python_api/examples/gpu.10.py +++ b/doc/python_api/examples/gpu.10.py @@ -3,7 +3,8 @@ Rendering the 3D View into a Texture ------------------------------------ The scene has to have a camera for this example to work. -You could also make this independent of a specific camera, but Blender does not expose good functions to create view and projection matrices yet. +You could also make this independent of a specific camera, +but Blender does not expose good functions to create view and projection matrices yet. """ import bpy import bgl @@ -15,6 +16,7 @@ HEIGHT = 256 offscreen = gpu.types.GPUOffScreen(WIDTH, HEIGHT) + def draw(): context = bpy.context scene = context.scene @@ -35,4 +37,5 @@ def draw(): bgl.glDisable(bgl.GL_DEPTH_TEST) draw_texture_2d(offscreen.color_texture, (10, 10), WIDTH, HEIGHT) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL')
\ No newline at end of file + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL') diff --git a/doc/python_api/examples/gpu.11.py b/doc/python_api/examples/gpu.11.py index 61e7a842a59..2f255b7127d 100644 --- a/doc/python_api/examples/gpu.11.py +++ b/doc/python_api/examples/gpu.11.py @@ -3,8 +3,9 @@ Custom Shader for dotted 3D Line -------------------------------- In this example the arc length (distance to the first point on the line) is calculated in every vertex. -Between the vertex and fragment shader that value is automatically interpolated for all points that will be visible on the screen. -In the fragment shader the `sin` of the arc length is calculated. +Between the vertex and fragment shader that value is automatically interpolated +for all points that will be visible on the screen. +In the fragment shader the ``sin`` of the arc length is calculated. Based on the result a decision is made on whether the fragment should be drawn or not. """ import bpy @@ -47,9 +48,11 @@ for a, b in zip(coords[:-1], coords[1:]): arc_lengths.append(arc_lengths[-1] + (a - b).length) shader = gpu.types.GPUShader(vertex_shader, fragment_shader) -batch = batch_for_shader(shader, 'LINE_STRIP', - {"position" : coords, - "arcLength" : arc_lengths}) +batch = batch_for_shader( + shader, 'LINE_STRIP', + {"position": coords, "arcLength": arc_lengths}, +) + def draw(): shader.bind() @@ -58,4 +61,5 @@ def draw(): shader.uniform_float("u_Scale", 10) batch.draw(shader) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
\ No newline at end of file + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') diff --git a/doc/python_api/examples/gpu.2.py b/doc/python_api/examples/gpu.2.py index 8188110d096..d1e8ac32589 100644 --- a/doc/python_api/examples/gpu.2.py +++ b/doc/python_api/examples/gpu.2.py @@ -8,12 +8,13 @@ from gpu_extras.batch import batch_for_shader coords = [(1, 1, 1), (-2, 0, 0), (-2, -1, 3), (0, 1, 1)] shader = gpu.shader.from_builtin('3D_UNIFORM_COLOR') -batch = batch_for_shader(shader, 'LINES', {"pos" : coords}) +batch = batch_for_shader(shader, 'LINES', {"pos": coords}) + def draw(): shader.bind() shader.uniform_float("color", (1, 1, 0, 1)) batch.draw(shader) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') diff --git a/doc/python_api/examples/gpu.3.py b/doc/python_api/examples/gpu.3.py index 30f340c30ff..4bee9acebe3 100644 --- a/doc/python_api/examples/gpu.3.py +++ b/doc/python_api/examples/gpu.3.py @@ -32,7 +32,8 @@ fragment_shader = ''' coords = [(1, 1, 1), (2, 0, 0), (-2, -1, 3)] shader = gpu.types.GPUShader(vertex_shader, fragment_shader) -batch = batch_for_shader(shader, 'TRIS', {"position" : coords}) +batch = batch_for_shader(shader, 'TRIS', {"position": coords}) + def draw(): shader.bind() @@ -41,4 +42,5 @@ def draw(): shader.uniform_float("brightness", 0.5) batch.draw(shader) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
\ No newline at end of file + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') diff --git a/doc/python_api/examples/gpu.4.py b/doc/python_api/examples/gpu.4.py index 392f010e7c2..0c86b52bcf5 100644 --- a/doc/python_api/examples/gpu.4.py +++ b/doc/python_api/examples/gpu.4.py @@ -7,10 +7,10 @@ import gpu from gpu_extras.batch import batch_for_shader coords = ( - (-1, -1, -1), ( 1, -1, -1), - (-1, 1, -1), ( 1, 1, -1), - (-1, -1, 1), ( 1, -1, 1), - (-1, 1, 1), ( 1, 1, 1)) + (-1, -1, -1), (+1, -1, -1), + (-1, +1, -1), (+1, +1, -1), + (-1, -1, +1), (+1, -1, +1), + (-1, +1, +1), (+1, +1, +1)) indices = ( (0, 1), (0, 2), (1, 3), (2, 3), @@ -18,11 +18,13 @@ indices = ( (0, 4), (1, 5), (2, 6), (3, 7)) shader = gpu.shader.from_builtin('3D_UNIFORM_COLOR') -batch = batch_for_shader(shader, 'LINES', {"pos" : coords}, indices=indices) +batch = batch_for_shader(shader, 'LINES', {"pos": coords}, indices=indices) + def draw(): shader.bind() shader.uniform_float("color", (1, 0, 0, 1)) batch.draw(shader) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
\ No newline at end of file + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') diff --git a/doc/python_api/examples/gpu.5.py b/doc/python_api/examples/gpu.5.py index 7af3a518457..855f9a28e44 100644 --- a/doc/python_api/examples/gpu.5.py +++ b/doc/python_api/examples/gpu.5.py @@ -14,20 +14,23 @@ mesh.calc_loop_triangles() vertices = np.empty((len(mesh.vertices), 3), 'f') indices = np.empty((len(mesh.loop_triangles), 3), 'i') -mesh.vertices.foreach_get("co", - np.reshape(vertices, len(mesh.vertices) * 3)) -mesh.loop_triangles.foreach_get("vertices", - np.reshape(indices, len(mesh.loop_triangles) * 3)) +mesh.vertices.foreach_get( + "co", np.reshape(vertices, len(mesh.vertices) * 3)) +mesh.loop_triangles.foreach_get( + "vertices", np.reshape(indices, len(mesh.loop_triangles) * 3)) vertex_colors = [(random(), random(), random(), 1) for _ in range(len(mesh.vertices))] shader = gpu.shader.from_builtin('3D_SMOOTH_COLOR') -batch = batch_for_shader(shader, 'TRIS', - {"pos" : vertices, - "color" : vertex_colors}, - indices=indices) +batch = batch_for_shader( + shader, 'TRIS', + {"pos": vertices, "color": vertex_colors}, + indices=indices, +) + def draw(): batch.draw(shader) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
\ No newline at end of file + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') diff --git a/doc/python_api/examples/gpu.6.py b/doc/python_api/examples/gpu.6.py index df28d801960..2edde46a364 100644 --- a/doc/python_api/examples/gpu.6.py +++ b/doc/python_api/examples/gpu.6.py @@ -14,11 +14,13 @@ indices = ( (0, 1, 2), (2, 1, 3)) shader = gpu.shader.from_builtin('2D_UNIFORM_COLOR') -batch = batch_for_shader(shader, 'TRIS', {"pos" : vertices}, indices=indices) +batch = batch_for_shader(shader, 'TRIS', {"pos": vertices}, indices=indices) + def draw(): shader.bind() shader.uniform_float("color", (0, 0.5, 0.5, 1.0)) batch.draw(shader) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL')
\ No newline at end of file + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL') diff --git a/doc/python_api/examples/gpu.7.py b/doc/python_api/examples/gpu.7.py index 486ed5fd411..69af65e163e 100644 --- a/doc/python_api/examples/gpu.7.py +++ b/doc/python_api/examples/gpu.7.py @@ -13,13 +13,18 @@ IMAGE_NAME = "Untitled" image = bpy.data.images[IMAGE_NAME] shader = gpu.shader.from_builtin('2D_IMAGE') -batch = batch_for_shader(shader, 'TRI_FAN', - {"pos" : ((100, 100), (200, 100), (200, 200), (100, 200)), - "texCoord" : ((0, 0), (1, 0), (1, 1), (0, 1))}) +batch = batch_for_shader( + shader, 'TRI_FAN', + { + "pos": ((100, 100), (200, 100), (200, 200), (100, 200)), + "texCoord": ((0, 0), (1, 0), (1, 1), (0, 1)), + }, +) if image.gl_load(): raise Exception() + def draw(): bgl.glActiveTexture(bgl.GL_TEXTURE0) bgl.glBindTexture(bgl.GL_TEXTURE_2D, image.bindcode) @@ -28,4 +33,5 @@ def draw(): shader.uniform_int("image", 0) batch.draw(shader) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL')
\ No newline at end of file + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL') diff --git a/doc/python_api/examples/gpu.8.py b/doc/python_api/examples/gpu.8.py index 7e41164fc7e..56cbb93c61a 100644 --- a/doc/python_api/examples/gpu.8.py +++ b/doc/python_api/examples/gpu.8.py @@ -2,10 +2,10 @@ Generate a texture using Offscreen Rendering -------------------------------------------- -1. Create an :class:`gpu.types.GPUOffScreen` object. -2. Draw some circles into it. -3. Make a new shader for drawing a planar texture in 3D. -4. Draw the generated texture using the new shader. +#. Create an :class:`gpu.types.GPUOffScreen` object. +#. Draw some circles into it. +#. Make a new shader for drawing a planar texture in 3D. +#. Draw the generated texture using the new shader. """ import bpy import gpu @@ -19,8 +19,7 @@ from gpu_extras.presets import draw_circle_2d offscreen = gpu.types.GPUOffScreen(512, 512) -offscreen.bind() -try: +with offscreen.bind(): bgl.glClear(bgl.GL_COLOR_BUFFER_BIT) with gpu.matrix.push_pop(): # reset matrices -> use normalized device coordinates [-1, 1] @@ -31,8 +30,6 @@ try: for i in range(-amount, amount + 1): x_pos = i / amount draw_circle_2d((x_pos, 0.0), (1, 1, 1, 1), 0.5, 200) -finally: - offscreen.unbind() # Drawing the generated texture in 3D space @@ -66,9 +63,13 @@ fragment_shader = ''' ''' shader = gpu.types.GPUShader(vertex_shader, fragment_shader) -batch = batch_for_shader(shader, 'TRI_FAN', - {"position" : ((-1, -1), (1, -1), (1, 1), (-1, 1)), - "uv" : ((0, 0), (1, 0), (1, 1), (0, 1))}) +batch = batch_for_shader( + shader, 'TRI_FAN', + { + "position": ((-1, -1), (1, -1), (1, 1), (-1, 1)), + "uv": ((0, 0), (1, 0), (1, 1), (0, 1)), + }, +) def draw(): @@ -81,4 +82,5 @@ def draw(): shader.uniform_float("image", 0) batch.draw(shader) -bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
\ No newline at end of file + +bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') diff --git a/doc/python_api/examples/gpu.9.py b/doc/python_api/examples/gpu.9.py index a281534765a..470bd8a2dad 100644 --- a/doc/python_api/examples/gpu.9.py +++ b/doc/python_api/examples/gpu.9.py @@ -6,7 +6,8 @@ This will create a new image with the given name. If it already exists, it will override the existing one. Currently almost all of the execution time is spent in the last line. -In the future this will hopefully be solved by implementing the Python buffer protocol for `bgl.Buffer` and `Image.pixels` (aka `bpy_prop_array`). +In the future this will hopefully be solved by implementing the Python buffer protocol +for :class:`bgl.Buffer` and :class:`bpy.types.Image.pixels` (aka ``bpy_prop_array``). """ import bpy import gpu @@ -23,8 +24,7 @@ RING_AMOUNT = 10 offscreen = gpu.types.GPUOffScreen(WIDTH, HEIGHT) -offscreen.bind() -try: +with offscreen.bind(): bgl.glClear(bgl.GL_COLOR_BUFFER_BIT) with gpu.matrix.push_pop(): # reset matrices -> use normalized device coordinates [-1, 1] @@ -36,17 +36,15 @@ try: (random.uniform(-1, 1), random.uniform(-1, 1)), (1, 1, 1, 1), random.uniform(0.1, 1), 20) - buffer = bgl.Buffer(bgl.GL_BYTE, WIDTH * HEIGHT * 4) bgl.glReadBuffer(bgl.GL_BACK) bgl.glReadPixels(0, 0, WIDTH, HEIGHT, bgl.GL_RGBA, bgl.GL_UNSIGNED_BYTE, buffer) -finally: - offscreen.unbind() - offscreen.free() + +offscreen.free() if not IMAGE_NAME in bpy.data.images: bpy.data.images.new(IMAGE_NAME, WIDTH, HEIGHT) image = bpy.data.images[IMAGE_NAME] image.scale(WIDTH, HEIGHT) -image.pixels = [v / 255 for v in buffer]
\ No newline at end of file +image.pixels = [v / 255 for v in buffer] diff --git a/doc/python_api/examples/gpu.shader.py b/doc/python_api/examples/gpu.shader.py index 7ffd3fe85c8..3c72e70378c 100644 --- a/doc/python_api/examples/gpu.shader.py +++ b/doc/python_api/examples/gpu.shader.py @@ -4,32 +4,33 @@ Built-in shaders All built-in shaders have the ``mat4 ModelViewProjectionMatrix`` uniform. The value of it can only be modified using the :class:`gpu.matrix` module. -""" 2D_UNIFORM_COLOR: - attributes: vec3 pos - uniforms: vec4 color + attributes: vec3 pos + uniforms: vec4 color 2D_FLAT_COLOR: - attributes: vec3 pos, vec4 color - uniforms: - + attributes: vec3 pos, vec4 color + uniforms: - 2D_SMOOTH_COLOR: - attributes: vec3 pos, vec4 color - uniforms: - + attributes: vec3 pos, vec4 color + uniforms: - 2D_IMAGE: - attributes: vec3 pos, vec2 texCoord - uniforms: sampler2D image + attributes: vec3 pos, vec2 texCoord + uniforms: sampler2D image 3D_UNIFORM_COLOR: - attributes: vec3 pos - uniforms: vec4 color + attributes: vec3 pos + uniforms: vec4 color 3D_FLAT_COLOR: - attributes: vec3 pos, vec4 color - uniforms: - + attributes: vec3 pos, vec4 color + uniforms: - 3D_SMOOTH_COLOR: - attributes: vec3 pos, vec4 color - uniforms: - + attributes: vec3 pos, vec4 color + uniforms: - + +""" diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py index ae6e53491fd..299eebfe295 100644 --- a/doc/python_api/sphinx_doc_gen.py +++ b/doc/python_api/sphinx_doc_gen.py @@ -340,11 +340,11 @@ RST_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "rst")) # stored in ./rst/info_* INFO_DOCS = ( ("info_quickstart.rst", - "Blender/Python Quickstart: new to Blender/scripting and want to get your feet wet?"), + "Quickstart: new to Blender or scripting and want to get your feet wet?"), ("info_overview.rst", - "Blender/Python API Overview: a more complete explanation of Python integration"), + "API Overview: a more complete explanation of Python integration"), ("info_api_reference.rst", - "Blender/Python API Reference Usage: examples of how to use the API reference docs"), + "API Reference Usage: examples of how to use the API reference docs"), ("info_best_practice.rst", "Best Practice: Conventions to follow for writing good scripts"), ("info_tips_and_tricks.rst", @@ -1620,6 +1620,7 @@ def write_sphinx_conf_py(basepath): fw(" 'include__bmesh.rst',\n") fw("]\n\n") + fw("html_title = 'Blender %s Python API'\n" % BLENDER_VERSION_DOTS) fw("html_theme = 'sphinx_rtd_theme'\n") # not helpful since the source is generated, adds to upload size. fw("html_copy_source = False\n") @@ -1671,21 +1672,21 @@ def write_rst_contents(basepath): file = open(filepath, "w", encoding="utf-8") fw = file.write - fw(title_string("Blender Documentation Contents", "%", double=True)) + fw(title_string("Blender Python API Documentation", "%", double=True)) fw("\n") - fw("Welcome, this document is an API reference for Blender %s, built %s.\n" % + fw("Welcome to the API reference for Blender %s, built %s.\n" % (BLENDER_VERSION_DOTS, BLENDER_DATE)) fw("\n") # fw("`A PDF version of this document is also available <%s>`_\n" % BLENDER_PDF_FILENAME) - fw("This site can be downloaded for offline use `Download the full Documentation (zipped HTML files) <%s>`_\n" % + fw("This site can be downloaded for offline use: `Download the full Documentation (zipped HTML files) <%s>`_\n" % BLENDER_ZIP_FILENAME) fw("\n") if not EXCLUDE_INFO_DOCS: fw(".. toctree::\n") fw(" :maxdepth: 1\n") - fw(" :caption: Blender/Python Documentation\n\n") + fw(" :caption: Documentation\n\n") for info, info_desc in INFO_DOCS: fw(" %s <%s>\n" % (info_desc, info)) fw("\n") diff --git a/intern/cycles/kernel/geom/geom_triangle_intersect.h b/intern/cycles/kernel/geom/geom_triangle_intersect.h index 6b4fbcbbb7c..57f4c86d403 100644 --- a/intern/cycles/kernel/geom/geom_triangle_intersect.h +++ b/intern/cycles/kernel/geom/geom_triangle_intersect.h @@ -71,28 +71,23 @@ ccl_device_inline bool triangle_intersect(KernelGlobals *kg, } #ifdef __KERNEL_AVX2__ - #define cross256(A,B, C,D) _mm256_fmsub_ps(A,B, _mm256_mul_ps(C,D)) -#if defined(__KERNEL_CUDA__) && __CUDA_ARCH__ < 300 -ccl_device_inline -#else -ccl_device_forceinline -#endif -int ray_triangle_intersect8(KernelGlobals *kg, - float3 ray_P, - float3 ray_dir, - Intersection **isect, - uint visibility, - int object, - __m256 *triA, - __m256 *triB, - __m256 *triC, - int prim_addr, - int prim_num, - uint *num_hits, - uint max_hits, - int *num_hits_in_instance, - float isec_t) +ccl_device_inline int ray_triangle_intersect8( + KernelGlobals *kg, + float3 ray_P, + float3 ray_dir, + Intersection **isect, + uint visibility, + int object, + __m256 *triA, + __m256 *triB, + __m256 *triC, + int prim_addr, + int prim_num, + uint *num_hits, + uint max_hits, + int *num_hits_in_instance, + float isect_t) { const unsigned char prim_num_mask = (1 << prim_num) - 1; @@ -108,10 +103,6 @@ int ray_triangle_intersect8(KernelGlobals *kg, const __m256 dirz256 = _mm256_set1_ps(ray_dir.z); /* Calculate vertices relative to ray origin. */ - /* const float3 v0 = tri_c - P; - const float3 v1 = tri_a - P; - const float3 v2 = tri_b - P; */ - __m256 v0_x_256 = _mm256_sub_ps(triC[0], Px256); __m256 v0_y_256 = _mm256_sub_ps(triC[1], Py256); __m256 v0_z_256 = _mm256_sub_ps(triC[2], Pz256); @@ -136,11 +127,7 @@ int ray_triangle_intersect8(KernelGlobals *kg, __m256 v1_v2_y_256 = _mm256_add_ps(v1_y_256, v2_y_256); __m256 v1_v2_z_256 = _mm256_add_ps(v1_z_256, v2_z_256); - /* Calculate triangle edges. - const float3 e0 = v2 - v0; - const float3 e1 = v0 - v1; - const float3 e2 = v1 - v2;*/ - + /* Calculate triangle edges. */ __m256 e0_x_256 = _mm256_sub_ps(v2_x_256, v0_x_256); __m256 e0_y_256 = _mm256_sub_ps(v2_y_256, v0_y_256); __m256 e0_z_256 = _mm256_sub_ps(v2_z_256, v0_z_256); @@ -153,48 +140,32 @@ int ray_triangle_intersect8(KernelGlobals *kg, __m256 e2_y_256 = _mm256_sub_ps(v1_y_256, v2_y_256); __m256 e2_z_256 = _mm256_sub_ps(v1_z_256, v2_z_256); - /* Perform edge tests. - const float U = dot(cross(v2 + v0, e0), ray_dir); - const float V = dot(cross(v0 + v1, e1), ray_dir); - const float W = dot(cross(v1 + v2, e2), ray_dir);*/ - - //cross (AyBz - AzBy, AzBx -AxBz, AxBy - AyBx) + /* Perform edge tests. */ + /* cross (AyBz - AzBy, AzBx -AxBz, AxBy - AyBx) */ __m256 U_x_256 = cross256(v0_v2_y_256, e0_z_256, v0_v2_z_256, e0_y_256); __m256 U_y_256 = cross256(v0_v2_z_256, e0_x_256, v0_v2_x_256, e0_z_256); __m256 U_z_256 = cross256(v0_v2_x_256, e0_y_256, v0_v2_y_256, e0_x_256); - //vertical dot + /* vertical dot */ __m256 U_256 = _mm256_mul_ps(U_x_256, dirx256); - U_256 = _mm256_fmadd_ps(U_y_256, diry256, U_256); //_mm256_add_ps(U_256, _mm256_mul_ps(U_y_256, diry256)); - U_256 = _mm256_fmadd_ps(U_z_256, dirz256, U_256); //_mm256_add_ps(U_256, _mm256_mul_ps(U_z_256, dirz256)); + U_256 = _mm256_fmadd_ps(U_y_256, diry256, U_256); + U_256 = _mm256_fmadd_ps(U_z_256, dirz256, U_256); __m256 V_x_256 = cross256(v0_v1_y_256, e1_z_256, v0_v1_z_256, e1_y_256); __m256 V_y_256 = cross256(v0_v1_z_256, e1_x_256, v0_v1_x_256, e1_z_256); __m256 V_z_256 = cross256(v0_v1_x_256, e1_y_256, v0_v1_y_256, e1_x_256); - //vertical dot + /* vertical dot */ __m256 V_256 = _mm256_mul_ps(V_x_256, dirx256); - V_256 = _mm256_fmadd_ps(V_y_256, diry256, V_256);// _mm256_add_ps(V_256, _mm256_mul_ps(V_y_256, diry256)); - V_256 = _mm256_fmadd_ps(V_z_256, dirz256, V_256);// _mm256_add_ps(V_256, _mm256_mul_ps(V_z_256, dirz256)); + V_256 = _mm256_fmadd_ps(V_y_256, diry256, V_256); + V_256 = _mm256_fmadd_ps(V_z_256, dirz256, V_256); __m256 W_x_256 = cross256(v1_v2_y_256, e2_z_256, v1_v2_z_256, e2_y_256); __m256 W_y_256 = cross256(v1_v2_z_256, e2_x_256, v1_v2_x_256, e2_z_256); __m256 W_z_256 = cross256(v1_v2_x_256, e2_y_256, v1_v2_y_256, e2_x_256); - //vertical dot + /* vertical dot */ __m256 W_256 = _mm256_mul_ps(W_x_256, dirx256); - W_256 = _mm256_fmadd_ps(W_y_256, diry256,W_256);//_mm256_add_ps(W_256, _mm256_mul_ps(W_y_256, diry256)); - W_256 = _mm256_fmadd_ps(W_z_256, dirz256,W_256);//_mm256_add_ps(W_256, _mm256_mul_ps(W_z_256, dirz256)); - - //const float minUVW = min(U, min(V, W)); - //const float maxUVW = max(U, max(V, W)); -#if 0 - __m256 minUVW_256 = _mm256_min_ps(U_256, _mm256_min_ps(V_256, W_256)); - __m256 maxUVW_256 = _mm256_max_ps(U_256, _mm256_max_ps(V_256, W_256)); - - //if(minUVW < 0.0f && maxUVW > 0.0f) - __m256i mask_minmaxUVW_256 = _mm256_and_si256( - _mm256_cmpgt_epi32(zero256, _mm256_castps_si256(minUVW_256)), - //_mm256_castps_si256(minUVW_256), - _mm256_cmpgt_epi32(_mm256_castps_si256(maxUVW_256), zero256)); -#else + W_256 = _mm256_fmadd_ps(W_y_256, diry256,W_256); + W_256 = _mm256_fmadd_ps(W_z_256, dirz256,W_256); + __m256i U_256_1 = _mm256_srli_epi32(_mm256_castps_si256(U_256), 31); __m256i V_256_1 = _mm256_srli_epi32(_mm256_castps_si256(V_256), 31); __m256i W_256_1 = _mm256_srli_epi32(_mm256_castps_si256(W_256), 31); @@ -204,9 +175,8 @@ int ray_triangle_intersect8(KernelGlobals *kg, const __m256i two256 = _mm256_set1_epi32(2); __m256i mask_minmaxUVW_256 = _mm256_or_si256( - _mm256_cmpeq_epi32(one256, UVW_256_1), - _mm256_cmpeq_epi32(two256, UVW_256_1) ); -#endif + _mm256_cmpeq_epi32(one256, UVW_256_1), + _mm256_cmpeq_epi32(two256, UVW_256_1)); unsigned char mask_minmaxUVW_pos = _mm256_movemask_ps(_mm256_castsi256_ps(mask_minmaxUVW_256)); if((mask_minmaxUVW_pos & prim_num_mask) == prim_num_mask) { //all bits set @@ -214,231 +184,187 @@ int ray_triangle_intersect8(KernelGlobals *kg, } /* Calculate geometry normal and denominator. */ - // const float3 Ng1 = cross(e1, e0); - //const Vec3vfM Ng1 = stable_triangle_normal(e2,e1,e0); - __m256 Ng1_x_256 = cross256(e1_y_256, e0_z_256, e1_z_256, e0_y_256); __m256 Ng1_y_256 = cross256(e1_z_256, e0_x_256, e1_x_256, e0_z_256); __m256 Ng1_z_256 = cross256(e1_x_256, e0_y_256, e1_y_256, e0_x_256); - //const float3 Ng = Ng1 + Ng1; Ng1_x_256 = _mm256_add_ps(Ng1_x_256, Ng1_x_256); Ng1_y_256 = _mm256_add_ps(Ng1_y_256, Ng1_y_256); Ng1_z_256 = _mm256_add_ps(Ng1_z_256, Ng1_z_256); - //const float den = dot3(Ng, dir); - //vertical dot + /* vertical dot */ __m256 den_256 = _mm256_mul_ps(Ng1_x_256, dirx256); - den_256 = _mm256_fmadd_ps(Ng1_y_256, diry256,den_256);//_mm256_add_ps(den_256, _mm256_mul_ps(Ng1_y_256, diry256)); - den_256 = _mm256_fmadd_ps(Ng1_z_256, dirz256,den_256);//_mm256_add_ps(den_256, _mm256_mul_ps(Ng1_z_256, dirz256)); - - // __m256i maskden256 = _mm256_cmpeq_epi32(_mm256_castps_si256(den_256), zero256); + den_256 = _mm256_fmadd_ps(Ng1_y_256, diry256,den_256); + den_256 = _mm256_fmadd_ps(Ng1_z_256, dirz256,den_256); /* Perform depth test. */ - //const float T = dot3(v0, Ng); __m256 T_256 = _mm256_mul_ps(Ng1_x_256, v0_x_256); - T_256 = _mm256_fmadd_ps(Ng1_y_256, v0_y_256,T_256);//_mm256_add_ps(T_256, _mm256_mul_ps(Ng1_y_256, v0_y_256)); - T_256 = _mm256_fmadd_ps(Ng1_z_256, v0_z_256,T_256);//_mm256_add_ps(T_256, _mm256_mul_ps(Ng1_z_256, v0_z_256)); + T_256 = _mm256_fmadd_ps(Ng1_y_256, v0_y_256,T_256); + T_256 = _mm256_fmadd_ps(Ng1_z_256, v0_z_256,T_256); - //const int sign_den = (__float_as_int(den) & 0x80000000); const __m256i c0x80000000 = _mm256_set1_epi32(0x80000000); __m256i sign_den_256 = _mm256_and_si256(_mm256_castps_si256(den_256), c0x80000000); - //const float sign_T = xor_signmask(T, sign_den); __m256 sign_T_256 = _mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(T_256), sign_den_256)); - /*if((sign_T < 0.0f) || mask_minmaxUVW_pos { return false;} */ unsigned char mask_sign_T = _mm256_movemask_ps(sign_T_256); if(((mask_minmaxUVW_pos | mask_sign_T) & prim_num_mask) == prim_num_mask) { return false; - } /**/ + } __m256 xor_signmask_256 = _mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(den_256), sign_den_256)); - ccl_align(32) float den8[8], U8[8], V8[8], T8[8], sign_T8[8], xor_signmask8[8]; ccl_align(32) unsigned int mask_minmaxUVW8[8]; - if(visibility == PATH_RAY_SHADOW_OPAQUE){ - __m256i mask_final_256 = _mm256_cmpeq_epi32(mask_minmaxUVW_256, zero256);//~mask_minmaxUVW_256 - - __m256i maskden256 = _mm256_cmpeq_epi32(_mm256_castps_si256(den_256), zero256); - - __m256i mask0 = _mm256_cmpgt_epi32(zero256, _mm256_castps_si256(sign_T_256)); - __m256 rayt_256 = _mm256_set1_ps((*isect)->t); - - __m256i mask1 = _mm256_cmpgt_epi32(_mm256_castps_si256(sign_T_256), - _mm256_castps_si256( - _mm256_mul_ps(_mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(den_256), sign_den_256)), rayt_256) - ) - ); - /* __m256i mask1 = _mm256_castps_si256(_mm256_cmp_ps(sign_T_256, - _mm256_mul_ps(_mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(den_256), sign_den_256)), rayt_256), - _CMP_GT_OS - ) );*/ - - mask0 = _mm256_or_si256(mask1, mask0); - //unsigned char mask = _mm256_movemask_ps(_mm256_castsi256_ps(mask0)); - //unsigned char maskden = _mm256_movemask_ps(_mm256_castsi256_ps(maskden256)); - //unsigned char mask_final = ((~mask) & (~maskden) & (~mask_minmaxUVW_pos)); - mask_final_256 = _mm256_andnot_si256(mask0, mask_final_256); //(~mask_minmaxUVW_pos) &(~mask) - mask_final_256 = _mm256_andnot_si256(maskden256, mask_final_256); //(~mask_minmaxUVW_pos) &(~mask) & (~maskden) - - unsigned char mask_final = _mm256_movemask_ps(_mm256_castsi256_ps(mask_final_256)); - if((mask_final & prim_num_mask) == 0) { //all bits NOT set - return false; - } /**/ - - unsigned long i = 0; -#if defined(_MSC_VER) - unsigned char res = _BitScanForward(&i, (unsigned long)mask_final); -#else - i = __builtin_ffs(mask_final)-1; -#endif - - den_256 = _mm256_rcp_ps(den_256); //inv_den - U_256 = _mm256_mul_ps(U_256, den_256); //*inv_den - V_256 = _mm256_mul_ps(V_256, den_256); //*inv_den - T_256 = _mm256_mul_ps(T_256, den_256); //*inv_den - - _mm256_store_ps(U8, U_256); - _mm256_store_ps(V8, V_256); - _mm256_store_ps(T8, T_256); - - - //here we assume (kernel_tex_fetch(__prim_visibility, (prim_addr +i)) & visibility) is always true - - (*isect)->u = U8[i]; - (*isect)->v = V8[i]; - (*isect)->t = T8[i]; - - (*isect)->prim = (prim_addr + i); - (*isect)->object = object; - (*isect)->type = PRIMITIVE_TRIANGLE; - - return true; + if(visibility == PATH_RAY_SHADOW_OPAQUE) { + __m256i mask_final_256 = _mm256_cmpeq_epi32(mask_minmaxUVW_256, zero256); + __m256i maskden256 = _mm256_cmpeq_epi32(_mm256_castps_si256(den_256), zero256); + __m256i mask0 = _mm256_cmpgt_epi32(zero256, _mm256_castps_si256(sign_T_256)); + __m256 rayt_256 = _mm256_set1_ps((*isect)->t); + __m256i mask1 = _mm256_cmpgt_epi32(_mm256_castps_si256(sign_T_256), + _mm256_castps_si256( + _mm256_mul_ps(_mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(den_256), sign_den_256)), rayt_256) + ) + ); + mask0 = _mm256_or_si256(mask1, mask0); + mask_final_256 = _mm256_andnot_si256(mask0, mask_final_256); //(~mask_minmaxUVW_pos) &(~mask) + mask_final_256 = _mm256_andnot_si256(maskden256, mask_final_256); //(~mask_minmaxUVW_pos) &(~mask) & (~maskden) + unsigned char mask_final = _mm256_movemask_ps(_mm256_castsi256_ps(mask_final_256)); + if((mask_final & prim_num_mask) == 0) { + return false; } + const int i = __bsf(mask_final); + __m256 inv_den_256 = _mm256_rcp_ps(den_256); + U_256 = _mm256_mul_ps(U_256, inv_den_256); + V_256 = _mm256_mul_ps(V_256, inv_den_256); + T_256 = _mm256_mul_ps(T_256, inv_den_256); + _mm256_store_ps(U8, U_256); + _mm256_store_ps(V8, V_256); + _mm256_store_ps(T8, T_256); + /* NOTE: Here we assume visibility for all triangles in the node is + * the same. */ + (*isect)->u = U8[i]; + (*isect)->v = V8[i]; + (*isect)->t = T8[i]; + (*isect)->prim = (prim_addr + i); + (*isect)->object = object; + (*isect)->type = PRIMITIVE_TRIANGLE; + return true; + } else { - _mm256_store_ps(den8, den_256); - _mm256_store_ps(U8, U_256); - _mm256_store_ps(V8, V_256); - _mm256_store_ps(T8, T_256); + _mm256_store_ps(den8, den_256); + _mm256_store_ps(U8, U_256); + _mm256_store_ps(V8, V_256); + _mm256_store_ps(T8, T_256); - _mm256_store_ps(sign_T8, sign_T_256); - _mm256_store_ps(xor_signmask8, xor_signmask_256); - _mm256_store_si256((__m256i*)mask_minmaxUVW8, mask_minmaxUVW_256); + _mm256_store_ps(sign_T8, sign_T_256); + _mm256_store_ps(xor_signmask8, xor_signmask_256); + _mm256_store_si256((__m256i*)mask_minmaxUVW8, mask_minmaxUVW_256); - int ret = false; + int ret = false; - if(visibility == PATH_RAY_SHADOW) { - for(int i = 0; i < prim_num; i++) { - if(!mask_minmaxUVW8[i]) { + if(visibility == PATH_RAY_SHADOW) { + for(int i = 0; i < prim_num; i++) { + if(mask_minmaxUVW8[i]) { + continue; + } #ifdef __VISIBILITY_FLAG__ - if(kernel_tex_fetch(__prim_visibility, (prim_addr + i)) & visibility) + if((kernel_tex_fetch(__prim_visibility, (prim_addr + i)) & visibility) == 0) { + continue; + } #endif - { - if((sign_T8[i] >= 0.0f) && - (sign_T8[i] <= (*isect)->t * xor_signmask8[i])) - { - if(den8[i]) { - const float inv_den = 1.0f / den8[i]; - - (*isect)->u = U8[i] * inv_den; - (*isect)->v = V8[i] * inv_den; - (*isect)->t = T8[i] * inv_den; - - (*isect)->prim = (prim_addr + i); - (*isect)->object = object; - (*isect)->type = PRIMITIVE_TRIANGLE; - - int prim = kernel_tex_fetch(__prim_index, (*isect)->prim); - int shader = 0; - + if((sign_T8[i] < 0.0f) || + (sign_T8[i] > (*isect)->t * xor_signmask8[i])) + { + continue; + } + if(!den8[i]) { + continue; + } + const float inv_den = 1.0f / den8[i]; + (*isect)->u = U8[i] * inv_den; + (*isect)->v = V8[i] * inv_den; + (*isect)->t = T8[i] * inv_den; + (*isect)->prim = (prim_addr + i); + (*isect)->object = object; + (*isect)->type = PRIMITIVE_TRIANGLE; + const int prim = kernel_tex_fetch(__prim_index, (*isect)->prim); + int shader = 0; #ifdef __HAIR__ - if(kernel_tex_fetch(__prim_type, (*isect)->prim) & PRIMITIVE_ALL_TRIANGLE) + if(kernel_tex_fetch(__prim_type, (*isect)->prim) & PRIMITIVE_ALL_TRIANGLE) #endif - { - shader = kernel_tex_fetch(__tri_shader, prim); - } + { + shader = kernel_tex_fetch(__tri_shader, prim); + } #ifdef __HAIR__ - else { - float4 str = kernel_tex_fetch(__curves, prim); - shader = __float_as_int(str.z); - } + else { + float4 str = kernel_tex_fetch(__curves, prim); + shader = __float_as_int(str.z); + } #endif - int flag = kernel_tex_fetch(__shaders, (shader & SHADER_MASK)).flags; - - /* if no transparent shadows, all light is blocked */ - if(!(flag & SD_HAS_TRANSPARENT_SHADOW)) { - return 2; - } - /* if maximum number of hits reached, block all light */ - else if(*num_hits == max_hits) { - return 2; - } - /* move on to next entry in intersections array */ - ret = true; - - (*isect)++; - (*num_hits)++; - - (*num_hits_in_instance)++; - - (*isect)->t = isec_t; - - } //den - } //if sign - } //vis - }//if mask - } //for + const int flag = kernel_tex_fetch(__shaders, (shader & SHADER_MASK)).flags; + /* If no transparent shadows, all light is blocked. */ + if(!(flag & SD_HAS_TRANSPARENT_SHADOW)) { + return 2; + } + /* If maximum number of hits reached, block all light. */ + else if(num_hits == NULL || *num_hits == max_hits) { + return 2; + } + /* Move on to next entry in intersections array. */ + ret = true; + (*isect)++; + (*num_hits)++; + (*num_hits_in_instance)++; + (*isect)->t = isect_t; + } } - else { //default case + else { for(int i = 0; i < prim_num; i++) { - if(!mask_minmaxUVW8[i]) { + if(mask_minmaxUVW8[i]) { + continue; + } #ifdef __VISIBILITY_FLAG__ - if(kernel_tex_fetch(__prim_visibility, (prim_addr + i)) & visibility) + if((kernel_tex_fetch(__prim_visibility, (prim_addr + i)) & visibility) == 0) { + continue; + } #endif - { - if((sign_T8[i] >= 0.0f) && - (sign_T8[i] <= (*isect)->t * xor_signmask8[i])) - { - if(den8[i]) { - const float inv_den = 1.0f / den8[i]; - - (*isect)->u = U8[i] * inv_den; - (*isect)->v = V8[i] * inv_den; - (*isect)->t = T8[i] * inv_den; - - (*isect)->prim = (prim_addr + i); - (*isect)->object = object; - (*isect)->type = PRIMITIVE_TRIANGLE; - - ret = true; - } //den - } //if sign - } //vis - }//if mask - } //for - } //default - return ret; -}// else PATH_RAY_SHADOW_OPAQUE - + if((sign_T8[i] < 0.0f) || + (sign_T8[i] > (*isect)->t * xor_signmask8[i])) + { + continue; + } + if(!den8[i]) { + continue; + } + const float inv_den = 1.0f / den8[i]; + (*isect)->u = U8[i] * inv_den; + (*isect)->v = V8[i] * inv_den; + (*isect)->t = T8[i] * inv_den; + (*isect)->prim = (prim_addr + i); + (*isect)->object = object; + (*isect)->type = PRIMITIVE_TRIANGLE; + ret = true; + } + } + return ret; + } } -//vz static -ccl_device_inline -int triangle_intersect8(KernelGlobals *kg, - Intersection **isect, - float3 P, - float3 dir, - uint visibility, - int object, - int prim_addr, - int prim_num, - uint *num_hits, - uint max_hits, - int *num_hits_in_instance, - float isec_t) +ccl_device_inline int triangle_intersect8( + KernelGlobals *kg, + Intersection **isect, + float3 P, + float3 dir, + uint visibility, + int object, + int prim_addr, + int prim_num, + uint *num_hits, + uint max_hits, + int *num_hits_in_instance, + float isect_t) { __m128 tri_a[8], tri_b[8], tri_c[8]; __m256 tritmp[12], tri[12]; @@ -540,7 +466,7 @@ int triangle_intersect8(KernelGlobals *kg, num_hits, max_hits, num_hits_in_instance, - isec_t); + isect_t); return result; } diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg index e94a26e3eda..2202aba44ba 100644 --- a/release/datafiles/blender_icons.svg +++ b/release/datafiles/blender_icons.svg @@ -2510,7 +2510,7 @@ </g> <rect style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect28448" width="0" height="0" x="217.25" y="263.5"/> </g> - <g inkscape:groupmode="layer" id="layer4" inkscape:label="sheet layout" style="display:inline" sodipodi:insensitive="true"> + <g inkscape:groupmode="layer" id="layer4" inkscape:label="sheet layout" style="display:inline"> <g style="display:inline;opacity:0.3;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" transform="translate(21)" id="g28552-1"> <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 536,14 v 0.75 h -1 v 1.5 h 1 V 17 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 16 h -1 v -1 h 1.5 v -1 z" id="path28554-7" inkscape:connector-curvature="0"/> <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 539,14 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" id="path28556-4" inkscape:connector-curvature="0"/> @@ -2907,6 +2907,111 @@ <path inkscape:connector-curvature="0" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 536,636 v 1 h 2 v 1 h -1 v 1 h 1 v -0.75 h 1 v -1.5 h -1 V 636 Z m 1,3 h -1 v 1 1 h 3 v -1 h -2 z" id="path41126-5"/> <path inkscape:connector-curvature="0" id="path41128-9" d="m 541,636 v 0.75 h -1 V 640 h 0.75 v 1 h 1.5 v -1 H 543 v -1 h -0.75 v -1 H 541 v -1 h 1.5 v -1 z m 0,3 h 1 v 1 h -1 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> <path style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 545,238 v 1 h 9 v 41 h -9 v 1 h 9 1 v -21 h 1 v -1 h -1 v -21 h -1 z" id="rect11044-9-4" sodipodi:nodetypes="ccccccccccccccc" inkscape:connector-curvature="0"/> + <g transform="rotate(-90,960,561)" style="display:inline;enable-background:new" id="g3789"> + <g id="g6242" transform="translate(5,-1)"> + <path id="path72434" d="m 1091,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <rect y="197" x="1124" height="5" width="1" id="rect72436" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path id="path72438" d="m 1049,197 v 4 h -1 v -1 h -1 v 1 h 0.75 v 1 h 1.5 v -1 h 0.75 v -4 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72440" d="m 1094,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72442" d="m 1070,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72446" d="m 1035,197 v 0.75 h -1 v 1.5 h 1 V 200 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 199 h -1 v -1 h 1.5 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72448" d="m 1059,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72450" d="m 1038,197 v 4.25 h 1 V 202 h 2 v -0.75 h 1 V 197 h -1 v 4 h -2 v -4 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72452" d="m 1043,197 v 5 h 1 1 v -0.5 h 1 V 200 h -0.75 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72454" d="m 1056,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72456" d="m 1051,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1114,197 v 5 h 1 2 v -1 h -2 v -4 z" id="path72458" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1065,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" id="path72460"/> + <path id="path72462" d="m 1076,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72464" d="m 1080,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1084,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" id="path72466"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1099,197 v 4.25 h 1 V 202 h 2 v -0.75 h 1 V 197 h -1 v 4 h -2 v -4 z" id="path72468"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1107,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" id="path72470"/> + <path id="path72472" d="m 1110,197 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path72474" d="m 1120,197 v 5 h 1 2 v -1 h -2 v -4 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1127,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" id="path72476"/> + <path id="path72478" d="m 1130,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1134,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path72480"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1140,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" id="path72482"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1143,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" id="path72484"/> + <path id="path72486" d="m 1147.75,201 v 1 H 1147 v 1 h 1 v -1 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path32008-7" d="m 977,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32010-4" d="m 981,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <rect y="197" x="985" height="5" width="1" id="rect32012-0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32015-9" d="m 988,197 v 0.75 h -1 v 1.5 h 1 V 200 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 199 h -1 v -1 h 1.5 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32017-4" d="m 994,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32019-8" d="m 1002,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32021-8" d="m 998,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32023-2" d="m 1007,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32026-4" d="m 1011,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1015,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path32029-5"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1020,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" id="path32031-5"/> + <rect y="197" x="1026" height="5" width="1" id="rect32033-1" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1029,197 v 0.75 h -1 v 1.5 h 1 V 200 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 199 h -1 v -1 h 1.5 v -1 z" id="path32035-7"/> + <path id="path72562" d="m 1158,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <rect y="197" x="1162" height="5" width="1" id="rect72564" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path id="path72576" d="m 1152,197 v 3.25 h 1 V 202 h 1 v -1.75 h 1 V 202 h 1 v -1.75 h 1 V 197 h -1 v 3 h -1 v -2 h -1 v 2 h -1 v -3 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72578" d="m 1210,197 v 2.25 h 1 V 202 h 1 v -2.75 h 1 V 197 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72580" d="m 1174.75,197 v 1 H 1174 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72582" d="m 1165,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1168,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" id="path72588"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1179,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" id="path72590"/> + <path id="path72592" d="m 1183,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1187,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" id="path72594"/> + <path id="path72596" d="m 1191,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v -1 z m 1,0 h 1 v 3 h 1 v -5 h -1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1197,197 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" id="path72598"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1201.75,197 v 1 H 1201 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" id="path72600"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1205,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path72602"/> + <rect style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect72604" width="1" height="5" x="1216" y="197"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1218,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" id="path72606"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1224.75,197 v 1 H 1224 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" id="path72608"/> + <path inkscape:connector-curvature="0" id="path72610" d="m 1228,197 v 5 h 1 2 v -1 h -2 v -4 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1233,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" id="path72612"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1237,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path72614"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1243,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" id="path72616"/> + <rect style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect72618" width="1" height="5" x="1254" y="197"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1248,197 v 3.25 h 1 V 202 h 1 v -1.75 h 1 V 202 h 1 v -1.75 h 1 V 197 h -1 v 3 h -1 v -2 h -1 v 2 h -1 v -3 z" id="path72620"/> + <path id="path72622" d="m 1260,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path72624" d="m 1256,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path32207-9-7" d="m 1267,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32209-6-7" d="m 1271,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32211-3-7" d="m 1275,197 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32213-7-3" d="m 1279,197 v 2.25 h 1 V 202 h 1 v -2.75 h 1 V 197 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32216-8-3" d="m 1283,197 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <rect style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect32218-8-5" width="1" height="5" x="1287" y="197"/> + <path inkscape:connector-curvature="0" id="path32220-2-9" d="m 1290,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32222-9-9" d="m 1293,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path32224-1-8" d="m 1297,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path id="path72678" d="m 1305,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1315,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" id="path72680" inkscape:connector-curvature="0"/> + <rect y="197" x="1303" height="5" width="1" id="rect72682" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <rect y="201" x="1319" height="1" width="1" id="rect72684" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + <path id="path72686" d="m 1310,197 v 5 h 1 v -2 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + </g> + <g id="g6265" transform="translate(1,2)"> + <path id="path32244-2" d="m 945.75,194 v 1 H 945 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path32246-0" d="m 949,194 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v -1 z m 1,0 h 1 v 3 h 1 v -5 h -1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path32248-9" d="m 955,194 v 5 h 1 1 v -0.5 h 1 V 197 h -0.75 v -1 H 958 v -1.25 h -1 V 194 h -1 z m 1,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path32250-7" d="m 959,194 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 H 962 v -1.25 h -1 V 194 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path32252-3" d="m 964,194 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path32254-7" d="m 968,194 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path32256-2" d="m 914.75,194 v 1 H 914 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 918,194 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path32258-6" inkscape:connector-curvature="0"/> + <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 923,194 v 1 3 1 h 2 v -0.75 h 1 v -3.5 h -1 V 194 Z m 1,1 h 1 v 3 h -1 z" id="path32260-0" inkscape:connector-curvature="0"/> + <path id="path32262-1" d="m 927,194 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 H 930 v -1.25 h -1 V 194 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path id="path32264-6" d="m 931,194 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 935,194 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" id="path32266-5" inkscape:connector-curvature="0"/> + <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 941,194 v 4 h -1 v -1 h -1 v 1 h 0.75 v 1 h 1.5 v -1 H 942 v -4 z" id="path32268-7" inkscape:connector-curvature="0"/> + <rect style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect32270-5" width="1" height="1" x="969" y="192"/> + <path sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc" id="path32272-1" d="m 886.9687,193 v 0.75 h -1 V 194 h -0.25 v 1 h -0.75 v 3 h 0.75 v 1 h 0.25 v 0.25 h 1 V 200 h 3 v -0.75 h 1 V 199 h 0.25 v -1 h 0.75 v -3 h -0.75 v -1 h -0.25 v -0.25 h -1 V 193 Z m 0,1 h 3 v 1 h 1 v 3 h -1 v 1 h -3 v -1 h -1 v -3 h 1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path sodipodi:nodetypes="ccccccccccccc" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 887.9687,195 v 0.75 h -1 v 1.5 h 1 V 198 h 1.25 v -1 h -1.25 v -1 h 1.25 v -1 z" id="path32274-2" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 898.7187,194 v 1 h -0.75 v 3 h 0.75 v 1 h 1.5 v -1 h 0.75 v -3 h -0.75 v -1 z m 0.25,1 h 1 v 3 h -1 z m 0.25,1 v 1 h 0.5 v -1 z" id="path72688"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 902.9687,194 v 1 h -1 v 1 h 1 v 3 h 1 v -5 z" id="path72690"/> + <path id="path72694" d="m 893.9687,194 v 1 h 2 v 1 h -1 v 1 h 1 v -0.75 h 1 v -1.5 h -1 V 194 Z m 1,3 h -1 v 1 1 h 3 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 909.9687,195 v 1 h 1 v -1 z m -0.2187,3 v 1 H 909 v 1 h 1 v -1 h 1 v -1 z" id="path72696"/> + <path inkscape:connector-curvature="0" id="path19551-18-1" d="m 905.75,194 v 1 h -0.5 v 1 h 0.5 v 1 H 905 v 1 h 0.75 v 1 h 1.5 v -1 H 908 v -1 h -0.75 v -1 h 0.5 v -1 h -0.5 v -1 z m 0.25,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/> + </g> + </g> </g> <g inkscape:groupmode="layer" id="layer8" inkscape:label="2.8" style="display:inline"> <g id="g10975" transform="translate(-378.00707,-293.99994)" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> @@ -2948,7 +3053,6 @@ <g transform="matrix(-1,0,0,1,761,0)" id="g23294" style="display:inline;enable-background:new"/> <g style="display:inline;enable-background:new" transform="rotate(90,681.00003,3.9999745)" id="g23519"/> <g id="g23547" style="display:inline;opacity:1;enable-background:new" transform="matrix(-1,0,0,1,985.8323,-544.99999)"/> - <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 342.5,159 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 12 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 12 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -12 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m 6,3 c 1.92707,0 3.5,1.57293 3.5,3.5 0,1.92707 -1.57293,3.5 -3.5,3.5 -1.92707,0 -3.5,-1.57293 -3.5,-3.5 0,-1.92707 1.57293,-3.5 3.5,-3.5 z" id="rect13348" inkscape:connector-curvature="0"/> <path sodipodi:nodetypes="cscc" id="path13146" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m 91.507377,483.0012 c 0,-2.142 1.888178,-3.5012 4.242623,-3.5012 h 1.75 4" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> <g transform="matrix(0.866668,0,0,0.866668,-9.466992,121.39943)" id="g16793" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384436;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g id="g16791" style="fill:#ffffff;stroke-width:1.15384436"> @@ -3067,8 +3171,6 @@ <path inkscape:connector-curvature="0" id="path10735" d="M 61.503911,123 A 6.5039066,6.5039066 0 0 1 55.000005,129.50391 6.5039066,6.5039066 0 0 1 48.496099,123 6.5039066,6.5039066 0 0 1 55.000005,116.4961 6.5039066,6.5039066 0 0 1 61.503911,123 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> <path sodipodi:nodetypes="sssss" inkscape:connector-curvature="0" id="path10739" d="m 61.503911,123 c 0,3.59202 -2.911894,6.50391 -6.503906,6.50391 -3.592012,0 -6.503906,-2.91189 -6.503906,-6.50391 0,-3.59201 2.911894,-6.5039 6.503906,-6.5039 3.592012,0 6.503906,2.91189 6.503906,6.5039 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.3;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> </g> - <path inkscape:connector-curvature="0" id="path10780" d="m 103.49999,122.99999 a 6.5000001,6.5000001 0 0 1 -6.500002,6.5 6.5000001,6.5000001 0 0 1 -6.5,-6.5 6.5000001,6.5000001 0 0 1 6.5,-6.5 6.5000001,6.5000001 0 0 1 6.500002,6.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> - <path inkscape:connector-curvature="0" id="path10788" d="m 94.51367,117 a 6.5000001,6.5000001 0 0 0 -0.513672,0.23633 V 120 h 3 v -3 z m 2.486328,3 v 3 h 3 v -3 z m 3,0 h 2.763672 a 6.5000001,6.5000001 0 0 0 -2.763672,-2.76172 z m 0,3 v 3 h 2.761722 A 6.5000001,6.5000001 0 0 0 103,125.49414 V 123 Z m 0,3 h -3 v 3 h 2.486328 a 6.5000001,6.5000001 0 0 0 0.513672,-0.23633 z m -3,0 v -3 h -3 v 3 z m -3,0 h -2.763672 a 6.5000001,6.5000001 0 0 0 2.763672,2.76172 z m 0,-3 v -3 h -2.761719 a 6.5000001,6.5000001 0 0 0 -0.238281,0.50586 V 123 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> <g style="display:inline;enable-background:new" id="g15737" transform="translate(49.999998,4.4999696e-6)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path style="display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:accumulate" d="m -20.5,583 v 3 c 0,1.66667 0,2.25 -1,3.5 v 2 h 1 1 l 2,-1.75 1.75,1.75 h 0.5 l 1.75,-1.75 1.75,1.75 h 1.25 v -2 -1 -5.5 c 0,-2.76 -2.24,-4.5 -5,-4.5 -2.76,0 -5,1.74 -5,4.5 z" id="path36693" sodipodi:nodetypes="csccccccccccccssc" inkscape:connector-curvature="0"/> <path id="path36695" d="m -17,583 v 1 h 1 v 1 h -2 v -2 z" style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new" sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0"/> @@ -3470,11 +3572,6 @@ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 16.500019,496.99999 A 1.4999817,1.4999918 0 0 0 18,498.49998 1.4999817,1.4999918 0 0 0 19.499982,496.99999 1.4999817,1.4999918 0 0 0 18,495.5 a 1.4999817,1.4999918 0 0 0 -1.499981,1.49999 z" id="path10651" inkscape:connector-curvature="0"/> <path sodipodi:nodetypes="cc" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 14.499317,504.49361 c 0,-0.53003 0.429679,-0.9597 0.959709,-0.9597" id="path12124" inkscape:connector-curvature="0"/> </g> - <g style="display:inline;opacity:1;enable-background:new" id="g12828-9" transform="translate(17.999998,3.0000045)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> - <path style="display:inline;fill:#ffffff;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" inkscape:connector-curvature="0" id="path12823-1" d="m 357.5,599.99999 c 0,1.35417 -1.14583,2.5 -2.5,2.5 -1.35417,0 -2.5,-1.14583 -2.5,-2.5 0,-1.35416 1.14583,-2.5 2.5,-2.5 1.35417,0 2.5,1.14584 2.5,2.5 z" class="st11"/> - <path style="display:inline;fill:#ffffff;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" d="m 353,602 -3.5,3.5" id="path12826-8" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/> - <path style="opacity:0.4;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="path12832-8" sodipodi:type="arc" sodipodi:cx="349.5" sodipodi:cy="605.5" sodipodi:rx="3" sodipodi:ry="3" sodipodi:start="0" sodipodi:end="4.712389" d="m 352.5,605.5 a 3,3 0 0 1 -1.85195,2.77164 3,3 0 0 1 -3.26937,-0.65032 3,3 0 0 1 -0.65032,-3.26937 A 3,3 0 0 1 349.5,602.5" sodipodi:open="true"/> - </g> <g transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;enable-background:new" id="g13451" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g id="g23046" style="opacity:1"> <path inkscape:connector-curvature="0" id="circle12697" d="m 16.501953,536.5 a 2.9985299,2.9985299 0 0 0 -2.998047,2.99805 2.9985299,2.9985299 0 0 0 2.998047,2.99804 A 2.9985299,2.9985299 0 0 0 19.5,539.49805 2.9985299,2.9985299 0 0 0 16.501953,536.5 Z m 0,0.49609 a 0.50005,0.50005 0 1 1 0,1 C 15.666793,537.99609 15,538.66288 15,539.49805 a 0.50005,0.50005 0 1 1 -1,0 c 0,-1.37561 1.126353,-2.50196 2.501953,-2.50196 z" style="opacity:0.98999999;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> @@ -3723,15 +3820,6 @@ <path inkscape:connector-curvature="0" id="path12522" d="m 418.5,186 a 6.5000004,6.5000004 0 0 1 -6.5,6.5 6.5000004,6.5000004 0 0 1 -6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,6.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.3;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 413.50001,186.00001 a 1.499999,1.499999 0 0 1 -1.5,1.5 1.499999,1.499999 0 0 1 -1.5,-1.5 1.499999,1.499999 0 0 1 1.5,-1.5 1.499999,1.499999 0 0 1 1.5,1.5 z" id="path12526" inkscape:connector-curvature="0"/> </g> - <g style="display:inline;opacity:1;enable-background:new" id="g5294-1" transform="translate(41.999988,-357)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 434.5,543 a 1.5000001,1.5000001 0 0 1 -1.5,1.5 1.5000001,1.5000001 0 0 1 -1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,1.5 z" id="path5168-0" inkscape:connector-curvature="0"/> - <path d="m 438.50001,538.5 h 1 z m -3,0 h 1 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path5188-0" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/> - <path d="m 438.50001,536.5 h 1 z m -3,0 h 1 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path5221-3" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/> - <path id="path5233-8" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 438.50001,547.5 h 1 z m -3,0 h 1 z" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/> - <path inkscape:connector-curvature="0" id="path5237-9" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 438.50001,549.5 h 1 z m -3,0 h 1 z" sodipodi:nodetypes="cccccc"/> - <path sodipodi:nodetypes="ccscc" inkscape:connector-curvature="0" d="M 433.50001,547.5 H 433 c -2.50853,0 -4.5,-2.01446 -4.5,-4.5 0,-2.48553 1.99147,-4.5009 4.5,-4.5009 l 0.50001,9e-4" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path5260-6"/> - <path id="path12602" style="opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="M 433.50001,536.5 H 433 c -2.32223,0 -4.46806,1.23889 -5.62917,3.25 -1.16111,2.01111 -1.16111,4.48889 0,6.5 1.16111,2.01111 3.30694,3.25 5.62917,3.25 h 0.50001" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsscc"/> - </g> <g id="g12636" style="display:inline;opacity:0.98999999;enable-background:new" transform="matrix(-1,0,0,1,1290,764.99979)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m 1262.5,-278.49979 -4,-7 -4,7 z" id="path12630" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/> <ellipse ry="1.0000036" rx="1" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="ellipse12632" cx="1253.5" cy="-287.49979"/> @@ -3822,12 +3910,6 @@ </g> <path inkscape:connector-curvature="0" id="path4281-8" d="m 389.5,390.5 v 4 h -4 v -4 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" sodipodi:nodetypes="ccccc"/> </g> - <g style="display:inline;opacity:1;enable-background:new" id="g8419-9" transform="translate(1279.001,-241)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> - <rect style="display:inline;opacity:0;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" id="rect8368-4" width="16" height="16" x="-1148" y="398"/> - <path sodipodi:open="true" d="m -1135.6854,405.58384 a 5.499999,5.5 0 0 1 -2.5743,6.18491 5.499999,5.5 0 0 1 -6.6399,-0.89021 5.499999,5.5 0 0 1 -0.8542,-6.64459 5.499999,5.5 0 0 1 6.1987,-2.54075" sodipodi:end="4.9782235" sodipodi:start="6.0227681" sodipodi:ry="5.5" sodipodi:rx="5.499999" sodipodi:cy="407" sodipodi:cx="-1141" sodipodi:type="arc" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" id="ellipse8370-9" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"/> - <rect ry="1" rx="1" y="403.5" x="-1139.5" height="2" width="2" id="rect8385-9" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> - <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8387-7" d="m -1137.75,403.75 3.749,-3.75" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/> - </g> <g id="g22955-6" transform="matrix(-1,0,0,1,110,-127.00001)" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <rect style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" id="rect22949-6" width="16" height="16" x="-63" y="535" rx="0" ry="0" transform="scale(-1,1)"/> <path sodipodi:nodetypes="cccccccccc" inkscape:connector-curvature="0" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 57.499996,537.50001 v 3 h -3 v -3 z m 4,10 v 3 h -3 v -3 z" id="path22951-5"/> @@ -4208,7 +4290,6 @@ <path inkscape:connector-curvature="0" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 304.25,349 h 7 l -2,2 h -7 z" id="path13647"/> <path id="path13652" d="m 312,356.75 v -7 l -2,2 v 7 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" inkscape:connector-curvature="0"/> </g> - <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 157.5,536 c -0.82251,0 -1.5,0.6775 -1.5,1.5 v 8 c 1e-5,0.41125 0.16922,0.78445 0.44141,1.05664 C 156.71359,546.82883 157.08875,547 157.5,547 h 0.5 c 0.45232,0 1,0.47106 1,0.99805 0,0.26349 -0.1383,0.51259 -0.33203,0.69726 C 158.47455,548.879 158.22499,549 158,549 v -0.5 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 -1.38664,0 -2.5,-1.11336 -2.5,-2.5 v -4 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 h -1 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 8 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 4 0.5 c 1.04866,-10e-4 2,-0.8716 2,-2.00195 V 546.5 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 h -1.5 -0.5 c -0.28206,0 -0.5,-0.21794 -0.5,-0.5 0,-0.28206 0.21794,-0.5 0.5,-0.5 h 9 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 542 h -2 v -3 h 2 v -2.5 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m -0.5,1 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m -8,2 h 3 v 3 h -3 z m 4,0 h 3 v 3 h -3 z m -4,4 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z" id="path13810" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> <g style="display:inline;enable-background:new" transform="rotate(-90,349.00001,354)" id="g13933" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <g id="g13929" transform="translate(21,-21)"> <path id="path13917" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 304.5,360.5 9,-2" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/> @@ -4231,10 +4312,6 @@ </g> <path inkscape:connector-curvature="0" id="path13692" d="m 490.53675,227.48742 c 1.26521,1.13004 2.31955,3.01344 5.48257,3.01344 3.16302,0 4.21736,-1.8834 5.48257,-3.01344" style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="csc" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> <circle style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" id="path13733" cx="540.5" cy="267.5" r="4" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> - <g style="display:inline;enable-background:new" transform="translate(41.999998,4.4999696e-6)" id="g13710" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> - <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 406.75,66.5 h 10.5 c 1,0 1.79167,-1.25 0.75,-2.5 l -4.5,-5.5 v -3 l 1,-1 v -1 h -5 v 1 l 1,1 v 3 L 406,64 c -1,1.25 -0.25,2.5 0.75,2.5 z" id="path13700" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/> - <path style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 410,62.5 -1.75,2 h 7.5 l -1.75,-2 z" id="path13708" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/> - </g> <g transform="translate(-405.99706,-183.50454)" id="g13642" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> <path style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 695.49706,256.50454 c -1.933,0 -3.5,1.567 -3.5,3.5 0,1.933 1.567,3.5 3.5,3.5 1.933,0 3.5,-1.567 3.5,-3.5 0,-1.933 -1.567,-3.5 -3.5,-3.5 z m -0.5,1 h 1 v 2 h 2 v 1 h -2 v 2 h -1 v -2 h -2 v -1 h 2 z" id="path13640" inkscape:connector-curvature="0" sodipodi:nodetypes="sssssccccccccccccc"/> </g> @@ -4319,10 +4396,6 @@ <path sodipodi:nodetypes="ccc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 92.5,326.5 4.5,5.5 4.5,-5.5" id="path14250" inkscape:connector-curvature="0"/> <path id="path14254" d="m 91.25,334 c -0.683851,0 -1.25,0.56615 -1.25,1.25 v 3.5 c 0,0.68385 0.566149,1.25 1.25,1.25 h 3.5 c 0.683851,0 1.25,-0.56615 1.25,-1.25 v -3.5 C 96,334.56615 95.433851,334 94.75,334 Z m 8,0 c -0.683851,0 -1.25,0.56615 -1.25,1.25 v 3.5 c 0,0.68385 0.566149,1.25 1.25,1.25 h 3.5 c 0.68385,0 1.25,-0.56615 1.25,-1.25 v -3.5 c 0,-0.68385 -0.56615,-1.25 -1.25,-1.25 z m -7.75,4 h 2 1 a 0.50005,0.50005 0 1 1 0,1 h -1 -2 a 0.50005,0.50005 0 1 1 0,-1 z m 8,0 h 2 1 a 0.50005,0.50005 0 1 1 0,1 h -1 -2 a 0.50005,0.50005 0 1 1 0,-1 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" inkscape:connector-curvature="0"/> </g> - <g transform="translate(-1.8536743e-6,4.4999696e-6)" id="g12821-4" style="display:inline;opacity:0.6;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> - <path class="st11" d="m 355.5,602 c 0,1.35416 -1.14583,2.5 -2.5,2.5 -1.35417,0 -2.5,-1.14584 -2.5,-2.5 0,-1.35417 1.14583,-2.5 2.5,-2.5 1.35417,0 2.5,1.14583 2.5,2.5 z" id="path2929-3" inkscape:connector-curvature="0" style="display:inline;fill:none;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"/> - <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="line3784-9" d="m 351,604 -8.5,8.5" style="display:inline;fill:#ffffff;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"/> - </g> <path sodipodi:nodetypes="cccccccccccc" d="m 19.507198,125.50712 v 4 h -4 m -9.0071,-4 v 4 h 4 m 9.0071,-9.00707 v -4 h -4 m -9.0071,4 v -4 h 4" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path13927" inkscape:connector-curvature="0"/> <path id="path14341" style="display:inline;opacity:1;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" d="m 49.499998,12.500004 h -1 m 3,4 h -1 m 3,3 h -1 m 4,3.000001 h -1 m 3,1 h -1.5 m 4.5,1 h -2" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccc"/> <g transform="matrix(-1,0,0,1,1290,302.99979)" style="display:inline;opacity:0.98999999;enable-background:new" id="g8530-0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> @@ -4469,14 +4542,6 @@ <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 478.14648,418.14648 -3,3 c -0.31399,0.31533 -0.0915,0.85354 0.35352,0.85352 h 3 2 c 0.27591,-1.9e-4 0.49982,-0.22409 0.5,-0.5 v -3 c -7e-5,-0.28163 -0.23215,-0.50794 -0.51367,-0.5 h -2 c -0.12731,0.004 -0.24956,0.0566 -0.33985,0.14648 z" id="path12972" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccc"/> <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.75;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 477.49257,412.00014 c -0.12999,0.002 -0.25408,0.0546 -0.34596,0.14655 l -2.00065,1.99942 c -0.094,0.094 -0.14673,0.22146 -0.14655,0.35436 v 4.0001 c -2e-5,0.4458 0.53925,0.66879 0.85409,0.35316 l 3.99954,-4.00067 c 0.19472,-0.19518 0.19472,-0.51115 0,-0.70633 l -2.00009,-2.00004 c -0.0954,-0.0955 -0.2254,-0.14835 -0.36038,-0.14655 z" id="path12974" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccc"/> </g> - <g transform="translate(-84.000014,21.000005)" style="display:inline;enable-background:new" id="g9974-4"> - <path inkscape:connector-curvature="0" id="path14003" d="M 391.98438,535.98633 C 391.43286,535.99495 390.99245,536.44847 391,537 v 1.51367 c -10e-6,0.002 -10e-6,0.004 0,0.006 0.008,1.37595 0.83084,2.56107 2,3.125 V 548.5 c -0.0287,2.02848 3.02869,2.02848 3,0 v -6.85352 c 1.17556,-0.56682 2,-1.76346 2,-3.14648 V 537 c 0.0191,-1.35232 -2.01913,-1.35232 -2,0 v 1.5 c 0,0.11423 -0.0139,0.22371 -0.0371,0.33008 l -1.13281,1.13281 -0.66211,-0.002 -1.13086,-1.13086 c -0.0226,-0.10381 -0.0365,-0.2109 -0.0371,-0.32227 V 537 c 0.008,-0.56377 -0.45187,-1.02247 -1.01562,-1.01367 z M 394,548 h 1 v 1 h -1 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path inkscape:connector-curvature="0" d="M 386.49219,535.99219 A 0.50005,0.50005 0 0 0 386,536.5 v 6.5 h -1.5 a 0.50005,0.50005 0 1 0 0,1 h 1.91992 a 0.50005,0.50005 0 0 0 0.16211,0 H 388.5 a 0.50005,0.50005 0 1 0 0,-1 H 387 v -6.5 a 0.50005,0.50005 0 0 0 -0.50781,-0.50781 z M 384.5,545 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 2 c 0,0.78517 0.31169,1.44054 0.78516,1.86719 0.47346,0.42664 1.08725,0.63281 1.69726,0.63281 0.61001,0 1.22902,-0.20449 1.71094,-0.62891 C 388.67528,548.94668 389,548.28953 389,547.5 v -2 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14013"/> - </g> - <g transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;enable-background:new" id="g10204"> - <path sodipodi:nodetypes="cccccccccccc" inkscape:connector-curvature="0" id="rect14891" d="m 385.5,159.5 v 4 3 4 h 4 7 v -3 h -8 v -5 h 8 v -3 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"/> - <circle r="1" cy="165" cx="391" id="path10200" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> - </g> <path id="rect13801" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 309.5,164.5 h 3 v 3 h -3 z m -8,3 h 3 v 3 h -3 z m 3,-9 h 3 v 3 h -3 z" inkscape:connector-curvature="0"/> <g style="display:inline;enable-background:new" id="g14472" transform="translate(-42.000002,4.4999696e-6)"> <path id="rect14387" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 373.5,158.5 h 3 v 3 h -3 z m -10,10 h 3 v 3 h -3 z" inkscape:connector-curvature="0"/> @@ -4540,21 +4605,6 @@ <ellipse cy="33.499996" cx="-154.5" id="ellipse12632-2" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" rx="0.99999642" ry="1.0000018" transform="scale(-1,1)"/> </g> <path id="path14294" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:new" d="m 282.5,378.5 10,-10" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/> - <g style="display:inline;enable-background:new" id="g14135" transform="translate(696.99456,-488.99997)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> - <g id="g14103"> - <path sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" id="path14068" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m -563.5,611.49287 v 5 m 1,-6 h 5 m -5,6.99995 h 5 m 1,-0.99995 v -5"/> - <path inkscape:connector-curvature="0" id="path14078" d="m -562.5,611.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> - <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -562.5,618.49999 v -2 h -2 v 2 z" id="path14080" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path14083" d="m -555.5,618.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> - <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -555.5,611.49999 v -2 h -2 v 2 z" id="path14093" inkscape:connector-curvature="0"/> - </g> - <g style="opacity:0.6" transform="translate(4,-4)" id="g14122"> - <path d="m -563.5,611.49287 v 1 m 1,-2 h 5 m -1,6.99995 h 1 m 1,-0.99995 v -5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path14105" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/> - <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -562.5,611.49999 v -2 h -2 v 2 z" id="path14109" inkscape:connector-curvature="0"/> - <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -555.5,618.49999 v -2 h -2 v 2 z" id="path14118" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path14120" d="m -555.5,611.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> - </g> - </g> <g style="display:inline;enable-background:new" id="g14429" transform="translate(-1.8536743e-6,42.000005)"> <path inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png" sodipodi:nodetypes="csc" id="path14357" d="m 198.5,337.5 c 3.75,2 7,0.75 7,-2.5 0,-2.25 -1.5,-4 -3,-6.5" style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/> <path inkscape:connector-curvature="0" d="m 202.49718,327.49495 h -1 v 1 h 1 z" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path14372" sodipodi:nodetypes="ccccc"/> @@ -4705,8 +4755,6 @@ <path inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" id="path13309" d="m 478.50037,161.49023 v 1 c -3.7e-4,2.75977 -7.00037,2.25977 -7,5 v 1" style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"/> <path style="display:inline;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" d="m 478.49966,161.49677 v -1 c 0,-0.9872 0,-2.00001 -3.5,-2 -3.5,1e-5 -3.5,1.0128 -3.5,2 l 3.7e-4,1.00323 3.00037,-0.01 -3.50074,0.007 c -0.25,0 -2.50037,0.003 -2.5,3.50303 1.7e-4,1.59588 0.4677,2.02832 1.00035,2.49997" id="path13311" sodipodi:nodetypes="ccsccccsc" inkscape:connector-curvature="0" inkscape:transform-center-x="1.500353" inkscape:transform-center-y="-1.503115"/> </g> - <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 369.5,162 c -1.92707,0 -3.5,1.57293 -3.5,3.5 0,1.92707 1.57293,3.5 3.5,3.5 1.92707,0 3.5,-1.57293 3.5,-3.5 0,-1.92707 -1.57293,-3.5 -3.5,-3.5 z" id="path13329" inkscape:connector-curvature="0" sodipodi:nodetypes="sssss"/> - <rect y="159.5" x="363.5" height="12" width="12" id="rect13350" style="display:inline;opacity:0.3;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"/> <circle style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" id="circle13367" cx="433" cy="123" r="2.5"/> <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g13384" transform="translate(-21.000002,-105)" style="display:inline;opacity:0.6;enable-background:new"> <rect style="display:inline;opacity:0;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="rect13372" width="16" height="16" x="236" y="325" rx="0" ry="0"/> @@ -4835,7 +4883,7 @@ </g> <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" d="m 94.499998,630.5 v -7 0 l 5,3.25 v 0.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14742"/> <path id="path14759" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 114.5,624.5 h 7 v 0 l -3.25,5 h -0.5 z" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc"/> - <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" d="m 136.5,630.5 v -7 0 l 5,3.25 v 0.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14762"/> + <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" d="m 141.5,630.5 v -7 0 l -5,3.25 v 0.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14762"/> <path id="path14764" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 163.5,629.5 h -7 v 0 l 3.25,-5 h 0.5 z" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc"/> <path style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m 241.25,624.5 h 4.5 l -2.25,4.75 z" id="path14837" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/> <g style="display:inline;enable-background:new" id="g13609" transform="translate(-187,-89.999995)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> @@ -4912,8 +4960,6 @@ <path inkscape:connector-curvature="0" d="m -162.48485,144.5 h 4 v 4 m -6,2 6,-6" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path20456" sodipodi:nodetypes="ccccc"/> </g> </g> - <path id="circle20487" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 454.25,455.5 c 0.25,-1.25 1.04248,-2.3927 2.23158,-2.82185 1.18911,-0.42915 2.51964,-0.0668 3.32697,0.90597 0.80734,0.9728 0.91821,2.34732 0.27724,3.43695 L 454.25,465.5 h -0.5 l -5.84808,-8.5 c -0.63059,-1.09223 -0.51073,-2.46223 0.29995,-3.42836 0.81068,-0.96613 2.13905,-1.32207 3.32419,-0.89072 C 452.7112,453.11227 453.5,454.25 453.75,455.5 Z" inkscape:connector-curvature="0" sodipodi:nodetypes="csscccccccc"/> - <path inkscape:connector-curvature="0" id="path20628" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 471.62109,452.50195 c -0.91158,-0.0366 -1.81191,0.34572 -2.41992,1.07032 -0.81068,0.96613 -0.92942,2.3355 -0.29883,3.42773 l 1.26172,1.83594 L 473.5,455.5 l 2,2 3,-3 2.56055,2.56055 0.0254,-0.0391 c 0.64097,-1.08963 0.52999,-2.4647 -0.27735,-3.4375 -0.80733,-0.97277 -2.13706,-1.3354 -3.32617,-0.90625 -1.1891,0.42915 -1.98242,1.57227 -2.23242,2.82227 h -0.5 c -0.25,-1.25 -1.03947,-2.38701 -2.22461,-2.81836 -0.29628,-0.10784 -0.60043,-0.16749 -0.9043,-0.17969 z M 478.5,458.5 l -3,3 -2,-2 -1.70508,1.70508 L 474.75,465.5 h 0.5 l 4.17969,-6.07031 z"/> <g style="display:inline;enable-background:new" id="g21550" transform="translate(-21.000002,189)"> <path inkscape:connector-curvature="0" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 498.49288,297.50712 h -9 v -9 L 498.5,288.5 Z" id="path21430" sodipodi:nodetypes="ccccc" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" sodipodi:nodetypes="ccccc" id="path21432" d="m 502.5,286.25 v 8 l -2,2 v -8 z" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0"/> @@ -4972,10 +5018,6 @@ <path sodipodi:nodetypes="ccccc" d="m 371.5,150.5 -8,-8 m 4.00002,8.00505 h 4 v -4" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path14485" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:connector-curvature="0" id="path14491" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 368.50001,137.50505 8,8 M 372.49999,137.5 h -4 v 4" sodipodi:nodetypes="ccccc"/> </g> - <g style="display:inline;enable-background:new" id="g20455" transform="rotate(-180,359.49632,417.00344)"> - <path inkscape:connector-curvature="0" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 281.49288,332.50712 2,-2 h 5 v 5 l -2,2 h -5 z" id="path20447" sodipodi:nodetypes="ccccccc" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> - <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" sodipodi:nodetypes="ccccccc" id="path20449" d="m 279.5,331.25 4.75,-4.75 8.24288,0.007 0.007,8.24288 -4.75,4.75 -8.25712,0.007 z" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0"/> - </g> <g style="display:inline;enable-background:new" id="g20430" transform="translate(41.999998,4.4999696e-6)"> <g id="g20456"> <path id="circle20459" transform="translate(-42)" d="m 469.08398,415.58594 c -0.81593,0.95753 -1.21878,2.22985 -1.04296,3.52148 0.24625,1.80912 1.56436,3.29294 3.33203,3.75 1.43669,0.37149 2.93514,-0.006 4.03515,-0.9414 -0.29636,0.0501 -0.5984,0.084 -0.9082,0.084 -0.38579,0 -0.76279,-0.0423 -1.12695,-0.11914 -0.56283,0.14546 -1.16207,0.15983 -1.75,0.008 -1.37737,-0.35614 -2.39992,-1.50634 -2.5918,-2.91601 -0.0626,-0.45958 -0.0236,-0.91417 0.0879,-1.34571 C 469.04268,417.26409 469,416.88831 469,416.50391 c 0,-0.31305 0.0328,-0.61873 0.084,-0.91797 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" inkscape:connector-curvature="0"/> @@ -5279,15 +5321,6 @@ </g> <rect transform="scale(-1,1)" y="284.5" x="-40.5" height="3" width="5" id="rect22200" style="opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> </g> - <g style="display:inline;opacity:1;enable-background:new" id="g16957-2" transform="matrix(0,-1,-1,0,556.00846,744.00467)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" id="path16943-7" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path16945-5" d="m 467.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 478.49998,359.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" id="path16947-3" inkscape:connector-curvature="0"/> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" id="path16949-6" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path16951-1" d="m 468.49998,349.5 2e-5,5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> - <path inkscape:connector-curvature="0" id="path16953-0" d="m 478.5,359.5 h -5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> - <path inkscape:connector-curvature="0" id="path16955-3" d="m 472.5,355.5 4.99998,-5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> - </g> <g style="display:inline;opacity:1;enable-background:new" id="g21692" transform="translate(-1.8536743e-6,-41.999984)"> <g transform="translate(-63)" style="display:inline;opacity:1;stroke:#f9f9f9;enable-background:new" id="g21667"> <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f9f9f9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.5999999;stroke-opacity:1;marker:none;paint-order:normal" d="m 208.5,284.5 c 0,1.5 -1,2.76727 -2.91693,3.87401 -1.82216,1.05203 -4.5035,1.26353 -6.58307,1.12595 -2.07958,-0.13754 -3.5,-1 -3.5,-2" id="path21655" inkscape:connector-curvature="0" sodipodi:nodetypes="cssc"/> @@ -5460,40 +5493,6 @@ <path sodipodi:nodetypes="cccccc" inkscape:connector-curvature="0" d="M 185.52536,291.52503 187.5,289.5 m -3.97464,0.025 L 187.5,285.5 m -7,3 3,-3" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="path22765"/> <path inkscape:connector-curvature="0" d="m 174.49293,297.5 h 12" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path22770" sodipodi:nodetypes="cc"/> </g> - <g transform="translate(41.999998,126)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g22536" style="display:inline;enable-background:new"> - <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path22498" d="m 31.5,377.5 -4.00005,4.00001" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - <path inkscape:connector-curvature="0" id="path22500" d="m 31.5,377.5 h 9" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 31.5,377.5 v -9" id="path22502" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path22504" d="m 27.5,378.5 v 3 h 3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - <path inkscape:connector-curvature="0" id="path22506" d="m 29.5,370.5 2,-2 2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - <path inkscape:connector-curvature="0" id="path22534" d="m 38.5,375.5 2,2 -2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - </g> - <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g22880" style="display:inline;opacity:0.98999999;enable-background:new" transform="translate(-753,836.9998)"> - <path inkscape:connector-curvature="0" id="path22875" d="m 856.5,-272.99979 a 6.5000004,6.5000004 0 0 1 -6.5,6.5 6.5000004,6.5000004 0 0 1 -6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,6.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path sodipodi:nodetypes="ccccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path22878" d="m 848,-278.99979 -2,1 -2,2 h 1 l 1,1 1,1 v 2 h 2 v 1 l 1,1 v 2 c 0.16747,-0.0294 0.58327,0.0446 0.75,0 1.49768,-0.4013 2.25,-0.75 3.25,-2 l -2,-2 h -1 -1 l -1,-1 h -1 l 1,-1 h 1 l 2,-2 -1,-1 h -1 l -1,-1 1,-1 v -0.5 z" style="display:inline;opacity:0.98999999;fill:#ffffff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"/> - </g> - <g id="g15967"> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 246.5,564 a 2.5000002,2.5000002 0 0 1 -2.5,2.5 2.5000002,2.5000002 0 0 1 -2.5,-2.5 2.5000002,2.5000002 0 0 1 2.5,-2.5 2.5000002,2.5000002 0 0 1 2.5,2.5 z" id="path17035" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path17037" d="m 250.5,559 a 1.5000001,1.5000001 0 0 1 -1.5,1.5 1.5000001,1.5000001 0 0 1 -1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,1.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path d="m 250.47669,563.45043 a 6.4999542,6.4999495 0 0 1 -3.74196,6.44611 6.4999542,6.4999495 0 0 1 -7.33792,-1.30755 6.4999542,6.4999495 0 0 1 -1.28507,-7.34188 6.4999542,6.4999495 0 0 1 6.45754,-3.7222" sodipodi:open="true" sodipodi:end="4.800084" sodipodi:start="6.1985526" sodipodi:ry="6.4999495" sodipodi:rx="6.4999542" sodipodi:cy="563.99988" sodipodi:cx="244" sodipodi:type="arc" id="path17043" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> - </g> - <g transform="matrix(0,-1,-1,0,577,1038)" id="g12586" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> - <path inkscape:connector-curvature="0" id="path12572" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <g id="g23031" style="opacity:0.7"> - <path inkscape:connector-curvature="0" id="path12574" d="m 467.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 478.49998,359.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" id="path12576" inkscape:connector-curvature="0"/> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" id="path12578" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path12580" d="m 468.49998,349.5 2e-5,5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> - <path inkscape:connector-curvature="0" id="path12582" d="m 478.5,359.5 h -5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> - <path inkscape:connector-curvature="0" id="path12584" d="m 472.5,355.5 4.99998,-5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> - </g> - </g> - <path id="path22802" d="m 531.5,557 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 2.5 h 1 v -2 h 12 v 11 h -12 v -2 h -1 v 2.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 0.5 v 0.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 1 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 570 h 8 v 0.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 1 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 570 h 0.5 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -12 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m 1.5,2 v 9 h 10 v -9 z m 2.49414,0.99414 c 0.13548,0 0.26517,0.055 0.35938,0.15234 l 1.27148,1.27149 C 537.52056,561.15509 537.99223,561 538.5,561 c 0.50777,0 0.97944,0.15509 1.375,0.41797 l 1.27148,-1.27149 c 0.0907,-0.0928 0.21399,-0.14677 0.34375,-0.15039 0.45473,-0.0125 0.68856,0.53942 0.36329,0.85743 l -1.27149,1.27148 c 0.26288,0.39556 0.41797,0.86723 0.41797,1.375 0,0.50777 -0.15509,0.97944 -0.41797,1.375 l 1.27149,1.27148 c 0.4905,0.47127 -0.23578,1.19754 -0.70704,0.70704 L 539.875,565.58203 C 539.47944,565.84491 539.00777,566 538.5,566 c -0.50777,0 -0.97944,-0.15509 -1.375,-0.41797 l -1.27148,1.27149 c -0.47126,0.4905 -1.19754,-0.23577 -0.70704,-0.70704 l 1.27149,-1.27148 C 536.15509,564.47944 536,564.00777 536,563.5 c 0,-0.50777 0.15509,-0.97944 0.41797,-1.375 l -1.27149,-1.27148 c -0.32293,-0.31254 -0.10174,-0.85929 0.34766,-0.85938 z M 531,561 v 5 h 1 v -5 z m 7.5,1 c -0.83435,0 -1.5,0.66565 -1.5,1.5 0,0.83435 0.66565,1.5 1.5,1.5 0.83435,0 1.5,-0.66565 1.5,-1.5 0,-0.83435 -0.66565,-1.5 -1.5,-1.5 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccscccccsccccsccccsccccccccsssss"/> - <g id="g23083" style="display:inline;opacity:0.6;enable-background:new" transform="translate(126,252)"> - <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 510.5,557 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 2.5 h 1 v -0.5 -1.5 h 0.87891 l 1,-1 z m 6.4082,0 c 0.0558,0.15706 0.0918,0.3238 0.0918,0.5 v 0.5 h 6 v 11 h -6 v 0.5 c -2e-5,0.1762 -0.036,0.34294 -0.0918,0.5 H 521 v 0.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 1 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 570 h 0.5 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -12 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z M 510,561 v 5 h 1 v -5 z m 0,6 v 2.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 0.5 v 0.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 1 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -0.37891 L 511.87891,569 H 511 v -1.5 -0.5 z" transform="translate(-126,-252)" id="path22995"/> - <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="rect22997" d="m 386.5,307.5 2,-2 h 1 v 12 h -1 l -2,-2 z" style="opacity:0.8;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> - <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="path23075" d="m 388.5,307.5 v -2 h 1 v 12 h -1 v -2 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> - </g> <g style="display:inline;enable-background:new" id="g22484" transform="translate(-220,-220)"> <path id="path22480" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 334.5,777 c -0.15738,-3e-4 -0.30571,0.0735 -0.40039,0.19922 L 332.75,779 H 332 c -0.54535,0 -1,0.45465 -1,1 v 9 c 0,0.54535 0.45465,1 1,1 h 12 c 0.54535,0 1,-0.45465 1,-1 v -9 c 0,-0.54535 -0.45465,-1 -1,-1 h -3.75 l -1.34961,-1.80078 C 338.80571,777.07351 338.65738,776.9997 338.5,777 Z m 1,1 h 2 c 0.27613,3e-5 0.49997,0.22387 0.5,0.5 v 1 c -3e-5,0.27613 -0.22387,0.49997 -0.5,0.5 h -2 c -0.27613,-3e-5 -0.49997,-0.22387 -0.5,-0.5 v -1 c 3e-5,-0.27613 0.22387,-0.49997 0.5,-0.5 z m -3.5,3 h 9 v 7 h -9 v -6.5 z m 11,1 c 0.54636,0 1,0.45364 1,1 0,0.54636 -0.45364,1 -1,1 -0.54636,0 -1,-0.45364 -1,-1 0,-0.54636 0.45364,-1 1,-1 z m 0,4 c 0.54636,0 1,0.45364 1,1 0,0.54636 -0.45364,1 -1,1 -0.54636,0 -1,-0.45364 -1,-1 0,-0.54636 0.45364,-1 1,-1 z" inkscape:connector-curvature="0" sodipodi:nodetypes="cccsssssssscccccccccccccccccccssssssssss"/> <path inkscape:connector-curvature="0" id="path22526" style="display:inline;opacity:0.2;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:new" d="m 333.5,786.5 6.00128,1.9e-4 M 333.5,784.5 l 6.00128,1.9e-4 M 333.5,782.5 l 6.00128,1.9e-4"/> @@ -5551,17 +5550,6 @@ </g> <path sodipodi:nodetypes="ccccc" d="m 313.5,528.5 -12,-12 m 12,7.75 v 4.25 h -4.25" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path23333" inkscape:connector-curvature="0"/> </g> - <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" style="display:inline;opacity:1;enable-background:new" id="g23365" transform="matrix(0,-1,-1,0,640,975)"> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" id="path23346" inkscape:connector-curvature="0"/> - <g style="opacity:0.7" id="g23363"> - <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" id="path23349" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path23351" d="m 478.49998,359.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path inkscape:connector-curvature="0" id="path23355" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 468.49998,349.5 2e-5,5" id="path23357" inkscape:connector-curvature="0"/> - <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 478.5,359.5 h -5" id="path23359" inkscape:connector-curvature="0"/> - <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 472.5,355.5 4.99998,-5" id="path23361" inkscape:connector-curvature="0"/> - </g> - </g> <g style="display:inline;enable-background:new" id="g22284-9" transform="translate(168,-252)"> <path sodipodi:nodetypes="ssccccs" inkscape:connector-curvature="0" d="m 57.892544,296.4472 c -1.672904,1.40373 -4.112184,1.40373 -5.785088,0 -1.672904,-1.40373 -2.096481,-3.80596 -1.00457,-5.6972 L 54.75,284.5 h 0.5 l 3.647114,6.25 c 1.091911,1.89124 0.668334,4.29347 -1.00457,5.6972 z" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" id="path22260-6"/> <path id="path22264-7" d="m 52.501454,292.49305 a 2.5629914,2.5493243 0 0 1 0.292656,-0.77 L 54.5,288.5" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0"/> @@ -5570,23 +5558,6 @@ <path sodipodi:nodetypes="ccsscccc" inkscape:connector-curvature="0" id="ellipse22388-7" d="m 15.5,242.5 -2.7e-4,0.50006 c 0,0.89314 -0.476446,1.71844 -1.249865,2.16501 -0.773419,0.44657 -1.726311,0.44657 -2.49973,0 -0.773419,-0.44657 -1.249865,-1.27187 -1.249865,-2.16501 L 10.5,242.5 v 0 0" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"/> <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 15.5,242.5 h 4 v 5 h -2 l -2.9e-4,8 -8.99971,-5e-5 V 247.5 h -2 v -5 h 4" id="path22384-8" sodipodi:nodetypes="cccccccccc"/> </g> - <g style="display:inline;enable-background:new" id="g23608" transform="translate(-168,-294)"> - <path d="m 345.67581,336.31883 a 5.4499998,5.4499998 0 0 1 -1.8611,-5.9967 5.4499998,5.4499998 0 0 1 5.02132,-3.76966 5.4499998,5.4499998 0 0 1 5.23896,3.46083 5.4499998,5.4499998 0 0 1 -1.49707,6.09778" sodipodi:open="true" sodipodi:end="0.8546274" sodipodi:start="2.2267848" sodipodi:ry="5.4499998" sodipodi:rx="5.4499998" sodipodi:cy="332" sodipodi:cx="349" sodipodi:type="arc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="path23602"/> - <path sodipodi:nodetypes="cccccc" inkscape:connector-curvature="0" id="path23604" d="m 352.5,336.5 h 3 v 3 h -13 v -3 h 6" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> - <path id="path23606" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:type="arc" sodipodi:cx="349" sodipodi:cy="332" sodipodi:rx="2.84375" sodipodi:ry="2.84375" sodipodi:start="3.2977779" sodipodi:end="4.5530322" d="m 346.19086,331.55765 a 2.84375,2.84375 0 0 1 2.35788,-2.36537" sodipodi:open="true"/> - </g> - <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g8542" style="display:inline;opacity:0.98999999;enable-background:new" transform="translate(-795,773.9998)"> - <path inkscape:connector-curvature="0" id="path8571" d="m 856.5,-272.99979 a 6.5000004,6.5000004 0 0 1 -6.5,6.5 6.5000004,6.5000004 0 0 1 -6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,6.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path sodipodi:nodetypes="ccccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path8573" d="m 848,-278.99979 -2,1 -2,2 h 1 l 1,1 1,1 v 2 h 2 v 1 l 1,1 v 2 c 0.16747,-0.0294 0.58327,0.0446 0.75,0 1.49768,-0.4013 2.25,-0.75 3.25,-2 l -2,-2 h -1 -1 l -1,-1 h -1 l 1,-1 h 1 l 2,-2 -1,-1 h -1 l -1,-1 1,-1 v -0.5 z" style="display:inline;opacity:0.98999999;fill:#ffffff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"/> - </g> - <g transform="translate(-21.000002,147)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g12973" style="display:inline;enable-background:new"> - <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path12961" d="m 31.5,377.5 -4.00005,4.00001" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - <path inkscape:connector-curvature="0" id="path12963" d="m 31.5,377.5 h 9" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 31.5,377.5 v -9" id="path12965" inkscape:connector-curvature="0"/> - <path inkscape:connector-curvature="0" id="path12967" d="m 27.5,378.5 v 3 h 3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - <path inkscape:connector-curvature="0" id="path12969" d="m 29.5,370.5 2,-2 2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - <path inkscape:connector-curvature="0" id="path12971" d="m 38.5,375.5 2,2 -2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> - </g> <g id="g8815" style="display:inline;opacity:0.98999999;enable-background:new" transform="translate(-627,857.9998)"> <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 665.5,-352.49979 h -9 v -9" id="path8745" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/> <g id="g8805" transform="matrix(-1,0,0,1,1321,-5)"> @@ -5803,11 +5774,6 @@ <path inkscape:connector-curvature="0" id="rect15415-8" d="m 548,653 c -0.54532,0 -1,0.45468 -1,1 v 9 c 0,0.54532 0.45468,1 1,1 h 10 c 0.54532,0 1,-0.45468 1,-1 v -1 h -1 v 1 h -10 v -4 -5 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> <path inkscape:connector-curvature="0" id="rect15379-7" d="m 550,650 c -0.54532,0 -1,0.45468 -1,1 v 9 c 0,0.54532 0.45468,1 1,1 h 10 c 0.54532,0 1,-0.45468 1,-1 v -9 c 0,-0.54532 -0.45468,-1 -1,-1 z m 0,1 h 2 v 2 h -2 z m 0,3 h 10 v 6 h -10 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> </g> - <g id="g15556" transform="translate(-21,63)"> - <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path15502" d="m 460.50004,567.49996 h -10 v -10 h 10 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path15506" d="m 448.5,560.5 -0.99996,-4e-5 v 10 h 10 L 457.5,569.5" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> - <path d="m 455.49287,559.50712 v 6 m 3.00001,-3 h -6.00001" style="fill:#5fd38d;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path7085-6-6" inkscape:connector-curvature="0"/> - </g> <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" style="display:inline;opacity:0.6;enable-background:new" transform="translate(-64,43)" id="g5919"> <path inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" sodipodi:nodetypes="csccc" id="path5911" d="M 411.49912,414.98781 411.5,413 c 6.6e-4,-1.5 -1,-2.5 -2.49955,-2.49989 C 407.5,410.5 406.5,411.5 406.5,413 l 0.002,0.98781" style="fill:none;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0"/> <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path5913" d="m 417.5,415.49994 h -7 v 5.00003 h 7 z" style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/> @@ -5818,6 +5784,237 @@ <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 414,410 c -0.86131,-6e-5 -1.62742,0.29548 -2.16602,0.83398 C 411.29539,411.37249 411,412.13889 411,413 c 0,6.7e-4 0,10e-4 0,0.002 l 0.002,1.98633 1,-0.002 -0.002,-1.98828 c 4.8e-4,-0.63777 0.20489,-1.12097 0.54102,-1.45703 0.33651,-0.33647 0.81984,-0.54107 1.45898,-0.54102 0.63862,-5e-5 1.12246,0.20455 1.45898,0.54102 0.33653,0.33646 0.54145,0.82028 0.54102,1.45898 v 1.98828 h 1 V 413 c 5.7e-4,-0.8613 -0.29537,-1.62751 -0.83398,-2.16602 C 415.62741,410.29548 414.86093,409.99994 414,410 Z" id="path5921" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccc"/> <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 324.5,605 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 7 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -5 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m 2.5,2 h 1 1 v 1 1 h -1 v -1 h -1 z" transform="translate(86,-190)" id="path5923"/> </g> + <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 342.5,158 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 13 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 13 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -13 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m 6.5,3 c 2.20237,0 4,1.79764 4,4 0,2.20237 -1.79763,4 -4,4 -2.20236,0 -4,-1.79763 -4,-4 0,-2.20236 1.79764,-4 4,-4 z" id="rect13348"/> + <g id="g15500" style="display:inline;enable-background:new"> + <path style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 397.5,161.5 v -3 h -13 v 3 z m -13,7 v 3 h 5 8 v -3 z" id="path15496" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccc"/> + <circle style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="circle15498" cx="391" cy="165" r="2.000005"/> + </g> + <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 493.5,487 c -0.82251,0 -1.5,-0.6775 -1.5,-1.5 v -8 c 10e-6,-0.41125 0.16922,-0.78445 0.44141,-1.05664 C 492.71359,476.17117 493.08875,476 493.5,476 h 0.5 c 0.45232,0 1,-0.47106 1,-0.99805 0,-0.26349 -0.1383,-0.51259 -0.33203,-0.69726 C 494.47455,474.121 494.22499,474 494,474 v 0.5 c -3e-5,0.27613 -0.22387,0.49997 -0.5,0.5 -1.38664,0 -2.5,1.11336 -2.5,2.5 v 4 0.5 h -1.5 c -0.27613,-3e-5 -0.49997,-0.22387 -0.5,-0.5 v -8 c 3e-5,-0.27613 0.22387,-0.49997 0.5,-0.5 h 4 0.5 c 1.04866,10e-4 2,0.8716 2,2.00195 V 477 h -0.5 -1.5 -0.5 c -0.28206,0 -0.5,0.21794 -0.5,0.5 0,0.28206 0.21794,0.5 0.5,0.5 h 9 c 0.27613,3e-5 0.49997,0.22387 0.5,0.5 v 2.5 h -2 v 3 h 2 v 2.5 c -3e-5,0.27613 -0.22387,0.49997 -0.5,0.5 z m -0.5,-1 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m -8,-2 h 3 v -3 h -3 z m 4,0 h 3 v -3 h -3 z m -4,-4 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z" id="path13810" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" sodipodi:nodetypes="ssccsssccccsccccccccscccsssccccccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"/> + <g transform="translate(-84.000014,21.00001)" style="display:inline;enable-background:new" id="g9974-4"> + <path inkscape:connector-curvature="0" id="path14003" d="M 391.98438,535.98633 C 391.43286,535.99495 390.99245,536.44847 391,537 v 1.51367 c -10e-6,0.002 -10e-6,0.004 0,0.006 0.008,1.37595 0.83084,2.56107 2,3.125 V 548.5 c -0.0287,2.02848 3.02869,2.02848 3,0 v -6.85352 c 1.17556,-0.56682 2,-1.76346 2,-3.14648 V 537 c 0.0191,-1.35232 -2.01913,-1.35232 -2,0 v 1.5 c 0,0.11423 -0.0139,0.22371 -0.0371,0.33008 l -1.13281,1.13281 -0.66211,-0.002 -1.13086,-1.13086 c -0.0226,-0.10381 -0.0365,-0.2109 -0.0371,-0.32227 V 537 c 0.008,-0.56377 -0.45187,-1.02247 -1.01562,-1.01367 z M 394,548 h 1 v 1 h -1 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" d="M 387.00001,542 387,536.5 c 0.004,-0.28226 -0.22555,-0.51223 -0.50781,-0.50781 -0.27614,0.004 -0.49651,0.23167 -0.49219,0.50781 l 10e-6,5.5 z m -1,1 H 384.5 c -0.67616,-0.01 -0.67616,1.00956 0,1 h 0.75001 v 1.25 h 2.5 V 544 H 388.5 c 0.67616,0.01 0.67616,-1.00956 0,-1 H 387 Z m -0.75,2 c -0.75,0 -1.25,0.5 -1.25,1.25 L 384,547.5 c -10e-6,0.78517 0.31169,1.44054 0.78516,1.86719 0.47346,0.42664 1.08725,0.63281 1.69726,0.63281 0.61001,0 1.22902,-0.20449 1.71094,-0.62891 0.48192,-0.42441 0.80663,-1.08156 0.80664,-1.87109 l 10e-6,-1.25 c 0,-0.75 -0.5,-1.25 -1.25,-1.25 h -1.25 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14013" sodipodi:nodetypes="cccccccccccccccccccscscscccc"/> + </g> + <g style="display:inline;enable-background:new" id="g14135" transform="translate(696.99456,-488.99997)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <g id="g14103"> + <path sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" id="path14068" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m -563.5,611.49287 v 5 m 1,-6 h 5 m -5,6.99995 h 5 m 1,-0.99995 v -5"/> + <path inkscape:connector-curvature="0" id="path14078" d="m -562.5,611.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> + <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -562.5,618.49999 v -2 h -2 v 2 z" id="path14080" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path14083" d="m -555.5,618.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> + <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -555.5,611.49999 v -2 h -2 v 2 z" id="path14093" inkscape:connector-curvature="0"/> + </g> + <g style="opacity:0.6" transform="translate(4,-4)" id="g14122"> + <path d="m -563.5,611.49287 v 1 m 1,-2 h 5 m -1,6.99995 h 1 m 1,-0.99995 v -5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path14105" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/> + <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -562.5,611.49999 v -2 h -2 v 2 z" id="path14109" inkscape:connector-curvature="0"/> + <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -555.5,618.49999 v -2 h -2 v 2 z" id="path14118" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path14120" d="m -555.5,611.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> + <path inkscape:connector-curvature="0" id="path16212" d="m -563.49456,616.49997 -1.00544,2e-5 v 2 h 2 l 0.005,-1.00002" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> + </g> + </g> + <g style="display:inline;enable-background:new" id="g20455" transform="rotate(-180,359.49632,417.00345)"> + <path inkscape:connector-curvature="0" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 281.49288,332.50712 2,-2 h 5 v 5 l -2,2 h -5 z" id="path20447" sodipodi:nodetypes="ccccccc" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> + <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" sodipodi:nodetypes="ccccccc" id="path20449" d="m 279.5,331.25 4.75,-4.75 8.24288,0.007 0.007,8.24288 -4.75,4.75 -8.25712,0.007 z" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0"/> + </g> + <g style="display:inline;enable-background:new" id="g15543" transform="translate(42,-41.999994)"> + <g id="g15520" transform="translate(231.99999,-397.99995)" style="display:inline;opacity:0.6;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" id="path15514" d="m 155.5,493.5 8.00001,2e-5 v 3.99993 m -6.75,9 -4.25,7e-5 -1e-5,-7.9929" style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="cccccc"/> + <path inkscape:connector-curvature="0" id="path15517" d="m 152.5,496.5 h 3 v -3 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" sodipodi:nodetypes="cccc"/> + </g> + <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" style="display:inline;opacity:1;stroke-width:1.25111365;enable-background:new" transform="matrix(-0.79928788,0,0,0.79928788,686.43544,-75.73586)" id="g12909-3"> + <path inkscape:connector-curvature="0" id="path12903-0" d="m 366.49554,222.99332 c -1.65832,0 -2.50221,0.8439 -2.50222,2.50222 0,1.65833 0.8439,2.50223 2.50222,2.50223 1.65833,0 2.50223,-0.8439 2.50223,-2.50223 -10e-6,-1.65832 -0.84391,-2.50222 -2.50223,-2.50222 z m 0,1.00089 c 0.82915,1e-5 1.50131,0.67217 1.50131,1.50132 0,0.82916 -0.67215,1.50133 -1.50131,1.50134 -0.82916,0 -1.50133,-0.67218 -1.50133,-1.50134 10e-6,-0.82916 0.67217,-1.50132 1.50133,-1.50132 z" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.25111353;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" sodipodi:nodetypes="cccccccccc"/> + <circle r="2.7854042" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.25111365;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="circle12905-5" cx="366.47485" cy="225.52515"/> + <path inkscape:connector-curvature="0" d="M 364.61887,227.37222 362.75,229.25 m 5.62222,-1.87778 L 370.25,229.25 M 368.37222,223.61887 370.25,221.75 m -5.63113,1.86887 L 362.75,221.75 m 3.74554,6.56055 0.004,2.18945 m -2.81946,-5.00446 h -2.18945 M 366.5,220.5 l -0.004,2.18054 m 2.81501,2.815 2.18945,0.004" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.25111365;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path12907-2" sodipodi:nodetypes="cccccccccccccccc"/> + </g> + </g> + <g style="display:inline;enable-background:new" id="g15412" transform="translate(106,1e-5)"> + <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 426.5,558 a 0.50004997,0.50004997 0 0 0 -0.5,0.5 v 12 a 0.50004997,0.50004997 0 0 0 0.5,0.5 h 10 a 0.50004997,0.50004997 0 0 0 0.5,-0.5 v -4.37891 l -1,1 V 570 h -9 v -11 h 4.87891 l 1,-1 z" id="rect15389" inkscape:connector-curvature="0"/> + <path sodipodi:nodetypes="ccccccccccc" inkscape:connector-curvature="0" id="path15387" d="m 435.5,557.5 v 2 h 2 v 2 h 2 l -6,6 v -2 h -2 v -2 h -2 z" style="fill:#ffffff;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"/> + </g> + <g style="display:inline;enable-background:new" id="g15564-8" transform="translate(-238,-111)"> + <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 301.5,305 c -0.82235,0 -1.5,0.67765 -1.5,1.5 v 5 c 0,0.82235 0.67765,1.5 1.5,1.5 h 0.5 v -2 h -0.5 c -0.67616,0.01 -0.67616,-1.01 0,-1 h 11 c 0.67616,-0.01 0.67616,1.01 0,1 H 312 v 2 h 0.5 c 0.82235,0 1.5,-0.67765 1.5,-1.5 v -5 c 0,-0.82235 -0.67765,-1.5 -1.5,-1.5 H 312 302 Z m 10.5,1 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 z" transform="translate(70,363)" id="path15558-1"/> + <path sodipodi:nodetypes="cccc" inkscape:connector-curvature="0" id="path15562-6" d="m 380.5,674 v 7.5 h -7 V 674" style="display:inline;opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"/> + </g> + <g style="display:inline;opacity:1;enable-background:new" id="g15578-7" transform="translate(894.00002,333.00003)"> + <path inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" id="path15572-4" d="m -465.50001,296.49999 -1.00001,-2e-5 v -8 h 8 l 1e-5,1.00002" style="display:inline;opacity:0.6;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> + <path inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" id="path15574-3" d="m -455.50002,291.49995 1e-5,4.75002 -3.25,3.25 -4.75001,-2e-5 v -8 z" style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="cccccc"/> + <path inkscape:connector-curvature="0" id="path15576-7" d="m -455.75001,296.49997 h -2.75 v 2.75" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccc"/> + </g> + <g transform="translate(-11,-778)" style="display:inline;enable-background:new" id="g16284-6"> + <path inkscape:connector-curvature="0" id="path16192-3" d="m 166.25,1316 v 1 H 167 v 1 h -0.75 v 1 H 169 v 4 h -2.75 v 1 H 167 v 1 h -0.75 v 1 h 11.25 c 0.27613,0 0.49997,-0.2239 0.5,-0.5 v -9 c -3e-5,-0.2761 -0.22387,-0.5 -0.5,-0.5 z m 1.75,1 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m -6,2 h 3 v 4 h -3 z m 4,0 h 3 v 4 h -3 z m -6,5 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"/> + <path sodipodi:nodetypes="cccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path16225-3" d="m 164.49219,1313.9922 c -0.27614,0 -0.4965,0.2317 -0.49219,0.5078 v 1.5 h 1 v -1.5 c 0.004,-0.2823 -0.22555,-0.5122 -0.50781,-0.5078 z M 164,1317 v 2 h 1 v -2 z m 0,3 v 2 h 1 v -2 z m 0,3 v 2 h 1 v -2 z m 0,3 v 1.5 c -0.01,0.6762 1.00956,0.6762 1,0 v -1.5 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"/> + </g> + <g transform="translate(0,1e-5)" style="display:inline;opacity:0.6;enable-background:new" id="g15908"> + <g transform="translate(-77.99975,31.00025)" id="g15904"> + <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 702.49805,1150.998 c -0.27613,10e-5 -0.49997,0.2239 -0.5,0.5 v 12 c 3e-5,0.2762 0.22387,0.5 0.5,0.5 h 10 c 0.27613,0 0.49997,-0.2238 0.5,-0.5 v -4.0019 c -2.1e-4,-0.9362 -0.57149,-1.7779 -1.14453,-2.3496 l -5.00196,-5.002 c -0.57045,-0.5704 -1.4115,-1.1408 -2.34765,-1.1445 h -0.002 z m 1.93945,0.9981 a 0.50005,0.50005 0 0 1 0.0508,0 0.50005,0.50005 0 0 1 0.23828,0.068 c 0.78325,0.4432 1.26758,1.2757 1.26758,2.1757 a 0.50005,0.50005 0 0 1 0,0.01 H 706 l -0.002,3.748 h 3.7207 a 0.50005,0.50005 0 0 1 0.0488,0 c 0.89236,0 1.71983,0.4772 2.16601,1.25 a 0.50050437,0.50050437 0 1 1 -0.86718,0.5 c -0.26835,-0.4648 -0.76213,-0.75 -1.29883,-0.75 a 0.50005,0.50005 0 0 1 -0.0176,0 v 0 h -4.25195 a 0.50005,0.50005 0 0 1 -0.5,-0.5 l 0.002,-4.1835 a 0.50005,0.50005 0 0 1 -0.006,-0.074 c 0,-0.5413 -0.29061,-1.038 -0.76172,-1.3047 a 0.50005,0.50005 0 0 1 0.20508,-0.9394 z" transform="translate(-112.99831,-623.99859)" id="path15896"/> + </g> + <path inkscape:connector-curvature="0" d="m 520.00025,560.00025 v 1 h -1 v -1.00003 z m 0,-2 v 1 h -1 v -1.00003 z m 2,0 v 1 h -1 v -1.00003 z m 0,4 v 1 h -1 v -1.00003 z m 0,-2 v 1 h -1 v -1.00003 z m -4,-2 v 1 h -1 v -1.00003 z" style="display:inline;opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new" id="path15906"/> + </g> + <g transform="translate(-583.99495,-390.00505)" id="g15882-7" style="display:inline;opacity:0.6;enable-background:new"> + <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path15847-7" d="m 926.5,1002.5 3.75,-3.75" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"/> + <path sodipodi:nodetypes="ccccccccccccccc" inkscape:connector-curvature="0" id="path15849-3" d="m 928.5,994.5 6,6 1,-1 v -3 l 3,-3 h 1 v 0 -1 l -3,-3 h -1 v 0 1 l -3,3 h -3 z" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/> + </g> + <g transform="translate(-583.99495,-390.00505)" style="display:inline;enable-background:new" id="g16002-8"> + <path style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" d="m 947.5,1002.5 3.75,-3.75" id="path15876-9" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/> + <path inkscape:connector-curvature="0" id="path15878-8" d="m 956.5,989 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 0.79297 L 959.70703,994 H 960.5 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -1 c -2e-5,-0.1326 -0.0527,-0.25976 -0.14648,-0.35352 l -3,-3 C 957.75976,989.05271 957.6326,989.00002 957.5,989 Z m -1.20703,2 -2,2 H 950.5 c -0.1326,2e-5 -0.25976,0.0527 -0.35352,0.14648 l -1,1 c -0.19519,0.19527 -0.19519,0.51177 0,0.70704 l 6,5.99998 c 0.19527,0.1952 0.51177,0.1952 0.70704,0 l 1,-0.99998 c 0.0938,-0.0938 0.14646,-0.22092 0.14648,-0.35352 v -2.79297 l 2,-2 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + </g> + <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" transform="translate(-21.000047,168)" id="g15951-6" style="display:inline;opacity:1;enable-background:new"> + <path style="display:inline;overflow:visible;visibility:visible;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 37.5,347.5 h 3.000047 l -4.7e-5,3 m 0,7 4.7e-5,3.00005 L 37.5,360.5 m -7,0 -3,5e-5 V 357.5 m 0,-7 v -3 h 3" id="path15947-7" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccc"/> + <rect y="350.5" x="30.5" height="7" width="7" id="rect15949-3" style="display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"/> + </g> + <g style="display:inline;enable-background:new" id="g16385" transform="translate(-21,21.00001)"> + <path id="path16351" d="m 118,95.5 c -3.58986,0 -6.5,2.41014 -6.5,6 1,1 3,2.5 6.5,2.5 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/> + <path inkscape:connector-curvature="0" id="path16353" d="M 111.49999,102 A 6.5000103,6.5000103 0 0 0 118,108.50001 6.5000103,6.5000103 0 0 0 124.50001,102 6.5000103,6.5000103 0 0 0 118,95.499994 6.5000103,6.5000103 0 0 0 111.49999,102 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" d="m 118.5,107.5 0.75,0.75 m -0.75,-3.75 2.75,2.75 m 2,-4 0.5,0.5 M 121,104 l 1.75,1.75" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path16355" sodipodi:nodetypes="cccccccc"/> + </g> + <g style="display:inline;opacity:1;enable-background:new" id="g15989" transform="translate(41.999953,147)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path sodipodi:nodetypes="cccccccccccc" inkscape:connector-curvature="0" id="path15985" d="m 37.5,347.5 h 3.000047 l -4.7e-5,3 m 0,7 4.7e-5,3.00005 L 37.5,360.5 m -7,0 -3,5e-5 V 357.5 m 0,-7 v -3 h 3" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"/> + <rect style="display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="rect15987" width="7" height="7" x="30.5" y="350.5"/> + </g> + <g transform="translate(-168,-294)" id="g16054" style="display:inline;enable-background:new"> + <path id="path16048" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:type="arc" sodipodi:cx="349" sodipodi:cy="332" sodipodi:rx="5.4499998" sodipodi:ry="5.4499998" sodipodi:start="2.2267848" sodipodi:end="0.8546274" sodipodi:open="true" d="m 345.67581,336.31883 a 5.4499998,5.4499998 0 0 1 -1.8611,-5.9967 5.4499998,5.4499998 0 0 1 5.02132,-3.76966 5.4499998,5.4499998 0 0 1 5.23896,3.46083 5.4499998,5.4499998 0 0 1 -1.49707,6.09778"/> + <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 348.5,336.5 h -4.25 l -1.75,1.75 v 1.25 h 13 v -1.25 l -1.75,-1.75 h -2.25" id="path16050" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/> + <path sodipodi:open="true" d="m 346.19086,331.55765 a 2.84375,2.84375 0 0 1 2.35788,-2.36537" sodipodi:end="4.5530322" sodipodi:start="3.2977779" sodipodi:ry="2.84375" sodipodi:rx="2.84375" sodipodi:cy="332" sodipodi:cx="349" sodipodi:type="arc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="path16052"/> + </g> + <g transform="translate(420.00505,-159.00506)" style="display:inline;enable-background:new" id="g16147-6"> + <circle style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="circle23264-7-0" r="6.4999924" cy="660" cx="-365"/> + <path style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="M -360.24999,655.25 -358.5,653.50001" id="path23266-0-5" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/> + <path inkscape:connector-curvature="0" id="path23268-3-2" d="m -371.5,666.50001 1.75001,-1.75001" style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" sodipodi:nodetypes="cc"/> + <path style="display:inline;opacity:1;fill:#ffffff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" d="m -368,654.00001 -1,0.99999 -2,2.00001 1,1 1,1 v 2 h 2 v 1 l 1,1 v 2 h 0.75 L -364,665 l 1,-1 1,-1 v -1 l -1,-1 -2,10e-6 h -1 l -1,-1 h -1 l 1,-1 h 1 l 2,-2 -1,-1 h -1 l -1,-1 1,-1 v -0.5 z" id="path16039-7-7" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccccccc"/> + </g> + <g id="g16187" style="display:inline;enable-background:new" transform="translate(462.00505,-96.005057)"> + <circle cx="-365" cy="660" r="6.4999924" id="circle16176" style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path16179" d="M -360.24999,655.25 -358.5,653.50001" style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + <path sodipodi:nodetypes="cc" style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m -371.5,666.50001 1.75001,-1.75001" id="path16183" inkscape:connector-curvature="0"/> + <path sodipodi:nodetypes="ccccccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path16185" d="m -368,654.00001 -1,0.99999 -2,2.00001 1,1 1,1 v 2 h 2 v 1 l 1,1 v 2 h 0.75 L -364,665 l 1,-1 1,-1 v -1 l -1,-1 -2,10e-6 h -1 l -1,-1 h -1 l 1,-1 h 1 l 2,-2 -1,-1 h -1 l -1,-1 1,-1 v -0.5 z" style="display:inline;opacity:0.98999999;fill:#ffffff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"/> + </g> + <g style="display:inline;opacity:1;enable-background:new" id="g8419-9" transform="translate(1279.001,-241)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <rect style="display:inline;opacity:0;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" id="rect8368-4" width="16" height="16" x="-1148" y="398"/> + <path sodipodi:open="true" d="m -1134.6106,405.3599 a 5.9994435,5.9994445 0 0 1 -3.1745,6.4904 5.9994435,5.9994445 0 0 1 -7.1129,-1.26844 5.9994435,5.9994445 0 0 1 -0.7352,-7.18762 5.9994435,5.9994445 0 0 1 6.7087,-2.68234" sodipodi:end="4.9782235" sodipodi:start="6.091884" sodipodi:ry="5.9994445" sodipodi:rx="5.9994435" sodipodi:cy="406.50061" sodipodi:cx="-1140.5006" sodipodi:type="arc" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" id="ellipse8370-9" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"/> + <rect ry="1" rx="1" y="403.5" x="-1139.5" height="2" width="2" id="rect8385-9" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> + <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8387-7" d="m -1137.75,403.75 3.749,-3.75" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/> + </g> + <g id="g15336" style="display:inline;opacity:0.6;enable-background:new"> + <path sodipodi:nodetypes="sssss" inkscape:connector-curvature="0" id="path13329" d="m 369.99998,160.99999 c -2.20236,0 -4,1.79764 -4,4 0,2.20237 1.79764,4 4,4 2.20237,0 4,-1.79763 4,-4 0,-2.20236 -1.79763,-4 -4,-4 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"/> + <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="rect13350" d="m 363.5,158.5 h 13 v 13 h -13 z" style="display:inline;opacity:0.3;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"/> + </g> + <g style="display:inline;enable-background:new" id="g23051-0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="translate(210,20.999991)"> + <path inkscape:connector-curvature="0" id="path23043-3" d="m 33.5,381.5 v -13" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" sodipodi:nodetypes="cc"/> + <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 30.5,371.5 3,-3 3,3" id="path23047-2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/> + <path inkscape:connector-curvature="0" id="path22616-9" d="m 31.5,381.5 h 2 2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" sodipodi:nodetypes="ccc"/> + </g> + <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g22966-4" transform="translate(-504,167.99288)" style="display:inline;opacity:1;enable-background:new"> + <path sodipodi:nodetypes="ccccccc" d="m 870.49995,221.50711 h 10 v 10.00001 l -3,3 h -10 v -10.00001 z" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path22960-9" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path22963-0" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="M 877.49995,224.50711 880.5,221.5 m -13.00005,3.00712 h 10 v 10" sodipodi:nodetypes="ccccc"/> + <path sodipodi:nodetypes="ccccc" d="m 870.50001,231.5 -3.00006,3.00711 M 880.50001,231.5 h -10 v -10" style="opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path23055-1" inkscape:connector-curvature="0"/> + </g> + <g transform="translate(-327,477.99999)" style="display:inline;enable-background:new" id="g16423-6"> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 724.5001,-81.99991 A 6.5000907,6.5000907 0 0 1 718,-75.49982 6.5000907,6.5000907 0 0 1 711.4999,-81.99991 6.5000907,6.5000907 0 0 1 718,-88.5 a 6.5000907,6.5000907 0 0 1 6.5001,6.50009 z" id="path22958-5" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> + <g transform="translate(327,-415)" id="g23066-1" style="display:inline;enable-background:new"> + <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:connector-curvature="0" id="path23059-7" d="m 397.50009,333.0001 c 0,1.38076 -2.91019,2.50009 -6.50009,2.50009 -3.5899,0 -6.50009,-1.11933 -6.50009,-2.50009" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" sodipodi:nodetypes="csc"/> + <path sodipodi:nodetypes="csc" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 397.50009,333.00009 c 0,-1.38076 -2.91019,-2.50009 -6.50009,-2.50009 -3.5899,0 -6.50009,1.11933 -6.50009,2.50009" id="path23061-5" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> + <path inkscape:transform-center-x="1.250145" sodipodi:nodetypes="csc" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 390.9999,339.50009 c -1.38076,0 -2.50009,-2.91019 -2.50009,-6.50009 0,-3.5899 1.11933,-6.50009 2.50009,-6.50009" id="path23074-1" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> + </g> + </g> + <g transform="translate(-348,477.99999)" style="display:inline;enable-background:new" id="g16413-1"> + <path sodipodi:nodetypes="ccsssccc" inkscape:connector-curvature="0" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 759.5,-88.5 -5.75,8.49999 c -0.1702,0.31279 -0.25,0.65756 -0.25,1 0,1.933 2.9102,3.5 6.5,3.5 3.5898,0 6.5,-1.567 6.5,-3.5 0,-0.34545 -0.077,-0.68479 -0.25,-1 L 760.5,-88.5 Z" id="path22956-5" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/> + <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="path23072-3" d="m 766.5,-78.75 c 0,-1.38127 -2.9102,-2.74949 -6.5,-2.74949 -3.5898,0 -6.5,1.36822 -6.5,2.74949" style="display:inline;opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0" sodipodi:nodetypes="csc"/> + </g> + <g transform="translate(147)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g12973-3-2" style="display:inline;enable-background:new"> + <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path12961-3-0" d="m 31.5,377.5 -4.00005,4.00001" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + <path inkscape:connector-curvature="0" id="path12963-9-4" d="m 31.5,377.5 h 9" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 31.5,377.5 v -9" id="path12965-4-0" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path12967-0-0" d="m 27.5,378.5 v 3 h 3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + <path inkscape:connector-curvature="0" id="path12969-3-7" d="m 29.5,370.5 2,-2 2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + <path inkscape:connector-curvature="0" id="path12971-9-7" d="m 38.5,375.5 2,2 -2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + </g> + <g style="display:inline;opacity:1;enable-background:new" id="g5294-1" transform="translate(41.99999,-357)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 434.5,543 a 1.5000001,1.5000001 0 0 1 -1.5,1.5 1.5000001,1.5000001 0 0 1 -1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,1.5 z" id="path5168-0" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path5260-6" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 433.50001,547.5 H 433 c -2.50853,0 -4.5,-2.01446 -4.5,-4.5 0,-2.48553 1.99147,-4.5009 4.5,-4.5009 l 0.50001,9e-4 m 0,9 h 6 z m 0,-9 h 6 z"/> + <path id="path12602" style="opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="M 433.50001,536.5 H 433 c -2.32223,0 -4.46806,1.23889 -5.62917,3.25 -1.16111,2.01111 -1.16111,4.48889 0,6.5 1.16111,2.01111 3.30694,3.25 5.62917,3.25 h 0.50001 m 0,0 h 6 z m 0,-13 h 6 z" inkscape:connector-curvature="0" sodipodi:nodetypes="cssssccccccc"/> + </g> + <g style="display:inline;opacity:1;enable-background:new" id="g16957-2" transform="matrix(0,-1,-1,0,556.00846,744.00467)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" id="path16943-7" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path16945-5" d="m 468.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 478.49998,358.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" id="path16947-3" inkscape:connector-curvature="0"/> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" id="path16949-6" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path16951-1" d="m 469.49998,349.5 2e-5,5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> + <path inkscape:connector-curvature="0" id="path16953-0" d="m 478.5,358.5 h -5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> + <path inkscape:connector-curvature="0" id="path16955-3" d="m 472.5,355.5 4.99998,-5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> + </g> + <g style="display:inline;enable-background:new" id="g15967"> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 246.5,564 a 2.5000002,2.5000002 0 0 1 -2.5,2.5 2.5000002,2.5000002 0 0 1 -2.5,-2.5 2.5000002,2.5000002 0 0 1 2.5,-2.5 2.5000002,2.5000002 0 0 1 2.5,2.5 z" id="path17035" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path17037" d="m 250.5,559 a 1.5000001,1.5000001 0 0 1 -1.5,1.5 1.5000001,1.5000001 0 0 1 -1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,1.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path d="m 249.46062,567.52564 a 6.4999542,6.4999495 0 0 1 -8.41803,2.26242 6.4999542,6.4999495 0 0 1 -3.09939,-8.14711 6.4999542,6.4999495 0 0 1 7.79322,-3.90479" sodipodi:open="true" sodipodi:end="4.9828172" sodipodi:start="0.57332633" sodipodi:ry="6.4999495" sodipodi:rx="6.4999542" sodipodi:cy="563.99988" sodipodi:cx="244" sodipodi:type="arc" id="path17043" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/> + </g> + <g transform="matrix(0,-1,-1,0,577,1038)" id="g12586" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path inkscape:connector-curvature="0" id="path12572" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <g id="g23031" style="opacity:0.7"> + <path inkscape:connector-curvature="0" id="path12574" d="m 468.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 478.49998,358.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" id="path12576" inkscape:connector-curvature="0"/> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" id="path12578" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path12580" d="m 469.49998,349.5 2e-5,5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> + <path inkscape:connector-curvature="0" id="path12582" d="m 478.5,358.5 h -5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> + <path inkscape:connector-curvature="0" id="path12584" d="m 472.5,355.5 4.99998,-5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/> + </g> + </g> + <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" style="display:inline;opacity:1;enable-background:new" id="g23365" transform="matrix(0,-1,-1,0,640,975)"> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" id="path23346" inkscape:connector-curvature="0"/> + <g style="opacity:0.7" id="g23363"> + <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 468.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" id="path23349" inkscape:connector-curvature="0"/> + <path inkscape:connector-curvature="0" id="path23351" d="m 478.49998,358.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path inkscape:connector-curvature="0" id="path23355" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 469.49998,349.5 2e-5,5" id="path23357" inkscape:connector-curvature="0"/> + <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 478.5,358.5 h -5" id="path23359" inkscape:connector-curvature="0"/> + <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 472.5,355.5 4.99998,-5" id="path23361" inkscape:connector-curvature="0"/> + </g> + </g> + <g transform="translate(-21.00225)" style="display:inline;stroke:#ffffff;enable-background:new" id="g13169-8-6" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path inkscape:connector-curvature="0" id="path13150-5-2" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 473.5014,58.5 v 7 m -2,-8 v 7 m 4,-5 v 7 m -6,-10 v 7"/> + <path d="m 475.5014,57.5 -10e-4,0.25 m -1.9986,-1.25 -10e-4,0.25 m 4.0014,1.75 v 7 m -6,-10 -0.001,0.25" style="display:inline;opacity:0.9;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path13154-7-3" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/> + <path sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" id="path13161-0-0" style="display:inline;opacity:0.8;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 477.5014,56.5 -10e-4,0.25 m -1.9986,-1.25 -10e-4,0.25 m 4.0014,1.75 v 7 m -6,-10 -0.001,0.25"/> + <path d="m 479.5014,55.5 -10e-4,0.25 m -1.9986,-1.25 -10e-4,0.25 m 4.0014,1.75 v 7 m -6,-10 -0.001,0.25" style="display:inline;opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path13163-4-8" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/> + </g> + <g style="display:inline;enable-background:new" transform="translate(126,441)" id="g13710" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 406.75,66.5 h 10.5 c 1,0 1.79167,-1.25 0.75,-2.5 l -4.5,-5.5 v -3 l 1,-1 v -1 h -5 v 1 l 1,1 v 3 L 406,64 c -1,1.25 -0.25,2.5 0.75,2.5 z" id="path13700" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/> + <path style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 410,62.5 -1.75,2 h 7.5 l -1.75,-2 z" id="path13708" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/> + </g> + <g style="display:inline;enable-background:new" id="g16377" transform="translate(-217,44.000001)"> + <path id="path16340" d="m 589,450 c -1.09935,0 -2,0.90065 -2,2 v 0.42969 c 0.73665,0.57364 1.18952,1.45204 1.23438,2.41601 C 588.47082,454.9447 588.72885,455 589,455 h 1 c 1.09935,0 2,-0.90065 2,-2 v -1 c 0,-1.09935 -0.90065,-2 -2,-2 z m 2.58789,6.00586 c -0.28431,-0.0492 -0.58776,0.16015 -0.58789,0.49414 0,0.25 -0.25,0.5 -0.5,0.5 h -2 c -0.25,0 -0.5,-0.25 -0.5,-0.5 v 0.5 c 0,0.36306 -0.26134,0.68419 -0.44336,0.93555 l 0.004,0.004 c 0.41161,0.41161 0.88215,0.75715 1.375,1.25 0.40738,0.40739 0.86402,1.03976 1.01172,1.81055 H 593.5 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 459 c 0,-0.66667 -0.3572,-1.18923 -0.77148,-1.60352 -0.41429,-0.41428 -0.90447,-0.77946 -1.375,-1.25 -0.0788,-0.0787 -0.17086,-0.12422 -0.26563,-0.14062 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="ssccsssssscccccccsccccsccc"/> + <path d="m 580.5,463.5 h 8 V 462 c 0,-1 -1,-1.5 -2,-2.5 0.0142,0.44837 -0.5,1 -1,1 h -2 c -0.5,0 -0.99931,-0.50922 -1,-1 -1,1 -2,1.5 -2,2.5 z m 3.5,-10 h 1 c 0.831,0 1.5,0.669 1.5,1.5 v 1 c 0,0.831 -0.669,1.5 -1.5,1.5 h -1 c -0.831,0 -1.5,-0.669 -1.5,-1.5 v -1 c 0,-0.831 0.669,-1.5 1.5,-1.5 z" style="fill:#ffffff;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" id="path16332" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsccccscsssssssss"/> + </g> + <path id="path6081" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 453.75,465.5 c -2.25,-2 -6.25,-5.75 -6.25,-9.5 0,-4.5 5.5,-4.5 6.25,-0.5 h 0.5 c 0.75,-4 6.25,-4 6.25,0.5 0,3.75 -4,7.5 -6.25,9.5 z" inkscape:connector-curvature="0" sodipodi:nodetypes="csccscc"/> + <path style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="M 471.34375,452.5625 C 469.875,452.625 468.5,453.75 468.5,456 c 0,1.18095 0.3979,2.36198 1.01172,3.48828 L 473.5,455.5 l 2,2 3,-3 2.83594,2.83594 C 481.43966,456.89236 481.5,456.44653 481.5,456 c 0,-4.5 -5.5,-4.5 -6.25,-0.5 h -0.5 c -0.375,-2 -1.9375,-3 -3.40625,-2.9375 z M 478.5,458.5 l -3,3 -2,-2 -2.34766,2.34766 c 1.20452,1.46494 2.57655,2.74468 3.59766,3.65234 h 0.5 c 1.40784,-1.25142 3.4996,-3.18786 4.86914,-5.38086 z" id="path6086" inkscape:connector-curvature="0"/> + <g style="display:inline;enable-background:new" id="g16467" transform="translate(-221.99998,478)"> + <g style="display:inline;enable-background:new" id="g12626-8" transform="translate(726.00003,-499.00001)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path12181-0" d="m 30.5,378.5 -3.00005,3.00001" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path12186-9" d="m 30.5,378.5 h 10" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 30.5,378.5 v -10" id="path12205-4" inkscape:connector-curvature="0"/> + </g> + <g transform="matrix(-1,0,0,1,1420,227.99979)" id="g8805-9" style="display:inline;opacity:0.98999999;enable-background:new"> + <path sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path8743-5" d="m 653.5,-350.49979 v -8 h 8" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path sodipodi:nodetypes="cccc" inkscape:connector-curvature="0" id="path8759-7" d="m 661.75,-350.49979 -2.25,-4 -2.25,4 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/> + <circle r="0.5" cy="-355.99979" cx="656" id="circle8761-0" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + </g> + </g> + <g style="display:inline;enable-background:new" id="g16449" transform="translate(-284.99998,478)"> + <g style="display:inline;opacity:1;enable-background:new" id="g15951-6-3" transform="translate(746.99995,-478)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + <path sodipodi:nodetypes="cccccccccccc" inkscape:connector-curvature="0" id="path15947-7-2" d="m 37.5,347.5 h 3.000047 l -4.7e-5,3 m 0,7 4.7e-5,3.00005 L 37.5,360.5 m -7,0 -3,5e-5 V 357.5 m 0,-7 v -3 h 3" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"/> + </g> + <g transform="matrix(-1,0,0,1,1439,229.99979)" id="g8805-98" style="display:inline;opacity:0.98999999;enable-background:new"> + <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path8743-9" d="m 653.5,-358.49979 h 9 v 9 h -9 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> + <path sodipodi:nodetypes="cccc" inkscape:connector-curvature="0" id="path8759-74" d="m 662.25,-349.99979 -2.75,-5.5 -3,5.5 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/> + <circle r="0.5" cy="-355.99979" cx="656" id="circle8761-3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/> + </g> + </g> + <g style="display:inline;enable-background:new" id="g16457" transform="translate(-284.99998,478)"> + <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g7406-1-2-5" transform="translate(347.99997,-290.00356)" style="display:inline;opacity:1;enable-background:new"> + <path inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" id="path7395-0-0-3" d="m 460.49999,168.5 h -13 v -9 l 13.00002,-1e-5 z" style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/> + <path sodipodi:nodetypes="cccccc" style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" d="m 450.49999,172.5 h 7 m -2.99997,5e-5 v -2 h -1 v 2" id="path7416-1-8-5" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" inkscape:connector-curvature="0"/> + </g> + <g style="display:inline;opacity:0.98999999;enable-background:new" id="g16437" transform="matrix(-1,0,0,1,1460,227.99979)"> + <path style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="m 662.25,-349.99979 -2.75,-5.5 -3,5.5 z" id="path16433" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/> + <circle style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="circle16435" cx="655" cy="-355.99979" r="0.5"/> + </g> + </g> </g> <g inkscape:groupmode="layer" id="layer2" inkscape:label="TRACKING"> <g id="g16331" style="fill:#ffcc00"> @@ -5836,14 +6033,11 @@ <text inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381" id="text16123" y="340" x="5.8695679" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="340" x="5.8695679" id="tspan16121" sodipodi:role="line">D</tspan></text> <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="26.869568" y="340" id="text16127" inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423"><tspan sodipodi:role="line" id="tspan16125" x="26.869568" y="340" style="fill:#ffcc00;stroke-width:0.99999988">E</tspan></text> <text inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381" id="text16131" y="340" x="49.869568" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="340" x="49.869568" id="tspan16129" sodipodi:role="line">F</tspan></text> - <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="404.86957" y="403" id="text16135" inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423"><tspan sodipodi:role="line" id="tspan16133" x="404.86957" y="403" style="fill:#ffcc00;stroke-width:0.99999988">G</tspan></text> - <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="361.86957" y="507" id="text16151" inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423"><tspan sodipodi:role="line" id="tspan16149" x="361.86957" y="507" style="fill:#ffcc00;stroke-width:0.99999988">M</tspan></text> <text inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423" id="text16155" y="529" x="194.86957" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="529" x="194.86957" id="tspan16153" sodipodi:role="line">N</tspan></text> <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="215.86957" y="529" id="text16159" inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381"><tspan sodipodi:role="line" id="tspan16157" x="215.86957" y="529" style="fill:#ffcc00;stroke-width:0.99999988">O</tspan></text> <text inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423" id="text16167" y="550" x="194.86957" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="550" x="194.86957" id="tspan16165" sodipodi:role="line">P</tspan></text> <text transform="scale(1.0088573,0.99122046)" xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:16.21410179px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="339.99878" y="553.21686" id="text16171" inkscape:transform-center-y="2.6620037" inkscape:transform-center-x="2.773985"><tspan sodipodi:role="line" id="tspan16169" x="339.99878" y="553.21686" style="fill:#ffcc00;stroke-width:0.99999988">Q</tspan><tspan id="tspan16173" sodipodi:role="line" x="339.99878" y="553.21686" style="fill:#ffcc00;stroke-width:0.99999988"/></text> <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="384.86957" y="550" id="text16177" inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381"><tspan sodipodi:role="line" id="tspan16175" x="384.86957" y="550" style="fill:#ffcc00;stroke-width:0.99999988">R</tspan></text> - <text inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423" id="text16181" y="571" x="132.86957" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="571" x="132.86957" id="tspan16179" sodipodi:role="line">S</tspan></text> <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="154.86957" y="571" id="text16185" inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381"><tspan sodipodi:role="line" id="tspan16183" x="154.86957" y="571" style="fill:#ffcc00;stroke-width:0.99999988">T</tspan></text> <text inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423" id="text16189" y="571" x="174.86957" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="571" x="174.86957" id="tspan16187" sodipodi:role="line">U</tspan></text> <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="279.86957" y="571" id="text16193" inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381"><tspan sodipodi:role="line" id="tspan16191" x="279.86957" y="571" style="fill:#ffcc00;stroke-width:0.99999988">V</tspan></text> @@ -5857,4 +6051,4 @@ <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315918px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999994" x="491.83517" y="634.06061" id="text16243" inkscape:transform-center-y="3.124405" inkscape:transform-center-x="3.1987998"><tspan sodipodi:role="line" id="tspan16241" x="491.83517" y="634.06061" style="fill:#ffcc00;stroke-width:0.99999994">?</tspan></text> </g> </g> -</svg> +</svg>
\ No newline at end of file diff --git a/release/datafiles/blender_icons16/icon16_30.dat b/release/datafiles/blender_icons16/icon16_30.dat Binary files differdeleted file mode 100644 index 031fe465b23..00000000000 --- a/release/datafiles/blender_icons16/icon16_30.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_alembic.dat b/release/datafiles/blender_icons16/icon16_alembic.dat Binary files differindex d0695d8d111..856639b190c 100644 --- a/release/datafiles/blender_icons16/icon16_alembic.dat +++ b/release/datafiles/blender_icons16/icon16_alembic.dat diff --git a/release/datafiles/blender_icons16/icon16_border_lasso.dat b/release/datafiles/blender_icons16/icon16_border_lasso.dat Binary files differdeleted file mode 100644 index f8e7d173090..00000000000 --- a/release/datafiles/blender_icons16/icon16_border_lasso.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_border_rect.dat b/release/datafiles/blender_icons16/icon16_border_rect.dat Binary files differdeleted file mode 100644 index d20f4ce96ed..00000000000 --- a/release/datafiles/blender_icons16/icon16_border_rect.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_clipuv_dehlt.dat b/release/datafiles/blender_icons16/icon16_clipuv_dehlt.dat Binary files differindex 11eba16ef8c..5be72bbdb9f 100644 --- a/release/datafiles/blender_icons16/icon16_clipuv_dehlt.dat +++ b/release/datafiles/blender_icons16/icon16_clipuv_dehlt.dat diff --git a/release/datafiles/blender_icons16/icon16_clipuv_hlt.dat b/release/datafiles/blender_icons16/icon16_clipuv_hlt.dat Binary files differindex 8f6532da1e1..f8aa93b6dea 100644 --- a/release/datafiles/blender_icons16/icon16_clipuv_hlt.dat +++ b/release/datafiles/blender_icons16/icon16_clipuv_hlt.dat diff --git a/release/datafiles/blender_icons16/icon16_community.dat b/release/datafiles/blender_icons16/icon16_community.dat Binary files differnew file mode 100644 index 00000000000..f5aededb6e4 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_community.dat diff --git a/release/datafiles/blender_icons16/icon16_cone.dat b/release/datafiles/blender_icons16/icon16_cone.dat Binary files differnew file mode 100644 index 00000000000..1437f963b22 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_cone.dat diff --git a/release/datafiles/blender_icons16/icon16_constraint_data.dat b/release/datafiles/blender_icons16/icon16_constraint_data.dat Binary files differdeleted file mode 100644 index ef7bf561cc5..00000000000 --- a/release/datafiles/blender_icons16/icon16_constraint_data.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_cube.dat b/release/datafiles/blender_icons16/icon16_cube.dat Binary files differnew file mode 100644 index 00000000000..56e12fb82a6 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_cube.dat diff --git a/release/datafiles/blender_icons16/icon16_dotsdown.dat b/release/datafiles/blender_icons16/icon16_dotsdown.dat Binary files differdeleted file mode 100644 index e696794d69f..00000000000 --- a/release/datafiles/blender_icons16/icon16_dotsdown.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_dotsup.dat b/release/datafiles/blender_icons16/icon16_dotsup.dat Binary files differdeleted file mode 100644 index d0bd1e0ab31..00000000000 --- a/release/datafiles/blender_icons16/icon16_dotsup.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_duplicate.dat b/release/datafiles/blender_icons16/icon16_duplicate.dat Binary files differindex 5d2a2459882..1a899e843fd 100644 --- a/release/datafiles/blender_icons16/icon16_duplicate.dat +++ b/release/datafiles/blender_icons16/icon16_duplicate.dat diff --git a/release/datafiles/blender_icons16/icon16_edit.dat b/release/datafiles/blender_icons16/icon16_edit.dat Binary files differdeleted file mode 100644 index 8a6a122dc16..00000000000 --- a/release/datafiles/blender_icons16/icon16_edit.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_empty_arrows.dat b/release/datafiles/blender_icons16/icon16_empty_arrows.dat Binary files differnew file mode 100644 index 00000000000..2db020c3be7 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_empty_arrows.dat diff --git a/release/datafiles/blender_icons16/icon16_gp_empty.dat b/release/datafiles/blender_icons16/icon16_empty_axis.dat Binary files differindex 86936eae084..86936eae084 100644 --- a/release/datafiles/blender_icons16/icon16_gp_empty.dat +++ b/release/datafiles/blender_icons16/icon16_empty_axis.dat diff --git a/release/datafiles/blender_icons16/icon16_empty_single_arrow.dat b/release/datafiles/blender_icons16/icon16_empty_single_arrow.dat Binary files differnew file mode 100644 index 00000000000..296cff12fe5 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_empty_single_arrow.dat diff --git a/release/datafiles/blender_icons16/icon16_experimental.dat b/release/datafiles/blender_icons16/icon16_experimental.dat Binary files differnew file mode 100644 index 00000000000..cf3cb4cdc75 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_experimental.dat diff --git a/release/datafiles/blender_icons16/icon16_external_data.dat b/release/datafiles/blender_icons16/icon16_external_data.dat Binary files differdeleted file mode 100644 index 80be593729d..00000000000 --- a/release/datafiles/blender_icons16/icon16_external_data.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_facesel_hlt.dat b/release/datafiles/blender_icons16/icon16_facesel_hlt.dat Binary files differdeleted file mode 100644 index 1fcffbe02f5..00000000000 --- a/release/datafiles/blender_icons16/icon16_facesel_hlt.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_fake_user.dat b/release/datafiles/blender_icons16/icon16_fake_user.dat Binary files differdeleted file mode 100644 index c5c1710c456..00000000000 --- a/release/datafiles/blender_icons16/icon16_fake_user.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_fake_user_off.dat b/release/datafiles/blender_icons16/icon16_fake_user_off.dat Binary files differindex e427ca03c12..e32d023cc91 100644 --- a/release/datafiles/blender_icons16/icon16_fake_user_off.dat +++ b/release/datafiles/blender_icons16/icon16_fake_user_off.dat diff --git a/release/datafiles/blender_icons16/icon16_fake_user_on.dat b/release/datafiles/blender_icons16/icon16_fake_user_on.dat Binary files differindex 114aea89c37..4f36bf6a900 100644 --- a/release/datafiles/blender_icons16/icon16_fake_user_on.dat +++ b/release/datafiles/blender_icons16/icon16_fake_user_on.dat diff --git a/release/datafiles/blender_icons16/icon16_file_volume.dat b/release/datafiles/blender_icons16/icon16_file_volume.dat Binary files differnew file mode 100644 index 00000000000..bd00c5f62fc --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_file_volume.dat diff --git a/release/datafiles/blender_icons16/icon16_fullscreen.dat b/release/datafiles/blender_icons16/icon16_fullscreen.dat Binary files differdeleted file mode 100644 index 8b641e41ee4..00000000000 --- a/release/datafiles/blender_icons16/icon16_fullscreen.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_game.dat b/release/datafiles/blender_icons16/icon16_game.dat Binary files differdeleted file mode 100644 index d9823bb0e0d..00000000000 --- a/release/datafiles/blender_icons16/icon16_game.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_gear.dat b/release/datafiles/blender_icons16/icon16_gear.dat Binary files differdeleted file mode 100644 index 6052e4db88d..00000000000 --- a/release/datafiles/blender_icons16/icon16_gear.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_ghost.dat b/release/datafiles/blender_icons16/icon16_ghost.dat Binary files differdeleted file mode 100644 index 4f16d1c449c..00000000000 --- a/release/datafiles/blender_icons16/icon16_ghost.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_go_left.dat b/release/datafiles/blender_icons16/icon16_go_left.dat Binary files differdeleted file mode 100644 index 90648c555dd..00000000000 --- a/release/datafiles/blender_icons16/icon16_go_left.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat b/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat Binary files differdeleted file mode 100644 index 5d9b10eef1a..00000000000 --- a/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_heart.dat b/release/datafiles/blender_icons16/icon16_heart.dat Binary files differindex c5c1710c456..0e9e0a1e7c1 100644 --- a/release/datafiles/blender_icons16/icon16_heart.dat +++ b/release/datafiles/blender_icons16/icon16_heart.dat diff --git a/release/datafiles/blender_icons16/icon16_hide_off.dat b/release/datafiles/blender_icons16/icon16_hide_off.dat Binary files differindex 1ebceb3288d..8af5120e068 100644 --- a/release/datafiles/blender_icons16/icon16_hide_off.dat +++ b/release/datafiles/blender_icons16/icon16_hide_off.dat diff --git a/release/datafiles/blender_icons16/icon16_hide_on.dat b/release/datafiles/blender_icons16/icon16_hide_on.dat Binary files differindex 8af5120e068..1ebceb3288d 100644 --- a/release/datafiles/blender_icons16/icon16_hide_on.dat +++ b/release/datafiles/blender_icons16/icon16_hide_on.dat diff --git a/release/datafiles/blender_icons16/icon16_image_background.dat b/release/datafiles/blender_icons16/icon16_image_background.dat Binary files differnew file mode 100644 index 00000000000..aa089a3948f --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_image_background.dat diff --git a/release/datafiles/blender_icons16/icon16_image_plane.dat b/release/datafiles/blender_icons16/icon16_image_plane.dat Binary files differnew file mode 100644 index 00000000000..33f5101c4b7 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_image_plane.dat diff --git a/release/datafiles/blender_icons16/icon16_image_reference.dat b/release/datafiles/blender_icons16/icon16_image_reference.dat Binary files differnew file mode 100644 index 00000000000..a694892f125 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_image_reference.dat diff --git a/release/datafiles/blender_icons16/icon16_imagefile.dat b/release/datafiles/blender_icons16/icon16_imagefile.dat Binary files differdeleted file mode 100644 index d5dac564d06..00000000000 --- a/release/datafiles/blender_icons16/icon16_imagefile.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_inlink.dat b/release/datafiles/blender_icons16/icon16_inlink.dat Binary files differdeleted file mode 100644 index a01348c4ef8..00000000000 --- a/release/datafiles/blender_icons16/icon16_inlink.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_lightpaint.dat b/release/datafiles/blender_icons16/icon16_lightpaint.dat Binary files differdeleted file mode 100644 index 49abde94c6a..00000000000 --- a/release/datafiles/blender_icons16/icon16_lightpaint.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_link.dat b/release/datafiles/blender_icons16/icon16_link.dat Binary files differdeleted file mode 100644 index df4b0211f29..00000000000 --- a/release/datafiles/blender_icons16/icon16_link.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_link_area.dat b/release/datafiles/blender_icons16/icon16_link_area.dat Binary files differdeleted file mode 100644 index 75f7b6d4a81..00000000000 --- a/release/datafiles/blender_icons16/icon16_link_area.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_logic.dat b/release/datafiles/blender_icons16/icon16_logic.dat Binary files differdeleted file mode 100644 index 2ce7bb15f54..00000000000 --- a/release/datafiles/blender_icons16/icon16_logic.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_man_rot.dat b/release/datafiles/blender_icons16/icon16_man_rot.dat Binary files differdeleted file mode 100644 index b84df37a9c5..00000000000 --- a/release/datafiles/blender_icons16/icon16_man_rot.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_man_scale.dat b/release/datafiles/blender_icons16/icon16_man_scale.dat Binary files differdeleted file mode 100644 index 301e42a764f..00000000000 --- a/release/datafiles/blender_icons16/icon16_man_scale.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_man_trans.dat b/release/datafiles/blender_icons16/icon16_man_trans.dat Binary files differdeleted file mode 100644 index 260fab4f1ee..00000000000 --- a/release/datafiles/blender_icons16/icon16_man_trans.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_manipul.dat b/release/datafiles/blender_icons16/icon16_manipul.dat Binary files differdeleted file mode 100644 index 91d33fa2dea..00000000000 --- a/release/datafiles/blender_icons16/icon16_manipul.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_matshaderball.dat b/release/datafiles/blender_icons16/icon16_matshaderball.dat Binary files differindex 254f47ec1bd..5dbbd9158c0 100644 --- a/release/datafiles/blender_icons16/icon16_matshaderball.dat +++ b/release/datafiles/blender_icons16/icon16_matshaderball.dat diff --git a/release/datafiles/blender_icons16/icon16_meta_empty.dat b/release/datafiles/blender_icons16/icon16_meta_empty.dat Binary files differdeleted file mode 100644 index d7c94ae8f93..00000000000 --- a/release/datafiles/blender_icons16/icon16_meta_empty.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_mod_particles.dat b/release/datafiles/blender_icons16/icon16_mod_particles.dat Binary files differindex 9376f765d5f..f84236d3ae5 100644 --- a/release/datafiles/blender_icons16/icon16_mod_particles.dat +++ b/release/datafiles/blender_icons16/icon16_mod_particles.dat diff --git a/release/datafiles/blender_icons16/icon16_node_insert_top.dat b/release/datafiles/blender_icons16/icon16_node_insert_top.dat Binary files differdeleted file mode 100644 index 0085af4c972..00000000000 --- a/release/datafiles/blender_icons16/icon16_node_insert_top.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_object_data.dat b/release/datafiles/blender_icons16/icon16_object_data.dat Binary files differindex b9ac24f0253..c1ad1a48da1 100644 --- a/release/datafiles/blender_icons16/icon16_object_data.dat +++ b/release/datafiles/blender_icons16/icon16_object_data.dat diff --git a/release/datafiles/blender_icons16/icon16_object_datamode.dat b/release/datafiles/blender_icons16/icon16_object_datamode.dat Binary files differindex fad52577f1a..66b5a8fa103 100644 --- a/release/datafiles/blender_icons16/icon16_object_datamode.dat +++ b/release/datafiles/blender_icons16/icon16_object_datamode.dat diff --git a/release/datafiles/blender_icons16/icon16_open_recent.dat b/release/datafiles/blender_icons16/icon16_open_recent.dat Binary files differdeleted file mode 100644 index 40a0e332db3..00000000000 --- a/release/datafiles/blender_icons16/icon16_open_recent.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_orphan_data.dat b/release/datafiles/blender_icons16/icon16_orphan_data.dat Binary files differindex fa5cddaadfe..4ff41f0a678 100644 --- a/release/datafiles/blender_icons16/icon16_orphan_data.dat +++ b/release/datafiles/blender_icons16/icon16_orphan_data.dat diff --git a/release/datafiles/blender_icons16/icon16_outliner_data_pose.dat b/release/datafiles/blender_icons16/icon16_outliner_data_pose.dat Binary files differdeleted file mode 100644 index 1a13a01a820..00000000000 --- a/release/datafiles/blender_icons16/icon16_outliner_data_pose.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_output.dat b/release/datafiles/blender_icons16/icon16_output.dat Binary files differnew file mode 100644 index 00000000000..0f2d3ba4755 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_output.dat diff --git a/release/datafiles/blender_icons16/icon16_particle_data.dat b/release/datafiles/blender_icons16/icon16_particle_data.dat Binary files differindex fec6c73fda6..c8ae91c15d7 100644 --- a/release/datafiles/blender_icons16/icon16_particle_data.dat +++ b/release/datafiles/blender_icons16/icon16_particle_data.dat diff --git a/release/datafiles/blender_icons16/icon16_particles.dat b/release/datafiles/blender_icons16/icon16_particles.dat Binary files differindex 23f9d049c2b..00a18636539 100644 --- a/release/datafiles/blender_icons16/icon16_particles.dat +++ b/release/datafiles/blender_icons16/icon16_particles.dat diff --git a/release/datafiles/blender_icons16/icon16_physics.dat b/release/datafiles/blender_icons16/icon16_physics.dat Binary files differindex 9f16b4ece6d..fa571134415 100644 --- a/release/datafiles/blender_icons16/icon16_physics.dat +++ b/release/datafiles/blender_icons16/icon16_physics.dat diff --git a/release/datafiles/blender_icons16/icon16_pinned.dat b/release/datafiles/blender_icons16/icon16_pinned.dat Binary files differindex c5a7b07a996..c82bb797f1e 100644 --- a/release/datafiles/blender_icons16/icon16_pinned.dat +++ b/release/datafiles/blender_icons16/icon16_pinned.dat diff --git a/release/datafiles/blender_icons16/icon16_plug.dat b/release/datafiles/blender_icons16/icon16_plug.dat Binary files differdeleted file mode 100644 index 198f47a35fc..00000000000 --- a/release/datafiles/blender_icons16/icon16_plug.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_pose_data.dat b/release/datafiles/blender_icons16/icon16_pose_data.dat Binary files differdeleted file mode 100644 index b15edbbe82d..00000000000 --- a/release/datafiles/blender_icons16/icon16_pose_data.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_radio.dat b/release/datafiles/blender_icons16/icon16_radio.dat Binary files differdeleted file mode 100644 index 387081d8f42..00000000000 --- a/release/datafiles/blender_icons16/icon16_radio.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_render_region.dat b/release/datafiles/blender_icons16/icon16_render_region.dat Binary files differdeleted file mode 100644 index 6e6a57d8f0a..00000000000 --- a/release/datafiles/blender_icons16/icon16_render_region.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_restrict_render_off.dat b/release/datafiles/blender_icons16/icon16_restrict_render_off.dat Binary files differindex 8f448345d13..f62bbd408a5 100644 --- a/release/datafiles/blender_icons16/icon16_restrict_render_off.dat +++ b/release/datafiles/blender_icons16/icon16_restrict_render_off.dat diff --git a/release/datafiles/blender_icons16/icon16_restrict_render_on.dat b/release/datafiles/blender_icons16/icon16_restrict_render_on.dat Binary files differindex f62bbd408a5..8f448345d13 100644 --- a/release/datafiles/blender_icons16/icon16_restrict_render_on.dat +++ b/release/datafiles/blender_icons16/icon16_restrict_render_on.dat diff --git a/release/datafiles/blender_icons16/icon16_restrict_select_off.dat b/release/datafiles/blender_icons16/icon16_restrict_select_off.dat Binary files differindex a7c55e6b522..226a64d2b51 100644 --- a/release/datafiles/blender_icons16/icon16_restrict_select_off.dat +++ b/release/datafiles/blender_icons16/icon16_restrict_select_off.dat diff --git a/release/datafiles/blender_icons16/icon16_restrict_select_on.dat b/release/datafiles/blender_icons16/icon16_restrict_select_on.dat Binary files differindex 226a64d2b51..a7c55e6b522 100644 --- a/release/datafiles/blender_icons16/icon16_restrict_select_on.dat +++ b/release/datafiles/blender_icons16/icon16_restrict_select_on.dat diff --git a/release/datafiles/blender_icons16/icon16_restrict_view_off.dat b/release/datafiles/blender_icons16/icon16_restrict_view_off.dat Binary files differindex 4b2e00677d8..36d1de55f9e 100644 --- a/release/datafiles/blender_icons16/icon16_restrict_view_off.dat +++ b/release/datafiles/blender_icons16/icon16_restrict_view_off.dat diff --git a/release/datafiles/blender_icons16/icon16_restrict_view_on.dat b/release/datafiles/blender_icons16/icon16_restrict_view_on.dat Binary files differindex 36d1de55f9e..4b2e00677d8 100644 --- a/release/datafiles/blender_icons16/icon16_restrict_view_on.dat +++ b/release/datafiles/blender_icons16/icon16_restrict_view_on.dat diff --git a/release/datafiles/blender_icons16/icon16_retopo.dat b/release/datafiles/blender_icons16/icon16_retopo.dat Binary files differdeleted file mode 100644 index 786600d06fa..00000000000 --- a/release/datafiles/blender_icons16/icon16_retopo.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_sculpt_dyntopo.dat b/release/datafiles/blender_icons16/icon16_sculpt_dyntopo.dat Binary files differindex 89dc93621a4..951af8a0f1d 100644 --- a/release/datafiles/blender_icons16/icon16_sculpt_dyntopo.dat +++ b/release/datafiles/blender_icons16/icon16_sculpt_dyntopo.dat diff --git a/release/datafiles/blender_icons16/icon16_sequence.dat b/release/datafiles/blender_icons16/icon16_sequence.dat Binary files differindex ccd2b223343..0731670a656 100644 --- a/release/datafiles/blender_icons16/icon16_sequence.dat +++ b/release/datafiles/blender_icons16/icon16_sequence.dat diff --git a/release/datafiles/blender_icons16/icon16_shading_texture.dat b/release/datafiles/blender_icons16/icon16_shading_texture.dat Binary files differindex 6e6555dff56..3c5becaa98c 100644 --- a/release/datafiles/blender_icons16/icon16_shading_texture.dat +++ b/release/datafiles/blender_icons16/icon16_shading_texture.dat diff --git a/release/datafiles/blender_icons16/icon16_shapekey_data.dat b/release/datafiles/blender_icons16/icon16_shapekey_data.dat Binary files differindex 27d71c66886..e560de479c3 100644 --- a/release/datafiles/blender_icons16/icon16_shapekey_data.dat +++ b/release/datafiles/blender_icons16/icon16_shapekey_data.dat diff --git a/release/datafiles/blender_icons16/icon16_snap_normal.dat b/release/datafiles/blender_icons16/icon16_snap_normal.dat Binary files differindex e30b9f47008..3c4f328f2d6 100644 --- a/release/datafiles/blender_icons16/icon16_snap_normal.dat +++ b/release/datafiles/blender_icons16/icon16_snap_normal.dat diff --git a/release/datafiles/blender_icons16/icon16_snap_peel_object.dat b/release/datafiles/blender_icons16/icon16_snap_peel_object.dat Binary files differindex 306a89b368e..51cac46c3e5 100644 --- a/release/datafiles/blender_icons16/icon16_snap_peel_object.dat +++ b/release/datafiles/blender_icons16/icon16_snap_peel_object.dat diff --git a/release/datafiles/blender_icons16/icon16_sphere.dat b/release/datafiles/blender_icons16/icon16_sphere.dat Binary files differnew file mode 100644 index 00000000000..d7109cf22f0 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_sphere.dat diff --git a/release/datafiles/blender_icons16/icon16_gp_stroke.dat b/release/datafiles/blender_icons16/icon16_stroke.dat Binary files differindex ff0c820651a..ff0c820651a 100644 --- a/release/datafiles/blender_icons16/icon16_gp_stroke.dat +++ b/release/datafiles/blender_icons16/icon16_stroke.dat diff --git a/release/datafiles/blender_icons16/icon16_temperature.dat b/release/datafiles/blender_icons16/icon16_temperature.dat Binary files differdeleted file mode 100644 index 6bb3835c7ea..00000000000 --- a/release/datafiles/blender_icons16/icon16_temperature.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_texture_shaded.dat b/release/datafiles/blender_icons16/icon16_texture_shaded.dat Binary files differdeleted file mode 100644 index e83dda3e23a..00000000000 --- a/release/datafiles/blender_icons16/icon16_texture_shaded.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_tool_settings.dat b/release/datafiles/blender_icons16/icon16_tool_settings.dat Binary files differindex 52568e4d040..7755b32ff38 100644 --- a/release/datafiles/blender_icons16/icon16_tool_settings.dat +++ b/release/datafiles/blender_icons16/icon16_tool_settings.dat diff --git a/release/datafiles/blender_icons16/icon16_tria_left.dat b/release/datafiles/blender_icons16/icon16_tria_left.dat Binary files differindex df00a01e313..dc7680e324c 100644 --- a/release/datafiles/blender_icons16/icon16_tria_left.dat +++ b/release/datafiles/blender_icons16/icon16_tria_left.dat diff --git a/release/datafiles/blender_icons16/icon16_ui.dat b/release/datafiles/blender_icons16/icon16_ui.dat Binary files differdeleted file mode 100644 index 42fc040ae8c..00000000000 --- a/release/datafiles/blender_icons16/icon16_ui.dat +++ /dev/null diff --git a/release/datafiles/blender_icons16/icon16_unpinned.dat b/release/datafiles/blender_icons16/icon16_unpinned.dat Binary files differindex 273e3e32d70..d381c48af66 100644 --- a/release/datafiles/blender_icons16/icon16_unpinned.dat +++ b/release/datafiles/blender_icons16/icon16_unpinned.dat diff --git a/release/datafiles/blender_icons16/icon16_world.dat b/release/datafiles/blender_icons16/icon16_world.dat Binary files differindex d68756ff789..8c73050a84b 100644 --- a/release/datafiles/blender_icons16/icon16_world.dat +++ b/release/datafiles/blender_icons16/icon16_world.dat diff --git a/release/datafiles/blender_icons16/icon16_world_data.dat b/release/datafiles/blender_icons16/icon16_world_data.dat Binary files differindex 8ec53887896..1852690c06f 100644 --- a/release/datafiles/blender_icons16/icon16_world_data.dat +++ b/release/datafiles/blender_icons16/icon16_world_data.dat diff --git a/release/datafiles/blender_icons16/icon16_xray.dat b/release/datafiles/blender_icons16/icon16_xray.dat Binary files differindex 73e36863f5d..9a19a88f91a 100644 --- a/release/datafiles/blender_icons16/icon16_xray.dat +++ b/release/datafiles/blender_icons16/icon16_xray.dat diff --git a/release/datafiles/blender_icons32/icon32_30.dat b/release/datafiles/blender_icons32/icon32_30.dat Binary files differdeleted file mode 100644 index 8022d377400..00000000000 --- a/release/datafiles/blender_icons32/icon32_30.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_alembic.dat b/release/datafiles/blender_icons32/icon32_alembic.dat Binary files differindex 01c0737a550..d44abf64173 100644 --- a/release/datafiles/blender_icons32/icon32_alembic.dat +++ b/release/datafiles/blender_icons32/icon32_alembic.dat diff --git a/release/datafiles/blender_icons32/icon32_border_lasso.dat b/release/datafiles/blender_icons32/icon32_border_lasso.dat Binary files differdeleted file mode 100644 index b549de9e45f..00000000000 --- a/release/datafiles/blender_icons32/icon32_border_lasso.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_border_rect.dat b/release/datafiles/blender_icons32/icon32_border_rect.dat Binary files differdeleted file mode 100644 index 9f988a97ae3..00000000000 --- a/release/datafiles/blender_icons32/icon32_border_rect.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_clipuv_dehlt.dat b/release/datafiles/blender_icons32/icon32_clipuv_dehlt.dat Binary files differindex 72ae1cac8c8..d7f1139a0de 100644 --- a/release/datafiles/blender_icons32/icon32_clipuv_dehlt.dat +++ b/release/datafiles/blender_icons32/icon32_clipuv_dehlt.dat diff --git a/release/datafiles/blender_icons32/icon32_clipuv_hlt.dat b/release/datafiles/blender_icons32/icon32_clipuv_hlt.dat Binary files differindex 28c02768b49..4e41468d725 100644 --- a/release/datafiles/blender_icons32/icon32_clipuv_hlt.dat +++ b/release/datafiles/blender_icons32/icon32_clipuv_hlt.dat diff --git a/release/datafiles/blender_icons32/icon32_community.dat b/release/datafiles/blender_icons32/icon32_community.dat Binary files differnew file mode 100644 index 00000000000..0afa58991c5 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_community.dat diff --git a/release/datafiles/blender_icons32/icon32_cone.dat b/release/datafiles/blender_icons32/icon32_cone.dat Binary files differnew file mode 100644 index 00000000000..977776b6339 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_cone.dat diff --git a/release/datafiles/blender_icons32/icon32_constraint_data.dat b/release/datafiles/blender_icons32/icon32_constraint_data.dat Binary files differdeleted file mode 100644 index 086f5dc05c1..00000000000 --- a/release/datafiles/blender_icons32/icon32_constraint_data.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_cube.dat b/release/datafiles/blender_icons32/icon32_cube.dat Binary files differnew file mode 100644 index 00000000000..1eba0f5dfc2 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_cube.dat diff --git a/release/datafiles/blender_icons32/icon32_dotsdown.dat b/release/datafiles/blender_icons32/icon32_dotsdown.dat Binary files differdeleted file mode 100644 index 239de1227a2..00000000000 --- a/release/datafiles/blender_icons32/icon32_dotsdown.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_dotsup.dat b/release/datafiles/blender_icons32/icon32_dotsup.dat Binary files differdeleted file mode 100644 index f25ee2bde1d..00000000000 --- a/release/datafiles/blender_icons32/icon32_dotsup.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_duplicate.dat b/release/datafiles/blender_icons32/icon32_duplicate.dat Binary files differindex 3060365c3d7..a61a5562e5d 100644 --- a/release/datafiles/blender_icons32/icon32_duplicate.dat +++ b/release/datafiles/blender_icons32/icon32_duplicate.dat diff --git a/release/datafiles/blender_icons32/icon32_edit.dat b/release/datafiles/blender_icons32/icon32_edit.dat Binary files differdeleted file mode 100644 index 20157258b29..00000000000 --- a/release/datafiles/blender_icons32/icon32_edit.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_empty_arrows.dat b/release/datafiles/blender_icons32/icon32_empty_arrows.dat Binary files differnew file mode 100644 index 00000000000..cd849c3944f --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_empty_arrows.dat diff --git a/release/datafiles/blender_icons32/icon32_gp_empty.dat b/release/datafiles/blender_icons32/icon32_empty_axis.dat Binary files differindex 79e53c31d1b..79e53c31d1b 100644 --- a/release/datafiles/blender_icons32/icon32_gp_empty.dat +++ b/release/datafiles/blender_icons32/icon32_empty_axis.dat diff --git a/release/datafiles/blender_icons32/icon32_empty_single_arrow.dat b/release/datafiles/blender_icons32/icon32_empty_single_arrow.dat Binary files differnew file mode 100644 index 00000000000..a2dead97a3a --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_empty_single_arrow.dat diff --git a/release/datafiles/blender_icons32/icon32_experimental.dat b/release/datafiles/blender_icons32/icon32_experimental.dat Binary files differnew file mode 100644 index 00000000000..8613daea7e0 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_experimental.dat diff --git a/release/datafiles/blender_icons32/icon32_external_data.dat b/release/datafiles/blender_icons32/icon32_external_data.dat Binary files differdeleted file mode 100644 index 1d1a3bcaff4..00000000000 --- a/release/datafiles/blender_icons32/icon32_external_data.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_facesel_hlt.dat b/release/datafiles/blender_icons32/icon32_facesel_hlt.dat Binary files differdeleted file mode 100644 index 99e79fdd432..00000000000 --- a/release/datafiles/blender_icons32/icon32_facesel_hlt.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_fake_user.dat b/release/datafiles/blender_icons32/icon32_fake_user.dat Binary files differdeleted file mode 100644 index 6c010f275d8..00000000000 --- a/release/datafiles/blender_icons32/icon32_fake_user.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_fake_user_off.dat b/release/datafiles/blender_icons32/icon32_fake_user_off.dat Binary files differindex a25fcf8bc95..b8512edbc28 100644 --- a/release/datafiles/blender_icons32/icon32_fake_user_off.dat +++ b/release/datafiles/blender_icons32/icon32_fake_user_off.dat diff --git a/release/datafiles/blender_icons32/icon32_fake_user_on.dat b/release/datafiles/blender_icons32/icon32_fake_user_on.dat Binary files differindex d0cb988b072..c66c8e1b93b 100644 --- a/release/datafiles/blender_icons32/icon32_fake_user_on.dat +++ b/release/datafiles/blender_icons32/icon32_fake_user_on.dat diff --git a/release/datafiles/blender_icons32/icon32_file_volume.dat b/release/datafiles/blender_icons32/icon32_file_volume.dat Binary files differnew file mode 100644 index 00000000000..51f7c4084aa --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_file_volume.dat diff --git a/release/datafiles/blender_icons32/icon32_fullscreen.dat b/release/datafiles/blender_icons32/icon32_fullscreen.dat Binary files differdeleted file mode 100644 index 1d9098676a1..00000000000 --- a/release/datafiles/blender_icons32/icon32_fullscreen.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_game.dat b/release/datafiles/blender_icons32/icon32_game.dat Binary files differdeleted file mode 100644 index db3d727b236..00000000000 --- a/release/datafiles/blender_icons32/icon32_game.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_gear.dat b/release/datafiles/blender_icons32/icon32_gear.dat Binary files differdeleted file mode 100644 index 44287225776..00000000000 --- a/release/datafiles/blender_icons32/icon32_gear.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_ghost.dat b/release/datafiles/blender_icons32/icon32_ghost.dat Binary files differdeleted file mode 100644 index 50428d8a33d..00000000000 --- a/release/datafiles/blender_icons32/icon32_ghost.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_go_left.dat b/release/datafiles/blender_icons32/icon32_go_left.dat Binary files differdeleted file mode 100644 index 33d852f6d60..00000000000 --- a/release/datafiles/blender_icons32/icon32_go_left.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat b/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat Binary files differdeleted file mode 100644 index b6aabfedc01..00000000000 --- a/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_heart.dat b/release/datafiles/blender_icons32/icon32_heart.dat Binary files differindex 6c010f275d8..263add4ad57 100644 --- a/release/datafiles/blender_icons32/icon32_heart.dat +++ b/release/datafiles/blender_icons32/icon32_heart.dat diff --git a/release/datafiles/blender_icons32/icon32_hide_off.dat b/release/datafiles/blender_icons32/icon32_hide_off.dat Binary files differindex 85d285fc25c..82ce963ad2d 100644 --- a/release/datafiles/blender_icons32/icon32_hide_off.dat +++ b/release/datafiles/blender_icons32/icon32_hide_off.dat diff --git a/release/datafiles/blender_icons32/icon32_hide_on.dat b/release/datafiles/blender_icons32/icon32_hide_on.dat Binary files differindex 82ce963ad2d..85d285fc25c 100644 --- a/release/datafiles/blender_icons32/icon32_hide_on.dat +++ b/release/datafiles/blender_icons32/icon32_hide_on.dat diff --git a/release/datafiles/blender_icons32/icon32_image_background.dat b/release/datafiles/blender_icons32/icon32_image_background.dat Binary files differnew file mode 100644 index 00000000000..2d38f63026c --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_image_background.dat diff --git a/release/datafiles/blender_icons32/icon32_image_plane.dat b/release/datafiles/blender_icons32/icon32_image_plane.dat Binary files differnew file mode 100644 index 00000000000..57721a8bc8d --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_image_plane.dat diff --git a/release/datafiles/blender_icons32/icon32_image_reference.dat b/release/datafiles/blender_icons32/icon32_image_reference.dat Binary files differnew file mode 100644 index 00000000000..d82a7b087f8 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_image_reference.dat diff --git a/release/datafiles/blender_icons32/icon32_imagefile.dat b/release/datafiles/blender_icons32/icon32_imagefile.dat Binary files differdeleted file mode 100644 index c27f078d556..00000000000 --- a/release/datafiles/blender_icons32/icon32_imagefile.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_inlink.dat b/release/datafiles/blender_icons32/icon32_inlink.dat Binary files differdeleted file mode 100644 index e533cead942..00000000000 --- a/release/datafiles/blender_icons32/icon32_inlink.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_lightpaint.dat b/release/datafiles/blender_icons32/icon32_lightpaint.dat Binary files differdeleted file mode 100644 index dd14ce00547..00000000000 --- a/release/datafiles/blender_icons32/icon32_lightpaint.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_link.dat b/release/datafiles/blender_icons32/icon32_link.dat Binary files differdeleted file mode 100644 index 94629cc0de9..00000000000 --- a/release/datafiles/blender_icons32/icon32_link.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_link_area.dat b/release/datafiles/blender_icons32/icon32_link_area.dat Binary files differdeleted file mode 100644 index ae834d98260..00000000000 --- a/release/datafiles/blender_icons32/icon32_link_area.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_logic.dat b/release/datafiles/blender_icons32/icon32_logic.dat Binary files differdeleted file mode 100644 index 59725f1a98a..00000000000 --- a/release/datafiles/blender_icons32/icon32_logic.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_man_rot.dat b/release/datafiles/blender_icons32/icon32_man_rot.dat Binary files differdeleted file mode 100644 index b1037c62903..00000000000 --- a/release/datafiles/blender_icons32/icon32_man_rot.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_man_scale.dat b/release/datafiles/blender_icons32/icon32_man_scale.dat Binary files differdeleted file mode 100644 index b49d163de93..00000000000 --- a/release/datafiles/blender_icons32/icon32_man_scale.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_man_trans.dat b/release/datafiles/blender_icons32/icon32_man_trans.dat Binary files differdeleted file mode 100644 index b23199f6dc1..00000000000 --- a/release/datafiles/blender_icons32/icon32_man_trans.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_manipul.dat b/release/datafiles/blender_icons32/icon32_manipul.dat Binary files differdeleted file mode 100644 index f4adb64d6d0..00000000000 --- a/release/datafiles/blender_icons32/icon32_manipul.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_matshaderball.dat b/release/datafiles/blender_icons32/icon32_matshaderball.dat Binary files differindex 2cf1af4122e..1ff46c6b413 100644 --- a/release/datafiles/blender_icons32/icon32_matshaderball.dat +++ b/release/datafiles/blender_icons32/icon32_matshaderball.dat diff --git a/release/datafiles/blender_icons32/icon32_meta_empty.dat b/release/datafiles/blender_icons32/icon32_meta_empty.dat Binary files differdeleted file mode 100644 index 9bbf02a57a3..00000000000 --- a/release/datafiles/blender_icons32/icon32_meta_empty.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_mod_particles.dat b/release/datafiles/blender_icons32/icon32_mod_particles.dat Binary files differindex 84a51343313..89b89ca0433 100644 --- a/release/datafiles/blender_icons32/icon32_mod_particles.dat +++ b/release/datafiles/blender_icons32/icon32_mod_particles.dat diff --git a/release/datafiles/blender_icons32/icon32_node_insert_top.dat b/release/datafiles/blender_icons32/icon32_node_insert_top.dat Binary files differdeleted file mode 100644 index de1c72f449d..00000000000 --- a/release/datafiles/blender_icons32/icon32_node_insert_top.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_object_data.dat b/release/datafiles/blender_icons32/icon32_object_data.dat Binary files differindex 40ab431a24d..2a7316a3a48 100644 --- a/release/datafiles/blender_icons32/icon32_object_data.dat +++ b/release/datafiles/blender_icons32/icon32_object_data.dat diff --git a/release/datafiles/blender_icons32/icon32_object_datamode.dat b/release/datafiles/blender_icons32/icon32_object_datamode.dat Binary files differindex 8209305cfe8..495717fd1e4 100644 --- a/release/datafiles/blender_icons32/icon32_object_datamode.dat +++ b/release/datafiles/blender_icons32/icon32_object_datamode.dat diff --git a/release/datafiles/blender_icons32/icon32_open_recent.dat b/release/datafiles/blender_icons32/icon32_open_recent.dat Binary files differdeleted file mode 100644 index 86417937e36..00000000000 --- a/release/datafiles/blender_icons32/icon32_open_recent.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_orphan_data.dat b/release/datafiles/blender_icons32/icon32_orphan_data.dat Binary files differindex 8ece0b7026c..fbe00298b5c 100644 --- a/release/datafiles/blender_icons32/icon32_orphan_data.dat +++ b/release/datafiles/blender_icons32/icon32_orphan_data.dat diff --git a/release/datafiles/blender_icons32/icon32_outliner_data_pose.dat b/release/datafiles/blender_icons32/icon32_outliner_data_pose.dat Binary files differdeleted file mode 100644 index f1beb2313fa..00000000000 --- a/release/datafiles/blender_icons32/icon32_outliner_data_pose.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_output.dat b/release/datafiles/blender_icons32/icon32_output.dat Binary files differnew file mode 100644 index 00000000000..0892fd1a7e5 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_output.dat diff --git a/release/datafiles/blender_icons32/icon32_particle_data.dat b/release/datafiles/blender_icons32/icon32_particle_data.dat Binary files differindex eb1ea031df1..2bc2ce76c6d 100644 --- a/release/datafiles/blender_icons32/icon32_particle_data.dat +++ b/release/datafiles/blender_icons32/icon32_particle_data.dat diff --git a/release/datafiles/blender_icons32/icon32_particles.dat b/release/datafiles/blender_icons32/icon32_particles.dat Binary files differindex 1a716802303..b99156dc98e 100644 --- a/release/datafiles/blender_icons32/icon32_particles.dat +++ b/release/datafiles/blender_icons32/icon32_particles.dat diff --git a/release/datafiles/blender_icons32/icon32_physics.dat b/release/datafiles/blender_icons32/icon32_physics.dat Binary files differindex e9c5072cc57..52356fa2118 100644 --- a/release/datafiles/blender_icons32/icon32_physics.dat +++ b/release/datafiles/blender_icons32/icon32_physics.dat diff --git a/release/datafiles/blender_icons32/icon32_pinned.dat b/release/datafiles/blender_icons32/icon32_pinned.dat Binary files differindex 08fc5cc9fb9..96c29a37feb 100644 --- a/release/datafiles/blender_icons32/icon32_pinned.dat +++ b/release/datafiles/blender_icons32/icon32_pinned.dat diff --git a/release/datafiles/blender_icons32/icon32_plug.dat b/release/datafiles/blender_icons32/icon32_plug.dat Binary files differdeleted file mode 100644 index a93da245617..00000000000 --- a/release/datafiles/blender_icons32/icon32_plug.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_pose_data.dat b/release/datafiles/blender_icons32/icon32_pose_data.dat Binary files differdeleted file mode 100644 index 71e34c96345..00000000000 --- a/release/datafiles/blender_icons32/icon32_pose_data.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_radio.dat b/release/datafiles/blender_icons32/icon32_radio.dat Binary files differdeleted file mode 100644 index cf3e2485b95..00000000000 --- a/release/datafiles/blender_icons32/icon32_radio.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_render_region.dat b/release/datafiles/blender_icons32/icon32_render_region.dat Binary files differdeleted file mode 100644 index ebe4cb8bfd6..00000000000 --- a/release/datafiles/blender_icons32/icon32_render_region.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_restrict_render_off.dat b/release/datafiles/blender_icons32/icon32_restrict_render_off.dat Binary files differindex 9b292bc8f69..7f23b246d13 100644 --- a/release/datafiles/blender_icons32/icon32_restrict_render_off.dat +++ b/release/datafiles/blender_icons32/icon32_restrict_render_off.dat diff --git a/release/datafiles/blender_icons32/icon32_restrict_render_on.dat b/release/datafiles/blender_icons32/icon32_restrict_render_on.dat Binary files differindex 7f23b246d13..9b292bc8f69 100644 --- a/release/datafiles/blender_icons32/icon32_restrict_render_on.dat +++ b/release/datafiles/blender_icons32/icon32_restrict_render_on.dat diff --git a/release/datafiles/blender_icons32/icon32_restrict_select_off.dat b/release/datafiles/blender_icons32/icon32_restrict_select_off.dat Binary files differindex 43a1d88ae73..714fe951b46 100644 --- a/release/datafiles/blender_icons32/icon32_restrict_select_off.dat +++ b/release/datafiles/blender_icons32/icon32_restrict_select_off.dat diff --git a/release/datafiles/blender_icons32/icon32_restrict_select_on.dat b/release/datafiles/blender_icons32/icon32_restrict_select_on.dat Binary files differindex 714fe951b46..43a1d88ae73 100644 --- a/release/datafiles/blender_icons32/icon32_restrict_select_on.dat +++ b/release/datafiles/blender_icons32/icon32_restrict_select_on.dat diff --git a/release/datafiles/blender_icons32/icon32_restrict_view_off.dat b/release/datafiles/blender_icons32/icon32_restrict_view_off.dat Binary files differindex 26059e4eedf..7ed3928b4b0 100644 --- a/release/datafiles/blender_icons32/icon32_restrict_view_off.dat +++ b/release/datafiles/blender_icons32/icon32_restrict_view_off.dat diff --git a/release/datafiles/blender_icons32/icon32_restrict_view_on.dat b/release/datafiles/blender_icons32/icon32_restrict_view_on.dat Binary files differindex 7ed3928b4b0..26059e4eedf 100644 --- a/release/datafiles/blender_icons32/icon32_restrict_view_on.dat +++ b/release/datafiles/blender_icons32/icon32_restrict_view_on.dat diff --git a/release/datafiles/blender_icons32/icon32_retopo.dat b/release/datafiles/blender_icons32/icon32_retopo.dat Binary files differdeleted file mode 100644 index f8c3b46e729..00000000000 --- a/release/datafiles/blender_icons32/icon32_retopo.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_sculpt_dyntopo.dat b/release/datafiles/blender_icons32/icon32_sculpt_dyntopo.dat Binary files differindex 78f5d680acb..68ea906002c 100644 --- a/release/datafiles/blender_icons32/icon32_sculpt_dyntopo.dat +++ b/release/datafiles/blender_icons32/icon32_sculpt_dyntopo.dat diff --git a/release/datafiles/blender_icons32/icon32_sequence.dat b/release/datafiles/blender_icons32/icon32_sequence.dat Binary files differindex 70378ea8364..eda9fdd7876 100644 --- a/release/datafiles/blender_icons32/icon32_sequence.dat +++ b/release/datafiles/blender_icons32/icon32_sequence.dat diff --git a/release/datafiles/blender_icons32/icon32_shading_texture.dat b/release/datafiles/blender_icons32/icon32_shading_texture.dat Binary files differindex a72c06bbaf1..1bd76317a0e 100644 --- a/release/datafiles/blender_icons32/icon32_shading_texture.dat +++ b/release/datafiles/blender_icons32/icon32_shading_texture.dat diff --git a/release/datafiles/blender_icons32/icon32_shapekey_data.dat b/release/datafiles/blender_icons32/icon32_shapekey_data.dat Binary files differindex 505f796ad0c..ec8346abb8f 100644 --- a/release/datafiles/blender_icons32/icon32_shapekey_data.dat +++ b/release/datafiles/blender_icons32/icon32_shapekey_data.dat diff --git a/release/datafiles/blender_icons32/icon32_snap_normal.dat b/release/datafiles/blender_icons32/icon32_snap_normal.dat Binary files differindex df2e6337011..e5f6420b635 100644 --- a/release/datafiles/blender_icons32/icon32_snap_normal.dat +++ b/release/datafiles/blender_icons32/icon32_snap_normal.dat diff --git a/release/datafiles/blender_icons32/icon32_snap_peel_object.dat b/release/datafiles/blender_icons32/icon32_snap_peel_object.dat Binary files differindex a4ec4a63d28..dc6ccd4966d 100644 --- a/release/datafiles/blender_icons32/icon32_snap_peel_object.dat +++ b/release/datafiles/blender_icons32/icon32_snap_peel_object.dat diff --git a/release/datafiles/blender_icons32/icon32_sphere.dat b/release/datafiles/blender_icons32/icon32_sphere.dat Binary files differnew file mode 100644 index 00000000000..9067be4f85d --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_sphere.dat diff --git a/release/datafiles/blender_icons32/icon32_gp_stroke.dat b/release/datafiles/blender_icons32/icon32_stroke.dat Binary files differindex 9e27b6f228b..9e27b6f228b 100644 --- a/release/datafiles/blender_icons32/icon32_gp_stroke.dat +++ b/release/datafiles/blender_icons32/icon32_stroke.dat diff --git a/release/datafiles/blender_icons32/icon32_temperature.dat b/release/datafiles/blender_icons32/icon32_temperature.dat Binary files differdeleted file mode 100644 index c564327f9fd..00000000000 --- a/release/datafiles/blender_icons32/icon32_temperature.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_texture_shaded.dat b/release/datafiles/blender_icons32/icon32_texture_shaded.dat Binary files differdeleted file mode 100644 index 0bc061de5b2..00000000000 --- a/release/datafiles/blender_icons32/icon32_texture_shaded.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_tool_settings.dat b/release/datafiles/blender_icons32/icon32_tool_settings.dat Binary files differindex 9dc63a2c77c..4afd71043e4 100644 --- a/release/datafiles/blender_icons32/icon32_tool_settings.dat +++ b/release/datafiles/blender_icons32/icon32_tool_settings.dat diff --git a/release/datafiles/blender_icons32/icon32_tria_left.dat b/release/datafiles/blender_icons32/icon32_tria_left.dat Binary files differindex 241372e8a24..2387d3b6958 100644 --- a/release/datafiles/blender_icons32/icon32_tria_left.dat +++ b/release/datafiles/blender_icons32/icon32_tria_left.dat diff --git a/release/datafiles/blender_icons32/icon32_ui.dat b/release/datafiles/blender_icons32/icon32_ui.dat Binary files differdeleted file mode 100644 index bd6fe825763..00000000000 --- a/release/datafiles/blender_icons32/icon32_ui.dat +++ /dev/null diff --git a/release/datafiles/blender_icons32/icon32_unpinned.dat b/release/datafiles/blender_icons32/icon32_unpinned.dat Binary files differindex 1fa5d0b0c4b..b67963a223b 100644 --- a/release/datafiles/blender_icons32/icon32_unpinned.dat +++ b/release/datafiles/blender_icons32/icon32_unpinned.dat diff --git a/release/datafiles/blender_icons32/icon32_world.dat b/release/datafiles/blender_icons32/icon32_world.dat Binary files differindex 2882c20d03a..8bb79784ac9 100644 --- a/release/datafiles/blender_icons32/icon32_world.dat +++ b/release/datafiles/blender_icons32/icon32_world.dat diff --git a/release/datafiles/blender_icons32/icon32_world_data.dat b/release/datafiles/blender_icons32/icon32_world_data.dat Binary files differindex 0fb902a9ff9..c5caaf66203 100644 --- a/release/datafiles/blender_icons32/icon32_world_data.dat +++ b/release/datafiles/blender_icons32/icon32_world_data.dat diff --git a/release/datafiles/blender_icons32/icon32_xray.dat b/release/datafiles/blender_icons32/icon32_xray.dat Binary files differindex be58ab02c41..010637f72fc 100644 --- a/release/datafiles/blender_icons32/icon32_xray.dat +++ b/release/datafiles/blender_icons32/icon32_xray.dat diff --git a/release/datafiles/prvicons.png b/release/datafiles/prvicons.png Binary files differindex d86d54f4599..edbffae420b 100644 --- a/release/datafiles/prvicons.png +++ b/release/datafiles/prvicons.png diff --git a/release/datafiles/prvicons.svg b/release/datafiles/prvicons.svg index 0d64bf78865..63cd8dc1954 100644 --- a/release/datafiles/prvicons.svg +++ b/release/datafiles/prvicons.svg @@ -14,7 +14,7 @@ height="192" id="svg2" sodipodi:version="0.32" - inkscape:version="0.91 r13725" + inkscape:version="0.92.2 2405546, 2018-03-11" version="1.0" sodipodi:docname="prvicons.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" @@ -22,67 +22,38 @@ inkscape:export-filename="blender_icons.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> + <metadata + id="metadata2373"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> <sodipodi:namedview - id="base" pagecolor="#ffffff" bordercolor="#666666" - borderopacity="1.0" - gridtolerance="10000" - guidetolerance="10000" - objecttolerance="10000" - inkscape:pageopacity="0.0" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="4.29" - inkscape:cx="86.93017" - inkscape:cy="96" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="true" - inkscape:window-width="1920" - inkscape:window-height="1005" - inkscape:window-x="-2" - inkscape:window-y="27" - inkscape:snap-nodes="true" - inkscape:snap-bbox="true" - showguides="false" - inkscape:guide-bbox="true" - inkscape:object-nodes="false" - inkscape:object-paths="false" - inkscape:snap-intersection-line-segments="true" - inkscape:snap-intersection-grid-guide="false" - inkscape:window-maximized="1" - inkscape:bbox-paths="false" - inkscape:snap-global="true" - inkscape:snap-bbox-midpoints="true" - inkscape:snap-grids="true" - inkscape:snap-to-guides="true" - inkscape:snap-page="false" - units="px" - inkscape:snap-center="false" - fit-margin-top="0" - fit-margin-left="0" - fit-margin-right="0" - fit-margin-bottom="0" - inkscape:snap-bbox-edge-midpoints="false"> - <inkscape:grid - originy="0px" - originx="0px" - snapvisiblegridlinesonly="true" - empopacity="0.25098039" - empcolor="#7f1118" - dotted="false" - opacity="0.09803922" - color="#808080" - empspacing="4" - spacingy="4" - spacingx="4" - enabled="true" - visible="true" - id="grid17394" - type="xygrid" /> - </sodipodi:namedview> - <title - id="title49470">Blender icons v. 2.5.06</title> + inkscape:window-width="1074" + inkscape:window-height="1896" + id="namedview2371" + showgrid="false" + inkscape:zoom="1.2291667" + inkscape:cx="60.20339" + inkscape:cy="13.830508" + inkscape:window-x="1080" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="layer1" /> <defs id="defs4"> <linearGradient @@ -480,18 +451,6 @@ id="stop23308" /> </linearGradient> <linearGradient - id="linearGradient24735" - inkscape:collect="always"> - <stop - id="stop24737" - offset="0" - style="stop-color:#000000;stop-opacity:1;" /> - <stop - id="stop24739" - offset="1" - style="stop-color:#000000;stop-opacity:0;" /> - </linearGradient> - <linearGradient id="linearGradient24727"> <stop id="stop24729" @@ -759,29 +718,6 @@ id="linearGradient23199" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask23189" - maskUnits="userSpaceOnUse"> - <g - id="g23193" - transform="translate(-28,49)"> - <rect - style="fill:url(#linearGradient23199);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect23195" - width="9" - height="16" - x="22" - y="237" /> - <rect - y="237" - x="-38" - height="16" - width="9" - id="rect23197" - style="fill:url(#linearGradient23201);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - transform="scale(-1,1)" /> - </g> - </mask> <linearGradient y2="388" x2="272" @@ -917,57 +853,6 @@ id="linearGradient23274" xlink:href="#linearGradient14418" inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - id="linearGradient30777"> - <stop - style="stop-color:#acacac;stop-opacity:1" - offset="0" - id="stop30779" /> - <stop - style="stop-color:black;stop-opacity:0;" - offset="1" - id="stop30781" /> - </linearGradient> - <linearGradient - id="linearGradient29485" - inkscape:collect="always"> - <stop - id="stop29487" - offset="0" - style="stop-color:black;stop-opacity:1;" /> - <stop - id="stop29489" - offset="1" - style="stop-color:black;stop-opacity:0;" /> - </linearGradient> - <filter - color-interpolation-filters="sRGB" - id="filter20578" - height="3.0439126" - y="-1.0219563" - width="2.1164308" - x="-0.55821538" - inkscape:collect="always"> - <feGaussianBlur - id="feGaussianBlur20580" - stdDeviation="2.0410255" - inkscape:collect="always" /> - </filter> - <clipPath - id="clipPath20586" - clipPathUnits="userSpaceOnUse"> - <path - transform="matrix(1.870472,0.1894819,-0.6587894,2.4281336,319.59052,-798.11661)" - d="m 57.5,554 a 4.5,2.25 0 1 1 -9,0 4.5,2.25 0 1 1 9,0 z" - sodipodi:ry="2.25" - sodipodi:rx="4.5" - sodipodi:cy="554" - sodipodi:cx="53" - id="path34889" - style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - sodipodi:type="arc" /> - </clipPath> <radialGradient gradientUnits="userSpaceOnUse" fy="114.5684" @@ -985,32 +870,6 @@ style="stop-color:#9a9a9a;stop-opacity:1.0000000;" offset="1.0000000" /> </radialGradient> - <filter - color-interpolation-filters="sRGB" - id="filter63011" - height="2.0133312" - y="-0.50666559" - width="1.9120018" - x="-0.45600089" - inkscape:collect="always"> - <feGaussianBlur - id="feGaussianBlur63013" - stdDeviation="1.899998" - inkscape:collect="always" /> - </filter> - <clipPath - id="clipPath13106" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path34850" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" /> - </clipPath> <linearGradient id="linearGradient58334"> <stop @@ -1311,17 +1170,6 @@ id="linearGradient20961" xlink:href="#linearGradient21609" inkscape:collect="always" /> - <mask - id="mask20957" - maskUnits="userSpaceOnUse"> - <rect - style="fill:url(#linearGradient20961);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect20959" - width="8" - height="5" - x="162" - y="101" /> - </mask> <linearGradient y2="325" x2="286.60001" @@ -1638,15 +1486,6 @@ offset="1" id="stop14266" /> </linearGradient> - <clipPath - id="clipPath17188" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - id="path17190" - d="m 240.5,-19.90625 c -1.87005,0 -3.40625,1.536202 -3.40625,3.40625 l 0,2 c 0,1.87005 1.53621,3.40625 3.40625,3.40625 l 0,-2.8125 c -0.33932,0 -0.59375,-0.254431 -0.59375,-0.59375 l 0,-2 c 0,-0.339319 0.25443,-0.59375 0.59375,-0.59375 l 0,-2.8125 z" - style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </clipPath> <linearGradient id="linearGradient18344"> <stop @@ -2894,17 +2733,6 @@ id="linearGradient18670" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask18666" - maskUnits="userSpaceOnUse"> - <rect - style="fill:url(#linearGradient18670);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect18668" - width="15.098035" - height="14.000001" - x="62.921577" - y="6" /> - </mask> <linearGradient y2="118.69846" x2="132.35237" @@ -3709,17 +3537,6 @@ id="linearGradient13046" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask13041" - maskUnits="userSpaceOnUse"> - <rect - y="-12" - x="276" - height="8" - width="7" - id="rect13043" - style="fill:url(#linearGradient13046);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </mask> <linearGradient y2="152.24998" x2="-80" @@ -3730,18 +3547,6 @@ id="linearGradient13056" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask13052" - maskUnits="userSpaceOnUse"> - <rect - transform="scale(1,-1)" - style="fill:url(#linearGradient13056);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect13054" - width="7" - height="8" - x="276" - y="4.0625" /> - </mask> <linearGradient y2="143.58749" x2="451.98389" @@ -4559,16 +4364,6 @@ id="linearGradient17431" xlink:href="#linearGradient319" inkscape:collect="always" /> - <mask - id="mask17570" - maskUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - id="path17572" - d="m -44,358 0,14 14,-14 -14,0 z" - style="fill:#ffffff;fill-rule:evenodd;stroke:none" - sodipodi:nodetypes="cccc" /> - </mask> <linearGradient y2="248.37102" x2="35.029804" @@ -4980,35 +4775,6 @@ id="radialGradient35967" xlink:href="#linearGradient319" inkscape:collect="always" /> - <clipPath - id="clipPath18524" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:transform-center-y="-6.3853012" - inkscape:transform-center-x="-6.3473305" - sodipodi:type="arc" - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69954133;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" - id="path18526" - sodipodi:cx="258.5" - sodipodi:cy="78.5" - sodipodi:rx="3.5" - sodipodi:ry="3.5" - d="m 262,78.5 a 3.5,3.5 0 1 1 -7,0 3.5,3.5 0 1 1 7,0 z" - transform="matrix(-1.1435655,0,0,1.1436475,512.11415,45.72091)" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - </clipPath> - <mask - id="mask18634" - maskUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - id="path18636" - d="m 207,134 0,14 11,0 0,-7.5625 c -1.97252,-0.24738 -3.5,-1.89814 -3.5,-3.9375 0,-0.94675 0.35614,-1.81444 0.90625,-2.5 L 207,134 z" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - sodipodi:nodetypes="ccccscc" /> - </mask> <linearGradient y2="585.28772" x2="159.13864" @@ -5419,17 +5185,6 @@ id="linearGradient69009" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask69005" - maskUnits="userSpaceOnUse"> - <rect - y="39.580433" - x="596.30127" - height="26.383913" - width="24.746082" - id="rect69007" - style="fill:url(#linearGradient69009);fill-opacity:1;display:inline" /> - </mask> <linearGradient y2="94" x2="247" @@ -5478,99 +5233,6 @@ id="linearGradient20309" xlink:href="#linearGradient319" inkscape:collect="always" /> - <radialGradient - r="5.256" - fy="114.5684" - fx="20.892099" - cy="114.5684" - cx="20.892099" - gradientTransform="matrix(0.2798768,0,0,0.279916,6.0465962,-0.3619733)" - gradientUnits="userSpaceOnUse" - id="radialGradient21565" - xlink:href="#aigrd2" - inkscape:collect="always" /> - <radialGradient - r="5.256" - fy="114.5684" - fx="20.892099" - cy="114.5684" - cx="20.892099" - gradientTransform="matrix(0.2798768,0,0,0.279916,6.0465962,-0.3619733)" - gradientUnits="userSpaceOnUse" - id="radialGradient21567" - xlink:href="#aigrd2" - inkscape:collect="always" /> - <linearGradient - y2="32.076183" - x2="276.89801" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient21594" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient21596" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient - y2="31.515814" - x2="276.89801" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient21647" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient21649" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient - y2="31.515814" - x2="276.89801" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient21977" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient21979" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <clipPath - id="clipPath22590" - clipPathUnits="userSpaceOnUse"> - <rect - y="490.00012" - x="-30" - height="14" - width="12" - id="rect22592" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </clipPath> <linearGradient y2="358.85715" x2="772" @@ -5581,92 +5243,6 @@ id="linearGradient23595" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask23591" - maskUnits="userSpaceOnUse"> - <rect - y="768" - x="30" - height="14" - width="11" - id="rect23593" - style="fill:url(#linearGradient23595);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - mask="none" /> - </mask> - <clipPath - id="clipPath23877" - clipPathUnits="userSpaceOnUse"> - <rect - style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect23879" - width="15" - height="6" - x="952" - y="-540" - transform="scale(1,-1)" /> - </clipPath> - <linearGradient - y2="31.515814" - x2="276.89801" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient23978" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient23980" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient - y2="237" - x2="150.5" - y1="239.9987" - x1="150.5" - gradientTransform="matrix(1,0,0,0.733333,808.99997,-697.8)" - gradientUnits="userSpaceOnUse" - id="linearGradient23982" - xlink:href="#linearGradient31320" - inkscape:collect="always" /> - <linearGradient - y2="243.69914" - x2="142.9375" - y1="243.76387" - x1="147.0625" - gradientTransform="matrix(0,1,1,0,715,364)" - gradientUnits="userSpaceOnUse" - id="linearGradient23986" - xlink:href="#linearGradient29485" - inkscape:collect="always" /> - <linearGradient - y2="244.11113" - x2="144" - y1="244.11113" - x1="148" - gradientTransform="matrix(1,0,0,1.2857143,364,645.14283)" - gradientUnits="userSpaceOnUse" - id="linearGradient23988" - xlink:href="#linearGradient30777" - inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - id="linearGradient3564"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop3566" /> - <stop - style="stop-color:white;stop-opacity:0;" - offset="1" - id="stop3568" /> - </linearGradient> <linearGradient id="linearGradient39155"> <stop @@ -5679,79 +5255,6 @@ id="stop39159" /> </linearGradient> <linearGradient - inkscape:collect="always" - id="linearGradient39171"> - <stop - style="stop-color:white;stop-opacity:1;" - offset="0" - id="stop39173" /> - <stop - style="stop-color:white;stop-opacity:0;" - offset="1" - id="stop39175" /> - </linearGradient> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient21442" - xlink:href="#linearGradient18821" - inkscape:collect="always" /> - <linearGradient - y2="34.375" - x2="29.875" - y1="18.875" - x1="31.1875" - gradientUnits="userSpaceOnUse" - id="linearGradient21444" - xlink:href="#linearGradient39155" - inkscape:collect="always" /> - <linearGradient - y2="-458.05771" - x2="190.46461" - y1="193.33229" - x1="185.9903" - gradientTransform="matrix(0.06818845,0,0,0.06818845,22.51112,27.02885)" - gradientUnits="userSpaceOnUse" - id="linearGradient21446" - xlink:href="#linearGradient3564" - inkscape:collect="always" /> - <radialGradient - r="20.278975" - fy="19.668886" - fx="26.109201" - cy="19.668886" - cx="26.109201" - gradientTransform="matrix(1.647222,0,0,1.26792,-15.47413,-5.79794)" - gradientUnits="userSpaceOnUse" - id="radialGradient21448" - xlink:href="#linearGradient39171" - inkscape:collect="always" /> - <linearGradient - y2="32.076183" - x2="276.89801" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient22274" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient22276" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient y2="56.357628" x2="121.22078" y1="53.227627" @@ -5989,17 +5492,6 @@ id="linearGradient57454" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask57450" - maskUnits="userSpaceOnUse"> - <rect - style="fill:url(#linearGradient57454);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect57452" - width="15" - height="15" - x="326.00305" - y="154.99899" /> - </mask> <linearGradient y2="12.551482" x2="167.59578" @@ -6544,18 +6036,6 @@ id="linearGradient24460" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask24456" - maskUnits="userSpaceOnUse"> - <rect - mask="none" - style="fill:url(#linearGradient24460);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect24458" - width="7" - height="17" - x="299" - y="108" /> - </mask> <linearGradient y2="152.24998" x2="-80" @@ -6566,18 +6046,6 @@ id="linearGradient24470" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask24466" - maskUnits="userSpaceOnUse"> - <rect - y="4.0625" - x="276" - height="9" - width="7" - id="rect24468" - style="fill:url(#linearGradient24470);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - transform="scale(1,-1)" /> - </mask> <linearGradient y2="-22.846634" x2="134.08138" @@ -6682,16 +6150,6 @@ id="linearGradient24551" xlink:href="#linearGradient18105" inkscape:collect="always" /> - <clipPath - id="clipPath24168" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccc" - id="path24170" - d="m 134.27489,222.11125 c -3.9249,-6.46418 -7.61892,6.46419 -11.54381,0 l 0,0 -1.61614,0 0,8.77283 14.77608,0 0,-8.77283 -1.61613,0 z" - style="fill:#808080;fill-rule:evenodd;stroke:none" /> - </clipPath> <linearGradient y2="120.87388" x2="135.36497" @@ -8539,123 +7997,6 @@ xlink:href="#linearGradient9030" inkscape:collect="always" /> <linearGradient - y2="349.81818" - x2="45.021851" - y1="437.02835" - x1="59.158501" - gradientTransform="matrix(1.043478,0,0,0.956667,765.84783,-274.57833)" - gradientUnits="userSpaceOnUse" - id="linearGradient24809" - xlink:href="#linearGradient24727" - inkscape:collect="always" /> - <linearGradient - y2="101.5" - x2="841" - y1="101.5" - x1="807" - gradientUnits="userSpaceOnUse" - id="linearGradient24811" - xlink:href="#linearGradient24735" - inkscape:collect="always" /> - <linearGradient - y2="347.78201" - x2="63.407566" - y1="421.80756" - x1="63.539974" - gradientTransform="matrix(1.043478,0,0,0.956667,767.34783,-275.07833)" - gradientUnits="userSpaceOnUse" - id="linearGradient24813" - xlink:href="#linearGradient24711" - inkscape:collect="always" /> - <linearGradient - y2="114.99999" - x2="936" - y1="102" - x1="954" - gradientTransform="translate(-127,4e-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient24815" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="349.81818" - x2="45.021851" - y1="437.02835" - x1="59.158501" - gradientTransform="matrix(1.043478,0,0,0.956667,765.84783,-274.57833)" - gradientUnits="userSpaceOnUse" - id="linearGradient24839" - xlink:href="#linearGradient24727" - inkscape:collect="always" /> - <linearGradient - y2="101.5" - x2="841" - y1="101.5" - x1="807" - gradientUnits="userSpaceOnUse" - id="linearGradient24841" - xlink:href="#linearGradient24735" - inkscape:collect="always" /> - <linearGradient - y2="347.78201" - x2="63.407566" - y1="419.06366" - x1="64.019142" - gradientTransform="matrix(1.043478,0,0,0.956667,767.34783,-275.07833)" - gradientUnits="userSpaceOnUse" - id="linearGradient24843" - xlink:href="#linearGradient24144" - inkscape:collect="always" /> - <linearGradient - y2="114.99999" - x2="936" - y1="102" - x1="954" - gradientTransform="translate(-127,4e-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient24845" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient - y2="349.81818" - x2="45.021851" - y1="437.02835" - x1="59.158501" - gradientTransform="matrix(1.043478,0,0,0.956667,765.84783,-274.57833)" - gradientUnits="userSpaceOnUse" - id="linearGradient24867" - xlink:href="#linearGradient24727" - inkscape:collect="always" /> - <linearGradient - y2="101.5" - x2="841" - y1="101.5" - x1="807" - gradientUnits="userSpaceOnUse" - id="linearGradient24869" - xlink:href="#linearGradient24735" - inkscape:collect="always" /> - <linearGradient - y2="347.78201" - x2="63.407566" - y1="422.46088" - x1="63.659767" - gradientTransform="matrix(1.043478,0,0,0.956667,767.34783,-275.07833)" - gradientUnits="userSpaceOnUse" - id="linearGradient24871" - xlink:href="#linearGradient24711" - inkscape:collect="always" /> - <linearGradient - y2="114.99999" - x2="936" - y1="102" - x1="954" - gradientTransform="translate(-127,4e-6)" - gradientUnits="userSpaceOnUse" - id="linearGradient24873" - xlink:href="#linearGradient16500" - inkscape:collect="always" /> - <linearGradient y2="250.69945" x2="114.66669" y1="283.00519" @@ -8857,42 +8198,6 @@ id="linearGradient25387" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask25369" - maskUnits="userSpaceOnUse"> - <g - transform="translate(-21,-21)" - id="g25371"> - <path - inkscape:connector-curvature="0" - inkscape:transform-center-x="4" - sodipodi:nodetypes="cccc" - id="path25373" - d="m 341,302 8,8 -8,8 0,-16 z" - style="fill:url(#linearGradient25381);fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - style="fill:url(#linearGradient25383);fill-rule:evenodd;stroke:none" - d="m 357,302 -8,8 -8,-8 16,0 z" - id="path25375" - sodipodi:nodetypes="cccc" - inkscape:transform-center-y="-4" /> - <path - inkscape:connector-curvature="0" - style="fill:url(#linearGradient25385);fill-rule:evenodd;stroke:none" - d="m 357,318 -8,-8 8,-8 0,16 z" - id="path25377" - sodipodi:nodetypes="cccc" - inkscape:transform-center-x="-4" /> - <path - inkscape:connector-curvature="0" - style="fill:url(#linearGradient25387);fill-rule:evenodd;stroke:none" - d="m 341,318 8,-8 8,8 -16,0 z" - id="path25379" - sodipodi:nodetypes="cccc" - inkscape:transform-center-y="4" /> - </g> - </mask> <linearGradient y2="288.5" x2="344.01321" @@ -8933,42 +8238,6 @@ id="linearGradient25579" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask25561" - maskUnits="userSpaceOnUse"> - <g - id="g25563" - transform="translate(-21,-21)"> - <path - inkscape:connector-curvature="0" - style="fill:url(#linearGradient25573);fill-rule:evenodd;stroke:none" - d="m 341,302 8,8 -8,8 0,-16 z" - id="path25565" - sodipodi:nodetypes="cccc" - inkscape:transform-center-x="4" /> - <path - inkscape:connector-curvature="0" - inkscape:transform-center-y="-4" - sodipodi:nodetypes="cccc" - id="path25567" - d="m 357,302 -8,8 -8,-8 16,0 z" - style="fill:url(#linearGradient25575);fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - inkscape:transform-center-x="-4" - sodipodi:nodetypes="cccc" - id="path25569" - d="m 357,318 -8,-8 8,-8 0,16 z" - style="fill:url(#linearGradient25577);fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - inkscape:transform-center-y="4" - sodipodi:nodetypes="cccc" - id="path25571" - d="m 341,318 8,-8 8,8 -16,0 z" - style="fill:url(#linearGradient25579);fill-rule:evenodd;stroke:none" /> - </g> - </mask> <linearGradient y2="30.023426" x2="278.25537" @@ -9577,29 +8846,6 @@ id="radialGradient31865" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask31861" - maskUnits="userSpaceOnUse"> - <path - d="m 213,58 a 11,11 0 1 1 -22,0 11,11 0 1 1 22,0 z" - sodipodi:ry="11" - sodipodi:rx="11" - sodipodi:cy="58" - sodipodi:cx="202" - id="path31863" - style="fill:url(#radialGradient31865);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - sodipodi:type="arc" /> - </mask> - <clipPath - id="clipPath31849" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - id="path31851" - d="m 232.13187,93.950853 4.84276,0 4.23742,4.237465 0,4.842822 -9.08018,0 0,-9.080287 0,0 z" - style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </clipPath> <linearGradient gradientTransform="translate(258,-96.99999)" y2="429.5" @@ -9610,17 +8856,6 @@ id="linearGradient32298" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask32294" - maskUnits="userSpaceOnUse"> - <rect - style="fill:url(#linearGradient32298);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect32296" - width="9" - height="16" - x="134" - y="323" /> - </mask> <radialGradient r="1.5" fy="14.5" @@ -12087,28 +11322,6 @@ id="linearGradient38572" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask38561" - maskUnits="userSpaceOnUse"> - <g - id="g38563"> - <rect - style="fill:url(#linearGradient38570);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect38565" - width="16" - height="13" - x="-23" - y="278" /> - <rect - y="-304" - x="-23" - height="13" - width="16" - id="rect38567" - style="fill:url(#linearGradient38572);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - transform="scale(1,-1)" /> - </g> - </mask> <linearGradient id="linearGradient16500-7" inkscape:collect="always"> @@ -12445,17 +11658,6 @@ id="linearGradient42437" xlink:href="#linearGradient319" inkscape:collect="always" /> - <clipPath - id="clipPath42711" - clipPathUnits="userSpaceOnUse"> - <rect - y="214.76154" - x="127.4093" - height="17.464855" - width="8.7252884" - id="rect42713" - style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </clipPath> <linearGradient id="linearGradient38796-7-9"> <stop @@ -12558,17 +11760,6 @@ id="linearGradient38007" xlink:href="#linearGradient319" inkscape:collect="always" /> - <clipPath - id="clipPath43368-1" - clipPathUnits="userSpaceOnUse"> - <rect - y="26" - x="-79" - height="16" - width="16" - id="rect43370-7" - style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </clipPath> <radialGradient r="3.1501868" fy="33.548397" @@ -13599,17 +12790,6 @@ id="linearGradient38367" xlink:href="#linearGradient319" inkscape:collect="always" /> - <clipPath - id="clipPath43368-7" - clipPathUnits="userSpaceOnUse"> - <rect - y="26" - x="-79" - height="16" - width="16" - id="rect43370-1" - style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </clipPath> <linearGradient id="linearGradient43276-6" inkscape:collect="always"> @@ -14395,19 +13575,6 @@ id="linearGradient38961" xlink:href="#linearGradient1610-83" inkscape:collect="always" /> - <mask - id="mask38956" - maskUnits="userSpaceOnUse"> - <rect - ry="0" - rx="0" - y="560" - x="488" - height="12" - width="16" - id="rect38958" - style="fill:url(#linearGradient38961);stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </mask> <linearGradient y2="580.63715" x2="490.65796" @@ -14578,16 +13745,6 @@ id="linearGradient40297" xlink:href="#linearGradient319" inkscape:collect="always" /> - <mask - id="mask40306" - maskUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - style="fill:#ffffff;fill-rule:evenodd;stroke:none" - d="m 195,11.00001 0,14 0.5,0 13.5,-13.5 0,-0.5 -14,0 z" - id="path40308" /> - </mask> <linearGradient y2="133.4879" x2="145.20987" @@ -15001,30 +14158,6 @@ offset="1" style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> - <clipPath - id="clipPath40897" - clipPathUnits="userSpaceOnUse"> - <rect - transform="scale(-1,1)" - style="opacity:0.45;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect40899" - width="15" - height="16" - x="-41" - y="198" /> - </clipPath> - <clipPath - id="clipPath40902" - clipPathUnits="userSpaceOnUse"> - <rect - transform="scale(-1,1)" - style="opacity:0.45;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - id="rect40904" - width="15" - height="17" - x="-22" - y="197" /> - </clipPath> <linearGradient y2="391.21976" x2="94.246101" @@ -15035,17 +14168,6 @@ id="linearGradient38478" xlink:href="#linearGradient1610" inkscape:collect="always" /> - <mask - id="mask38474" - maskUnits="userSpaceOnUse"> - <rect - y="174.99901" - x="343.01611" - height="15" - width="15" - id="rect38476" - style="fill:url(#linearGradient38478);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </mask> <radialGradient r="1.5" fy="14.5" @@ -15150,24 +14272,6 @@ style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> <linearGradient - y2="108.00847" - x2="345.40625" - y1="108.35222" - x1="351.15625" - gradientUnits="userSpaceOnUse" - id="linearGradient44402" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient - y2="106.7795" - x2="347.1875" - y1="106.93575" - x1="351.71875" - gradientUnits="userSpaceOnUse" - id="linearGradient44404" - xlink:href="#linearGradient44939-8" - inkscape:collect="always" /> - <linearGradient y2="106.5" x2="284.5" y1="101.5" @@ -15216,16 +14320,6 @@ id="linearGradient44954" xlink:href="#linearGradient44939-8" inkscape:collect="always" /> - <clipPath - id="clipPath45147" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - style="opacity:0.2;fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - d="m 5,261 13,0 0,1 -1,0 0,1 1,0 0,1 -1,0 0,1 -1,0 0,2 2,0 0,-1 1,0 0,-1 1,0 0,1 1,0 0,-1 1,0 0,13 -17,0 0,-17 z" - id="path45149" - sodipodi:nodetypes="ccccccccccccccccccccccc" /> - </clipPath> <linearGradient y2="19.9375" x2="106.125" @@ -15275,17 +14369,6 @@ id="linearGradient43826" xlink:href="#linearGradient44627" inkscape:collect="always" /> - <mask - id="mask43822" - maskUnits="userSpaceOnUse"> - <rect - style="opacity:0.93999993;fill:url(#linearGradient43826);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" - id="rect43824" - width="12" - height="9" - x="754" - y="208" /> - </mask> <linearGradient y2="30.743095" x2="277.68143" @@ -15636,46 +14719,6 @@ xlink:href="#linearGradient319" inkscape:collect="always" /> <linearGradient - y2="31.515814" - x2="276.89801" - y1="-9.4293213" - x1="240.70209" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient30321" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient30323" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient - y2="31.515814" - x2="276.89801" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient30368" - xlink:href="#linearGradient1610" - inkscape:collect="always" /> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient30370" - xlink:href="#linearGradient5060" - inkscape:collect="always" /> - <linearGradient y2="726.37006" x2="1661.8125" y1="722" @@ -15865,19 +14908,6 @@ offset="1" id="stop23978-1" /> </linearGradient> - <clipPath - id="clipPath28964" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - id="path28966" - d="m 117.50984,228.63415 0,-15.01646 11.71735,5.49383 0,15.38271 -11.71735,-5.86008 z" - style="fill:url(#linearGradient28968);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new" - sodipodi:nodetypes="ccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - </clipPath> <linearGradient y2="253.23859" x2="-20.826464" @@ -15909,19 +14939,6 @@ id="linearGradient29424" xlink:href="#linearGradient37542-7" inkscape:collect="always" /> - <mask - id="mask29419" - maskUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" - sodipodi:nodetypes="ccccc" - style="opacity:0.5;fill:url(#linearGradient29424);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new" - d="m 117.50984,229.00041 0,-15.38272 11.71735,5.49383 0,15.74897 -11.71735,-5.86008 z" - id="path29422" /> - </mask> <linearGradient y2="252.03563" x2="-23.636715" @@ -16151,17 +15168,6 @@ id="radialGradient29805" xlink:href="#linearGradient1610-52-2" inkscape:collect="always" /> - <mask - id="mask29801" - maskUnits="userSpaceOnUse"> - <rect - y="257" - x="204" - height="16" - width="15" - id="rect29803" - style="opacity:0.35;color:#000000;fill:url(#radialGradient29805);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.71217775;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" /> - </mask> <linearGradient y2="248.09296" x2="389.59052" @@ -16181,15 +15187,6 @@ id="linearGradient29886" xlink:href="#linearGradient319" inkscape:collect="always" /> - <clipPath - id="clipPath50172-0" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" - d="m -177.34375,498 a 1.001098,1.001098 0 1 0 0.0937,2 l 3.65625,0 -4.25,5.9375 a 1.0001,1.0001 0 0 0 -0.1875,0.59375 l 0,0.5 a 1.0001,1.0001 0 0 0 1,1 L -171.75,508 a 1.0001,1.0001 0 1 0 0,-2 l -3.6875,0.0312 4.25,-5.9375 A 1.0001,1.0001 0 0 0 -171,499.5 l 0,-0.5 a 1.0001,1.0001 0 0 0 -1,-1 l -5.25,0 a 1.0001,1.0001 0 0 0 -0.0937,0 z" - id="path50174-8" /> - </clipPath> <radialGradient gradientUnits="userSpaceOnUse" fy="64.567902" @@ -16826,20 +15823,6 @@ offset="1" style="stop-color:#000000;stop-opacity:0;" /> </linearGradient> - <mask - id="mask52637-8-8" - maskUnits="userSpaceOnUse"> - <rect - ry="0" - rx="0" - y="458" - x="-354" - height="8.9366941" - width="7.9918551" - id="rect52639-8-9" - style="fill:url(#radialGradient52641-2-8);fill-opacity:1;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - mask="none" /> - </mask> <radialGradient r="8" fy="462.0358" @@ -16883,20 +15866,6 @@ offset="1" style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> - <mask - id="mask52879-0-5" - maskUnits="userSpaceOnUse"> - <rect - ry="0" - rx="0" - y="458" - x="-354.95001" - height="8.9366941" - width="7.9918551" - id="rect52881-7-3" - style="fill:url(#radialGradient52883-6-8);fill-opacity:1;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" - mask="none" /> - </mask> <radialGradient r="8" fy="462.0358" @@ -17043,16 +16012,6 @@ x2="470.73633" y2="-102.52942" /> <linearGradient - y2="32.902874" - x2="278.34866" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient21875-7-1-0-1" - xlink:href="#linearGradient1610-71-6-9-7" - inkscape:collect="always" /> - <linearGradient id="linearGradient1610-71-6-9-7"> <stop id="stop1611-26-8-5-4" @@ -17063,42 +16022,6 @@ offset="1" style="stop-color:white;stop-opacity:1;" /> </linearGradient> - <clipPath - id="clipPath13106-9-2-9-9" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path34850-4-7-0-4" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" - inkscape:connector-curvature="0" /> - </clipPath> - <filter - color-interpolation-filters="sRGB" - id="filter63011-6-7-0-8" - height="2.0133312" - y="-0.50666559" - width="1.9120018" - x="-0.45600089" - inkscape:collect="always"> - <feGaussianBlur - id="feGaussianBlur63013-0-1-0-8" - stdDeviation="1.899998" - inkscape:collect="always" /> - </filter> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient21877-3-2-7-2" - xlink:href="#linearGradient5060-6-6-2-4" - inkscape:collect="always" /> <linearGradient id="linearGradient5060-6-6-2-4"> <stop @@ -17111,16 +16034,6 @@ id="stop5064-4-4-5-5" /> </linearGradient> <linearGradient - y2="629.23273" - x2="1659.0875" - y1="639.65356" - x1="1666.1765" - gradientTransform="matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)" - gradientUnits="userSpaceOnUse" - id="linearGradient34959-9-2-1" - xlink:href="#linearGradient4671-6-4-1-7" - inkscape:collect="always" /> - <linearGradient id="linearGradient4671-6-4-1-7"> <stop style="stop-color:#ffd43b;stop-opacity:1;" @@ -17132,16 +16045,6 @@ id="stop4675-8-0-8-1" /> </linearGradient> <linearGradient - y2="626.40344" - x2="1663.2872" - y1="607.50525" - x1="1641.4773" - gradientTransform="matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)" - gradientUnits="userSpaceOnUse" - id="linearGradient34961-3-6-5" - xlink:href="#linearGradient4689-1-6-4-2" - inkscape:collect="always" /> - <linearGradient id="linearGradient4689-1-6-4-2"> <stop style="stop-color:#5a9fd4;stop-opacity:1;" @@ -17153,95 +16056,6 @@ id="stop4693-0-4-8-6" /> </linearGradient> <linearGradient - y2="344.10001" - x2="924.10608" - y1="339.66599" - x1="922.89703" - gradientUnits="userSpaceOnUse" - id="linearGradient34963-5-9-1" - xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4" - inkscape:collect="always" /> - <linearGradient - id="linearGradient3966-5-1-4-8-9-88-8-4" - inkscape:collect="always"> - <stop - id="stop3968-7-9-0-8-2-1-3-2" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop3970-6-6-6-2-8-2-5-3" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="355.75" - x2="922.104" - y1="345.42163" - x1="919.09998" - gradientUnits="userSpaceOnUse" - id="linearGradient34965-1-5-2" - xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4" - inkscape:collect="always" /> - <linearGradient - y2="341.98108" - x2="921.82654" - y1="342.71866" - x1="922.64624" - gradientUnits="userSpaceOnUse" - id="linearGradient34967-4-1-8" - xlink:href="#linearGradient3966-5-1-4-8-9-8-9-5-5" - inkscape:collect="always" /> - <linearGradient - id="linearGradient3966-5-1-4-8-9-8-9-5-5" - inkscape:collect="always"> - <stop - id="stop3968-7-9-0-8-2-9-8-5-7" - offset="0" - style="stop-color:#ffffff;stop-opacity:1;" /> - <stop - id="stop3970-6-6-6-2-8-0-2-8-6" - offset="1" - style="stop-color:#ffffff;stop-opacity:0;" /> - </linearGradient> - <linearGradient - y2="353" - x2="917.25" - y1="355.5" - x1="917.75" - gradientUnits="userSpaceOnUse" - id="linearGradient34969-4-4-1" - xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4" - inkscape:collect="always" /> - <linearGradient - y2="344.75" - x2="923" - y1="343.75" - x1="923" - gradientUnits="userSpaceOnUse" - id="linearGradient34971-5-0-9" - xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4" - inkscape:collect="always" /> - <radialGradient - r="6" - fy="349.20001" - fx="924" - cy="349.20001" - cx="924" - gradientTransform="matrix(2.4166677,-7.678944e-6,1.853542e-6,0.58333478,-1309.0016,145.80659)" - gradientUnits="userSpaceOnUse" - id="radialGradient34973-2-5-7" - xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4" - inkscape:collect="always" /> - <linearGradient - y2="342.16492" - x2="922.16492" - y1="341.34042" - x1="921.34045" - gradientUnits="userSpaceOnUse" - id="linearGradient34975-9-4-9" - xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4" - inkscape:collect="always" /> - <linearGradient y2="601.36218" x2="218.99957" y1="592.95746" @@ -17476,16 +16290,6 @@ xlink:href="#linearGradient3966-8-9-6-4-5" inkscape:collect="always" /> <linearGradient - y2="32.076183" - x2="276.89801" - y1="-14.103641" - x1="236.94902" - gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)" - gradientUnits="userSpaceOnUse" - id="linearGradient22274-8" - xlink:href="#linearGradient1610-2" - inkscape:collect="always" /> - <linearGradient id="linearGradient1610-2"> <stop id="stop1611-8" @@ -17500,42 +16304,6 @@ offset="1" style="stop-color:#c8c8c8;stop-opacity:1;" /> </linearGradient> - <clipPath - id="clipPath13106-5" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path34850-6" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" /> - </clipPath> - <filter - color-interpolation-filters="sRGB" - id="filter63011-5" - height="2.0133312" - y="-0.50666559" - width="1.9120018" - x="-0.45600089" - inkscape:collect="always"> - <feGaussianBlur - id="feGaussianBlur63013-8" - stdDeviation="1.899998" - inkscape:collect="always" /> - </filter> - <linearGradient - y2="383.69843" - x2="174.29811" - y1="376.27383" - x1="160.14388" - gradientTransform="translate(-47.00001,58.00194)" - gradientUnits="userSpaceOnUse" - id="linearGradient22276-5" - xlink:href="#linearGradient5060-4" - inkscape:collect="always" /> <linearGradient id="linearGradient5060-4"> <stop @@ -17547,19 +16315,6 @@ offset="1" id="stop5064-6" /> </linearGradient> - <clipPath - id="clipPath5613" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path5615" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" /> - </clipPath> <radialGradient r="3.1650217" fy="500.26215" @@ -17647,17 +16402,6 @@ offset="1" id="stop39175-1" /> </linearGradient> - <radialGradient - r="3.1650217" - fy="500.26215" - fx="75.554794" - cy="500.26215" - cx="75.554794" - gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)" - gradientUnits="userSpaceOnUse" - id="radialGradient21442-6-790" - xlink:href="#linearGradient18821-1-16" - inkscape:collect="always" /> <linearGradient id="linearGradient18821-1-16"> <stop @@ -17670,15 +16414,6 @@ style="stop-color:#e3604f;stop-opacity:0;" /> </linearGradient> <linearGradient - y2="34.375" - x2="29.875" - y1="18.875" - x1="31.1875" - gradientUnits="userSpaceOnUse" - id="linearGradient21444-0-352" - xlink:href="#linearGradient39155-0-813" - inkscape:collect="always" /> - <linearGradient id="linearGradient39155-0-813"> <stop style="stop-color:#e6e6e6;stop-opacity:1;" @@ -17690,51 +16425,6 @@ id="stop20597" /> </linearGradient> <linearGradient - y2="-458.05771" - x2="190.46461" - y1="193.33229" - x1="185.9903" - gradientTransform="matrix(0.06818845,0,0,0.06818845,22.51112,27.02885)" - gradientUnits="userSpaceOnUse" - id="linearGradient21446-3-145" - xlink:href="#linearGradient3564-2-380" - inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - id="linearGradient3564-2-380"> - <stop - style="stop-color:#e6e6e6;stop-opacity:1;" - offset="0" - id="stop20601" /> - <stop - style="stop-color:#e6e6e6;stop-opacity:0;" - offset="1" - id="stop20603" /> - </linearGradient> - <radialGradient - r="20.278975" - fy="19.668886" - fx="26.109201" - cy="19.668886" - cx="26.109201" - gradientTransform="matrix(1.647222,0,0,1.26792,-15.47413,-5.79794)" - gradientUnits="userSpaceOnUse" - id="radialGradient21448-8-143" - xlink:href="#linearGradient39171-9-89" - inkscape:collect="always" /> - <linearGradient - inkscape:collect="always" - id="linearGradient39171-9-89"> - <stop - style="stop-color:#e6e6e6;stop-opacity:1;" - offset="0" - id="stop20607" /> - <stop - style="stop-color:#e6e6e6;stop-opacity:0;" - offset="1" - id="stop20609" /> - </linearGradient> - <linearGradient y2="32.076183" x2="276.89801" y1="-14.103641" @@ -17755,19 +16445,6 @@ offset="1" style="stop-color:white;stop-opacity:1;" /> </linearGradient> - <clipPath - id="clipPath13106-4" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path34850-8" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" /> - </clipPath> <linearGradient y2="383.69843" x2="174.29811" @@ -17789,19 +16466,6 @@ offset="1" id="stop5064-17" /> </linearGradient> - <clipPath - id="clipPath5678" - clipPathUnits="userSpaceOnUse"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path5680" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" /> - </clipPath> <radialGradient r="3.1650217" fy="500.26215" @@ -17890,126 +16554,7 @@ offset="1" id="stop39175-18" /> </linearGradient> - <filter - style="color-interpolation-filters:sRGB;" - inkscape:label="Drop Shadow" - id="filter6078" - x="-0.29999999999999999" - width="1.3500000000000001" - height="1.3999999999999999" - y="-0.14999999999999999"> - <feFlood - flood-opacity="0.40000000000000002" - flood-color="rgb(0,0,0)" - result="flood" - id="feFlood6080" /> - <feComposite - in="flood" - in2="SourceGraphic" - operator="in" - result="composite1" - id="feComposite6082" /> - <feGaussianBlur - in="composite1" - stdDeviation="1.5" - result="blur" - id="feGaussianBlur6084" /> - <feOffset - dx="-2" - dy="2" - result="offset" - id="feOffset6086" /> - <feComposite - in="SourceGraphic" - in2="offset" - operator="over" - result="composite2" - id="feComposite6088" /> - </filter> - <filter - style="color-interpolation-filters:sRGB;" - inkscape:label="Drop Shadow" - id="filter6146" - x="-0.29999999999999999" - width="1.3500000000000001" - y="-0.14999999999999999" - height="1.3999999999999999"> - <feFlood - flood-opacity="0.40000000000000002" - flood-color="rgb(0,0,0)" - result="flood" - id="feFlood6148" /> - <feComposite - in="flood" - in2="SourceGraphic" - operator="in" - result="composite1" - id="feComposite6150" /> - <feGaussianBlur - in="composite1" - stdDeviation="1.5" - result="blur" - id="feGaussianBlur6152" /> - <feOffset - dx="-2" - dy="2" - result="offset" - id="feOffset6154" /> - <feComposite - in="SourceGraphic" - in2="offset" - operator="over" - result="composite2" - id="feComposite6156" /> - </filter> </defs> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title>Blender icons v. 2.5.06</dc:title> - <dc:date>21.05.2012</dc:date> - <dc:creator> - <cc:Agent> - <dc:title>Andrzej Ambroż</dc:title> - </cc:Agent> - </dc:creator> - <dc:rights> - <cc:Agent> - <dc:title>Andrzej Ambroż</dc:title> - </cc:Agent> - </dc:rights> - <dc:publisher> - <cc:Agent> - <dc:title>Andrzej Ambroż</dc:title> - </cc:Agent> - </dc:publisher> - <dc:coverage /> - <cc:license - rdf:resource="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html" /> - <dc:description>GNU General Public License, version 2 or later.</dc:description> - </cc:Work> - </rdf:RDF> - </metadata> - <g - transform="translate(-872,-180)" - sodipodi:insensitive="true" - style="display:none" - inkscape:label="bckgrnd" - id="layer3" - inkscape:groupmode="layer"> - <rect - y="-4" - x="-4" - height="650" - width="1083.874" - id="rect20607" - style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> - </g> <path inkscape:connector-curvature="0" d="" @@ -18026,596 +16571,7 @@ inkscape:groupmode="layer" id="layer4" inkscape:label="sheet_layout" - sodipodi:insensitive="true"> - <path - inkscape:connector-curvature="0" - id="path19551-18-1" - d="m 35.75,29.5 0,1 -0.5,0 0,1 0.5,0 0,1 -0.75,0 0,1 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-1 -0.75,0 0,-1 0.5,0 0,-1 -0.5,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z m 0,2 1,0 0,1 -1,0 0,-1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - id="path30643-7-0" - d="m 31.75,29.5 0,1 -0.75,0 0,3 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-3 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,3 -1,0 0,-3 z m 0.25,1 0,1 0.5,0 0,-1 -0.5,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path30647-6-1" - d="m 19,29.5 0,1 2,0 0,1 -1,0 0,1 1,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -2,0 z m 1,3 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path30649-7-4" - d="m 25,29.5 0,3 1,0 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <rect - y="33.5" - x="23" - height="1" - width="1" - id="rect30651-8-6" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect30653-7-0" - width="1" - height="1" - x="29" - y="33.5" /> - <rect - y="33.5" - x="15" - height="1" - width="1" - id="rect30725-8-7" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - id="path30723-1-1" - d="m 11,31.5 0,2.25 1,0 0,0.75 1,0 0,-0.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - sodipodi:nodetypes="ccccccccccccc" - inkscape:connector-curvature="0" /> - <g - transform="translate(-62,136.5)" - id="g72798" - style="display:inline;opacity:0.5;enable-background:new"> - <g - id="g72716"> - <path - id="path72434" - d="m 186,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 0,-1.25 -1,0 0,1.25 -1,0 0,-3 2,0 0,-1 -2,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <rect - y="-127" - x="219" - height="5" - width="1" - id="rect72436" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - id="path72438" - d="m 144,-127 0,4 -1,0 0,-1 -1,0 0,1 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-4 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72440" - d="m 189,-127 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72442" - d="m 165,-127 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72446" - d="m 130,-127 0,0.75 -1,0 0,1.5 1,0 0,0.75 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 1.5,0 0,-1 -1.5,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72448" - d="m 154,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72450" - d="m 133,-127 0,4.25 1,0 0,0.75 2,0 0,-0.75 1,0 0,-4.25 -1,0 0,4 -2,0 0,-4 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72452" - d="m 138,-127 0,5 1,0 1,0 0,-0.5 1,0 0,-1.5 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z m 0,2 1,0 0,1 -1,0 0,-1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72454" - d="m 151,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72456" - d="m 146,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 209,-127 0,5 1,0 2,0 0,-1 -2,0 0,-4 -1,0 z" - id="path72458" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 160,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - id="path72460" /> - <path - id="path72462" - d="m 171,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72464" - d="m 175,-127 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 179,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z" - id="path72466" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 194,-127 0,4.25 1,0 0,0.75 2,0 0,-0.75 1,0 0,-4.25 -1,0 0,4 -2,0 0,-4 -1,0 z" - id="path72468" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 202,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 0,-1.25 -1,0 0,1.25 -1,0 0,-3 2,0 0,-1 -2,0 z" - id="path72470" /> - <path - id="path72472" - d="m 205,-127 0,5 1,0 0,-2 1.25,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - id="path72474" - d="m 215,-127 0,5 1,0 2,0 0,-1 -2,0 0,-4 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 222,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z" - id="path72476" /> - <path - id="path72478" - d="m 225,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 229,-127 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z" - id="path72480" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 235,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z" - id="path72482" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 238,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z" - id="path72484" /> - <path - id="path72486" - d="m 242.75,-123 0,1 -0.75,0 0,1 1,0 0,-1 1,0 0,-1 -1.25,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - id="path32008-7" - d="m 72,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32010-4" - d="m 76,-127 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - y="-127" - x="80" - height="5" - width="1" - id="rect32012-0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32015-9" - d="m 83,-127 0,0.75 -1,0 0,1.5 1,0 0,0.75 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 1.5,0 0,-1 -1.5,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32017-4" - d="m 89,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32019-8" - d="m 97,-127 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32021-8" - d="m 93,-127 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32023-2" - d="m 102,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32026-4" - d="m 106,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 110,-127 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z" - id="path32029-5" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 115,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - id="path32031-5" /> - <rect - y="-127" - x="121" - height="5" - width="1" - id="rect32033-1" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 124,-127 0,0.75 -1,0 0,1.5 1,0 0,0.75 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 1.5,0 0,-1 -1.5,0 z" - id="path32035-7" /> - </g> - <g - id="g72757"> - <path - id="path72562" - d="m 78,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <rect - y="-119" - x="82" - height="5" - width="1" - id="rect72564" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - id="path72576" - d="m 72,-119 0,3.25 1,0 0,1.75 1,0 0,-1.75 1,0 0,1.75 1,0 0,-1.75 1,0 0,-3.25 -1,0 0,3 -1,0 0,-2 -1,0 0,2 -1,0 0,-3 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72578" - d="m 130,-119 0,2.25 1,0 0,2.75 1,0 0,-2.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72580" - d="m 94.75,-119 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72582" - d="m 85,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 88,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z" - id="path72588" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 99,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z" - id="path72590" /> - <path - id="path72592" - d="m 103,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 107,-119 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z" - id="path72594" /> - <path - id="path72596" - d="m 111,-119 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,-1 -1,0 z m 1,0 1,0 0,3 1,0 0,-5 -1,0 0,1 -1,0 0,1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 117,-119 0,5 1,0 0,-2 1.25,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z" - id="path72598" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 121.75,-119 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z" - id="path72600" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 125,-119 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z" - id="path72602" /> - <rect - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect72604" - width="1" - height="5" - x="136" - y="-119" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 138,-119 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - id="path72606" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 144.75,-119 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z" - id="path72608" /> - <path - inkscape:connector-curvature="0" - id="path72610" - d="m 148,-119 0,5 1,0 2,0 0,-1 -2,0 0,-4 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 153,-119 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z" - id="path72612" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 157,-119 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z" - id="path72614" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 163,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 0,-1.25 -1,0 0,1.25 -1,0 0,-3 2,0 0,-1 -2,0 z" - id="path72616" /> - <rect - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect72618" - width="1" - height="5" - x="174" - y="-119" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 168,-119 0,3.25 1,0 0,1.75 1,0 0,-1.75 1,0 0,1.75 1,0 0,-1.75 1,0 0,-3.25 -1,0 0,3 -1,0 0,-2 -1,0 0,2 -1,0 0,-3 -1,0 z" - id="path72620" /> - <path - id="path72622" - d="m 180,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - id="path72624" - d="m 176,-119 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - id="path32207-9-7" - d="m 187,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32209-6-7" - d="m 191,-119 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32211-3-7" - d="m 195,-119 0,5 1,0 0,-2 1.25,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32213-7-3" - d="m 199,-119 0,2.25 1,0 0,2.75 1,0 0,-2.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32216-8-3" - d="m 203,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-2 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect32218-8-5" - width="1" - height="5" - x="207" - y="-119" /> - <path - inkscape:connector-curvature="0" - id="path32220-2-9" - d="m 210,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 0,-1.25 -1,0 0,1.25 -1,0 0,-3 2,0 0,-1 -2,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32222-9-9" - d="m 213,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32224-1-8" - d="m 217,-119 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - id="path72678" - d="m 225,-119 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 235,-119 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z" - id="path72680" - inkscape:connector-curvature="0" /> - <rect - y="-119" - x="223" - height="5" - width="1" - id="rect72682" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - y="-115" - x="239" - height="1" - width="1" - id="rect72684" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - id="path72686" - d="m 230,-119 0,5 1,0 0,-2 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - </g> - </g> - <g - transform="translate(-62,136.5)" - style="display:inline;enable-background:new" - id="g72880"> - <g - transform="translate(231,-90)" - id="g32242-4"> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m -12.25,-17 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z" - id="path32244-2" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m -9,-17 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,-1 -1,0 z m 1,0 1,0 0,3 1,0 0,-5 -1,0 0,1 -1,0 0,1 z" - id="path32246-0" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m -3,-17 0,5 1,0 1,0 0,-0.5 1,0 0,-1.5 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z m 0,2 1,0 0,1 -1,0 0,-1 z" - id="path32248-9" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 1,-17 0,5 1,0 0,-2 1,0 0,2 1,0 0,-2 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z" - id="path32250-7" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 6,-17 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z" - id="path32252-3" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 10,-17 0,1 2,0 0,1 1,0 0,-1 0,-1 -3,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z" - id="path32254-7" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m -43.25,-17 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z" - id="path32256-2" /> - <path - inkscape:connector-curvature="0" - id="path32258-6" - d="m -40,-17 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32260-0" - d="m -35,-17 0,1 0,3 0,1 2,0 0,-0.75 1,0 0,-3.5 -1,0 0,-0.75 -2,0 z m 1,1 1,0 0,3 -1,0 0,-3 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m -31,-17 0,5 1,0 0,-2 1,0 0,2 1,0 0,-2 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z" - id="path32262-1" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m -27,-17 0,1 2,0 0,1 1,0 0,-1 0,-1 -3,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z" - id="path32264-6" /> - <path - inkscape:connector-curvature="0" - id="path32266-5" - d="m -23,-17 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - id="path32268-7" - d="m -17,-17 0,4 -1,0 0,-1 -1,0 0,1 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-4 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - y="-19" - x="11" - height="1" - width="1" - id="rect32270-5" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - </g> - <g - id="g21967-4" - transform="translate(111.96875,-88)"> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 48,-20 0,0.75 -1,0 0,0.25 -0.25,0 0,1 -0.75,0 0,3 0.75,0 0,1 0.25,0 0,0.25 1,0 0,0.75 3,0 0,-0.75 1,0 0,-0.25 0.25,0 0,-1 0.75,0 0,-3 -0.75,0 0,-1 -0.25,0 0,-0.25 -1,0 0,-0.75 -3,0 z m 0,1 3,0 0,1 1,0 0,3 -1,0 0,1 -3,0 0,-1 -1,0 0,-3 1,0 0,-1 z" - id="path32272-1" - sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc" /> - <path - inkscape:connector-curvature="0" - id="path32274-2" - d="m 49,-18 0,0.75 -1,0 0,1.5 1,0 0,0.75 1.25,0 0,-1 -1.25,0 0,-1 1.25,0 0,-1 -1.25,0 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - sodipodi:nodetypes="ccccccccccccc" /> - </g> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 171.71875,-107 0,1 -0.75,0 0,3 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-3 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,3 -1,0 0,-3 z m 0.25,1 0,1 0.5,0 0,-1 -0.5,0 z" - id="path72688" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 175.96875,-107 0,1 -1,0 0,1 1,0 0,3 1,0 0,-5 -1,0 z" - id="path72690" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 177.96875,-107 0,1 2,0 0,1 -1,0 0,1 1,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -2,0 z m 1,3 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z" - id="path72692" /> - <path - id="path72694" - d="m 166.96875,-107 0,1 2,0 0,1 -1,0 0,1 1,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -2,0 z m 1,3 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - d="m 182.96875,-106 0,1 1,0 0,-1 -1,0 z m -0.21875,3 0,1 -0.75,0 0,1 1,0 0,-1 1,0 0,-1 -1.25,0 z" - id="path72696" /> - </g> - </g> + style="display:inline" /> <g transform="translate(-872,-180)" style="display:inline" @@ -18970,1876 +16926,725 @@ id="rect30285" style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5.39191818;marker:none;enable-background:accumulate" /> <g - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png" - transform="translate(860,-202)" - id="g21955" - style="display:inline;opacity:0.3;enable-background:new"> - <rect - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" - id="rect21957" - width="48" - height="48" - x="108" - y="430" - rx="2.4004419" - ry="0" /> - <g - id="g21959"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path21961" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="display:inline;fill:url(#linearGradient21977);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" - id="path21963" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" - d="m 115,444 12,0 -1,-11 -11,11 z" - id="path21965" - sodipodi:nodetypes="cccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="url(#clipPath13106)" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path21967" - style="fill:none;stroke:url(#linearGradient21979);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 117.5,443.75 9,-2.5 0,-6" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="none" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path21969" - sodipodi:nodetypes="cccccc" /> - <path - inkscape:connector-curvature="0" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" - d="m 116,443 11,1 -2,-10 -9,9 z" - id="path21971" - sodipodi:nodetypes="cccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="url(#clipPath13106)" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path21973" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.5,435 0,38.5 -30.5,0" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path21975" - sodipodi:nodetypes="ccc" /> - </g> - </g> + transform="translate(0,12)" + id="g46790" /> <g - transform="translate(4,0)" - id="g30335"> - <g - id="g21367" - transform="translate(760,-202)"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path21369" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="display:inline;fill:url(#linearGradient30321);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" - id="path21371" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" - d="m 115,444 12,0 -1,-11 -11,11 z" - id="path21373" - sodipodi:nodetypes="cccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="url(#clipPath13106)" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path21375" - style="fill:none;stroke:url(#linearGradient30323);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 117.5,443.75 9,-2.5 0,-6" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="none" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path21377" - sodipodi:nodetypes="cccccc" /> - <path - inkscape:connector-curvature="0" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" - d="m 116,443 11,1 -2,-10 -9,9 z" - id="path21569" - sodipodi:nodetypes="cccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="url(#clipPath13106)" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path21379" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.5,435 0,38.5 -30.5,0" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path21381" - sodipodi:nodetypes="ccc" /> - </g> + id="g46890" /> + <path + sodipodi:nodetypes="cc" + id="path34332" + style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" + d="" + inkscape:connector-curvature="0" /> + <g + id="g15770-4" + transform="translate(-1653.0047,902.99644)" + style="display:inline;opacity:0.6;enable-background:new"> <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + id="path15766-8" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" - style="font-style:normal;font-weight:normal;font-size:33.49144363px;font-family:'Bitstream Vera Sans';display:inline;fill:#214478;fill-opacity:1;stroke:none" - d="m 891.07148,245 -0.0715,9 2.39012,0 C 896,254 896,253 896.5,251 l 0.5,0 0,7 -0.5,0 c -0.5,-2 -0.5,-3 -3.10988,-3 L 891,255 l 0,7 c 0,2.5 1,3.25 3.14146,3.39973 l -0.004,0.60029 L 885,266 l 0.004,-0.60029 C 887,265.25 888,264.5 888.00001,262 L 888,248 c 0,-2.5 -1,-3.25 -3,-3.5 l 0,-0.5 16,0 0,5 -0.5,0 c -0.50001,-1.99999 -1.5,-4 -4.5,-4 l -4.92852,0 z" - id="text13209" - sodipodi:nodetypes="ccccccccccccccccccccccc" /> + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + id="path15768-2" /> </g> + <path + sodipodi:nodetypes="ccssssssccccscssscccccsscscsccccssccc" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 875.49998,329 c -0.4167,0 -0.7749,0.19292 -1.041,0.45898 -0.2661,0.26607 -0.459,0.62435 -0.459,1.04102 v 32 c 0,3.03164 2.4684,5.5 5.5,5.5 H 912.5 c 3.0316,0 5.5,-2.46836 5.5,-5.5 v -20 c 0,-0.42425 -0.1991,-0.77237 -0.4648,-1.04883 -0.2658,-0.27646 -0.6395,-0.51191 -1.1055,-0.44531 l 0.07,-0.006 h -6.5 -27.50002 c -0.095,0 -0.1807,0.0361 -0.3223,0.17773 -0.1417,0.14177 -0.1777,0.22697 -0.1777,0.32227 v 21 c 0,1.20549 -0.8756,2.25014 -2.0625,2.46094 -1.1869,0.2108 -2.3701,-0.46784 -2.7852,-1.59961 -0.041,-0.1158 -0.061,-0.23824 -0.058,-0.36119 h 2.4062 v -0.008 c 0.03,-2.1e-4 0.058,0.005 0.088,0 0.2451,-0.0435 0.4121,-0.2432 0.4121,-0.49219 v -21 c 0,-0.74923 0.3782,-1.35083 0.7637,-1.73633 0.3856,-0.38565 0.9871,-0.76367 1.7363,-0.76367 h 27.50002 v -4.5 c 0,-0.41667 -0.1929,-0.77495 -0.459,-1.04102 -0.2661,-0.26606 -0.6243,-0.45898 -1.041,-0.45898 l -18.02732,0.0449 c -0.055,1.2e-4 -0.1892,-0.0544 -0.2989,-0.17383 -0.1114,-0.1193 -0.1738,-0.28349 -0.1738,-0.37109 v -2 c 0,-0.41667 -0.1929,-0.77495 -0.459,-1.04102 -0.2661,-0.26606 -0.6243,-0.45898 -1.041,-0.45898 z" + id="path15794" + inkscape:connector-curvature="0" /> <g + transform="translate(-1139.094,997)" style="display:inline;enable-background:new" - id="g21625" - transform="translate(908,-154)" - inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <rect - ry="0" - rx="2.4004419" - y="430" - x="108" - height="48" - width="48" - id="rect21627" - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" /> + id="g16516"> <g - id="g21629"> - <path - inkscape:connector-curvature="0" - style="display:inline;fill:url(#linearGradient21647);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - id="path21631" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <g - style="display:inline;opacity:0.5;fill:#000000" - id="g16261" - transform="matrix(1.2499985,0,0,1,-87.6203,-147.85351)"> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect35099" - width="17.600004" - height="1" - x="167.69646" - y="598.85352" - rx="0.12125195" - ry="0.065390877" /> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect35101" - width="17.600004" - height="1" - x="167.69646" - y="600.85352" - rx="0.12125195" - ry="0.065390877" /> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect15690" - width="17.600004" - height="1" - x="167.69646" - y="602.85352" - rx="0.12125195" - ry="0.065390877" /> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect15692" - width="17.600004" - height="1" - x="167.69646" - y="604.85352" - rx="0.12125195" - ry="0.065390877" /> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect15694" - width="17.600004" - height="1" - x="167.69646" - y="606.85352" - rx="0.12125195" - ry="0.065390877" /> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect15696" - width="17.600004" - height="1" - x="167.69646" - y="608.85352" - rx="0.12125195" - ry="0.065390877" /> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect15698" - width="17.600004" - height="1" - x="167.69646" - y="610.85352" - rx="0.12125195" - ry="0.065390877" /> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect15700" - width="17.600004" - height="1" - x="167.69646" - y="612.85352" - rx="0.12125195" - ry="0.065390877" /> - <rect - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="rect15732" - width="14.400002" - height="1" - x="167.69646" - y="614.85352" - rx="0.09920612" - ry="0.065390877" /> - <g - transform="translate(150.89645,557.85352)" - id="g4849" - style="display:inline;fill:#000000"> - <rect - ry="0.065390877" - rx="0.12125195" - y="29" - x="16.799992" - height="1" - width="17.600004" - id="rect15736" - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - ry="0.065390877" - rx="0.12125195" - y="31" - x="16.799992" - height="1" - width="17.600004" - id="rect15738" - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - ry="0.065390877" - rx="0.12125195" - y="33" - x="16.799992" - height="1" - width="17.600004" - id="rect15740" - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - ry="0.065390877" - rx="0.12125195" - y="35" - x="16.799992" - height="1" - width="17.600004" - id="rect15742" - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <rect - ry="0.065390877" - rx="0.055114571" - y="37" - x="16.799992" - height="1" - width="8.0000095" - id="rect15744" - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - </g> - <rect - ry="0.065390304" - rx="0.0057410933" - y="617.85352" - x="184.49646" - height="0.99999124" - width="0.83333319" - id="rect16334" - style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - </g> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path21633" - sodipodi:nodetypes="cccc" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path21635" - d="m 115,444 12,0 -1,-11 -11,11 z" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" /> + id="g15792" + transform="translate(-500,-182)" + style="opacity:0.6"> <path + sodipodi:nodetypes="cscssscssssssssssccsc" inkscape:connector-curvature="0" - clip-path="none" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 117.5,443.75 9,-2.5 0,-6" - style="fill:none;stroke:url(#linearGradient21649);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path21637" - sodipodi:nodetypes="ccc" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - id="path21639" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path21641" - d="m 116,443 11,1 -2,-10 -9,9 z" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" /> - <path - inkscape:connector-curvature="0" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - id="path21643" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <g - id="g35119" - transform="translate(2,-160.99999)" - style="display:inline"> - <g - style="display:inline" - transform="translate(105.39645,589.71201)" - id="g16097"> - <g - id="g16099" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4" - transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)"> - <radialGradient - id="radialGradient16101" - cx="20.892099" - cy="114.5684" - r="5.256" - fx="20.892099" - fy="114.5684" - gradientUnits="userSpaceOnUse"> - <stop - offset="0" - style="stop-color:#F0F0F0" - id="stop16103" /> - <stop - offset="1" - style="stop-color:#474747" - id="stop16105" /> - </radialGradient> - <radialGradient - id="radialGradient16109" - cx="20.892099" - cy="64.567902" - r="5.257" - fx="20.892099" - fy="64.567902" - gradientUnits="userSpaceOnUse"> - <stop - offset="0" - style="stop-color:#F0F0F0" - id="stop16111" /> - <stop - offset="1" - style="stop-color:#474747" - id="stop16113" /> - </radialGradient> - </g> - <path - inkscape:connector-curvature="0" - style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" - d="m 12.85355,31.53813 c 0,0.552274 -0.447803,0.99986 -1,0.99986 -0.552477,0 -1,-0.447865 -1,-0.99986 0,-0.552554 0.447803,-1.00014 1,-1.00014 0.552197,0 1,0.447866 1,1.00014 l 0,0 0,0 0,0 z" - id="path16107" /> - <path - inkscape:connector-curvature="0" - style="fill:url(#radialGradient21565);fill-rule:nonzero;stroke:none" - d="m 12.60355,31.288131 c 0,0.552274 -0.447803,0.999859 -1,0.999859 -0.552477,0 -1,-0.447865 -1,-0.999859 0,-0.552556 0.447803,-1.000141 1,-1.000141 0.552197,0 1,0.447866 1,1.000141 z" - id="path16117" /> - </g> - <g - id="g16131" - transform="translate(105.39645,579.71201)" - style="display:inline"> - <g - transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4" - id="g16133"> - <radialGradient - gradientUnits="userSpaceOnUse" - fy="114.5684" - fx="20.892099" - r="5.256" - cy="114.5684" - cx="20.892099" - id="radialGradient16135"> - <stop - id="stop16137" - style="stop-color:#F0F0F0" - offset="0" /> - <stop - id="stop16140" - style="stop-color:#474747" - offset="1" /> - </radialGradient> - <radialGradient - gradientUnits="userSpaceOnUse" - fy="64.567902" - fx="20.892099" - r="5.257" - cy="64.567902" - cx="20.892099" - id="radialGradient16142"> - <stop - id="stop16144" - style="stop-color:#F0F0F0" - offset="0" /> - <stop - id="stop16146" - style="stop-color:#474747" - offset="1" /> - </radialGradient> - </g> - <path - inkscape:connector-curvature="0" - id="path35139" - d="m 12.85355,31.53813 c 0,0.552274 -0.447803,0.99986 -1,0.99986 -0.552477,0 -1,-0.447865 -1,-0.99986 0,-0.552554 0.447803,-1.00014 1,-1.00014 0.552197,0 1,0.447866 1,1.00014 l 0,0 0,0 0,0 z" - style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /> - <path - inkscape:connector-curvature="0" - id="path35141" - d="m 12.60355,31.288131 c 0,0.552274 -0.447803,0.999859 -1,0.999859 -0.552477,0 -1,-0.447865 -1,-0.999859 0,-0.552556 0.447803,-1.000141 1,-1.000141 0.552197,0 1,0.447866 1,1.000141 z" - style="fill:url(#radialGradient21567);fill-rule:nonzero;stroke:none" /> - </g> - </g> + d="m 2564.8618,-451.50005 c 0.3211,0.5561 0.8787,0.91004 1.4878,0.98518 0.2496,0.0308 0.5078,0.0148 0.7619,-0.0533 0.8744,-0.23427 1.4824,-1.02663 1.4824,-1.93185 v -22 c 0,-0.4714 0.5286,-1 1,-1 l 34,2e-5 c 0.4667,-0.0667 1,0.52863 1,1.00003 v 22 c 0,2.76142 -2.2386,5 -5,5 h -33 c -2.7614,0 -5,-2.23858 -5,-5 v -33 c 0,-0.5 0.5,-1 1,-1 h 13 c 0.5,0 1,0.5 1,1 v 2 c 0,0.5 0.4872,1.0452 0.9723,1.0442 l 18.0277,-0.0442 c 0.5,0 1,0.5 1,1 v 2" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + id="path15787" /> <path + sodipodi:nodetypes="cc" inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path21645" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.5,435 0,38.5 -30.5,0" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> + id="path15790" + d="m 2596.5,-479.5 v 1.5" + style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> </g> - </g> - <g - style="display:inline;enable-background:new" - id="g21572" - transform="translate(812,-202)" - inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <rect - ry="0" - rx="2.4004419" - y="430" - x="108" - height="48" - width="48" - id="rect21574" - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" /> <g - id="g21576"> - <path - inkscape:connector-curvature="0" - style="display:inline;fill:url(#linearGradient21594);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - id="path21578" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path21580" - sodipodi:nodetypes="cccc" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path21582" - d="m 115,444 12,0 -1,-11 -11,11 z" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" /> + id="g15799" + transform="matrix(0,1,1,0,2028.5,-908.5)" + style="display:inline;opacity:1;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" + inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> <path + id="path15797" + style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" + d="m 271.5,63.5 v -5 c 0,-1.104569 -0.89543,-2 -2,-2 h -11 m 4,5 -5,-5 5,-5" inkscape:connector-curvature="0" - clip-path="none" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 117.5,443.75 9,-2.5 0,-6" - style="fill:none;stroke:url(#linearGradient21596);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path21584" - sodipodi:nodetypes="ccc" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - id="path21586" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path21588" - d="m 116,443 11,1 -2,-10 -9,9 z" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" /> - <path - inkscape:connector-curvature="0" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - id="path21590" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path21592" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.5,435 0,38.5 -30.5,0" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> + sodipodi:nodetypes="ccccccc" /> </g> </g> <g - transform="translate(4,0)" - id="g30382"> - <g - id="g23655" - transform="translate(760,-154)"> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path23657" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - style="display:inline;fill:url(#linearGradient30368);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccc" - id="path23659" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" - d="m 115,444 12,0 -1,-11 -11,11 z" - id="path23661" - sodipodi:nodetypes="cccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="url(#clipPath13106)" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path23663" - style="fill:none;stroke:url(#linearGradient30370);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 117.5,443.75 9,-2.5 0,-6" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="none" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path23665" - sodipodi:nodetypes="cccccc" /> - <path - inkscape:connector-curvature="0" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" - d="m 116,443 11,1 -2,-10 -9,9 z" - id="path23667" - sodipodi:nodetypes="cccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - clip-path="url(#clipPath13106)" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccccc" - id="path23669" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.5,435 0,38.5 -30.5,0" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path23671" - sodipodi:nodetypes="ccc" /> - </g> + style="display:inline;opacity:0.6;enable-background:new" + transform="translate(-1653.0001,855.00002)" + id="g6937"> + <path + inkscape:connector-curvature="0" + id="path6933" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> <path + id="path6935" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" - d="m 888,295 1,0 0,14 -1,0 0,-14 z" - id="path23675" - sodipodi:nodetypes="ccccc" /> + sodipodi:nodetypes="cccccccc" /> + </g> + <g + id="g6943" + transform="translate(-1701.0001,855.00002)" + style="display:inline;opacity:0.6;enable-background:new"> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + id="path6939" + inkscape:connector-curvature="0" /> <path + sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" - id="path23677" - d="m 900,294 1.00002,-1 0,14 -1.00002,0 0,-13 z" - style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" - sodipodi:nodetypes="ccccc" /> + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + id="path6941" /> + </g> + <g + style="display:inline;opacity:0.6;enable-background:new" + transform="translate(-1749.0047,854.99644)" + id="g6949"> <path inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" - id="path23679" - d="m 901.00003,292 0,2.25 -13.00002,2 0,-2.25 13.00002,-2 z" - style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" /> - <g - id="g23681" - transform="matrix(1.1428564,0,0,1.2000001,822.71436,-355.40005)"> - <ellipse - ry="2.25" - rx="4.5" - cy="554" - cx="53" - transform="matrix(0.7630859,-0.2494396,0.2996015,0.9926766,-151.92281,17.77746)" - id="path23683" - style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" /> - <ellipse - ry="2.25" - rx="4.5" - cy="554" - cx="53" - style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;filter:url(#filter20578);enable-background:accumulate" - id="path23685" - transform="matrix(0.3848865,-0.1700959,0.2278131,0.3626733,-93.107467,361.59408)" - inkscape:transform-center-y="0.3813435" - clip-path="url(#clipPath20586)" /> - </g> + id="path6945" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> <path + id="path6947" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" inkscape:connector-curvature="0" - style="display:inline;overflow:visible;visibility:visible;opacity:0.38999999;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" - d="m 901.00003,292 -1e-5,1 -13.00002,2 10e-6,-1 13.00002,-2 z" - id="path23694" - sodipodi:nodetypes="ccccc" /> - <g - transform="matrix(1.1428564,0,0,1.2000001,834.71436,-357.40005)" - id="g23717"> - <ellipse - ry="2.25" - rx="4.5" - cy="554" - cx="53" - style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" - id="path23724" - transform="matrix(0.7630859,-0.2494396,0.2996015,0.9926766,-151.92281,17.77746)" /> - <ellipse - ry="2.25" - rx="4.5" - cy="554" - cx="53" - clip-path="url(#clipPath20586)" - inkscape:transform-center-y="0.3813435" - transform="matrix(0.3848865,-0.1700959,0.2278131,0.3626733,-93.107467,361.59408)" - id="path23726" - style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;filter:url(#filter20578);enable-background:accumulate" /> - </g> + sodipodi:nodetypes="cccccccc" /> </g> <g - id="g23922" - transform="translate(-12,-220)" - style="display:inline;enable-background:new"> - <g - style="display:inline" - id="g23924" - transform="translate(824,66)" - inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <rect - ry="0" - rx="2.4004419" - y="430" - x="108" - height="48" - width="48" - id="rect23926" - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" /> - <g - id="g23928"> - <path - inkscape:connector-curvature="0" - style="display:inline;fill:url(#linearGradient23978);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - id="path23930" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path23932" - sodipodi:nodetypes="cccc" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path23934" - d="m 115,444 12,0 -1,-11 -11,11 z" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" /> - <path - inkscape:connector-curvature="0" - clip-path="none" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 117.5,443.75 9,-2.5 0,-6" - style="fill:none;stroke:url(#linearGradient23980);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path23936" - sodipodi:nodetypes="ccc" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - id="path23938" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path23940" - d="m 116,443 11,1 -2,-10 -9,9 z" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" /> - <path - inkscape:connector-curvature="0" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - id="path23942" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path23944" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.5,435 0,38.5 -30.5,0" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - </g> - </g> + id="g6955" + transform="translate(-1797.0001,855.00002)" + style="display:inline;opacity:0.6;enable-background:new"> <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccc" - id="path23946" - d="m 952,530 0,10 1,0 1,0 11,0 1,0 1,0 0,-10 -15,0 z m 1,2 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z" - style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" /> - <rect - transform="scale(1,-1)" - style="fill:url(#linearGradient23982);fill-opacity:1;fill-rule:nonzero;stroke:none" - id="rect23948" - width="13" - height="5.5" - x="953" - y="-524" /> + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + id="path6951" + inkscape:connector-curvature="0" /> <path + sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" - id="path23952" - transform="translate(76,0)" - d="m 876,514 0,17 15,0 0,-17 -1,0 0,1 -1,0 0,-1 -11,0 0,1 -1,0 0,-1 -1,0 z m 1,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z" - style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + id="path6953" /> + </g> + <g + id="g6961" + transform="translate(-1653.0001,807.00002)" + style="display:inline;opacity:0.6;enable-background:new"> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + id="path6957" + inkscape:connector-curvature="0" /> <path + sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccc" - style="fill:url(#linearGradient23986);fill-opacity:1;fill-rule:nonzero;stroke:none" - d="m 952,507 3,0 0,3 9,0 0,-3 3,0 0,7 -15,0 0,-7 z m 1,0 1,0 -1,0 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,3 0,1 1,0 0,-1 -1,0 z m 12,-4 1,0 -1,0 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,3 0,1 1,0 0,-1 -1,0 z" - id="path23954" /> - <rect - transform="matrix(0,1,1,0,0,0)" - ry="0" - y="955" - x="507" - height="9" - width="3" - id="rect23956" - style="fill:url(#linearGradient23988);fill-opacity:1;fill-rule:nonzero;stroke:none" /> - <rect - style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="rect23958" - width="9" - height="9" - x="512" - y="955" - ry="0" - transform="matrix(0,1,1,0,0,0)" /> - <rect - transform="matrix(0,1,1,0,0,0)" - ry="0" - y="955" - x="523" - height="9" - width="9" - id="rect23960" - style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none" /> - <circle - r="8" - cy="118" - cx="132" - transform="matrix(0,-0.5624971,0.5624971,0,893.12531,590.74965)" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path23962" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <circle - r="8" - cy="118" - cx="132" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" - id="path23964" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(0,-0.5624964,0.5624964,0,893.12545,601.74956)" /> + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + id="path6959" /> + </g> + <g + style="display:inline;opacity:0.6;enable-background:new" + transform="translate(-1701.0001,807.00002)" + id="g6967"> <path inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccccccccc" - id="path23966" - d="m 961.00001,519.00005 -3,0 0,-0.99992 0.99994,0 6e-5,-2.00008 -1,0 0,-1 1,0 0,-1 1.00006,0 0,4.00008 0.99994,0 0,0.99992 z" /> + id="path6963" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> <path + id="path6965" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" inkscape:connector-curvature="0" - d="m 958,525 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z" - id="path23968" /> - <rect - style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="rect23970" - width="6" - height="9" - x="534" - y="955" - ry="0" - transform="matrix(0,1,1,0,0,0)" /> - <g - clip-path="url(#clipPath23877)" - id="g23972"> - <circle - r="8" - cy="118" - cx="132" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" - id="path23974" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" - transform="matrix(0,-0.5624964,0.5624964,0,893.12545,612.74956)" /> - <path - inkscape:connector-curvature="0" - d="m 958,536 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,1 -2,0 0,1 2,0 0,-1 z" - id="path23976" /> - </g> + sodipodi:nodetypes="cccccccc" /> </g> <g - transform="translate(212,88)" - id="g45475" - style="display:inline;enable-background:new"> - <g - style="display:inline" - id="g22242" - transform="translate(696,-194)" - inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <rect - ry="0" - rx="2.4004419" - y="430" - x="108" - height="48" - width="48" - id="rect22244" - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" /> - <g - id="g22246"> - <path - inkscape:connector-curvature="0" - style="display:inline;fill:url(#linearGradient22274);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - id="path22249" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path22251" - sodipodi:nodetypes="cccc" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path22253" - d="m 115,444 12,0 -1,-11 -11,11 z" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" /> - <path - inkscape:connector-curvature="0" - clip-path="none" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 117.5,443.75 9,-2.5 0,-6" - style="fill:none;stroke:url(#linearGradient22276);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path22264" - sodipodi:nodetypes="ccc" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - id="path22266" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path22268" - d="m 116,443 11,1 -2,-10 -9,9 z" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" /> - <path - inkscape:connector-curvature="0" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - id="path22270" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path22272" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.5,435 0,38.5 -30.5,0" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - </g> - </g> - <g - id="g21517" - inkscape:label="Layer 1" - transform="matrix(0.5406242,0,0,0.5829534,814.13667,247.65542)"> - <ellipse - ry="5.3033009" - rx="15.467961" - cy="38.98439" - cx="28.019106" - transform="matrix(1.274286,0,0,1.377124,-7.569123,-16.70193)" - id="path35486" - style="display:inline;overflow:visible;visibility:visible;opacity:0.54857142;fill:url(#radialGradient21442);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="csssssssssscccsscccscccssccc" - d="m 16.048489,28.093447 c 0.0098,0.576682 0.196474,1.697902 0.471116,2.577425 0.581566,1.854137 1.56684,3.572658 2.939126,5.086496 1.407488,1.553118 3.138519,2.803227 5.139315,3.68976 2.105357,0.931573 4.384795,1.407488 6.750134,1.403741 2.365339,-0.005 4.644601,-0.488686 6.74896,-1.427017 2.00002,-0.895288 3.731043,-2.148391 5.13754,-3.705517 1.369207,-1.519844 2.352576,-3.241114 2.934089,-5.096258 0.294262,-0.938353 0.476921,-1.889392 0.553238,-2.845308 0.07331,-0.939306 0.04204,-1.883511 -0.09183,-2.823792 -0.259981,-1.835599 -0.896294,-3.556847 -1.872652,-5.12758 -0.895541,-1.441699 -2.047808,-2.70454 -3.417268,-3.766975 0,0 0.002,-0.002 0.002,-0.002 0,0 -13.828458,-10.6197195 -13.828458,-10.6197195 -0.01176,-0.00978 -0.02252,-0.019551 -0.03529,-0.028344 -0.909003,-0.6959264 -3.879837,-0.7738945 -4.87679,-0.075035 -1.01067,0.7057021 -1.091821,1.8092613 -0.195527,2.5482146 1.899775,1.4997633 2.656207,2.2801589 4.566507,3.7797379 0,0 -14.852491,0.167033 -14.852491,0.167033 -1.994685,0 -3.1682609,0.947915 -3.4153947,2.333683 -0.2180771,1.222836 0.7479213,2.738129 2.4800217,2.738129 2.956573,0.0039 5.942111,-0.0069 8.909215,-0.01272 0,0 -16.01999,12.453223 -16.01999,12.453223 -0.020527,0.01564 -0.041053,0.02933 -0.06158,0.04497 -1.4974197,1.148389 -1.9831951,3.059322 -1.0399808,4.268393 0.9598323,1.22959 2.9977653,1.230588 4.5147288,0.006 0,0 8.677593,-7.102098 8.677593,-7.102098 0,0 -0.12511,0.959824 -0.116333,1.535532 l 1e-6,2.6e-5 0,0 0,0 z" - id="path2482" - style="fill:#f57900;fill-rule:evenodd;stroke:#aa4400;stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" /> - <ellipse - ry="10.125" - rx="11.5625" - cy="25.75" - cx="31.1875" - transform="matrix(0.8018194,0,0,0.8471126,6.257567,4.5089892)" - id="path39153" - style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient21444);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - style="opacity:0.4857143;fill:none;stroke:url(#linearGradient21446);stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" - d="m 25.8125,6.40625 c -0.334829,4.572e-4 -0.72202,0.089606 -0.90625,0.21875 4.5e-4,0.010412 4.5e-4,0.020838 0,0.03125 -0.212626,0.1484635 -0.188235,0.1956271 -0.1875,0.1875 0.0092,0.010621 -0.0072,-4.246e-4 0.03125,0.03125 0.01962,0.00828 0.03527,0.012546 0.0625,0.03125 0.01676,0.01151 0.01357,0.014555 0.03125,0.03125 0.193748,0.1576058 4.954976,4.005164 4.954976,4.005164 0.489837,0.39864 0.677395,1.066352 0.46875,1.65625 -0.115662,0.32703 -0.422813,0.541217 -0.6875,0.59375 -0.264687,0.05253 -0.498447,0.03054 -0.71875,0.03125 -5.639658,0.05119 -16.87989,0.03851 -16.87989,0.03851 -0.4102,2.75e-4 -0.935835,0.115997 -1.34375,0.34375 -0.407915,0.227753 -0.6637862,0.523861 -0.6875002,0.90625 -0.024417,0.393728 0.098829,0.605767 0.3437502,0.78125 0.244921,0.175483 0.614978,0.25 0.875,0.25 0,0 8.8125,0 8.8125,0 0.600305,-7.28e-4 1.223895,0.311058 1.4375,0.9375 0.04676,0.137121 0.06335,0.269976 0.0625,0.40625 -8.49e-4,0.136274 -0.02214,0.268794 -0.09375,0.375 -0.143211,0.212412 -0.319507,0.298568 -0.5,0.4375 0,0 -15.7871819,12.746851 -15.856336,12.800078 C 5.0310984,30.500117 5,30.53125 5,30.53125 5.0100745,30.519077 5.000335,30.499512 5,30.5 L 4.8125,30.3125 c 0.012336,0.02165 0.014481,0.03307 0.03125,0.0625 0.063558,0.0774 0.125,0.15625 0.125,0.15625 -0.00585,0.0056 -0.031233,0.03124 -0.03125,0.03125 0,0 -0.043442,-0.09921 -0.09375,-0.1875 0.037843,0.09884 0.06253,0.218739 0.0625,0.21875 -0.4662091,0.37119 -0.7783348,0.889746 -0.875,1.28125 -0.1043319,0.422581 -0.046,0.62455 0.125,0.84375 0.2999827,0.384295 1.3975356,0.595547 2.40625,-0.21875 0,0 8.65625,-7.09375 8.65625,-7.09375 0.473718,-0.387074 1.1446,-0.458625 1.6875,-0.15625 0.544608,0.303331 0.798054,0.927572 0.71875,1.53125 0,0 -0.0626,0.908319 -0.0625,1.25 2e-6,0.0085 -1.19e-4,0.02348 0,0.03125 0.192796,2.523718 1.400736,4.762818 3.03125,6.71875 2.801818,3.089095 6.627659,4.401619 10.75,4.5625 4.113324,-0.043 7.964529,-1.606111 10.75,-4.625 2.546631,-3.125326 3.513872,-6.363859 3.15625,-9.375 C 44.891575,22.325847 43.222923,19.516566 40.4375,17.25 35.951885,13.599946 31.206991,10.168434 26.59375,6.625 26.57515,6.610386 26.56455,6.59802 26.5625,6.59375 26.43835,6.498703 26.144223,6.4057899 25.8125,6.40625 Z" - id="path21414" - sodipodi:nodetypes="csssssscssscsssccssscscccsccssssccscsscccssssc" /> - <path - inkscape:connector-curvature="0" - d="m 25.708956,26.064593 c 0.07649,-1.397943 0.759369,-2.631914 1.78592,-3.505519 1.010226,-0.858782 2.366788,-1.383145 3.848625,-1.383145 1.480894,0 2.837456,0.524363 3.847446,1.383145 1.027685,0.873605 1.709741,2.106651 1.787122,3.504594 0.07927,1.438713 -0.49591,2.77459 -1.504012,3.764001 -1.027686,1.007933 -2.493008,1.640678 -4.130556,1.640678 -1.63849,0 -3.103814,-0.632745 -4.131451,-1.640678 -1.00914,-0.989411 -1.58234,-2.325288 -1.503094,-3.763076 l 0,0 0,0 0,0 z" - id="path2478" - style="fill:#3465a4;fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="csssscsccsscsccssssscsscccsssc" - id="path39166" - d="m 25.8125,6.03125 c -0.404852,5.53e-4 -2.204797,-0.059029 -2.48145,0.1349032 -0.280209,0.195652 -0.335403,0.376484 -0.34375,0.46875 -0.0083,0.092266 -0.01539,0.17648 0.1875,0.34375 0.01899,0.015735 0.04457,0.014317 0.0625,0.03125 0.124258,0.101028 4.748869,4.1248618 4.748869,4.1248618 0.373658,0.304091 0.504393,0.795817 0.34375,1.25 -0.160635,0.454191 -0.580748,0.373449 -1.0625,0.375 -5.634142,0.05114 -15.087371,-0.129601 -15.087371,-0.129601 -0.952967,6.38e-4 -2.339958,0.524782 -2.4062504,1.59375 -0.063562,1.024947 0.9247974,1.4375 1.5937504,1.4375 0,-1e-6 8.8125,0 8.8125,0 0.488364,-5.92e-4 0.936141,0.225277 1.09375,0.6875 0.157609,0.462231 -0.01926,0.514621 -0.40625,0.8125 0,0 -16.086298,13.088586 -16.086298,13.088586 -0.00142,0.0014 -0.029829,-0.0014 -0.03125,0 -0.064037,0.04879 -0.054226,0.04875 -0.03125,0.03125 -0.5536758,0.424619 -0.9087886,1.004019 -1.03125,1.5 -0.1224536,0.495981 -0.04661,0.856152 0.1875,1.15625 0.4788333,0.613413 1.777612,0.754857 2.90625,-0.15625 1e-7,10e-7 8.65625,-7.09375 8.65625,-7.09375 0.361955,-0.295753 0.872897,-0.352437 1.28125,-0.125 0.408345,0.227436 0.623381,0.692814 0.5625,1.15625 0,-1e-6 -0.0997,0.953636 -0.09375,1.34375 0.09498,1.301756 0.451616,2.521825 0.989039,3.664234 C 20.799917,36.321089 27.770982,19.392853 44.1875,21.03125 43.339652,19.54368 42.151282,18.185293 40.65625,16.96875 36.159865,13.309932 31.42016,9.882897 26.8125,6.34375 26.805335,6.338858 26.788292,6.317553 26.78125,6.3125 26.570707,6.151312 26.216591,6.030689 25.8125,6.03125 Z" - style="opacity:0.51999996;fill:url(#radialGradient21448);fill-opacity:1;fill-rule:evenodd;stroke:none" /> - </g> + id="g6973" + transform="translate(-1749.0047,806.99644)" + style="display:inline;opacity:0.6;enable-background:new"> + <path + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + id="path6969" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="cccccccc" + inkscape:connector-curvature="0" + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + id="path6971" /> </g> <g - id="g6090"> - <g - id="g24784" - transform="translate(116,247.5)" - style="opacity:0.5"> - <path - sodipodi:nodetypes="ccccccssssccc" - style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24809);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="path24789" - d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z" - inkscape:connector-curvature="0" /> - <path - id="path24791" - style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24811);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0" - sodipodi:nodetypes="cccccccccccccccccccccccccccccc" - inkscape:connector-curvature="0" /> - <path - inkscape:export-ydpi="74.800003" - inkscape:export-xdpi="74.800003" - inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png" - sodipodi:nodetypes="csccsczc" - id="path24793" - d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-18.5 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,19.5 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z" - style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24813);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z" - id="path24796" - style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" - sodipodi:nodetypes="ccssccc" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="cc" - d="m 840.5,89 0,4.5" - style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - id="path24799" - inkscape:connector-curvature="0" /> - <path - id="path24801" - style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - d="m 848.5,95.5 0,18 c 0,1.25 0.25,3 -1.25,4" - sodipodi:nodetypes="ccc" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="cccccccsc" - d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-18 34,0 m -29,-8 c 0,0.5 0.5286,1 1,1 l 20,0" - style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path24803" - inkscape:connector-curvature="0" /> - <path - d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-18 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-6 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z" - id="path24805" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - sodipodi:nodetypes="ccccsscccssssccc" - inkscape:connector-curvature="0" /> - <path - style="fill:none;stroke:url(#linearGradient24815);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 841.5,94.5 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,18 c 0,2.25 -1.25,3 -2.5,3" - id="path24807" - sodipodi:nodetypes="csscc" - inkscape:connector-curvature="0" /> - </g> - <g - style="display:inline;filter:url(#filter6078);enable-background:new" - id="g44334" - transform="translate(619,272.5)"> - <rect - y="73" - x="320" - height="16" - width="16" - id="rect44336" - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" /> - <g - id="g44338" - transform="translate(0,-21)"> - <g - id="g44340"> - <g - id="g44342" - transform="translate(0,21)"> - <path - style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 333.25,87 -5.25,0 -1,-1 0,-10" - id="path44344" - sodipodi:nodetypes="cccc" - inkscape:connector-curvature="0" /> - <path - style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 331.25,79.25 327,75.005631 322.75,79.25" - id="path44346" - sodipodi:nodetypes="ccc" - inkscape:connector-curvature="0" /> - </g> - <g - id="g44348" - transform="translate(0,21)"> - <path - sodipodi:nodetypes="cccc" - id="path44350" - d="m 333.25,87 -5.25,0 -1,-1 0,-10" - style="fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="ccc" - id="path44352" - d="M 331.25,79.25 327,75.005631 322.75,79.25" - style="fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - inkscape:connector-curvature="0" /> - </g> - </g> - <path - sodipodi:nodetypes="cccccc" - id="path44354" - d="m 328.5,107.5 5,0 m -7,-9 0,8.5 m -4.25,-7 4.5,-4.5" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - </g> - </g> + style="display:inline;opacity:0.6;enable-background:new" + transform="translate(-1797.0001,807.00002)" + id="g6979"> + <path + inkscape:connector-curvature="0" + id="path6975" + d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <path + id="path6977" + style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" + d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccc" /> </g> <g - transform="translate(68,247.5)" - id="g24818" - style="display:inline;enable-background:new"> + transform="translate(810,316.5)" + style="display:inline;enable-background:new" + id="g72880" /> + <g + id="g3789"> <path inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccssssccc" - style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24839);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - id="path24821" - d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z" /> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 996,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 -1.25 h -1 V 193 h -1 v -3 h 2 v -1 z" + id="path72434" /> + <rect + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + id="rect72436" + width="1" + height="5" + x="1029" + y="189" /> <path inkscape:connector-curvature="0" - id="path24823" - style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24841);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0" - sodipodi:nodetypes="cccccccccccccccccccccccccccccc" /> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 954,189 v 4 h -1 v -1 h -1 v 1 h 0.75 v 1 h 1.5 v -1 H 955 v -4 z" + id="path72438" /> <path inkscape:connector-curvature="0" - inkscape:export-ydpi="74.800003" - inkscape:export-xdpi="74.800003" - inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png" - sodipodi:nodetypes="csccsczc" - id="path24825" - d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-16 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,17 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z" - style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24843);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" /> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 999,189 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" + id="path72440" /> <path inkscape:connector-curvature="0" - d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z" - id="path24827" - style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" - sodipodi:nodetypes="ccssccc" /> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 975,189 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" + id="path72442" /> <path inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" - d="m 840.5,89 0,7.5" - style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - id="path24829" /> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 940,189 v 0.75 h -1 v 1.5 h 1 V 192 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 191 h -1 v -1 h 1.5 v -1 z" + id="path72446" /> <path inkscape:connector-curvature="0" - id="path24831" - style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - d="m 848.5,98.75 0,14.75 c 0,1.25 0.25,3 -1.25,4" - sodipodi:nodetypes="ccc" /> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 964,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + id="path72448" /> <path inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccsc" - d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-16 34,0 m -29,-10 c 0,0.5 0.5286,1 1,1 l 20,0" - style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path24833" /> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 943,189 v 4.25 h 1 V 194 h 2 v -0.75 h 1 V 189 h -1 v 4 h -2 v -4 z" + id="path72450" /> <path inkscape:connector-curvature="0" - d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-16 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-8 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z" - id="path24835" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - sodipodi:nodetypes="ccccsscccssssccc" /> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 948,189 v 5 h 1 1 v -0.5 h 1 V 192 h -0.75 v -1 H 951 v -1.25 h -1 V 189 h -1 z m 1,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" + id="path72452" /> <path inkscape:connector-curvature="0" - style="fill:none;stroke:url(#linearGradient24845);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 841.5,96.500004 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,15.999996 c 0,2.25 -1.25,3 -2.5,3" - id="path24837" - sodipodi:nodetypes="csscc" /> - </g> - <g - id="g6158"> - <g - transform="translate(164,247.5)" - id="g24847" - style="opacity:0.5"> - <path - d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z" - id="path24849" - style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24867);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" - sodipodi:nodetypes="ccccccssssccc" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="cccccccccccccccccccccccccccccc" - d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0" - style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24869);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - id="path24851" - inkscape:connector-curvature="0" /> - <path - style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24871);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" - d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-18.5 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,19.5 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z" - id="path24853" - sodipodi:nodetypes="csccsczc" - inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png" - inkscape:export-xdpi="74.800003" - inkscape:export-ydpi="74.800003" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="ccssccc" - style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" - id="path24855" - d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z" - inkscape:connector-curvature="0" /> - <path - id="path24857" - style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - d="m 840.5,89 0,4.5" - sodipodi:nodetypes="cc" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="ccc" - d="m 848.5,95.5 0,18 c 0,1.25 0.25,3 -1.25,4" - style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none" - id="path24859" - inkscape:connector-curvature="0" /> - <path - id="path24861" - style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-18 34,0 m -29,-8 c 0,0.5 0.5286,1 1,1 l 20,0" - sodipodi:nodetypes="cccccccsc" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="ccccsscccssssccc" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - id="path24863" - d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-18 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-6 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="csscc" - id="path24865" - d="m 841.5,94.5 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,18 c 0,2.25 -1.25,3 -2.5,3" - style="fill:none;stroke:url(#linearGradient24873);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - inkscape:connector-curvature="0" /> - </g> - <g - style="display:inline;filter:url(#filter6146);enable-background:new" - id="g44356" - transform="translate(647,272.55)"> - <rect - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" - id="rect44358" - width="16" - height="16" - x="341" - y="73" /> - <g - id="g44360" - transform="translate(0,-21)"> - <g - id="g44362"> - <g - id="g44364"> - <path - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 6.16153,2.34539 8.5,0 l 0.5,-0.5" - id="path44366" - sodipodi:nodetypes="cs" - inkscape:connector-curvature="0" /> - <path - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - d="m 343,108.25 0,-4.25 4.25,0" - id="path44368" - sodipodi:nodetypes="ccc" - inkscape:connector-curvature="0" /> - </g> - <g - id="g44370"> - <path - sodipodi:nodetypes="ccc" - id="path44372" - d="m 343,108.25 0,-4.25 4.25,0" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="cs" - id="path44374" - d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 6.16153,2.34539 8.5,0 l 0.5,-0.5" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - </g> - <path - style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" - d="m 344,105 0,1 0,1.5 1,0 0,-1.5 1.5,0 0,-1 -1.5,0 -1,0 z" - id="path44376" - inkscape:connector-curvature="0" /> - </g> - <g - transform="matrix(-1,0,0,-1,698,204)" - id="g44378"> - <g - id="g44380"> - <path - sodipodi:nodetypes="cs" - id="path44382" - d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 6.16153,2.34539 8.5,0 l 0.5,-0.5" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="ccc" - id="path44384" - d="m 343,108.25 0,-4.25 4.25,0" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - </g> - <g - id="g44386"> - <path - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - d="m 343,108.25 0,-4.25 4.25,0" - id="path44388" - sodipodi:nodetypes="ccc" - inkscape:connector-curvature="0" /> - <path - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 6.16153,2.34539 8.5,0 l 0.5,-0.5" - id="path44390" - sodipodi:nodetypes="cs" - inkscape:connector-curvature="0" /> - </g> - <path - id="path44392" - d="m 344,105 0,1 0,1.5 1,0 0,-1.5 1.5,0 0,-1 -1.5,0 -1,0 z" - style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="ccc" - id="path44394" - d="m 344.90625,106.59375 c 2.52573,2.51828 6.66805,2.52691 9.1875,0 l 0.5,-0.5" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44402);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - </g> - <path - sodipodi:nodetypes="ccc" - id="path44396" - d="m 350.5,99.5 4,0 0,-4" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="cccc" - id="path44398" - d="m 347.5,103.5 -4.5,0 c -0.25,0 -0.5,0.25 -0.5,0.5 l 0,4.5" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="ccc" - id="path44400" - d="m 345.59375,105.90625 c 2.07803,2.0719 5.36384,2.10325 7.53125,0.1875 L 354,105.25" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44404);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - inkscape:connector-curvature="0" /> - </g> - </g> - </g> - <g - transform="translate(4,0)" - id="g34977" - style="display:inline;enable-background:new"> - <g - style="display:inline" - id="g21853-3" - transform="translate(856,-154)" - inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <rect - ry="0" - rx="2.4004419" - y="430" - x="108" - height="48" - width="48" - id="rect21855-8" - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" /> - <g - id="g21857-6"> - <path - inkscape:connector-curvature="0" - style="display:inline;fill:url(#linearGradient21875-7-1-0-1);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - id="path21859-9" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path21861-8" - sodipodi:nodetypes="cccc" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106-9-2-9-9)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path21863-6" - d="m 115,444 12,0 -1,-11 -11,11 z" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-6-7-0-8)" /> - <path - inkscape:connector-curvature="0" - clip-path="none" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 117.5,443.75 9,-2.5 0,-6" - style="fill:none;stroke:url(#linearGradient21877-3-2-7-2);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path21865-6" - sodipodi:nodetypes="ccc" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - id="path21867-2" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106-9-2-9-9)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path21869-3" - d="m 116,443 11,1 -2,-10 -9,9 z" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-6-7-0-8)" /> - <path - inkscape:connector-curvature="0" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - id="path21871-8" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path21873-2" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.5,435 0,38.5 -30.5,0" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - </g> - </g> - <g - id="g34938" - transform="translate(63,-47)"> - <path - id="path61236" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient34959-9-2-1);fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.17893334;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - d="m 919.5,356.5067 0,-3 c 0,-1.73575 1.26424,-3 3,-3 l 5,0 c 1.73576,0 3,-1.26425 3,-3 l 0,-3.0064 2.5,0.006 c 2,0 3.5,2.5 3.5,6 0,3.5 -1.25,6 -3.5,6 -4.98134,0 -12.77318,0 -2.5,0 l 0,2.75 c 0,2.5 -2,3.24997 -5.5,3.24998 l 0,2e-5 c -3.5,0.0104 -5.5,-0.75 -5.5,-3.25 l 0,-2.7628" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cssssccsscsccsc" /> - <path - sodipodi:nodetypes="cssssccsscsccsc" - inkscape:connector-curvature="0" - d="m 930.5,344.5 0,3 c 0,1.73575 -1.26424,3 -3,3 l -5,0 c -1.73576,0 -3,1.26425 -3,3 l 0,3.0064 -2.5,-0.006 c -2,0 -3.5,-2.5 -3.5,-6 0,-3.5 1.25,-6 3.5,-6 4.98134,0 12.77318,0 2.5,0 l 0,-2.75 c 0,-2.5 2,-3.24997 5.5,-3.24998 l 0,-2e-5 c 3.5,-0.0104 5.5,0.75 5.5,3.25 l 0,2.7628" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient34961-3-6-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.17893334;marker:none;enable-background:accumulate" - id="path61233" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccscccsccccsccccc" - id="path61167" - d="m 925,338.50002 c -3.5,10e-6 -5.5,0.74998 -5.5,3.24998 l 0,2.75 5.5,0 -8,0 c -2.25,0 -3.5,2.5 -3.5,6 0,3.5 1.5,6 3.5,6 l 2.5,0.0128 0,2.9872 c 0,2 2,3.01281 5.5,3.0128 3.5,-1e-5 5.5,-1.0128 5.5,-3.0128 l 0,-3 -5.5,0 8,0 c 2,0 3.5,-2.5 3.5,-6 0,-3.5 -1.5,-6 -3.5,-6 l -2.5,0.0128 0,-2.7628 c 0,-2.5 -2,-3.26045 -5.5,-3.25 z" - style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8627451" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - id="path61169" - d="m 930.5,344.5 0,3 c 0,1.73575 -1.26424,3 -3,3 l -5,0 c -1.73576,0 -3,1.26425 -3,3 l 0,3" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.78431373;marker:none;enable-background:accumulate" /> - <circle - r="1" - cy="342" - cx="922" - id="path61220" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" /> - <circle - r="1" - cy="359" - cx="928" - id="path61222" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" /> - <g - style="opacity:0.4" - id="g61345"> - <path - style="fill:none;stroke:url(#linearGradient34963-5-9-1);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" - d="m 920.5,343.25 0,-1.5 c 0,-1.75 1.5,-2.25 4.5,-2.25 3,0 4.5,0.5 4.5,2.25 l 0,4.75" - id="path61333" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cszsc" /> - <path - style="fill:none;stroke:url(#linearGradient34965-1-5-2);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 925.5,345 0,0.25 -0.25,0.25 -8.25,0 c -1.5,0 -2.5,2 -2.5,5 0,3 1.28917,5 2.5,5 l 1.5,0" - id="path61335" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccszsc" /> - <path - style="fill:none;stroke:none" - d="m 920.75,343.5 4.5,0 0.25,0.25 0,0.5" - id="path61337" - inkscape:connector-curvature="0" /> - <path - style="fill:none;stroke:none" - d="m 918.5,355.25 0,-1.75 c 0,-2.25 1.75,-4 4,-4 l 4.5,0 c 1.75,0 2.5,-0.75 2.5,-2.5 l 0,-0.5" - id="path61339" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cssssc" /> - <circle - r="1" - cy="342" - cx="922" - transform="matrix(1.5161021,0,0,1.5161021,-475.84616,-176.50693)" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient34967-4-1-8);stroke-width:0.52766895;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate" - id="path61355" /> - </g> - <g - style="opacity:0.8;stroke:#ff0000" - transform="matrix(-1,0,0,-1,1850,701)" - id="g34104"> - <path - sodipodi:nodetypes="cszsc" - inkscape:connector-curvature="0" - id="path34106" - d="m 920.5,343.25 0,-1.5 c 0,-1.75 1.5,-2.25 4.5,-2.25 3,0 4.5,0.5 4.5,2.25 l 0,4.75" - style="fill:none;stroke:none" /> - <path - sodipodi:nodetypes="csc" - inkscape:connector-curvature="0" - id="path34108" - d="m 914.5,350.5 c 0,3 1.28917,5 2.5,5 l 1.5,0" - style="fill:none;stroke:url(#linearGradient34969-4-4-1);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> - <path - inkscape:connector-curvature="0" - id="path34110" - d="m 920.75,343.5 4.5,0 0.25,0.25 0,0.5" - style="fill:none;stroke:url(#linearGradient34971-5-0-9);stroke-linecap:round;stroke-linejoin:round" /> - <path - sodipodi:nodetypes="cssssc" - inkscape:connector-curvature="0" - id="path34113" - d="m 918.5,355.5 0,-2 c 0,-2.25 1.75,-4 4,-4 l 4.5,0 c 1.75,0 2.5,-0.75 2.5,-2.5 l 0,-0.5" - style="fill:none;stroke:url(#radialGradient34973-2-5-7);stroke-linecap:round;stroke-linejoin:round" /> - <circle - r="1" - cy="342" - cx="922" - id="path34115" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient34975-9-4-9);stroke-width:0.52766895;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate" - transform="matrix(1.5161021,0,0,1.5161021,-475.84616,-176.50693)" /> - <path - style="fill:none;stroke:none" - d="m 925.5,345 0,0.25 -0.25,0.25 -8.25,0 c -1.5,0 -2.5,2 -2.5,5" - id="path34901" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccsc" /> - </g> - </g> - </g> - <g - transform="translate(212,-8)" - id="g45475-4" - style="display:inline;enable-background:new"> - <g - style="display:inline" - id="g22242-6" - transform="translate(696,-194)" - inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <rect - ry="0" - rx="2.4004419" - y="430" - x="108" - height="48" - width="48" - id="rect22244-9" - style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" /> - <g - id="g22246-2"> - <path - inkscape:connector-curvature="0" - style="display:inline;fill:url(#linearGradient22274-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" - d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z" - id="path22249-8" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30" - style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - id="path22251-9" - sodipodi:nodetypes="cccc" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106-5)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path22253-5" - d="m 115,444 12,0 -1,-11 -11,11 z" - style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-5)" /> - <path - inkscape:connector-curvature="0" - clip-path="none" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - d="m 117.5,443.75 9,-2.5 0,-6" - style="fill:none;stroke:url(#linearGradient22276-5);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path22264-3" - sodipodi:nodetypes="ccc" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccc" - id="path22266-6" - style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - clip-path="url(#clipPath13106-5)" - inkscape:export-ydpi="90" - inkscape:export-xdpi="90" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - sodipodi:nodetypes="cccc" - id="path22268-0" - d="m 116,443 11,1 -2,-10 -9,9 z" - style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-5)" /> - <path - inkscape:connector-curvature="0" - style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" - d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z" - id="path22270-1" - sodipodi:nodetypes="cccccc" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" - id="path22272-3" - style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" - d="m 147.5,435 0,38.5 -30.5,0" - inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" /> - </g> - </g> - <g - id="g21517-6" - inkscape:label="Layer 1" - transform="matrix(0.5406242,0,0,0.5829534,814.13667,247.65542)"> - <ellipse - ry="5.3033009" - rx="15.467961" - cy="38.98439" - cx="28.019106" - transform="matrix(1.274286,0,0,1.377124,-7.569123,-16.70193)" - id="path35486-4" - style="display:inline;overflow:visible;visibility:visible;opacity:0.54857142;fill:url(#radialGradient21442-6-790);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="csssssssssscccsscccscccssccc" - d="m 16.048489,28.093447 c 0.0098,0.576682 0.196474,1.697902 0.471116,2.577425 0.581566,1.854137 1.56684,3.572658 2.939126,5.086496 1.407488,1.553118 3.138519,2.803227 5.139315,3.68976 2.105357,0.931573 4.384795,1.407488 6.750134,1.403741 2.365339,-0.005 4.644601,-0.488686 6.74896,-1.427017 2.00002,-0.895288 3.731043,-2.148391 5.13754,-3.705517 1.369207,-1.519844 2.352576,-3.241114 2.934089,-5.096258 0.294262,-0.938353 0.476921,-1.889392 0.553238,-2.845308 0.07331,-0.939306 0.04204,-1.883511 -0.09183,-2.823792 -0.259981,-1.835599 -0.896294,-3.556847 -1.872652,-5.12758 -0.895541,-1.441699 -2.047808,-2.70454 -3.417268,-3.766975 0,0 0.002,-0.002 0.002,-0.002 0,0 -13.828458,-10.6197195 -13.828458,-10.6197195 -0.01176,-0.00978 -0.02252,-0.019551 -0.03529,-0.028344 -0.909003,-0.6959264 -3.879837,-0.7738945 -4.87679,-0.075035 -1.01067,0.7057021 -1.091821,1.8092613 -0.195527,2.5482146 1.899775,1.4997633 2.656207,2.2801589 4.566507,3.7797379 0,0 -14.852491,0.167033 -14.852491,0.167033 -1.994685,0 -3.1682609,0.947915 -3.4153947,2.333683 -0.2180771,1.222836 0.7479213,2.738129 2.4800217,2.738129 2.956573,0.0039 5.942111,-0.0069 8.909215,-0.01272 0,0 -16.01999,12.453223 -16.01999,12.453223 -0.020527,0.01564 -0.041053,0.02933 -0.06158,0.04497 -1.4974197,1.148389 -1.9831951,3.059322 -1.0399808,4.268393 0.9598323,1.22959 2.9977653,1.230588 4.5147288,0.006 0,0 8.677593,-7.102098 8.677593,-7.102098 0,0 -0.12511,0.959824 -0.116333,1.535532 l 1e-6,2.6e-5 0,0 0,0 z" - id="path2482-9" - style="fill:#dd6d00;fill-rule:evenodd;stroke:#993d00;stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" /> - <ellipse - ry="10.125" - rx="11.5625" - cy="25.75" - cx="31.1875" - transform="matrix(0.8018194,0,0,0.8471126,6.257567,4.5089892)" - id="path39153-3" - style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient21444-0-352);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> - <path - inkscape:connector-curvature="0" - style="opacity:0.4857143;fill:none;stroke:url(#linearGradient21446-3-145);stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" - d="m 25.8125,6.40625 c -0.334829,4.572e-4 -0.72202,0.089606 -0.90625,0.21875 4.5e-4,0.010412 4.5e-4,0.020838 0,0.03125 -0.212626,0.1484635 -0.188235,0.1956271 -0.1875,0.1875 0.0092,0.010621 -0.0072,-4.246e-4 0.03125,0.03125 0.01962,0.00828 0.03527,0.012546 0.0625,0.03125 0.01676,0.01151 0.01357,0.014555 0.03125,0.03125 0.193748,0.1576058 4.954976,4.005164 4.954976,4.005164 0.489837,0.39864 0.677395,1.066352 0.46875,1.65625 -0.115662,0.32703 -0.422813,0.541217 -0.6875,0.59375 -0.264687,0.05253 -0.498447,0.03054 -0.71875,0.03125 -5.639658,0.05119 -16.87989,0.03851 -16.87989,0.03851 -0.4102,2.75e-4 -0.935835,0.115997 -1.34375,0.34375 -0.407915,0.227753 -0.6637862,0.523861 -0.6875002,0.90625 -0.024417,0.393728 0.098829,0.605767 0.3437502,0.78125 0.244921,0.175483 0.614978,0.25 0.875,0.25 0,0 8.8125,0 8.8125,0 0.600305,-7.28e-4 1.223895,0.311058 1.4375,0.9375 0.04676,0.137121 0.06335,0.269976 0.0625,0.40625 -8.49e-4,0.136274 -0.02214,0.268794 -0.09375,0.375 -0.143211,0.212412 -0.319507,0.298568 -0.5,0.4375 0,0 -15.7871819,12.746851 -15.856336,12.800078 C 5.0310984,30.500117 5,30.53125 5,30.53125 5.0100745,30.519077 5.000335,30.499512 5,30.5 L 4.8125,30.3125 c 0.012336,0.02165 0.014481,0.03307 0.03125,0.0625 0.063558,0.0774 0.125,0.15625 0.125,0.15625 -0.00585,0.0056 -0.031233,0.03124 -0.03125,0.03125 0,0 -0.043442,-0.09921 -0.09375,-0.1875 0.037843,0.09884 0.06253,0.218739 0.0625,0.21875 -0.4662091,0.37119 -0.7783348,0.889746 -0.875,1.28125 -0.1043319,0.422581 -0.046,0.62455 0.125,0.84375 0.2999827,0.384295 1.3975356,0.595547 2.40625,-0.21875 0,0 8.65625,-7.09375 8.65625,-7.09375 0.473718,-0.387074 1.1446,-0.458625 1.6875,-0.15625 0.544608,0.303331 0.798054,0.927572 0.71875,1.53125 0,0 -0.0626,0.908319 -0.0625,1.25 2e-6,0.0085 -1.19e-4,0.02348 0,0.03125 0.192796,2.523718 1.400736,4.762818 3.03125,6.71875 2.801818,3.089095 6.627659,4.401619 10.75,4.5625 4.113324,-0.043 7.964529,-1.606111 10.75,-4.625 2.546631,-3.125326 3.513872,-6.363859 3.15625,-9.375 C 44.891575,22.325847 43.222923,19.516566 40.4375,17.25 35.951885,13.599946 31.206991,10.168434 26.59375,6.625 26.57515,6.610386 26.56455,6.59802 26.5625,6.59375 26.43835,6.498703 26.144223,6.4057899 25.8125,6.40625 Z" - id="path21414-5" - sodipodi:nodetypes="csssssscssscsssccssscscccsccssssccscsscccssssc" /> - <path - inkscape:connector-curvature="0" - d="m 25.708956,26.064593 c 0.07649,-1.397943 0.759369,-2.631914 1.78592,-3.505519 1.010226,-0.858782 2.366788,-1.383145 3.848625,-1.383145 1.480894,0 2.837456,0.524363 3.847446,1.383145 1.027685,0.873605 1.709741,2.106651 1.787122,3.504594 0.07927,1.438713 -0.49591,2.77459 -1.504012,3.764001 -1.027686,1.007933 -2.493008,1.640678 -4.130556,1.640678 -1.63849,0 -3.103814,-0.632745 -4.131451,-1.640678 -1.00914,-0.989411 -1.58234,-2.325288 -1.503094,-3.763076 l 0,0 0,0 0,0 z" - id="path2478-8" - style="fill:#2f5b94;fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="csssscsccsscsccssssscsscccsssc" - id="path39166-5" - d="m 25.8125,6.03125 c -0.404852,5.53e-4 -2.204797,-0.059029 -2.48145,0.1349032 -0.280209,0.195652 -0.335403,0.376484 -0.34375,0.46875 -0.0083,0.092266 -0.01539,0.17648 0.1875,0.34375 0.01899,0.015735 0.04457,0.014317 0.0625,0.03125 0.124258,0.101028 4.748869,4.1248618 4.748869,4.1248618 0.373658,0.304091 0.504393,0.795817 0.34375,1.25 -0.160635,0.454191 -0.580748,0.373449 -1.0625,0.375 -5.634142,0.05114 -15.087371,-0.129601 -15.087371,-0.129601 -0.952967,6.38e-4 -2.339958,0.524782 -2.4062504,1.59375 -0.063562,1.024947 0.9247974,1.4375 1.5937504,1.4375 0,-1e-6 8.8125,0 8.8125,0 0.488364,-5.92e-4 0.936141,0.225277 1.09375,0.6875 0.157609,0.462231 -0.01926,0.514621 -0.40625,0.8125 0,0 -16.086298,13.088586 -16.086298,13.088586 -0.00142,0.0014 -0.029829,-0.0014 -0.03125,0 -0.064037,0.04879 -0.054226,0.04875 -0.03125,0.03125 -0.5536758,0.424619 -0.9087886,1.004019 -1.03125,1.5 -0.1224536,0.495981 -0.04661,0.856152 0.1875,1.15625 0.4788333,0.613413 1.777612,0.754857 2.90625,-0.15625 1e-7,10e-7 8.65625,-7.09375 8.65625,-7.09375 0.361955,-0.295753 0.872897,-0.352437 1.28125,-0.125 0.408345,0.227436 0.623381,0.692814 0.5625,1.15625 0,-1e-6 -0.0997,0.953636 -0.09375,1.34375 0.09498,1.301756 0.451616,2.521825 0.989039,3.664234 C 20.799917,36.321089 27.770982,19.392853 44.1875,21.03125 43.339652,19.54368 42.151282,18.185293 40.65625,16.96875 36.159865,13.309932 31.42016,9.882897 26.8125,6.34375 26.805335,6.338858 26.788292,6.317553 26.78125,6.3125 26.570707,6.151312 26.216591,6.030689 25.8125,6.03125 Z" - style="opacity:0.51999996;fill:url(#radialGradient21448-8-143);fill-opacity:1;fill-rule:evenodd;stroke:none" /> - </g> + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 961,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 h -2 v -3 h 2 v -1 z" + id="path72454" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 956,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" + id="path72456" /> + <path + inkscape:connector-curvature="0" + id="path72458" + d="m 1019,189 v 5 h 1 2 v -1 h -2 v -4 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" /> + <path + id="path72460" + d="m 970,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 981,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + id="path72462" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 985,189 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" + id="path72464" /> + <path + id="path72466" + d="m 989,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72468" + d="m 1004,189 v 4.25 h 1 V 194 h 2 v -0.75 h 1 V 189 h -1 v 4 h -2 v -4 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72470" + d="m 1012,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 -1.25 h -1 V 193 h -1 v -3 h 2 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1015,189 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 189 h -1 z m 1,1 h 1 v 1 h -1 z" + id="path72472" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1025,189 v 5 h 1 2 v -1 h -2 v -4 z" + id="path72474" + inkscape:connector-curvature="0" /> + <path + id="path72476" + d="m 1032,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 h -2 v -3 h 2 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1035,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" + id="path72478" /> + <path + id="path72480" + d="m 1039,189 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72482" + d="m 1045,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 h -2 v -3 h 2 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72484" + d="m 1048,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1052.75,193 v 1 H 1052 v 1 h 1 v -1 h 1 v -1 z" + id="path72486" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 882,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + id="path32008-7" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 886,189 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" + id="path32010-4" + inkscape:connector-curvature="0" /> + <rect + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + id="rect32012-0" + width="1" + height="5" + x="890" + y="189" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 893,189 v 0.75 h -1 v 1.5 h 1 V 192 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 191 h -1 v -1 h 1.5 v -1 z" + id="path32015-9" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 899,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 h -2 v -3 h 2 v -1 z" + id="path32017-4" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 907,189 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" + id="path32019-8" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 903,189 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" + id="path32021-8" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 912,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + id="path32023-2" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 916,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" + id="path32026-4" + inkscape:connector-curvature="0" /> + <path + id="path32029-5" + d="m 920,189 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path32031-5" + d="m 925,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <rect + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + id="rect32033-1" + width="1" + height="5" + x="931" + y="189" /> + <path + id="path32035-7" + d="m 934,189 v 0.75 h -1 v 1.5 h 1 V 192 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 191 h -1 v -1 h 1.5 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 888,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" + id="path72562" /> + <rect + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + id="rect72564" + width="1" + height="5" + x="892" + y="197" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 882,197 v 3.25 h 1 V 202 h 1 v -1.75 h 1 V 202 h 1 v -1.75 h 1 V 197 h -1 v 3 h -1 v -2 h -1 v 2 h -1 v -3 z" + id="path72576" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 940,197 v 2.25 h 1 V 202 h 1 v -2.75 h 1 V 197 h -1 v 2 h -1 v -2 z" + id="path72578" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 904.75,197 v 1 H 904 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" + id="path72580" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 895,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" + id="path72582" /> + <path + id="path72588" + d="m 898,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72590" + d="m 909,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 913,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" + id="path72592" /> + <path + id="path72594" + d="m 917,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 921,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v -1 z m 1,0 h 1 v 3 h 1 v -5 h -1 v 1 h -1 z" + id="path72596" /> + <path + id="path72598" + d="m 927,197 v 5 h 1 v -2 h 1.25 v -1 H 930 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72600" + d="m 931.75,197 v 1 H 931 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72602" + d="m 935,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <rect + y="197" + x="946" + height="5" + width="1" + id="rect72604" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" /> + <path + id="path72606" + d="m 948,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72608" + d="m 954.75,197 v 1 H 954 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 958,197 v 5 h 1 2 v -1 h -2 v -4 z" + id="path72610" + inkscape:connector-curvature="0" /> + <path + id="path72612" + d="m 963,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72614" + d="m 967,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + id="path72616" + d="m 973,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <rect + y="197" + x="984" + height="5" + width="1" + id="rect72618" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" /> + <path + id="path72620" + d="m 978,197 v 3.25 h 1 V 202 h 1 v -1.75 h 1 V 202 h 1 v -1.75 h 1 V 197 h -1 v 3 h -1 v -2 h -1 v 2 h -1 v -3 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 990,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" + id="path72622" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 986,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + id="path72624" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 997,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" + id="path32207-9-7" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1001,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" + id="path32209-6-7" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1005,197 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" + id="path32211-3-7" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1009,197 v 2.25 h 1 V 202 h 1 v -2.75 h 1 V 197 h -1 v 2 h -1 v -2 z" + id="path32213-7-3" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1013,197 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" + id="path32216-8-3" + inkscape:connector-curvature="0" /> + <rect + y="197" + x="1017" + height="5" + width="1" + id="rect32218-8-5" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1020,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" + id="path32220-2-9" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1023,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" + id="path32222-9-9" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1027,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" + id="path32224-1-8" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1035,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" + id="path72678" /> + <path + inkscape:connector-curvature="0" + id="path72680" + d="m 1045,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" /> + <rect + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + id="rect72682" + width="1" + height="5" + x="1033" + y="197" /> + <rect + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + id="rect72684" + width="1" + height="1" + x="1049" + y="201" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" + d="m 1040,197 v 5 h 1 v -2 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" + id="path72686" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 1028.75,209 v 1 H 1028 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" + id="path32244-2" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 1032,209 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v -1 z m 1,0 h 1 v 3 h 1 v -5 h -1 v 1 h -1 z" + id="path32246-0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 1038,209 v 5 h 1 1 v -0.5 h 1 V 212 h -0.75 v -1 h 0.75 v -1.25 h -1 V 209 h -1 z m 1,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" + id="path32248-9" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 1042,209 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 h 0.75 v -1.25 h -1 V 209 h -1 z m 1,1 h 1 v 1 h -1 z" + id="path32250-7" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 1047,209 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" + id="path32252-3" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 1051,209 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z" + id="path32254-7" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 997.75,209 v 1 H 997 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" + id="path32256-2" /> + <path + inkscape:connector-curvature="0" + id="path32258-6" + d="m 1001,209 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> + <path + inkscape:connector-curvature="0" + id="path32260-0" + d="m 1006,209 v 1 3 1 h 2 v -0.75 h 1 v -3.5 h -1 V 209 Z m 1,1 h 1 v 3 h -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 1010,209 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 h 0.75 v -1.25 h -1 V 209 h -1 z m 1,1 h 1 v 1 h -1 z" + id="path32262-1" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 1014,209 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z" + id="path32264-6" /> + <path + inkscape:connector-curvature="0" + id="path32266-5" + d="m 1018,209 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> + <path + inkscape:connector-curvature="0" + id="path32268-7" + d="m 1024,209 v 4 h -1 v -1 h -1 v 1 h 0.75 v 1 h 1.5 v -1 h 0.75 v -4 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> + <rect + y="207" + x="1052" + height="1" + width="1" + id="rect32270-5" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 969.96875,208 v 0.75 h -1 V 209 h -0.25 v 1 h -0.75 v 3 h 0.75 v 1 h 0.25 v 0.25 h 1 V 215 h 3 v -0.75 h 1 V 214 h 0.25 v -1 h 0.75 v -3 h -0.75 v -1 h -0.25 v -0.25 h -1 V 208 Z m 0,1 h 3 v 1 h 1 v 3 h -1 v 1 h -3 v -1 h -1 v -3 h 1 z" + id="path32272-1" + sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc" /> + <path + inkscape:connector-curvature="0" + id="path32274-2" + d="m 970.96875,210 v 0.75 h -1 v 1.5 h 1 V 213 h 1.25 v -1 h -1.25 v -1 h 1.25 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + sodipodi:nodetypes="ccccccccccccc" /> + <path + id="path72688" + d="m 981.71875,209 v 1 h -0.75 v 3 h 0.75 v 1 h 1.5 v -1 h 0.75 v -3 h -0.75 v -1 z m 0.25,1 h 1 v 3 h -1 z m 0.25,1 v 1 h 0.5 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + inkscape:connector-curvature="0" /> + <path + id="path72690" + d="m 985.96875,209 v 1 h -1 v 1 h 1 v 3 h 1 v -5 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 976.96875,209 v 1 h 2 v 1 h -1 v 1 h 1 v -0.75 h 1 v -1.5 h -1 V 209 Z m 1,3 h -1 v 1 1 h 3 v -1 h -2 z" + id="path72694" /> + <path + id="path72696" + d="m 992.96875,210 v 1 h 1 v -1 z m -0.21875,3 v 1 H 992 v 1 h 1 v -1 h 1 v -1 z" + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + inkscape:connector-curvature="0" /> + <path + style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" + d="m 988.75,209 v 1 h -0.5 v 1 h 0.5 v 1 H 988 v 1 h 0.75 v 1 h 1.5 v -1 H 991 v -1 h -0.75 v -1 h 0.5 v -1 h -0.5 v -1 z m 0.25,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" + id="path19551-18-1" + inkscape:connector-curvature="0" /> </g> - <g - transform="translate(0,12)" - id="g46790" /> - <g - id="g46890" /> - <path - sodipodi:nodetypes="cc" - id="path34332" - style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" - d="" - inkscape:connector-curvature="0" /> </g> </svg> diff --git a/release/datafiles/userdef/userdef_default_theme.c b/release/datafiles/userdef/userdef_default_theme.c index eae3f0bf5be..b7b9c1aa9b8 100644 --- a/release/datafiles/userdef/userdef_default_theme.c +++ b/release/datafiles/userdef/userdef_default_theme.c @@ -24,7 +24,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x585858ff), .inner_sel = RGBA(0x5680c2e6), .item = RGBA(0x3e3e3eff), - .text = RGBA(0xebebebff), + .text = RGBA(0xd9d9d9ff), .text_sel = RGBA(0xffffffff), .shadedown = -5, .roundness = 0.2f, @@ -34,17 +34,17 @@ const bTheme U_theme_default = { .inner = RGBA(0x585858ff), .inner_sel = RGBA(0x5680c2ff), .item = RGBA(0xffffffff), - .text = RGBA(0xf2f2f2ff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .shadedown = -5, .roundness = 0.2f, }, .wcol_toolbar_item = { .outline = RGBA(0x373737ff), - .inner = RGBA(0x585858ff), + .inner = RGBA(0x313131ff), .inner_sel = RGBA(0x5680c2ff), .item = RGBA(0xffffff8f), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .roundness = 0.2f, }, @@ -53,7 +53,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x1f1f1fff), .inner_sel = RGBA(0x808080ff), .item = RGBA(0x333333ff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .shaded = 1, .shadetop = -3, @@ -64,7 +64,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x595959ff), .inner_sel = RGBA(0x597cb3e6), .item = RGBA(0xffffffff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .shadetop = 5, .shadedown = -5, @@ -75,7 +75,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x666666ff), .inner_sel = RGBA(0x5680c2e6), .item = RGBA(0xffffffff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .shadedown = -15, .roundness = 0.2f, @@ -85,7 +85,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x595959ff), .inner_sel = RGBA(0x5680c2e6), .item = RGBA(0x191919ff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .roundness = 0.2f, }, @@ -94,7 +94,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x595959ff), .inner_sel = RGBA(0xb3b3b366), .item = RGBA(0x333333ff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .roundness = 0.2f, }, @@ -103,18 +103,18 @@ const bTheme U_theme_default = { .inner = RGBA(0x595959ff), .inner_sel = RGBA(0x333333ff), .item = RGBA(0x5680c2e6), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .shaded = 1, .shadetop = -4, .roundness = 0.2f, }, .wcol_tab = { - .outline = RGBA(0x2d2d2dff), + .outline = RGBA(0x202020ff), .inner = RGBA(0x2b2b2bff), .inner_sel = RGBA(0x424242ff), .item = RGBA(0x2d2d2dff), - .text = RGBA(0xa6a6a6ff), + .text = RGBA(0x989898ff), .text_sel = RGBA(0xffffffff), .roundness = 0.2f, }, @@ -123,7 +123,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x2c2c2cff), .inner_sel = RGBA(0x696e76ff), .item = RGBA(0xe6e6e6ff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xd9d9d9ff), .text_sel = RGBA(0xffffffff), .shadetop = 10, .shadedown = -10, @@ -131,10 +131,10 @@ const bTheme U_theme_default = { }, .wcol_pulldown = { .outline = RGBA(0x4d4d4dff), - .inner = RGBA(0x2e2e2e99), + .inner = RGBA(0x2e2e2ecc), .inner_sel = RGBA(0x597cb3ff), .item = RGBA(0x727272ff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xd9d9d9ff), .text_sel = RGBA(0xffffffff), .shadetop = 25, .shadedown = -20, @@ -145,7 +145,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x1f1f1fef), .inner_sel = RGBA(0x585858ff), .item = RGBA(0x727272ff), - .text = RGBA(0xb3b3b3ff), + .text = RGBA(0xa5a5a5ff), .text_sel = RGBA(0xffffffff), .shadetop = 25, .shadedown = -20, @@ -154,7 +154,7 @@ const bTheme U_theme_default = { .wcol_menu_item = { .inner_sel = RGBA(0x597cb3e6), .item = RGBA(0xffffff8f), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .shadetop = 38, .roundness = 0.2f, @@ -164,7 +164,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x19191aef), .inner_sel = RGBA(0x19191aef), .item = RGBA(0x19191aef), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .shadetop = 25, .shadedown = -20, @@ -175,7 +175,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x00000033), .inner_sel = RGBA(0x696e76ff), .item = RGBA(0x191919ff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .roundness = 0.2f, }, @@ -184,7 +184,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x67676700), .inner_sel = RGBA(0xb3b3b3ff), .item = RGBA(0x676767ff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .shadetop = 5, .shadedown = -5, @@ -195,7 +195,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x2c2c2cff), .inner_sel = RGBA(0x5680c2ff), .item = RGBA(0x5680c2ff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .roundness = 0.2f, }, @@ -204,7 +204,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x2d2d2d00), .inner_sel = RGBA(0x696e76ff), .item = RGBA(0xb3b3b3ff), - .text = RGBA(0xe1e1e1ff), + .text = RGBA(0xe6e6e6ff), .text_sel = RGBA(0xffffffff), .roundness = 0.2f, }, @@ -213,7 +213,7 @@ const bTheme U_theme_default = { .inner = RGBA(0x212121ef), .inner_sel = RGBA(0x597cb3ff), .item = RGBA(0x585858ff), - .text = RGBA(0xeeeeeeff), + .text = RGBA(0xd9d9d9ff), .text_sel = RGBA(0xffffffff), .shadetop = 10, .shadedown = -10, @@ -253,7 +253,7 @@ const bTheme U_theme_default = { .tbuts = { .back = RGBA(0x42424200), .title = RGBA(0xd4d4d4ff), - .text = RGBA(0xe5e5e5ff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -278,7 +278,7 @@ const bTheme U_theme_default = { }, .tv3d = { .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x42424200), .header_text = RGBA(0xeeeeeeff), @@ -300,7 +300,7 @@ const bTheme U_theme_default = { .gradient = RGBA(0x39393900), .high_gradient = RGBA(0x393939ff), }, - .grid = RGBA(0x232323ff), + .grid = RGBA(0xa7a7a733), .wire = RGBA(0x000000ff), .wire_edit = RGBA(0x111111ff), .select = RGBA(0xed5700ff), @@ -369,7 +369,7 @@ const bTheme U_theme_default = { .tfile = { .back = RGBA(0x35353500), .title = RGBA(0xffffffff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x2e2e2eff), .header_text = RGBA(0xeeeeeeff), @@ -395,7 +395,7 @@ const bTheme U_theme_default = { .tipo = { .back = RGBA(0x42424200), .title = RGBA(0xffffffff), - .text = RGBA(0xffffffff), + .text = RGBA(0x000000ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x2e2e2eff), .header_text = RGBA(0xeeeeeeff), @@ -446,7 +446,7 @@ const bTheme U_theme_default = { .tinfo = { .back = RGBA(0x42424200), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -480,7 +480,7 @@ const bTheme U_theme_default = { .tact = { .back = RGBA(0x42424200), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0x000000ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -535,11 +535,11 @@ const bTheme U_theme_default = { .anim_preview_range = RGBA(0xa14d0066), }, .tnla = { - .back = RGBA(0x35353500), + .back = RGBA(0x42424200), .title = RGBA(0xffffffff), - .text = RGBA(0xffffffff), + .text = RGBA(0x000000ff), .text_hi = RGBA(0xffffffff), - .header = RGBA(0x212121ff), + .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), .header_text_hi = RGBA(0xffffffff), .tab_active = RGBA(0x4b4b4bff), @@ -550,9 +550,9 @@ const bTheme U_theme_default = { .button_title = RGBA(0xffffffff), .button_text = RGBA(0xe5e5e5ff), .button_text_hi = RGBA(0xffffffff), - .list = RGBA(0x2e2e2eff), + .list = RGBA(0x333333ff), .list_title = RGBA(0xffffffff), - .list_text = RGBA(0xccccccff), + .list_text = RGBA(0xb8b8b8ff), .list_text_hi = RGBA(0xccccccff), .panelcolors = { .header = RGBA(0x424242cc), @@ -560,7 +560,7 @@ const bTheme U_theme_default = { .sub_back = RGBA(0x0000003e), }, .shade1 = RGBA(0x96969600), - .grid = RGBA(0x5e5e5eff), + .grid = RGBA(0x2a2a2aff), .strip = RGBA(0x0c0a0a80), .strip_select = RGBA(0xff8c00ff), .cframe = RGBA(0x5680c2ff), @@ -587,7 +587,7 @@ const bTheme U_theme_default = { .tseq = { .back = RGBA(0x42424200), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0x000000ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -629,7 +629,7 @@ const bTheme U_theme_default = { .tima = { .back = RGBA(0x44444400), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -683,7 +683,7 @@ const bTheme U_theme_default = { .text = { .back = RGBA(0x30303000), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x42424200), .header_text = RGBA(0xeeeeeeff), @@ -751,7 +751,7 @@ const bTheme U_theme_default = { .tnode = { .back = RGBA(0x23232300), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -806,7 +806,7 @@ const bTheme U_theme_default = { .tuserpref = { .back = RGBA(0x42424200), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -831,7 +831,7 @@ const bTheme U_theme_default = { .tconsole = { .back = RGBA(0x30303000), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -862,7 +862,7 @@ const bTheme U_theme_default = { .tclip = { .back = RGBA(0x42424200), .title = RGBA(0xeeeeeeff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x424242ff), .header_text = RGBA(0xeeeeeeff), @@ -907,7 +907,7 @@ const bTheme U_theme_default = { .ttopbar = { .back = RGBA(0x42424200), .title = RGBA(0xffffffff), - .text = RGBA(0xffffffff), + .text = RGBA(0xe6e6e6ff), .text_hi = RGBA(0xffffffff), .header = RGBA(0x232323ff), .header_text = RGBA(0xeeeeeeff), diff --git a/release/scripts/addons b/release/scripts/addons -Subproject c2aef4a98f6cabef9a6d38a33035f02cf8233dd +Subproject ad39a4b8961e2afb852852e2e3057bc3a770d2e diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib -Subproject 5c4210d5b78c61137c5f32e7deb7561177ac089 +Subproject ee92205e9687eabb0ef91d8c437014ac720126e diff --git a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py index fada1255e8b..f22675b481f 100644 --- a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py +++ b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py @@ -437,8 +437,8 @@ def dump_rna_messages(msgs, reports, settings, verbose=False): reports, check_ctxt_rna, settings) # And parse keymaps! - from bpy_extras.keyconfig_utils import km_hierarchy - walk_keymap_hierarchy(km_hierarchy(), "KM_HIERARCHY") + from bl_keymap_utils import keymap_hierarchy + walk_keymap_hierarchy(keymap_hierarchy.generate(), "KM_HIERARCHY") ##### Python source code ##### diff --git a/release/scripts/modules/bl_i18n_utils/settings.py b/release/scripts/modules/bl_i18n_utils/settings.py index 150c2c36623..230c351d80c 100644 --- a/release/scripts/modules/bl_i18n_utils/settings.py +++ b/release/scripts/modules/bl_i18n_utils/settings.py @@ -44,7 +44,7 @@ LANGUAGES_CATEGORIES = ( ) LANGUAGES = ( # ID, UI english label, ISO code. - (0, "Default (Default)", "DEFAULT"), + (0, "Automatic (Automatic)", "DEFAULT"), (1, "English (English)", "en_US"), (2, "Japanese (日本語)", "ja_JP"), (3, "Dutch (Nederlandse taal)", "nl_NL"), diff --git a/release/scripts/modules/bl_keymap_utils/__init__.py b/release/scripts/modules/bl_keymap_utils/__init__.py new file mode 100644 index 00000000000..1c4a64081f8 --- /dev/null +++ b/release/scripts/modules/bl_keymap_utils/__init__.py @@ -0,0 +1,25 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8 compliant> + +__all__ = ( + "io", + "keymap_from_toolbar", + "keymap_hierarchy", +) diff --git a/release/scripts/modules/bl_keymap_utils/io.py b/release/scripts/modules/bl_keymap_utils/io.py new file mode 100644 index 00000000000..7135d4bf7bd --- /dev/null +++ b/release/scripts/modules/bl_keymap_utils/io.py @@ -0,0 +1,278 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8 compliant> + +# ----------------------------------------------------------------------------- +# Export Functions + +__all__ = ( + "keyconfig_export_as_data", + "keyconfig_import_from_data", + "keyconfig_init_from_data", + "keyconfig_merge", + "keymap_init_from_data", +) + + +def indent(levels): + return levels * " " + + +def round_float_32(f): + from struct import pack, unpack + return unpack("f", pack("f", f))[0] + + +def repr_f32(f): + f_round = round_float_32(f) + f_str = repr(f) + f_str_frac = f_str.partition(".")[2] + if not f_str_frac: + return f_str + for i in range(1, len(f_str_frac)): + f_test = round(f, i) + f_test_round = round_float_32(f_test) + if f_test_round == f_round: + return "%.*f" % (i, f_test) + return f_str + + +def kmi_args_as_data(kmi): + s = [ + f"\"type\": '{kmi.type}'", + f"\"value\": '{kmi.value}'" + ] + + if kmi.any: + s.append("\"any\": True") + else: + if kmi.shift: + s.append("\"shift\": True") + if kmi.ctrl: + s.append("\"ctrl\": True") + if kmi.alt: + s.append("\"alt\": True") + if kmi.oskey: + s.append("\"oskey\": True") + if kmi.key_modifier and kmi.key_modifier != 'NONE': + s.append(f"\"key_modifier\": '{kmi.key_modifier}'") + + return "{" + ", ".join(s) + "}" + + +def _kmi_properties_to_lines_recursive(level, properties, lines): + from bpy.types import OperatorProperties + + def string_value(value): + if isinstance(value, (str, bool, int)): + return repr(value) + elif isinstance(value, float): + return repr_f32(value) + elif getattr(value, '__len__', False): + return repr(tuple(value)) + raise Exception(f"Export key configuration: can't write {value!r}") + + for pname in properties.bl_rna.properties.keys(): + if pname != "rna_type": + value = getattr(properties, pname) + if isinstance(value, OperatorProperties): + lines_test = [] + _kmi_properties_to_lines_recursive(level + 2, value, lines_test) + if lines_test: + lines.append(f"(") + lines.append(f"\"{pname}\",\n") + lines.append(f"{indent(level + 3)}" "[") + lines.extend(lines_test) + lines.append("],\n") + lines.append(f"{indent(level + 3)}" "),\n" f"{indent(level + 2)}") + del lines_test + elif properties.is_property_set(pname): + value = string_value(value) + lines.append((f"(\"{pname}\", {value:s}),\n" f"{indent(level + 2)}")) + + +def _kmi_properties_to_lines(level, kmi_props, lines): + if kmi_props is None: + return + + lines_test = [f"\"properties\":\n" f"{indent(level + 1)}" "["] + _kmi_properties_to_lines_recursive(level, kmi_props, lines_test) + if len(lines_test) > 1: + lines_test.append("],\n") + lines.extend(lines_test) + + +def _kmi_attrs_or_none(level, kmi): + lines = [] + _kmi_properties_to_lines(level + 1, kmi.properties, lines) + if kmi.active is False: + lines.append(f"{indent(level)}\"active\":" "False,\n") + if not lines: + return None + return "".join(lines) + + +def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False): + # Alternate foramt + + # Generate a list of keymaps to export: + # + # First add all user_modified keymaps (found in keyconfigs.user.keymaps list), + # then add all remaining keymaps from the currently active custom keyconfig. + # + # This will create a final list of keymaps that can be used as a "diff" against + # the default blender keyconfig, recreating the current setup from a fresh blender + # without needing to export keymaps which haven't been edited. + + class FakeKeyConfig: + keymaps = [] + edited_kc = FakeKeyConfig() + for km in wm.keyconfigs.user.keymaps: + if all_keymaps or km.is_user_modified: + edited_kc.keymaps.append(km) + # merge edited keymaps with non-default keyconfig, if it exists + if kc != wm.keyconfigs.default: + export_keymaps = keyconfig_merge(edited_kc, kc) + else: + export_keymaps = keyconfig_merge(edited_kc, edited_kc) + + with open(filepath, "w") as fh: + fw = fh.write + fw("keyconfig_data = \\\n[") + + for km, kc_x in export_keymaps: + km = km.active() + fw("(") + fw(f"\"{km.name:s}\",\n") + fw(f"{indent(2)}" "{") + fw(f"\"space_type\": '{km.space_type:s}'") + fw(f", \"region_type\": '{km.region_type:s}'") + # We can detect from the kind of items. + if km.is_modal: + fw(", \"modal\": True") + fw("},\n") + fw(f"{indent(2)}" "{") + is_modal = km.is_modal + fw(f"\"items\":\n") + fw(f"{indent(3)}[") + for kmi in km.keymap_items: + if is_modal: + kmi_id = kmi.propvalue + else: + kmi_id = kmi.idname + fw(f"(") + kmi_args = kmi_args_as_data(kmi) + kmi_data = _kmi_attrs_or_none(4, kmi) + fw(f"\"{kmi_id:s}\"") + if kmi_data is None: + fw(f", ") + else: + fw(",\n" f"{indent(5)}") + + fw(kmi_args) + if kmi_data is None: + fw(", None),\n") + else: + fw(",\n") + fw(f"{indent(5)}" "{") + fw(kmi_data) + fw(f"{indent(6)}") + fw("},\n" f"{indent(5)}") + fw("),\n") + fw(f"{indent(4)}") + fw("],\n" f"{indent(3)}") + fw("},\n" f"{indent(2)}") + fw("),\n" f"{indent(1)}") + + fw("]\n") + fw("\n\n") + fw("if __name__ == \"__main__\":\n") + fw(" import os\n") + fw(" from bl_keymap_utils.io import keyconfig_import_from_data\n") + fw(" keyconfig_import_from_data(os.path.splitext(os.path.basename(__file__))[0], keyconfig_data)\n") + + +# ----------------------------------------------------------------------------- +# Import Functions + +def _kmi_props_setattr(kmi_props, attr, value): + if type(value) is list: + kmi_subprop = getattr(kmi_props, attr) + for subattr, subvalue in value: + _kmi_props_setattr(kmi_subprop, subattr, subvalue) + return + + try: + setattr(kmi_props, attr, value) + except AttributeError: + print(f"Warning: property '{attr}' not found in keymap item '{kmi_props.__class__.__name__}'") + except Exception as ex: + print(f"Warning: {ex!r}") + + +def keymap_init_from_data(km, km_items, is_modal=False): + new_fn = getattr(km.keymap_items, "new_modal" if is_modal else "new") + for (kmi_idname, kmi_args, kmi_data) in km_items: + kmi = new_fn(kmi_idname, **kmi_args) + if kmi_data is not None: + if not kmi_data.get("active", True): + kmi.active = False + kmi_props_data = kmi_data.get("properties", None) + if kmi_props_data is not None: + kmi_props = kmi.properties + for attr, value in kmi_props_data: + _kmi_props_setattr(kmi_props, attr, value) + + +def keyconfig_init_from_data(kc, keyconfig_data): + # Load data in the format defined above. + # + # Runs at load time, keep this fast! + for (km_name, km_args, km_content) in keyconfig_data: + km = kc.keymaps.new(km_name, **km_args) + keymap_init_from_data(km, km_content["items"], is_modal=km_args.get("modal", False)) + + +def keyconfig_import_from_data(name, keyconfig_data): + # Load data in the format defined above. + # + # Runs at load time, keep this fast! + + import bpy + wm = bpy.context.window_manager + kc = wm.keyconfigs.new(name) + keyconfig_init_from_data(kc, keyconfig_data) + return kc + + +# ----------------------------------------------------------------------------- +# Utility Functions + +def keyconfig_merge(kc1, kc2): + """ note: kc1 takes priority over kc2 + """ + kc1_names = {km.name for km in kc1.keymaps} + merged_keymaps = [(km, kc1) for km in kc1.keymaps] + if kc1 != kc2: + merged_keymaps.extend( + (km, kc2) + for km in kc2.keymaps + if km.name not in kc1_names + ) + return merged_keymaps diff --git a/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py new file mode 100644 index 00000000000..3d861763ad6 --- /dev/null +++ b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py @@ -0,0 +1,394 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8 compliant> + +# Dynamically create a keymap which is used by the popup toolbar +# for accelerator key access. + +__all__ = ( + "generate", +) + +def generate(context, space_type): + """ + Keymap for popup toolbar, currently generated each time. + """ + from bl_ui.space_toolsystem_common import ToolSelectPanelHelper + + def modifier_keywords_from_item(kmi): + kw = {} + for (attr, default) in ( + ("any", False), + ("shift", False), + ("ctrl", False), + ("alt", False), + ("oskey", False), + ("key_modifier", 'NONE'), + ): + val = getattr(kmi, attr) + if val != default: + kw[attr] = val + return kw + + def dict_as_tuple(d): + return tuple((k, v) for (k, v) in sorted(d.items())) + + tool_blacklist = set() + + use_simple_keymap = False + + # Press the toolbar popup key again to set the default tool, + # this is useful because the select box tool is useful as a way + # to 'drop' currently active tools (it's basically a 'none' tool). + # so this allows us to quickly go back to a state that allows + # a shortcut based workflow (before the tool system was added). + use_tap_reset = True + # TODO: support other tools for modes which don't use this tool. + tap_reset_tool = "Cursor" + # Check the tool is available in the current context. + if ToolSelectPanelHelper._tool_get_by_name(context, space_type, tap_reset_tool)[1] is None: + use_tap_reset = False + + from bl_operators.wm import use_toolbar_release_hack + + # Pie-menu style release to activate. + use_release_confirm = True + + # Generate items when no keys are mapped. + use_auto_keymap_alpha = False # Map manially in the default keymap + use_auto_keymap_num = True + + # Temporary, only create so we can pass 'properties' to find_item_from_operator. + use_hack_properties = True + + km_name = "Toolbar Popup" + wm = context.window_manager + keyconf = wm.keyconfigs.active + keymap = keyconf.keymaps.get(km_name) + if keymap is None: + keymap = keyconf.keymaps.new(km_name, space_type='EMPTY', region_type='TEMPORARY', tool=True) + + kmi_unique_args = set() + + def kmi_unique_or_pass(kmi_args): + kmi_unique_len = len(kmi_unique_args) + kmi_unique_args.add(dict_as_tuple(kmi_args)) + return kmi_unique_len != len(kmi_unique_args) + + + cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type) + + if use_hack_properties: + kmi_hack = keymap.keymap_items.new("wm.tool_set_by_name", 'NONE', 'PRESS') + kmi_hack_properties = kmi_hack.properties + kmi_hack.active = False + + kmi_hack_brush_select = keymap.keymap_items.new("paint.brush_select", 'NONE', 'PRESS') + kmi_hack_brush_select_properties = kmi_hack_brush_select.properties + kmi_hack_brush_select.active = False + + if use_release_confirm or use_tap_reset: + kmi_toolbar = wm.keyconfigs.find_item_from_operator(idname="wm.toolbar")[1] + kmi_toolbar_type = None if not kmi_toolbar else kmi_toolbar.type + if use_tap_reset and kmi_toolbar_type is not None: + kmi_toolbar_args_type_only = {"type": kmi_toolbar_type} + kmi_toolbar_args = {**kmi_toolbar_args_type_only, **modifier_keywords_from_item(kmi_toolbar)} + else: + use_tap_reset = False + del kmi_toolbar + + if use_tap_reset: + kmi_found = None + if use_hack_properties: + # First check for direct assignment, if this tool already has a key, no need to add a new one. + kmi_hack_properties.name = tap_reset_tool + kmi_found = wm.keyconfigs.find_item_from_operator( + idname="wm.tool_set_by_name", + context='INVOKE_REGION_WIN', + # properties={"name": item.text}, + properties=kmi_hack_properties, + )[1] + if kmi_found: + use_tap_reset = False + del kmi_found + + if use_tap_reset: + use_tap_reset = kmi_unique_or_pass(kmi_toolbar_args) + + if use_tap_reset: + tool_blacklist.add(tap_reset_tool) + + items_all = [ + # 0: tool + # 1: keymap item (direct access) + # 2: keymap item (newly calculated for toolbar) + [item, None, None] + for item in ToolSelectPanelHelper._tools_flatten(cls.tools_from_context(context)) + if item is not None + if item.text not in tool_blacklist + ] + + if use_simple_keymap: + # Simply assign a key from A-Z. + for i, (item, _, _) in enumerate(items_all): + key = chr(ord('A') + i) + kmi = keymap.keymap_items.new("wm.tool_set_by_name", key, 'PRESS') + kmi.properties.name = item.text + else: + for item_container in items_all: + item = item_container[0] + # Only check the first item in the tools key-map (a little arbitrary). + if use_hack_properties: + # First check for direct assignment. + kmi_hack_properties.name = item.text + kmi_found = wm.keyconfigs.find_item_from_operator( + idname="wm.tool_set_by_name", + context='INVOKE_REGION_WIN', + # properties={"name": item.text}, + properties=kmi_hack_properties, + )[1] + + if kmi_found is None: + if item.data_block: + # PAINT_OT_brush_select + mode = context.active_object.mode + # See: BKE_paint_get_tool_prop_id_from_paintmode + attr = { + 'SCULPT': "sculpt_tool", + 'VERTEX_PAINT': "vertex_tool", + 'WEIGHT_PAINT': "weight_tool", + 'TEXTURE_PAINT': "image_tool", + 'GPENCIL_PAINT': "gpencil_tool", + }.get(mode, None) + if attr is not None: + setattr(kmi_hack_brush_select_properties, attr, item.data_block) + kmi_found = wm.keyconfigs.find_item_from_operator( + idname="paint.brush_select", + context='INVOKE_REGION_WIN', + properties=kmi_hack_brush_select_properties, + )[1] + else: + print("Unsupported mode:", mode) + del mode, attr + + else: + kmi_found = None + + if kmi_found is not None: + pass + elif item.operator is not None: + kmi_found = wm.keyconfigs.find_item_from_operator( + idname=item.operator, + context='INVOKE_REGION_WIN', + )[1] + elif item.keymap is not None: + km = keyconf.keymaps.get(item.keymap[0]) + if km is None: + print("Keymap", repr(item.keymap[0]), "not found for tool", item.text) + kmi_found = None + else: + kmi_first = km.keymap_items + kmi_first = kmi_first[0] if kmi_first else None + if kmi_first is not None: + kmi_found = wm.keyconfigs.find_item_from_operator( + idname=kmi_first.idname, + # properties=kmi_first.properties, # prevents matches, don't use. + context='INVOKE_REGION_WIN', + )[1] + else: + kmi_found = None + del kmi_first + del km + else: + kmi_found = None + item_container[1] = kmi_found + + # More complex multi-pass test. + for item_container in items_all: + item, kmi_found = item_container[:2] + if kmi_found is None: + continue + kmi_found_type = kmi_found.type + + # Only for single keys. + if ( + (len(kmi_found_type) == 1) or + # When a tool is being activated instead of running an operator, just copy the shortcut. + (kmi_found.idname in {"wm.tool_set_by_name", "WM_OT_tool_set_by_name"}) + ): + kmi_args = {"type": kmi_found_type, **modifier_keywords_from_item(kmi_found)} + if kmi_unique_or_pass(kmi_args): + kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args) + kmi.properties.name = item.text + item_container[2] = kmi + + # Test for key_modifier, where alpha key is used as a 'key_modifier' + # (grease pencil holding 'D' for example). + for item_container in items_all: + item, kmi_found, kmi_exist = item_container + if kmi_found is None or kmi_exist: + continue + + kmi_found_type = kmi_found.type + if kmi_found_type in { + 'LEFTMOUSE', + 'RIGHTMOUSE', + 'MIDDLEMOUSE', + 'BUTTON4MOUSE', + 'BUTTON5MOUSE', + 'BUTTON6MOUSE', + 'BUTTON7MOUSE', + }: + kmi_found_type = kmi_found.key_modifier + # excludes 'NONE' + if len(kmi_found_type) == 1: + kmi_args = {"type": kmi_found_type, **modifier_keywords_from_item(kmi_found)} + del kmi_args["key_modifier"] + if kmi_unique_or_pass(kmi_args): + kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args) + kmi.properties.name = item.text + item_container[2] = kmi + + if use_auto_keymap_alpha: + # Map all unmapped keys to numbers, + # while this is a bit strange it means users will not confuse regular key bindings to ordered bindings. + + # First map A-Z. + kmi_type_alpha_char = [chr(i) for i in range(65, 91)] + kmi_type_alpha_args = {c: {"type": c} for c in kmi_type_alpha_char} + kmi_type_alpha_args_tuple = {c: dict_as_tuple(kmi_type_alpha_args[c]) for c in kmi_type_alpha_char} + for item_container in items_all: + item, kmi_found, kmi_exist = item_container + if kmi_exist: + continue + kmi_type = item.text[0].upper() + kmi_tuple = kmi_type_alpha_args_tuple.get(kmi_type) + if kmi_tuple and kmi_tuple not in kmi_unique_args: + kmi_unique_args.add(kmi_tuple) + kmi = keymap.keymap_items.new( + idname="wm.tool_set_by_name", + value='PRESS', + **kmi_type_alpha_args[kmi_type], + ) + kmi.properties.name = item.text + item_container[2] = kmi + del kmi_type_alpha_char, kmi_type_alpha_args, kmi_type_alpha_args_tuple + + if use_auto_keymap_num: + # Free events (last used first). + kmi_type_auto = ('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'ZERO') + # Map both numbers and num-pad. + kmi_type_dupe = { + 'ONE': 'NUMPAD_1', + 'TWO': 'NUMPAD_2', + 'THREE': 'NUMPAD_3', + 'FOUR': 'NUMPAD_4', + 'FIVE': 'NUMPAD_5', + 'SIX': 'NUMPAD_6', + 'SEVEN': 'NUMPAD_7', + 'EIGHT': 'NUMPAD_8', + 'NINE': 'NUMPAD_9', + 'ZERO': 'NUMPAD_0', + } + + def iter_free_events(): + for mod in ({}, {"shift": True}, {"ctrl": True}, {"alt": True}): + for e in kmi_type_auto: + yield (e, mod) + + iter_events = iter(iter_free_events()) + + for item_container in items_all: + item, kmi_found, kmi_exist = item_container + if kmi_exist: + continue + kmi_args = None + while True: + key, mod = next(iter_events, (None, None)) + if key is None: + break + kmi_args = {"type": key, **mod} + kmi_tuple = dict_as_tuple(kmi_args) + if kmi_tuple in kmi_unique_args: + kmi_args = None + else: + break + + if kmi_args is not None: + kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args) + kmi.properties.name = item.text + item_container[2] = kmi + kmi_unique_args.add(kmi_tuple) + + key = kmi_type_dupe.get(kmi_args["type"]) + if key is not None: + kmi_args["type"] = key + kmi_tuple = dict_as_tuple(kmi_args) + if not kmi_tuple in kmi_unique_args: + kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args) + kmi.properties.name = item.text + kmi_unique_args.add(kmi_tuple) + + if use_hack_properties: + keymap.keymap_items.remove(kmi_hack) + + + # Keepo last so we can try add a key without any modifiers + # in the case this toolbar was activated with modifiers. + if use_tap_reset: + if len(kmi_toolbar_args_type_only) == len(kmi_toolbar_args): + kmi_toolbar_args_available = kmi_toolbar_args + else: + # We have modifiers, see if we have a free key w/o modifiers. + kmi_toolbar_tuple = dict_as_tuple(kmi_toolbar_args_type_only) + if kmi_toolbar_tuple not in kmi_unique_args: + kmi_toolbar_args_available = kmi_toolbar_args_type_only + kmi_unique_args.add(kmi_toolbar_tuple) + else: + kmi_toolbar_args_available = kmi_toolbar_args + del kmi_toolbar_tuple + + kmi = keymap.keymap_items.new( + "wm.tool_set_by_name", + value='PRESS' if use_toolbar_release_hack else 'DOUBLE_CLICK', + **kmi_toolbar_args_available, + ) + kmi.properties.name = tap_reset_tool + + if use_release_confirm: + kmi = keymap.keymap_items.new( + "ui.button_execute", + type=kmi_toolbar_type, + value='RELEASE', + any=True, + ) + kmi.properties.skip_depressed = True + + if use_toolbar_release_hack: + # ... or pass through to let the toolbar know we're released. + # Let the operator know we're released. + kmi = keymap.keymap_items.new( + "wm.tool_set_by_name", + type=kmi_toolbar_type, + value='RELEASE', + any=True, + ) + + wm.keyconfigs.update() + return keymap diff --git a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py new file mode 100644 index 00000000000..a769bb34d1e --- /dev/null +++ b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py @@ -0,0 +1,206 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8 compliant> + +__all__ = ( + "generate", +) + +def _km_expand_from_toolsystem(space_type, context_mode): + def _fn(): + from bl_ui.space_toolsystem_common import ToolSelectPanelHelper + for cls in ToolSelectPanelHelper.__subclasses__(): + if cls.bl_space_type == space_type: + return cls.keymap_ui_hierarchy(context_mode) + raise Exception("keymap not found") + return _fn + + +def _km_hierarchy_iter_recursive(items): + for sub in items: + if callable(sub): + yield from sub() + else: + yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3]))) + + +def generate(): + return list(_km_hierarchy_iter_recursive(_km_hierarchy)) + + +# bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...]) + +# ('Script', 'EMPTY', 'WINDOW', []), + + +# Access via 'km_hierarchy'. +_km_hierarchy = [ + ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit + ('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot + ('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners + ('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region) + ]), + + ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region) + ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation + + ('User Interface', 'EMPTY', 'WINDOW', []), + + ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform) + ('Object Mode', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'), + ]), + ('Mesh', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'), + ]), + ('Curve', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'), + ]), + ('Armature', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'), + ]), + ('Metaball', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'), + ]), + ('Lattice', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'), + ]), + ('Font', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'), + ]), + + ('Pose', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'POSE'), + ]), + + ('Vertex Paint', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'PAINT_VERTEX'), + ]), + ('Weight Paint', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'PAINT_WEIGHT'), + ]), + ('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []), + ('Face Mask', 'EMPTY', 'WINDOW', []), + # image and view3d + ('Image Paint', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'PAINT_TEXTURE'), + ]), + ('Sculpt', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'SCULPT'), + ]), + + ('Particle', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'PARTICLE'), + ]), + + ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []), + ('Custom Normals Modal Map', 'EMPTY', 'WINDOW', []), + ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []), + ('Paint Curve', 'EMPTY', 'WINDOW', []), + + ('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change + + ('View3D Walk Modal', 'EMPTY', 'WINDOW', []), + ('View3D Fly Modal', 'EMPTY', 'WINDOW', []), + ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []), + ('View3D Move Modal', 'EMPTY', 'WINDOW', []), + ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []), + ('View3D Dolly Modal', 'EMPTY', 'WINDOW', []), + + # toolbar and properties + ('3D View Generic', 'VIEW_3D', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', None), + ]), + ]), + + ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [ + ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []), + ]), + ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [ + ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []), + ]), + ('NLA Editor', 'NLA_EDITOR', 'WINDOW', [ + ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []), + ('NLA Generic', 'NLA_EDITOR', 'WINDOW', []), + ]), + ('Timeline', 'TIMELINE', 'WINDOW', []), + + ('Image', 'IMAGE_EDITOR', 'WINDOW', [ + ('UV Editor', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image) + ('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d + ('UV Sculpt', 'EMPTY', 'WINDOW', []), + ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [ + _km_expand_from_toolsystem('IMAGE_EDITOR', None), + ]), + ]), + + ('Outliner', 'OUTLINER', 'WINDOW', []), + + ('Node Editor', 'NODE_EDITOR', 'WINDOW', [ + ('Node Generic', 'NODE_EDITOR', 'WINDOW', []), + ]), + ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [ + ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []), + ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []), + ]), + + ('File Browser', 'FILE_BROWSER', 'WINDOW', [ + ('File Browser Main', 'FILE_BROWSER', 'WINDOW', []), + ('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []), + ]), + + ('Info', 'INFO', 'WINDOW', []), + + ('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu + + ('Text', 'TEXT_EDITOR', 'WINDOW', [ + ('Text Generic', 'TEXT_EDITOR', 'WINDOW', []), + ]), + ('Console', 'CONSOLE', 'WINDOW', []), + ('Clip', 'CLIP_EDITOR', 'WINDOW', [ + ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []), + ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []), + ('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []), + ]), + + ('Grease Pencil', 'EMPTY', 'WINDOW', [ # grease pencil stuff (per region) + ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Paint (Draw brush)', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Paint (Fill)', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Paint (Erase)', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Weight Mode', 'EMPTY', 'WINDOW', []), + ]), + ('Mask Editing', 'EMPTY', 'WINDOW', []), + ('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region) + ('Markers', 'EMPTY', 'WINDOW', []), # markers (per region) + ('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region) + ('Animation Channels', 'EMPTY', 'WINDOW', []), + + ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []), + ('Gesture Straight Line', 'EMPTY', 'WINDOW', []), + ('Gesture Zoom Border', 'EMPTY', 'WINDOW', []), + ('Gesture Box', 'EMPTY', 'WINDOW', []), + + ('Standard Modal Map', 'EMPTY', 'WINDOW', []), + ('Transform Modal Map', 'EMPTY', 'WINDOW', []), + ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []), + ('Eyedropper ColorBand PointSampling Map', 'EMPTY', 'WINDOW', []), +] diff --git a/release/scripts/modules/bpy/utils/__init__.py b/release/scripts/modules/bpy/utils/__init__.py index 835cbe6c110..9889b16829b 100644 --- a/release/scripts/modules/bpy/utils/__init__.py +++ b/release/scripts/modules/bpy/utils/__init__.py @@ -51,6 +51,7 @@ __all__ = ( "units", "unregister_class", "user_resource", + "execfile", ) from _bpy import ( @@ -75,6 +76,18 @@ _script_module_dirs = "startup", "modules" _is_factory_startup = _bpy.app.factory_startup +def execfile(filepath, mod=None): + # module name isn't used or added to 'sys.modules'. + # passing in 'mod' allows re-execution without having to reload. + + import importlib.util + mod_spec = importlib.util.spec_from_file_location("__main__", filepath) + if mod is None: + mod = importlib.util.module_from_spec(mod_spec) + mod_spec.loader.exec_module(mod) + return mod + + def _test_import(module_name, loaded_modules): use_time = _bpy.app.debug_python @@ -585,14 +598,7 @@ def keyconfig_set(filepath, report=None): try: error_msg = "" - with open(filepath, 'r', encoding='utf-8') as keyfile: - exec( - compile(keyfile.read(), filepath, "exec"), - { - "__file__": filepath, - "__name__": "__main__", - } - ) + execfile(filepath) except: import traceback error_msg = traceback.format_exc() @@ -607,9 +613,6 @@ def keyconfig_set(filepath, report=None): # Get name, exception for default keymap to keep backwards compatibility. name = splitext(basename(filepath))[0] - if name == 'blender': - name = 'Blender' - kc_new = keyconfigs.get(name) if kc_new is None: if report is not None: diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py index 51f1980f519..8eea2ede425 100644 --- a/release/scripts/modules/bpy_extras/keyconfig_utils.py +++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py @@ -19,527 +19,71 @@ # <pep8 compliant> -def _km_expand_from_toolsystem(space_type, context_mode): - def _fn(): - from bl_ui.space_toolsystem_common import ToolSelectPanelHelper - for cls in ToolSelectPanelHelper.__subclasses__(): - if cls.bl_space_type == space_type: - return cls.keymap_ui_hierarchy(context_mode) - raise Exception("keymap not found") - return _fn - - -def _km_hierarchy_iter_recursive(items): - for sub in items: - if callable(sub): - yield from sub() - else: - yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3]))) - - -def km_hierarchy(): - return list(_km_hierarchy_iter_recursive(_km_hierarchy)) - - -# bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...]) - -# ('Script', 'EMPTY', 'WINDOW', []), - - -# Access via 'km_hierarchy'. -_km_hierarchy = [ - ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit - ('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot - ('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners - ('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region) - ]), - - ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region) - ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation - - ('User Interface', 'EMPTY', 'WINDOW', []), - - ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform) - ('Object Mode', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'), - ]), - ('Mesh', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'), - ]), - ('Curve', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'), - ]), - ('Armature', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'), - ]), - ('Metaball', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'), - ]), - ('Lattice', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'), - ]), - ('Font', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'), - ]), - - ('Pose', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'POSE'), - ]), - - ('Vertex Paint', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'PAINT_VERTEX'), - ]), - ('Weight Paint', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'PAINT_WEIGHT'), - ]), - ('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []), - ('Face Mask', 'EMPTY', 'WINDOW', []), - # image and view3d - ('Image Paint', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'PAINT_TEXTURE'), - ]), - ('Sculpt', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'SCULPT'), - ]), - - ('Particle', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'PARTICLE'), - ]), - - ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []), - ('Custom Normals Modal Map', 'EMPTY', 'WINDOW', []), - ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []), - ('Paint Curve', 'EMPTY', 'WINDOW', []), - - ('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change - - ('View3D Walk Modal', 'EMPTY', 'WINDOW', []), - ('View3D Fly Modal', 'EMPTY', 'WINDOW', []), - ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []), - ('View3D Move Modal', 'EMPTY', 'WINDOW', []), - ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []), - ('View3D Dolly Modal', 'EMPTY', 'WINDOW', []), - - # toolbar and properties - ('3D View Generic', 'VIEW_3D', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', None), - ]), - ]), - - ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [ - ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []), - ]), - ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [ - ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []), - ]), - ('NLA Editor', 'NLA_EDITOR', 'WINDOW', [ - ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []), - ('NLA Generic', 'NLA_EDITOR', 'WINDOW', []), - ]), - ('Timeline', 'TIMELINE', 'WINDOW', []), - - ('Image', 'IMAGE_EDITOR', 'WINDOW', [ - ('UV Editor', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image) - ('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d - ('UV Sculpt', 'EMPTY', 'WINDOW', []), - ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [ - _km_expand_from_toolsystem('IMAGE_EDITOR', None), - ]), - ]), - - ('Outliner', 'OUTLINER', 'WINDOW', []), - - ('Node Editor', 'NODE_EDITOR', 'WINDOW', [ - ('Node Generic', 'NODE_EDITOR', 'WINDOW', []), - ]), - ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [ - ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []), - ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []), - ]), - - ('File Browser', 'FILE_BROWSER', 'WINDOW', [ - ('File Browser Main', 'FILE_BROWSER', 'WINDOW', []), - ('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []), - ]), - - ('Info', 'INFO', 'WINDOW', []), - - ('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu - - ('Text', 'TEXT_EDITOR', 'WINDOW', [ - ('Text Generic', 'TEXT_EDITOR', 'WINDOW', []), - ]), - ('Console', 'CONSOLE', 'WINDOW', []), - ('Clip', 'CLIP_EDITOR', 'WINDOW', [ - ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []), - ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []), - ('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []), - ]), - - ('Grease Pencil', 'EMPTY', 'WINDOW', [ # grease pencil stuff (per region) - ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Paint (Draw brush)', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Paint (Fill)', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Paint (Erase)', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Weight Mode', 'EMPTY', 'WINDOW', []), - ]), - ('Mask Editing', 'EMPTY', 'WINDOW', []), - ('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region) - ('Markers', 'EMPTY', 'WINDOW', []), # markers (per region) - ('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region) - ('Animation Channels', 'EMPTY', 'WINDOW', []), - - ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []), - ('Gesture Straight Line', 'EMPTY', 'WINDOW', []), - ('Gesture Zoom Border', 'EMPTY', 'WINDOW', []), - ('Gesture Box', 'EMPTY', 'WINDOW', []), - - ('Standard Modal Map', 'EMPTY', 'WINDOW', []), - ('Transform Modal Map', 'EMPTY', 'WINDOW', []), - ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []), - ('Eyedropper ColorBand PointSampling Map', 'EMPTY', 'WINDOW', []), -] - - # ----------------------------------------------------------------------------- # Add-on helpers to properly (un)register their own keymaps. -# Example of keymaps_description: -keymaps_description_doc = """ -keymaps_description is a tuple (((keymap_description), (tuple of keymap_item_descriptions))). -keymap_description is a tuple (name, space_type, region_type, is_modal). -keymap_item_description is a tuple ({kw_args_for_keymap_new}, (tuple of properties)). -kw_args_for_keymap_new is a mapping which keywords match parameters of keymap.new() function. -tuple of properties is a tuple of pairs (prop_name, prop_value) (properties being those of called operator). - -Example: - -KEYMAPS = ( - # First, keymap identifiers (last bool is True for modal km). - (('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', False), ( - # Then a tuple of keymap items, defined by a dict of kwargs for the km new func, and a tuple of tuples (name, val) - # for ops properties, if needing non-default values. - ({"idname": export_strips.SEQExportStrip.bl_idname, "type": 'P', "value": 'PRESS', "shift": True, "ctrl": True}, - ()), - )), -) -""" - +def addon_keymap_register(keymap_data): + """ + Register a set of keymaps for addons using a list of keymaps. -def addon_keymap_register(wm, keymaps_description): + See 'blender_defaults.py' for examples of the format this takes. """ - Register a set of keymaps for addons. + import bpy + wm = bpy.context.window_manager + + from bl_keymap_utils.io import keymap_init_from_data - """ + keymaps_description_doc kconf = wm.keyconfigs.addon if not kconf: return # happens in background mode... - for km_info, km_items in keymaps_description: - km_name, km_sptype, km_regtype, km_ismodal = km_info - kmap = [k for k in kconf.keymaps - if k.name == km_name and k.region_type == km_regtype and - k.space_type == km_sptype and k.is_modal == km_ismodal] - if kmap: - kmap = kmap[0] - else: - kmap = kconf.keymaps.new(km_name, region_type=km_regtype, space_type=km_sptype, modal=km_ismodal) - for kmi_kwargs, props in km_items: - kmi = kmap.keymap_items.new(**kmi_kwargs) - kmi.active = True - for prop, val in props: - setattr(kmi.properties, prop, val) - - -def addon_keymap_unregister(wm, keymaps_description): + for km_name, km_args, km_content in keymap_data: + km_space_type = km_args["space_type"] + km_region_type = km_args["region_type"] + km_modal = km_args.get("modal", False) + kmap = next(iter( + k for k in kconf.keymaps + if k.name == km_name and + k.region_type == km_region_type and + k.space_type == km_space_type and + k.is_modal == km_modal + ), None) + if kmap is None: + kmap = kconf.keymaps.new(km_name, **km_args) + keymap_init_from_data(kmap, km_content["items"], is_modal=km_modal) + +def addon_keymap_unregister(keymap_data): """ Unregister a set of keymaps for addons. - - """ + keymaps_description_doc + """ # NOTE: We must also clean up user keyconfig, else, if user has customized one of add-on's shortcut, this # customization remains in memory, and comes back when re-enabling the addon, causing a segfault... :/ + import bpy + wm = bpy.context.window_manager + kconfs = wm.keyconfigs for kconf in (kconfs.user, kconfs.addon): - for km_info, km_items in keymaps_description: - km_name, km_sptype, km_regtype, km_ismodal = km_info - kmaps = (k for k in kconf.keymaps - if k.name == km_name and k.region_type == km_regtype and - k.space_type == km_sptype and k.is_modal == km_ismodal) + for km_name, km_args, km_content in keymap_data: + km_space_type = km_args["space_type"] + km_region_type = km_args["region_type"] + km_modal = km_args.get("modal", False) + kmaps = ( + k for k in kconf.keymaps + if k.name == km_name and + k.region_type == km_region_type and + k.space_type == km_space_type and + k.is_modal == km_modal + ) for kmap in kmaps: - for kmi_kwargs, props in km_items: - idname = kmi_kwargs["idname"] + for kmi_idname, _, _ in km_content["items"]: for kmi in kmap.keymap_items: - if kmi.idname == idname: + if kmi.idname == kmi_idname: kmap.keymap_items.remove(kmi) # NOTE: We won't remove addons keymaps themselves, other addons might also use them! # ----------------------------------------------------------------------------- -# Import/Export Functions - - -def indent(levels): - return levels * " " - - -def round_float_32(f): - from struct import pack, unpack - return unpack("f", pack("f", f))[0] - - -def repr_f32(f): - f_round = round_float_32(f) - f_str = repr(f) - f_str_frac = f_str.partition(".")[2] - if not f_str_frac: - return f_str - for i in range(1, len(f_str_frac)): - f_test = round(f, i) - f_test_round = round_float_32(f_test) - if f_test_round == f_round: - return "%.*f" % (i, f_test) - return f_str - - -def kmi_args_as_data(kmi): - s = [ - f"\"type\": '{kmi.type}'", - f"\"value\": '{kmi.value}'" - ] - - if kmi.any: - s.append("\"any\": True") - else: - if kmi.shift: - s.append("\"shift\": True") - if kmi.ctrl: - s.append("\"ctrl\": True") - if kmi.alt: - s.append("\"alt\": True") - if kmi.oskey: - s.append("\"oskey\": True") - if kmi.key_modifier and kmi.key_modifier != 'NONE': - s.append(f"\"key_modifier\": '{kmi.key_modifier}'") - - return "{" + ", ".join(s) + "}" - - -def _kmi_properties_to_lines_recursive(level, properties, lines): - from bpy.types import OperatorProperties - - def string_value(value): - if isinstance(value, (str, bool, int)): - return repr(value) - elif isinstance(value, float): - return repr_f32(value) - elif getattr(value, '__len__', False): - return repr(tuple(value)) - raise Exception(f"Export key configuration: can't write {value!r}") - - for pname in properties.bl_rna.properties.keys(): - if pname != "rna_type": - value = getattr(properties, pname) - if isinstance(value, OperatorProperties): - lines_test = [] - _kmi_properties_to_lines_recursive(level + 2, value, lines_test) - if lines_test: - lines.append(f"(") - lines.append(f"\"{pname}\",\n") - lines.append(f"{indent(level + 3)}" "[") - lines.extend(lines_test) - lines.append("],\n") - lines.append(f"{indent(level + 3)}" "),\n" f"{indent(level + 2)}") - del lines_test - elif properties.is_property_set(pname): - value = string_value(value) - lines.append((f"(\"{pname}\", {value:s}),\n" f"{indent(level + 2)}")) - - -def _kmi_properties_to_lines(level, kmi_props, lines): - if kmi_props is None: - return - - lines_test = [f"\"properties\":\n" f"{indent(level + 1)}" "["] - _kmi_properties_to_lines_recursive(level, kmi_props, lines_test) - if len(lines_test) > 1: - lines_test.append("],\n") - lines.extend(lines_test) - - -def _kmi_attrs_or_none(level, kmi): - lines = [] - _kmi_properties_to_lines(level + 1, kmi.properties, lines) - if kmi.active is False: - lines.append(f"{indent(level)}\"active\":" "False,\n") - if not lines: - return None - return "".join(lines) - - -def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False): - # Alternate foramt - - # Generate a list of keymaps to export: - # - # First add all user_modified keymaps (found in keyconfigs.user.keymaps list), - # then add all remaining keymaps from the currently active custom keyconfig. - # - # This will create a final list of keymaps that can be used as a "diff" against - # the default blender keyconfig, recreating the current setup from a fresh blender - # without needing to export keymaps which haven't been edited. - - from .keyconfig_utils import keyconfig_merge - - class FakeKeyConfig: - keymaps = [] - edited_kc = FakeKeyConfig() - for km in wm.keyconfigs.user.keymaps: - if all_keymaps or km.is_user_modified: - edited_kc.keymaps.append(km) - # merge edited keymaps with non-default keyconfig, if it exists - if kc != wm.keyconfigs.default: - export_keymaps = keyconfig_merge(edited_kc, kc) - else: - export_keymaps = keyconfig_merge(edited_kc, edited_kc) - - with open(filepath, "w") as fh: - fw = fh.write - fw("keyconfig_data = \\\n[") - - for km, kc_x in export_keymaps: - km = km.active() - fw("(") - fw(f"\"{km.name:s}\",\n") - fw(f"{indent(2)}" "{") - fw(f"\"space_type\": '{km.space_type:s}'") - fw(f", \"region_type\": '{km.region_type:s}'") - # We can detect from the kind of items. - if km.is_modal: - fw(", \"modal\": True") - fw("},\n") - fw(f"{indent(2)}" "{") - is_modal = km.is_modal - fw(f"\"items\":\n") - fw(f"{indent(3)}[") - for kmi in km.keymap_items: - if is_modal: - kmi_id = kmi.propvalue - else: - kmi_id = kmi.idname - fw(f"(") - kmi_args = kmi_args_as_data(kmi) - kmi_data = _kmi_attrs_or_none(4, kmi) - fw(f"\"{kmi_id:s}\"") - if kmi_data is None: - fw(f", ") - else: - fw(",\n" f"{indent(5)}") - - fw(kmi_args) - if kmi_data is None: - fw(", None),\n") - else: - fw(",\n") - fw(f"{indent(5)}" "{") - fw(kmi_data) - fw(f"{indent(6)}") - fw("},\n" f"{indent(5)}") - fw("),\n") - fw(f"{indent(4)}") - fw("],\n" f"{indent(3)}") - fw("},\n" f"{indent(2)}") - fw("),\n" f"{indent(1)}") - - fw("]\n") - fw("\n\n") - fw("if __name__ == \"__main__\":\n") - fw(" import os\n") - fw(" from bpy_extras.keyconfig_utils import keyconfig_import_from_data\n") - fw(" keyconfig_import_from_data(os.path.splitext(os.path.basename(__file__))[0], keyconfig_data)\n") - - -def _kmi_props_setattr(kmi_props, attr, value): - if type(value) is list: - kmi_subprop = getattr(kmi_props, attr) - for subattr, subvalue in value: - _kmi_props_setattr(kmi_subprop, subattr, subvalue) - return - - try: - setattr(kmi_props, attr, value) - except AttributeError: - print(f"Warning: property '{attr}' not found in keymap item '{kmi_props.__class__.__name__}'") - except Exception as ex: - print(f"Warning: {ex!r}") - - -def keymap_items_from_data(km, km_items, is_modal=False): - new_fn = getattr(km.keymap_items, "new_modal" if is_modal else "new") - for (kmi_idname, kmi_args, kmi_data) in km_items: - kmi = new_fn(kmi_idname, **kmi_args) - if kmi_data is not None: - if not kmi_data.get("active", True): - kmi.active = False - kmi_props_data = kmi_data.get("properties", None) - if kmi_props_data is not None: - kmi_props = kmi.properties - for attr, value in kmi_props_data: - _kmi_props_setattr(kmi_props, attr, value) - - -def keyconfig_import_from_data(name, keyconfig_data): - # Load data in the format defined above. - # - # Runs at load time, keep this fast! - - import bpy - wm = bpy.context.window_manager - kc = wm.keyconfigs.new(name) - for (km_name, km_args, km_content) in keyconfig_data: - km = kc.keymaps.new(km_name, **km_args) - keymap_items_from_data(km, km_content["items"], is_modal=km_args.get("modal", False)) - - -def keyconfig_module_from_preset(name, preset_reference_filename=None): - import os - import importlib.util - if preset_reference_filename is not None: - preset_path = os.path.join(os.path.dirname(preset_reference_filename), name + ".py") - else: - preset_path = None - - # External presets may want to re-use other presets too. - if not (preset_path and os.path.exists(preset_path)): - preset_path = bpy.utils.preset_find(name, "keyconfig") - - # module name isn't used or added to 'sys.modules'. - mod_spec = importlib.util.spec_from_file_location("__main__", preset_path) - mod = importlib.util.module_from_spec(mod_spec) - mod_spec.loader.exec_module(mod) - return mod - - -# ----------------------------------------------------------------------------- # Utility Functions -def km_exists_in(km, export_keymaps): - for km2, kc in export_keymaps: - if km2.name == km.name: - return True - return False - - -def keyconfig_merge(kc1, kc2): - """ note: kc1 takes priority over kc2 - """ - merged_keymaps = [(km, kc1) for km in kc1.keymaps] - if kc1 != kc2: - merged_keymaps.extend((km, kc2) for km in kc2.keymaps if not km_exists_in(km, merged_keymaps)) - - return merged_keymaps - - def keyconfig_test(kc): def testEntry(kc, entry, src=None, parent=None): @@ -592,8 +136,9 @@ def keyconfig_test(kc): # ------------------------------------------------------------------------- # Function body + from bl_keymap_utils import keymap_hierarchy result = False - for entry in km_hierarchy(): + for entry in keymap_hierarchy.generate(): if testEntry(kc, entry): result = True return result diff --git a/release/scripts/modules/bpy_extras/mesh_utils.py b/release/scripts/modules/bpy_extras/mesh_utils.py index a09282da2fe..85356206482 100644 --- a/release/scripts/modules/bpy_extras/mesh_utils.py +++ b/release/scripts/modules/bpy_extras/mesh_utils.py @@ -239,7 +239,7 @@ def edge_loops_from_edges(mesh, edges=None): return line_polys -def ngon_tessellate(from_data, indices, fix_loops=True): +def ngon_tessellate(from_data, indices, fix_loops=True, debug_print=True): """ Takes a polyline of indices (fgon) and returns a list of face index lists. Designed to be used for importers that need indices for an @@ -405,7 +405,8 @@ def ngon_tessellate(from_data, indices, fix_loops=True): fill = [[vert_map[i] for i in reversed(f)] for f in fill] if not fill: - print('Warning Cannot scanfill, fallback on a triangle fan.') + if debug_print: + print('Warning Cannot scanfill, fallback on a triangle fan.') fill = [[0, i - 1, i] for i in range(2, len(indices))] else: # Use real scanfill. diff --git a/release/scripts/modules/bpy_extras/node_shader_utils.py b/release/scripts/modules/bpy_extras/node_shader_utils.py index 049ae7209c7..393695bc8ce 100644 --- a/release/scripts/modules/bpy_extras/node_shader_utils.py +++ b/release/scripts/modules/bpy_extras/node_shader_utils.py @@ -252,6 +252,7 @@ class PrincipledBSDFWrapper(ShaderWrapper): self._grid_to_location(-1, -2, dst_node=node_normalmap, ref_node=node_principled) # Link links.new(node_normalmap.outputs["Normal"], node_principled.inputs["Normal"]) + self._node_normalmap = node_normalmap return self._node_normalmap node_normalmap = property(node_normalmap_get) diff --git a/release/scripts/modules/rna_keymap_ui.py b/release/scripts/modules/rna_keymap_ui.py index 752db7fd5ac..756dbde23c9 100644 --- a/release/scripts/modules/rna_keymap_ui.py +++ b/release/scripts/modules/rna_keymap_ui.py @@ -355,28 +355,27 @@ def draw_filtered(display_keymaps, filter_type, filter_text, layout): def draw_hierarchy(display_keymaps, layout): - from bpy_extras import keyconfig_utils - for entry in keyconfig_utils.km_hierarchy(): + from bl_keymap_utils import keymap_hierarchy + for entry in keymap_hierarchy.generate(): draw_entry(display_keymaps, entry, layout) def draw_keymaps(context, layout): - from bpy_extras import keyconfig_utils + from bl_keymap_utils.io import keyconfig_merge wm = context.window_manager - kc = wm.keyconfigs.user + kc_user = wm.keyconfigs.user + kc_active = wm.keyconfigs.active spref = context.space_data - col = layout.column() - sub = col.column() - - subsplit = sub.split() + subsplit = layout.split() subcol = subsplit.column() - row = subcol.row(align=True) + col = subcol.column() + row = col.row(align=True) # row.prop_search(wm.keyconfigs, "active", wm, "keyconfigs", text="Key Config") - text = bpy.path.display_name(wm.keyconfigs.active.name) + text = bpy.path.display_name(kc_active.name) if not text: text = "Blender (default)" row.menu("USERPREF_MT_keyconfigs", text=text) @@ -389,15 +388,15 @@ def draw_keymaps(context, layout): rowsub = row.split(factor=0.33, align=True) # postpone drawing into rowsub, so we can set alert! - col.separator() - display_keymaps = keyconfig_utils.keyconfig_merge(kc, kc) + layout.separator() + display_keymaps = keyconfig_merge(kc_user, kc_user) filter_type = spref.filter_type filter_text = spref.filter_text.strip() if filter_text: filter_text = filter_text.lower() - ok = draw_filtered(display_keymaps, filter_type, filter_text, col) + ok = draw_filtered(display_keymaps, filter_type, filter_text, layout) else: - draw_hierarchy(display_keymaps, col) + draw_hierarchy(display_keymaps, layout) ok = True # go back and fill in rowsub @@ -406,3 +405,32 @@ def draw_keymaps(context, layout): if not ok: rowsubsub.alert = True rowsubsub.prop(spref, "filter_text", text="", icon='VIEWZOOM') + + if not filter_text: + # When the keyconfig defines it's own preferences. + kc_prefs = kc_active.preferences + if kc_prefs is not None: + box = col.box() + row = box.row(align=True) + + userpref = context.user_preferences + inputs = userpref.inputs + show_ui_keyconfig = inputs.show_ui_keyconfig + row.prop( + inputs, + "show_ui_keyconfig", + text="", + icon='TRIA_DOWN' if show_ui_keyconfig else 'TRIA_RIGHT', + emboss=False, + ) + row.label(text="Preferences") + + if show_ui_keyconfig: + # Defined by user preset, may contain mistakes out of our control. + try: + kc_prefs.draw(box) + except Exception: + import traceback + traceback.print_exc() + del box + del kc_prefs diff --git a/release/scripts/modules/rna_xml.py b/release/scripts/modules/rna_xml.py index a4610c65a43..7fc9bcb0261 100644 --- a/release/scripts/modules/rna_xml.py +++ b/release/scripts/modules/rna_xml.py @@ -61,22 +61,24 @@ def print_ln(data): print(data, end="") -def rna2xml(fw=print_ln, - root_node="", - root_rna=None, # must be set - root_rna_skip=set(), - root_ident="", - ident_val=" ", - skip_classes=(bpy.types.Operator, - bpy.types.Panel, - bpy.types.KeyingSet, - bpy.types.Header, - bpy.types.PropertyGroup, - ), - skip_typemap=None, - pretty_format=True, - method='DATA'): - +def rna2xml( + fw=print_ln, + root_node="", + root_rna=None, # must be set + root_rna_skip=set(), + root_ident="", + ident_val=" ", + skip_classes=( + bpy.types.Operator, + bpy.types.Panel, + bpy.types.KeyingSet, + bpy.types.Header, + bpy.types.PropertyGroup, + ), + skip_typemap=None, + pretty_format=True, + method='DATA', +): from xml.sax.saxutils import quoteattr property_typemap = build_property_typemap(skip_classes, skip_typemap) @@ -177,11 +179,10 @@ def rna2xml(fw=print_ln, # declare + attributes if pretty_format: if node_attrs: - tmp_str = "<%s " % value_type_name - tmp_ident = "\n" + ident + (" " * len(tmp_str)) - fw("%s%s%s>\n" % (ident, tmp_str, tmp_ident.join(node_attrs))) - del tmp_str - del tmp_ident + fw("%s<%s\n" % (ident, value_type_name)) + for node_attr in node_attrs: + fw("%s%s\n" % (ident_next, node_attr)) + fw("%s>\n" % (ident_next,)) else: fw("%s<%s>\n" % (ident, value_type_name)) else: diff --git a/release/scripts/presets/interaction/3dsmax.py b/release/scripts/presets/interaction/3dsmax.py deleted file mode 100644 index 681aa4ab4b7..00000000000 --- a/release/scripts/presets/interaction/3dsmax.py +++ /dev/null @@ -1,12 +0,0 @@ -# Configuration 3dsmax -import bpy - -bpy.context.user_preferences.edit.use_drag_immediately = False -bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb = False -bpy.context.user_preferences.view.use_auto_perspective = True -bpy.context.user_preferences.view.use_quit_dialog = True -bpy.context.user_preferences.inputs.select_mouse = 'LEFT' -bpy.context.user_preferences.inputs.view_zoom_method = 'DOLLY' -bpy.context.user_preferences.inputs.view_zoom_axis = 'VERTICAL' -bpy.context.user_preferences.inputs.view_rotate_method = 'TURNTABLE' -bpy.context.user_preferences.inputs.invert_mouse_zoom = False diff --git a/release/scripts/presets/interaction/blender.py b/release/scripts/presets/interaction/blender.py deleted file mode 100644 index 0c79a3fc909..00000000000 --- a/release/scripts/presets/interaction/blender.py +++ /dev/null @@ -1,14 +0,0 @@ -# Configuration Blender -import bpy - -bpy.context.user_preferences.view.use_mouse_depth_cursor = False -bpy.context.user_preferences.view.use_mouse_depth_navigate = False -bpy.context.user_preferences.view.use_zoom_to_mouse = False -bpy.context.user_preferences.view.use_rotate_around_active = False -bpy.context.user_preferences.edit.use_drag_immediately = False -bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb = False -bpy.context.user_preferences.inputs.select_mouse = 'RIGHT' -bpy.context.user_preferences.inputs.view_zoom_method = 'DOLLY' -bpy.context.user_preferences.inputs.view_zoom_axis = 'VERTICAL' -bpy.context.user_preferences.inputs.view_rotate_method = 'TURNTABLE' -bpy.context.user_preferences.inputs.invert_mouse_zoom = False diff --git a/release/scripts/presets/interaction/maya.py b/release/scripts/presets/interaction/maya.py deleted file mode 100644 index 059669d6482..00000000000 --- a/release/scripts/presets/interaction/maya.py +++ /dev/null @@ -1,10 +0,0 @@ -# Configuration Blender -import bpy - -bpy.context.user_preferences.edit.use_drag_immediately = True -bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb = False -bpy.context.user_preferences.inputs.select_mouse = 'LEFT' -bpy.context.user_preferences.inputs.view_zoom_method = 'DOLLY' -bpy.context.user_preferences.inputs.view_zoom_axis = 'HORIZONTAL' -bpy.context.user_preferences.inputs.view_rotate_method = 'TURNTABLE' -bpy.context.user_preferences.inputs.invert_mouse_zoom = False diff --git a/release/scripts/presets/interface_theme/24x_blues.xml b/release/scripts/presets/interface_theme/24x_blues.xml deleted file mode 100644 index 18b866eeb0f..00000000000 --- a/release/scripts/presets/interface_theme/24x_blues.xml +++ /dev/null @@ -1,1177 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.444043" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#dc0000" - axis_y="#00dc00" - axis_z="#0000dc"> - <wcol_regular> - <ThemeWidgetColors outline="#616161" - inner="#999999ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#262626" - inner="#b2bec6ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#262626" - inner="#d0d0d0ff" - inner_sel="#667677ff" - item="#ffffffff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#262626" - inner="#b2bec6ff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="10"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#262626" - inner="#aababbff" - inner_sel="#667677ff" - item="#ffffffff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#262626" - inner="#d0d0d0ff" - inner_sel="#7d7d7dff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#262626" - inner="#a1a1a1a4" - inner_sel="#999999ff" - item="#585858ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#262626" - inner="#808080ff" - inner_sel="#999999ff" - item="#d2d2d2ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#262626" - inner="#aaaaaaff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#262626" - inner="#d0d0d0ff" - inner_sel="#464646ff" - item="#717171ff" - text="#000000" - text_sel="#cccccc" - show_shaded="TRUE" - shadetop="5" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#3f3f3fff" - inner_sel="#7f7f7fff" - item="#ffffffff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="15" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#d2d2d2e7" - inner_sel="#999999ff" - item="#646464ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-25" - shadedown="25"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#262626" - inner="#b4b4b4df" - inner_sel="#646464b4" - item="#b4b4b4ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#b0bcc4e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#d2d2d200" - inner_sel="#7f7f7fff" - item="#ffffffff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#262626" - inner="#b4b4b42e" - inner_sel="#646464b4" - item="#b4b4b4ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#bebebeff" - inner_sel="#646464b4" - item="#444444ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#7f7f7fff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#73be4c" - inner_anim_sel="#5aa633" - inner_key="#f0eb64" - inner_key_sel="#d7d34b" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#4c4c4c" - clipping_border_3d="#313131ff" - wire="#000000" - wire_edit="#000000" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - text_grease_pencil="#b5e61d" - object_selected="#dcaedc" - object_active="#ff88ff" - object_grouped="#083008" - object_grouped_active="#55bb55" - text_keyframe="#ddd700" - camera="#000000" - empty="#000000" - light="#00000028" - speaker="#000000" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#00a5ff" - vertex_unreferenced="#000000" - edge_select="#ffa000" - edge_seam="#db2512" - edge_sharp="#00abc0" - edge_crease="#cc0099" - edge_bevel="#00a5ff" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#00000000" - face_select="#ff85003c" - face_dot="#ff8a30" - facedot_size="4" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#202000" - extra_face_angle="#000080" - extra_face_area="#002000" - editmesh_active="#ffffff80" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - bone_solid="#c8c8c8" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#b44d4d" - view_overlay="#000000" - transform="#ffffff" - frame_current="#60c040" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f" - outline_width="1"> - <space> - <ThemeSpaceGradient title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b457" - button_title="#121227" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <gradients> - <ThemeGradientColors show_grad="TRUE" - gradient="#a3a3a3" - high_gradient="#7e7e7e"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#ffffff19" - back="#7aa5a32e" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#818181" - frame_current="#60c040" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ff8500" - handle_vertex_size="3"> - <space> - <ThemeSpaceGeneric back="#979797" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b457" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#b4b4b4" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#a0a0d0"> - <space> - <ThemeSpaceGeneric back="#808080" - title="#000000" - text="#000000" - text_hi="#0f0f0f" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#757575" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#b4b4b4" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#858585" - frame_current="#60c040" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - keyframe_scale_factor="1" - summary="#cc701a66"> - <space> - <ThemeSpaceGeneric back="#a0a0a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#b4b4b4" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - face="#ffffff0a" - face_select="#ff85003c" - face_dot="#ff8500" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#b4b4b4ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#353535" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#404040" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#949494" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b442" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#818181" - selected_text="#c67777" - cursor="#ff0000" - syntax_builtin="#800050" - syntax_symbols="#4c4c4c" - syntax_special="#5f5f00" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#006432" - syntax_string="#640000" - syntax_numbers="#0000c8"> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#5b5b5b" - frame_current="#60c040" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#ffffff" - node_active="#ffffff" - wire="#000000" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#7f7070" - node_backdrop="#9b9b9ba0" - converter_node="#c6bfbf" - color_node="#457b95" - group_node="#69756e" - group_socket_node="#dfca35" - frame_node="#9a9b9ba0" - matte_node="#977474" - distor_node="#749797" - noodle_curving="5" - input_node="#646464" - output_node="#646464" - filter_node="#6c696f" - vector_node="#6f578c" - texture_node="#8395bf" - shader_node="#4f9370" - script_node="#6c696f" - pattern_node="#6c696f" - layout_node="#6e6f69"> - <space> - <ThemeSpaceGeneric back="#757575" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b42f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#82878c"> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#000000" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#c6777799"> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#757575" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/back_to_black.xml b/release/scripts/presets/interface_theme/back_to_black.xml deleted file mode 100644 index 464625d0ba5..00000000000 --- a/release/scripts/presets/interface_theme/back_to_black.xml +++ /dev/null @@ -1,1177 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#dc0000" - axis_y="#00dc00" - axis_z="#0000dc"> - <wcol_regular> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#444444ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#535353" - inner="#111111ff" - inner_sel="#33406bff" - item="#a3a3a3ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#2a2a2aff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#111111ff" - item="#33406bff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#2a2a2aff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#191919e6" - inner_sel="#8c8c8cff" - item="#33406be6" - text="#a0a0a0" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#929292" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#2a2a2a" - inner="#111111ff" - inner_sel="#33406bff" - item="#191919ff" - text="#929292" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-100" - shadedown="5"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#56ff00" - inner_anim_sel="#56ff00" - inner_key="#fff400" - inner_key_sel="#fff400" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.1"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#222222" - clipping_border_3d="#313131ff" - wire="#888888" - wire_edit="#6c75ff" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - text_grease_pencil="#b5e61d" - object_selected="#f15800" - object_active="#ff8c19" - object_grouped="#083008" - object_grouped_active="#55bb55" - text_keyframe="#ddd700" - camera="#535353" - empty="#535353" - light="#fff0d328" - speaker="#535353" - vertex="#72cfdd" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#00a5ff" - vertex_unreferenced="#000000" - edge_select="#ffa000" - edge_seam="#db2512" - edge_sharp="#ff2020" - edge_crease="#cc0099" - edge_bevel="#00a5ff" - edge_facesel="#6b6b6b" - freestyle_edge_mark="#7fff7f" - face="#73828f41" - face_select="#ffa4003c" - face_dot="#ffa900" - facedot_size="4" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#7f7f7f" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#3b3b3b" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#ffedf8" - extra_edge_angle="#202000" - extra_face_angle="#00c900" - extra_face_area="#fff000" - editmesh_active="#ff020080" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - bone_solid="#c8c8c8" - bundle_solid="#c8c8c8" - camera_path="#5a5a5a" - skin_root="#000000" - view_overlay="#000000" - transform="#ffffff" - frame_current="#60c040" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f" - outline_width="1"> - <space> - <ThemeSpaceGradient title="#5d5d5d" - text="#7d7d7d" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#00000057" - button_title="#929292" - button_text="#c3c3c3" - button_text_hi="#e5e5e5" - tab_active="#212947" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#000000"> - <gradients> - <ThemeGradientColors show_grad="TRUE" - gradient="#1d1d1d" - high_gradient="#000000"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#262626" - frame_current="#336622" - window_sliders="#969696" - channels_region="#6d6d6d" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#ffffff" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - handle_free="#808080" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#808080" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#808080" - handle_vertex="#808080" - handle_vertex_select="#ff8500" - handle_vertex_size="3"> - <space> - <ThemeSpaceGeneric back="#0d0d0d" - title="#5d5d5d" - text="#ffffff" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#1a1a1a" - list_title="#000000" - list_text="#bbbbbb" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#354d66"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#5d5d5d" - text="#7d7d7d" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#0d0d0d" - title="#585858" - text="#ffffff" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c3c3c3" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#0c0c0c" - list_title="#383838" - list_text="#d8d8d8" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#212121" - frame_current="#2a5c1c" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - keyframe_scale_factor="1" - summary="#00000000"> - <space> - <ThemeSpaceGeneric back="#080808" - title="#5d5d5d" - text="#ffffff" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#020202" - list_title="#2c2c2c" - list_text="#ebebeb" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#0f13bb" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - face="#ffffff0a" - face_select="#ff85003c" - face_dot="#ff8500" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#050505ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#5d5d5d" - text="#7d7d7d" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#282828" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#2f5f23" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#202020" - title="#5d5d5d" - text="#ffffff" - text_hi="#ffffff" - header="#000000" - header_text="#f3f3f3" - header_text_hi="#ffffff" - button="#02020242" - button_title="#bdbdbd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#000000" - title="#5d5d5d" - text="#7d7d7d" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#191919" - selected_text="#202020" - cursor="#ff0000" - syntax_builtin="#cf3d99" - syntax_symbols="#4c4c4c" - syntax_special="#969629" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#249d60" - syntax_string="#cc3535" - syntax_numbers="#3c68ff"> - <space> - <ThemeSpaceGeneric back="#050505" - title="#9e9e9e" - text="#ebebeb" - text_hi="#ffffff" - header="#000000" - header_text="#b9b9b9" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#d8d8d8" - button_text="#cccccc" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#272727" - frame_current="#2e5820" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#5d5d5d" - text="#c7c7c7" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#ffffff" - node_active="#ffffff" - wire="#6eafff" - wire_inner="#737373" - wire_select="#0019ff" - selected_text="#7f7070" - node_backdrop="#202030bc" - converter_node="#113941" - color_node="#0e3157" - group_node="#091a07" - group_socket_node="#dfca35" - frame_node="#9a9b9ba0" - matte_node="#977474" - distor_node="#749797" - noodle_curving="5" - input_node="#273053" - output_node="#273053" - filter_node="#0e3157" - vector_node="#0e3157" - texture_node="#0e3157" - shader_node="#0e3157" - script_node="#0e3157" - pattern_node="#0e3157" - layout_node="#0e3157"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#5d5d5d" - text="#7d7d7d" - text_hi="#ffffff" - header="#000000" - header_text="#c7c7c7" - header_text_hi="#ffffff" - button="#0000002f" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#ffffff" - list_text="#ffffff" - list_text_hi="#b8ffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#070707" - title="#5d5d5d" - text="#7d7d7d" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#245824" - selected_highlight="#212844"> - <space> - <ThemeSpaceGeneric back="#070707" - title="#9b9b9b" - text="#cccccc" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#5d5d5d" - text="#9b9b9b" - text_hi="#ffffff" - header="#000000" - header_text="#adadad" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#000000" - title="#5d5d5d" - text="#7d7d7d" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#6080ff" - line_input="#cecece" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#0f0f0f" - title="#5d5d5d" - text="#7d7d7d" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#000000ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#0094af" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#1b501b" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#0d0d0d" - title="#5d5d5d" - text="#ffffff" - text_hi="#ffffff" - header="#000000" - header_text="#979797" - header_text_hi="#ffffff" - button="#070707ff" - button_title="#c5c5c5" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#000000" - tab_inactive="#000000" - tab_back="#060606ff" - tab_outline="#3a3a3a"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/blender_24x.xml b/release/scripts/presets/interface_theme/blender_24x.xml deleted file mode 100644 index d0459e02115..00000000000 --- a/release/scripts/presets/interface_theme/blender_24x.xml +++ /dev/null @@ -1,1172 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#dc0000" - axis_y="#00dc00" - axis_z="#0000dc"> - <wcol_regular> - <ThemeWidgetColors outline="#262626" - inner="#999999ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#262626" - inner="#c6bab0ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#262626" - inner="#d0d0d0ff" - inner_sel="#667677ff" - item="#ffffffff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#262626" - inner="#aea8b2ff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="10"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#262626" - inner="#aababbff" - inner_sel="#667677ff" - item="#ffffffff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#262626" - inner="#d0d0d0ff" - inner_sel="#7d7d7dff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#262626" - inner="#a1a1a1a4" - inner_sel="#999999ff" - item="#585858ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#262626" - inner="#808080ff" - inner_sel="#999999ff" - item="#d2d2d2ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#262626" - inner="#aaaaaaff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#262626" - inner="#d0d0d0ff" - inner_sel="#464646ff" - item="#717171ff" - text="#000000" - text_sel="#cccccc" - show_shaded="TRUE" - shadetop="5" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#3f3f3fff" - inner_sel="#7f7f7fff" - item="#ffffffff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="15" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#d2d2d2ff" - inner_sel="#999999ff" - item="#646464ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-25" - shadedown="25"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#262626" - inner="#b4b4b42e" - inner_sel="#646464b4" - item="#b4b4b4ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#ffffddff" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#d2d2d200" - inner_sel="#7f7f7fff" - item="#ffffffff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#262626" - inner="#b4b4b42e" - inner_sel="#646464b4" - item="#b4b4b4ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#bebebeff" - inner_sel="#646464b4" - item="#444444ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#7f7f7fff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#73be4c" - inner_anim_sel="#5aa633" - inner_key="#f0eb64" - inner_key_sel="#d7d34b" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#4c4c4c" - wire="#000000" - wire_edit="#000000" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#00000028" - speaker="#000000" - camera="#000000" - view_overlay="#000000" - empty="#000000" - object_selected="#dcaedc" - object_active="#ff88ff" - object_grouped="#083008" - object_grouped_active="#55bb55" - transform="#ffffff" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - edge_select="#ffa000" - edge_seam="#db2512" - edge_sharp="#00abc0" - edge_crease="#cc0099" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#00000000" - face_select="#ff85003c" - face_dot="#ff8a30" - facedot_size="4" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#202000" - extra_face_angle="#000080" - extra_face_area="#002000" - editmesh_active="#ffffff80" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_solid="#c8c8c8" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - frame_current="#60c040" - outline_width="1" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#b44d4d" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b457" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#000000" - high_gradient="#7e7e7e"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#818181" - frame_current="#60c040" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ff8500" - handle_vertex_size="3"> - <space> - <ThemeSpaceGeneric back="#979797" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b457" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#b4b4b4" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#a0a0d0"> - <space> - <ThemeSpaceGeneric back="#808080" - title="#000000" - text="#000000" - text_hi="#0f0f0f" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#757575" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#b4b4b4" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#858585" - frame_current="#60c040" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - summary="#cc701a66"> - <space> - <ThemeSpaceGeneric back="#a0a0a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#b4b4b4" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - face="#ffffff0a" - face_select="#ff85003c" - face_dot="#ff8500" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#b4b4b4ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#353535" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#404040" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#949494" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b442" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#818181" - selected_text="#c67777" - cursor="#ff0000" - syntax_builtin="#800050" - syntax_symbols="#4c4c4c" - syntax_special="#5f5f00" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#006432" - syntax_string="#640000" - syntax_numbers="#0000c8"> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#5b5b5b" - frame_current="#60c040" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#ffffff" - node_active="#ffffff" - wire="#000000" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#7f7070" - node_backdrop="#9b9b9ba0" - converter_node="#c6bfbf" - color_node="#457b95" - group_node="#69756e" - group_socket_node="#dfca35" - frame_node="#9a9b9ba0" - matte_node="#977474" - distor_node="#749797" - noodle_curving="5" - input_node="#646464" - output_node="#646464" - filter_node="#6c696f" - vector_node="#6f578c" - texture_node="#8395bf" - shader_node="#4f9370" - script_node="#6c696f" - pattern_node="#6c696f" - layout_node="#6e6f69"> - <space> - <ThemeSpaceGeneric back="#757575" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b42f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#82878c"> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#000000" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#c6777799"> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#757575" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#b4b4b4" - header_text="#000000" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#b4b4b4" - tab_inactive="#999999" - tab_back="#757575ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/blender_27x.xml b/release/scripts/presets/interface_theme/blender_27x.xml deleted file mode 100644 index db9d042ae55..00000000000 --- a/release/scripts/presets/interface_theme/blender_27x.xml +++ /dev/null @@ -1,1242 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - icon_saturation="1" - widget_emboss="#ffffff05" - editor_outline="#3f3f3f" - axis_x="#dc0000" - axis_y="#00dc00" - axis_z="#0000dc" - manipulator_hi="#ffffff" - manipulator_primary="#deff0d" - manipulator_secondary="#00ffff" - manipulator_a="#177f17" - manipulator_b="#7f1717"> - <wcol_regular> - <ThemeWidgetColors outline="#191919" - inner="#999999ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0" - roundness="0.5"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#191919" - inner="#999999ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="15" - shadedown="-15" - roundness="0.4"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_toolbar_item> - <ThemeWidgetColors outline="#000000" - inner="#464646ff" - inner_sel="#ccccccff" - item="#000000ff" - text="#ffffff" - text_sel="#333333" - show_shaded="FALSE" - shadetop="0" - shadedown="0" - roundness="0.6"> - </ThemeWidgetColors> - </wcol_toolbar_item> - <wcol_radio> - <ThemeWidgetColors outline="#000000" - inner="#464646ff" - inner_sel="#5680c2ff" - item="#ffffffff" - text="#ffffff" - text_sel="#000000" - show_shaded="TRUE" - shadetop="15" - shadedown="-15" - roundness="0.4"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#191919" - inner="#999999ff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="25" - roundness="0.4"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#000000" - inner="#464646ff" - inner_sel="#464646ff" - item="#ffffffff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="15" - shadedown="-15" - roundness="0.666666"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#191919" - inner="#999999ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0" - roundness="0.5"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#191919" - inner="#b4b4b4ff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-20" - shadedown="0" - roundness="1"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#191919" - inner="#b4b4b4ff" - inner_sel="#999999ff" - item="#808080ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-20" - shadedown="0" - roundness="1"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#191919" - inner="#808080ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0" - roundness="0.4"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#000000" - inner="#464646ff" - inner_sel="#464646ff" - item="#ffffffff" - text="#ffffff" - text_sel="#cccccc" - show_shaded="TRUE" - shadetop="15" - shadedown="-15" - roundness="0.4"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#3f3f3fff" - inner_sel="#5680c2ff" - item="#ffffffff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="25" - shadedown="-20" - roundness="0.4"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#a0a0a0" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20" - roundness="0.5"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#191919e6" - inner_sel="#8c8c8cff" - item="#2d2d2de6" - text="#a0a0a0" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10" - roundness="1"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20" - roundness="0.5"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#5680c2ff" - item="#acacac80" - text="#ffffff" - text_sel="#000000" - show_shaded="TRUE" - shadetop="38" - shadedown="0" - roundness="0.5"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#323232" - inner="#505050b4" - inner_sel="#646464b4" - item="#808080ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="-5" - roundness="1"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#bebebeff" - inner_sel="#646464b4" - item="#808080ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0" - roundness="0.5"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#5680c2ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0" - roundness="0.4"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#73be4c" - inner_anim_sel="#5aa633" - inner_key="#f0eb64" - inner_key_sel="#d7d34b" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - inner_overridden="#000000" - inner_overridden_sel="#000000" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - <wcol_tab> - <ThemeWidgetColors outline="#3c3c3c" - inner="#535353ff" - inner_sel="#727272ff" - item="#5a5a5aff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="0" - shadedown="0" - roundness="0.5"> - </ThemeWidgetColors> - </wcol_tab> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#404040" - clipping_border_3d="#313131ff" - wire="#000000" - wire_edit="#000000" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - text_grease_pencil="#b5e61d" - object_selected="#f15800" - object_active="#ffaa40" - text_keyframe="#ddd700" - camera="#000000" - empty="#000000" - light="#00000028" - speaker="#000000" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#00a5ff" - vertex_unreferenced="#000000" - edge_select="#ffa000" - edge_seam="#db2512" - edge_sharp="#00ffff" - edge_crease="#cc0099" - edge_bevel="#00a5ff" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#00000012" - face_select="#ff85003c" - face_dot="#ff8500" - facedot_size="4" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#000000" - extra_face_angle="#000080" - extra_face_area="#002000" - editmesh_active="#ffffff80" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - bone_solid="#c8c8c8" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#b44d4d" - view_overlay="#000000" - transform="#ffffff" - frame_current="#60c040" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f" - outline_width="1"> - <space> - <ThemeSpaceGradient title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#72727280" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#000000" - high_gradient="#393939"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#5e5e5e" - frame_current="#60c040" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="6" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ff8500" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#6b6b6b" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#ff8c19"> - <space> - <ThemeSpaceGeneric back="#4c4c4c" - title="#000000" - text="#fafafa" - text_hi="#0f0f0f" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#6b6b6b" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#5e5e5e" - frame_current="#60c040" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - keyframe_scale_factor="1" - summary="#cc701a66"> - <space> - <ThemeSpaceGeneric back="#6b6b6b" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - face="#ffffff0a" - face_select="#ff85003c" - face_dot="#ff8500" - facedot_size="3" - freestyle_face_mark="#00000000" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#0000004c" - preview_stitch_face="#7f7f0033" - preview_stitch_edge="#ff00ff33" - preview_stitch_vert="#0000ff33" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#00000000" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#353535" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#72727280" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#404040" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#747474" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#72727280" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#404040" - selected_text="#c67777" - cursor="#ff0000" - syntax_builtin="#800050" - syntax_symbols="#4c4c4c" - syntax_special="#5f5f00" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#006432" - syntax_string="#640000" - syntax_numbers="#0000c8"> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#f15800" - node_active="#ffaa40" - wire="#000000" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#7f7070" - node_backdrop="#9b9b9ba0" - converter_node="#686a75" - color_node="#6c696f" - group_node="#69756e" - group_socket_node="#dfca35" - frame_node="#9b9b9ba0" - matte_node="#977474" - distor_node="#749797" - noodle_curving="5" - input_node="#646464" - output_node="#646464" - filter_node="#6c696f" - vector_node="#6c696f" - texture_node="#6c696f" - shader_node="#6c696f" - script_node="#6c696f" - pattern_node="#6c696f" - layout_node="#6c696f"> - <space> - <ThemeSpaceGeneric back="#393939" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#72727280" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#82878c"> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#6080ff" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#393939" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#72727280" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000019" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <topbar> - <ThemeTopBar> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#535353ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#72727280" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000000" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTopBar> - </topbar> - <statusbar> - <ThemeStatusBar> - <space> - <ThemeSpaceGeneric back="#393939" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272ff" - header_text="#000000" - header_text_hi="#ffffff" - button="#72727280" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - sub_back="#00000000" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeStatusBar> - </statusbar> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/dark_blue_gradient.xml b/release/scripts/presets/interface_theme/dark_blue_gradient.xml deleted file mode 100644 index 589aeab3a50..00000000000 --- a/release/scripts/presets/interface_theme/dark_blue_gradient.xml +++ /dev/null @@ -1,1179 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#801a1a" - axis_y="#1a801a" - axis_z="#1a1a80"> - <wcol_regular> - <ThemeWidgetColors outline="#191919" - inner="#4179b848" - inner_sel="#4179b8ff" - item="#191919ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="31" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#303030" - inner="#172e4535" - inner_sel="#48709e9d" - item="#ffffffff" - text="#b8b8b8" - text_sel="#000000" - show_shaded="TRUE" - shadetop="56" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#303030" - inner="#7a8287ff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="-25"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#303030" - inner="#4179b851" - inner_sel="#4179b8ff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="-25"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#303030" - inner="#48607999" - inner_sel="#577ba1ff" - item="#191919ff" - text="#b8b8b8" - text_sel="#000000" - show_shaded="TRUE" - shadetop="17" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#303030" - inner="#5e6d7d51" - inner_sel="#667686ff" - item="#000000ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="-25"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#303030" - inner="#213e5d7e" - inner_sel="#667686ff" - item="#3f76b0ff" - text="#d7d7d7" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-25" - shadedown="10"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#2a2a2a" - inner="#39424bcc" - inner_sel="#667686bf" - item="#191919ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#2c2c2c" - inner="#444444ff" - inner_sel="#41618400" - item="#7a7a7aff" - text="#b8b8b8" - text_sel="#cccccc" - show_shaded="TRUE" - shadetop="25" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#4978aa75" - inner_sel="#4978aaff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#000000" - show_shaded="TRUE" - shadetop="25" - shadedown="0"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#26313ce8" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="25" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#1d2329e6" - inner_sel="#8c8c8cff" - item="#416184e6" - text="#a0a0a0" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#3e79b600" - inner_sel="#4978aaff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#000000" - show_shaded="TRUE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#2d2d2d" - inner="#376fa91a" - inner_sel="#85b9ef77" - item="#264b7079" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#bebebeff" - inner_sel="#646464b4" - item="#444444ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#3e79b600" - inner_sel="#1d4f81b7" - item="#5a5a5aff" - text="#f0f0f0" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-35" - shadedown="20"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#339900" - inner_anim_sel="#2b8000" - inner_key="#999300" - inner_key_sel="#666200" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#666666" - wire="#000000" - wire_edit="#000000" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#00000028" - speaker="#000000" - camera="#000000" - view_overlay="#000000" - empty="#000000" - object_selected="#0069ff" - object_active="#80b5ff" - object_grouped="#083008" - object_grouped_active="#55bb55" - transform="#ffffff" - vertex="#657780" - vertex_select="#ff7c00" - vertex_size="3" - vertex_unreferenced="#000000" - edge_select="#cb7027" - edge_seam="#db2512" - edge_sharp="#00ffff" - edge_crease="#cc0099" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#00000036" - face_select="#a47c5b73" - face_dot="#be6925" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#000000" - extra_face_angle="#000080" - extra_face_area="#002000" - editmesh_active="#ffffff80" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_solid="#c8c8c8" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - frame_current="#60c040" - outline_width="1" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#000000" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#000000" - text="#b8b8b8" - text_hi="#e9e9e9" - header="#3b3b3b" - header_text="#b9b9b9" - header_text_hi="#ffffff" - button="#1d232980" - button_title="#979797" - button_text="#e8e8e8" - button_text_hi="#ffffff" - tab_active="#2f5175" - tab_inactive="#1d2329" - tab_back="#42505eff" - tab_outline="#42505e"> - <gradients> - <ThemeGradientColors show_grad="TRUE" - gradient="#0f0f0f" - high_gradient="#42505e"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#282828b0" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#585858" - frame_current="#60c040" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#52606e" - dopesheet_subchannel="#545d66" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ff8500" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#8b8b8b" - list_text="#8b8b8b" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#755129"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#8b8b8b" - text="#cacaca" - text_hi="#0f0f0f" - header="#3b3b3b" - header_text="#8b8b8b" - header_text_hi="#ffffff" - button="#303030ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#8b8b8b" - list_text="#8b8b8b" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#585858" - view_sliders="#969696" - active_action="#00000000" - active_action_unset="#00000000" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#000000" - transition_strips_selected="#000000" - meta_strips="#000000" - meta_strips_selected="#000000" - sound_strips="#000000" - sound_strips_selected="#000000" - tweak="#000000" - tweak_duplicate="#000000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#ded8d7"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#585858" - frame_current="#60c040" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#bddae8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#ace493" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - summary="#00000000"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#000000" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#aaaaaaff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#32adec" - vertex_select="#be6925" - vertex_size="3" - vertex_unreferenced="#000000" - face="#a47c5b0a" - face_select="#a47c5b3c" - face_dot="#ffffff" - facedot_size="3" - freestyle_face_mark="#00000000" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#303030ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#7f7f7f" - text="#999999" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#1a1a1acc" - button_title="#8b8b8b" - button_text="#cccccc" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#636363" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#636363" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#1a1a1acc" - button_title="#afafaf" - button_text="#b3b3b3" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#979797" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#b8b8b8" - button_text="#b8b8b8" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#0000002a" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#2e2e2e" - selected_text="#4e4e8f" - cursor="#8b8bff" - syntax_builtin="#ed4800" - syntax_symbols="#ff8f00" - syntax_special="#c080d0" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#cd8b00" - syntax_string="#ffcd8b" - syntax_numbers="#f0ad6d"> - <space> - <ThemeSpaceGeneric back="#29201f" - title="#8b8b8b" - text="#cfbfad" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#5b5b5b" - frame_current="#338aff" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#000000" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#ffffff" - node_active="#ffffff" - wire="#000000" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#7f7070" - node_backdrop="#9b9b9ba0" - converter_node="#575675" - color_node="#f2b077" - group_node="#1e7524" - group_socket_node="#dfca35" - frame_node="#9a9b9ba0" - matte_node="#000000" - distor_node="#000000" - noodle_curving="5" - input_node="#79bef2" - output_node="#79bef2" - filter_node="#ff0000" - vector_node="#6de8e4" - texture_node="#f2b077" - shader_node="#e88daa" - script_node="#f2b077" - pattern_node="#a67c49" - layout_node="#000000"> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#8b8b8b" - text="#dbdbdb" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#3b3b3b80" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#82878c"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#000000" - text="#cacaca" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#141414" - text_hi="#000000" - header="#3b3b3b" - header_text="#c2c2c2" - header_text_hi="#000000" - button="#3b3b3bff" - button_title="#000000" - button_text="#000000" - button_text_hi="#000000" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#000000" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#b8b8b8" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#202020" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#303030" - header_text="#000000" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#393939" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#313131" - header_text="#000000" - header_text_hi="#ffffff" - button="#1a1a1acc" - button_title="#999999" - button_text="#939393" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/default++.xml b/release/scripts/presets/interface_theme/default++.xml deleted file mode 100644 index 3599a094381..00000000000 --- a/release/scripts/presets/interface_theme/default++.xml +++ /dev/null @@ -1,1173 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#ff6d66" - axis_y="#90ff66" - axis_z="#6693ff"> - <wcol_regular> - <ThemeWidgetColors outline="#191919" - inner="#999999ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#191919" - inner="#999999ff" - inner_sel="#ff9b5bff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#000000" - inner="#4d4d4dff" - inner_sel="#8ebaffff" - item="#ffffffff" - text="#ffffff" - text_sel="#000000" - show_shaded="TRUE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#191919" - inner="#999999ff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="25"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#000000" - inner="#464646ff" - inner_sel="#abef98ff" - item="#161616ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#191919" - inner="#999999ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#191919" - inner="#b4b4b4ff" - inner_sel="#ff9b5bff" - item="#5a5a5aff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#191919" - inner="#b4b4b4ff" - inner_sel="#ff9b5bff" - item="#808080ff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#191919" - inner="#808080ff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#000000" - inner="#464646ff" - inner_sel="#464646ff" - item="#ffffffff" - text="#ffffff" - text_sel="#cccccc" - show_shaded="TRUE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#3f3f3fff" - inner_sel="#8ebaffff" - item="#ffffffff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#727272ff" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#646464ff" - inner_sel="#8ebaffff" - item="#8ebaffff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="38" - shadedown="-5"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#8ebaffff" - item="#646464ff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="38" - shadedown="-5"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#323232" - inner="#505050b4" - inner_sel="#646464b4" - item="#808080ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="-5"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#bebebeff" - inner_sel="#646464b4" - item="#808080ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#8ebaffff" - item="#5a5a5aff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#73be4c" - inner_anim_sel="#5aa633" - inner_key="#f0eb64" - inner_key_sel="#d7d34b" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#404040" - clipping_border_3d="#323232ff" - wire="#1a1a1a" - wire_edit="#1a1a1a" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - text_grease_pencil="#b5e61d" - object_selected="#f15800" - object_active="#ffaa40" - object_grouped="#083008" - object_grouped_active="#55bb55" - text_keyframe="#ddd700" - camera="#000000" - empty="#000000" - light="#00000028" - speaker="#000000" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="5" - vertex_unreferenced="#000000" - edge_select="#ffa000" - edge_seam="#db2512" - edge_sharp="#00ffff" - edge_crease="#cc0099" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#00000012" - face_select="#ff85003c" - face_dot="#ff8500" - facedot_size="4" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#202000" - extra_face_angle="#000080" - extra_face_area="#002000" - editmesh_active="#ffffff80" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - bone_solid="#c8c8c8" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#b44d4d" - view_overlay="#000000" - transform="#ffffff" - frame_current="#60c040" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f" - outline_width="3"> - <space> - <ThemeSpaceGradient title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#000000" - high_gradient="#5a5a5a"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#5e5e5e" - frame_current="#ff9b5b" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ffffff" - vertex_size="6" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ffffff" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#6b6b6b" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#d8834d"> - <space> - <ThemeSpaceGeneric back="#4c4c4c" - title="#000000" - text="#fafafa" - text_hi="#0f0f0f" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#ff9b5b"> - <space> - <ThemeSpaceGeneric back="#6b6b6b" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#5e5e5e" - frame_current="#ff9b5b" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - keyframe_scale_factor="1" - summary="#cc701a66"> - <space> - <ThemeSpaceGeneric back="#6b6b6b" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - face="#ffffff0a" - face_select="#ff85003c" - face_dot="#ff8500" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#0000004c" - preview_stitch_face="#7f7f0033" - preview_stitch_edge="#ff00ff33" - preview_stitch_vert="#0000ff33" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#353535" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#404040" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#ff9b5b" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#000000"> - <space> - <ThemeSpaceGeneric back="#747474" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#404040" - selected_text="#c67777" - cursor="#ff0000" - syntax_builtin="#800050" - syntax_symbols="#4c4c4c" - syntax_special="#5f5f00" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#006432" - syntax_string="#640000" - syntax_numbers="#0000c8"> - <space> - <ThemeSpaceGeneric back="#999999" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#5b5b5b" - frame_current="#ff9b5b" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#f15800" - node_active="#ffaa40" - wire="#000000" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#7f7070" - node_backdrop="#9b9b9be6" - converter_node="#686a75" - color_node="#6c696f" - group_node="#69756e" - group_socket_node="#dfca35" - frame_node="#9b9b9ba0" - matte_node="#977474" - distor_node="#749797" - noodle_curving="5" - input_node="#646464" - output_node="#646464" - filter_node="#6c696f" - vector_node="#6c696f" - texture_node="#6c696f" - shader_node="#6c696f" - script_node="#6c696f" - pattern_node="#6c696f" - layout_node="#6c696f"> - <space> - <ThemeSpaceGeneric back="#393939" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#646464" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#82878c"> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#8ebaff" - info_selected_text="#000000" - info_error="#e24242" - info_error_text="#000000" - info_warning="#f18a48" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#6080ff" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - marker_outline="#000000" - marker="#37a879" - active_marker="#ffffff" - selected_marker="#eeee0d" - disabled_marker="#8d4141" - locked_marker="#7f7f7f" - path_before="#ff6d66" - path_after="#8ebaff" - frame_current="#ff9b5b" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#f48a48" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#393939" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#727272" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/elsyiun.xml b/release/scripts/presets/interface_theme/elsyiun.xml deleted file mode 100644 index 51af13a6009..00000000000 --- a/release/scripts/presets/interface_theme/elsyiun.xml +++ /dev/null @@ -1,1172 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#dc0000" - axis_y="#00dc00" - axis_z="#0000dc"> - <wcol_regular> - <ThemeWidgetColors outline="#191919" - inner="#4e4e4eff" - inner_sel="#b67e3eff" - item="#191919ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#303030" - inner="#414141ff" - inner_sel="#b67e3eff" - item="#191919ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#303030" - inner="#414141ff" - inner_sel="#b67e3eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#000000" - show_shaded="TRUE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#303030" - inner="#7a8287ff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#303030" - inner="#4e4e4eff" - inner_sel="#a9753aff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#303030" - inner="#555555ff" - inner_sel="#796348ff" - item="#191919ff" - text="#b8b8b8" - text_sel="#000000" - show_shaded="TRUE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#303030" - inner="#414141ff" - inner_sel="#999999ff" - item="#7a7a7aff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#303030" - inner="#606068ff" - inner_sel="#91919dff" - item="#4b4b4bff" - text="#a2a2a2" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-10" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#2a2a2a" - inner="#4b4b4bff" - inner_sel="#646464ff" - item="#191919ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="-7"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#2c2c2c" - inner="#444444ff" - inner_sel="#464646ff" - item="#7a7a7aff" - text="#b8b8b8" - text_sel="#cccccc" - show_shaded="TRUE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#3f3f3fff" - inner_sel="#f78805ff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#000000" - show_shaded="TRUE" - shadetop="25" - shadedown="0"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#3b3b3bff" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#414141e6" - inner_sel="#8c8c8cff" - item="#b67e3ee6" - text="#a0a0a0" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#b67e3eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#000000" - show_shaded="TRUE" - shadetop="0" - shadedown="20"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#2d2d2d" - inner="#6c707200" - inner_sel="#646464b4" - item="#414141ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#bebebeff" - inner_sel="#646464b4" - item="#444444ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#a9753777" - item="#5a5a5aff" - text="#e0e0e0" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#339900" - inner_anim_sel="#2b8000" - inner_key="#999300" - inner_key_sel="#666200" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#585858" - wire="#000000" - wire_edit="#000000" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#00000028" - speaker="#000000" - camera="#000000" - view_overlay="#000000" - empty="#000000" - object_selected="#ff8500" - object_active="#ffc280" - object_grouped="#083008" - object_grouped_active="#55bb55" - transform="#ffffff" - vertex="#657780" - vertex_select="#ff7c00" - vertex_size="3" - vertex_unreferenced="#000000" - edge_select="#cb7027" - edge_seam="#db2512" - edge_sharp="#00ffff" - edge_crease="#cc0099" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#00000036" - face_select="#a47c5b73" - face_dot="#be6925" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#202000" - extra_face_angle="#000080" - extra_face_area="#002000" - editmesh_active="#ffffff80" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_solid="#c8c8c8" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - frame_current="#60c040" - outline_width="1" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#000000" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#000000" - text="#b8b8b8" - text_hi="#e9e9e9" - header="#3b3b3b" - header_text="#b9b9b9" - header_text_hi="#ffffff" - button="#3b3b3b57" - button_title="#979797" - button_text="#c5c5c5" - button_text_hi="#ffffff" - tab_active="#b67e3e" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#000000" - high_gradient="#4b4b4b"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#585858" - frame_current="#60c040" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#52606e" - dopesheet_subchannel="#545d66" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ff8500" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#8b8b8b" - list_text="#8b8b8b" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#755129"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#8b8b8b" - text="#cacaca" - text_hi="#0f0f0f" - header="#3b3b3b" - header_text="#8b8b8b" - header_text_hi="#ffffff" - button="#303030ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#585858" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#585858" - frame_current="#60c040" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - summary="#cc701a66"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#000000" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#aaaaaaff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#32adec" - vertex_select="#be6925" - vertex_size="3" - vertex_unreferenced="#000000" - face="#a47c5b0a" - face_select="#a47c5b3c" - face_dot="#ffffff" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#303030ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#8b8b8b" - text="#8b8b8b" - text_hi="#ffffff" - header="#303030" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#303030ff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#818181" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#636363" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#3b3b3b42" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#979797" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#b8b8b8" - button_text="#b8b8b8" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#2e2e2e" - selected_text="#4e4e8f" - cursor="#8b8bff" - syntax_builtin="#808bed" - syntax_symbols="#4c4c4c" - syntax_special="#c080d0" - syntax_preprocessor="#409090" - syntax_reserved="#8c3c00" - syntax_comment="#cd8b00" - syntax_string="#ffcd8b" - syntax_numbers="#f0ad6d"> - <space> - <ThemeSpaceGeneric back="#1e1e27" - title="#8b8b8b" - text="#cfbfad" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#5b5b5b" - frame_current="#60c040" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#000000" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#ffffff" - node_active="#ffffff" - wire="#000000" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#7f7070" - node_backdrop="#9b9b9ba0" - converter_node="#575675" - color_node="#2c6f6f" - group_node="#1e7524" - group_socket_node="#dfca35" - frame_node="#9a9b9ba0" - matte_node="#977474" - distor_node="#749797" - noodle_curving="5" - input_node="#e08706" - output_node="#e08706" - filter_node="#2c6f6f" - vector_node="#2c6f6f" - texture_node="#2c6f6f" - shader_node="#2c6f6f" - script_node="#2c6f6f" - pattern_node="#2c6f6f" - layout_node="#2c6f6f"> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#8b8b8b" - text="#dbdbdb" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#3b3b3b2f" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#82878c"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#000000" - text="#cacaca" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#727272" - title="#000000" - text="#000000" - text_hi="#000000" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#000000" - button="#3b3b3bff" - button_title="#000000" - button_text="#000000" - button_text_hi="#000000" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#000000" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#b8b8b8" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#4e4e8f80"> - <space> - <ThemeSpaceGeneric back="#202020" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#303030" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#393939" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#313131" - header_text="#b8b8b8" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/graph.xml b/release/scripts/presets/interface_theme/graph.xml deleted file mode 100644 index 904fcdf41ec..00000000000 --- a/release/scripts/presets/interface_theme/graph.xml +++ /dev/null @@ -1,1172 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#dc0000" - axis_y="#00dc00" - axis_z="#0000dc"> - <wcol_regular> - <ThemeWidgetColors outline="#3b3b3b" - inner="#5e5e5eff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#3b3b3b" - inner="#444444ff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#3b3b3b" - inner="#444444ff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#3b3b3b" - inner="#5e5e5eff" - inner_sel="#999999ff" - item="#414141ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#3b3b3b" - inner="#5e5e5eff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#3b3b3b" - inner="#5e5e5eff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#3b3b3b" - inner="#444444ff" - inner_sel="#999999ff" - item="#6d6d6dff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#3b3b3b" - inner="#5e5e5eff" - inner_sel="#999999ff" - item="#414141ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-10" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#3b3b3b" - inner="#505050ff" - inner_sel="#4e4e4eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="-7"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#444444" - inner="#444444ff" - inner_sel="#464646ff" - item="#7a7a7aff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#3b3b3b" - inner="#3f3f3fff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="0"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#3b3b3b" - inner="#3b3b3bff" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#2a2a2a" - inner="#2a2a2aff" - inner_sel="#8c8c8cff" - item="#607f9ee6" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#202020" - inner="#202020ff" - inner_sel="#202020ff" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#3b3b3b" - inner="#3f3f3f00" - inner_sel="#607f9eff" - item="#ffffffff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="20"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#3b3b3b" - inner="#444444ff" - inner_sel="#607f9eff" - item="#5e5e5eff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#3b3b3b" - inner="#607f9eff" - inner_sel="#646464b4" - item="#444444ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#3b3b3b" - inner="#3f3f3f00" - inner_sel="#607f9eff" - item="#414141ff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#607f9e" - inner_anim_sel="#607f9e" - inner_key="#4291dc" - inner_key_sel="#4291dc" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.6"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#585858" - wire="#000000" - wire_edit="#161616" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#00000028" - speaker="#000000" - camera="#8d8c8d" - view_overlay="#000000" - empty="#000000" - object_selected="#00b5ff" - object_active="#fbf1ff" - object_grouped="#083008" - object_grouped_active="#55bb55" - transform="#ffffff" - vertex="#000000" - vertex_select="#0067cb" - vertex_size="3" - vertex_unreferenced="#000000" - edge_select="#0067cb" - edge_seam="#00ace4" - edge_sharp="#9c00ff" - edge_crease="#f1f4ff" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#b6b4af49" - face_select="#005fa43e" - face_dot="#00beb0" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - nurb_uline="#89908a" - nurb_vline="#fff8f4" - nurb_sel_uline="#2400ff" - nurb_sel_vline="#f0deeb" - act_spline="#00c6db" - handle_free="#000000" - handle_auto="#1c00ff" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#7b807e" - handle_sel_free="#000000" - handle_sel_auto="#9aa3a1" - handle_sel_align="#f0e6e9" - lastsel_point="#ffffff" - extra_edge_len="#fff3fa" - extra_edge_angle="#202000" - extra_face_angle="#000080" - extra_face_area="#002000" - editmesh_active="#00f6ff5e" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_solid="#ffffff" - bone_pose="#00b5ff" - bone_pose_active="#fff3fa" - frame_current="#60c040" - outline_width="2" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#000000" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#000000" - text="#e4e4e4" - text_hi="#b9b9b9" - header="#3b3b3b" - header_text="#bababa" - header_text_hi="#ffffff" - button="#3b3b3b45" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#9e9e9e" - tab_active="#3b3b3b" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#222222"> - <gradients> - <ThemeGradientColors show_grad="TRUE" - gradient="#414141" - high_gradient="#545d69"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#6d6d6d" - frame_current="#4291dc" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#607f9e" - dopesheet_subchannel="#42566d" - channel_group="#42566d" - active_channels_group="#326799" - vertex="#333333" - vertex_select="#fdf4ff" - vertex_size="6" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#8d8e90" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#b6b5b6" - handle_sel_free="#000000" - handle_sel_auto="#fdfffc" - handle_sel_align="#148bce" - handle_auto_clamped="#7e7e7e" - handle_sel_auto_clamped="#148bce" - lastsel_point="#ffffff" - handle_vertex="#242324" - handle_vertex_select="#ffeeee" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#5d5d5d" - title="#ffffff" - text="#ffffff" - text_hi="#fcfcfc" - header="#3b3b3b" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#8b8b8b" - list_text="#979797" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#607f9e"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#e4e4e4" - text="#cacaca" - text_hi="#0f0f0f" - header="#3b3b3b" - header_text="#8b8b8b" - header_text_hi="#ffffff" - button="#303030ff" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#6e6e6e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#4291dc"> - <space> - <ThemeSpaceGeneric back="#5d5d5d" - title="#ffffff" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#6d6d6d" - frame_current="#4291dc" - value_sliders="#000000" - view_sliders="#929292" - dopesheet_channel="#607f9e" - dopesheet_subchannel="#42566d" - channels="#707070" - channels_selected="#9accff" - channel_group="#42566d" - active_channels_group="#326799" - long_key="#9b9b9b" - long_key_selected="#4291dc" - keyframe="#2c2c2c" - keyframe_selected="#fff1f1" - keyframe_extreme="#fbf9fd" - keyframe_extreme_selected="#f2efef" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#e5e2e2" - keyframe_jitter_selected="#beb8c0" - keyframe_border="#2c2c2cff" - keyframe_border_selected="#f2efefff" - summary="#3b3b3b6d"> - <space> - <ThemeSpaceGeneric back="#5d5d5d" - title="#ffffff" - text="#ffffff" - text_hi="#fcfcfc" - header="#3b3b3b" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#3b3b3b" - list_title="#000000" - list_text="#979797" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#0094ff" - vertex_size="3" - vertex_unreferenced="#000000" - face="#a47c5b0a" - face_select="#005fa480" - face_dot="#1fcbff" - facedot_size="2" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#5c5c5c" - edge_select="#005fa4" - scope_back="#303030ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#5e5e5e" - title="#ffffff" - text="#8b8b8b" - text_hi="#ffffff" - header="#303030" - header_text="#000000" - header_text_hi="#b8b8b8" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#3b3b3b" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#222222"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#6e6e6e" - window_sliders="#a0a0a0" - movie_strip="#5794c3" - movieclip_strip="#20208f" - image_strip="#bdb7b6" - scene_strip="#777777" - audio_strip="#6057c3" - effect_strip="#ffffff" - transition_strip="#726d70" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#4291dc" - keyframe="#ff8500" - draw_action="#607f9e" - preview_back="#3b3b3b" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#5d5d5d" - title="#e4e4e4" - text="#ffffff" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#b7b7b7" - button="#3b3b3b42" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#3b3b3b" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#232323"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#3b3b3bff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#c7c7c7" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#c7c7c7" - button_text="#969696" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#2e2e2e" - selected_text="#607f9e" - cursor="#8b8bff" - syntax_builtin="#009eed" - syntax_symbols="#607f9e" - syntax_special="#009eed" - syntax_preprocessor="#409090" - syntax_reserved="#8c3c00" - syntax_comment="#757575" - syntax_string="#f0ad6d" - syntax_numbers="#f0ad6d"> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#fefefe" - text="#cfcfcf" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#3b3b3b" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#222222"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#6d6d6d" - frame_current="#4291dc" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#5d5d5d" - title="#e4e4e4" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#b8b8b8" - button="#727272ff" - button_title="#b4b4b4" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3b3b3b"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#fff4f8" - node_active="#ffffff" - wire="#292929" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#909090" - node_backdrop="#444444ff" - converter_node="#292929" - color_node="#292929" - group_node="#5d5d5d" - group_socket_node="#1f00c7" - frame_node="#505050aa" - matte_node="#0076b6" - distor_node="#292929" - noodle_curving="4" - input_node="#009e9e" - output_node="#1f00c7" - filter_node="#0076b6" - vector_node="#292929" - texture_node="#009e9e" - shader_node="#0076b6" - script_node="#0076b6" - pattern_node="#008db6" - layout_node="#50b1b6"> - <space> - <ThemeSpaceGeneric back="#5e5e5e" - title="#ffffff" - text="#ffffff" - text_hi="#ffffff" - header="#383838" - header_text="#3b3b3b" - header_text_hi="#b7b7b7" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#3b3b3b" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#212121"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#ffffff" - text="#000000" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#727272" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#222222"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#607f9e"> - <space> - <ThemeSpaceGeneric back="#4b4b4b" - title="#e4e4e4" - text="#cacaca" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#e4e4e4" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#607f9e" - info_selected_text="#ffffff" - info_error="#3b3b3b" - info_error_text="#ff0000" - info_warning="#3b3b3b" - info_warning_text="#ffe100" - info_info="#3b3b3b" - info_info_text="#25ff00" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#e4e4e4" - text="#868686" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#ffffff" - header_text_hi="#000000" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#000000" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#e4e4e4" - text="#b8b8b8" - text_hi="#ffffff" - header="#3b3b3b" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#838383" - line_input="#ffffff" - line_info="#607f9e" - line_error="#ff0013" - cursor="#2e2e2e" - select="#4e4e8f80"> - <space> - <ThemeSpaceGeneric back="#3b3b3b" - title="#e4e4e4" - text="#000000" - text_hi="#ffffff" - header="#303030" - header_text="#000000" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#5e5e5e" - title="#ffffff" - text="#8b8b8b" - text_hi="#ffffff" - header="#303030" - header_text="#000000" - header_text_hi="#b8b8b8" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#3b3b3b" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#222222"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/hexagon.xml b/release/scripts/presets/interface_theme/hexagon.xml deleted file mode 100644 index 1ca52b76253..00000000000 --- a/release/scripts/presets/interface_theme/hexagon.xml +++ /dev/null @@ -1,1172 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#dc0000" - axis_y="#00dc00" - axis_z="#0000dc"> - <wcol_regular> - <ThemeWidgetColors outline="#191919" - inner="#8d909fff" - inner_sel="#859cb9ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#000000" - inner="#8d909fff" - inner_sel="#859cb9ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="0"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#000000" - inner="#8b8d9aff" - inner_sel="#859cb9ff" - item="#ffffffff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="10" - shadedown="0"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#464646" - inner="#9b9eadff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="25"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#464646" - inner="#bbbbbbff" - inner_sel="#777777ff" - item="#ffffffff" - text="#cecece" - text_sel="#000000" - show_shaded="TRUE" - shadetop="10" - shadedown="0"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#464646" - inner="#afafafff" - inner_sel="#859cb9ff" - item="#191919ff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="10" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#464646" - inner="#8d909fff" - inner_sel="#999999ff" - item="#5d5d5dff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-10" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#3f3f3f" - inner="#b4b4b4ff" - inner_sel="#999999ff" - item="#b0b0b0ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#191919" - inner="#80828eff" - inner_sel="#646464ff" - item="#191919ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#3d3d3d" - inner="#555d6dff" - inner_sel="#464646ff" - item="#9d9d9dff" - text="#ffffff" - text_sel="#cccccc" - show_shaded="TRUE" - shadetop="15" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#3f3f3fff" - inner_sel="#50c8ffff" - item="#ffffffff" - text="#d8d8d8" - text_sel="#000000" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#393c44eb" - inner_sel="#2d2d2dff" - item="#646464ff" - text="#cecece" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="40" - shadedown="-40"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#5a5e6ae6" - inner_sel="#8c8c8cff" - item="#8f92a1e6" - text="#d6d6d6" - text_sel="#000000" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#69a5beff" - item="#ffffffff" - text="#d9d9d9" - text_sel="#000000" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#4f5057" - inner="#5050502e" - inner_sel="#646464b4" - item="#737a8eff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#bebebeff" - inner_sel="#646464b4" - item="#444444ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#50c8ff62" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#73be4c" - inner_anim_sel="#5aa633" - inner_key="#f0eb64" - inner_key_sel="#d7d34b" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#5e5e83" - wire="#000000" - wire_edit="#000000" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#00000028" - speaker="#000000" - camera="#000000" - view_overlay="#000000" - empty="#000000" - object_selected="#52c6ff" - object_active="#6ed8ff" - object_grouped="#104010" - object_grouped_active="#55bb55" - transform="#ffffff" - vertex="#334cca" - vertex_select="#0097da" - vertex_size="3" - vertex_unreferenced="#000000" - edge_select="#1151ce" - edge_seam="#e69632" - edge_sharp="#ff2020" - edge_crease="#cc0099" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#affff418" - face_select="#1151ce66" - face_dot="#4fc9ff" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#202000" - extra_face_angle="#00008a" - extra_face_area="#002000" - editmesh_active="#00e8ff80" - normal="#00ffff" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_solid="#c8c8c8" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - frame_current="#60c040" - outline_width="1" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#000000" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#000000" - text="#000000" - text_hi="#ffffff" - header="#646875" - header_text="#000000" - header_text_hi="#ffffff" - button="#6c717f57" - button_title="#eaeaea" - button_text="#d7d7d7" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#000000" - high_gradient="#7f818d"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#58587c" - frame_current="#60c040" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ff8500" - handle_vertex_size="3"> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#646875ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#6c717f" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#69a5be"> - <space> - <ThemeSpaceGeneric back="#646875" - title="#000000" - text="#000000" - text_hi="#0f0f0f" - header="#5c606c" - header_text="#dddddd" - header_text_hi="#ffffff" - button="#6c717fff" - button_title="#d7d7d7" - button_text="#d7d7d7" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#646875ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#646875" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#58587c" - frame_current="#60c040" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - summary="#cc701a66"> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#6c717fff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#6c717f" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#334cca" - vertex_select="#50c8ff" - vertex_size="3" - vertex_unreferenced="#000000" - face="#ffffff0a" - face_select="#50c8ff3c" - face_dot="#50c8ff" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#646875ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#646875ff" - button_title="#eeeeee" - button_text="#eeeeee" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#404040" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#90929c" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#64687542" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#646875" - title="#ffffff" - text="#e7e7e7" - text_hi="#ffffff" - header="#646875" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#5a5e6a" - selected_text="#c67777" - cursor="#ff0000" - syntax_builtin="#800050" - syntax_symbols="#4c4c4c" - syntax_special="#5f5f00" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#006432" - syntax_string="#640000" - syntax_numbers="#0000c8"> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#646875ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#58587c" - frame_current="#60c040" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#646875" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#565863" - header_text="#000000" - header_text_hi="#ffffff" - button="#5a5e6aff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#ffffff" - node_active="#ffffff" - wire="#000000" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#7f7070" - node_backdrop="#9b9baca0" - converter_node="#686a84" - color_node="#6c697e" - group_node="#69756e" - group_socket_node="#dfca35" - frame_node="#9a9b9ba0" - matte_node="#977474" - distor_node="#749797" - noodle_curving="5" - input_node="#64647b" - output_node="#64647b" - filter_node="#6c697e" - vector_node="#6c697e" - texture_node="#6c697e" - shader_node="#6c697e" - script_node="#6c697e" - pattern_node="#6c697e" - layout_node="#6c697e"> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#6468752f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a7a7a7" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#6c717fff" - button_title="#d7d7d7" - button_text="#d7d7d7" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#245824" - selected_highlight="#212844"> - <space> - <ThemeSpaceGeneric back="#72747c" - title="#000000" - text="#e2e2e2" - text_hi="#ffffff" - header="#6c717f" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#b4b4b4" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#646875" - header_text="#dddddd" - header_text_hi="#ffffff" - button="#b4b4b4ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#6c717fff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#000000" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc0606" - cursor="#dc6060" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#6c717fff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#7c7e88" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#5c606c" - header_text="#000000" - header_text_hi="#ffffff" - button="#646875ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/modern_minimalist.xml b/release/scripts/presets/interface_theme/modern_minimalist.xml deleted file mode 100644 index 3b982514f4f..00000000000 --- a/release/scripts/presets/interface_theme/modern_minimalist.xml +++ /dev/null @@ -1,1183 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.01" - menu_shadow_width="16" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff00" - axis_x="#dc0000" - axis_y="#00dc00" - axis_z="#0000dc"> - <wcol_regular> - <ThemeWidgetColors outline="#333333" - inner="#2d2d2dff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#333333" - inner="#2d2d2dff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#333333" - inner="#2d2d2dff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#333333" - inner="#2d2d2dff" - inner_sel="#607f9eff" - item="#2d2d2dff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#333333" - inner="#383838ff" - inner_sel="#607f9eff" - item="#e6e6e6ff" - text="#666666" - text_sel="#bfbfbf" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#262626" - inner="#323232ff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#333333" - inner="#2d2d2dff" - inner_sel="#607f9eff" - item="#4d4d4dff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#333333" - inner="#404040ff" - inner_sel="#607f9eff" - item="#2d2d2dff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-10" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#333333" - inner="#212121ff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="-7"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#333333" - inner="#2d2d2dff" - inner_sel="#607f9eff" - item="#656565ff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="5"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#333333" - inner="#2d2d2dff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="0"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#333333" - inner="#202020ff" - inner_sel="#607f9eff" - item="#202020ff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#333333" - inner="#202020ff" - inner_sel="#607f9eff" - item="#607f9eff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#333333" - inner="#202020ff" - inner_sel="#607f9eff" - item="#646464ff" - text="#607f9e" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#262626" - inner="#202020ff" - inner_sel="#607f9eff" - item="#ffffffff" - text="#999999" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="20"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#202020" - inner="#1a1a1aff" - inner_sel="#607f9eff" - item="#262626ff" - text="#999999" - text_sel="#b0b0b0" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#333333" - inner="#404040ff" - inner_sel="#404040ff" - item="#607f9eff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#323232" - inner="#36363600" - inner_sel="#607f9eff" - item="#323232ff" - text="#999999" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="0" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#006482" - inner_anim_sel="#006482" - inner_key="#006600" - inner_key_sel="#006600" - inner_driven="#9100d7" - inner_driven_sel="#9100d7" - blend="1"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#1e1e1e" - clipping_border_3d="#313131ff" - wire="#666666" - wire_edit="#bfbfbf" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - text_grease_pencil="#b5e61d" - object_selected="#00d9ff" - object_active="#00ff90" - object_grouped="#95592f" - object_grouped_active="#009652" - text_keyframe="#ddd700" - camera="#8d8c8d" - empty="#8d8c8d" - light="#8d8c8d40" - speaker="#8d8c8d" - vertex="#bfbfbf" - vertex_select="#00bdff" - vertex_size="7" - vertex_unreferenced="#000000" - edge_select="#00c0ff" - edge_seam="#ffe200" - edge_sharp="#fb00ff" - edge_crease="#ff0f00" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#ff7d00" - face="#26262680" - face_select="#0094ff80" - face_dot="#00b5ff" - facedot_size="3" - freestyle_face_mark="#ff8a0433" - nurb_uline="#7b807e" - nurb_vline="#fff8f4" - nurb_sel_uline="#00bdff" - nurb_sel_vline="#f0deeb" - act_spline="#666666" - handle_free="#9c003a" - handle_auto="#805c00" - handle_vect="#b035b1" - handle_sel_vect="#00bdff" - handle_align="#404080" - handle_sel_free="#00bdff" - handle_sel_auto="#00bdff" - handle_sel_align="#00bdff" - lastsel_point="#00ff12" - extra_edge_len="#fff3fa" - extra_edge_angle="#fff200" - extra_face_angle="#009aff" - extra_face_area="#000000" - editmesh_active="#00ff12ff" - normal="#22dddd" - vertex_normal="#225dd4" - split_normal="#dd23dd" - bone_pose="#00b8ff" - bone_pose_active="#00ff12" - bone_solid="#bab5bc" - bundle_solid="#c8c8c8" - camera_path="#4d4d4d" - skin_root="#000000" - view_overlay="#000000" - transform="#ffffff" - frame_current="#60c040" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f" - outline_width="3"> - <space> - <ThemeSpaceGradient title="#000000" - text="#e4e4e4" - text_hi="#b4b4b4" - header="#202020" - header_text="#bababa" - header_text_hi="#ffffff" - button="#262626f9" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#3b3b3b" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#232323" - high_gradient="#333333"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#26262600" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#323232" - frame_current="#4291dc" - window_sliders="#808080" - channels_region="#707070" - dopesheet_channel="#6c3229" - dopesheet_subchannel="#2d4459" - channel_group="#262626" - active_channels_group="#00b264" - vertex="#808080" - vertex_select="#00ffff" - vertex_size="6" - vertex_unreferenced="#404040" - handle_free="#000000" - handle_auto="#8d8e90" - handle_vect="#38b238" - handle_sel_vect="#148bce" - handle_align="#b6b5b6" - handle_sel_free="#148bce" - handle_sel_auto="#fdfffc" - handle_sel_align="#148bce" - handle_auto_clamped="#7e7e7e" - handle_sel_auto_clamped="#148bce" - lastsel_point="#f2f0ff" - handle_vertex="#8d8e90" - handle_vertex_select="#ffffff" - handle_vertex_size="6"> - <space> - <ThemeSpaceGeneric back="#262626" - title="#ffffff" - text="#ffffff" - text_hi="#fcfcfc" - header="#202020" - header_text="#ffffff" - header_text_hi="#bababa" - button="#262626f2" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#1a1a1a" - list_title="#919191" - list_text="#999999" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#607f9e" - scrollbar="#a0a0a0" - scroll_handle="#7f7070" - active_file="#ffffff" - active_file_text="#ffffff"> - <space> - <ThemeSpaceGeneric back="#1a1a1a" - title="#e4e4e4" - text="#cacaca" - text_hi="#0f0f0f" - header="#202020" - header_text="#8b8b8b" - header_text_hi="#ffffff" - button="#262626ff" - button_title="#c7c7c7" - button_text="#e4e4e4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#202020" - list_title="#8b8b8b" - list_text="#8b8b8b" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#323232" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#4291dc"> - <space> - <ThemeSpaceGeneric back="#262626" - title="#ffffff" - text="#ffffff" - text_hi="#ffffff" - header="#202020" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#444444f2" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#1a1a1a" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#323232" - frame_current="#4291dc" - value_sliders="#000000" - view_sliders="#000000" - dopesheet_channel="#5d7b99" - dopesheet_subchannel="#2d4459" - channels="#6a6a6a" - channels_selected="#0094ff" - channel_group="#1a1a1a" - active_channels_group="#00b264" - long_key="#909090" - long_key_selected="#4291dc" - keyframe="#808080" - keyframe_selected="#00ffff" - keyframe_extreme="#fff6ff" - keyframe_extreme_selected="#dedede" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#dedcdc" - keyframe_jitter_selected="#beb8c0" - keyframe_border="#000000ff" - keyframe_border_selected="#0056f2ff" - summary="#66342fff"> - <space> - <ThemeSpaceGeneric back="#262626" - title="#ffffff" - text="#ffffff" - text_hi="#fcfcfc" - header="#202020" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#262626f2" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#1a1a1a" - list_title="#6a6a6a" - list_text="#999999" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#0094ff" - vertex_size="3" - vertex_unreferenced="#000000" - face="#a47c5b0a" - face_select="#005fa480" - face_dot="#1fcbff" - facedot_size="2" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#5c5c5c" - edge_select="#005fa4" - scope_back="#0000004c" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#1a1a1a" - title="#ffffff" - text="#8b8b8b" - text_hi="#ffffff" - header="#202020" - header_text="#000000" - header_text_hi="#b8b8b8" - button="#262626f9" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#444444" - window_sliders="#a0a0a0" - movie_strip="#5794c3" - movieclip_strip="#20208f" - image_strip="#bdb7b6" - scene_strip="#777777" - audio_strip="#6057c3" - effect_strip="#ffffff" - transition_strip="#726d70" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#4291dc" - keyframe="#00ff00" - draw_action="#607f9e" - preview_back="#101010" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#262626" - title="#e4e4e4" - text="#ffffff" - text_hi="#ffffff" - header="#202020" - header_text="#000000" - header_text_hi="#b7b7b7" - button="#262626f2" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#262626" - title="#c7c7c7" - text="#b8b8b8" - text_hi="#ffffff" - header="#202020" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272f2" - button_title="#c7c7c7" - button_text="#969696" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#33333300" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#262626" - selected_text="#607f9e" - cursor="#8b8bff" - syntax_builtin="#009eed" - syntax_symbols="#607f9e" - syntax_special="#009eed" - syntax_preprocessor="#409090" - syntax_reserved="#8c3c00" - syntax_comment="#757575" - syntax_string="#f0ad6d" - syntax_numbers="#f0ad6d"> - <space> - <ThemeSpaceGeneric back="#1a1a1a" - title="#fefefe" - text="#e7e7e7" - text_hi="#ffffff" - header="#202020" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#262626f2" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#323232" - frame_current="#4291dc" - time_keyframe="#00ff00" - time_grease_pencil="#00e695"> - <space> - <ThemeSpaceGeneric back="#262626" - title="#e4e4e4" - text="#b8b8b8" - text_hi="#ffffff" - header="#202020" - header_text="#000000" - header_text_hi="#b8b8b8" - button="#727272ff" - button_title="#b4b4b4" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#333333" - tab_back="#333333ff" - tab_outline="#333333"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#444444ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#e5d010" - gp_vertex_size="3" - node_selected="#00bdff" - node_active="#00ff90" - wire="#000000" - wire_inner="#808080" - wire_select="#00bdff" - selected_text="#909090" - node_backdrop="#5d5d5dff" - converter_node="#292929" - color_node="#292929" - group_node="#363636" - group_socket_node="#1f00c7" - frame_node="#5d5d5dff" - matte_node="#0076b6" - distor_node="#292929" - noodle_curving="3" - input_node="#009e9e" - output_node="#1f00c7" - filter_node="#0076b6" - vector_node="#292929" - texture_node="#009e9e" - shader_node="#0076b6" - script_node="#0076b6" - pattern_node="#008db6" - layout_node="#50b1b6"> - <space> - <ThemeSpaceGeneric back="#262626" - title="#ffffff" - text="#ffffff" - text_hi="#ffffff" - header="#202020" - header_text="#cdcdcd" - header_text_hi="#b7b7b7" - button="#262626f2" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#262626" - title="#ffffff" - text="#c1c1c1" - text_hi="#ffffff" - header="#202020" - header_text="#ffffff" - header_text_hi="#b7b7b7" - button="#262626f2" - button_title="#c7c7c7" - button_text="#727272" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#202020" - tab_back="#202020ff" - tab_outline="#202020"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#607f9e"> - <space> - <ThemeSpaceGeneric back="#1a1a1a" - title="#e4e4e4" - text="#cacaca" - text_hi="#ffffff" - header="#202020" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272f2" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#e4e4e4" - tab_active="#727272" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#222222"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#607f9e" - info_selected_text="#ffffff" - info_error="#3b3b3b" - info_error_text="#ff0000" - info_warning="#3b3b3b" - info_warning_text="#ffe100" - info_info="#3b3b3b" - info_info_text="#25ff00" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#101010" - title="#e4e4e4" - text="#868686" - text_hi="#ffffff" - header="#202020" - header_text="#ffffff" - header_text_hi="#000000" - button="#3b3b3bff" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#000000" - tab_active="#727272" - tab_inactive="#222222" - tab_back="#222222ff" - tab_outline="#222222"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#444444ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#262626" - title="#e4e4e4" - text="#b8b8b8" - text_hi="#ffffff" - header="#202020" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#aeaeff" - line_input="#ffffff" - line_info="#607f9e" - line_error="#ff0019" - cursor="#49ff78" - select="#48488f80"> - <space> - <ThemeSpaceGeneric back="#1a1a1a" - title="#e4e4e4" - text="#ffffff" - text_hi="#ffffff" - header="#202020" - header_text="#000000" - header_text_hi="#ffffff" - button="#262626ff" - button_title="#c7c7c7" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#4a4a4a" - tab_back="#414141ff" - tab_outline="#2d2d2d"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#1a1a1a" - title="#ffffff" - text="#8b8b8b" - text_hi="#ffffff" - header="#202020" - header_text="#000000" - header_text_hi="#b8b8b8" - button="#262626f2" - button_title="#c7c7c7" - button_text="#b4b4b4" - button_text_hi="#ffffff" - tab_active="#262626" - tab_inactive="#1a1a1a" - tab_back="#1a1a1aff" - tab_outline="#1a1a1a"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#202020ff" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#1a1a1a" - list_title="#000000" - list_text="#aaaaaa" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="13" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="13" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0" - shadow_value="0"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/north.xml b/release/scripts/presets/interface_theme/north.xml deleted file mode 100644 index 8ab51261994..00000000000 --- a/release/scripts/presets/interface_theme/north.xml +++ /dev/null @@ -1,1177 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#e64545" - axis_y="#96d941" - axis_z="#4c84d9"> - <wcol_regular> - <ThemeWidgetColors outline="#000000" - inner="#474a4fff" - inner_sel="#617da8ff" - item="#292b2eff" - text="#cfd8e6" - text_sel="#e3e9f2" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#000000" - inner="#292b2eff" - inner_sel="#617da8ff" - item="#acb4bfff" - text="#cfd8e6" - text_sel="#000000" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#000000" - inner="#292b2eff" - inner_sel="#617da8ff" - item="#acb4bfff" - text="#cfd8e6" - text_sel="#000000" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#000000" - inner="#7e848cff" - inner_sel="#959ca6ff" - item="#617da8ff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="0" - shadedown="25"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#000000" - inner="#393c40bf" - inner_sel="#617da8ff" - item="#000000ff" - text="#b8c0cc" - text_sel="#cfd8e6" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#000000" - inner="#474a4fff" - inner_sel="#617da8ff" - item="#292b2eff" - text="#cfd8e6" - text_sel="#000000" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#000000" - inner="#7e848cff" - inner_sel="#959ca6ff" - item="#525a66ff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#000000" - inner="#7e848cff" - inner_sel="#959ca6ff" - item="#525a66ff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#000000" - inner="#474a4fff" - inner_sel="#617da8ff" - item="#acb4bfff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#000000" - inner="#292b2eff" - inner_sel="#17181aff" - item="#acb4bfff" - text="#cfd8e6" - text_sel="#737880" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#292b2eff" - inner_sel="#222326ff" - item="#acb4bfff" - text="#cfd8e6" - text_sel="#b8c0cc" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#323438f7" - inner_sel="#212326f7" - item="#617da8ff" - text="#cfd8e6" - text_sel="#e6efff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#000000" - inner="#292b2eff" - inner_sel="#617da8ff" - item="#617da8ff" - text="#b8c0cc" - text_sel="#cfd8e6" - show_shaded="FALSE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#17181af2" - inner_sel="#17181af2" - item="#acb4bfff" - text="#cfd8e6" - text_sel="#e6f0ff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#617da8ff" - item="#9ca3ad80" - text="#cfd8e6" - text_sel="#000000" - show_shaded="FALSE" - shadetop="38" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#000000" - inner="#393c40bf" - inner_sel="#505459bf" - item="#676c73ff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="5" - shadedown="-5"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#8a9099ff" - inner_sel="#7e848cff" - item="#617da8ff" - text="#cfd8e6" - text_sel="#0c0c0c" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#393c40ff" - item="#000000ff" - text="#c3ccd9" - text_sel="#dae4f2" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#81b359" - inner_anim_sel="#72cc5c" - inner_key="#e6c573" - inner_key_sel="#f2ab61" - inner_driven="#836cd9" - inner_driven_sel="#9e73e6" - blend="1"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#55595e" - clipping_border_3d="#313131ff" - wire="#000000" - wire_edit="#000000" - gp_vertex="#000000" - gp_vertex_select="#f2aa3d" - gp_vertex_size="3" - text_grease_pencil="#b5e61d" - object_selected="#617da8" - object_active="#f2af61" - object_grouped="#172621" - object_grouped_active="#9ebf7c" - text_keyframe="#ddd700" - camera="#000000" - empty="#000000" - light="#00000028" - speaker="#000000" - vertex="#000000" - vertex_select="#f2b252" - vertex_size="3" - vertex_bevel="#00a5ff" - vertex_unreferenced="#000000" - edge_select="#d29247" - edge_seam="#e63f2e" - edge_sharp="#49f2f2" - edge_crease="#d962a9" - edge_bevel="#00a5ff" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#00000011" - face_select="#80512b40" - face_dot="#f2b252" - facedot_size="2" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#ebff00" - nurb_sel_vline="#f090a0" - act_spline="#d94536" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#202000" - extra_face_angle="#23238c" - extra_face_area="#082008" - editmesh_active="#ffffff80" - normal="#4ddddd" - vertex_normal="#2361dd" - split_normal="#dd63dd" - bone_pose="#5cace6" - bone_pose_active="#61f2e1" - bone_solid="#adbfcc" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#b44d4d" - view_overlay="#000000" - transform="#adbacc" - frame_current="#6282b3" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f" - outline_width="1"> - <space> - <ThemeSpaceGradient title="#000000" - text="#000000" - text_hi="#cfd8e6" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#cfd8e6" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#cfd8e6" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#313338" - high_gradient="#474b52"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#323538" - frame_current="#6282b3" - window_sliders="#8f9296" - channels_region="#707070" - dopesheet_channel="#52616e" - dopesheet_subchannel="#606975" - channel_group="#364d46" - active_channels_group="#364d38" - vertex="#000000" - vertex_select="#f2b76d" - vertex_size="4" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#bf3962" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f05454" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#f2af61" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#505459" - title="#000000" - text="#000000" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#393c40" - list_title="#cfd8e6" - list_text="#cfd8e6" - list_text_hi="#e6a75c"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#617da8"> - <space> - <ThemeSpaceGeneric back="#3e4145" - title="#dbe4f2" - text="#dbe4f2" - text_hi="#e6f0ff" - header="#393c40" - header_text="#dbe4f2" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#dbe4f2" - button_text="#dbe4f2" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#323538" - view_sliders="#8f9296" - active_action="#617da866" - active_action_unset="#5673734d" - strips="#0c0a0a" - strips_selected="#617da8" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#59e62e" - tweak_duplicate="#d92b2b" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#6282b3"> - <space> - <ThemeSpaceGeneric back="#505459" - title="#000000" - text="#000000" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#393c40" - list_title="#000000" - list_text="#cfd8e6" - list_text_hi="#e6a75c"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#2e3033" - frame_current="#6282b3" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52616e" - dopesheet_subchannel="#606975" - channels="#707070" - channels_selected="#60c040" - channel_group="#364d46" - active_channels_group="#364d38" - long_key="#0c0a0a" - long_key_selected="#f29f3d" - keyframe="#e8e8e8" - keyframe_selected="#f2b76d" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - keyframe_scale_factor="1" - summary="#5379a680"> - <space> - <ThemeSpaceGeneric back="#505459" - title="#000000" - text="#000000" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#393c40" - list_title="#cfd8e6" - list_text="#cfd8e6" - list_text_hi="#e6a75c"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#f2aa3d" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#f2b252" - vertex_size="3" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - face="#e6f0ff0d" - face_select="#80512b40" - face_dot="#f2b252" - facedot_size="2" - freestyle_face_mark="#7fff7f33" - editmesh_active="#e6f0ff80" - wire_edit="#acb4bf" - edge_select="#d29247" - scope_back="#727272ff" - preview_stitch_face="#7f7f0033" - preview_stitch_edge="#ff26ff33" - preview_stitch_vert="#2626ff33" - preview_stitch_stitchable="#26ff26ff" - preview_stitch_unstitchable="#ff2626ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#6282b3" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#3e4147" - title="#cfd8e6" - text="#cfd8e6" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#f2aa3d" - gp_vertex_size="3" - grid="#222426" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#6282b3" - keyframe="#f2b76d" - draw_action="#4cd9f2" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#5c6066" - title="#000000" - text="#000000" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#393c40" - title="#cfd8e6" - text="#cfd8e6" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40cc" - button_title="#000000" - button_text="#000000" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#242526" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#1b1c1f" - selected_text="#3f444d" - cursor="#f2b76d" - syntax_builtin="#8abeb7" - syntax_symbols="#d0d0d0" - syntax_special="#8db6d9" - syntax_preprocessor="#e6945c" - syntax_reserved="#b294bb" - syntax_comment="#707880" - syntax_string="#b5bd68" - syntax_numbers="#d95757"> - <space> - <ThemeSpaceGeneric back="#282a2e" - title="#cfd8e6" - text="#cfd8e6" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#222426" - frame_current="#6282b3" - time_keyframe="#f2b76d" - time_grease_pencil="#acd94c"> - <space> - <ThemeSpaceGeneric back="#505459" - title="#000000" - text="#000000" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#f2aa3d" - gp_vertex_size="3" - node_selected="#617da8" - node_active="#f2b76d" - wire="#000000" - wire_inner="#737373" - wire_select="#617da8" - selected_text="#7f7070" - node_backdrop="#8f969fbf" - converter_node="#74afb3" - color_node="#e6c573" - group_node="#5c686c" - group_socket_node="#d9ca41" - frame_node="#797c8073" - matte_node="#bb7070" - distor_node="#86bf9d" - noodle_curving="5" - input_node="#8d97a6" - output_node="#8592a6" - filter_node="#cc9f70" - vector_node="#898bcc" - texture_node="#82a5d9" - shader_node="#94bf69" - script_node="#686a75" - pattern_node="#686a75" - layout_node="#575b61"> - <space> - <ThemeSpaceGeneric back="#393c40" - title="#cfd8e6" - text="#000000" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#959ca6" - list_title="#000000" - list_text="#000000" - list_text_hi="#e6f0ff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#3e4145" - title="#cfd8e6" - text="#cfd8e6" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2d3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#62738c" - selected_highlight="#3e4145"> - <space> - <ThemeSpaceGeneric back="#3e4145" - title="#cfd8e6" - text="#cfd8e6" - text_hi="#e6a75c" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#e6f0ff" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#282a2e" - info_selected_text="#8aaee6" - info_error="#282a2e" - info_error_text="#d95757" - info_warning="#282a2e" - info_warning_text="#de935f" - info_info="#282a2e" - info_info_text="#acbf60" - info_debug="#282a2e" - info_debug_text="#b294bb"> - <space> - <ThemeSpaceGeneric back="#282a2e" - title="#cfd8e6" - text="#cfd8e6" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#000000" - button_text="#8aaee6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#45484d" - title="#cfd8e6" - text="#cfd8e6" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#e6f0ff" - button_text="#000000" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#82a4d9" - line_input="#cfd8e6" - line_info="#acbf60" - line_error="#d95757" - cursor="#82a4d9" - select="#7391bf33"> - <space> - <ThemeSpaceGeneric back="#181a1c" - title="#080809" - text="#000000" - text_hi="#e6f0ff" - header="#393c40" - header_text="#e6f0ff" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#e6f0ff" - button_text="#e6f0ff" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#f2aa3d" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f20" - active_marker="#ffffff" - selected_marker="#ffff40" - disabled_marker="#7f1313" - locked_marker="#7f7f7f" - path_before="#f23030" - path_after="#365ad9" - frame_current="#6282b3" - strips="#0c0a0a" - strips_selected="#95b5e6" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff40" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#3e4147" - title="#000000" - text="#000000" - text_hi="#e6f0ff" - header="#393c40" - header_text="#cfd8e6" - header_text_hi="#e6f0ff" - button="#393c40d9" - button_title="#cfd8e6" - button_text="#cfd8e6" - button_text_hi="#e6f0ff" - tab_active="#393c40" - tab_inactive="#222426" - tab_back="#2e3033d9" - tab_outline="#2e3033"> - <panelcolors> - <ThemePanelColors header="#222426ff" - back="#393c40ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#393c40" - list_title="#cfd8e6" - list_text="#cfd8e6" - list_text_hi="#f2b76d"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="1" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="0.1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="1" - shadow_offset_y="-1" - shadow_alpha="0" - shadow_value="0"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/rtheme.xml b/release/scripts/presets/interface_theme/rtheme.xml deleted file mode 100644 index 34d4f6bd0db..00000000000 --- a/release/scripts/presets/interface_theme/rtheme.xml +++ /dev/null @@ -1,1172 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#dc403e" - axis_y="#68dc50" - axis_z="#4040dc"> - <wcol_regular> - <ThemeWidgetColors outline="#222222" - inner="#3f3f3fff" - inner_sel="#222222ff" - item="#000000ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#222222" - inner="#666666ff" - inner_sel="#08c1ffff" - item="#000000ff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#222222" - inner="#464646ff" - inner_sel="#05c4ffff" - item="#ffffffff" - text="#ffffff" - text_sel="#000000" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#3d3d3b" - inner="#666666ff" - inner_sel="#999999ff" - item="#5a5a5aff" - text="#fdfdfd" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="25"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#222222" - inner="#686868ff" - inner_sel="#05c4ffff" - item="#000000ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#302e2e" - inner="#999999ff" - inner_sel="#05c4ffff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#222222" - inner="#666666ff" - inner_sel="#05c4ffff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-10" - shadedown="10"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#222222" - inner="#606060ff" - inner_sel="#999999ff" - item="#3a3a3aff" - text="#e6e6e6" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-10" - shadedown="10"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#222222" - inner="#464646ff" - inner_sel="#646464ff" - item="#000000ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#222222" - inner="#606060ff" - inner_sel="#08bfffff" - item="#ffffffff" - text="#ffffff" - text_sel="#000000" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#222222" - inner="#606060ff" - inner_sel="#0bc6ffff" - item="#ffffffff" - text="#888888" - text_sel="#000000" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#3d3d3d" - inner="#3d3d3de6" - inner_sel="#2d2d2de6" - item="#5f5f5fff" - text="#a0a0a0" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#aaaaaae6" - inner_sel="#8c8c8cff" - item="#a2a2a2e6" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#222222" - inner="#00000000" - inner_sel="#0bc3ffff" - item="#ffffffff" - text="#ffffff" - text_sel="#000000" - show_shaded="FALSE" - shadetop="38" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#323232" - inner="#505050b4" - inner_sel="#646464b4" - item="#606060ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="-5"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#222222" - inner="#bebebeff" - inner_sel="#646464b4" - item="#444444ff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="5" - shadedown="-5"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#222222" - inner="#00000000" - inner_sel="#0abeffff" - item="#5a5a5aff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#73be4c" - inner_anim_sel="#5aa633" - inner_key="#c9ce20" - inner_key_sel="#d7d34b" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#4c4c4c" - wire="#7e7e7e" - wire_edit="#1d1d1d" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#00000028" - speaker="#000000" - camera="#000000" - view_overlay="#000000" - empty="#000000" - object_selected="#69adc2" - object_active="#08c1ff" - object_grouped="#08583d" - object_grouped_active="#19ffce" - transform="#ffffff" - vertex="#000000" - vertex_select="#f0f8ff" - vertex_size="3" - vertex_unreferenced="#000000" - edge_select="#08c1ff" - edge_seam="#ff5b00" - edge_sharp="#ff1600" - edge_crease="#52514d" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#00000012" - face_select="#08c1ff66" - face_dot="#49caff" - facedot_size="4" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#000000" - extra_face_angle="#002000" - extra_face_area="#000080" - editmesh_active="#08c1ffff" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_solid="#c8c8c8" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - frame_current="#60c040" - outline_width="1" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#b44d4d" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#000000" - text="#0e0e0e" - text_hi="#dddddd" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#c2c2c2" - button_text_hi="#ffffff" - tab_active="#474747" - tab_inactive="#333333" - tab_back="#31313100" - tab_outline="#000000"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#000000" - high_gradient="#36383a"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#5b6672" - frame_current="#60c040" - window_sliders="#969696" - channels_region="#707070" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ff8500" - handle_vertex_size="3"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#484848" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#ff8c19"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#fafafa" - text_hi="#0f0f0f" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#726f6dff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5b6672" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#00000000" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#000000" - transition_strips_selected="#000000" - meta_strips="#000000" - meta_strips_selected="#000000" - sound_strips="#000000" - sound_strips_selected="#000000" - tweak="#000000" - tweak_duplicate="#000000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#484848" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#5b6672" - frame_current="#60c040" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#f1f9ff" - keyframe_selected="#00dfff" - keyframe_extreme="#e5e2e8" - keyframe_extreme_selected="#f2efef" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#e5e2e2" - keyframe_jitter_selected="#beb8c0" - keyframe_border="#f1f9ffff" - keyframe_border_selected="#00dfffff" - summary="#cc701a66"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#484848" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#08c1ff" - vertex_size="3" - vertex_unreferenced="#000000" - face="#ffffff0a" - face_select="#08c1ff40" - face_dot="#08c1ff" - facedot_size="3" - freestyle_face_mark="#00000000" - editmesh_active="#08c1ffff" - wire_edit="#5c5c5c" - edge_select="#0067cb" - scope_back="#727272ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#08c1ff97" - preview_stitch_vert="#08c1ff91" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#1d1d1d" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#9098a0" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#484848" - title="#000000" - text="#000000" - text_hi="#000000" - header="#484848" - header_text="#000000" - header_text_hi="#dff5ff" - button="#484848a7" - button_title="#3f3a2f" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#404040" - selected_text="#c67777" - cursor="#ff0000" - syntax_builtin="#800050" - syntax_symbols="#4c4c4c" - syntax_special="#5f5f00" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#006432" - syntax_string="#640000" - syntax_numbers="#0000c8"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#5b6672" - frame_current="#60c040" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#69adc2" - node_active="#08c1ff" - wire="#7c7c7c" - wire_inner="#737373" - wire_select="#08c1ff" - selected_text="#7f7070" - node_backdrop="#9b9b9ba0" - converter_node="#575757" - color_node="#575757" - group_node="#729c91" - group_socket_node="#19ffce" - frame_node="#96969600" - matte_node="#977474" - distor_node="#749797" - noodle_curving="5" - input_node="#575757" - output_node="#ffce18" - filter_node="#575757" - vector_node="#575757" - texture_node="#00c6ff" - shader_node="#356cff" - script_node="#575757" - pattern_node="#575757" - layout_node="#727272"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#484848" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#9098a0"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#0e0e0e" - text="#000000" - text_hi="#69deff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#484848a7" - button_title="#070707" - button_text="#000000" - button_text_hi="#fdfcff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#08c1ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#9098a0" - title="#c8c6c9" - text="#333333" - text_hi="#ffffff" - header="#484848" - header_text="#888888" - header_text_hi="#ffffff" - button="#725864ff" - button_title="#f1c2d8" - button_text="#f0f0f0" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#484848" - title="#000000" - text="#ffffff" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#fdffff" - button="#484848a7" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#6080ff" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#40464e" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#484848" - header_text="#000000" - header_text_hi="#ffffff" - button="#48484880" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#ffffff79" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/sandyslate.xml b/release/scripts/presets/interface_theme/sandyslate.xml deleted file mode 100644 index 0b4756a40e8..00000000000 --- a/release/scripts/presets/interface_theme/sandyslate.xml +++ /dev/null @@ -1,1179 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.01" - menu_shadow_width="2" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#ff350e" - axis_y="#94ff5d" - axis_z="#3275ff"> - <wcol_regular> - <ThemeWidgetColors outline="#000000" - inner="#676c75ff" - inner_sel="#fff0cfff" - item="#1b1f28ff" - text="#fff0cf" - text_sel="#000000" - show_shaded="FALSE" - shadetop="-100" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#000000" - inner="#696e77ff" - inner_sel="#fff0cfff" - item="#fff0cfff" - text="#fff0cf" - text_sel="#000000" - show_shaded="TRUE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#000000" - inner="#696e77ff" - inner_sel="#fff0cfff" - item="#1b1f28ff" - text="#fff0cf" - text_sel="#000000" - show_shaded="TRUE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#151515" - inner="#696e77ff" - inner_sel="#fff0cfff" - item="#676c75ff" - text="#fff0cf" - text_sel="#000000" - show_shaded="FALSE" - shadetop="-30" - shadedown="20"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#151515" - inner="#696e77ff" - inner_sel="#fff0cfff" - item="#000000ff" - text="#fff0cf" - text_sel="#fff0cf" - show_shaded="FALSE" - shadetop="-40" - shadedown="10"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#151515" - inner="#676c75ff" - inner_sel="#fff0cfff" - item="#191d26ff" - text="#fff0cf" - text_sel="#000000" - show_shaded="TRUE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#151515" - inner="#696e77ff" - inner_sel="#fff0cfff" - item="#fff0cfff" - text="#fff0cf" - text_sel="#000000" - show_shaded="TRUE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#131313" - inner="#fdeecdff" - inner_sel="#f9eac9ff" - item="#656a73ff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#0f0f0f" - inner="#83817bff" - inner_sel="#fff0cfff" - item="#191d26ff" - text="#fff0cf" - text_sel="#000000" - show_shaded="FALSE" - shadetop="30" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#111111" - inner="#656a73ff" - inner_sel="#fff0cfff" - item="#fff0ffff" - text="#fff0cd" - text_sel="#000000" - show_shaded="TRUE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#151922" - inner="#656a73ff" - inner_sel="#676c75ff" - item="#171b24ff" - text="#fff0cf" - text_sel="#fdeecd" - show_shaded="TRUE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#636871ff" - inner_sel="#656a73ff" - item="#000000ff" - text="#ffedc5" - text_sel="#000000" - show_shaded="FALSE" - shadetop="-100" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#aaaaaae6" - inner_sel="#8c8c8cff" - item="#a2a2a2e6" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#111111" - inner="#676c75ff" - inner_sel="#2d2d2de6" - item="#656a73ff" - text="#fff0cf" - text_sel="#fdeecd" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#676c75ff" - inner_sel="#fbeccbff" - item="#656a73ff" - text="#fdeecd" - text_sel="#000000" - show_shaded="FALSE" - shadetop="20" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#0d0d0d" - inner="#fff0cfff" - inner_sel="#83817bff" - item="#696e77ff" - text="#fdfdfd" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="35" - shadedown="-34"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#0b0b0b" - inner="#1b1f28ff" - inner_sel="#ff0000ff" - item="#fd0000ff" - text="#fdfdfd" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-100" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#171b24" - inner="#676c75ff" - inner_sel="#fdeecdff" - item="#676c75ff" - text="#fff0cf" - text_sel="#000000" - show_shaded="FALSE" - shadetop="-100" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#56ff00" - inner_anim_sel="#56ff00" - inner_key="#fff400" - inner_key_sel="#fff400" - inner_driven="#629400" - inner_driven_sel="#609200" - blend="0.1"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#444444" - wire="#9eb6cd" - wire_edit="#22272d" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#ff000080" - speaker="#979797" - camera="#ff0000" - view_overlay="#000000" - empty="#fd0000" - object_selected="#dfc7a1" - object_active="#f6e4ba" - object_grouped="#1cae1c" - object_grouped_active="#55bb55" - transform="#ffffff" - vertex="#9cb4cb" - vertex_select="#f4e2b8" - vertex_size="3" - vertex_unreferenced="#000000" - edge_select="#f4e2b8" - edge_seam="#5300db" - edge_sharp="#fb0000" - edge_crease="#24a1ff" - edge_facesel="#797979" - freestyle_edge_mark="#7fff7f" - face="#9eb6cd33" - face_select="#bcb28c33" - face_dot="#f4e2b8" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#fb0000" - handle_free="#7f7f7f" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#804061" - handle_sel_free="#3b3b3b" - handle_sel_auto="#f0ff40" - handle_sel_align="#f07fae" - lastsel_point="#ffffff" - extra_edge_len="#ffedf8" - extra_edge_angle="#fd9700" - extra_face_angle="#d60000" - extra_face_area="#91a7c2" - editmesh_active="#ffffffff" - normal="#5ba4ed" - vertex_normal="#d60000" - split_normal="#dd23dd" - bone_solid="#c8c8c8" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - frame_current="#f6e824" - outline_width="1" - bundle_solid="#c8c8c8" - camera_path="#5a5a5a" - skin_root="#b44d4d" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#ffffff" - text="#fff0cf" - text_hi="#ffffff" - header="#83817b" - header_text="#fdfdfd" - header_text_hi="#ffffff" - button="#83817bff" - button_title="#fff0cf" - button_text="#fff0cf" - button_text_hi="#ffffff" - tab_active="#656a73" - tab_inactive="#7f7d77" - tab_back="#83817bff" - tab_outline="#000000"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#191d26" - high_gradient="#636871"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#000000ff" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#262626" - frame_current="#336622" - window_sliders="#969696" - channels_region="#6d6d6d" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#ffffff" - vertex_select="#ff8500" - vertex_size="3" - vertex_unreferenced="#000000" - handle_free="#808080" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#808080" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#808080" - handle_vertex="#808080" - handle_vertex_select="#ff8500" - handle_vertex_size="3"> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#fff0cf" - text="#fff0cf" - text_hi="#ffffff" - header="#83817b" - header_text="#ffffff" - header_text_hi="#fff0cf" - button="#83817b7f" - button_title="#fff0cf" - button_text="#fff0cf" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#83817b" - list_title="#000000" - list_text="#bbbbbb" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#c7d3e4"> - <space> - <ThemeSpaceGeneric back="#5f646d" - title="#5d5d5d" - text="#ffe8d1" - text_hi="#ffffff" - header="#636871" - header_text="#ffffff" - header_text_hi="#ffffff" - button="#636871ff" - button_title="#ffffff" - button_text="#ffffff" - button_text_hi="#ffffff" - tab_active="#61666f" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#83817b" - list_title="#fdeecd" - list_text="#5d5d5d" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#aa8d8d" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#2f6421"> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#585858" - text="#fff0cf" - text_hi="#ffffff" - header="#83817b" - header_text="#ffffff" - header_text_hi="#ffffff" - button="#83817b7f" - button_title="#f1f1f1" - button_text="#fff0cf" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#83817b" - list_title="#383838" - list_text="#d8d8d8" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#212121" - frame_current="#2a5c1c" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#4798ff" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - summary="#767b83cc"> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#fbeccb" - text="#fff0cf" - text_hi="#fdeecd" - header="#83817b" - header_text="#5b5b5b" - header_text_hi="#fbeccb" - button="#83817b7f" - button_title="#fbeccb" - button_text="#fdeecd" - button_text_hi="#fbeccb" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#83817b" - list_title="#9c9c9c" - list_text="#fbeccb" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#fffcfc" - vertex_select="#fb8d4a" - vertex_size="3" - vertex_unreferenced="#000000" - face="#ffffff0a" - face_select="#f98b483c" - face_dot="#fb8d4a" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#fb8d4a" - scope_back="#050505ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#5d5d5d" - text="#fff0cf" - text_hi="#ffffff" - header="#83817b" - header_text="#fdfdfd" - header_text_hi="#ffffff" - button="#83817b7f" - button_title="#c5c5c5" - button_text="#ffffff" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#817f79" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#282828" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#2f5f23" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#abaaa6" - title="#5d5d5d" - text="#f3f3f3" - text_hi="#ffffff" - header="#83817b" - header_text="#f3f3f3" - header_text_hi="#ffffff" - button="#1b1f287f" - button_title="#fdfdfd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#eedab0" - text="#f0dcb2" - text_hi="#ffffff" - header="#83817b" - header_text="#ffffff" - header_text_hi="#ffffff" - button="#83817bff" - button_title="#ffffff" - button_text="#ecd8ae" - button_text_hi="#ffffff" - tab_active="#83817b" - tab_inactive="#6a6f77" - tab_back="#83817bff" - tab_outline="#191d26"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#191919" - selected_text="#faf4ff" - cursor="#83817b" - syntax_builtin="#cf3d99" - syntax_symbols="#4c4c4c" - syntax_special="#969629" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#249d60" - syntax_string="#cc3535" - syntax_numbers="#3c68ff"> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#9e9e9e" - text="#fff0cf" - text_hi="#fff0cf" - header="#83817b" - header_text="#fff0cf" - header_text_hi="#fff0cf" - button="#1b1f287f" - button_title="#fff0cf" - button_text="#fff0cf" - button_text_hi="#fff0cf" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#191d26"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#2e2f34" - frame_current="#be0000" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#696e76" - title="#ffffff" - text="#fff0cf" - text_hi="#ffffff" - header="#83817b" - header_text="#ffffff" - header_text_hi="#ffffff" - button="#4444447f" - button_title="#ffffff" - button_text="#dbd8d8" - button_text_hi="#fafafa" - tab_active="#6b7078" - tab_inactive="#6d727a" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#bebebe" - node_active="#ffffff" - wire="#fff0cf" - wire_inner="#737373" - wire_select="#fff0cf" - selected_text="#7f7070" - node_backdrop="#4a4b5aff" - converter_node="#005fa5" - color_node="#ac0900" - group_node="#253b5c" - group_socket_node="#dfbb2e" - frame_node="#9b9b9ba0" - matte_node="#7200b7" - distor_node="#6eadb7" - noodle_curving="10" - input_node="#ff5b00" - output_node="#191d26" - filter_node="#cf0097" - vector_node="#1edd00" - texture_node="#002cd7" - shader_node="#ff0000" - script_node="#562619" - pattern_node="#6ab5e4" - layout_node="#cb7c00"> - <space> - <ThemeSpaceGeneric back="#656a73" - title="#ffffff" - text="#ffffff" - text_hi="#ffffff" - header="#83817b" - header_text="#fdfdfd" - header_text_hi="#ffffff" - button="#83817b7f" - button_title="#ffffff" - button_text="#ffffff" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#ffffff" - list_text="#ffffff" - list_text_hi="#b8ffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#aaa9a5" - title="#5d5d5d" - text="#fafafa" - text_hi="#ffffff" - header="#83817b" - header_text="#fdfdfd" - header_text_hi="#ffffff" - button="#83817b7f" - button_title="#fdfdfd" - button_text="#c3c3c3" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#191d26"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#30b5e9" - selected_highlight="#696e77"> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#9b9b9b" - text="#000000" - text_hi="#fff0cf" - header="#83817b" - header_text="#ffffff" - header_text_hi="#ffffff" - button="#999999ff" - button_title="#000000" - button_text="#fdfdfd" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#ffffff" - text="#fff0cf" - text_hi="#ffffff" - header="#83817b" - header_text="#ffffff" - header_text_hi="#ffffff" - button="#83817bff" - button_title="#ffffff" - button_text="#ffffff" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#21252c02" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#5d5d5d" - text="#fff0cf" - text_hi="#5d5d5d" - header="#83817b" - header_text="#fbeccb" - header_text_hi="#f9eac9" - button="#0000007f" - button_title="#fff0cf" - button_text="#fbeccb" - button_text_hi="#fdeecd" - tab_active="#656a73" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#212226" - line_input="#ffffff" - line_info="#608cd6" - line_error="#dc221c" - cursor="#f2eee3" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#83817b" - title="#5d5d5d" - text="#ffffff" - text_hi="#ffffff" - header="#83817b" - header_text="#ffffff" - header_text_hi="#ffffff" - button="#83817b7f" - button_title="#ffffff" - button_text="#ffffff" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#0094af" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#1b501b" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#e2e2e2" - handle_vertex_select="#ffff00" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#1b1f28" - title="#5d5d5d" - text="#ffffff" - text_hi="#ffffff" - header="#83817b" - header_text="#ffffff" - header_text_hi="#ffffff" - button="#1b1f287f" - button_title="#ffffff" - button_text="#ffffff" - button_text_hi="#ffffff" - tab_active="#676c75" - tab_inactive="#83817b" - tab_back="#83817bff" - tab_outline="#000000"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/science_lab.xml b/release/scripts/presets/interface_theme/science_lab.xml deleted file mode 100644 index e8a32f6ac29..00000000000 --- a/release/scripts/presets/interface_theme/science_lab.xml +++ /dev/null @@ -1,1172 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#dc4800" - axis_y="#73dc00" - axis_z="#00c2ff"> - <wcol_regular> - <ThemeWidgetColors outline="#191919" - inner="#6c6c6cff" - inner_sel="#678db2ff" - item="#191919ff" - text="#e6f1ff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#000000" - inner="#2b3944ff" - inner_sel="#678db2ff" - item="#1f313eff" - text="#e4e4e4" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#000000" - inner="#2b3944ff" - inner_sel="#5484afff" - item="#ffffffff" - text="#ffffff" - text_sel="#000000" - show_shaded="FALSE" - shadetop="-5" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#191919" - inner="#526d80ff" - inner_sel="#1b1b1bff" - item="#597384ff" - text="#d6ebff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-24" - shadedown="9"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#678db2" - inner="#171616ff" - inner_sel="#678db2ff" - item="#ffffffff" - text="#dcdcdc" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="15" - shadedown="-15"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#555555" - inner="#2e2c2bff" - inner_sel="#678db2ff" - item="#191919ff" - text="#a4a4a4" - text_sel="#cbdaff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#000000" - inner="#2b3944ff" - inner_sel="#1b1b1bff" - item="#597384ff" - text="#99d3ff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#292929" - inner="#333333ff" - inner_sel="#717171ff" - item="#678db2ff" - text="#dddddd" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-20" - shadedown="0"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#090909" - inner="#303030ff" - inner_sel="#678db2ff" - item="#191919ff" - text="#e6f1ff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#292929" - inner="#38516aff" - inner_sel="#678db2ff" - item="#ffffffff" - text="#ffffff" - text_sel="#cccccc" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#000000" - inner="#3f3f3fff" - inner_sel="#678db2ff" - item="#ffffffff" - text="#dddddd" - text_sel="#000000" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#000000" - inner="#2f3a46e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#a0a0a0" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#59a3ff" - inner="#222222e6" - inner_sel="#8cc0f3ff" - item="#2c5e82ff" - text="#93c9ff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-20" - shadedown="17"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#2a2a2ae6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#000000" - inner="#00000000" - inner_sel="#678db2ff" - item="#ffffffff" - text="#ffffff" - text_sel="#000000" - show_shaded="FALSE" - shadetop="38" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#000000" - inner="#12192250" - inner_sel="#646464b4" - item="#444444ff" - text="#e5e5e5" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="5" - shadedown="-5"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#8abe00ff" - inner_sel="#646464b4" - item="#444444ff" - text="#bbbbbb" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#485c6f" - inner="#00000000" - inner_sel="#678db2ff" - item="#597384ff" - text="#e5e5e5" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#73be4c" - inner_anim_sel="#5aa633" - inner_key="#f07e33" - inner_key_sel="#d7b600" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#416064" - wire="#439ad2" - wire_edit="#7f7f7f" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#dbac00b9" - speaker="#229cd8" - camera="#e28400" - view_overlay="#666666" - empty="#87a6cd" - object_selected="#409aff" - object_active="#c0fffe" - object_grouped="#339443" - object_grouped_active="#84ff00" - transform="#ffffff" - vertex="#718485" - vertex_select="#e2b100" - vertex_size="6" - vertex_unreferenced="#464646" - edge_select="#8cd846" - edge_seam="#f65d00" - edge_sharp="#56fff8" - edge_crease="#6379d8" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#ffc747" - face="#0c172761" - face_select="#4e7e9796" - face_dot="#fffbc1" - facedot_size="4" - freestyle_face_mark="#d9ff6e33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#c4c4c2" - handle_free="#808080" - handle_auto="#09a800" - handle_vect="#8934d1" - handle_sel_vect="#e85bff" - handle_align="#d15f16" - handle_sel_free="#ffffff" - handle_sel_auto="#10f000" - handle_sel_align="#ffa947" - lastsel_point="#ffffff" - extra_edge_len="#adff0c" - extra_edge_angle="#84ebbf" - extra_face_angle="#ffe133" - extra_face_area="#fcff07" - editmesh_active="#e4ffebab" - normal="#22dddd" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_solid="#2890e8" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - frame_current="#d0ddc4" - outline_width="2" - bundle_solid="#6e6e6e" - camera_path="#9f5500" - skin_root="#f1b66e" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#000000" - text="#000000" - text_hi="#ffffff" - header="#444444" - header_text="#000000" - header_text_hi="#ffffff" - button="#2d2d2d99" - button_title="#eff6ff" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#516882" - tab_inactive="#2d2d2d" - tab_back="#000000ff" - tab_outline="#3c3c3c"> - <gradients> - <ThemeGradientColors show_grad="TRUE" - gradient="#3d4c5a" - high_gradient="#000000"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#0000008e" - back="#44444480" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#000000" - frame_current="#8b9483" - window_sliders="#adadad" - channels_region="#727272" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channel_group="#395a86" - active_channels_group="#5193b1" - vertex="#94ca4c" - vertex_select="#ffffef" - vertex_size="6" - vertex_unreferenced="#000000" - handle_free="#808080" - handle_auto="#963417" - handle_vect="#8549b8" - handle_sel_vect="#c55eff" - handle_align="#b25014" - handle_sel_free="#ffffff" - handle_sel_auto="#ff6041" - handle_sel_align="#ffc094" - handle_auto_clamped="#09a800" - handle_sel_auto_clamped="#10f000" - lastsel_point="#ffffff" - handle_vertex="#84b836" - handle_vertex_select="#c4e8ff" - handle_vertex_size="10"> - <space> - <ThemeSpaceGeneric back="#36434f" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#2f2f2f" - header_text="#000000" - header_text_hi="#ffffff" - button="#2d2d2dff" - button_title="#dddddd" - button_text="#ffffff" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000062" - back="#44444480" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#444444" - list_title="#000000" - list_text="#c6dbe9" - list_text_hi="#c6f4ed"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#517da1"> - <space> - <ThemeSpaceGeneric back="#363636" - title="#646464" - text="#beddff" - text_hi="#bdbdbd" - header="#4b4b4b" - header_text="#1d1d1d" - header_text_hi="#ffffff" - button="#313131ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9373574d" - strips="#0c0a0a" - strips_selected="#af7200" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#5d9030" - tweak_duplicate="#d90000" - keyframe_border="#f8ffe7ff" - keyframe_border_selected="#000000ff" - frame_current="#8b9483"> - <space> - <ThemeSpaceGeneric back="#36434f" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#2f2f2f" - header_text="#000000" - header_text_hi="#ffffff" - button="#2d2d2dff" - button_title="#fcfcfc" - button_text="#dadada" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#444444" - list_title="#000000" - list_text="#c6dbe9" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#5e5e5e" - frame_current="#8b9483" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#6d9648" - dopesheet_subchannel="#264972" - channels="#727272" - channels_selected="#e8f668" - channel_group="#395a86" - active_channels_group="#5193b1" - long_key="#99af48" - long_key_selected="#e2b100" - keyframe="#e8e8e8" - keyframe_selected="#8cd846" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f23e0f" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#2db653ff" - keyframe_border_selected="#000000ff" - summary="#7a663d66"> - <space> - <ThemeSpaceGeneric back="#36434f" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#2f2f2f" - header_text="#000000" - header_text_hi="#ffffff" - button="#2d2d2dff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#444444" - list_title="#000000" - list_text="#c6dbe9" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#bcf7fa" - vertex_select="#ffc700" - vertex_size="5" - vertex_unreferenced="#000000" - face="#0c172761" - face_select="#63a0c1ba" - face_dot="#fffbc1" - facedot_size="5" - freestyle_face_mark="#00000000" - editmesh_active="#ffffff80" - wire_edit="#35effa" - edge_select="#8cd846" - scope_back="#666666ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#10f000" - handle_sel_auto_clamped="#09a800" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#353535" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#4b4b4b" - header_text="#000000" - header_text_hi="#ffffff" - button="#44444480" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#404040" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#666666" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#4b4b4b" - header_text="#000000" - header_text_hi="#ffffff" - button="#44444480" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#444444" - title="#dddddd" - text="#cecece" - text_hi="#ffffff" - header="#383838" - header_text="#000000" - header_text_hi="#ffffff" - button="#444444ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#383838ff" - tab_outline="#949494"> - <panelcolors> - <ThemePanelColors header="#0000008e" - back="#0c1d3180" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#36434f" - selected_text="#73b4e9" - cursor="#74a8ff" - syntax_builtin="#e850a8" - syntax_symbols="#d7d7d7" - syntax_special="#5ed5f3" - syntax_preprocessor="#d50087" - syntax_reserved="#a74600" - syntax_comment="#567160" - syntax_string="#ceaf49" - syntax_numbers="#c661ff"> - <space> - <ThemeSpaceGeneric back="#1c1c1c" - title="#000000" - text="#b3b3b3" - text_hi="#ffffff" - header="#4b4b4b" - header_text="#000000" - header_text_hi="#ffffff" - button="#444444ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#5b5b5b" - frame_current="#bac6af" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#333333" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#4b4b4b" - header_text="#000000" - header_text_hi="#ffffff" - button="#222222ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#6ebdff" - node_active="#fefff3" - wire="#9effc5" - wire_inner="#737373" - wire_select="#99d9ff" - selected_text="#7f7070" - node_backdrop="#9b9b9bb9" - converter_node="#413172" - color_node="#882a5b" - group_node="#1d4e55" - group_socket_node="#006299" - frame_node="#9b9b9bb9" - matte_node="#b25750" - distor_node="#62afac" - noodle_curving="5" - input_node="#272727" - output_node="#5c9e54" - filter_node="#6c696f" - vector_node="#3250bd" - texture_node="#c77e08" - shader_node="#548ec0" - script_node="#3d2e97" - pattern_node="#6c696f" - layout_node="#6d92b3"> - <space> - <ThemeSpaceGeneric back="#2b363f" - title="#000000" - text="#d2e7ff" - text_hi="#ffffff" - header="#444444" - header_text="#000000" - header_text_hi="#ffffff" - button="#444444ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000099" - back="#44444480" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#36434f" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#4b4b4b" - header_text="#000000" - header_text_hi="#ffffff" - button="#444444ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#32475a"> - <space> - <ThemeSpaceGeneric back="#171717" - title="#4f4f4f" - text="#5e99cc" - text_hi="#d2eeff" - header="#383838" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#7c7c7c" - tab_inactive="#000000" - tab_back="#282828ff" - tab_outline="#3f3f3f"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#444444" - title="#1a1a1a" - text="#a8a8a8" - text_hi="#ffffff" - header="#4b4b4b" - header_text="#dddddd" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#444444" - title="#000000" - text="#cbedff" - text_hi="#ffffff" - header="#444444" - header_text="#000000" - header_text_hi="#ffffff" - button="#444444ff" - button_title="#a0dfff" - button_text="#7d7d7d" - button_text_hi="#ffffff" - tab_active="#5c6982" - tab_inactive="#3f3f3f" - tab_back="#4c4c4cff" - tab_outline="#414141"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#6080ff" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#4b4b4b" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#dddddd" - button_text="#dddddd" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#393939" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#414141" - header_text="#000000" - header_text_hi="#ffffff" - button="#44444480" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#646464" - tab_back="#464646ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#44444480" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="TRUE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/softblend.xml b/release/scripts/presets/interface_theme/softblend.xml deleted file mode 100644 index ce20f7d4085..00000000000 --- a/release/scripts/presets/interface_theme/softblend.xml +++ /dev/null @@ -1,1172 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#ff5a5a" - axis_y="#58ff58" - axis_z="#6262ff"> - <wcol_regular> - <ThemeWidgetColors outline="#949190" - inner="#aca8a7ff" - inner_sel="#ffffffff" - item="#aca8a7ff" - text="#1a1a1a" - text_sel="#1a1a1a" - show_shaded="FALSE" - shadetop="-6" - shadedown="2"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#969392" - inner="#8b99a3ff" - inner_sel="#abb9c5ff" - item="#aca8a7ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="30" - shadedown="-3"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#a7a7a7" - inner="#bfbfbfff" - inner_sel="#f8f8f8ff" - item="#aca8a7ff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="-2" - shadedown="1"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#989594" - inner="#8a888aff" - inner_sel="#919fa9ff" - item="#4849ceff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-2" - shadedown="0"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#383530" - inner="#9ab997ff" - inner_sel="#b4d8b1ff" - item="#000000ff" - text="#676767" - text_sel="#000000" - show_shaded="TRUE" - shadetop="-2" - shadedown="0"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#888888" - inner="#aca8a5ff" - inner_sel="#ffffffff" - item="#aca8a7ff" - text="#1c1c1c" - text_sel="#1a1a1a" - show_shaded="TRUE" - shadetop="-3" - shadedown="0"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#4b4b4b" - inner="#898789ff" - inner_sel="#93a0aaff" - item="#101010ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-5" - shadedown="5"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#4b4b4b" - inner="#898789ff" - inner_sel="#93a0aaff" - item="#635c5fff" - text="#f9f9f9" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="-5" - shadedown="5"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#aca8a7" - inner="#aca8a7ff" - inner_sel="#aaa8a6ff" - item="#ccccccff" - text="#474747" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="6"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#9a9796" - inner="#aca8a7ff" - inner_sel="#aca8a7ff" - item="#5c5a59ff" - text="#000000" - text_sel="#000000" - show_shaded="TRUE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#474747" - inner="#aaa8a6ff" - inner_sel="#aaa8a6ff" - item="#ccccccff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#474747" - inner="#aaa8a6ff" - inner_sel="#aaa8a6ff" - item="#ccccccff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#0a0a0a" - inner="#aca8a7ff" - inner_sel="#b1d1d8ff" - item="#b4d8b1ff" - text="#000000" - text_sel="#000000" - show_shaded="FALSE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#000000" - inner="#191919e6" - inner_sel="#2d2d2de6" - item="#646464ff" - text="#ffffff" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="25" - shadedown="-20"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#474747" - inner="#00000000" - inner_sel="#aaa8a6ff" - item="#000000ff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-10" - shadedown="10"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#82807f" - inner="#a4a2a0ff" - inner_sel="#aaa8a6ff" - item="#a2a19fff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="4" - shadedown="-5"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#474747" - inner="#aaa8a6ff" - inner_sel="#aaa8a6ff" - item="#96c78eff" - text="#000000" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="3" - shadedown="-3"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#aca8a7" - inner="#f1e59333" - inner_sel="#fff29c9a" - item="#4849ceff" - text="#000000" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="0" - shadedown="0"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#adb4c7" - inner_anim_sel="#c4cee0" - inner_key="#c0bb83" - inner_key_sel="#dad37d" - inner_driven="#c69cb1" - inner_driven_sel="#ecaacd" - blend="1"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#6b6b6b" - wire="#242424" - wire_edit="#000000" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - light="#ffe56666" - speaker="#c2e787" - camera="#000000" - view_overlay="#000000" - empty="#000000" - object_selected="#ffffff" - object_active="#ffffff" - object_grouped="#000000" - object_grouped_active="#ffffff" - transform="#ffffff" - vertex="#343434" - vertex_select="#ff2f7a" - vertex_size="4" - vertex_unreferenced="#000000" - edge_select="#f3f3f3" - edge_seam="#f0703b" - edge_sharp="#49a1ec" - edge_crease="#eb3bdd" - edge_facesel="#272727" - freestyle_edge_mark="#7fff7f" - face="#90909099" - face_select="#a1a1a180" - face_dot="#52f27e" - facedot_size="4" - freestyle_face_mark="#7fff7f33" - nurb_uline="#a3a3a3" - nurb_vline="#d77ab1" - nurb_sel_uline="#ffffff" - nurb_sel_vline="#f090a0" - act_spline="#95daa0" - handle_free="#c6c6c6" - handle_auto="#30b6e5" - handle_vect="#afafaf" - handle_sel_vect="#ffffff" - handle_align="#e277b1" - handle_sel_free="#ffffff" - handle_sel_auto="#ffffff" - handle_sel_align="#ffffff" - lastsel_point="#ffffff" - extra_edge_len="#200000" - extra_edge_angle="#000000" - extra_face_angle="#cccccc" - extra_face_area="#cccccc" - editmesh_active="#ffffffb3" - normal="#9cfcc8" - vertex_normal="#68a1db" - split_normal="#dd23dd" - bone_solid="#c8c8c8" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - frame_current="#53c03b" - outline_width="1" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#000000" - clipping_border_3d="#313131ff" - text_keyframe="#ddd700" - text_grease_pencil="#b5e61d" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGradient title="#ffffff" - text="#ffffff" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aaa8a6ff" - button_title="#313131" - button_text="#222222" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <gradients> - <ThemeGradientColors show_grad="FALSE" - gradient="#484848" - high_gradient="#7f7f7f"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#918d8c" - frame_current="#f06868" - window_sliders="#4d4d4d" - channels_region="#4d4d4d" - dopesheet_channel="#aaa8a6" - dopesheet_subchannel="#aaa8a6" - channel_group="#8a9dac" - active_channels_group="#95adc1" - vertex="#575757" - vertex_select="#ffffff" - vertex_size="6" - vertex_unreferenced="#000000" - handle_free="#252525" - handle_auto="#696969" - handle_vect="#191919" - handle_sel_vect="#ffffff" - handle_align="#1d1d1d" - handle_sel_free="#ececec" - handle_sel_auto="#d4d4d4" - handle_sel_align="#f3f3f3" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - lastsel_point="#000000" - handle_vertex="#525252" - handle_vertex_select="#f1f1f1" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#000000" - text="#222222" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#0e0e0e" - button_text="#222222" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#aaa8a6" - list_title="#676767" - list_text="#222222" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#f1e593"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#ffffff" - text="#222222" - text_hi="#ffffff" - header="#aca8a7" - header_text="#afafaf" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#222222" - button_text="#cccccc" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#918d8c" - view_sliders="#b5b5b5" - active_action="#ffffff00" - active_action_unset="#edad7545" - strips="#62be62" - strips_selected="#af7474" - transition_strips="#1800ff" - transition_strips_selected="#1800ff" - meta_strips="#1800ff" - meta_strips_selected="#1800ff" - sound_strips="#1800ff" - sound_strips_selected="#1800ff" - tweak="#1800ff" - tweak_duplicate="#6258ba" - keyframe_border="#e7eaa7ff" - keyframe_border_selected="#ffffffff" - frame_current="#f06868"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#000000" - text="#333333" - text_hi="#000000" - header="#aca8a7" - header_text="#a3a3a3" - header_text_hi="#cccccc" - button="#aca8a7ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#ded8d7"> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#72727200" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#aca8a7" - list_title="#000000" - list_text="#000000" - list_text_hi="#000000"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#7f7f7f" - frame_current="#f06868" - value_sliders="#141414" - view_sliders="#4c4c4c" - dopesheet_channel="#9baeb9" - dopesheet_subchannel="#aaa8a6" - channels="#9baeb9" - channels_selected="#a0e7d9" - channel_group="#8a9dac" - active_channels_group="#95adc1" - long_key="#000000" - long_key_selected="#ecfc37" - keyframe="#bddae8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#ace493" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - summary="#a4cbbb75"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#ffffff" - text="#222222" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#000000" - button_text="#111111" - button_text_hi="#a3a3a3" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#aaa8a6" - list_title="#cccccc" - list_text="#131313" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#000000" - vertex_select="#ffffff" - vertex_size="3" - vertex_unreferenced="#000000" - face="#00000032" - face_select="#ffffff3c" - face_dot="#ffffff" - facedot_size="2" - freestyle_face_mark="#00000000" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#aca8a7ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#000000" - text="#ffffff" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#383838" - button_text="#222222" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#afafaf" - window_sliders="#777777" - movie_strip="#87a4c3" - movieclip_strip="#95add0" - image_strip="#c99ac0" - scene_strip="#91b1a0" - audio_strip="#e0d2a0" - effect_strip="#be8c76" - transition_strip="#d9777a" - meta_strip="#91918d" - text_strip="#a29700" - frame_current="#a3ff96" - keyframe="#ffeb89" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#000000" - text="#333333" - text_hi="#ffffff" - header="#aca8a7" - header_text="#a3a3a3" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#111111" - button_text="#111111" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#222222" - text="#222222" - text_hi="#ffffff" - header="#d1cccb" - header_text="#222222" - header_text_hi="#000000" - button="#aca8a7ff" - button_title="#222222" - button_text="#222222" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#a3a3a3" - selected_text="#f1e593" - cursor="#54da70" - syntax_builtin="#3162b2" - syntax_symbols="#4c4c4c" - syntax_special="#ca0c97" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#535353" - syntax_string="#c31736" - syntax_numbers="#b62440"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#000000" - text="#222222" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#222222" - button_text="#333333" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#918d8c" - frame_current="#f06868" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#cccccc" - text="#3a3a3a" - text_hi="#ffffff" - header="#aca8a7" - header_text="#030303" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#aeacaa" - button_text="#222222" - button_text_hi="#000000" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#ffffff" - node_active="#ffffff" - wire="#222222" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#ffffff" - node_backdrop="#d4d4d4ff" - converter_node="#e3a1ff" - color_node="#f2b077" - group_node="#aca8a7" - group_socket_node="#79bef2" - frame_node="#d3cecdff" - matte_node="#79f2a0" - distor_node="#eef279" - noodle_curving="5" - input_node="#79bef2" - output_node="#79bef2" - filter_node="#ff0000" - vector_node="#6de8e4" - texture_node="#f2b077" - shader_node="#e88daa" - script_node="#f2b077" - pattern_node="#a67c49" - layout_node="#000000"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#a3a3a3" - text="#222222" - text_hi="#ffffff" - header="#aca8a7" - header_text="#333333" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#222222" - button_text="#222222" - button_text_hi="#c5c5c5" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#4d4d4d" - list_title="#383838" - list_text="#676767" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#202020" - text="#222222" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#111111" - button_text="#222222" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#aff193" - selected_highlight="#98b5cf"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#ffffff" - text="#000000" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#0f0f0f" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#222222" - text="#222222" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#6080ff" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc3a77" - cursor="#9cfcc8" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#0c0c0c" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#4d4d4dff" - button_title="#131313" - button_text="#131313" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#71cd7f" - active_marker="#ffffff" - selected_marker="#ff2f7a" - disabled_marker="#b54636" - locked_marker="#7f7f7f" - path_before="#22d8d1" - path_after="#5a7575" - frame_current="#f06868" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#aca8a7" - title="#1a1a1a" - text="#1a1a1a" - text_hi="#ffffff" - header="#aca8a7" - header_text="#000000" - header_text_hi="#ffffff" - button="#aca8a7ff" - button_title="#222222" - button_text="#222222" - button_text_hi="#ffffff" - tab_active="#aca8a7" - tab_inactive="#bfbfbf" - tab_back="#bfbfbfff" - tab_outline="#d1cccb"> - <panelcolors> - <ThemePanelColors header="#00000004" - back="#72727280" - show_header="TRUE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/interface_theme/true_blue_menu.xml b/release/scripts/presets/interface_theme/true_blue_menu.xml deleted file mode 100644 index 26e39f3bcdf..00000000000 --- a/release/scripts/presets/interface_theme/true_blue_menu.xml +++ /dev/null @@ -1,1177 +0,0 @@ -<bpy> - <Theme> - <user_interface> - <ThemeUserInterface menu_shadow_fac="0.5" - menu_shadow_width="12" - icon_file="" - icon_alpha="1" - widget_emboss="#ffffff05" - axis_x="#801a1a" - axis_y="#1a801a" - axis_z="#1a1a80"> - <wcol_regular> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_regular> - <wcol_tool> - <ThemeWidgetColors outline="#303030" - inner="#2d4463b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_tool> - <wcol_radio> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_radio> - <wcol_text> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_text> - <wcol_option> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#ffecd7b5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_option> - <wcol_toggle> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_toggle> - <wcol_num> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#768dabff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_num> - <wcol_numslider> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_numslider> - <wcol_box> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_box> - <wcol_menu> - <ThemeWidgetColors outline="#303030" - inner="#1e2e41ff" - inner_sel="#4179b8ff" - item="#97b5daff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_menu> - <wcol_pulldown> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59ff" - inner_sel="#4179b8ff" - item="#1e252cff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_pulldown> - <wcol_menu_back> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59e6" - inner_sel="#4179b8ff" - item="#1e252cff" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_menu_back> - <wcol_pie_menu> - <ThemeWidgetColors outline="#000000" - inner="#3d4b59e6" - inner_sel="#29476dff" - item="#4179b8ad" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_pie_menu> - <wcol_tooltip> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59e6" - inner_sel="#4179b8ff" - item="#1e2528e6" - text="#dadada" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_tooltip> - <wcol_menu_item> - <ThemeWidgetColors outline="#303030" - inner="#3d4b59b5" - inner_sel="#4179b8ff" - item="#1e252cb5" - text="#b8b8b8" - text_sel="#ffffff" - show_shaded="FALSE" - shadetop="10" - shadedown="-30"> - </ThemeWidgetColors> - </wcol_menu_item> - <wcol_scroll> - <ThemeWidgetColors outline="#2d2d2d" - inner="#376fa91a" - inner_sel="#85b9ef77" - item="#264b7079" - text="#cccccc" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_scroll> - <wcol_progress> - <ThemeWidgetColors outline="#000000" - inner="#bebebeff" - inner_sel="#646464b4" - item="#444444ff" - text="#d3d3d3" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="10" - shadedown="-10"> - </ThemeWidgetColors> - </wcol_progress> - <wcol_list_item> - <ThemeWidgetColors outline="#000000" - inner="#3e79b600" - inner_sel="#1d4f81b7" - item="#1e252cb5" - text="#cecece" - text_sel="#ffffff" - show_shaded="TRUE" - shadetop="-35" - shadedown="20"> - </ThemeWidgetColors> - </wcol_list_item> - <wcol_state> - <ThemeWidgetStateColors inner_anim="#339900" - inner_anim_sel="#2b8000" - inner_key="#999300" - inner_key_sel="#666200" - inner_driven="#b400ff" - inner_driven_sel="#9900e6" - blend="0.5"> - </ThemeWidgetStateColors> - </wcol_state> - </ThemeUserInterface> - </user_interface> - <view_3d> - <ThemeView3D grid="#000000" - clipping_border_3d="#313131ff" - wire="#5c8ca3" - wire_edit="#8a8a8a" - gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - text_grease_pencil="#b5e61d" - object_selected="#0ea9ff" - object_active="#80b5ff" - object_grouped="#083008" - object_grouped_active="#55bb55" - text_keyframe="#ddd700" - camera="#000000" - empty="#a78721" - light="#d6df1628" - speaker="#a83f2d" - vertex="#657780" - vertex_select="#00cccb" - vertex_size="3" - vertex_bevel="#00a5ff" - vertex_unreferenced="#9b9b9b" - edge_select="#00bebb" - edge_seam="#db2512" - edge_sharp="#00ffff" - edge_crease="#cc0099" - edge_bevel="#00a5ff" - edge_facesel="#4b4b4b" - freestyle_edge_mark="#7fff7f" - face="#58585836" - face_select="#3f9ca473" - face_dot="#adbeb6" - facedot_size="3" - freestyle_face_mark="#7fff7f33" - nurb_uline="#909000" - nurb_vline="#803060" - nurb_sel_uline="#f0ff40" - nurb_sel_vline="#f090a0" - act_spline="#db2512" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - lastsel_point="#ffffff" - extra_edge_len="#00b7c2" - extra_edge_angle="#acacac" - extra_face_angle="#53b9ff" - extra_face_area="#005300" - editmesh_active="#00ffcda7" - normal="#1fbebe" - vertex_normal="#2361dd" - split_normal="#dd23dd" - bone_pose="#50c8ff" - bone_pose_active="#8cffff" - bone_solid="#899980" - bundle_solid="#c8c8c8" - camera_path="#000000" - skin_root="#000000" - view_overlay="#000000" - transform="#ffffff" - frame_current="#60c040" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f" - outline_width="1"> - <space> - <ThemeSpaceGradient title="#000000" - text="#b8b8b8" - text_hi="#e9e9e9" - header="#1f2a35" - header_text="#b9b9b9" - header_text_hi="#ffffff" - button="#1d232980" - button_title="#979797" - button_text="#bbbbbb" - button_text_hi="#ffffff" - tab_active="#223950" - tab_inactive="#1d2329" - tab_back="#1d2329ff" - tab_outline="#36547a"> - <gradients> - <ThemeGradientColors show_grad="TRUE" - gradient="#0f0f0f" - high_gradient="#42505e"> - </ThemeGradientColors> - </gradients> - <panelcolors> - <ThemePanelColors header="#00000000" - back="#282828b0" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGradient> - </space> - </ThemeView3D> - </view_3d> - <graph_editor> - <ThemeGraphEditor grid="#5a7b8a" - frame_current="#60c040" - window_sliders="#969696" - channels_region="#8a8a8a" - dopesheet_channel="#52606e" - dopesheet_subchannel="#545d66" - channel_group="#4f6549" - active_channels_group="#87b17d" - vertex="#000000" - vertex_select="#ff8500" - vertex_size="3" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - handle_free="#000000" - handle_auto="#909000" - handle_vect="#409030" - handle_sel_vect="#40c030" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#994030" - handle_sel_auto_clamped="#f0af90" - lastsel_point="#ffffff" - handle_vertex="#000000" - handle_vertex_select="#ff8500" - handle_vertex_size="4"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#1f2a35" - header_text="#000000" - header_text_hi="#ffffff" - button="#1d2329ff" - button_title="#b8b8b8" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#555961ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#1d2329" - list_title="#8b8b8b" - list_text="#cecece" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeGraphEditor> - </graph_editor> - <file_browser> - <ThemeFileBrowser selected_file="#755129"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#8b8b8b" - text="#cacaca" - text_hi="#0f0f0f" - header="#202b36" - header_text="#8b8b8b" - header_text_hi="#ffffff" - button="#1d2329ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#47556180" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeFileBrowser> - </file_browser> - <nla_editor> - <ThemeNLAEditor grid="#5e5e5e" - view_sliders="#969696" - active_action="#cc701a66" - active_action_unset="#9987614d" - strips="#0c0a0a" - strips_selected="#ff8c00" - transition_strips="#1c2630" - transition_strips_selected="#2e75db" - meta_strips="#332642" - meta_strips_selected="#692196" - sound_strips="#2b3d3d" - sound_strips_selected="#1f7a7a" - tweak="#4df31a" - tweak_duplicate="#d90000" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - frame_current="#60c040"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#1f2a35" - header_text="#000000" - header_text_hi="#ffffff" - button="#1d2329ff" - button_title="#cecece" - button_text="#a7a7a7" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000005" - back="#1d232980" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#1d2329" - list_title="#1f2a35" - list_text="#cccccc" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNLAEditor> - </nla_editor> - <dopesheet_editor> - <ThemeDopeSheet grid="#585858" - frame_current="#60c040" - value_sliders="#000000" - view_sliders="#969696" - dopesheet_channel="#52606e" - dopesheet_subchannel="#7c8996" - channels="#707070" - channels_selected="#60c040" - channel_group="#4f6549" - active_channels_group="#87b17d" - long_key="#0c0a0a" - long_key_selected="#ff8c00" - keyframe="#e8e8e8" - keyframe_selected="#ffbe32" - keyframe_extreme="#e8b3cc" - keyframe_extreme_selected="#f28080" - keyframe_breakdown="#b3dbe8" - keyframe_breakdown_selected="#54bfed" - keyframe_jitter="#94e575" - keyframe_jitter_selected="#61c042" - keyframe_border="#000000ff" - keyframe_border_selected="#000000ff" - keyframe_scale_factor="1" - summary="#3d566887"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#000000" - text="#ffffff" - text_hi="#ffffff" - header="#202b36" - header_text="#000000" - header_text_hi="#ffffff" - button="#aaaaaaff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#1d2329" - list_title="#2b3742" - list_text="#c5c5c5" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeDopeSheet> - </dopesheet_editor> - <image_editor> - <ThemeImageEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - vertex="#32adec" - vertex_select="#be6925" - vertex_size="3" - vertex_bevel="#000000" - vertex_unreferenced="#000000" - face="#a47c5b0a" - face_select="#a47c5b3c" - face_dot="#ffffff" - facedot_size="3" - freestyle_face_mark="#00000000" - editmesh_active="#ffffff80" - wire_edit="#c0c0c0" - edge_select="#ff8500" - scope_back="#303030ff" - preview_stitch_face="#1242b026" - preview_stitch_edge="#ff8500b2" - preview_stitch_vert="#ff85007f" - preview_stitch_stitchable="#00ff00ff" - preview_stitch_unstitchable="#ff0000ff" - preview_stitch_active="#e1d2c323" - uv_shadow="#707070ff" - uv_others="#606060ff" - frame_current="#60c040" - metadatabg="#000000" - metadatatext="#ffffff" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5" - paint_curve_handle="#7fff7f7f" - paint_curve_pivot="#ff7f7f7f"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#7f7f7f" - text="#999999" - text_hi="#ffffff" - header="#202b36" - header_text="#000000" - header_text_hi="#ffffff" - button="#1d2329cc" - button_title="#8b8b8b" - button_text="#cccccc" - button_text_hi="#ffffff" - tab_active="#223950" - tab_inactive="#1d2329" - tab_back="#1d2329ff" - tab_outline="#273e55"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeImageEditor> - </image_editor> - <sequence_editor> - <ThemeSequenceEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - grid="#636363" - window_sliders="#a0a0a0" - movie_strip="#516987" - movieclip_strip="#20208f" - image_strip="#6d5881" - scene_strip="#4e983e" - audio_strip="#2e8f8f" - effect_strip="#a9547c" - transition_strip="#a25f6f" - meta_strip="#6d9183" - text_strip="#a29700" - frame_current="#60c040" - keyframe="#ff8500" - draw_action="#50c8ff" - preview_back="#000000" - metadatabg="#000000" - metadatatext="#ffffff"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#8b8b8b" - text="#ffffff" - text_hi="#ffffff" - header="#202b36" - header_text="#000000" - header_text_hi="#ffffff" - button="#1d2329cc" - button_title="#afafaf" - button_text="#b3b3b3" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeSequenceEditor> - </sequence_editor> - <properties> - <ThemeProperties> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#979797" - text="#b8b8b8" - text_hi="#ffffff" - header="#202b36" - header_text="#000000" - header_text_hi="#ffffff" - button="#1d2329ff" - button_title="#b8b8b8" - button_text="#b8b8b8" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#404040ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#0000002a" - back="#35353580" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeProperties> - </properties> - <text_editor> - <ThemeTextEditor line_numbers_background="#2e2e2e" - selected_text="#4e4e8f" - cursor="#8b8bff" - syntax_builtin="#ed4800" - syntax_symbols="#ff8f00" - syntax_special="#c080d0" - syntax_preprocessor="#32008c" - syntax_reserved="#8c3c00" - syntax_comment="#cd8b00" - syntax_string="#ffcd8b" - syntax_numbers="#f0ad6d"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#8b8b8b" - text="#cfbfad" - text_hi="#ffffff" - header="#202b36" - header_text="#a5a5a5" - header_text_hi="#ffffff" - button="#3b3b3bff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTextEditor> - </text_editor> - <timeline> - <ThemeTimeline grid="#5a7b8a" - frame_current="#338aff" - time_keyframe="#ddd700" - time_grease_pencil="#b5e61d"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#000000" - text="#b8b8b8" - text_hi="#ffffff" - header="#202b36" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeTimeline> - </timeline> - <node_editor> - <ThemeNodeEditor gp_vertex="#000000" - gp_vertex_select="#ff8500" - gp_vertex_size="3" - node_selected="#6797c5" - node_active="#1f76b2" - wire="#ffffff" - wire_inner="#737373" - wire_select="#ffffff" - selected_text="#38427f" - node_backdrop="#253d54a0" - converter_node="#10299b" - color_node="#2a85b1" - group_node="#1e7524" - group_socket_node="#dfca35" - frame_node="#9a9b9ba0" - matte_node="#000000" - distor_node="#000000" - noodle_curving="5" - input_node="#485cbb" - output_node="#084edf" - filter_node="#395e83" - vector_node="#003153" - texture_node="#000d4c" - shader_node="#1e4e9e" - script_node="#15347e" - pattern_node="#436eb8" - layout_node="#222858"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#8b8b8b" - text="#dbdbdb" - text_hi="#ffffff" - header="#202b36" - header_text="#000000" - header_text_hi="#ffffff" - button="#1d232980" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#223950" - tab_inactive="#1d2329" - tab_back="#4b5058ff" - tab_outline="#223950"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#a5a5a5" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeNodeEditor> - </node_editor> - <logic_editor> - <ThemeLogicEditor> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#202b36" - header_text="#000000" - header_text_hi="#ffffff" - button="#1d2329ff" - button_title="#8b8b8b" - button_text="#8b8b8b" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeLogicEditor> - </logic_editor> - <outliner> - <ThemeOutliner match="#337f33" - selected_highlight="#82878c"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#000000" - text="#cacaca" - text_hi="#ffffff" - header="#1f2a35" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeOutliner> - </outliner> - <info> - <ThemeInfo info_selected="#6080ff" - info_selected_text="#ffffff" - info_error="#dc0000" - info_error_text="#000000" - info_warning="#dc8060" - info_warning_text="#000000" - info_info="#00aa00" - info_info_text="#000000" - info_debug="#c4c4c4" - info_debug_text="#000000"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#000000" - text="#adadad" - text_hi="#000000" - header="#202b36" - header_text="#c2c2c2" - header_text_hi="#000000" - button="#3b3b3bff" - button_title="#000000" - button_text="#000000" - button_text_hi="#000000" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeInfo> - </info> - <user_preferences> - <ThemeUserPreferences> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#000000" - text="#b8b8b8" - text_hi="#ffffff" - header="#1f2a35" - header_text="#000000" - header_text_hi="#ffffff" - button="#727272ff" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#464646" - tab_inactive="#393939" - tab_back="#000000ff" - tab_outline="#323232"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#272727c3" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeUserPreferences> - </user_preferences> - <console> - <ThemeConsole line_output="#6080ff" - line_input="#ffffff" - line_info="#00aa00" - line_error="#dc6060" - cursor="#dc6060" - select="#ffffff30"> - <space> - <ThemeSpaceGeneric back="#000000" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#15202b" - header_text="#000000" - header_text_hi="#ffffff" - button="#7272727f" - button_title="#000000" - button_text="#000000" - button_text_hi="#ffffff" - tab_active="#727272" - tab_inactive="#535353" - tab_back="#404040ff" - tab_outline="#3c3c3c"> - <panelcolors> - <ThemePanelColors header="#00000002" - back="#7272727f" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - </ThemeConsole> - </console> - <clip_editor> - <ThemeClipEditor gp_vertex="#000000" - gp_vertex_select="#000000" - gp_vertex_size="1" - marker_outline="#000000" - marker="#7f7f00" - active_marker="#ffffff" - selected_marker="#ffff00" - disabled_marker="#7f0000" - locked_marker="#7f7f7f" - path_before="#ff0000" - path_after="#0000ff" - frame_current="#60c040" - strips="#0c0a0a" - strips_selected="#ff8c00" - handle_free="#000000" - handle_auto="#909000" - handle_align="#803060" - handle_sel_free="#000000" - handle_sel_auto="#f0ff40" - handle_sel_align="#f090a0" - handle_auto_clamped="#000000" - handle_sel_auto_clamped="#000000" - handle_vertex="#000000" - handle_vertex_select="#ffff00" - handle_vertex_size="5"> - <space> - <ThemeSpaceGeneric back="#1d2329" - title="#000000" - text="#000000" - text_hi="#ffffff" - header="#202b36" - header_text="#000000" - header_text_hi="#ffffff" - button="#1d2329cc" - button_title="#999999" - button_text="#939393" - button_text_hi="#ffffff" - tab_active="#6c717f" - tab_inactive="#565b65" - tab_back="#4b5058ff" - tab_outline="#2d2d32"> - <panelcolors> - <ThemePanelColors header="#00000019" - back="#72727280" - show_header="FALSE" - show_back="FALSE"> - </ThemePanelColors> - </panelcolors> - </ThemeSpaceGeneric> - </space> - <space_list> - <ThemeSpaceListGeneric list="#666666" - list_title="#000000" - list_text="#000000" - list_text_hi="#ffffff"> - </ThemeSpaceListGeneric> - </space_list> - </ThemeClipEditor> - </clip_editor> - <bone_color_sets> - <ThemeBoneColorSet normal="#9a0000" - select="#bd1111" - active="#f70a0a" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f74018" - select="#f66913" - active="#fa9900" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e9109" - select="#59b70b" - active="#83ef1d" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#0a3694" - select="#3667df" - active="#5ec1ef" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#a9294e" - select="#c1416a" - active="#f05d91" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#430c78" - select="#543aa3" - active="#8764d5" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#24785a" - select="#3c9579" - active="#6fb6ab" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#4b707c" - select="#6a8691" - active="#9bc2cd" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#f4c90c" - select="#eec236" - active="#f3ff00" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#1e2024" - select="#484c56" - active="#ffffff" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6f2f6a" - select="#9845be" - active="#d330d6" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#6c8e22" - select="#7fb022" - active="#bbef5b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#8d8d8d" - select="#b0b0b0" - active="#dedede" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#834326" - select="#8b5811" - active="#bd6a11" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#08310e" - select="#1c430b" - active="#34622b" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - <ThemeBoneColorSet normal="#000000" - select="#000000" - active="#000000" - show_colored_constraints="FALSE"> - </ThemeBoneColorSet> - </bone_color_sets> - </Theme> - <ThemeStyle> - <panel_title> - <ThemeFontStyle points="12" - font_kerning_style="FITTED" - shadow="1" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </panel_title> - <widget_label> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="3" - shadow_offset_x="0" - shadow_offset_y="-1" - shadow_alpha="0.15" - shadow_value="1"> - </ThemeFontStyle> - </widget_label> - <widget> - <ThemeFontStyle points="11" - font_kerning_style="FITTED" - shadow="0" - shadow_offset_x="0" - shadow_offset_y="0" - shadow_alpha="0.25" - shadow_value="0"> - </ThemeFontStyle> - </widget> - </ThemeStyle> -</bpy> diff --git a/release/scripts/presets/keyconfig/3dsmax.py b/release/scripts/presets/keyconfig/3dsmax.py deleted file mode 100644 index 206dc820f04..00000000000 --- a/release/scripts/presets/keyconfig/3dsmax.py +++ /dev/null @@ -1,2434 +0,0 @@ -# Configuration 3dsmax -import bpy - -wm = bpy.context.window_manager -kc = wm.keyconfigs.new('3dsmax') - -# Map Window -km = kc.keymaps.new('Window', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.window_new', 'W', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.read_homefile', 'N', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.save_homefile', 'U', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'O', 'PRESS', shift=True, ctrl=True) -kmi.properties.name = 'TOPBAR_MT_file_open_recent' -kmi = km.keymap_items.new('wm.open_mainfile', 'O', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.open_mainfile', 'F1', 'PRESS') -kmi = km.keymap_items.new('wm.link', 'O', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.append', 'F1', 'PRESS', shift=True) -kmi.properties.link = False -kmi.properties.instance_groups = False -kmi = km.keymap_items.new('wm.save_mainfile', 'S', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.save_mainfile', 'W', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('wm.save_as_mainfile', 'F2', 'PRESS') -kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'PRESS', ctrl=True, alt=True) -kmi.properties.copy = True -kmi = km.keymap_items.new('wm.window_fullscreen_toggle', 'F11', 'PRESS', alt=True) -kmi = km.keymap_items.new('wm.quit_blender', 'Q', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.redraw_timer', 'T', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.debug_menu', 'D', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.search_menu', 'SPACE', 'PRESS') -kmi = km.keymap_items.new('wm.call_menu', 'NDOF_BUTTON_MENU', 'PRESS') -kmi.properties.name = 'USERPREF_MT_ndof_settings' -kmi = km.keymap_items.new('wm.context_set_enum', 'F2', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'NODE_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F4', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'CONSOLE' -kmi = km.keymap_items.new('wm.context_set_enum', 'F5', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'VIEW_3D' -kmi = km.keymap_items.new('wm.context_set_enum', 'F6', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'GRAPH_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F7', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'PROPERTIES' -kmi = km.keymap_items.new('wm.context_set_enum', 'F8', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'SEQUENCE_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F9', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'OUTLINER' -kmi = km.keymap_items.new('wm.context_set_enum', 'F10', 'PRESS', shift=True, ctrl=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'IMAGE_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F11', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'TEXT_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F12', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'DOPESHEET_EDITOR' -kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_PLUS', 'PRESS') -kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity' -kmi.properties.value = 1.1 -kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_MINUS', 'PRESS') -kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity' -kmi.properties.value = 1.0 / 1.1 -kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_PLUS', 'PRESS', shift=True) -kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity' -kmi.properties.value = 1.5 -kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_MINUS', 'PRESS', shift=True) -kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity' -kmi.properties.value = 1.0 / 1.5 -kmi = km.keymap_items.new('info.reports_display_update', 'TIMER_REPORT', 'ANY', any=True) - -# Map Screen -km = kc.keymaps.new('Screen', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('screen.animation_step', 'TIMER0', 'ANY', any=True) -kmi = km.keymap_items.new('screen.region_blend', 'TIMERREGION', 'ANY', any=True) -kmi = km.keymap_items.new('screen.screen_set', 'RIGHT_ARROW', 'PRESS', ctrl=True) -kmi.properties.delta = 1 -kmi = km.keymap_items.new('screen.screen_set', 'LEFT_ARROW', 'PRESS', ctrl=True) -kmi.properties.delta = -1 -kmi = km.keymap_items.new('screen.screen_full_area', 'UP_ARROW', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('screen.screen_full_area', 'DOWN_ARROW', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('screen.screen_full_area', 'SPACE', 'PRESS', shift=True) -kmi = km.keymap_items.new('screen.screenshot', 'F3', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('screen.region_quadview', 'W', 'PRESS', alt=True) -kmi = km.keymap_items.new('screen.repeat_history', 'F3', 'PRESS', shift=True) -kmi = km.keymap_items.new('screen.repeat_last', 'R', 'PRESS', shift=True) -kmi = km.keymap_items.new('screen.region_flip', 'F5', 'PRESS') -kmi = km.keymap_items.new('screen.redo_last', 'F6', 'PRESS') -kmi = km.keymap_items.new('script.reload', 'F8', 'PRESS') -kmi = km.keymap_items.new('file.execute', 'RET', 'PRESS') -kmi = km.keymap_items.new('file.execute', 'NUMPAD_ENTER', 'PRESS') -kmi = km.keymap_items.new('file.cancel', 'ESC', 'PRESS') -kmi = km.keymap_items.new('ed.undo', 'Z', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('ed.redo', 'Z', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('ed.undo_history', 'Z', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('render.render', 'F10', 'PRESS') -kmi = km.keymap_items.new('render.render', 'F10', 'PRESS', ctrl=True) -kmi.properties.animation = True -kmi = km.keymap_items.new('render.view_cancel', 'ESC', 'PRESS') -kmi = km.keymap_items.new('render.view_show', 'F11', 'PRESS') -kmi = km.keymap_items.new('render.play_rendered_anim', 'F11', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('screen.userpref_show', 'U', 'PRESS', ctrl=True, alt=True) - -# Map Markers -km = kc.keymaps.new('Markers', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.move', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('marker.duplicate', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi.properties.camera = True -kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.extend = True -kmi.properties.camera = True -kmi = km.keymap_items.new('marker.select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('marker.select_all', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('marker.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('marker.move', 'G', 'PRESS') -kmi = km.keymap_items.new('marker.camera_bind', 'B', 'PRESS', ctrl=True) - -# Map Outliner -km = kc.keymaps.new('Outliner', space_type='OUTLINER', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('outliner.item_rename', 'LEFTMOUSE', 'DOUBLE_CLICK') -kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi.properties.recursive = False -kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi.properties.recursive = False -kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK', ctrl=True) -kmi.properties.extend = False -kmi.properties.recursive = True -kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK', shift=True, ctrl=True) -kmi.properties.extend = True -kmi.properties.recursive = True -kmi = km.keymap_items.new('outliner.select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('outliner.item_openclose', 'RET', 'PRESS') -kmi.properties.all = False -kmi = km.keymap_items.new('outliner.item_openclose', 'RET', 'PRESS', shift=True) -kmi.properties.all = True -kmi = km.keymap_items.new('outliner.item_rename', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('outliner.operation', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('outliner.show_hierarchy', 'HOME', 'PRESS') -kmi = km.keymap_items.new('outliner.show_active', 'PERIOD', 'PRESS') -kmi = km.keymap_items.new('outliner.show_active', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('outliner.scroll_page', 'PAGE_DOWN', 'PRESS') -kmi = km.keymap_items.new('outliner.scroll_page', 'PAGE_UP', 'PRESS') -kmi.properties.up = True -kmi = km.keymap_items.new('outliner.show_one_level', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new('outliner.show_one_level', 'NUMPAD_MINUS', 'PRESS') -kmi.properties.open = False -kmi = km.keymap_items.new('outliner.selected_toggle', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('outliner.expanded_toggle', 'A', 'PRESS', shift=True) -kmi = km.keymap_items.new('outliner.renderability_toggle', 'R', 'PRESS') -kmi = km.keymap_items.new('outliner.selectability_toggle', 'S', 'PRESS') -kmi = km.keymap_items.new('outliner.visibility_toggle', 'V', 'PRESS') -kmi = km.keymap_items.new('outliner.keyingset_add_selected', 'K', 'PRESS') -kmi = km.keymap_items.new('outliner.keyingset_remove_selected', 'K', 'PRESS', alt=True) -kmi = km.keymap_items.new('anim.keyframe_insert', 'I', 'PRESS') -kmi = km.keymap_items.new('anim.keyframe_delete', 'I', 'PRESS', alt=True) -kmi = km.keymap_items.new('outliner.drivers_add_selected', 'D', 'PRESS') -kmi = km.keymap_items.new('outliner.drivers_delete_selected', 'D', 'PRESS', alt=True) - -# Map 3D View Generic -km = kc.keymaps.new('3D View Generic', space_type='VIEW_3D', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('view3d.properties', 'F12', 'PRESS') -kmi = km.keymap_items.new('view3d.toolshelf', 'D', 'PRESS') - -# Map Face Mask -km = kc.keymaps.new('Face Mask', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.face_select_all', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('paint.face_select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('paint.face_select_hide', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('paint.face_select_hide', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('paint.face_select_reveal', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('paint.face_select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('paint.face_select_linked_pick', 'L', 'PRESS') - -# Map Weight Paint Vertex Selection -km = kc.keymaps.new('Weight Paint Vertex Selection', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.vert_select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'SELECT' -kmi = km.keymap_items.new('paint.vert_select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('view3d.select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True) -kmi.properties.deselect = False -kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('view3d.select_circle', 'C', 'PRESS', alt=True) - -# Map Pose -km = kc.keymaps.new('Pose', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_add' -kmi = km.keymap_items.new('pose.hide', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('pose.hide', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('pose.reveal', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True, ctrl=True) -kmi.properties.name = 'VIEW3D_MT_pose_apply' -kmi = km.keymap_items.new('pose.rot_clear', 'R', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.loc_clear', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.scale_clear', 'S', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.quaternions_flip', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.rotation_mode_set', 'R', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('pose.copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', ctrl=True) -kmi.properties.flipped = False -kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', shift=True, ctrl=True) -kmi.properties.flipped = True -kmi = km.keymap_items.new('pose.select_all', 'LEFTMOUSE', 'CLICK') -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('pose.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('pose.select_parent', 'P', 'PRESS', shift=True) -kmi = km.keymap_items.new('pose.select_hierarchy', 'LEFT_BRACKET', 'PRESS') -kmi.properties.direction = 'PARENT' -kmi.properties.extend = False -kmi = km.keymap_items.new('pose.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'PARENT' -kmi.properties.extend = True -kmi = km.keymap_items.new('pose.select_hierarchy', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.direction = 'CHILD' -kmi.properties.extend = False -kmi = km.keymap_items.new('pose.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'CHILD' -kmi.properties.extend = True -kmi = km.keymap_items.new('pose.select_linked', 'L', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.select_grouped', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('pose.select_mirror', 'F', 'PRESS', shift=True) -kmi.properties.only_active = True -kmi = km.keymap_items.new('pose.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('pose.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('pose.ik_add', 'I', 'PRESS', shift=True) -kmi = km.keymap_items.new('pose.ik_clear', 'I', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_pose_group' -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_bone_options_toggle' -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', shift=True, ctrl=True) -kmi.properties.name = 'VIEW3D_MT_bone_options_enable' -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', alt=True) -kmi.properties.name = 'VIEW3D_MT_bone_options_disable' -kmi = km.keymap_items.new('armature.layers_show_all', 'ACCENT_GRAVE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.armature_layers', 'M', 'PRESS', shift=True) -kmi = km.keymap_items.new('pose.bone_layers', 'M', 'PRESS') -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', ctrl=True, alt=True) -kmi.properties.mode = 'BONE_SIZE' -kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'I', 'PRESS') -kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'I', 'PRESS', alt=True) -kmi = km.keymap_items.new('anim.keying_set_active_set', 'I', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('poselib.browse_interactive', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('poselib.pose_add', 'L', 'PRESS', shift=True) -kmi = km.keymap_items.new('poselib.pose_remove', 'L', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('poselib.pose_rename', 'L', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('pose.push', 'E', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('pose.relax', 'E', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.breakdown', 'E', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_pose_specials' - -# Map Object Mode -km = kc.keymaps.new('Object Mode', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.use_proportional_edit_objects' -kmi = km.keymap_items.new('object.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('object.select_linked', 'L', 'PRESS', shift=True) -kmi = km.keymap_items.new('object.select_grouped', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('object.select_mirror', 'M', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS') -kmi.properties.direction = 'PARENT' -kmi.properties.extend = False -kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'PARENT' -kmi.properties.extend = True -kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.direction = 'CHILD' -kmi.properties.extend = False -kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'CHILD' -kmi.properties.extend = True -kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('object.parent_no_inverse_set', 'P', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('object.parent_clear', 'P', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.track_set', 'T', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('object.track_clear', 'T', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('object.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('object.location_clear', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.rotation_clear', 'R', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.scale_clear', 'S', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.origin_clear', 'O', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.hide_view_clear', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('object.hide_render_clear', 'H', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('object.hide_render_set', 'H', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('object.delete', 'X', 'PRESS') -kmi.properties.use_global = False -kmi = km.keymap_items.new('object.delete', 'X', 'PRESS', shift=True) -kmi.properties.use_global = False -kmi = km.keymap_items.new('object.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('object.delete', 'DEL', 'PRESS', shift=True) -kmi.properties.use_global = True -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_add' -kmi = km.keymap_items.new('object.duplicates_make_real', 'A', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True, ctrl=True) -kmi.properties.name = 'VIEW3D_MT_object_apply' -kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_make_single_user' -kmi = km.keymap_items.new('wm.call_menu', 'L', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_make_links' -kmi = km.keymap_items.new('object.duplicate_move', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('object.duplicate_move_linked', 'D', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.join', 'J', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('object.convert', 'C', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('object.proxy_make', 'P', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('object.make_local', 'L', 'PRESS', alt=True) -kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'I', 'PRESS') -kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'I', 'PRESS', alt=True) -kmi = km.keymap_items.new('anim.keying_set_active_set', 'I', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('group.create', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('group.objects_remove', 'G', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('group.objects_remove_all', 'G', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('group.objects_add_active', 'G', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('group.objects_remove_active', 'G', 'PRESS', shift=True, alt=True) -kmi = km.keymap_items.new('rigidbody.objects_add', 'R', 'PRESS', ctrl=True) -kmi.properties.type = 'ACTIVE' -kmi = km.keymap_items.new('rigidbody.objects_add', 'R', 'PRESS', shift=True, ctrl=True) -kmi.properties.type = 'PASSIVE' -kmi = km.keymap_items.new('rigidbody.objects_remove', 'R', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_object_specials' -kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True) -kmi.properties.level = 0 -kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True) -kmi.properties.level = 1 -kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True) -kmi.properties.level = 2 -kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True) -kmi.properties.level = 3 -kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True) -kmi.properties.level = 4 -kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True) -kmi.properties.level = 5 - -# Map Particle -km = kc.keymaps.new('Particle', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('particle.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('particle.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('particle.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('particle.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('particle.select_linked', 'L', 'PRESS') -kmi.properties.deselect = False -kmi = km.keymap_items.new('particle.select_linked', 'L', 'PRESS', shift=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('particle.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('particle.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('particle.reveal', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('particle.hide', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('particle.hide', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.release_confirm = True -kmi.properties.use_planar_constraint= True -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.release_confirm = True -kmi.properties.use_accurate= True -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', any=True) -kmi.properties.release_confirm = True -kmi = km.keymap_items.new('particle.brush_edit', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('particle.brush_edit', 'LEFTMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True) -kmi.properties.data_path_primary = 'tool_settings.particle_edit.brush.size' -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.particle_edit.brush.strength' -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_particle_specials' -kmi = km.keymap_items.new('particle.weight_set', 'K', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' - -# Map 3D View -km = kc.keymaps.new('3D View', space_type='VIEW_3D', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.release_confirm = True -kmi.properties.use_planar_constraint= True -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.release_confirm = True -kmi.properties.use_accurate= True -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', any=True) -kmi.properties.release_confirm = True -kmi = km.keymap_items.new('view3d.cursor3d', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('view3d.rotate', 'MIDDLEMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('view3d.move', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new('view3d.zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('view3d.dolly', 'MIDDLEMOUSE', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('view3d.view_selected', 'NUMPAD_PERIOD', 'PRESS', ctrl=True) -kmi.properties.use_all_regions = True -kmi = km.keymap_items.new('view3d.view_selected', 'Z', 'PRESS') -kmi.properties.use_all_regions = False -kmi = km.keymap_items.new('view3d.view_lock_to_active', 'NUMPAD_PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('view3d.view_lock_clear', 'NUMPAD_PERIOD', 'PRESS', alt=True) -kmi = km.keymap_items.new('view3d.fly', 'F', 'PRESS', shift=True) -kmi = km.keymap_items.new('view3d.smoothview', 'TIMER1', 'ANY', any=True) -kmi = km.keymap_items.new('view3d.rotate', 'TRACKPADPAN', 'ANY') -kmi = km.keymap_items.new('view3d.rotate', 'MOUSEROTATE', 'ANY') -kmi = km.keymap_items.new('view3d.move', 'TRACKPADPAN', 'ANY', shift=True) -kmi = km.keymap_items.new('view3d.zoom', 'TRACKPADZOOM', 'ANY') -kmi = km.keymap_items.new('view3d.zoom', 'TRACKPADPAN', 'ANY', ctrl=True) -kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_PLUS', 'PRESS') -kmi.properties.delta = 1 -kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_MINUS', 'PRESS') -kmi.properties.delta = -1 -kmi = km.keymap_items.new('view3d.zoom', 'EQUAL', 'PRESS', ctrl=True) -kmi.properties.delta = 1 -kmi = km.keymap_items.new('view3d.zoom', 'MINUS', 'PRESS', ctrl=True) -kmi.properties.delta = -1 -kmi = km.keymap_items.new('view3d.zoom', 'WHEELINMOUSE', 'PRESS') -kmi.properties.delta = 1 -kmi = km.keymap_items.new('view3d.zoom', 'WHEELOUTMOUSE', 'PRESS') -kmi.properties.delta = -1 -kmi = km.keymap_items.new('view3d.zoom_camera_1_to_1', 'NUMPAD_ENTER', 'PRESS', shift=True) -kmi = km.keymap_items.new('view3d.view_center_camera', 'HOME', 'PRESS') -kmi = km.keymap_items.new('view3d.view_center_cursor', 'HOME', 'PRESS', alt=True) -kmi = km.keymap_items.new('view3d.view_all', 'HOME', 'PRESS') -kmi.properties.center = False -kmi = km.keymap_items.new('view3d.view_all', 'HOME', 'PRESS', ctrl=True) -kmi.properties.use_all_regions = True -kmi.properties.center = False -kmi = km.keymap_items.new('view3d.view_all', 'C', 'PRESS', shift=True) -kmi.properties.center = True -kmi = km.keymap_items.new('view3d.viewnumpad', 'C', 'PRESS') -kmi.properties.type = 'CAMERA' -kmi = km.keymap_items.new('view3d.viewnumpad', 'F', 'PRESS') -kmi.properties.type = 'FRONT' -kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_2', 'PRESS') -kmi.properties.type = 'ORBITDOWN' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'PRESS') -kmi.properties.type = 'RIGHT' -kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_4', 'PRESS') -kmi.properties.type = 'ORBITLEFT' -kmi = km.keymap_items.new('view3d.view_persportho', 'P', 'PRESS') -kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_6', 'PRESS') -kmi.properties.type = 'ORBITRIGHT' -kmi = km.keymap_items.new('view3d.viewnumpad', 'T', 'PRESS') -kmi.properties.type = 'TOP' -kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_8', 'PRESS') -kmi.properties.type = 'ORBITUP' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'PRESS', ctrl=True) -kmi.properties.type = 'BACK' -kmi = km.keymap_items.new('view3d.viewnumpad', 'L', 'PRESS') -kmi.properties.type = 'LEFT' -kmi = km.keymap_items.new('view3d.viewnumpad', 'B', 'PRESS') -kmi.properties.type = 'BOTTOM' -kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_2', 'PRESS', ctrl=True) -kmi.properties.type = 'PANDOWN' -kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_4', 'PRESS', ctrl=True) -kmi.properties.type = 'PANLEFT' -kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_6', 'PRESS', ctrl=True) -kmi.properties.type = 'PANRIGHT' -kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_8', 'PRESS', ctrl=True) -kmi.properties.type = 'PANUP' -kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', ctrl=True) -kmi.properties.type = 'PANRIGHT' -kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True) -kmi.properties.type = 'PANLEFT' -kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', shift=True) -kmi.properties.type = 'PANUP' -kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', shift=True) -kmi.properties.type = 'PANDOWN' -kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.type = 'ORBITLEFT' -kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.type = 'ORBITRIGHT' -kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.type = 'ORBITUP' -kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.type = 'ORBITDOWN' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'PRESS', shift=True) -kmi.properties.type = 'FRONT' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'PRESS', shift=True) -kmi.properties.type = 'RIGHT' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_7', 'PRESS', shift=True) -kmi.properties.type = 'TOP' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'PRESS', shift=True, ctrl=True) -kmi.properties.type = 'BACK' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'PRESS', shift=True, ctrl=True) -kmi.properties.type = 'LEFT' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_7', 'PRESS', shift=True, ctrl=True) -kmi.properties.type = 'BOTTOM' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.localview', 'NUMPAD_SLASH', 'PRESS') -kmi = km.keymap_items.new('view3d.ndof_orbit_zoom', 'NDOF_MOTION', 'ANY') -kmi = km.keymap_items.new('view3d.ndof_orbit', 'NDOF_MOTION', 'ANY', ctrl=True) -kmi = km.keymap_items.new('view3d.ndof_pan', 'NDOF_MOTION', 'ANY', shift=True) -kmi = km.keymap_items.new('view3d.ndof_all', 'NDOF_MOTION', 'ANY', shift=True, ctrl=True) -kmi = km.keymap_items.new('view3d.view_selected', 'NDOF_BUTTON_FIT', 'PRESS') -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_FRONT', 'PRESS') -kmi.properties.type = 'FRONT' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_BACK', 'PRESS') -kmi.properties.type = 'BACK' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_LEFT', 'PRESS') -kmi.properties.type = 'LEFT' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_RIGHT', 'PRESS') -kmi.properties.type = 'RIGHT' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_TOP', 'PRESS') -kmi.properties.type = 'TOP' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_BOTTOM', 'PRESS') -kmi.properties.type = 'BOTTOM' -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_FRONT', 'PRESS', shift=True) -kmi.properties.type = 'FRONT' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_RIGHT', 'PRESS', shift=True) -kmi.properties.type = 'RIGHT' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_TOP', 'PRESS', shift=True) -kmi.properties.type = 'TOP' -kmi.properties.align_active = True -kmi = km.keymap_items.new('view3d.layers', 'ACCENT_GRAVE', 'PRESS') -kmi.properties.nr = 0 -kmi = km.keymap_items.new('view3d.layers', 'ONE', 'PRESS', any=True) -kmi.properties.nr = 1 -kmi = km.keymap_items.new('view3d.layers', 'TWO', 'PRESS', any=True) -kmi.properties.nr = 2 -kmi = km.keymap_items.new('view3d.layers', 'THREE', 'PRESS', any=True) -kmi.properties.nr = 3 -kmi = km.keymap_items.new('view3d.layers', 'FOUR', 'PRESS', any=True) -kmi.properties.nr = 4 -kmi = km.keymap_items.new('view3d.layers', 'FIVE', 'PRESS', any=True) -kmi.properties.nr = 5 -kmi = km.keymap_items.new('view3d.layers', 'SIX', 'PRESS', any=True) -kmi.properties.nr = 6 -kmi = km.keymap_items.new('view3d.layers', 'SEVEN', 'PRESS', any=True) -kmi.properties.nr = 7 -kmi = km.keymap_items.new('view3d.layers', 'EIGHT', 'PRESS', any=True) -kmi.properties.nr = 8 -kmi = km.keymap_items.new('view3d.layers', 'NINE', 'PRESS', any=True) -kmi.properties.nr = 9 -kmi = km.keymap_items.new('view3d.layers', 'ZERO', 'PRESS', any=True) -kmi.properties.nr = 10 -kmi = km.keymap_items.new('wm.context_toggle_enum', 'F3', 'PRESS') -kmi.properties.data_path = 'space_data.shading.type' -kmi.properties.value_1 = 'SOLID' -kmi.properties.value_2 = 'WIREFRAME' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'Z', 'PRESS', alt=True) -kmi.properties.data_path = 'space_data.shading.type' -kmi.properties.value_1 = 'SOLID' -kmi.properties.value_2 = 'TEXTURED' -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi.properties.center = False -kmi.properties.enumerate = False -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', ctrl=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = True -kmi.properties.center = False -kmi.properties.enumerate = False -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi.properties.center = True -kmi.properties.enumerate = False -kmi.properties.object = True -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi.properties.center = False -kmi.properties.enumerate = True -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True) -kmi.properties.extend = True -kmi.properties.deselect = False -kmi.properties.toggle = True -kmi.properties.center = True -kmi.properties.enumerate = False -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', ctrl=True, alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi.properties.center = True -kmi.properties.enumerate = True -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = True -kmi.properties.center = False -kmi.properties.enumerate = True -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True, alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = True -kmi.properties.center = True -kmi.properties.enumerate = True -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_box', 'EVT_TWEAK_L', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True) -kmi.properties.deselect = False -kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('view3d.select_circle', 'C', 'PRESS', alt=True) -# kmi = km.keymap_items.new('view3d.clip_border', 'B', 'PRESS', alt=True) -kmi = km.keymap_items.new('view3d.zoom_border', 'B', 'PRESS', shift=True) -kmi = km.keymap_items.new('view3d.render_border', 'B', 'PRESS', shift=True) -kmi.properties.camera_only = True -kmi = km.keymap_items.new('view3d.render_border', 'B', 'PRESS', ctrl=True) -kmi.properties.camera_only = False -kmi = km.keymap_items.new('view3d.clear_render_border', 'B', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('view3d.camera_to_view', 'NUMPAD_0', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('view3d.object_as_camera', 'NUMPAD_0', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_snap' -kmi = km.keymap_items.new('view3d.copybuffer', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('view3d.pastebuffer', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.context_set_enum', 'COMMA', 'PRESS') -kmi.properties.data_path = 'space_data.pivot_point' -kmi.properties.value = 'BOUNDING_BOX_CENTER' -kmi = km.keymap_items.new('wm.context_set_enum', 'COMMA', 'PRESS', ctrl=True) -kmi.properties.data_path = 'space_data.pivot_point' -kmi.properties.value = 'MEDIAN_POINT' -kmi = km.keymap_items.new('wm.context_toggle', 'COMMA', 'PRESS', alt=True) -kmi.properties.data_path = 'space_data.use_pivot_point_align' -kmi = km.keymap_items.new('wm.context_toggle', 'SPACE', 'PRESS', ctrl=True) -kmi.properties.data_path = 'space_data.show_manipulator' -kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'PRESS') -kmi.properties.data_path = 'space_data.pivot_point' -kmi.properties.value = 'CURSOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'PRESS', ctrl=True) -kmi.properties.data_path = 'space_data.pivot_point' -kmi.properties.value = 'INDIVIDUAL_ORIGINS' -kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'PRESS', alt=True) -kmi.properties.data_path = 'space_data.pivot_point' -kmi.properties.value = 'ACTIVE_ELEMENT' -kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS', shift=True) -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.rotate', 'E', 'PRESS', shift=True) -kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS', shift=True) -kmi = km.keymap_items.new('transform.bend', 'Q', 'PRESS', shift=True) -kmi = km.keymap_items.new('transform.tosphere', 'S', 'PRESS', shift=True, alt=True) -kmi = km.keymap_items.new('transform.shear', 'S', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('transform.select_orientation', 'SPACE', 'PRESS', alt=True) -kmi = km.keymap_items.new('transform.create_orientation', 'SPACE', 'PRESS', ctrl=True, alt=True) -kmi.properties.use = True -kmi = km.keymap_items.new('transform.mirror', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.use_snap' -kmi = km.keymap_items.new('wm.context_menu_enum', 'TAB', 'PRESS', shift=True, ctrl=True) -kmi.properties.data_path = 'tool_settings.snap_element' -kmi = km.keymap_items.new('transform.translate', 'T', 'PRESS', shift=True) -kmi.properties.texture_space = True -kmi = km.keymap_items.new('transform.resize', 'T', 'PRESS', shift=True, alt=True) -kmi.properties.texture_space = True -kmi = km.keymap_items.new('transform.skin_resize', 'A', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('view3d.enable_manipulator', 'W', 'PRESS') -kmi.properties.translate = True -kmi = km.keymap_items.new('view3d.enable_manipulator', 'E', 'PRESS') -kmi.properties.rotate = True -kmi = km.keymap_items.new('view3d.enable_manipulator', 'R', 'PRESS') -kmi.properties.scale = True -kmi = km.keymap_items.new('wm.context_toggle', 'S', 'PRESS') -kmi.properties.data_path = 'tool_settings.use_snap' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'A', 'PRESS') -kmi.properties.data_path = 'tool_settings.snap_element' -kmi.properties.value_1 = 'VERTEX' -kmi.properties.value_2 = 'INCREMENT' -kmi = km.keymap_items.new('view3d.select_box', 'EVT_TWEAK_L', 'ANY', ctrl=True) -kmi = km.keymap_items.new('wm.context_toggle', 'G', 'PRESS') -kmi.properties.data_path = 'space_data.overlay.show_floor' - -# Map Animation Channels -km = kc.keymaps.new('Animation Channels', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.children_only = True -kmi = km.keymap_items.new('anim.channels_rename', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('anim.channels_select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('anim.channels_select_all_toggle', 'I', 'PRESS', ctrl=True) -kmi.properties.invert = True -kmi = km.keymap_items.new('anim.channels_select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('anim.channels_select_box', 'EVT_TWEAK_L', 'ANY') -kmi = km.keymap_items.new('anim.channels_delete', 'X', 'PRESS') -kmi = km.keymap_items.new('anim.channels_delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('anim.channels_setting_toggle', 'W', 'PRESS', shift=True) -kmi = km.keymap_items.new('anim.channels_setting_enable', 'W', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('anim.channels_setting_disable', 'W', 'PRESS', alt=True) -kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS') -kmi = km.keymap_items.new('anim.channels_expand', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new('anim.channels_collapse', 'NUMPAD_MINUS', 'PRESS') -kmi = km.keymap_items.new('anim.channels_expand', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi.properties.all = False -kmi = km.keymap_items.new('anim.channels_collapse', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi.properties.all = False -kmi = km.keymap_items.new('anim.channels_move', 'PAGE_UP', 'PRESS') -kmi.properties.direction = 'UP' -kmi = km.keymap_items.new('anim.channels_move', 'PAGE_DOWN', 'PRESS') -kmi.properties.direction = 'DOWN' -kmi = km.keymap_items.new('anim.channels_move', 'PAGE_UP', 'PRESS', shift=True) -kmi.properties.direction = 'TOP' -kmi = km.keymap_items.new('anim.channels_move', 'PAGE_DOWN', 'PRESS', shift=True) -kmi.properties.direction = 'BOTTOM' -kmi = km.keymap_items.new('anim.channels_group', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('anim.channels_ungroup', 'G', 'PRESS', alt=True) - -# Map UV Editor -km = kc.keymaps.new('UV Editor', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.context_toggle', 'Q', 'PRESS') -kmi.properties.data_path = 'tool_settings.use_uv_sculpt' -kmi = km.keymap_items.new('uv.mark_seam', 'E', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('uv.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('uv.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('uv.select_loop', 'SELECTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('uv.select_loop', 'SELECTMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('uv.select_split', 'Y', 'PRESS') -kmi = km.keymap_items.new('uv.select_box', 'B', 'PRESS') -kmi.properties.pinned = False -kmi = km.keymap_items.new('uv.select_box', 'B', 'PRESS', shift=True) -kmi.properties.pinned = True -kmi = km.keymap_items.new('uv.circle_select', 'C', 'PRESS') -kmi = km.keymap_items.new('uv.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True) -kmi.properties.deselect = False -kmi = km.keymap_items.new('uv.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('uv.select_linked', 'L', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('uv.select_linked_pick', 'L', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('uv.select_linked', 'L', 'PRESS', shift=True, ctrl=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('uv.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('uv.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('uv.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('uv.select_pinned', 'P', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS') -kmi.properties.name = 'IMAGE_MT_uvs_weldalign' -kmi = km.keymap_items.new('uv.stitch', 'V', 'PRESS') -kmi = km.keymap_items.new('uv.pin', 'P', 'PRESS') -kmi.properties.clear = False -kmi = km.keymap_items.new('uv.pin', 'P', 'PRESS', alt=True) -kmi.properties.clear = True -kmi = km.keymap_items.new('uv.unwrap', 'E', 'PRESS') -kmi = km.keymap_items.new('uv.minimize_stretch', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('uv.pack_islands', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('uv.average_islands_scale', 'A', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('uv.hide', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('uv.hide', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('uv.reveal', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('uv.cursor_set', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('uv.tile_set', 'ACTIONMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True) -kmi.properties.name = 'IMAGE_MT_uvs_snap' -kmi = km.keymap_items.new('wm.call_menu', 'TAB', 'PRESS', ctrl=True) -kmi.properties.name = 'IMAGE_MT_uvs_select_mode' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS') -kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS') -kmi = km.keymap_items.new('transform.shear', 'S', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('transform.mirror', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.use_snap' -kmi = km.keymap_items.new('wm.context_menu_enum', 'TAB', 'PRESS', shift=True, ctrl=True) -kmi.properties.data_path = 'tool_settings.snap_uv_element' - -# Map Mask Editing -km = kc.keymaps.new('Mask Editing', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('mask.new', 'N', 'PRESS', alt=True) -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.use_proportional_edit_mask' -kmi = km.keymap_items.new('mask.add_vertex_slide', 'ACTIONMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mask.add_feather_vertex_slide', 'ACTIONMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('mask.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('mask.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('mask.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi = km.keymap_items.new('mask.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = True -kmi = km.keymap_items.new('mask.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('mask.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('mask.select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mask.select_linked_pick', 'L', 'PRESS') -kmi.properties.deselect = False -kmi = km.keymap_items.new('mask.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('mask.select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('mask.select_circle', 'C', 'PRESS') -kmi = km.keymap_items.new('mask.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True, alt=True) -kmi.properties.deselect = False -kmi = km.keymap_items.new('mask.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True, alt=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('mask.hide_view_clear', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('mask.hide_view_set', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('mask.hide_view_set', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('mask.cyclic_toggle', 'C', 'PRESS', alt=True) -kmi = km.keymap_items.new('mask.slide_point', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('mask.handle_type_set', 'V', 'PRESS') -kmi = km.keymap_items.new('mask.normals_make_consistent', 'N', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mask.parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mask.parent_clear', 'P', 'PRESS', alt=True) -kmi = km.keymap_items.new('mask.shape_key_insert', 'I', 'PRESS') -kmi = km.keymap_items.new('mask.shape_key_clear', 'I', 'PRESS', alt=True) -kmi = km.keymap_items.new('uv.cursor_set', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS') -kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS') -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', alt=True) -kmi.properties.mode = 'MASK_SHRINKFATTEN' - -# Map Graph Editor -km = kc.keymaps.new('Graph Editor', space_type='GRAPH_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.context_toggle', 'H', 'PRESS', ctrl=True) -kmi.properties.data_path = 'space_data.show_handles' -kmi = km.keymap_items.new('graph.cursor_set', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi.properties.column = False -kmi.properties.curves = False -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi.properties.column = True -kmi.properties.curves = False -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi.properties.column = False -kmi.properties.curves = False -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = True -kmi.properties.column = True -kmi.properties.curves = False -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.extend = False -kmi.properties.column = False -kmi.properties.curves = True -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True) -kmi.properties.extend = True -kmi.properties.column = False -kmi.properties.curves = True -kmi = km.keymap_items.new('graph.select_leftright', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'CHECK' -kmi.properties.extend = False -kmi = km.keymap_items.new('graph.select_leftright', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.mode = 'CHECK' -kmi.properties.extend = True -kmi = km.keymap_items.new('graph.select_leftright', 'LEFT_BRACKET', 'PRESS') -kmi.properties.mode = 'LEFT' -kmi.properties.extend = False -kmi = km.keymap_items.new('graph.select_leftright', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.mode = 'RIGHT' -kmi.properties.extend = False -kmi = km.keymap_items.new('graph.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi.properties.invert = False -kmi = km.keymap_items.new('graph.select_all_toggle', 'I', 'PRESS', ctrl=True) -kmi.properties.invert = True -kmi = km.keymap_items.new('graph.select_box', 'B', 'PRESS') -kmi.properties.axis_range = False -kmi.properties.include_handles = False -kmi = km.keymap_items.new('graph.select_box', 'B', 'PRESS', alt=True) -kmi.properties.axis_range = True -kmi.properties.include_handles = False -kmi = km.keymap_items.new('graph.select_box', 'B', 'PRESS', ctrl=True) -kmi.properties.axis_range = False -kmi.properties.include_handles = True -kmi = km.keymap_items.new('graph.select_box', 'B', 'PRESS', ctrl=True, alt=True) -kmi.properties.axis_range = True -kmi.properties.include_handles = True -kmi = km.keymap_items.new('graph.select_column', 'K', 'PRESS') -kmi.properties.mode = 'KEYS' -kmi = km.keymap_items.new('graph.select_column', 'K', 'PRESS', ctrl=True) -kmi.properties.mode = 'CFRA' -kmi = km.keymap_items.new('graph.select_column', 'K', 'PRESS', shift=True) -kmi.properties.mode = 'MARKERS_COLUMN' -kmi = km.keymap_items.new('graph.select_column', 'K', 'PRESS', alt=True) -kmi.properties.mode = 'MARKERS_BETWEEN' -kmi = km.keymap_items.new('graph.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.select_linked', 'L', 'PRESS') -kmi = km.keymap_items.new('graph.frame_jump', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.snap', 'S', 'PRESS', shift=True) -kmi = km.keymap_items.new('graph.mirror', 'M', 'PRESS', shift=True) -kmi = km.keymap_items.new('graph.handle_type', 'V', 'PRESS') -kmi = km.keymap_items.new('graph.interpolation_type', 'T', 'PRESS') -kmi = km.keymap_items.new('graph.clean', 'O', 'PRESS') -kmi = km.keymap_items.new('graph.smooth', 'O', 'PRESS', alt=True) -kmi = km.keymap_items.new('graph.sample', 'O', 'PRESS', shift=True) -kmi = km.keymap_items.new('graph.bake', 'C', 'PRESS', alt=True) -kmi = km.keymap_items.new('graph.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('graph.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('graph.duplicate_move', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('graph.keyframe_insert', 'I', 'PRESS') -kmi = km.keymap_items.new('graph.click_insert', 'ACTIONMOUSE', 'CLICK', ctrl=True) -kmi = km.keymap_items.new('graph.copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.paste', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.previewrange_set', 'P', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('graph.view_all', 'HOME', 'PRESS') -kmi = km.keymap_items.new('graph.view_selected', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('graph.fmodifier_add', 'M', 'PRESS', shift=True, ctrl=True) -kmi.properties.only_active = False -kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS') -kmi.properties.mode = 'TIME_EXTEND' -kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS') -kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS') -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) - -# Map Node Editor -km = kc.keymaps.new('Node Editor', space_type='NODE_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', shift=True, ctrl=True, alt=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.tweak = True -kmi = km.keymap_items.new('node.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True, alt=True) -kmi.properties.deselect = False -kmi = km.keymap_items.new('node.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True, alt=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('node.link', 'LEFTMOUSE', 'PRESS') -kmi.properties.detach = False -kmi = km.keymap_items.new('node.link', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi.properties.detach = True -kmi = km.keymap_items.new('node.resize', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('node.add_reroute', 'LEFTMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.links_cut', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.select_link_viewer', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('node.backimage_move', 'MIDDLEMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.backimage_zoom', 'V', 'PRESS') -kmi.properties.factor = 0.833329975605011 -kmi = km.keymap_items.new('node.backimage_zoom', 'V', 'PRESS', alt=True) -kmi.properties.factor = 1.2000000476837158 -kmi = km.keymap_items.new('node.backimage_sample', 'ACTIONMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.link_make', 'F', 'PRESS') -kmi.properties.replace = False -kmi = km.keymap_items.new('node.link_make', 'F', 'PRESS', shift=True) -kmi.properties.replace = True -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'NODE_MT_add' -kmi = km.keymap_items.new('node.duplicate_move', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.duplicate_move_keep_inputs', 'D', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('node.parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.join', 'J', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.hide_toggle', 'H', 'PRESS') -kmi = km.keymap_items.new('node.mute_toggle', 'M', 'PRESS') -kmi = km.keymap_items.new('node.preview_toggle', 'H', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.hide_socket_toggle', 'H', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.view_all', 'HOME', 'PRESS') -kmi = km.keymap_items.new('node.view_selected', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('node.select_box', 'B', 'PRESS') -kmi.properties.tweak = False -kmi = km.keymap_items.new('node.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('node.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('node.delete_reconnect', 'X', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('node.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('node.select_linked_to', 'L', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.select_linked_from', 'L', 'PRESS') -kmi = km.keymap_items.new('node.select_grouped', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.select_same_type_step', 'RIGHT_BRACKET', 'PRESS', shift=True) -kmi.properties.prev = False -kmi = km.keymap_items.new('node.select_same_type_step', 'LEFT_BRACKET', 'PRESS', shift=True) -kmi.properties.prev = True -kmi = km.keymap_items.new('node.find_node', 'F', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.group_separate', 'P', 'PRESS') -kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS') -kmi.properties.exit = False -kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS', shift=True) -kmi.properties.exit = True -kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.group_separate', 'P', 'PRESS') -kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS') -kmi.properties.exit = False -kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS', shift=True) -kmi.properties.exit = True -kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.group_separate', 'P', 'PRESS') -kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS') -kmi.properties.exit = False -kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS', shift=True) -kmi.properties.exit = True -kmi = km.keymap_items.new('node.read_viewlayers', 'R', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.read_fullsamplelayers', 'R', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.render_changed', 'Z', 'PRESS') -kmi = km.keymap_items.new('node.clipboard_copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.clipboard_paste', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.viewer_border', 'B', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.translate_attach', 'G', 'PRESS') -kmi = km.keymap_items.new('node.translate_attach', 'EVT_TWEAK_A', 'ANY') -kmi = km.keymap_items.new('node.translate_attach', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS') -kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS') -kmi = km.keymap_items.new('node.move_detach_links', 'D', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.move_detach_links_release', 'EVT_TWEAK_A', 'ANY', alt=True) -kmi = km.keymap_items.new('node.move_detach_links', 'EVT_TWEAK_S', 'ANY', alt=True) -kmi = km.keymap_items.new('node.detach_translate_attach', 'F', 'PRESS', alt=True) - -# Map Info -km = kc.keymaps.new('Info', space_type='INFO', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('info.select_pick', 'SELECTMOUSE', 'PRESS') -kmi = km.keymap_items.new('info.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('info.select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('info.report_replay', 'R', 'PRESS') -kmi = km.keymap_items.new('info.report_delete', 'X', 'PRESS') -kmi = km.keymap_items.new('info.report_delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('info.report_copy', 'C', 'PRESS', ctrl=True) - -# Map File Browser Main -km = kc.keymaps.new('File Browser Main', space_type='FILE_BROWSER', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('file.execute', 'LEFTMOUSE', 'DOUBLE_CLICK') -kmi.properties.need_active = True -kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK') -kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', alt=True) -kmi.properties.extend = True -kmi.properties.fill = True -kmi = km.keymap_items.new('file.select', 'RIGHTMOUSE', 'CLICK') -kmi.properties.open = False -kmi = km.keymap_items.new('file.select', 'RIGHTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi.properties.open = False -kmi = km.keymap_items.new('file.select', 'RIGHTMOUSE', 'CLICK', alt=True) -kmi.properties.extend = True -kmi.properties.fill = True -kmi.properties.open = False -kmi = km.keymap_items.new('file.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('file.refresh', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('file.select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('file.select_box', 'EVT_TWEAK_L', 'ANY') -kmi = km.keymap_items.new('file.rename', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('file.highlight', 'MOUSEMOVE', 'ANY', any=True) -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS') -kmi.properties.increment = 1 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', shift=True) -kmi.properties.increment = 10 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi.properties.increment = 100 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS') -kmi.properties.increment = -1 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', shift=True) -kmi.properties.increment = -10 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi.properties.increment = -100 - -# Map Dopesheet -km = kc.keymaps.new('Dopesheet', space_type='DOPESHEET_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('action.clickselect', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi.properties.column = False -kmi = km.keymap_items.new('action.clickselect', 'SELECTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi.properties.column = True -kmi = km.keymap_items.new('action.clickselect', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi.properties.column = False -kmi = km.keymap_items.new('action.clickselect', 'SELECTMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = True -kmi.properties.column = True -kmi = km.keymap_items.new('action.select_leftright', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'CHECK' -kmi.properties.extend = False -kmi = km.keymap_items.new('action.select_leftright', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.mode = 'CHECK' -kmi.properties.extend = True -kmi = km.keymap_items.new('action.select_leftright', 'LEFT_BRACKET', 'PRESS') -kmi.properties.mode = 'LEFT' -kmi.properties.extend = False -kmi = km.keymap_items.new('action.select_leftright', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.mode = 'RIGHT' -kmi.properties.extend = False -kmi = km.keymap_items.new('action.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi.properties.invert = False -kmi = km.keymap_items.new('action.select_all_toggle', 'I', 'PRESS', ctrl=True) -kmi.properties.invert = True -kmi = km.keymap_items.new('action.select_box', 'B', 'PRESS') -kmi.properties.axis_range = False -kmi = km.keymap_items.new('action.select_box', 'B', 'PRESS', alt=True) -kmi.properties.axis_range = True -kmi = km.keymap_items.new('action.select_column', 'K', 'PRESS') -kmi.properties.mode = 'KEYS' -kmi = km.keymap_items.new('action.select_column', 'K', 'PRESS', ctrl=True) -kmi.properties.mode = 'CFRA' -kmi = km.keymap_items.new('action.select_column', 'K', 'PRESS', shift=True) -kmi.properties.mode = 'MARKERS_COLUMN' -kmi = km.keymap_items.new('action.select_column', 'K', 'PRESS', alt=True) -kmi.properties.mode = 'MARKERS_BETWEEN' -kmi = km.keymap_items.new('action.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.select_linked', 'L', 'PRESS') -kmi = km.keymap_items.new('action.frame_jump', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.snap', 'S', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.mirror', 'M', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.handle_type', 'V', 'PRESS') -kmi = km.keymap_items.new('action.interpolation_type', 'T', 'PRESS') -kmi = km.keymap_items.new('action.extrapolation_type', 'E', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.keyframe_type', 'R', 'PRESS') -kmi = km.keymap_items.new('action.clean', 'O', 'PRESS') -kmi = km.keymap_items.new('action.sample', 'O', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('action.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('action.duplicate_move', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.keyframe_insert', 'I', 'PRESS') -kmi = km.keymap_items.new('action.copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.paste', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.previewrange_set', 'P', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('action.view_all', 'HOME', 'PRESS') -kmi = km.keymap_items.new('action.view_selected', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS') -kmi = km.keymap_items.new('transform.transform', 'G', 'PRESS') -kmi.properties.mode = 'TIME_TRANSLATE' -kmi = km.keymap_items.new('transform.transform', 'EVT_TWEAK_S', 'ANY') -kmi.properties.mode = 'TIME_TRANSLATE' -kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS') -kmi.properties.mode = 'TIME_EXTEND' -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS') -kmi.properties.mode = 'TIME_SCALE' -kmi = km.keymap_items.new('transform.transform', 'T', 'PRESS', shift=True) -kmi.properties.mode = 'TIME_SLIDE' -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) - -# Map NLA Editor -km = kc.keymaps.new('NLA Editor', space_type='NLA_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('nla.click_select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.click_select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('nla.select_leftright', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'CHECK' -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.select_leftright', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.mode = 'CHECK' -kmi.properties.extend = True -kmi = km.keymap_items.new('nla.select_leftright', 'LEFT_BRACKET', 'PRESS') -kmi.properties.mode = 'LEFT' -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.select_leftright', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.mode = 'RIGHT' -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi.properties.invert = False -kmi = km.keymap_items.new('nla.select_all_toggle', 'I', 'PRESS', ctrl=True) -kmi.properties.invert = True -kmi = km.keymap_items.new('nla.select_box', 'B', 'PRESS') -kmi.properties.axis_range = False -kmi = km.keymap_items.new('nla.select_box', 'B', 'PRESS', alt=True) -kmi.properties.axis_range = True -kmi = km.keymap_items.new('nla.view_all', 'HOME', 'PRESS') -kmi = km.keymap_items.new('nla.view_selected', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('nla.tweakmode_enter', 'TAB', 'PRESS') -kmi = km.keymap_items.new('nla.tweakmode_exit', 'TAB', 'PRESS') -kmi = km.keymap_items.new('nla.actionclip_add', 'A', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.transition_add', 'T', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.soundclip_add', 'K', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.meta_add', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.meta_remove', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('nla.duplicate', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('nla.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('nla.split', 'Y', 'PRESS') -kmi = km.keymap_items.new('nla.mute_toggle', 'H', 'PRESS') -kmi = km.keymap_items.new('nla.swap', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('nla.move_up', 'PAGE_UP', 'PRESS') -kmi = km.keymap_items.new('nla.move_down', 'PAGE_DOWN', 'PRESS') -kmi = km.keymap_items.new('nla.apply_scale', 'A', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('nla.clear_scale', 'S', 'PRESS', alt=True) -kmi = km.keymap_items.new('nla.snap', 'S', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.fmodifier_add', 'M', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('transform.transform', 'G', 'PRESS') -kmi.properties.mode = 'TRANSLATION' -kmi = km.keymap_items.new('transform.transform', 'EVT_TWEAK_S', 'ANY') -kmi.properties.mode = 'TRANSLATION' -kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS') -kmi.properties.mode = 'TIME_EXTEND' -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS') -kmi.properties.mode = 'TIME_SCALE' -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) - -# Map Sequencer -km = kc.keymaps.new('Sequencer', space_type='SEQUENCE_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('sequencer.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('sequencer.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('sequencer.cut', 'K', 'PRESS') -kmi.properties.type = 'SOFT' -kmi = km.keymap_items.new('sequencer.cut', 'K', 'PRESS', shift=True) -kmi.properties.type = 'HARD' -kmi = km.keymap_items.new('sequencer.mute', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('sequencer.mute', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('sequencer.unmute', 'H', 'PRESS', alt=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('sequencer.unmute', 'H', 'PRESS', shift=True, alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('sequencer.lock', 'L', 'PRESS', shift=True) -kmi = km.keymap_items.new('sequencer.unlock', 'L', 'PRESS', shift=True, alt=True) -kmi = km.keymap_items.new('sequencer.reassign_inputs', 'R', 'PRESS') -kmi = km.keymap_items.new('sequencer.reload', 'R', 'PRESS', alt=True) -kmi = km.keymap_items.new('sequencer.reload', 'R', 'PRESS', shift=True, alt=True) -kmi.properties.adjust_length = True -kmi = km.keymap_items.new('sequencer.offset_clear', 'O', 'PRESS', alt=True) -kmi = km.keymap_items.new('sequencer.duplicate_move', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('sequencer.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('sequencer.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('sequencer.copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.paste', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.images_separate', 'Y', 'PRESS') -kmi = km.keymap_items.new('sequencer.meta_toggle', 'TAB', 'PRESS') -kmi = km.keymap_items.new('sequencer.meta_make', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.meta_separate', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('sequencer.view_all', 'HOME', 'PRESS') -kmi = km.keymap_items.new('sequencer.view_selected', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_UP', 'PRESS') -kmi.properties.next = True -kmi.properties.center = False -kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_DOWN', 'PRESS') -kmi.properties.next = False -kmi.properties.center = False -kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_UP', 'PRESS', alt=True) -kmi.properties.next = True -kmi.properties.center = True -kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_DOWN', 'PRESS', alt=True) -kmi.properties.next = False -kmi.properties.center = True -kmi = km.keymap_items.new('sequencer.swap', 'LEFT_ARROW', 'PRESS', alt=True) -kmi.properties.side = 'LEFT' -kmi = km.keymap_items.new('sequencer.swap', 'RIGHT_ARROW', 'PRESS', alt=True) -kmi.properties.side = 'RIGHT' -kmi = km.keymap_items.new('sequencer.gap_remove', 'BACK_SPACE', 'PRESS') -kmi.properties.all = False -kmi = km.keymap_items.new('sequencer.gap_remove', 'BACK_SPACE', 'PRESS', shift=True) -kmi.properties.all = True -kmi = km.keymap_items.new('sequencer.gap_insert', 'EQUAL', 'PRESS', shift=True) -kmi = km.keymap_items.new('sequencer.snap', 'S', 'PRESS', shift=True) -kmi = km.keymap_items.new('sequencer.swap_inputs', 'S', 'PRESS', alt=True) -kmi = km.keymap_items.new('sequencer.cut_multicam', 'ONE', 'PRESS') -kmi.properties.camera = 1 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'TWO', 'PRESS') -kmi.properties.camera = 2 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'THREE', 'PRESS') -kmi.properties.camera = 3 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'FOUR', 'PRESS') -kmi.properties.camera = 4 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'FIVE', 'PRESS') -kmi.properties.camera = 5 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'SIX', 'PRESS') -kmi.properties.camera = 6 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'SEVEN', 'PRESS') -kmi.properties.camera = 7 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'EIGHT', 'PRESS') -kmi.properties.camera = 8 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'NINE', 'PRESS') -kmi.properties.camera = 9 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'ZERO', 'PRESS') -kmi.properties.camera = 10 -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi.properties.linked_handle = False -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = False -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi.properties.linked_handle = False -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = False -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi.properties.linked_handle = True -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = False -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = True -kmi.properties.linked_handle = True -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = False -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi.properties.linked_handle = False -kmi.properties.left_right = 'MOUSE' -kmi.properties.linked_time = True -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.extend = True -kmi.properties.linked_handle = False -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = True -kmi = km.keymap_items.new('sequencer.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.select_linked_pick', 'L', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('sequencer.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('sequencer.select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('sequencer.select_grouped', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'SEQUENCER_MT_add' -kmi = km.keymap_items.new('wm.call_menu', 'C', 'PRESS') -kmi.properties.name = 'SEQUENCER_MT_change' -kmi = km.keymap_items.new('wm.context_set_int', 'O', 'PRESS') -kmi.properties.data_path = 'scene.sequence_editor.overlay_frame' -kmi.properties.value = 0 -kmi = km.keymap_items.new('transform.seq_slide', 'G', 'PRESS') -kmi = km.keymap_items.new('transform.seq_slide', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS') -kmi.properties.mode = 'TIME_EXTEND' -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) - -# Map Clip Editor -km = kc.keymaps.new('Clip Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('clip.view_pan', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.view_pan', 'MIDDLEMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.view_pan', 'TRACKPADPAN', 'ANY') -kmi = km.keymap_items.new('clip.view_zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('clip.view_zoom', 'TRACKPADZOOM', 'ANY') -kmi = km.keymap_items.new('clip.view_zoom', 'TRACKPADPAN', 'ANY', ctrl=True) -kmi = km.keymap_items.new('clip.view_zoom_in', 'WHEELINMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.view_zoom_out', 'WHEELOUTMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.view_zoom_in', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new('clip.view_zoom_out', 'NUMPAD_MINUS', 'PRESS') -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS', ctrl=True) -kmi.properties.ratio = 8.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS', ctrl=True) -kmi.properties.ratio = 4.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS', ctrl=True) -kmi.properties.ratio = 2.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS', shift=True) -kmi.properties.ratio = 8.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS', shift=True) -kmi.properties.ratio = 4.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS', shift=True) -kmi.properties.ratio = 2.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_1', 'PRESS') -kmi.properties.ratio = 1.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS') -kmi.properties.ratio = 0.5 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS') -kmi.properties.ratio = 0.25 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS') -kmi.properties.ratio = 0.125 -kmi = km.keymap_items.new('clip.view_all', 'HOME', 'PRESS') -kmi = km.keymap_items.new('clip.view_all', 'F', 'PRESS') -kmi.properties.fit_view = True -kmi = km.keymap_items.new('clip.view_selected', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('clip.view_all', 'NDOF_BUTTON_FIT', 'PRESS') -kmi = km.keymap_items.new('clip.view_ndof', 'NDOF_MOTION', 'ANY') -kmi = km.keymap_items.new('clip.frame_jump', 'LEFT_ARROW', 'PRESS', shift=True, ctrl=True) -kmi.properties.position = 'PATHSTART' -kmi = km.keymap_items.new('clip.frame_jump', 'RIGHT_ARROW', 'PRESS', shift=True, ctrl=True) -kmi.properties.position = 'PATHEND' -kmi = km.keymap_items.new('clip.frame_jump', 'LEFT_ARROW', 'PRESS', shift=True, alt=True) -kmi.properties.position = 'FAILEDPREV' -kmi = km.keymap_items.new('clip.frame_jump', 'RIGHT_ARROW', 'PRESS', shift=True, alt=True) -kmi.properties.position = 'PATHSTART' -kmi = km.keymap_items.new('clip.change_frame', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('clip.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('clip.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('clip.select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('clip.select_circle', 'C', 'PRESS') -kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', shift=True) -kmi.properties.name = 'CLIP_MT_select_grouped' -kmi = km.keymap_items.new('clip.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True, alt=True) -kmi.properties.deselect = False -kmi = km.keymap_items.new('clip.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True, alt=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('clip.add_marker_slide', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('clip.delete_marker', 'DEL', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.delete_marker', 'X', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.slide_marker', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.disable_markers', 'D', 'PRESS', shift=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('clip.delete_track', 'DEL', 'PRESS') -kmi = km.keymap_items.new('clip.delete_track', 'X', 'PRESS') -kmi = km.keymap_items.new('clip.lock_tracks', 'L', 'PRESS', ctrl=True) -kmi.properties.action = 'LOCK' -kmi = km.keymap_items.new('clip.lock_tracks', 'L', 'PRESS', alt=True) -kmi.properties.action = 'UNLOCK' -kmi = km.keymap_items.new('clip.hide_tracks', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('clip.hide_tracks', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('clip.hide_tracks_clear', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('clip.join_tracks', 'J', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS') -kmi.properties.name = 'CLIP_MT_tracking_specials' -kmi = km.keymap_items.new('wm.context_toggle', 'L', 'PRESS') -kmi.properties.data_path = 'space_data.lock_selection' -kmi = km.keymap_items.new('wm.context_toggle', 'D', 'PRESS', alt=True) -kmi.properties.data_path = 'space_data.show_disabled' -kmi = km.keymap_items.new('wm.context_toggle', 'S', 'PRESS', alt=True) -kmi.properties.data_path = 'space_data.show_marker_search' -kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS') -kmi.properties.data_path = 'space_data.use_mute_footage' -kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS') -kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS') -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', alt=True) -kmi.properties.action = 'REMAINED' -kmi.properties.clear_active = False -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True) -kmi.properties.action = 'UPTO' -kmi.properties.clear_active = False -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True, alt=True) -kmi.properties.action = 'ALL' -kmi.properties.clear_active = False - -# Map Clip Graph Editor -km = kc.keymaps.new('Clip Graph Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('clip.change_frame', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.graph_select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('clip.graph_select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('clip.graph_select_all_markers', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('clip.graph_select_all_markers', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('clip.graph_select_box', 'B', 'PRESS') -kmi = km.keymap_items.new('clip.graph_delete_curve', 'DEL', 'PRESS') -kmi = km.keymap_items.new('clip.graph_delete_curve', 'X', 'PRESS') -kmi = km.keymap_items.new('clip.graph_delete_knot', 'DEL', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.graph_delete_knot', 'X', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.graph_view_all', 'HOME', 'PRESS') -kmi = km.keymap_items.new('clip.graph_center_current_frame', 'NUMPAD_PERIOD', 'PRESS') -kmi = km.keymap_items.new('wm.context_toggle', 'L', 'PRESS') -kmi.properties.data_path = 'space_data.lock_time_cursor' -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', alt=True) -kmi.properties.action = 'REMAINED' -kmi.properties.clear_active = True -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True) -kmi.properties.action = 'UPTO' -kmi.properties.clear_active = True -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True, alt=True) -kmi.properties.action = 'ALL' -kmi.properties.clear_active = True -kmi = km.keymap_items.new('clip.graph_disable_markers', 'D', 'PRESS', shift=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS') -kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS') - -# Map Image Paint -km = kc.keymaps.new('Image Paint', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.image_paint', 'LEFTMOUSE', 'PRESS') -kmi.properties.mode = 'NORMAL' -kmi = km.keymap_items.new('paint.image_paint', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'INVERT' -kmi = km.keymap_items.new('paint.grab_clone', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('paint.sample_color', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 0 -kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 1 -kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 2 -kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 3 -kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 4 -kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 5 -kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 6 -kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 7 -kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 8 -kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS') -kmi.properties.mode = 'image_paint' -kmi.properties.index = 9 -kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 10 -kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 11 -kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 12 -kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 13 -kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 14 -kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 15 -kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 16 -kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 17 -kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 18 -kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS', shift=True) -kmi.properties.mode = 'image_paint' -kmi.properties.index = 19 -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True) -kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color' -kmi.properties.zoom_path = 'space_data.zoom' -kmi.properties.image_id = 'tool_settings.image_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.image_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'W', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.weight' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.weight' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_weight' -kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.image_paint.brush' -kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS') -kmi.properties.data_path = 'image_paint_object.data.use_paint_mask' - -# Map Vertex Paint -km = kc.keymaps.new('Vertex Paint', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.vertex_paint', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('paint.sample_color', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('paint.vertex_color_set', 'K', 'PRESS', shift=True) -kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 0 -kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 1 -kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 2 -kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 3 -kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 4 -kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 5 -kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 6 -kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 7 -kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 8 -kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS') -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 9 -kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 10 -kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 11 -kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 12 -kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 13 -kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 14 -kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 15 -kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 16 -kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 17 -kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 18 -kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS', shift=True) -kmi.properties.mode = 'vertex_paint' -kmi.properties.index = 19 -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True) -kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.vertex_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.vertex_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'Q', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.weight' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.weight' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_weight' -kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.vertex_paint.brush' -kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS') -kmi.properties.data_path = 'vertex_paint_object.data.use_paint_mask' - -# Map Weight Paint -km = kc.keymaps.new('Weight Paint', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.weight_paint', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('paint.weight_sample', 'ACTIONMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('paint.weight_sample_group', 'ACTIONMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('paint.weight_gradient', 'LEFTMOUSE', 'PRESS', alt=True) -kmi.properties.type = 'LINEAR' -kmi = km.keymap_items.new('paint.weight_gradient', 'LEFTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.type = 'RADIAL' -kmi = km.keymap_items.new('paint.weight_set', 'K', 'PRESS', shift=True) -kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 0 -kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 1 -kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 2 -kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 3 -kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 4 -kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 5 -kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 6 -kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 7 -kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 8 -kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS') -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 9 -kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 10 -kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 11 -kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 12 -kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 13 -kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 14 -kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 15 -kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 16 -kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 17 -kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 18 -kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS', shift=True) -kmi.properties.mode = 'weight_paint' -kmi.properties.index = 19 -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True) -kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.weight_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.weight_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'Q', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.weight' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.weight' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_weight' -kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.weight_paint.brush' -kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS') -kmi.properties.data_path = 'weight_paint_object.data.use_paint_mask' -kmi = km.keymap_items.new('wm.context_toggle', 'V', 'PRESS') -kmi.properties.data_path = 'weight_paint_object.data.use_paint_mask_vertex' -kmi = km.keymap_items.new('paint.weight_from_bones', 'Q', 'PRESS') - -# Map Sculpt -km = kc.keymaps.new('Sculpt', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS') -kmi.properties.mode = 'NORMAL' -kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'INVERT' -kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.mode = 'SMOOTH' -kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS', shift=True) -kmi.properties.action = 'SHOW' -kmi.properties.area = 'INSIDE' -kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS') -kmi.properties.action = 'HIDE' -kmi.properties.area = 'INSIDE' -kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS', alt=True) -kmi.properties.action = 'SHOW' -kmi.properties.area = 'ALL' -kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True) -kmi.properties.level = 0 -kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True) -kmi.properties.level = 1 -kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True) -kmi.properties.level = 2 -kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True) -kmi.properties.level = 3 -kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True) -kmi.properties.level = 4 -kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True) -kmi.properties.level = 5 -kmi = km.keymap_items.new('paint.mask_flood_fill', 'M', 'PRESS', alt=True) -kmi.properties.mode = 'VALUE' -kmi.properties.value = 0.0 -kmi = km.keymap_items.new('paint.mask_flood_fill', 'I', 'PRESS', ctrl=True) -kmi.properties.mode = 'INVERT' -kmi = km.keymap_items.new('sculpt.dynamic_topology_toggle', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.radial_control', 'D', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.sculpt.detail_size' -kmi.properties.data_path_secondary = '' -kmi.properties.use_secondary = '' -kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.sculpt.brush' -kmi = km.keymap_items.new('object.subdivision_set', 'PAGE_UP', 'PRESS') -kmi.properties.level = 1 -kmi.properties.relative = True -kmi = km.keymap_items.new('object.subdivision_set', 'PAGE_DOWN', 'PRESS') -kmi.properties.level = -1 -kmi.properties.relative = True -kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 0 -kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 1 -kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 2 -kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 3 -kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 4 -kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 5 -kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 6 -kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 7 -kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 8 -kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS') -kmi.properties.mode = 'sculpt' -kmi.properties.index = 9 -kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 10 -kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 11 -kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 12 -kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 13 -kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 14 -kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 15 -kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 16 -kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 17 -kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 18 -kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS', shift=True) -kmi.properties.mode = 'sculpt' -kmi.properties.index = 19 -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True) -kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.sculpt.brush' -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.sculpt.brush' -kmi = km.keymap_items.new('wm.radial_control', 'W', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.weight' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.weight' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_weight' -kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.sculpt.brush' -kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True) -kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.data_path_secondary = '' -kmi.properties.use_secondary = '' -kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.sculpt.brush' -kmi = km.keymap_items.new('paint.brush_select', 'D', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'DRAW' -kmi = km.keymap_items.new('paint.brush_select', 'S', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'SMOOTH' -kmi = km.keymap_items.new('paint.brush_select', 'P', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'PINCH' -kmi = km.keymap_items.new('paint.brush_select', 'I', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'INFLATE' -kmi = km.keymap_items.new('paint.brush_select', 'G', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'GRAB' -kmi = km.keymap_items.new('paint.brush_select', 'L', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'LAYER' -kmi = km.keymap_items.new('paint.brush_select', 'T', 'PRESS', shift=True) -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'FLATTEN' -kmi = km.keymap_items.new('paint.brush_select', 'C', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'CLAY' -kmi = km.keymap_items.new('paint.brush_select', 'C', 'PRESS', shift=True) -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'CREASE' -kmi = km.keymap_items.new('paint.brush_select', 'K', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'SNAKE_HOOK' -kmi = km.keymap_items.new('paint.brush_select', 'M', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'MASK' -kmi.properties.toggle = True -kmi.properties.create_missing = True -kmi = km.keymap_items.new('wm.context_menu_enum', 'A', 'PRESS') -kmi.properties.data_path = 'tool_settings.sculpt.brush.stroke_method' -kmi = km.keymap_items.new('wm.context_toggle', 'S', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.sculpt.brush.use_smooth_stroke' -kmi = km.keymap_items.new('wm.context_menu_enum', 'R', 'PRESS') -kmi.properties.data_path = 'tool_settings.sculpt.brush.texture_angle_source_random' - -# Map Mesh -km = kc.keymaps.new('Mesh', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('mesh.loopcut_slide', 'R', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mesh.inset', 'I', 'PRESS') -kmi = km.keymap_items.new('mesh.bevel', 'B', 'PRESS', ctrl=True) -kmi.properties.vertex_only = False -kmi = km.keymap_items.new('mesh.bevel', 'B', 'PRESS', shift=True, ctrl=True) -kmi.properties.vertex_only = True -kmi = km.keymap_items.new('mesh.loop_select', 'SELECTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi = km.keymap_items.new('mesh.loop_select', 'SELECTMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = True -kmi = km.keymap_items.new('mesh.edgering_select', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi = km.keymap_items.new('mesh.edgering_select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = True -kmi = km.keymap_items.new('mesh.shortest_path_pick', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mesh.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('mesh.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mesh.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mesh.select_non_manifold', 'M', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('mesh.select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS', alt=True) -kmi.properties.deselect = False -kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('mesh.faces_select_linked_flat', 'F', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('mesh.select_similar', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'TAB', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_select_mode' -kmi = km.keymap_items.new('mesh.hide', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('mesh.hide', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('mesh.reveal', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.normals_make_consistent', 'N', 'PRESS', ctrl=True) -kmi.properties.inside = False -kmi = km.keymap_items.new('mesh.normals_make_consistent', 'N', 'PRESS', shift=True, ctrl=True) -kmi.properties.inside = True -kmi = km.keymap_items.new('view3d.edit_mesh_extrude_move_normal', 'E', 'PRESS') -kmi = km.keymap_items.new('wm.call_menu', 'E', 'PRESS', alt=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_extrude' -kmi = km.keymap_items.new('transform.edge_crease', 'E', 'PRESS', shift=True) -kmi = km.keymap_items.new('mesh.spin', 'R', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.fill', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.beautify_fill', 'F', 'PRESS', shift=True, alt=True) -kmi = km.keymap_items.new('mesh.quads_convert_to_tris', 'T', 'PRESS', ctrl=True) -kmi.properties.quad_method = 'BEAUTY' -kmi.properties.ngon_method = 'BEAUTY' -kmi = km.keymap_items.new('mesh.quads_convert_to_tris', 'T', 'PRESS', shift=True, ctrl=True) -kmi.properties.quad_method = 'FIXED' -kmi.properties.ngon_method = 'CLIP' -kmi = km.keymap_items.new('mesh.tris_convert_to_quads', 'J', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.rip_move', 'V', 'PRESS') -kmi = km.keymap_items.new('mesh.rip_move_fill', 'V', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.merge', 'M', 'PRESS', alt=True) -kmi = km.keymap_items.new('transform.shrink_fatten', 'S', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.edge_face_add', 'F', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mesh.duplicate_move', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_mesh_add' -kmi = km.keymap_items.new('mesh.separate', 'P', 'PRESS') -kmi = km.keymap_items.new('mesh.split', 'Y', 'PRESS') -kmi = km.keymap_items.new('mesh.vert_connect', 'J', 'PRESS') -kmi = km.keymap_items.new('transform.vert_slide', 'V', 'PRESS', shift=True) -kmi = km.keymap_items.new('mesh.dupli_extrude_cursor', 'ACTIONMOUSE', 'CLICK', ctrl=True) -kmi.properties.rotate_source = True -kmi = km.keymap_items.new('mesh.dupli_extrude_cursor', 'ACTIONMOUSE', 'CLICK', shift=True, ctrl=True) -kmi.properties.rotate_source = False -kmi = km.keymap_items.new('wm.call_menu', 'X', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete' -kmi = km.keymap_items.new('wm.call_menu', 'DEL', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete' -kmi = km.keymap_items.new('mesh.knife_tool', 'K', 'PRESS') -kmi.properties.use_occlude_geometry = True -kmi.properties.only_selected = False -kmi = km.keymap_items.new('mesh.knife_tool', 'K', 'PRESS', shift=True) -kmi.properties.use_occlude_geometry = False -kmi.properties.only_selected = True -kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_edit_mesh_specials' -kmi = km.keymap_items.new('wm.call_menu', 'F', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_faces' -kmi = km.keymap_items.new('wm.call_menu', 'E', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_edges' -kmi = km.keymap_items.new('wm.call_menu', 'V', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_vertices' -kmi = km.keymap_items.new('wm.call_menu', 'H', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_hook' -kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_uv_map' -kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_vertex_group' -kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True) -kmi.properties.level = 0 -kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True) -kmi.properties.level = 1 -kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True) -kmi.properties.level = 2 -kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True) -kmi.properties.level = 3 -kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True) -kmi.properties.level = 4 -kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True) -kmi.properties.level = 5 -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True) -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'CONNECTED' -kmi = km.keymap_items.new('wm.context_set_value', 'ONE', 'PRESS') -kmi.properties.data_path = 'tool_settings.mesh_select_mode' -kmi.properties.value = '(True,False,False)' -kmi = km.keymap_items.new('wm.context_set_value', 'TWO', 'PRESS') -kmi.properties.data_path = 'tool_settings.mesh_select_mode' -kmi.properties.value = '(False,True,False)' -kmi = km.keymap_items.new('wm.context_set_value', 'THREE', 'PRESS') -kmi.properties.data_path = 'tool_settings.mesh_select_mode' -kmi.properties.value = '(False,False,True)' - -# Map Curve -km = kc.keymaps.new('Curve', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'TOPBAR_MT_edit_curve_add' -kmi = km.keymap_items.new('curve.handle_type_set', 'V', 'PRESS') -kmi = km.keymap_items.new('curve.vertex_add', 'LEFTMOUSE', 'CLICK', ctrl=True) -kmi = km.keymap_items.new('curve.select_all', 'LEFTMOUSE', 'CLICK') -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('curve.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('curve.select_row', 'R', 'PRESS', shift=True) -kmi = km.keymap_items.new('curve.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('curve.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('curve.select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('curve.select_linked_pick', 'L', 'PRESS') -kmi.properties.deselect = False -kmi = km.keymap_items.new('curve.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('curve.separate', 'P', 'PRESS') -kmi = km.keymap_items.new('curve.extrude_move', 'E', 'PRESS') -kmi = km.keymap_items.new('curve.duplicate_move', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('curve.make_segment', 'F', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('curve.cyclic_toggle', 'C', 'PRESS', alt=True) -kmi = km.keymap_items.new('curve.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('curve.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('curve.tilt_clear', 'T', 'PRESS', alt=True) -kmi = km.keymap_items.new('transform.tilt', 'T', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', alt=True) -kmi.properties.mode = 'CURVE_SHRINKFATTEN' -kmi = km.keymap_items.new('curve.reveal', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('curve.hide', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('curve.hide', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_edit_curve_specials' -kmi = km.keymap_items.new('wm.call_menu', 'H', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_hook' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True) -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'CONNECTED' - -# Map Armature -km = kc.keymaps.new('Armature', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('armature.hide', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('armature.hide', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('armature.reveal', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.align', 'A', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('armature.calculate_roll', 'N', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.switch_direction', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.bone_primitive_add', 'A', 'PRESS', shift=True) -kmi = km.keymap_items.new('armature.parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.parent_clear', 'P', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.select_all', 'LEFTMOUSE', 'CLICK') -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('armature.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('armature.select_hierarchy', 'LEFT_BRACKET', 'PRESS') -kmi.properties.direction = 'PARENT' -kmi.properties.extend = False -kmi = km.keymap_items.new('armature.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'PARENT' -kmi.properties.extend = True -kmi = km.keymap_items.new('armature.select_hierarchy', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.direction = 'CHILD' -kmi.properties.extend = False -kmi = km.keymap_items.new('armature.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'CHILD' -kmi.properties.extend = True -kmi = km.keymap_items.new('armature.select_similar', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('armature.select_linked', 'L', 'PRESS') -kmi = km.keymap_items.new('armature.delete', 'X', 'PRESS') -kmi = km.keymap_items.new('armature.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('armature.duplicate_move', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('armature.extrude_move', 'E', 'PRESS') -kmi = km.keymap_items.new('armature.extrude_forked', 'E', 'PRESS', shift=True) -kmi = km.keymap_items.new('armature.click_extrude', 'LEFTMOUSE', 'CLICK', ctrl=True) -kmi = km.keymap_items.new('armature.fill', 'F', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.merge', 'M', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.separate', 'P', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_bone_options_toggle' -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', shift=True, ctrl=True) -kmi.properties.name = 'VIEW3D_MT_bone_options_enable' -kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', alt=True) -kmi.properties.name = 'VIEW3D_MT_bone_options_disable' -kmi = km.keymap_items.new('armature.layers_show_all', 'ACCENT_GRAVE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.armature_layers', 'M', 'PRESS', shift=True) -kmi = km.keymap_items.new('armature.bone_layers', 'M', 'PRESS') -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', ctrl=True, alt=True) -kmi.properties.mode = 'BONE_SIZE' -kmi = km.keymap_items.new('transform.transform', 'R', 'PRESS', ctrl=True) -kmi.properties.mode = 'BONE_ROLL' -kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_armature_specials' - -# Map Metaball -km = kc.keymaps.new('Metaball', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('object.metaball_add', 'A', 'PRESS', shift=True) -kmi = km.keymap_items.new('mball.reveal_metaelems', 'H', 'PRESS', alt=True) -kmi = km.keymap_items.new('mball.hide_metaelems', 'H', 'PRESS') -kmi.properties.unselected = False -kmi = km.keymap_items.new('mball.hide_metaelems', 'H', 'PRESS', shift=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('mball.delete_metaelems', 'X', 'PRESS') -kmi = km.keymap_items.new('mball.delete_metaelems', 'DEL', 'PRESS') -kmi = km.keymap_items.new('mball.duplicate_metaelems', 'D', 'PRESS', shift=True) -kmi = km.keymap_items.new('mball.select_all', 'LEFTMOUSE', 'CLICK') -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('mball.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True) -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'CONNECTED' - -# Map Lattice -km = kc.keymaps.new('Lattice', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('lattice.select_all', 'LEFTMOUSE', 'CLICK') -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('lattice.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('lattice.flip', 'F', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'H', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_hook' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' - -# Map Transform Modal Map -km = kc.keymaps.new('Transform Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True) - -kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'LEFTMOUSE', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('TRANSLATE', 'W', 'PRESS') -kmi = km.keymap_items.new_modal('ROTATE', 'E', 'PRESS') -kmi = km.keymap_items.new_modal('RESIZE', 'R', 'PRESS') -kmi = km.keymap_items.new_modal('SNAP_TOGGLE', 'TAB', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'LEFT_CTRL', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'LEFT_CTRL', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'RIGHT_CTRL', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'RIGHT_CTRL', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('ADD_SNAP', 'A', 'PRESS') -kmi = km.keymap_items.new_modal('REMOVE_SNAP', 'A', 'PRESS', alt=True) -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'PAGE_UP', 'PRESS') -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'PAGE_DOWN', 'PRESS') -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'WHEELDOWNMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'WHEELUPMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE', 'TRACKPADPAN', 'ANY') -kmi = km.keymap_items.new_modal('EDGESLIDE_EDGE_NEXT', 'WHEELDOWNMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new_modal('EDGESLIDE_PREV_NEXT', 'WHEELUPMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'PAGE_UP', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'PAGE_DOWN', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'WHEELDOWNMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'WHEELUPMOUSE', 'PRESS', shift=True) - -# Map View3D Gesture Circle -km = kc.keymaps.new('View3D Gesture Circle', space_type='EMPTY', region_type='WINDOW', modal=True) - -kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'ANY', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS') -kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('DESELECT', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('NOP', 'MIDDLEMOUSE', 'RELEASE') -kmi = km.keymap_items.new_modal('NOP', 'LEFTMOUSE', 'RELEASE') -kmi = km.keymap_items.new_modal('SUBTRACT', 'WHEELUPMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('SUBTRACT', 'NUMPAD_MINUS', 'PRESS') -kmi = km.keymap_items.new_modal('ADD', 'WHEELDOWNMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('ADD', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new_modal('SIZE', 'TRACKPADPAN', 'ANY') - -# Map Gesture Box -km = kc.keymaps.new('Gesture Box', space_type='EMPTY', region_type='WINDOW', modal=True) - -kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('BEGIN', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('SELECT', 'RIGHTMOUSE', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('BEGIN', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('DESELECT', 'MIDDLEMOUSE', 'RELEASE') diff --git a/release/scripts/presets/keyconfig/blender.py b/release/scripts/presets/keyconfig/blender.py index 66db91d9186..e7b4c699be7 100644 --- a/release/scripts/presets/keyconfig/blender.py +++ b/release/scripts/presets/keyconfig/blender.py @@ -1,12 +1,107 @@ - import os -from bpy_extras.keyconfig_utils import ( - keyconfig_import_from_data, - keyconfig_module_from_preset, +import bpy +from bpy.props import ( + BoolProperty, + EnumProperty, ) -_mod = keyconfig_module_from_preset(os.path.join("keymap_data", "blender_default"), __file__) -keyconfig_data = _mod.generate_keymaps() +dirname, filename = os.path.split(__file__) +idname = os.path.splitext(filename)[0] + +def update_fn(_self, _context): + load() + + +class Prefs(bpy.types.KeyConfigPreferences): + bl_idname = idname + + select_mouse: EnumProperty( + name="Select Mouse", + items=( + ('LEFT', "Left", "Use left Mouse Button for selection"), + ('RIGHT', "Right", "Use Right Mouse Button for selection"), + ), + description=( + "Mouse button used for selection" + ), + default='RIGHT', + update=update_fn, + ) + spacebar_action: EnumProperty( + name="Spacebar", + items=( + ('TOOL', "Tool-Bar", + "Open the popup tool-bar\n" + "When 'Space' is held and used as a modifier:\n" + "\u2022 Pressing the tools binding key switches to it immediately.\n" + "\u2022 Dragging the cursor over a tool and releasing activates it (like a pie menu).\n" + ), + ('PLAY', "Playback", + "Toggle animation playback" + ), + ), + description=( + "Action when 'Space' is pressed ('Shift-Space' is used for the other action)" + ), + default='TOOL', + update=update_fn, + ) + use_select_all_toggle: BoolProperty( + name="Select All Toggles", + description=( + "Causes select-all ('A' key) to de-select in the case a selection exists" + ), + default=False, + update=update_fn, + ) + + use_v3d_tab_menu: BoolProperty( + name="Tab for Pie Menu", + description=( + "Causes tab to open pie menu (swaps 'Tab' / 'Ctrl-Tab')" + ), + default=False, + update=update_fn, + ) + + def draw(self, layout): + split = layout.split() + col = split.column(align=True) + col.label(text="Select With:") + col.row().prop(self, "select_mouse", expand=True) + col.prop(self, "use_select_all_toggle") + + col = split.column(align=True) + col.label(text="Spacebar Action:") + col.row().prop(self, "spacebar_action", expand=True) + + split = layout.split() + col = split.column() + col.label(text="3D View:") + col.prop(self, "use_v3d_tab_menu") + split.column() + + +blender_default = bpy.utils.execfile(os.path.join(dirname, "keymap_data", "blender_default.py")) + + +def load(): + from bl_keymap_utils.io import keyconfig_init_from_data + + kc = bpy.context.window_manager.keyconfigs.new(idname) + kc_prefs = kc.preferences + + keyconfig_data = blender_default.generate_keymaps( + blender_default.Params( + select_mouse=kc_prefs.select_mouse, + spacebar_action=kc_prefs.spacebar_action, + use_select_all_toggle=kc_prefs.use_select_all_toggle, + use_v3d_tab_menu=kc_prefs.use_v3d_tab_menu, + ), + ) + keyconfig_init_from_data(kc, keyconfig_data) + if __name__ == "__main__": - keyconfig_import_from_data("Blender", keyconfig_data) + bpy.utils.register_class(Prefs) + load() diff --git a/release/scripts/presets/keyconfig/blender_27x.py b/release/scripts/presets/keyconfig/blender_27x.py index 69d84639a86..54f10e89402 100644 --- a/release/scripts/presets/keyconfig/blender_27x.py +++ b/release/scripts/presets/keyconfig/blender_27x.py @@ -1,11 +1,57 @@ import os -from bpy_extras.keyconfig_utils import ( - keyconfig_import_from_data, - keyconfig_module_from_preset, +import bpy +from bpy.props import ( + EnumProperty, ) -_mod = keyconfig_module_from_preset(os.path.join("keymap_data", "blender_default"), __file__) -keyconfig_data = _mod.generate_keymaps(_mod.KeymapParams(legacy=True)) +dirname, filename = os.path.split(__file__) +idname = os.path.splitext(filename)[0] + +def update_fn(_self, _context): + load() + + +class Prefs(bpy.types.KeyConfigPreferences): + bl_idname = idname + + select_mouse: EnumProperty( + name="Select Mouse", + items=( + ('LEFT', "Left", "Use left Mouse Button for selection"), + ('RIGHT', "Right", "Use Right Mouse Button for selection"), + ), + description=( + "Mouse button used for selection" + ), + default='RIGHT', + update=update_fn, + ) + + def draw(self, layout): + split = layout.split() + col = split.column() + col.label(text="Select With:") + col.row().prop(self, "select_mouse", expand=True) + split.column() + + +blender_default = bpy.utils.execfile(os.path.join(dirname, "keymap_data", "blender_default.py")) + +def load(): + from bl_keymap_utils.io import keyconfig_init_from_data + + kc = bpy.context.window_manager.keyconfigs.new(idname) + kc_prefs = kc.preferences + + keyconfig_data = blender_default.generate_keymaps( + blender_default.Params( + select_mouse=kc_prefs.select_mouse, + legacy=True, + ), + ) + keyconfig_init_from_data(kc, keyconfig_data) + if __name__ == "__main__": - keyconfig_import_from_data("blender_27x", keyconfig_data) + bpy.utils.register_class(Prefs) + load() diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 653387bd303..af639fac1a1 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -20,61 +20,85 @@ # ------------------------------------------------------------------------------ # Configurable Parameters -class KeymapParams: +class Params: __slots__ = ( "apple", "legacy", "select_mouse", + "select_mouse_value", "select_tweak", - "select_click", "action_mouse", "action_tweak", "tool_mouse", "tool_tweak", "context_menu_event", "cursor_set_event", - ) - - def __init__(self, legacy=False, select_mode='AUTO'): + "cursor_tweak_event", + + # User preferences. + # + # Swap 'Space/Shift-Space'. + "spacebar_action", + # Key toggles selection with 'A'. + "use_select_all_toggle", + # Use pie menu for tab by default (swap 'Tab/Ctrl-Tab'). + "use_v3d_tab_menu", + ) + + def __init__( + self, + *, + legacy=False, + select_mouse='RIGHT', + + # User preferences. + spacebar_action='TOOL', + use_select_all_toggle=False, + use_pie_on_tab=False, + use_v3d_tab_menu=False, + ): import platform + self.apple = platform.system() == 'Darwin' self.legacy = legacy - if select_mode == 'LEFT': - # Left mouse select uses Click event for selection. This is a little - # less immediate, but is needed to distinguish between click and tweak - # events on the same mouse buttons. - self.select_mouse = 'LEFTMOUSE' - self.select_tweak = 'EVT_TWEAK_L' - self.select_click = 'CLICK' - self.action_mouse = 'RIGHTMOUSE' - self.action_tweak = 'EVT_TWEAK_R' - self.tool_mouse = 'RIGHTMOUSE' - self.tool_tweak = 'EVT_TWEAK_R' - self.context_menu_event = {"type": 'RIGHTMOUSE', "value": 'PRESS'} - self.cursor_set_event = {"type": 'RIGHTMOUSE', "value": 'PRESS', "ctrl": True} - elif select_mode == 'RIGHT': + if select_mouse == 'RIGHT': # Right mouse select. self.select_mouse = 'RIGHTMOUSE' + self.select_mouse_value = 'PRESS' self.select_tweak = 'EVT_TWEAK_R' - self.select_click = 'PRESS' self.action_mouse = 'LEFTMOUSE' self.action_tweak = 'EVT_TWEAK_L' self.tool_mouse = 'LEFTMOUSE' self.tool_tweak = 'EVT_TWEAK_L' self.context_menu_event = {"type": 'W', "value": 'PRESS'} - self.cursor_set_event = {"type": 'LEFTMOUSE', "value": 'PRESS'} + self.cursor_set_event = {"type": 'LEFTMOUSE', "value": 'CLICK'} + self.cursor_tweak_event = None else: - # Automatic switching using special events, to be removed. - self.select_mouse = 'SELECTMOUSE' - self.select_tweak = 'EVT_TWEAK_S' - self.select_click = 'PRESS' - self.action_mouse = 'ACTIONMOUSE' - self.action_tweak = 'EVT_TWEAK_A' - self.tool_mouse = 'ACTIONMOUSE' - self.tool_tweak = 'EVT_TWEAK_A' - self.context_menu_event = {"type": 'W', "value": 'PRESS'} - self.cursor_set_event = {"type": self.action_mouse, "value": 'PRESS'} + # Left mouse select uses Click event for selection. This is a little + # less immediate, but is needed to distinguish between click and tweak + # events on the same mouse buttons. + self.select_mouse = 'LEFTMOUSE' + self.select_mouse_value = 'CLICK' + self.select_tweak = 'EVT_TWEAK_L' + self.action_mouse = 'RIGHTMOUSE' + self.action_tweak = 'EVT_TWEAK_R' + self.tool_mouse = 'LEFTMOUSE' + self.tool_tweak = 'EVT_TWEAK_L' + + if self.legacy: + self.context_menu_event = {"type": 'W', "value": 'PRESS'} + else: + self.context_menu_event = {"type": 'RIGHTMOUSE', "value": 'PRESS'} + + self.cursor_set_event = {"type": 'RIGHTMOUSE', "value": 'PRESS', "shift": True} + self.cursor_tweak_event = {"type": 'EVT_TWEAK_R', "value": 'ANY', "shift": True} + + # User preferences + self.spacebar_action = spacebar_action + self.use_select_all_toggle = use_select_all_toggle + self.use_v3d_tab_menu = use_v3d_tab_menu + # ------------------------------------------------------------------------------ # Constants @@ -101,16 +125,27 @@ def op_panel(menu, kmi_args, kmi_data=()): return ("wm.call_panel", kmi_args, {"properties": [("name", menu), *kmi_data]}) +def op_tool(tool, kmi_args): + return ("wm.tool_set_by_name", kmi_args, {"properties": [("name", tool)]}) + + # ------------------------------------------------------------------------------ # Keymap Templates -def _template_items_select_actions(operator): - return [ - (operator, {"type": 'A', "value": 'PRESS'}, {"properties": [("action", 'SELECT')]}), - (operator, {"type": 'A', "value": 'PRESS', "alt": True}, {"properties": [("action", 'DESELECT')]}), - (operator, {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), - (operator, {"type": 'A', "value": 'DOUBLE_CLICK'}, {"properties": [("action", 'DESELECT')]}), - ] +def _template_items_select_actions(params, operator): + if not params.use_select_all_toggle: + return [ + (operator, {"type": 'A', "value": 'PRESS'}, {"properties": [("action", 'SELECT')]}), + (operator, {"type": 'A', "value": 'PRESS', "alt": True}, {"properties": [("action", 'DESELECT')]}), + (operator, {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), + (operator, {"type": 'A', "value": 'DOUBLE_CLICK'}, {"properties": [("action", 'DESELECT')]}), + ] + else: + return [ + (operator, {"type": 'A', "value": 'PRESS'}, {"properties": [("action", 'TOGGLE')]}), + (operator, {"type": 'A', "value": 'PRESS', "alt": True}, {"properties": [("action", 'DESELECT')]}), + (operator, {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}), + ] def _template_items_object_subdivision_set(): @@ -203,7 +238,8 @@ def km_window(params): ("wm.read_homefile", {"type": 'N', "value": 'PRESS', "oskey": True}, None), op_menu("TOPBAR_MT_file_open_recent", {"type": 'O', "value": 'PRESS', "shift": True, "oskey": True}), ("wm.open_mainfile", {"type": 'O', "value": 'PRESS', "oskey": True}, None), - ("wm.save_mainfile", {"type": 'S', "value": 'PRESS', "oskey": True}, None), + ("wm.save_mainfile", {"type": 'S', "value": 'PRESS', "oskey": True}, + {"properties": [("check_existing", False)]}), ("wm.save_as_mainfile", {"type": 'S', "value": 'PRESS', "shift": True, "oskey": True}, None), ("wm.quit_blender", {"type": 'Q', "value": 'PRESS', "oskey": True}, None), ("wm.search_menu", {"type": 'F', "value": 'PRESS', "oskey": True}, None), @@ -214,13 +250,13 @@ def km_window(params): ("wm.read_homefile", {"type": 'N', "value": 'PRESS', "ctrl": True}, None), op_menu("TOPBAR_MT_file_open_recent", {"type": 'O', "value": 'PRESS', "shift": True, "ctrl": True}), ("wm.open_mainfile", {"type": 'O', "value": 'PRESS', "ctrl": True}, None), - ("wm.save_mainfile", {"type": 'S', "value": 'PRESS', "ctrl": True}, None), + ("wm.save_mainfile", {"type": 'S', "value": 'PRESS', "ctrl": True}, + {"properties": [("check_existing", False)]}), ("wm.save_as_mainfile", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True}, None), ("wm.quit_blender", {"type": 'Q', "value": 'PRESS', "ctrl": True}, None), # Quick menu and toolbar op_menu("SCREEN_MT_user_menu", {"type": 'Q', "value": 'PRESS'}), - ("wm.toolbar", {"type": 'SPACE', "value": 'PRESS'}, None), # Fast editor switching *( @@ -261,6 +297,18 @@ def km_window(params): ("wm.search_menu", {"type": 'F3', "value": 'PRESS'}, None), op_menu("TOPBAR_MT_window_specials", {"type": 'F4', "value": 'PRESS'}), ]) + + if params.spacebar_action == 'TOOL': + items.append( + ("wm.toolbar", {"type": 'SPACE', "value": 'PRESS'}, None), + ) + elif params.spacebar_action == 'PLAY': + items.append( + ("wm.toolbar", {"type": 'SPACE', "value": 'PRESS', "shift": True}, None), + ) + else: + assert False + else: # Old shorctus items.extend([ @@ -275,6 +323,7 @@ def km_window(params): {"properties": [("copy", True)]}), ("wm.window_fullscreen_toggle", {"type": 'F11', "value": 'PRESS', "alt": True}, None), ("wm.doc_view_manual_ui_context", {"type": 'F1', "value": 'PRESS', "alt": True}, None), + ("wm.search_menu", {"type": 'SPACE', "value": 'PRESS'}, None), ("wm.redraw_timer", {"type": 'T', "value": 'PRESS', "ctrl": True, "alt": True}, None), ("wm.debug_menu", {"type": 'D', "value": 'PRESS', "ctrl": True, "alt": True}, None), ]) @@ -536,7 +585,7 @@ def km_property_editor(_params): return keymap -def km_outliner(_params): +def km_outliner(params): items = [] keymap = ( "Outliner", @@ -574,7 +623,7 @@ def km_outliner(_params): ("outliner.show_one_level", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None), ("outliner.show_one_level", {"type": 'NUMPAD_MINUS', "value": 'PRESS'}, {"properties": [("open", False)]}), - *_template_items_select_actions("outliner.select_all"), + *_template_items_select_actions(params, "outliner.select_all"), ("outliner.expanded_toggle", {"type": 'A', "value": 'PRESS', "shift": True}, None), ("outliner.keyingset_add_selected", {"type": 'K', "value": 'PRESS'}, None), ("outliner.keyingset_remove_selected", {"type": 'K', "value": 'PRESS', "alt": True}, None), @@ -621,13 +670,13 @@ def km_uv_editor(params): ("wm.context_set_enum", {"type": 'FOUR', "value": 'PRESS'}, {"properties": [("data_path", 'tool_settings.uv_select_mode'), ("value", 'ISLAND')]}), ("uv.mark_seam", {"type": 'E', "value": 'PRESS', "ctrl": True}, None), - ("uv.select", {"type": params.select_mouse, "value": params.select_click}, + ("uv.select", {"type": params.select_mouse, "value": params.select_mouse_value}, {"properties": [("extend", False)]}), - ("uv.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("uv.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True)]}), - ("uv.select_loop", {"type": params.select_mouse, "value": params.select_click, "alt": True}, + ("uv.select_loop", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True}, {"properties": [("extend", False)]}), - ("uv.select_loop", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True}, + ("uv.select_loop", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True}, {"properties": [("extend", True)]}), ("uv.select_split", {"type": 'Y', "value": 'PRESS'}, None), ("uv.select_box", {"type": 'B', "value": 'PRESS'}, @@ -649,7 +698,7 @@ def km_uv_editor(params): {"properties": [("extend", False), ("deselect", True)]}), ("uv.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), ("uv.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), - *_template_items_select_actions("uv.select_all"), + *_template_items_select_actions(params, "uv.select_all"), ("uv.select_pinned", {"type": 'P', "value": 'PRESS', "shift": True}, None), op_menu("IMAGE_MT_uvs_weldalign", {"type": 'W', "value": 'PRESS', "shift": True}), ("uv.stitch", {"type": 'V', "value": 'PRESS'}, None), @@ -663,7 +712,6 @@ def km_uv_editor(params): ("uv.hide", {"type": 'H', "value": 'PRESS', "shift": True}, {"properties": [("unselected", True)]}), ("uv.reveal", {"type": 'H', "value": 'PRESS', "alt": True}, None), - ("uv.cursor_set", params.cursor_set_event, None), op_menu_pie("IMAGE_MT_uvs_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}), op_menu("IMAGE_MT_uvs_select_mode", {"type": 'TAB', "value": 'PRESS', "ctrl": True}), *_template_items_proportional_editing(connected=False), @@ -679,6 +727,18 @@ def km_uv_editor(params): {"properties": [("data_path", 'tool_settings.snap_uv_element')]}), ]) + # 3D cursor + if params.cursor_tweak_event: + items.extend([ + ("uv.cursor_set", params.cursor_set_event, None), + ("transform.translate", params.cursor_tweak_event, + {"properties": [("release_confirm", True), ("cursor_transform", True)]}), + ]) + else: + items.extend([ + ("uv.cursor_set", params.cursor_set_event, None), + ]) + if params.legacy: items.extend([ ("uv.minimize_stretch", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), @@ -688,6 +748,13 @@ def km_uv_editor(params): {"properties": [("data_path", 'tool_settings.use_uv_sculpt')]}), ]) + if params.select_mouse == 'LEFTMOUSE' and not params.legacy: + # Quick switch to select tool, since left select can't easily + # select with any tool active. + items.extend([ + op_tool("Select Box", {"type": 'W', "value": 'PRESS'}), + ]) + return keymap @@ -750,9 +817,19 @@ def km_view3d(params): {"items": items}, ) + # 3D cursor + if params.cursor_tweak_event: + items.extend([ + ("view3d.cursor3d", params.cursor_set_event, None), + ("transform.translate", params.cursor_tweak_event, + {"properties": [("release_confirm", True), ("cursor_transform", True)]}), + ]) + else: + items.extend([ + ("view3d.cursor3d", params.cursor_set_event, None), + ]) + items.extend([ - # Cursor. - ("view3d.cursor3d", {"type": params.action_mouse, "value": 'CLICK'}, None), # Navigation. ("view3d.rotate", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None), ("view3d.move", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None), @@ -882,78 +959,19 @@ def km_view3d(params): ("view3d.view_axis", {"type": 'NDOF_BUTTON_TOP', "value": 'PRESS', "shift": True}, {"properties": [("type", 'TOP'), ("align_active", True)]}), # Selection. - ("view3d.select", {"type": params.select_mouse, "value": params.select_click}, - {"properties": [ - ("extend", False), - ("deselect", False), - ("toggle", False), - ("center", False), - ("enumerate", False), - ("object", False), - ], },), - ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, - {"properties": [ - ("extend", False), - ("deselect", False), - ("toggle", True), - ("center", False), - ("enumerate", False), - ("object", False), - ], },), - ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, - {"properties": [ - ("extend", False), - ("deselect", False), - ("toggle", False), - ("center", True), - ("enumerate", False), - ("object", True), - ], },), - ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "alt": True}, - {"properties": [ - ("extend", False), - ("deselect", False), - ("toggle", False), - ("center", False), - ("enumerate", True), - ("object", False), - ], },), - ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True}, - {"properties": [ - ("extend", True), - ("deselect", False), - ("toggle", True), - ("center", True), - ("enumerate", False), - ("object", False), - ], },), - ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True}, - {"properties": [ - ("extend", False), - ("deselect", False), - ("toggle", False), - ("center", True), - ("enumerate", True), - ("object", False), - ], },), - ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True}, - {"properties": [ - ("extend", False), - ("deselect", False), - ("toggle", True), - ("center", False), - ("enumerate", True), - ("object", False), - ], },), - ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True}, - {"properties": [ - ("extend", False), - ("deselect", False), - ("toggle", True), - ("center", True), - ("enumerate", True), - ("object", False), - ], },), + *(("view3d.select", + {"type": params.select_mouse, "value": params.select_mouse_value, **{m: True for m in mods}}, + {"properties": [(c, True) for c in props]}, + ) for props, mods in ( + ((), ()), + (("toggle",), ("shift",)), + (("center", "object"), ("ctrl",)), + (("enumerate",), ("alt",)), + (("extend", "toggle", "center"), ("shift", "ctrl")), + (("center", "enumerate"), ("ctrl", "alt")), + (("toggle", "enumerate"), ("shift", "alt")), + (("toggle", "center", "enumerate"), ("shift", "ctrl", "alt")), + )), ("view3d.select_box", {"type": 'B', "value": 'PRESS'}, None), ("view3d.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True}, {"properties": [("mode", 'ADD')]}), @@ -1004,7 +1022,9 @@ def km_view3d(params): {"properties": [("data_path", 'space_data.show_gizmo_tool')]}), op_menu_pie("VIEW3D_MT_pivot_pie", {"type": 'PERIOD', "value": 'PRESS'}), op_menu_pie("VIEW3D_MT_orientations_pie", {"type": 'COMMA', "value": 'PRESS'}), - op_menu_pie("VIEW3D_MT_shading_pie", {"type": 'Z', "value": 'PRESS'}), + op_menu_pie("VIEW3D_MT_shading_pie", {"type": 'D', "value": 'PRESS'}), + ("wm.context_toggle_enum", {"type": 'Z', "value": 'PRESS'}, + {"properties": [("data_path", 'space_data.shading.type'), ("value_1", 'WIREFRAME'), ("value_2", 'SOLID')]}), ("view3d.toggle_shading", {"type": 'Z', "value": 'PRESS', "alt": True}, {"properties": [("type", 'MATERIAL')]}), ("view3d.toggle_shading", {"type": 'Z', "value": 'PRESS', "shift": True}, @@ -1071,6 +1091,13 @@ def km_view3d(params): {"properties": [("data_path", 'space_data.shading.type'), ("value_1", 'MATERIAL'), ("value_2", 'SOLID')]}), ]) + if params.select_mouse == 'LEFTMOUSE' and not params.legacy: + # Quick switch to select tool, since left select can't easily + # select with any tool active. + items.extend([ + op_tool("Select Box", {"type": 'W', "value": 'PRESS'}), + ]) + return keymap @@ -1089,14 +1116,14 @@ def km_mask_editing(params): ("wm.context_toggle", {"type": 'O', "value": 'PRESS'}, {"properties": [("data_path", 'tool_settings.use_proportional_edit_mask')]}), ("mask.add_vertex_slide", {"type": params.action_mouse, "value": 'PRESS', "ctrl": True}, None), - ("mask.add_feather_vertex_slide", {"type": params.action_mouse, "value": 'PRESS', "shift": True}, None), + ("mask.add_feather_vertex_slide", {"type": params.action_mouse, "value": 'PRESS', "shift": True, "ctrl": True}, None), ("mask.delete", {"type": 'X', "value": 'PRESS'}, None), ("mask.delete", {"type": 'DEL', "value": 'PRESS'}, None), - ("mask.select", {"type": params.select_mouse, "value": params.select_click}, + ("mask.select", {"type": params.select_mouse, "value": params.select_mouse_value}, {"properties": [("extend", False), ("deselect", False), ("toggle", False)]}), - ("mask.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("mask.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", False), ("deselect", False), ("toggle", True)]}), - *_template_items_select_actions("mask.select_all"), + *_template_items_select_actions(params, "mask.select_all"), ("mask.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), ("mask.select_linked_pick", {"type": 'L', "value": 'PRESS'}, {"properties": [("deselect", False)]}), @@ -1115,7 +1142,7 @@ def km_mask_editing(params): {"properties": [("unselected", False)]}), ("mask.hide_view_set", {"type": 'H', "value": 'PRESS', "shift": True}, {"properties": [("unselected", True)]}), - ("clip.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, + ("clip.select", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, {"properties": [("extend", False)]}), ("mask.cyclic_toggle", {"type": 'C', "value": 'PRESS', "alt": True}, None), ("mask.slide_point", {"type": params.action_mouse, "value": 'PRESS'}, None), @@ -1129,7 +1156,6 @@ def km_mask_editing(params): ("mask.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None), ("mask.copy_splines", {"type": 'C', "value": 'PRESS', "ctrl": True}, None), ("mask.paste_splines", {"type": 'V', "value": 'PRESS', "ctrl": True}, None), - ("uv.cursor_set", params.cursor_set_event, None), ("transform.translate", {"type": 'G', "value": 'PRESS'}, None), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None), ("transform.resize", {"type": 'S', "value": 'PRESS'}, None), @@ -1138,6 +1164,18 @@ def km_mask_editing(params): {"properties": [("mode", 'MASK_SHRINKFATTEN')]}), ]) + # 3D cursor + if params.cursor_tweak_event: + items.extend([ + ("uv.cursor_set", params.cursor_set_event, None), + ("transform.translate", params.cursor_tweak_event, + {"properties": [("release_confirm", True), ("cursor_transform", True)]}), + ]) + else: + items.extend([ + ("uv.cursor_set", params.cursor_set_event, None), + ]) + return keymap @@ -1153,15 +1191,15 @@ def km_markers(params): ("marker.add", {"type": 'M', "value": 'PRESS'}, None), ("marker.move", {"type": params.select_tweak, "value": 'ANY'}, None), ("marker.duplicate", {"type": 'D', "value": 'PRESS', "shift": True}, None), - ("marker.select", {"type": params.select_mouse, "value": params.select_click}, None), - ("marker.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("marker.select", {"type": params.select_mouse, "value": params.select_mouse_value}, None), + ("marker.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True)]}), - ("marker.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, + ("marker.select", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, {"properties": [("extend", False), ("camera", True)]}), - ("marker.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True}, + ("marker.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True}, {"properties": [("extend", True), ("camera", True)]}), ("marker.select_box", {"type": 'B', "value": 'PRESS'}, None), - *_template_items_select_actions("marker.select_all"), + *_template_items_select_actions(params, "marker.select_all"), ("marker.delete", {"type": 'X', "value": 'PRESS'}, None), ("marker.delete", {"type": 'DEL', "value": 'PRESS'}, None), ("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), @@ -1189,6 +1227,8 @@ def km_graph_editor_generic(_params): ("graph.hide", {"type": 'H', "value": 'PRESS', "shift": True}, {"properties": [("unselected", True)]}), ("graph.reveal", {"type": 'H', "value": 'PRESS', "alt": True}, None), + ("wm.context_set_enum", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, + {"properties": [("data_path", 'area.type'), ("value", 'DOPESHEET_EDITOR')]}), ]) return keymap @@ -1205,28 +1245,28 @@ def km_graph_editor(params): items.extend([ ("wm.context_toggle", {"type": 'H', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", 'space_data.show_handles')]}), - ("graph.cursor_set", params.cursor_set_event, None), - ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click}, + ("graph.cursor_set", {"type": params.action_mouse, "value": 'PRESS'}, None), + ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value}, {"properties": [("extend", False), ("column", False), ("curves", False)]}), - ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "alt": True}, + ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True}, {"properties": [("extend", False), ("column", True), ("curves", False)]}), - ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True), ("column", False), ("curves", False)]}), - ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True}, + ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True}, {"properties": [("extend", True), ("column", True), ("curves", False)]}), - ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True}, + ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True, "alt": True}, {"properties": [("extend", False), ("column", False), ("curves", True)]}), - ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True}, + ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True, "alt": True}, {"properties": [("extend", True), ("column", False), ("curves", True)]}), - ("graph.select_leftright", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, + ("graph.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, {"properties": [("mode", 'CHECK'), ("extend", False)]}), - ("graph.select_leftright", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True}, + ("graph.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True}, {"properties": [("mode", 'CHECK'), ("extend", True)]}), ("graph.select_leftright", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, {"properties": [("mode", 'LEFT'), ("extend", False)]}), ("graph.select_leftright", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, {"properties": [("mode", 'RIGHT'), ("extend", False)]}), - *_template_items_select_actions("graph.select_all"), + *_template_items_select_actions(params, "graph.select_all"), ("graph.select_box", {"type": 'B', "value": 'PRESS'}, {"properties": [("axis_range", False), ("include_handles", False)]}), ("graph.select_box", {"type": 'B', "value": 'PRESS', "alt": True}, @@ -1426,43 +1466,43 @@ def km_node_editor(params): ) items.extend([ - ("node.select", {"type": params.action_mouse, "value": 'PRESS'}, + ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS'}, {"properties": [("extend", False)]}), - ("node.select", {"type": params.select_mouse, "value": params.select_click}, + ("node.select", {"type": params.select_mouse, "value": 'PRESS'}, {"properties": [("extend", False)]}), - ("node.select", {"type": params.action_mouse, "value": 'PRESS', "ctrl": True}, + ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, {"properties": [("extend", False)]}), - ("node.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, + ("node.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True}, {"properties": [("extend", False)]}), - ("node.select", {"type": params.action_mouse, "value": 'PRESS', "alt": True}, + ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, {"properties": [("extend", False)]}), - ("node.select", {"type": params.select_mouse, "value": params.select_click, "alt": True}, + ("node.select", {"type": params.select_mouse, "value": 'PRESS', "alt": True}, {"properties": [("extend", False)]}), - ("node.select", {"type": params.action_mouse, "value": 'PRESS', "ctrl": True, "alt": True}, + ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True, "alt": True}, {"properties": [("extend", False)]}), - ("node.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True}, + ("node.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True, "alt": True}, {"properties": [("extend", False)]}), - ("node.select", {"type": params.action_mouse, "value": 'PRESS', "shift": True}, + ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, {"properties": [("extend", True)]}), - ("node.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("node.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True}, {"properties": [("extend", True)]}), - ("node.select", {"type": params.action_mouse, "value": 'PRESS', "shift": True, "ctrl": True}, + ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("extend", True)]}), - ("node.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True}, + ("node.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("extend", True)]}), - ("node.select", {"type": params.action_mouse, "value": 'PRESS', "shift": True, "alt": True}, + ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "alt": True}, {"properties": [("extend", True)]}), - ("node.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True}, + ("node.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "alt": True}, {"properties": [("extend", True)]}), - ("node.select", {"type": params.action_mouse, "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, + ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, {"properties": [("extend", True)]}), - ("node.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True}, + ("node.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, {"properties": [("extend", True)]}), ("node.select_box", {"type": params.select_tweak, "value": 'ANY'}, {"properties": [("tweak", True)]}), - ("node.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, + ("node.select_lasso", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True, "alt": True}, {"properties": [("deselect", False)]}), - ("node.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True}, + ("node.select_lasso", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True, "ctrl": True, "alt": True}, {"properties": [("deselect", True)]}), ("node.select_circle", {"type": 'C', "value": 'PRESS'}, None), ("node.link", {"type": 'LEFTMOUSE', "value": 'PRESS'}, @@ -1504,7 +1544,7 @@ def km_node_editor(params): ("node.delete", {"type": 'DEL', "value": 'PRESS'}, None), ("node.delete_reconnect", {"type": 'X', "value": 'PRESS', "ctrl": True}, None), ("node.delete_reconnect", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, None), - *_template_items_select_actions("node.select_all"), + *_template_items_select_actions(params, "node.select_all"), ("node.select_linked_to", {"type": 'L', "value": 'PRESS', "shift": True}, None), ("node.select_linked_from", {"type": 'L', "value": 'PRESS'}, None), ("node.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, @@ -1530,11 +1570,11 @@ def km_node_editor(params): ("node.viewer_border", {"type": 'B', "value": 'PRESS', "ctrl": True}, None), ("node.clear_viewer_border", {"type": 'B', "value": 'PRESS', "ctrl": True, "alt": True}, None), ("node.translate_attach", {"type": 'G', "value": 'PRESS'}, None), - ("node.translate_attach", {"type": params.action_tweak, "value": 'ANY'}, None), + ("node.translate_attach", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None), ("node.translate_attach", {"type": params.select_tweak, "value": 'ANY'}, None), ("transform.translate", {"type": 'G', "value": 'PRESS'}, {"properties": [("release_confirm", True)]}), - ("transform.translate", {"type": params.action_tweak, "value": 'ANY'}, + ("transform.translate", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), @@ -1567,7 +1607,7 @@ def km_info(params): ) items.extend([ - ("info.select_pick", {"type": params.select_mouse, "value": params.select_click}, None), + ("info.select_pick", {"type": params.select_mouse, "value": params.select_mouse_value}, None), ("info.select_all_toggle", {"type": 'A', "value": 'PRESS'}, None), ("info.select_box", {"type": 'B', "value": 'PRESS'}, None), ("info.report_replay", {"type": 'R', "value": 'PRESS'}, None), @@ -1720,6 +1760,8 @@ def km_dopesheet_generic(_params): items.extend([ ("action.properties", {"type": 'N', "value": 'PRESS'}, None), + ("wm.context_set_enum", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, + {"properties": [("data_path", 'area.type'), ("value", 'GRAPH_EDITOR')]}) ]) return keymap @@ -1734,27 +1776,27 @@ def km_dopesheet(params): ) items.extend([ - ("action.clickselect", {"type": params.select_mouse, "value": params.select_click}, + ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value}, {"properties": [("extend", False), ("column", False), ("channel", False)]}), - ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "alt": True}, + ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True}, {"properties": [("extend", False), ("column", True), ("channel", False)]}), - ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True), ("column", False), ("channel", False)]}), - ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True}, + ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True}, {"properties": [("extend", True), ("column", True), ("channel", False)]}), - ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True}, + ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True, "alt": True}, {"properties": [("extend", False), ("column", False), ("channel", True)]}), - ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True}, + ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True, "alt": True}, {"properties": [("extend", True), ("column", False), ("channel", True)]}), - ("action.select_leftright", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, + ("action.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, {"properties": [("mode", 'CHECK'), ("extend", False)]}), - ("action.select_leftright", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True}, + ("action.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True}, {"properties": [("mode", 'CHECK'), ("extend", True)]}), ("action.select_leftright", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, {"properties": [("mode", 'LEFT'), ("extend", False)]}), ("action.select_leftright", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, {"properties": [("mode", 'RIGHT'), ("extend", False)]}), - *_template_items_select_actions("action.select_all"), + *_template_items_select_actions(params, "action.select_all"), ("action.select_box", {"type": 'B', "value": 'PRESS'}, {"properties": [("axis_range", False)]}), ("action.select_box", {"type": 'B', "value": 'PRESS', "alt": True}, @@ -1882,19 +1924,19 @@ def km_nla_editor(params): ) items.extend([ - ("nla.click_select", {"type": params.select_mouse, "value": params.select_click}, + ("nla.click_select", {"type": params.select_mouse, "value": params.select_mouse_value}, {"properties": [("extend", False)]}), - ("nla.click_select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("nla.click_select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True)]}), - ("nla.select_leftright", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, + ("nla.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, {"properties": [("mode", 'CHECK'), ("extend", False)]}), - ("nla.select_leftright", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True}, + ("nla.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True}, {"properties": [("mode", 'CHECK'), ("extend", True)]}), ("nla.select_leftright", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, {"properties": [("mode", 'LEFT'), ("extend", False)]}), ("nla.select_leftright", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, {"properties": [("mode", 'RIGHT'), ("extend", False)]}), - *_template_items_select_actions("nla.select_all"), + *_template_items_select_actions(params, "nla.select_all"), ("nla.select_box", {"type": 'B', "value": 'PRESS'}, {"properties": [("axis_range", False)]}), ("nla.select_box", {"type": 'B', "value": 'PRESS', "alt": True}, @@ -2166,7 +2208,7 @@ def km_sequencer(params): ) items.extend([ - *_template_items_select_actions("sequencer.select_all"), + *_template_items_select_actions(params, "sequencer.select_all"), ("sequencer.cut", {"type": 'K', "value": 'PRESS'}, {"properties": [("type", 'SOFT')]}), ("sequencer.cut", {"type": 'K', "value": 'PRESS', "shift": True}, @@ -2225,17 +2267,17 @@ def km_sequencer(params): for i in range(10) ) ), - ("sequencer.select", {"type": params.select_mouse, "value": params.select_click}, + ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value}, {"properties": [("extend", False), ("linked_handle", False), ("left_right", 'NONE'), ("linked_time", False)]}), - ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True), ("linked_handle", False), ("left_right", 'NONE'), ("linked_time", False)]}), - ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "alt": True}, + ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True}, {"properties": [("extend", False), ("linked_handle", True), ("left_right", 'NONE'), ("linked_time", False)]}), - ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True}, + ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True}, {"properties": [("extend", True), ("linked_handle", True), ("left_right", 'NONE'), ("linked_time", False)]}), - ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, + ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, {"properties": [("extend", False), ("linked_handle", False), ("left_right", 'MOUSE'), ("linked_time", True)]}), - ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True}, + ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True}, {"properties": [("extend", True), ("linked_handle", False), ("left_right", 'NONE'), ("linked_time", True)]}), ("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), ("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), @@ -2450,11 +2492,11 @@ def km_clip_editor(params): ("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True}, {"properties": [("position", 'PATHSTART')]}), ("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), - ("clip.select", {"type": params.select_mouse, "value": params.select_click}, + ("clip.select", {"type": params.select_mouse, "value": params.select_mouse_value}, {"properties": [("extend", False)]}), - ("clip.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("clip.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True)]}), - *_template_items_select_actions("clip.select_all"), + *_template_items_select_actions(params, "clip.select_all"), ("clip.select_box", {"type": 'B', "value": 'PRESS'}, None), ("clip.select_circle", {"type": 'C', "value": 'PRESS'}, None), op_menu("CLIP_MT_select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}), @@ -2521,11 +2563,11 @@ def km_clip_graph_editor(params): items.extend([ ("clip.change_frame", {"type": params.action_mouse, "value": 'PRESS'}, None), - ("clip.graph_select", {"type": params.select_mouse, "value": params.select_click}, + ("clip.graph_select", {"type": params.select_mouse, "value": params.select_mouse_value}, {"properties": [("extend", False)]}), - ("clip.graph_select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("clip.graph_select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True)]}), - *_template_items_select_actions("clip.graph_select_all_markers"), + *_template_items_select_actions(params, "clip.graph_select_all_markers"), ("clip.graph_select_box", {"type": 'B', "value": 'PRESS'}, None), ("clip.graph_delete_curve", {"type": 'X', "value": 'PRESS'}, None), ("clip.graph_delete_curve", {"type": 'DEL', "value": 'PRESS'}, None), @@ -2605,8 +2647,18 @@ def km_frames(params): if not params.legacy: # New playback + if params.spacebar_action == 'TOOL': + items.append( + ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True}, None), + ) + elif params.spacebar_action == 'PLAY': + items.append( + ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS'}, None), + ) + else: + assert False + items.extend([ - ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True}, None), ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("reverse", True)]}), ]) @@ -2685,7 +2737,7 @@ def km_animation_channels(params): # Find (setting the name filter). ("anim.channels_find", {"type": 'F', "value": 'PRESS', "ctrl": True}, None), # Selection. - *_template_items_select_actions("anim.channels_select_all"), + *_template_items_select_actions(params, "anim.channels_select_all"), ("anim.channels_select_box", {"type": 'B', "value": 'PRESS'}, None), ("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None), # Delete. @@ -2726,7 +2778,7 @@ def km_animation_channels(params): # Modes -def km_grease_pencil(_params): +def km_grease_pencil(params): items = [] keymap = ( "Grease Pencil", @@ -2734,29 +2786,28 @@ def km_grease_pencil(_params): {"items": items}, ) - items.extend([ - # Draw - ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "key_modifier": 'D'}, - {"properties": [("mode", 'DRAW'), ("wait_for_input", False)]}), - # Draw - straight lines - ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True, "key_modifier": 'D'}, - {"properties": [("mode", 'DRAW_STRAIGHT'), ("wait_for_input", False)]}), - # Draw - poly lines - ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "alt": True, "key_modifier": 'D'}, - {"properties": [("mode", 'DRAW_POLY'), ("wait_for_input", False)]}), - # Erase - ("gpencil.annotate", {"type": 'RIGHTMOUSE', "value": 'PRESS', "key_modifier": 'D'}, - {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}), + if params.legacy: + items.extend([ + # Draw + ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "key_modifier": 'D'}, + {"properties": [("mode", 'DRAW'), ("wait_for_input", False)]}), + # Draw - straight lines + ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True, "key_modifier": 'D'}, + {"properties": [("mode", 'DRAW_STRAIGHT'), ("wait_for_input", False)]}), + # Draw - poly lines + ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "alt": True, "key_modifier": 'D'}, + {"properties": [("mode", 'DRAW_POLY'), ("wait_for_input", False)]}), + # Erase + ("gpencil.annotate", {"type": 'RIGHTMOUSE', "value": 'PRESS', "key_modifier": 'D'}, + {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}), - # Enter edit mode - ("gpencil.editmode_toggle", {"type": 'TAB', "value": 'PRESS', "key_modifier": 'D'}, None), - # Add blank frame (B because it's easy to reach from D). - ("gpencil.blank_frame_add", {"type": 'B', "value": 'PRESS', "key_modifier": 'D'}, None), - # Delete active frame - for easier video tutorials/review sessions. - # This works even when not in edit mode. - ("gpencil.active_frames_delete_all", {"type": 'X', "value": 'PRESS', "key_modifier": 'D'}, None), - ("gpencil.active_frames_delete_all", {"type": 'DEL', "value": 'PRESS', "key_modifier": 'D'}, None), - ]) + # Add blank frame (B because it's easy to reach from D). + ("gpencil.blank_frame_add", {"type": 'B', "value": 'PRESS', "key_modifier": 'D'}, None), + # Delete active frame - for easier video tutorials/review sessions. + # This works even when not in edit mode. + ("gpencil.active_frames_delete_all", {"type": 'X', "value": 'PRESS', "key_modifier": 'D'}, None), + ("gpencil.active_frames_delete_all", {"type": 'DEL', "value": 'PRESS', "key_modifier": 'D'}, None), + ]) return keymap @@ -2764,7 +2815,7 @@ def km_grease_pencil(_params): def _grease_pencil_selection(params): return [ # Select all - *_template_items_select_actions("gpencil.select_all"), + *_template_items_select_actions(params, "gpencil.select_all"), # Circle select ("gpencil.select_circle", {"type": 'C', "value": 'PRESS'}, None), # Box select @@ -2783,12 +2834,12 @@ def _grease_pencil_selection(params): {"properties": [("mode", 'ADD')]}), ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True}, {"properties": [("mode", 'SUB')]}), - ("gpencil.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True), ("toggle", True)]}), # Whole stroke select - ("gpencil.select", {"type": params.select_mouse, "value": params.select_click, "alt": True}, + ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True}, {"properties": [("entire_strokes", True)]}), - ("gpencil.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True}, + ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True}, {"properties": [("extend", True), ("entire_strokes", True)]}), # Select linked ("gpencil.select_linked", {"type": 'L', "value": 'PRESS'}, None), @@ -2825,7 +2876,7 @@ def km_grease_pencil_stroke_edit_mode(params): ("gpencil.interpolate", {"type": 'E', "value": 'PRESS', "ctrl": True, "alt": True}, None), ("gpencil.interpolate_sequence", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True}, None), # Normal select - ("gpencil.select", {"type": params.select_mouse, "value": params.select_click}, None), + ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value}, None), # Selection *_grease_pencil_selection(params), # Duplicate and move selected points @@ -3028,11 +3079,11 @@ def km_grease_pencil_stroke_sculpt_mode(params): # Selection *_grease_pencil_selection(params), # Painting - ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'}, + ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'}, {"properties": [("wait_for_input", False)]}), - ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, + ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, {"properties": [("wait_for_input", False)]}), - ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, {"properties": [("wait_for_input", False)]}), # Brush strength ("wm.radial_control", {"type": 'F', "value": 'PRESS', "shift": True}, @@ -3061,9 +3112,9 @@ def km_grease_pencil_stroke_weight_mode(params): # Selection *_grease_pencil_selection(params), # Painting - ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, + ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, {"properties": [("wait_for_input", False)]}), - ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, {"properties": [("wait_for_input", False)]}), # Brush strength ("wm.radial_control", {"type": 'F', "value": 'PRESS', "shift": True}, @@ -3078,7 +3129,7 @@ def km_grease_pencil_stroke_weight_mode(params): return keymap -def km_face_mask(_params): +def km_face_mask(params): items = [] keymap = ( "Face Mask", @@ -3087,7 +3138,7 @@ def km_face_mask(_params): ) items.extend([ - *_template_items_select_actions("paint.face_select_all"), + *_template_items_select_actions(params, "paint.face_select_all"), ("paint.face_select_hide", {"type": 'H', "value": 'PRESS'}, {"properties": [("unselected", False)]}), ("paint.face_select_hide", {"type": 'H', "value": 'PRESS', "shift": True}, @@ -3112,7 +3163,7 @@ def km_weight_paint_vertex_selection(params): ) items.extend([ - *_template_items_select_actions("paint.vert_select_all"), + *_template_items_select_actions(params, "paint.vert_select_all"), ("view3d.select_box", {"type": 'B', "value": 'PRESS'}, None), ("view3d.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True}, {"properties": [("mode", 'ADD')]}), @@ -3151,7 +3202,7 @@ def km_pose(params): {"properties": [("flipped", False)]}), ("pose.paste", {"type": 'V', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("flipped", True)]}), - *_template_items_select_actions("pose.select_all"), + *_template_items_select_actions(params, "pose.select_all"), ("pose.select_parent", {"type": 'P', "value": 'PRESS', "shift": True}, None), ("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, {"properties": [("direction", 'PARENT'), ("extend", False)]}), @@ -3217,7 +3268,7 @@ def km_object_mode(params): op_menu_pie("VIEW3D_MT_proportional_editing_falloff_pie", {"type": 'O', "value": 'PRESS', "shift": True}), ("wm.context_toggle", {"type": 'O', "value": 'PRESS'}, {"properties": [("data_path", 'tool_settings.use_proportional_edit_objects')]}), - *_template_items_select_actions("object.select_all"), + *_template_items_select_actions(params, "object.select_all"), ("object.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), ("object.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), ("object.select_linked", {"type": 'L', "value": 'PRESS', "shift": True}, None), @@ -3243,9 +3294,9 @@ def km_object_mode(params): ("object.delete", {"type": 'X', "value": 'PRESS', "shift": True}, {"properties": [("use_global", True)]}), ("object.delete", {"type": 'DEL', "value": 'PRESS'}, - {"properties": [("use_global", False)]}), + {"properties": [("use_global", False), ("confirm", False)]}), ("object.delete", {"type": 'DEL', "value": 'PRESS', "shift": True}, - {"properties": [("use_global", True)]}), + {"properties": [("use_global", True), ("confirm", False)]}), op_menu("VIEW3D_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}), op_menu("VIEW3D_MT_object_apply", {"type": 'A', "value": 'PRESS', "ctrl": True}), op_menu("VIEW3D_MT_make_links", {"type": 'L', "value": 'PRESS', "ctrl": True}), @@ -3309,8 +3360,8 @@ def km_paint_curve(params): items.extend([ ("paintcurve.add_point_slide", {"type": params.action_mouse, "value": 'PRESS', "ctrl": True}, None), - ("paintcurve.select", {"type": params.select_mouse, "value": params.select_click}, None), - ("paintcurve.select", {"type": params.select_mouse, "value": params.select_click, "shift": True}, + ("paintcurve.select", {"type": params.select_mouse, "value": params.select_mouse_value}, None), + ("paintcurve.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True}, {"properties": [("extend", True)]}), ("paintcurve.slide", {"type": params.action_mouse, "value": 'PRESS'}, None), ("paintcurve.slide", {"type": params.action_mouse, "value": 'PRESS', "shift": True}, @@ -3343,11 +3394,7 @@ def km_curve(params): op_menu("VIEW3D_MT_curve_add", {"type": 'A', "value": 'PRESS', "shift": True}), ("curve.handle_type_set", {"type": 'V', "value": 'PRESS'}, None), ("curve.vertex_add", {"type": params.action_mouse, "value": 'CLICK', "ctrl": True}, None), - ("curve.draw", {"type": params.action_mouse, "value": 'PRESS', "shift": True}, - {"properties": [("wait_for_input", False)]}), - ("curve.draw", {"type": 'PEN', "value": 'PRESS', "shift": True}, - {"properties": [("wait_for_input", False)]}), - *_template_items_select_actions("curve.select_all"), + *_template_items_select_actions(params, "curve.select_all"), ("curve.select_row", {"type": 'R', "value": 'PRESS', "shift": True}, None), ("curve.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), ("curve.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), @@ -3676,20 +3723,27 @@ def km_mesh(params): {"properties": [("vertex_only", True)]}), # Selection modes. *_template_items_editmode_mesh_select_mode(), - # Selection. - ("mesh.loop_select", {"type": params.select_mouse, "value": params.select_click, "alt": True}, + # Loop Select with alt, and double click in case MMB emulation is on. + ("mesh.loop_select", {"type": params.select_mouse, "value": 'DOUBLE_CLICK'}, {"properties": [("extend", False), ("deselect", False), ("toggle", False)]}), - ("mesh.loop_select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True}, + ("mesh.loop_select", {"type": params.select_mouse, "value": 'DOUBLE_CLICK', "shift": True}, + {"properties": [("extend", True), ("deselect", False), ("toggle", False)]}), + ("mesh.loop_select", {"type": params.select_mouse, "value": 'DOUBLE_CLICK', "alt": True}, + {"properties": [("extend", False), ("deselect", True), ("toggle", False)]}), + ("mesh.loop_select", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True}, + {"properties": [("extend", False), ("deselect", False), ("toggle", False)]}), + ("mesh.loop_select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True}, {"properties": [("extend", False), ("deselect", False), ("toggle", True)]}), - ("mesh.edgering_select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True}, + # Selection + ("mesh.edgering_select", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True, "alt": True}, {"properties": [("extend", False), ("deselect", False), ("toggle", False)]}), - ("mesh.edgering_select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True}, + ("mesh.edgering_select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True, "alt": True}, {"properties": [("extend", False), ("deselect", False), ("toggle", True)]}), - ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, + ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, {"properties": [("use_fill", False)]}), - ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True}, + ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True}, {"properties": [("use_fill", True)]}), - *_template_items_select_actions("mesh.select_all"), + *_template_items_select_actions(params, "mesh.select_all"), ("mesh.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), ("mesh.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), ("mesh.select_next_item", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "ctrl": True}, None), @@ -3801,7 +3855,7 @@ def km_armature(params): ("armature.parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None), ("armature.parent_clear", {"type": 'P', "value": 'PRESS', "alt": True}, None), # Selection. - *_template_items_select_actions("armature.select_all"), + *_template_items_select_actions(params, "armature.select_all"), ("armature.select_mirror", {"type": 'M', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("extend", False)]}), ("armature.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'}, @@ -3816,7 +3870,7 @@ def km_armature(params): ("armature.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), ("armature.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None), ("armature.select_linked", {"type": 'L', "value": 'PRESS'}, None), - ("armature.shortest_path_pick", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, None), + ("armature.shortest_path_pick", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, None), # Editing. op_menu("VIEW3D_MT_edit_armature_delete", {"type": 'X', "value": 'PRESS'}), op_menu("VIEW3D_MT_edit_armature_delete", {"type": 'DEL', "value": 'PRESS'}), @@ -3853,7 +3907,7 @@ def km_armature(params): # Metaball edit mode. -def km_metaball(_params): +def km_metaball(params): items = [] keymap = ( "Metaball", @@ -3871,7 +3925,7 @@ def km_metaball(_params): ("mball.delete_metaelems", {"type": 'X', "value": 'PRESS'}, None), ("mball.delete_metaelems", {"type": 'DEL', "value": 'PRESS'}, None), ("mball.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None), - *_template_items_select_actions("mball.select_all"), + *_template_items_select_actions(params, "mball.select_all"), ("mball.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None), *_template_items_proportional_editing(connected=True), ]) @@ -3880,7 +3934,7 @@ def km_metaball(_params): # Lattice edit mode. -def km_lattice(_params): +def km_lattice(params): items = [] keymap = ( "Lattice", @@ -3889,7 +3943,7 @@ def km_lattice(_params): ) items.extend([ - *_template_items_select_actions("lattice.select_all"), + *_template_items_select_actions(params, "lattice.select_all"), ("lattice.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), ("lattice.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), ("object.vertex_parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None), @@ -3911,7 +3965,7 @@ def km_particle(params): ) items.extend([ - *_template_items_select_actions("particle.select_all"), + *_template_items_select_actions(params, "particle.select_all"), ("particle.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None), ("particle.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None), ("particle.select_linked", {"type": 'L', "value": 'PRESS'}, @@ -4044,11 +4098,19 @@ def km_object_non_modal(params): {"items": items}, ) - items.extend([ - ("object.mode_set", {"type": 'TAB', "value": 'PRESS'}, - {"properties": [("mode", 'EDIT'), ("toggle", True)]}), - ("view3d.object_mode_pie_or_toggle", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, None), - ]) + if not params.use_v3d_tab_menu: + items.extend([ + ("object.mode_set", {"type": 'TAB', "value": 'PRESS'}, + {"properties": [("mode", 'EDIT'), ("toggle", True)]}), + ("view3d.object_mode_pie_or_toggle", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, None), + ]) + else: + # Swap Tab/Ctrl-Tab + items.extend([ + ("object.mode_set", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, + {"properties": [("mode", 'EDIT'), ("toggle", True)]}), + op_menu_pie("VIEW3D_MT_object_mode_pie", {"type": 'TAB', "value": 'PRESS'}), + ]) if params.legacy: items.extend([ @@ -4816,6 +4878,21 @@ def km_backdrop_transform_widget(_params): # ------------------------------------------------------------------------------ +# Popup Keymaps + +def km_popup_toolbar(params): + return ( + "Toolbar Popup", + {"space_type": 'EMPTY', "region_type": 'TEMPORARY'}, + {"items": [ + op_tool("Transform", {"type": 'T', "value": 'PRESS'}), + op_tool("Annotate", {"type": 'D', "value": 'PRESS'}), + op_tool("Measure", {"type": 'M', "value": 'PRESS'}), + ]}, + ) + + +# ------------------------------------------------------------------------------ # Tool System Keymaps # # Named are auto-generated based on the tool name and it's toolbar. @@ -4920,6 +4997,19 @@ def km_image_editor_tool_uv_annotate_eraser(params): ) +def km_3d_view_tool_object_cursor(params): + return ( + "3D View Tool: Object, Cursor", + {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, + {"items": ( + ("view3d.cursor3d", {"type": params.tool_mouse, "value": 'PRESS'}, None), + ("transform.translate", {"type": params.tool_tweak, "value": 'ANY'}, + {"properties": [("release_confirm", True), ("cursor_transform", True)]}), + ), + }, + ) + + def km_3d_view_tool_object_select_box(params): return ( "3D View Tool: Object, Select Box", @@ -5004,6 +5094,8 @@ def km_3d_view_tool_object_annotate(params): {"items": ( ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS'}, {"properties": [("mode", 'DRAW'), ("wait_for_input", False)]}), + ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS', "alt": True}, + {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}), ), }, ) @@ -5016,6 +5108,8 @@ def km_3d_view_tool_object_annotate_line(params): {"items": ( ("gpencil.annotate", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("mode", 'DRAW_STRAIGHT'), ("wait_for_input", False)]}), + ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS', "alt": True}, + {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}), ), }, ) @@ -5028,6 +5122,8 @@ def km_3d_view_tool_object_annotate_polygon(params): {"items": ( ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS'}, {"properties": [("mode", 'DRAW_POLY'), ("wait_for_input", False)]}), + ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS', "alt": True}, + {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}), ), }, ) @@ -5040,6 +5136,8 @@ def km_3d_view_tool_object_annotate_eraser(params): {"items": ( ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS'}, {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}), + ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS', "alt": True}, + {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}), ), }, ) @@ -5061,7 +5159,7 @@ def km_3d_view_tool_pose_breakdowner(params): "3D View Tool: Pose, Breakdowner", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("pose.breakdown", {"type": params.tool_mouse, "value": 'PRESS'}, None), + ("pose.breakdown", {"type": params.tool_tweak, "value": 'ANY'}, None), ), }, ) @@ -5072,7 +5170,7 @@ def km_3d_view_tool_pose_push(params): "3D View Tool: Pose, Push", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("pose.push", {"type": params.tool_mouse, "value": 'PRESS'}, None), + ("pose.push", {"type": params.tool_tweak, "value": 'ANY'}, None), ), }, ) @@ -5083,7 +5181,7 @@ def km_3d_view_tool_pose_relax(params): "3D View Tool: Pose, Relax", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("pose.relax", {"type": params.tool_mouse, "value": 'PRESS'}, None), + ("pose.relax", {"type": params.tool_tweak, "value": 'ANY'}, None), ), }, ) @@ -5106,7 +5204,7 @@ def km_3d_view_tool_edit_armature_bone_size(params): "3D View Tool: Edit Armature, Bone Size", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("transform.transform", {"type": params.tool_mouse, "value": 'PRESS'}, + ("transform.transform", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True), ("mode", 'BONE_SIZE')]}), ), }, @@ -5118,7 +5216,7 @@ def km_3d_view_tool_edit_armature_bone_envelope(params): "3D View Tool: Edit Armature, Bone Envelope", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("transform.transform", {"type": params.tool_mouse, "value": 'PRESS'}, + ("transform.transform", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True), ("mode", 'BONE_ENVELOPE')]}), ), }, @@ -5212,7 +5310,7 @@ def km_3d_view_tool_edit_mesh_inset_faces(params): "3D View Tool: Edit Mesh, Inset Faces", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("mesh.inset", {"type": params.tool_mouse, "value": 'PRESS'}, + ("mesh.inset", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ), }, @@ -5224,7 +5322,7 @@ def km_3d_view_tool_edit_mesh_bevel(params): "3D View Tool: Edit Mesh, Bevel", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("mesh.bevel", {"type": params.tool_mouse, "value": 'PRESS'}, + ("mesh.bevel", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ), }, @@ -5320,7 +5418,7 @@ def km_3d_view_tool_edit_mesh_smooth(params): "3D View Tool: Edit Mesh, Smooth", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("mesh.vertices_smooth", {"type": params.tool_mouse, "value": 'PRESS'}, + ("mesh.vertices_smooth", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("factor", 0.0)]}), ), }, @@ -5332,7 +5430,7 @@ def km_3d_view_tool_edit_mesh_randomize(params): "3D View Tool: Edit Mesh, Randomize", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("transform.vertex_random", {"type": params.tool_mouse, "value": 'PRESS'}, + ("transform.vertex_random", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("offset", 0.0)]}), ), }, @@ -5344,7 +5442,7 @@ def km_3d_view_tool_edit_mesh_edge_slide(params): "3D View Tool: Edit Mesh, Edge Slide", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("transform.edge_slide", {"type": params.tool_mouse, "value": 'PRESS'}, + ("transform.edge_slide", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ), }, @@ -5356,7 +5454,7 @@ def km_3d_view_tool_edit_mesh_vertex_slide(params): "3D View Tool: Edit Mesh, Vertex Slide", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("transform.vert_slide", {"type": params.tool_mouse, "value": 'PRESS'}, + ("transform.vert_slide", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ), }, @@ -5368,7 +5466,7 @@ def km_3d_view_tool_edit_mesh_shrink_fatten(params): "3D View Tool: Edit Mesh, Shrink/Fatten", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("transform.shrink_fatten", {"type": params.tool_mouse, "value": 'PRESS'}, + ("transform.shrink_fatten", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ), }, @@ -5380,7 +5478,7 @@ def km_3d_view_tool_edit_mesh_push_pull(params): "3D View Tool: Edit Mesh, Push/Pull", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("transform.push_pull", {"type": params.tool_mouse, "value": 'PRESS'}, + ("transform.push_pull", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ), }, @@ -5404,7 +5502,7 @@ def km_3d_view_tool_edit_mesh_to_sphere(params): "3D View Tool: Edit Mesh, To Sphere", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("transform.tosphere", {"type": params.tool_mouse, "value": 'PRESS'}, + ("transform.tosphere", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("release_confirm", True)]}), ), }, @@ -5416,7 +5514,7 @@ def km_3d_view_tool_edit_mesh_rip_region(params): "3D View Tool: Edit Mesh, Rip Region", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("mesh.rip_move", {"type": params.tool_mouse, "value": 'PRESS'}, + ("mesh.rip_move", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("TRANSFORM_OT_translate", [("release_confirm", True)])]}), ), }, @@ -5428,7 +5526,7 @@ def km_3d_view_tool_edit_mesh_rip_edge(params): "3D View Tool: Edit Mesh, Rip Edge", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": ( - ("mesh.rip_edge_move", {"type": params.tool_mouse, "value": 'PRESS'}, + ("mesh.rip_edge_move", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("TRANSFORM_OT_translate", [("release_confirm", True)])]}), ), }, @@ -5651,7 +5749,7 @@ def km_3d_view_tool_gpencil_edit_to_sphere(params): def generate_keymaps(params=None): if params is None: - params = KeymapParams() + params = Params() return [ # Window, screen, area, region. km_window(params), @@ -5777,6 +5875,9 @@ def generate_keymaps(params=None): km_armature_spline_widgets_tweak_modal_map(params), km_backdrop_transform_widget(params), + # Pop-Up Keymaps. + km_popup_toolbar(params), + # Tool System. km_image_editor_tool_uv_cursor(params), km_image_editor_tool_uv_select_box(params), @@ -5786,6 +5887,7 @@ def generate_keymaps(params=None): km_image_editor_tool_uv_annotate_line(params), km_image_editor_tool_uv_annotate_polygon(params), km_image_editor_tool_uv_annotate_eraser(params), + km_3d_view_tool_object_cursor(params), km_3d_view_tool_object_select_box(params), km_3d_view_tool_object_select_circle(params), km_3d_view_tool_object_select_lasso(params), @@ -5865,7 +5967,7 @@ def generate_keymaps(params=None): # import pprint # for legacy in (False, True): # with open("keymap_default.py" if not legacy else "keymap_legacy.py", 'w') as fh: -# fh.write(pprint.pformat(generate_keymaps(KeymapParams(legacy=legacy)), indent=2, width=80)) +# fh.write(pprint.pformat(generate_keymaps(Params(legacy=legacy)), indent=2, width=80)) # import sys # sys.exit() # # end code @@ -5877,9 +5979,3 @@ def generate_keymaps(params=None): # Command to lint: # # pylint release/scripts/presets/keyconfig/keymap_data/blender_default.py --disable=C0111,C0301,C0302,R0902,R0903,R0913 - - -if __name__ == "__main__": - from bpy_extras.keyconfig_utils import keyconfig_import_from_data - keyconfig_import_from_data("Blender", generate_keymaps()) - keyconfig_import_from_data("Blender 27X", generate_keymaps(KeymapParams(legacy=True))) diff --git a/release/scripts/presets/keyconfig/maya.py b/release/scripts/presets/keyconfig/maya.py deleted file mode 100644 index 1ce2fb34ccf..00000000000 --- a/release/scripts/presets/keyconfig/maya.py +++ /dev/null @@ -1,1917 +0,0 @@ -# Configuration Maya -import bpy -import os - -wm = bpy.context.window_manager -kc = wm.keyconfigs.new(os.path.splitext(os.path.basename(__file__))[0]) - -# Map Window -km = kc.keymaps.new('Window', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.window_new', 'W', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.read_homefile', 'N', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.save_homefile', 'U', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'O', 'PRESS', shift=True, ctrl=True) -kmi.properties.name = 'TOPBAR_MT_file_open_recent' -kmi = km.keymap_items.new('wm.open_mainfile', 'O', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.open_mainfile', 'F1', 'PRESS') -kmi = km.keymap_items.new('wm.link', 'O', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.append', 'F1', 'PRESS', shift=True) -kmi.properties.link = False -kmi.properties.instance_groups = False -kmi = km.keymap_items.new('wm.save_mainfile', 'S', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('wm.save_as_mainfile', 'F2', 'PRESS') -kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'PRESS', ctrl=True, alt=True) -kmi.properties.copy = True -kmi = km.keymap_items.new('wm.window_fullscreen_toggle', 'F11', 'PRESS', alt=True) -kmi = km.keymap_items.new('wm.quit_blender', 'Q', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.redraw_timer', 'T', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.debug_menu', 'D', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.search_menu', 'SPACE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'NDOF_BUTTON_MENU', 'PRESS') -kmi.properties.name = 'USERPREF_MT_ndof_settings' -kmi = km.keymap_items.new('wm.context_set_enum', 'F2', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'NODE_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F4', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'CONSOLE' -kmi = km.keymap_items.new('wm.context_set_enum', 'F5', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'VIEW_3D' -kmi = km.keymap_items.new('wm.context_set_enum', 'F6', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'GRAPH_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F7', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'PROPERTIES' -kmi = km.keymap_items.new('wm.context_set_enum', 'F8', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'SEQUENCE_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F9', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'OUTLINER' -kmi = km.keymap_items.new('wm.context_set_enum', 'F10', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'IMAGE_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F11', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'TEXT_EDITOR' -kmi = km.keymap_items.new('wm.context_set_enum', 'F12', 'PRESS', shift=True) -kmi.properties.data_path = 'area.type' -kmi.properties.value = 'DOPESHEET_EDITOR' -kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_PLUS', 'PRESS') -kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity' -kmi.properties.value = 1.1 -kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_MINUS', 'PRESS') -kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity' -kmi.properties.value = 1.0 / 1.1 -kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_PLUS', 'PRESS', shift=True) -kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity' -kmi.properties.value = 1.5 -kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_MINUS', 'PRESS', shift=True) -kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity' -kmi.properties.value = 1.0 / 1.5 -kmi = km.keymap_items.new('info.reports_display_update', 'TIMER', 'ANY', any=True) - -# Map Screen -km = kc.keymaps.new('Screen', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('screen.animation_step', 'TIMER0', 'ANY', any=True) -kmi = km.keymap_items.new('screen.region_blend', 'TIMERREGION', 'ANY', any=True) -kmi = km.keymap_items.new('screen.screen_set', 'RIGHT_ARROW', 'PRESS', ctrl=True) -kmi.properties.delta = 1 -kmi = km.keymap_items.new('screen.screen_set', 'LEFT_ARROW', 'PRESS', ctrl=True) -kmi.properties.delta = -1 -kmi = km.keymap_items.new('screen.screen_full_area', 'SPACE', 'PRESS', shift=True) -kmi = km.keymap_items.new('screen.screenshot', 'F3', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('screen.region_quadview', 'SPACE', 'PRESS') -kmi = km.keymap_items.new('screen.repeat_history', 'F3', 'PRESS') -kmi = km.keymap_items.new('screen.repeat_last', 'G', 'PRESS') -kmi = km.keymap_items.new('screen.region_flip', 'F5', 'PRESS') -kmi = km.keymap_items.new('screen.redo_last', 'F6', 'PRESS') -kmi = km.keymap_items.new('script.reload', 'F8', 'PRESS') -kmi = km.keymap_items.new('file.execute', 'RET', 'PRESS') -kmi = km.keymap_items.new('file.execute', 'NUMPAD_ENTER', 'PRESS') -kmi = km.keymap_items.new('file.cancel', 'ESC', 'PRESS') -kmi = km.keymap_items.new('ed.undo', 'Z', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('ed.redo', 'Z', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('ed.undo_history', 'Z', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('render.render', 'F12', 'PRESS') -kmi = km.keymap_items.new('render.render', 'F12', 'PRESS', ctrl=True) -kmi.properties.animation = True -kmi = km.keymap_items.new('render.view_cancel', 'ESC', 'PRESS') -kmi = km.keymap_items.new('render.view_show', 'F11', 'PRESS') -kmi = km.keymap_items.new('render.play_rendered_anim', 'F11', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('screen.userpref_show', 'U', 'PRESS', ctrl=True, alt=True) - -# Map View2D -km = kc.keymaps.new('View2D', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('view2d.scroller_activate', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.scroller_activate', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('view2d.pan', 'TRACKPADPAN', 'ANY') -kmi = km.keymap_items.new('view2d.scroll_right', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('view2d.scroll_left', 'WHEELUPMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('view2d.zoom_out', 'WHEELOUTMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.zoom_in', 'WHEELINMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.zoom_out', 'NUMPAD_MINUS', 'PRESS') -kmi = km.keymap_items.new('view2d.zoom_in', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new('view2d.smoothview', 'TIMER1', 'ANY') -kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.scroll_right', 'WHEELDOWNMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.scroll_left', 'WHEELUPMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.zoom', 'RIGHTMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('view2d.zoom', 'TRACKPADZOOM', 'ANY') -kmi = km.keymap_items.new('view2d.zoom_border', 'B', 'PRESS', shift=True) - -# Map Frames -km = kc.keymaps.new('Frames', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('screen.frame_offset', 'LEFT_ARROW', 'PRESS') -kmi.properties.delta = -1 -kmi = km.keymap_items.new('screen.frame_offset', 'RIGHT_ARROW', 'PRESS') -kmi.properties.delta = 1 -kmi = km.keymap_items.new('screen.frame_offset', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.delta = 1 -kmi = km.keymap_items.new('screen.frame_offset', 'WHEELUPMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.delta = -1 -kmi = km.keymap_items.new('screen.frame_jump', 'V', 'PRESS', shift=True, alt=True) -kmi.properties.end = False -kmi = km.keymap_items.new('screen.keyframe_jump', 'UP_ARROW', 'PRESS') -kmi.properties.next = True -kmi = km.keymap_items.new('screen.keyframe_jump', 'COMMA', 'PRESS') -kmi.properties.next = False -kmi = km.keymap_items.new('screen.keyframe_jump', 'MEDIA_LAST', 'PRESS') -kmi.properties.next = True -kmi = km.keymap_items.new('screen.keyframe_jump', 'MEDIA_FIRST', 'PRESS') -kmi.properties.next = False -kmi = km.keymap_items.new('screen.animation_play', 'V', 'PRESS', alt=True) -kmi = km.keymap_items.new('screen.animation_cancel', 'ESC', 'PRESS') -kmi = km.keymap_items.new('screen.animation_play', 'MEDIA_PLAY', 'PRESS') -kmi = km.keymap_items.new('screen.animation_cancel', 'MEDIA_STOP', 'PRESS') - -# Map View2D Buttons List -km = kc.keymaps.new('View2D Buttons List', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('view2d.scroller_activate', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.scroller_activate', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.pan', 'TRACKPADPAN', 'ANY') -kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS') -kmi = km.keymap_items.new('view2d.scroll_down', 'PAGE_DOWN', 'PRESS') -kmi.properties.page = True -kmi = km.keymap_items.new('view2d.scroll_up', 'PAGE_UP', 'PRESS') -kmi.properties.page = True -kmi = km.keymap_items.new('view2d.zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('view2d.zoom', 'TRACKPADZOOM', 'ANY') -kmi = km.keymap_items.new('view2d.zoom_out', 'NUMPAD_MINUS', 'PRESS') -kmi = km.keymap_items.new('view2d.zoom_in', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new('view2d.reset', 'A', 'PRESS') - -# Map Markers -km = kc.keymaps.new('Markers', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.move', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('marker.duplicate', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi.properties.camera = False -kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi.properties.camera = False -kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi.properties.camera = True -kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.extend = True -kmi.properties.camera = True -kmi = km.keymap_items.new('marker.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('marker.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi = km.keymap_items.new('marker.select_all', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('marker.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('marker.move', 'W', 'PRESS') -kmi = km.keymap_items.new('marker.camera_bind', 'B', 'PRESS', ctrl=True) - -# Map Animation -km = kc.keymaps.new('Animation', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('anim.change_frame', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('wm.context_toggle', 'T', 'PRESS', ctrl=True) -kmi.properties.data_path = 'space_data.show_seconds' -kmi = km.keymap_items.new('anim.previewrange_set', 'P', 'PRESS') -kmi = km.keymap_items.new('anim.previewrange_clear', 'P', 'PRESS', alt=True) - -# Map Timeline -km = kc.keymaps.new('Timeline', space_type='TIMELINE', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('time.start_frame_set', 'S', 'PRESS') -kmi = km.keymap_items.new('time.end_frame_set', 'E', 'PRESS') -kmi = km.keymap_items.new('time.view_all', 'A', 'PRESS') - -# Map Outliner -km = kc.keymaps.new('Outliner', space_type='OUTLINER', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('outliner.item_rename', 'LEFTMOUSE', 'DOUBLE_CLICK') -kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('outliner.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi = km.keymap_items.new('outliner.item_openclose', 'RET', 'PRESS') -kmi.properties.all = False -kmi = km.keymap_items.new('outliner.item_openclose', 'RET', 'PRESS', shift=True) -kmi.properties.all = True -kmi = km.keymap_items.new('outliner.item_rename', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('outliner.operation', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('outliner.show_hierarchy', 'A', 'PRESS') -kmi = km.keymap_items.new('outliner.show_active', 'F', 'PRESS') -kmi = km.keymap_items.new('outliner.scroll_page', 'PAGE_DOWN', 'PRESS') -kmi = km.keymap_items.new('outliner.scroll_page', 'PAGE_UP', 'PRESS') -kmi.properties.up = True -kmi = km.keymap_items.new('outliner.show_one_level', 'PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('outliner.show_one_level', 'COMMA', 'PRESS', shift=True) -kmi.properties.open = False -kmi = km.keymap_items.new('outliner.selected_toggle', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('outliner.expanded_toggle', 'A', 'PRESS', shift=True) -kmi = km.keymap_items.new('outliner.renderability_toggle', 'R', 'PRESS') -kmi = km.keymap_items.new('outliner.selectability_toggle', 'S', 'PRESS') -kmi = km.keymap_items.new('outliner.visibility_toggle', 'V', 'PRESS') -kmi = km.keymap_items.new('outliner.keyingset_add_selected', 'K', 'PRESS') -kmi = km.keymap_items.new('outliner.keyingset_remove_selected', 'K', 'PRESS', alt=True) -kmi = km.keymap_items.new('anim.keyframe_insert', 'I', 'PRESS') -kmi = km.keymap_items.new('anim.keyframe_delete', 'I', 'PRESS', alt=True) -kmi = km.keymap_items.new('outliner.drivers_add_selected', 'D', 'PRESS') -kmi = km.keymap_items.new('outliner.drivers_delete_selected', 'D', 'PRESS', alt=True) - -# Map Face Mask -km = kc.keymaps.new('Face Mask', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.face_select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'SELECT' -kmi = km.keymap_items.new('paint.face_select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('paint.face_select_hide', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('paint.face_select_hide', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('paint.face_select_reveal', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('paint.face_select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('paint.face_select_linked_pick', 'L', 'PRESS') - -# Map Pose -km = kc.keymaps.new('Pose', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS') -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_add' -kmi = km.keymap_items.new('pose.hide', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('pose.hide', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('pose.reveal', 'H', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', ctrl=True, alt=True) -kmi.properties.name = 'VIEW3D_MT_pose_apply' -kmi = km.keymap_items.new('pose.rot_clear', 'E', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.loc_clear', 'W', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.scale_clear', 'R', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.quaternions_flip', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('pose.rotation_mode_set', 'R', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('pose.copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', ctrl=True) -kmi.properties.flipped = False -kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', shift=True, ctrl=True) -kmi.properties.flipped = True -kmi = km.keymap_items.new('pose.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('pose.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('pose.select_parent', 'P', 'PRESS', shift=True) -kmi = km.keymap_items.new('pose.select_hierarchy', 'LEFT_BRACKET', 'PRESS') -kmi.properties.direction = 'PARENT' -kmi.properties.extend = False -kmi = km.keymap_items.new('pose.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'PARENT' -kmi.properties.extend = True -kmi = km.keymap_items.new('pose.select_hierarchy', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.direction = 'CHILD' -kmi.properties.extend = False -kmi = km.keymap_items.new('pose.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'CHILD' -kmi.properties.extend = True -kmi = km.keymap_items.new('pose.select_linked', 'L', 'PRESS') -kmi = km.keymap_items.new('pose.select_grouped', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('pose.select_mirror', 'F', 'PRESS', shift=True) -kmi.properties.only_active = True -kmi = km.keymap_items.new('pose.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('pose.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('pose.ik_add', 'I', 'PRESS', shift=True) -kmi = km.keymap_items.new('pose.ik_clear', 'I', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_pose_group' -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_bone_options_toggle' -kmi = km.keymap_items.new('armature.layers_show_all', 'ACCENT_GRAVE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.armature_layers', 'M', 'PRESS', shift=True) -kmi = km.keymap_items.new('pose.bone_layers', 'M', 'PRESS') -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', ctrl=True, alt=True) -kmi.properties.mode = 'BONE_SIZE' -kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'S', 'PRESS') -kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'S', 'PRESS', alt=True) -kmi = km.keymap_items.new('anim.keying_set_active_set', 'I', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('poselib.browse_interactive', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('poselib.pose_add', 'L', 'PRESS', shift=True) -kmi = km.keymap_items.new('poselib.pose_remove', 'L', 'PRESS', alt=True) -kmi = km.keymap_items.new('poselib.pose_rename', 'L', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('pose.copy', 'C', 'PRESS', oskey=True) -kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', oskey=True) -kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', shift=True, oskey=True) -kmi.properties.flipped = True - -# Map Object Mode -km = kc.keymaps.new('Object Mode', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('object.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('object.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('object.select_linked', 'L', 'PRESS', shift=True) -kmi = km.keymap_items.new('object.select_grouped', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('object.select_mirror', 'M', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS') -kmi.properties.direction = 'PARENT' -kmi.properties.extend = False -kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'PARENT' -kmi.properties.extend = True -kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.direction = 'CHILD' -kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'CHILD' -kmi.properties.extend = True -kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS') -kmi = km.keymap_items.new('object.parent_no_inverse_set', 'P', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('object.parent_clear', 'P', 'PRESS', shift=True) -kmi = km.keymap_items.new('object.track_set', 'T', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('object.track_clear', 'T', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('object.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('object.location_clear', 'W', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.rotation_clear', 'E', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.scale_clear', 'R', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.origin_clear', 'O', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.hide_view_clear', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('object.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('object.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_add' -kmi = km.keymap_items.new('object.duplicates_make_real', 'A', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', ctrl=True, alt=True) -kmi.properties.name = 'VIEW3D_MT_object_apply' -kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_make_single_user' -kmi = km.keymap_items.new('wm.call_menu', 'L', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_make_links' -kmi = km.keymap_items.new('object.duplicate_move', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('object.duplicate_move_linked', 'D', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.join', 'J', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('object.convert', 'C', 'PRESS', alt=True) -kmi = km.keymap_items.new('object.proxy_make', 'P', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('object.make_local', 'L', 'PRESS') -kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'S', 'PRESS') -kmi = km.keymap_items.new('group.create', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('group.objects_remove', 'G', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('group.objects_add_active', 'G', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('group.objects_remove_active', 'G', 'PRESS', shift=True, alt=True) -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_object_specials' -kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS') -kmi.properties.level = 0 -kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS') -kmi.properties.level = 1 -kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS') -kmi.properties.level = 2 -kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'S', 'PRESS', alt=True) - -# Map Image Paint -km = kc.keymaps.new('Image Paint', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.image_paint', 'LEFTMOUSE', 'PRESS') -kmi.properties.mode = 'NORMAL' -kmi = km.keymap_items.new('paint.image_paint', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'INVERT' -kmi = km.keymap_items.new('paint.grab_clone', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('paint.sample_color', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color' -kmi.properties.zoom_path = 'space_data.zoom' -kmi.properties.image_id = 'tool_settings.image_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color' -kmi.properties.zoom_path = 'space_data.zoom' -kmi.properties.image_id = 'tool_settings.image_paint.brush' -kmi = km.keymap_items.new('wm.context_toggle', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi.properties.data_path = 'image_paint_object.data.use_paint_mask' - -# Map Vertex Paint -km = kc.keymaps.new('Vertex Paint', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.vertex_paint', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('paint.sample_color', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('paint.vertex_color_set', 'K', 'PRESS', shift=True) -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.vertex_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.vertex_paint.brush' -kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS') -kmi.properties.data_path = 'vertex_paint_object.data.use_paint_mask' - -# Map Weight Paint -km = kc.keymaps.new('Weight Paint', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('paint.weight_paint', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('paint.weight_sample', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('paint.weight_sample_group', 'LEFTMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('paint.weight_set', 'K', 'PRESS', shift=True) -kmi = km.keymap_items.new('paint.weight_gradient', 'LEFTMOUSE', 'PRESS', alt=True, shift=True) -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.weight_paint.brush' -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.weight_paint.brush' -kmi = km.keymap_items.new('paint.weight_from_bones', 'RIGHTMOUSE', 'PRESS', ctrl=True) - -# Map Sculpt -km = kc.keymaps.new('Sculpt', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS') -kmi.properties.mode = 'NORMAL' -kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'INVERT' -kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.mode = 'SMOOTH' -kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS', shift=True) -kmi.properties.action = 'SHOW' -kmi.properties.area = 'INSIDE' -kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS') -kmi.properties.action = 'HIDE' -kmi.properties.area = 'INSIDE' -kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS', alt=True) -kmi.properties.action = 'SHOW' -kmi.properties.area = 'ALL' -kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS') -kmi.properties.level = 0 -kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS') -kmi.properties.level = 1 -kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS') -kmi.properties.level = 2 -kmi = km.keymap_items.new('object.subdivision_set', 'PAGE_UP', 'PRESS') -kmi.properties.level = 1 -kmi.properties.relative = True -kmi = km.keymap_items.new('object.subdivision_set', 'PAGE_DOWN', 'PRESS') -kmi.properties.level = -1 -kmi.properties.relative = True -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.sculpt.brush' -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.sculpt.brush' -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', ctrl=True) -kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.data_path_secondary = '' -kmi.properties.use_secondary = '' -kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.sculpt.brush' -kmi = km.keymap_items.new('paint.brush_select', 'D', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'DRAW' -kmi = km.keymap_items.new('paint.brush_select', 'S', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'SMOOTH' -kmi = km.keymap_items.new('paint.brush_select', 'P', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'PINCH' -kmi = km.keymap_items.new('paint.brush_select', 'I', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'INFLATE' -kmi = km.keymap_items.new('paint.brush_select', 'G', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'GRAB' -kmi = km.keymap_items.new('paint.brush_select', 'L', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'LAYER' -kmi = km.keymap_items.new('paint.brush_select', 'T', 'PRESS', shift=True) -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'FLATTEN' -kmi = km.keymap_items.new('paint.brush_select', 'C', 'PRESS') -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'CLAY' -kmi = km.keymap_items.new('paint.brush_select', 'C', 'PRESS', shift=True) -kmi.properties.paint_mode = 'SCULPT' -kmi.properties.sculpt_tool = 'CREASE' -kmi = km.keymap_items.new('wm.context_menu_enum', 'RIGHTMOUSE', 'PRESS') -kmi.properties.data_path = 'tool_settings.sculpt.brush.stroke_method' - -# Map Mesh -km = kc.keymaps.new('Mesh', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('mesh.loopcut_slide', 'R', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mesh.loop_select', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi.properties.ring = False -kmi = km.keymap_items.new('mesh.loop_select', 'SELECTMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = True -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi.properties.ring = False -kmi = km.keymap_items.new('mesh.edgering_select', 'RIGHTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.extend = False -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi = km.keymap_items.new('mesh.edgering_select', 'RIGHTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True) -kmi.properties.extend = True -kmi.properties.deselect = False -kmi.properties.toggle = False -kmi = km.keymap_items.new('mesh.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('mesh.select_more', 'PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('mesh.select_less', 'COMMA', 'PRESS', shift=True) -kmi = km.keymap_items.new('mesh.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('mesh.select_non_manifold', 'M', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('mesh.select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS') -kmi.properties.deselect = False -kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('mesh.faces_select_linked_flat', 'F', 'PRESS', shift=True, ctrl=True, alt=True) -kmi.properties.sharpness = 135.0 -kmi = km.keymap_items.new('mesh.select_similar', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_edit_mesh_select_mode' -kmi = km.keymap_items.new('mesh.hide', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('mesh.hide', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('mesh.reveal', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('view3d.edit_mesh_extrude_move_normal', 'X', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.rip_move', 'V', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.merge', 'M', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.edge_face_add', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('mesh.duplicate_move', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'VIEW3D_MT_mesh_add' -kmi = km.keymap_items.new('mesh.dupli_extrude_cursor', 'MIDDLEMOUSE', 'CLICK', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'BACK_SPACE', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete' -kmi = km.keymap_items.new('wm.call_menu', 'DEL', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete' -kmi = km.keymap_items.new('mesh.knife_tool', 'LEFTMOUSE', 'PRESS', key_modifier='K') -kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS') -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_specials' -kmi = km.keymap_items.new('wm.call_menu', 'F', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_faces' -kmi = km.keymap_items.new('wm.call_menu', 'E', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_edges' -kmi = km.keymap_items.new('wm.call_menu', 'V', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_mesh_vertices' -kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_uv_map' -kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_vertex_group' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True) -kmi.properties.level = 0 -kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True) -kmi.properties.level = 1 -kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True) -kmi.properties.level = 2 -kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True) -kmi.properties.level = 3 -kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True) -kmi.properties.level = 4 -kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True) -kmi.properties.level = 5 - -# Knife Tool -km = kc.keymaps.new('Knife Tool Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True) - -kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'ANY', any=True) -kmi = km.keymap_items.new_modal('ADD_CUT', 'LEFTMOUSE', 'ANY', any=True) -kmi = km.keymap_items.new_modal('PANNING', 'LEFTMOUSE', 'ANY', alt=True) -kmi = km.keymap_items.new_modal('PANNING', 'MIDDLEMOUSE', 'ANY', alt=True) -kmi = km.keymap_items.new_modal('PANNING', 'RIGHTMOUSE', 'ANY', alt=True) -kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'ANY') -kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'SPACE', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('NEW_CUT', 'E', 'PRESS') - -kmi = km.keymap_items.new_modal('SNAP_MIDPOINTS_ON', 'LEFT_CTRL', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('SNAP_MIDPOINTS_OFF', 'LEFT_CTRL', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('SNAP_MIDPOINTS_ON', 'RIGHT_CTRL', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('SNAP_MIDPOINTS_OFF', 'RIGHT_CTRL', 'RELEASE', any=True) - -kmi = km.keymap_items.new_modal('IGNORE_SNAP_ON', 'LEFT_SHIFT', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('IGNORE_SNAP_OFF', 'LEFT_SHIFT', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('IGNORE_SNAP_ON', 'RIGHT_SHIFT', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('IGNORE_SNAP_OFF', 'RIGHT_SHIFT', 'RELEASE', any=True) - -kmi = km.keymap_items.new_modal('ANGLE_SNAP_TOGGLE', 'C', 'PRESS') -kmi = km.keymap_items.new_modal('CUT_THROUGH_TOGGLE', 'Z', 'PRESS') - -# Map Curve -km = kc.keymaps.new('Curve', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'TOPBAR_MT_edit_curve_add' -kmi = km.keymap_items.new('curve.handle_type_set', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('curve.vertex_add', 'MIDDLEMOUSE', 'CLICK', ctrl=True) -kmi = km.keymap_items.new('curve.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('curve.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('curve.select_row', 'T', 'PRESS', shift=True) -kmi = km.keymap_items.new('curve.select_more', 'PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('curve.select_less', 'COMMA', 'PRESS', shift=True) -kmi = km.keymap_items.new('curve.select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('curve.select_linked_pick', 'L', 'PRESS') -kmi.properties.deselect = False -kmi = km.keymap_items.new('curve.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('curve.separate', 'P', 'PRESS', alt=True) -kmi = km.keymap_items.new('curve.extrude_move', 'X', 'PRESS', alt=True) -kmi = km.keymap_items.new('curve.duplicate_move', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('curve.make_segment', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('curve.cyclic_toggle', 'C', 'PRESS', alt=True) -kmi = km.keymap_items.new('curve.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('curve.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('curve.tilt_clear', 'T', 'PRESS', alt=True) -kmi = km.keymap_items.new('transform.tilt', 'T', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', alt=True) -kmi = km.keymap_items.new('curve.reveal', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('curve.hide', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('curve.hide', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS') -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_edit_curve_specials' -kmi = km.keymap_items.new('wm.call_menu', 'K', 'PRESS', alt=True) -kmi.properties.name = 'VIEW3D_MT_hook' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True) -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'CONNECTED' - -# Map Armature -km = kc.keymaps.new('Armature', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('armature.hide', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('armature.hide', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('armature.reveal', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('armature.align', 'A', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('armature.calculate_roll', 'N', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.switch_direction', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.parent_set', 'P', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.parent_clear', 'P', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('armature.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('armature.select_hierarchy', 'LEFT_BRACKET', 'PRESS') -kmi.properties.direction = 'PARENT' -kmi.properties.extend = False -kmi = km.keymap_items.new('armature.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'PARENT' -kmi.properties.extend = True -kmi = km.keymap_items.new('armature.select_hierarchy', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.direction = 'CHILD' -kmi.properties.extend = False -kmi = km.keymap_items.new('armature.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True) -kmi.properties.direction = 'CHILD' -kmi.properties.extend = True -kmi = km.keymap_items.new('armature.select_linked', 'L', 'PRESS') -kmi = km.keymap_items.new('armature.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('armature.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('armature.duplicate_move', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.extrude_move', 'X', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.extrude_forked', 'X', 'PRESS', shift=True, alt=True) -kmi = km.keymap_items.new('armature.click_extrude', 'MIDDLEMOUSE', 'CLICK', ctrl=True) -kmi = km.keymap_items.new('armature.fill', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.merge', 'M', 'PRESS', alt=True) -kmi = km.keymap_items.new('armature.separate', 'P', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS') -kmi.properties.name = 'VIEW3D_MT_bone_options_toggle' -kmi = km.keymap_items.new('armature.layers_show_all', 'ACCENT_GRAVE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('armature.armature_layers', 'M', 'PRESS', shift=True) -kmi = km.keymap_items.new('armature.bone_layers', 'M', 'PRESS') -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_armature_specials' - -# Map Metaball -km = kc.keymaps.new('Metaball', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('object.metaball_add', 'A', 'PRESS', shift=True) -kmi = km.keymap_items.new('mball.reveal_metaelems', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('mball.hide_metaelems', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('mball.hide_metaelems', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('mball.delete_metaelems', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('mball.delete_metaelems', 'DEL', 'PRESS') -kmi = km.keymap_items.new('mball.duplicate_metaelems', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('mball.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('mball.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True) -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'CONNECTED' - -# Map Lattice -km = kc.keymaps.new('Lattice', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('lattice.select_all', 'A', 'PRESS') -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('lattice.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS') -kmi = km.keymap_items.new('wm.call_menu', 'K', 'PRESS', alt=True) -kmi.properties.name = 'VIEW3D_MT_hook' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' - -# Map Particle -km = kc.keymaps.new('Particle', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('particle.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('particle.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('particle.select_more', 'PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('particle.select_less', 'COMMA', 'PRESS', shift=True) -kmi = km.keymap_items.new('particle.select_linked', 'L', 'PRESS') -kmi.properties.deselect = False -kmi = km.keymap_items.new('particle.select_linked', 'L', 'PRESS', shift=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('particle.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('particle.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('particle.reveal', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('particle.hide', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('particle.hide', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('particle.brush_edit', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('particle.brush_edit', 'LEFTMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.particle_edit.brush.size' -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.particle_edit.brush.strength' -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi.properties.name = 'VIEW3D_MT_particle_specials' -kmi = km.keymap_items.new('particle.weight_set', 'K', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' - -# Map Object Non-modal -km = kc.keymaps.new('Object Non-modal', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('object.mode_set', 'TAB', 'PRESS') -kmi.properties.mode = 'EDIT' -kmi.properties.toggle = True - -# TODO: Doesn't work because of invalid context check, see [#30554] -#kmi = km.keymap_items.new('object.mode_set', 'TAB', 'PRESS', ctrl=True) -#kmi.properties.mode = 'POSE' - -kmi.properties.toggle = True -kmi = km.keymap_items.new('object.mode_set', 'TAB', 'PRESS', ctrl=True) -kmi.properties.mode = 'WEIGHT_PAINT' -kmi.properties.toggle = True -kmi = km.keymap_items.new('object.origin_set', 'C', 'PRESS', shift=True, ctrl=True, alt=True) - -# Map 3D View -km = kc.keymaps.new('3D View', space_type='VIEW_3D', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('view3d.cursor3d', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('view3d.rotate', 'LEFTMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.release_confirm = True -kmi.properties.use_planar_constraint = True -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.release_confirm = True -kmi.properties.use_accurate = True -kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', any=True) -kmi.properties.release_confirm = True -kmi = km.keymap_items.new('view3d.move', 'MIDDLEMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('view3d.zoom', 'RIGHTMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('view3d.view_selected', 'F', 'PRESS') -kmi = km.keymap_items.new('view3d.view_center_cursor', 'NUMPAD_PERIOD', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('view3d.fly', 'F', 'PRESS', shift=True) -kmi = km.keymap_items.new('view3d.smoothview', 'TIMER1', 'ANY', any=True) -kmi = km.keymap_items.new('view3d.rotate', 'TRACKPADPAN', 'ANY', alt=True) -kmi = km.keymap_items.new('view3d.rotate', 'MOUSEROTATE', 'ANY') -kmi = km.keymap_items.new('view3d.move', 'TRACKPADPAN', 'ANY') -kmi = km.keymap_items.new('view3d.zoom', 'TRACKPADZOOM', 'ANY') -kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_PLUS', 'PRESS') -kmi.properties.delta = 1 -kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_MINUS', 'PRESS') -kmi.properties.delta = -1 -kmi = km.keymap_items.new('view3d.zoom', 'EQUAL', 'PRESS', ctrl=True) -kmi.properties.delta = 1 -kmi = km.keymap_items.new('view3d.zoom', 'MINUS', 'PRESS', ctrl=True) -kmi.properties.delta = -1 -kmi = km.keymap_items.new('view3d.zoom', 'WHEELINMOUSE', 'PRESS') -kmi.properties.delta = 1 -kmi = km.keymap_items.new('view3d.zoom', 'WHEELOUTMOUSE', 'PRESS') -kmi.properties.delta = -1 -kmi = km.keymap_items.new('view3d.zoom', 'WHEELINMOUSE', 'PRESS', alt=True) -kmi.properties.delta = 1 -kmi = km.keymap_items.new('view3d.zoom', 'WHEELOUTMOUSE', 'PRESS', alt=True) -kmi.properties.delta = -1 -kmi = km.keymap_items.new('view3d.view_all', 'A', 'PRESS') -kmi.properties.center = False -kmi = km.keymap_items.new('view3d.viewnumpad', 'ZERO', 'PRESS', ctrl=True) -kmi.properties.type = 'CAMERA' -kmi = km.keymap_items.new('view3d.viewnumpad', 'ONE', 'PRESS', ctrl=True) -kmi.properties.type = 'FRONT' -kmi = km.keymap_items.new('view3d.viewnumpad', 'THREE', 'PRESS', ctrl=True) -kmi.properties.type = 'LEFT' -kmi = km.keymap_items.new('view3d.view_persportho', 'SEVEN', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('view3d.viewnumpad', 'FIVE', 'PRESS', ctrl=True) -kmi.properties.type = 'TOP' -kmi = km.keymap_items.new('view3d.viewnumpad', 'TWO', 'PRESS', ctrl=True) -kmi.properties.type = 'BACK' -kmi = km.keymap_items.new('view3d.viewnumpad', 'FOUR', 'PRESS', ctrl=True) -kmi.properties.type = 'RIGHT' -kmi = km.keymap_items.new('view3d.viewnumpad', 'SIX', 'PRESS', ctrl=True) -kmi.properties.type = 'BOTTOM' -kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', ctrl=True) -kmi.properties.type = 'PANRIGHT' -kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True) -kmi.properties.type = 'PANLEFT' -kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', shift=True) -kmi.properties.type = 'PANUP' -kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', shift=True) -kmi.properties.type = 'PANDOWN' -kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.type = 'ORBITLEFT' -kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.type = 'ORBITRIGHT' -kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.type = 'ORBITUP' -kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.type = 'ORBITDOWN' -kmi = km.keymap_items.new('view3d.localview', 'I', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.context_toggle_enum', 'FOUR', 'PRESS') -kmi.properties.data_path = 'space_data.shading.type' -kmi.properties.value_1 = 'WIREFRAME' -kmi.properties.value_2 = 'WIREFRAME' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'FIVE', 'PRESS') -kmi.properties.data_path = 'space_data.shading.type' -kmi.properties.value_1 = 'TEXTURED' -kmi.properties.value_2 = 'SOLID' -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi.properties.toggle = False -kmi.properties.deselect = False -kmi.properties.center = False -kmi.properties.object = False -kmi.properties.enumerate = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = False -kmi.properties.toggle = True -kmi.properties.deselect = False -kmi.properties.center = False -kmi.properties.object = False -kmi.properties.enumerate = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', ctrl=True) -kmi.properties.center = False -kmi.properties.extend = False -kmi.properties.toggle = False -kmi.properties.deselect = True -kmi.properties.object = False -kmi.properties.enumerate = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', alt=True) -kmi.properties.enumerate = True -kmi.properties.extend = False -kmi.properties.toggle = False -kmi.properties.deselect = False -kmi.properties.center = False -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True) -kmi.properties.extend = True -kmi.properties.center = True -kmi.properties.toggle = False -kmi.properties.deselect = False -kmi.properties.object = False -kmi.properties.enumerate = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', ctrl=True, alt=True) -kmi.properties.center = True -kmi.properties.enumerate = True -kmi.properties.extend = False -kmi.properties.toggle = False -kmi.properties.deselect = False -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, alt=True) -kmi.properties.extend = True -kmi.properties.enumerate = True -kmi.properties.toggle = False -kmi.properties.deselect = False -kmi.properties.center = False -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True, alt=True) -kmi.properties.extend = True -kmi.properties.center = True -kmi.properties.enumerate = True -kmi.properties.toggle = False -kmi.properties.deselect = False -kmi.properties.object = False -kmi = km.keymap_items.new('view3d.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('view3d.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_M', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_M', 'ANY', ctrl=True) -kmi.properties.deselect = True -kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_M', 'ANY', any=True) -kmi = km.keymap_items.new('view3d.select_circle', 'Q', 'PRESS', shift=True) -# kmi = km.keymap_items.new('view3d.clip_border', 'B', 'PRESS', alt=True) -kmi = km.keymap_items.new('view3d.zoom_border', 'B', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True, ctrl=True) -kmi.properties.name = 'VIEW3D_MT_snap' -kmi = km.keymap_items.new('view3d.enable_manipulator', 'Q', 'PRESS') -kmi = km.keymap_items.new('transform.select_orientation', 'RIGHTMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('transform.create_orientation', 'SPACE', 'PRESS', ctrl=True, alt=True) -kmi.properties.use = True -kmi = km.keymap_items.new('transform.mirror', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.use_snap' -kmi = km.keymap_items.new('wm.context_set_enum', 'C', 'PRESS') -kmi.properties.data_path = 'tool_settings.snap_element' -kmi.properties.value = 'EDGE' -kmi = km.keymap_items.new('view3d.enable_manipulator', 'W', 'PRESS') -kmi.properties.translate = True -kmi = km.keymap_items.new('view3d.enable_manipulator', 'E', 'PRESS') -kmi.properties.rotate = True -kmi = km.keymap_items.new('view3d.enable_manipulator', 'R', 'PRESS') -kmi.properties.scale = True -kmi = km.keymap_items.new('wm.context_toggle_enum', 'SIX', 'PRESS') -kmi.properties.data_path = 'space_data.shading.type' -kmi.properties.value_1 = 'TEXTURED' -kmi.properties.value_2 = 'TEXTURED' -kmi = km.keymap_items.new('wm.context_set_enum', 'X', 'PRESS') -kmi.properties.data_path = 'tool_settings.snap_element' -kmi.properties.value = 'INCREMENT' -kmi = km.keymap_items.new('wm.context_set_enum', 'V', 'PRESS') -kmi.properties.data_path = 'tool_settings.snap_element' -kmi.properties.value = 'VERTEX' - -km.keymap_items.new('view3d.render_border', 'B', 'PRESS', ctrl=True) - -# Map Animation Channels -km = kc.keymaps.new('Animation Channels', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.children_only = True -kmi = km.keymap_items.new('anim.channels_rename', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('anim.channels_select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('anim.channels_select_all_toggle', 'I', 'PRESS', ctrl=True) -kmi.properties.invert = True -kmi = km.keymap_items.new('anim.channels_select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('anim.channels_select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi = km.keymap_items.new('anim.channels_delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('anim.channels_delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('anim.channels_setting_toggle', 'W', 'PRESS', shift=True) -kmi = km.keymap_items.new('anim.channels_setting_enable', 'W', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('anim.channels_setting_disable', 'W', 'PRESS', alt=True) -kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS') -kmi = km.keymap_items.new('anim.channels_expand', 'PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('anim.channels_collapse', 'COMMA', 'PRESS', shift=True) -kmi = km.keymap_items.new('anim.channels_expand', 'PERIOD', 'PRESS', ctrl=True) -kmi.properties.all = False -kmi = km.keymap_items.new('anim.channels_collapse', 'COMMA', 'PRESS', ctrl=True) -kmi.properties.all = False -kmi = km.keymap_items.new('anim.channels_move', 'PAGE_UP', 'PRESS') -kmi.properties.direction = 'UP' -kmi = km.keymap_items.new('anim.channels_move', 'PAGE_DOWN', 'PRESS') -kmi.properties.direction = 'DOWN' -kmi = km.keymap_items.new('anim.channels_move', 'PAGE_UP', 'PRESS', shift=True) -kmi.properties.direction = 'TOP' -kmi = km.keymap_items.new('anim.channels_move', 'PAGE_DOWN', 'PRESS', shift=True) -kmi.properties.direction = 'BOTTOM' - -# Map UV Editor -km = kc.keymaps.new('UV Editor', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.context_toggle', 'Q', 'PRESS') -kmi.properties.data_path = 'tool_settings.use_uv_sculpt' -kmi = km.keymap_items.new('uv.mark_seam', 'E', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('uv.select', 'SELECTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi = km.keymap_items.new('uv.select', 'SELECTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('uv.select_loop', 'LEFTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('uv.select_loop', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('uv.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi.properties.pinned = False -kmi = km.keymap_items.new('uv.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi.properties.pinned = False -kmi = km.keymap_items.new('uv.circle_select', 'Q', 'PRESS', shift=True) -kmi = km.keymap_items.new('uv.select_linked', 'L', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi = km.keymap_items.new('uv.select_linked_pick', 'L', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('uv.select_linked', 'L', 'PRESS', shift=True, ctrl=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('uv.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('uv.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('uv.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('uv.select_pinned', 'P', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi.properties.name = 'IMAGE_MT_uvs_weldalign' -kmi = km.keymap_items.new('uv.stitch', 'V', 'PRESS') -kmi = km.keymap_items.new('uv.pin', 'P', 'PRESS') -kmi.properties.clear = False -kmi = km.keymap_items.new('uv.pin', 'P', 'PRESS', alt=True) -kmi.properties.clear = True -kmi = km.keymap_items.new('uv.unwrap', 'U', 'PRESS') -kmi = km.keymap_items.new('uv.hide', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('uv.hide', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('uv.reveal', 'H', 'PRESS', shift=True) -kmi = km.keymap_items.new('uv.cursor_set', 'RIGHTMOUSE', 'PRESS', key_modifier='C') -kmi = km.keymap_items.new('uv.tile_set', 'ACTIONMOUSE', 'PRESS', shift=True, key_modifier='C') -kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True) -kmi.properties.name = 'IMAGE_MT_uvs_snap' -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS') -kmi.properties.name = 'IMAGE_MT_uvs_select_mode' -kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.proportional_edit_falloff' -kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS') -kmi.properties.data_path = 'tool_settings.proportional_edit' -kmi.properties.value_1 = 'DISABLED' -kmi.properties.value_2 = 'ENABLED' -kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_M', 'ANY') -kmi = km.keymap_items.new('transform.rotate', 'E', 'PRESS') -kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS') -kmi = km.keymap_items.new('transform.shear', 'S', 'PRESS', shift=True, ctrl=True, alt=True) -kmi = km.keymap_items.new('transform.mirror', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'PRESS', shift=True) -kmi.properties.data_path = 'tool_settings.use_snap' - -# Map Transform Modal Map -km = kc.keymaps.new('Transform Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True) - -kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'LEFTMOUSE', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('TRANSLATE', 'G', 'PRESS') -kmi = km.keymap_items.new_modal('ROTATE', 'R', 'PRESS') -kmi = km.keymap_items.new_modal('RESIZE', 'S', 'PRESS') -kmi = km.keymap_items.new_modal('SNAP_TOGGLE', 'TAB', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'LEFT_CTRL', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'LEFT_CTRL', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'RIGHT_CTRL', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'RIGHT_CTRL', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('ADD_SNAP', 'A', 'PRESS') -kmi = km.keymap_items.new_modal('REMOVE_SNAP', 'A', 'PRESS', alt=True) -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'PAGE_UP', 'PRESS') -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'PAGE_DOWN', 'PRESS') -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'WHEELDOWNMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'WHEELUPMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'PAGE_UP', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'PAGE_DOWN', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'WHEELDOWNMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'WHEELUPMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'MIDDLEMOUSE', 'RELEASE') - -# Map View3D Gesture Circle -km = kc.keymaps.new('View3D Gesture Circle', space_type='EMPTY', region_type='WINDOW', modal=True) - -kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'ANY', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS') -kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('DESELECT', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('NOP', 'MIDDLEMOUSE', 'RELEASE') -kmi = km.keymap_items.new_modal('NOP', 'LEFTMOUSE', 'RELEASE') -kmi = km.keymap_items.new_modal('SUBTRACT', 'WHEELUPMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('SUBTRACT', 'NUMPAD_MINUS', 'PRESS') -kmi = km.keymap_items.new_modal('ADD', 'WHEELDOWNMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('ADD', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new_modal('SIZE', 'TRACKPADPAN', 'ANY') - -# Map Gesture Box -km = kc.keymaps.new('Gesture Box', space_type='EMPTY', region_type='WINDOW', modal=True) - -kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'PRESS', any=True) -kmi = km.keymap_items.new_modal('BEGIN', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('DESELECT', 'LEFTMOUSE', 'RELEASE', ctrl=True) -kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('SELECT', 'RIGHTMOUSE', 'RELEASE', any=True) -kmi = km.keymap_items.new_modal('BEGIN', 'MIDDLEMOUSE', 'PRESS') -kmi = km.keymap_items.new_modal('DESELECT', 'MIDDLEMOUSE', 'RELEASE') - -# Map UV Sculpt -km = kc.keymaps.new('UV Sculpt', space_type='EMPTY', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.context_toggle', 'Q', 'PRESS') -kmi.properties.data_path = 'tool_settings.use_uv_sculpt' -kmi = km.keymap_items.new('sculpt.uv_sculpt_stroke', 'LEFTMOUSE', 'PRESS') -kmi.properties.mode = 'NORMAL' -kmi = km.keymap_items.new('sculpt.uv_sculpt_stroke', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'INVERT' -kmi = km.keymap_items.new('sculpt.uv_sculpt_stroke', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.mode = 'RELAX' -kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS') -kmi.properties.scalar = 0.8999999761581421 -kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.scalar = 1.1111111640930176 -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS') -kmi.properties.data_path_primary = 'tool_settings.uv_sculpt.brush.size' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size' -kmi.properties.rotation_path = 'tool_settings.uv_sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.uv_sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.uv_sculpt.brush' -kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True) -kmi.properties.data_path_primary = 'tool_settings.uv_sculpt.brush.strength' -kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength' -kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength' -kmi.properties.rotation_path = 'tool_settings.uv_sculpt.brush.texture_slot.angle' -kmi.properties.color_path = 'tool_settings.uv_sculpt.brush.cursor_color_add' -kmi.properties.fill_color_path = '' -kmi.properties.zoom_path = '' -kmi.properties.image_id = 'tool_settings.uv_sculpt.brush' -kmi = km.keymap_items.new('brush.uv_sculpt_tool_set', 'S', 'PRESS') -kmi.properties.tool = 'RELAX' -kmi = km.keymap_items.new('brush.uv_sculpt_tool_set', 'P', 'PRESS') -kmi.properties.tool = 'PINCH' -kmi = km.keymap_items.new('brush.uv_sculpt_tool_set', 'G', 'PRESS') -kmi.properties.tool = 'GRAB' - -# Map Graph Editor Generic -km = kc.keymaps.new('Graph Editor Generic', space_type='GRAPH_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('graph.properties', 'N', 'PRESS') -kmi = km.keymap_items.new('graph.extrapolation_type', 'RIGHTMOUSE', 'PRESS', shift=True) - -# Map Graph Editor -km = kc.keymaps.new('Graph Editor', space_type='GRAPH_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('wm.context_toggle', 'H', 'PRESS', ctrl=True) -kmi.properties.data_path = 'space_data.show_handles' -kmi = km.keymap_items.new('graph.cursor_set', 'LEFTMOUSE', 'PRESS', key_modifier='K') -kmi.properties.value = 1.1754943508222875e-38 -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi.properties.column = False -kmi.properties.curves = False -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi.properties.column = True -kmi.properties.curves = False -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi.properties.column = False -kmi.properties.curves = False -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'CLICK', shift=True, alt=True) -kmi.properties.extend = True -kmi.properties.column = True -kmi.properties.curves = False -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi.properties.extend = False -kmi.properties.column = False -kmi.properties.curves = True -kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True, alt=True) -kmi.properties.extend = True -kmi.properties.column = False -kmi.properties.curves = True -kmi = km.keymap_items.new('graph.select_leftright', 'LEFT_BRACKET', 'PRESS') -kmi.properties.mode = 'LEFT' -kmi.properties.extend = False -kmi = km.keymap_items.new('graph.select_leftright', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.mode = 'RIGHT' -kmi.properties.extend = False -kmi = km.keymap_items.new('graph.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi.properties.invert = False -kmi = km.keymap_items.new('graph.select_all_toggle', 'I', 'PRESS', ctrl=True) -kmi.properties.invert = True -kmi = km.keymap_items.new('graph.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi.properties.axis_range = False -kmi.properties.include_handles = False -kmi = km.keymap_items.new('graph.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi.properties.axis_range = False -kmi.properties.include_handles = False -kmi = km.keymap_items.new('graph.select_more', 'PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('graph.select_less', 'COMMA', 'PRESS', shift=True) -kmi = km.keymap_items.new('graph.frame_jump', 'S', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('graph.snap', 'S', 'PRESS', shift=True) -kmi = km.keymap_items.new('graph.mirror', 'M', 'PRESS', shift=True) -kmi = km.keymap_items.new('graph.handle_type', 'RIGHTMOUSE', 'PRESS') -kmi = km.keymap_items.new('graph.interpolation_type', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('graph.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('graph.duplicate_move', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.keyframe_insert', 'I', 'PRESS') -kmi = km.keymap_items.new('graph.click_insert', 'LEFTMOUSE', 'CLICK', ctrl=True) -kmi = km.keymap_items.new('graph.copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.paste', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.previewrange_set', 'P', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('graph.view_all', 'A', 'PRESS') -kmi = km.keymap_items.new('graph.view_selected', 'F', 'PRESS') -kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_M', 'ANY') -kmi = km.keymap_items.new('transform.rotate', 'E', 'PRESS') -kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS') -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('graph.copy', 'C', 'PRESS', oskey=True) -kmi = km.keymap_items.new('graph.paste', 'V', 'PRESS', oskey=True) -kmi = km.keymap_items.new('graph.select_all_toggle', 'SELECTMOUSE', 'DOUBLE_CLICK') - -# Map Image -km = kc.keymaps.new('Image', space_type='IMAGE_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('image.view_all', 'A', 'PRESS') -kmi = km.keymap_items.new('image.view_selected', 'F', 'PRESS') -kmi = km.keymap_items.new('image.view_pan', 'MIDDLEMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('image.view_pan', 'TRACKPADPAN', 'ANY') -kmi = km.keymap_items.new('image.view_all', 'NDOF_BUTTON_FIT', 'PRESS') -kmi = km.keymap_items.new('image.view_ndof', 'NDOF_BUTTON_MENU', 'ANY') -kmi = km.keymap_items.new('image.view_zoom_in', 'WHEELINMOUSE', 'PRESS') -kmi = km.keymap_items.new('image.view_zoom_out', 'WHEELOUTMOUSE', 'PRESS') -kmi = km.keymap_items.new('image.view_zoom_in', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new('image.view_zoom_out', 'NUMPAD_MINUS', 'PRESS') -kmi = km.keymap_items.new('image.view_zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('image.view_zoom', 'TRACKPADZOOM', 'ANY') -kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_8', 'PRESS', shift=True) -kmi.properties.ratio = 8.0 -kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_4', 'PRESS', shift=True) -kmi.properties.ratio = 4.0 -kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_2', 'PRESS', shift=True) -kmi.properties.ratio = 2.0 -kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_1', 'PRESS') -kmi.properties.ratio = 1.0 -kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_2', 'PRESS') -kmi.properties.ratio = 0.5 -kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_4', 'PRESS') -kmi.properties.ratio = 0.25 -kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_8', 'PRESS') -kmi.properties.ratio = 0.125 -kmi = km.keymap_items.new('image.sample', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('image.curves_point_set', 'ACTIONMOUSE', 'PRESS', ctrl=True) -kmi.properties.point = 'BLACK_POINT' -kmi = km.keymap_items.new('image.curves_point_set', 'ACTIONMOUSE', 'PRESS', shift=True) -kmi.properties.point = 'WHITE_POINT' -kmi = km.keymap_items.new('object.mode_set', 'TAB', 'PRESS') -kmi.properties.mode = 'EDIT' -kmi.properties.toggle = True -kmi = km.keymap_items.new('wm.context_set_int', 'ONE', 'PRESS') -kmi.properties.data_path = 'space_data.image.render_slots.active_index' -kmi.properties.value = 0 -kmi = km.keymap_items.new('wm.context_set_int', 'TWO', 'PRESS') -kmi.properties.data_path = 'space_data.image.render_slots.active_index' -kmi.properties.value = 1 -kmi = km.keymap_items.new('wm.context_set_int', 'THREE', 'PRESS') -kmi.properties.data_path = 'space_data.image.render_slots.active_index' -kmi.properties.value = 2 -kmi = km.keymap_items.new('wm.context_set_int', 'FOUR', 'PRESS') -kmi.properties.data_path = 'space_data.image.render_slots.active_index' -kmi.properties.value = 3 -kmi = km.keymap_items.new('wm.context_set_int', 'FIVE', 'PRESS') -kmi.properties.data_path = 'space_data.image.render_slots.active_index' -kmi.properties.value = 4 -kmi = km.keymap_items.new('wm.context_set_int', 'SIX', 'PRESS') -kmi.properties.data_path = 'space_data.image.render_slots.active_index' -kmi.properties.value = 5 -kmi = km.keymap_items.new('wm.context_set_int', 'SEVEN', 'PRESS') -kmi.properties.data_path = 'space_data.image.render_slots.active_index' -kmi.properties.value = 6 -kmi = km.keymap_items.new('wm.context_set_int', 'EIGHT', 'PRESS') -kmi.properties.data_path = 'space_data.image.render_slots.active_index' -kmi.properties.value = 7 - -# Map Node Editor -km = kc.keymaps.new('Node Editor', space_type='NODE_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('node.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi.properties.tweak = True -kmi = km.keymap_items.new('node.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi.properties.tweak = True -kmi = km.keymap_items.new('node.link', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('node.resize', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('node.links_cut', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.select_link_viewer', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('node.backimage_move', 'MIDDLEMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.backimage_zoom', 'V', 'PRESS') -kmi.properties.factor = 0.833329975605011 -kmi = km.keymap_items.new('node.backimage_zoom', 'V', 'PRESS', alt=True) -kmi.properties.factor = 1.2000000476837158 -kmi = km.keymap_items.new('node.backimage_sample', 'ACTIONMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.link_make', 'F', 'PRESS') -kmi.properties.replace = False -kmi = km.keymap_items.new('node.link_make', 'F', 'PRESS', ctrl=True) -kmi.properties.replace = True -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'NODE_MT_add' -kmi = km.keymap_items.new('node.duplicate_move', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.duplicate_move_keep_inputs', 'D', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('node.hide_toggle', 'H', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.mute_toggle', 'M', 'PRESS') -kmi = km.keymap_items.new('node.preview_toggle', 'H', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.hide_socket_toggle', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('node.view_all', 'A', 'PRESS') -kmi = km.keymap_items.new('node.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('node.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('node.delete_reconnect', 'X', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.select_all', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.select_linked_to', 'L', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.select_linked_from', 'L', 'PRESS') -kmi = km.keymap_items.new('node.select_grouped', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.select_same_type_step', 'RIGHT_BRACKET', 'PRESS', shift=True) -kmi.properties.prev = True -kmi = km.keymap_items.new('node.select_same_type_step', 'LEFT_BRACKET', 'PRESS', shift=True) -kmi.properties.prev = False -kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS') -kmi = km.keymap_items.new('node.read_viewlayers', 'R', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('node.read_fullsamplelayers', 'R', 'PRESS', shift=True) -kmi = km.keymap_items.new('node.render_changed', 'Z', 'PRESS') -kmi = km.keymap_items.new('node.translate_attach', 'W', 'PRESS') -kmi = km.keymap_items.new('node.translate_attach', 'EVT_TWEAK_A', 'ANY') -kmi = km.keymap_items.new('node.translate_attach', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.rotate', 'E', 'PRESS') -kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS') -kmi = km.keymap_items.new('node.move_detach_links', 'D', 'PRESS', alt=True) -kmi = km.keymap_items.new('node.move_detach_links', 'EVT_TWEAK_A', 'ANY', alt=True) -kmi = km.keymap_items.new('node.move_detach_links', 'EVT_TWEAK_S', 'ANY', alt=True) - -# Map File Browser Main -km = kc.keymaps.new('File Browser Main', space_type='FILE_BROWSER', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('file.execute', 'LEFTMOUSE', 'DOUBLE_CLICK') -kmi.properties.need_active = True -kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', alt=True) -kmi.properties.extend = True -kmi.properties.fill = True -kmi = km.keymap_items.new('file.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('file.refresh', 'F', 'PRESS') -kmi = km.keymap_items.new('file.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('file.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi = km.keymap_items.new('file.rename', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('file.highlight', 'MOUSEMOVE', 'ANY', any=True) -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS') -kmi.properties.increment = 1 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', shift=True) -kmi.properties.increment = 10 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', ctrl=True) -kmi.properties.increment = 100 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS') -kmi.properties.increment = -1 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', shift=True) -kmi.properties.increment = -10 -kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', ctrl=True) -kmi.properties.increment = -100 - -# Map Dopesheet -km = kc.keymaps.new('Dopesheet', space_type='DOPESHEET_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('action.clickselect', 'LEFTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi.properties.column = False -kmi = km.keymap_items.new('action.clickselect', 'LEFTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi.properties.column = True -kmi = km.keymap_items.new('action.clickselect', 'LEFTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi.properties.column = False -kmi = km.keymap_items.new('action.clickselect', 'LEFTMOUSE', 'PRESS', shift=True, alt=True) -kmi.properties.extend = True -kmi.properties.column = True -kmi = km.keymap_items.new('action.select_leftright', 'LEFT_BRACKET', 'PRESS') -kmi.properties.mode = 'LEFT' -kmi.properties.extend = False -kmi = km.keymap_items.new('action.select_leftright', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.mode = 'RIGHT' -kmi.properties.extend = False -kmi = km.keymap_items.new('action.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi.properties.invert = False -kmi = km.keymap_items.new('action.select_all_toggle', 'I', 'PRESS', ctrl=True) -kmi.properties.invert = True -kmi = km.keymap_items.new('action.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi.properties.axis_range = False -kmi = km.keymap_items.new('action.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi.properties.axis_range = False -kmi = km.keymap_items.new('action.select_more', 'PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.select_less', 'COMMA', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.select_linked', 'L', 'PRESS') -kmi = km.keymap_items.new('action.frame_jump', 'S', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('action.snap', 'S', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.mirror', 'M', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.handle_type', 'RIGHTMOUSE', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('action.interpolation_type', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.extrapolation_type', 'RIGHTMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('action.keyframe_type', 'T', 'PRESS') -kmi = km.keymap_items.new('action.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('action.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('action.duplicate_move', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.keyframe_insert', 'I', 'PRESS') -kmi = km.keymap_items.new('action.copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.paste', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.previewrange_set', 'P', 'PRESS', ctrl=True, alt=True) -kmi = km.keymap_items.new('action.view_all', 'A', 'PRESS') -kmi = km.keymap_items.new('action.view_selected', 'F', 'PRESS') -kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS') -kmi = km.keymap_items.new('transform.transform', 'W', 'PRESS') -kmi.properties.mode = 'TIME_TRANSLATE' -kmi = km.keymap_items.new('transform.transform', 'EVT_TWEAK_M', 'ANY') -kmi.properties.mode = 'TIME_TRANSLATE' -kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS') -kmi.properties.mode = 'TIME_SCALE' -kmi = km.keymap_items.new('transform.transform', 'T', 'PRESS', shift=True) -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('action.copy', 'C', 'PRESS', oskey=True) -kmi = km.keymap_items.new('action.paste', 'V', 'PRESS', oskey=True) -kmi = km.keymap_items.new('action.select_all_toggle', 'SELECTMOUSE', 'DOUBLE_CLICK') - -# Map NLA Channels -km = kc.keymaps.new('NLA Channels', space_type='NLA_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('nla.channels_click', 'LEFTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.channels_click', 'LEFTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('nla.tracks_add', 'A', 'PRESS', shift=True) -kmi.properties.above_selected = False -kmi = km.keymap_items.new('nla.tracks_add', 'A', 'PRESS', shift=True, ctrl=True) -kmi.properties.above_selected = True -kmi = km.keymap_items.new('nla.tracks_delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('nla.tracks_delete', 'DEL', 'PRESS') - -# Map NLA Editor -km = kc.keymaps.new('NLA Editor', space_type='NLA_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('nla.click_select', 'SELECTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.click_select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('nla.select_leftright', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.mode = 'CHECK' -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.select_leftright', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.mode = 'CHECK' -kmi.properties.extend = True -kmi = km.keymap_items.new('nla.select_leftright', 'LEFT_BRACKET', 'PRESS') -kmi.properties.mode = 'LEFT' -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.select_leftright', 'RIGHT_BRACKET', 'PRESS') -kmi.properties.mode = 'RIGHT' -kmi.properties.extend = False -kmi = km.keymap_items.new('nla.select_all_toggle', 'A', 'PRESS', ctrl=True) -kmi.properties.invert = False -kmi = km.keymap_items.new('nla.select_all_toggle', 'I', 'PRESS', ctrl=True) -kmi.properties.invert = True -kmi = km.keymap_items.new('nla.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi.properties.axis_range = False -kmi = km.keymap_items.new('nla.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi.properties.axis_range = False -kmi = km.keymap_items.new('nla.view_all', 'A', 'PRESS') -kmi = km.keymap_items.new('nla.view_selected', 'F', 'PRESS') -kmi = km.keymap_items.new('nla.tweakmode_enter', 'TAB', 'PRESS') -kmi = km.keymap_items.new('nla.tweakmode_exit', 'TAB', 'PRESS') -kmi = km.keymap_items.new('nla.actionclip_add', 'A', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.transition_add', 'T', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.soundclip_add', 'K', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.meta_add', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.meta_remove', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('nla.duplicate', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('nla.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('nla.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('nla.split', 'Y', 'PRESS') -kmi = km.keymap_items.new('nla.mute_toggle', 'H', 'PRESS') -kmi = km.keymap_items.new('nla.swap', 'F', 'PRESS', alt=True) -kmi = km.keymap_items.new('nla.move_up', 'PAGE_UP', 'PRESS') -kmi = km.keymap_items.new('nla.move_down', 'PAGE_DOWN', 'PRESS') -kmi = km.keymap_items.new('nla.apply_scale', 'R', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('nla.clear_scale', 'R', 'PRESS', alt=True) -kmi = km.keymap_items.new('nla.snap', 'S', 'PRESS', shift=True) -kmi = km.keymap_items.new('nla.fmodifier_add', 'M', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('transform.transform', 'W', 'PRESS') -kmi = km.keymap_items.new('transform.transform', 'EVT_TWEAK_M', 'ANY') -kmi = km.keymap_items.new('transform.transform', 'R', 'PRESS') -kmi.properties.mode = 'TIME_SCALE' -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('nla.select_all_toggle', 'LEFTMOUSE', 'DOUBLE_CLICK') - -# Map Sequencer -km = kc.keymaps.new('Sequencer', space_type='SEQUENCE_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('sequencer.properties', 'N', 'PRESS') -kmi = km.keymap_items.new('sequencer.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('sequencer.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('sequencer.cut', 'K', 'PRESS') -kmi.properties.type = 'SOFT' -kmi = km.keymap_items.new('sequencer.cut', 'K', 'PRESS', shift=True) -kmi.properties.type = 'HARD' -kmi = km.keymap_items.new('sequencer.mute', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('sequencer.mute', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('sequencer.unmute', 'H', 'PRESS', shift=True, ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('sequencer.unmute', 'H', 'PRESS', shift=True, alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('sequencer.lock', 'L', 'PRESS', shift=True) -kmi = km.keymap_items.new('sequencer.unlock', 'L', 'PRESS', shift=True, alt=True) -kmi = km.keymap_items.new('sequencer.reassign_inputs', 'R', 'PRESS') -kmi = km.keymap_items.new('sequencer.reload', 'R', 'PRESS', alt=True) -kmi = km.keymap_items.new('sequencer.reload', 'R', 'PRESS', shift=True, alt=True) -kmi.properties.adjust_length = True -kmi = km.keymap_items.new('sequencer.offset_clear', 'O', 'PRESS', alt=True) -kmi = km.keymap_items.new('sequencer.duplicate', 'D', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.delete', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('sequencer.delete', 'DEL', 'PRESS') -kmi = km.keymap_items.new('sequencer.copy', 'C', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.paste', 'V', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.images_separate', 'Y', 'PRESS') -kmi = km.keymap_items.new('sequencer.meta_toggle', 'TAB', 'PRESS') -kmi = km.keymap_items.new('sequencer.meta_make', 'G', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.meta_separate', 'G', 'PRESS', alt=True) -kmi = km.keymap_items.new('sequencer.view_all', 'A', 'PRESS') -kmi = km.keymap_items.new('sequencer.view_selected', 'F', 'PRESS') -kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_UP', 'PRESS') -kmi.properties.next = True -kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_DOWN', 'PRESS') -kmi.properties.next = False -kmi = km.keymap_items.new('sequencer.swap', 'LEFT_ARROW', 'PRESS', alt=True) -kmi.properties.side = 'LEFT' -kmi = km.keymap_items.new('sequencer.swap', 'RIGHT_ARROW', 'PRESS', alt=True) -kmi.properties.side = 'RIGHT' -kmi = km.keymap_items.new('sequencer.snap', 'S', 'PRESS', shift=True) -kmi = km.keymap_items.new('sequencer.swap_inputs', 'S', 'PRESS', alt=True) -kmi = km.keymap_items.new('sequencer.cut_multicam', 'ONE', 'PRESS') -kmi.properties.camera = 1 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'TWO', 'PRESS') -kmi.properties.camera = 2 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'THREE', 'PRESS') -kmi.properties.camera = 3 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'FOUR', 'PRESS') -kmi.properties.camera = 4 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'FIVE', 'PRESS') -kmi.properties.camera = 5 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'SIX', 'PRESS') -kmi.properties.camera = 6 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'SEVEN', 'PRESS') -kmi.properties.camera = 7 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'EIGHT', 'PRESS') -kmi.properties.camera = 8 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'NINE', 'PRESS') -kmi.properties.camera = 9 -kmi = km.keymap_items.new('sequencer.cut_multicam', 'ZERO', 'PRESS') -kmi.properties.camera = 10 -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'CLICK') -kmi.properties.extend = False -kmi.properties.linked_handle = False -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = False -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'CLICK', shift=True) -kmi.properties.extend = True -kmi.properties.linked_handle = False -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = False -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', alt=True) -kmi.properties.extend = False -kmi.properties.linked_handle = True -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = False -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'CLICK', shift=True, alt=True) -kmi.properties.extend = True -kmi.properties.linked_handle = True -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = False -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', ctrl=True) -kmi.properties.extend = False -kmi.properties.linked_handle = False -kmi.properties.left_right = 'MOUSE' -kmi.properties.linked_time = True -kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True) -kmi.properties.extend = True -kmi.properties.linked_handle = False -kmi.properties.left_right = 'NONE' -kmi.properties.linked_time = True -kmi = km.keymap_items.new('sequencer.select_more', 'PERIOD', 'PRESS', shift=True) -kmi = km.keymap_items.new('sequencer.select_less', 'COMMA', 'PRESS', shift=True) -kmi = km.keymap_items.new('sequencer.select_linked_pick', 'L', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('sequencer.select_linked_pick', 'L', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('sequencer.select_linked', 'L', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('sequencer.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('sequencer.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi = km.keymap_items.new('sequencer.select_grouped', 'G', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True) -kmi.properties.name = 'SEQUENCER_MT_add' -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', shift=True) -kmi.properties.name = 'SEQUENCER_MT_change' -kmi = km.keymap_items.new('wm.context_set_int', 'O', 'PRESS') -kmi.properties.data_path = 'scene.sequence_editor.overlay_frame' -kmi.properties.value = 0 -kmi = km.keymap_items.new('transform.seq_slide', 'W', 'PRESS') -kmi = km.keymap_items.new('transform.seq_slide', 'EVT_TWEAK_M', 'ANY') -kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS') -kmi = km.keymap_items.new('marker.add', 'M', 'PRESS') -kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True) - -# Map Clip Editor -km = kc.keymaps.new('Clip Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('clip.view_pan', 'MIDDLEMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('clip.view_pan', 'MIDDLEMOUSE', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.view_pan', 'TRACKPADPAN', 'ANY') -kmi = km.keymap_items.new('clip.view_zoom', 'RIGHTMOUSE', 'PRESS', alt=True) -kmi = km.keymap_items.new('clip.view_zoom', 'TRACKPADZOOM', 'ANY') -kmi = km.keymap_items.new('clip.view_zoom_in', 'WHEELINMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.view_zoom_out', 'WHEELOUTMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.view_zoom_in', 'NUMPAD_PLUS', 'PRESS') -kmi = km.keymap_items.new('clip.view_zoom_out', 'NUMPAD_MINUS', 'PRESS') -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS', shift=True) -kmi.properties.ratio = 8.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS', shift=True) -kmi.properties.ratio = 4.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS', shift=True) -kmi.properties.ratio = 2.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_1', 'PRESS') -kmi.properties.ratio = 1.0 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS') -kmi.properties.ratio = 0.5 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS') -kmi.properties.ratio = 0.25 -kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS') -kmi.properties.ratio = 0.125 -kmi = km.keymap_items.new('clip.view_all', 'A', 'PRESS') -kmi = km.keymap_items.new('clip.view_all', 'F', 'PRESS') -kmi.properties.fit_view = True -kmi = km.keymap_items.new('clip.view_selected', 'F', 'PRESS') -kmi = km.keymap_items.new('clip.frame_jump', 'LEFT_ARROW', 'PRESS', shift=True, ctrl=True) -kmi.properties.position = 'PATHSTART' -kmi = km.keymap_items.new('clip.frame_jump', 'RIGHT_ARROW', 'PRESS', shift=True, ctrl=True) -kmi.properties.position = 'PATHEND' -kmi = km.keymap_items.new('clip.frame_jump', 'LEFT_ARROW', 'PRESS', shift=True, alt=True) -kmi.properties.position = 'FAILEDPREV' -kmi = km.keymap_items.new('clip.frame_jump', 'RIGHT_ARROW', 'PRESS', shift=True, alt=True) -kmi.properties.position = 'PATHSTART' -kmi = km.keymap_items.new('clip.change_frame', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('clip.select_all', 'A', 'PRESS', ctrl=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('clip.select_all', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('clip.select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('clip.select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi = km.keymap_items.new('clip.select_circle', 'Q', 'PRESS', shift=True) -kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', shift=True) -kmi.properties.name = 'CLIP_MT_select_grouped' -kmi = km.keymap_items.new('clip.add_marker_slide', 'LEFTMOUSE', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('clip.delete_marker', 'DEL', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.delete_marker', 'X', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.slide_marker', 'LEFTMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.disable_markers', 'D', 'PRESS', shift=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('clip.delete_track', 'DEL', 'PRESS') -kmi = km.keymap_items.new('clip.delete_track', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('clip.lock_tracks', 'L', 'PRESS', ctrl=True) -kmi.properties.action = 'LOCK' -kmi = km.keymap_items.new('clip.lock_tracks', 'L', 'PRESS', alt=True) -kmi.properties.action = 'UNLOCK' -kmi = km.keymap_items.new('clip.hide_tracks', 'H', 'PRESS', ctrl=True) -kmi.properties.unselected = False -kmi = km.keymap_items.new('clip.hide_tracks', 'H', 'PRESS', alt=True) -kmi.properties.unselected = True -kmi = km.keymap_items.new('clip.hide_tracks_clear', 'H', 'PRESS', shift=True, ctrl=True) -kmi = km.keymap_items.new('clip.join_tracks', 'J', 'PRESS', ctrl=True) -kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True) -kmi.properties.name = 'CLIP_MT_tracking_specials' -kmi = km.keymap_items.new('wm.context_toggle', 'L', 'PRESS') -kmi.properties.data_path = 'space_data.lock_selection' -kmi = km.keymap_items.new('wm.context_toggle', 'D', 'PRESS', alt=True) -kmi.properties.data_path = 'space_data.show_disabled' -kmi = km.keymap_items.new('wm.context_toggle', 'S', 'PRESS', alt=True) -kmi.properties.data_path = 'space_data.show_marker_search' -kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS') -kmi.properties.data_path = 'space_data.use_mute_footage' -kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS') -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', alt=True) -kmi.properties.action = 'REMAINED' -kmi.properties.clear_active = False -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True) -kmi.properties.action = 'UPTO' -kmi.properties.clear_active = False -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True, alt=True) -kmi.properties.action = 'ALL' -kmi.properties.clear_active = False - -# Map Clip Graph Editor -km = kc.keymaps.new('Clip Graph Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False) - -kmi = km.keymap_items.new('clip.change_frame', 'ACTIONMOUSE', 'PRESS') -kmi = km.keymap_items.new('clip.graph_select', 'SELECTMOUSE', 'PRESS') -kmi.properties.extend = False -kmi = km.keymap_items.new('clip.graph_select', 'SELECTMOUSE', 'PRESS', shift=True) -kmi.properties.extend = True -kmi = km.keymap_items.new('clip.graph_select_all_markers', 'A', 'PRESS') -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('clip.graph_select_all_markers', 'I', 'PRESS', ctrl=True) -kmi.properties.action = 'INVERT' -kmi = km.keymap_items.new('clip.graph_select_box', 'EVT_TWEAK_S', 'ANY') -kmi.properties.extend = False -kmi = km.keymap_items.new('clip.graph_select_box', 'EVT_TWEAK_S', 'ANY', any=True) -kmi = km.keymap_items.new('clip.graph_delete_curve', 'DEL', 'PRESS') -kmi = km.keymap_items.new('clip.graph_delete_curve', 'BACK_SPACE', 'PRESS') -kmi = km.keymap_items.new('clip.graph_delete_knot', 'DEL', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.graph_delete_knot', 'X', 'PRESS', shift=True) -kmi = km.keymap_items.new('clip.graph_view_all', 'A', 'PRESS') -kmi = km.keymap_items.new('clip.graph_center_current_frame', 'F', 'PRESS') -kmi = km.keymap_items.new('wm.context_toggle', 'L', 'PRESS') -kmi.properties.data_path = 'space_data.lock_time_cursor' -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', alt=True) -kmi.properties.action = 'REMAINED' -kmi.properties.clear_active = True -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True) -kmi.properties.action = 'UPTO' -kmi.properties.clear_active = True -kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True, alt=True) -kmi.properties.action = 'ALL' -kmi.properties.clear_active = True -kmi = km.keymap_items.new('clip.graph_disable_markers', 'D', 'PRESS', shift=True) -kmi.properties.action = 'TOGGLE' -kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS') -kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY') -kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS') diff --git a/release/scripts/startup/bl_operators/object.py b/release/scripts/startup/bl_operators/object.py index fddf15155fc..72fb1849c76 100644 --- a/release/scripts/startup/bl_operators/object.py +++ b/release/scripts/startup/bl_operators/object.py @@ -870,10 +870,7 @@ class DupliOffsetFromCursor(Operator): return {'FINISHED'} -class LoadImageAsEmpty(Operator): - """Select an image file and create a new image empty with it""" - bl_idname = "object.load_image_as_empty" - bl_label = "Load Image as Empty" +class LoadImageAsEmpty: bl_options = {'REGISTER', 'UNDO'} filepath: StringProperty( @@ -896,6 +893,7 @@ class LoadImageAsEmpty(Operator): scene = context.scene space = context.space_data cursor = (space if space and space.type == 'VIEW_3D' else scene).cursor_location + try: image = bpy.data.images.load(self.filepath, check_existing=True) except RuntimeError as ex: @@ -908,18 +906,47 @@ class LoadImageAsEmpty(Operator): location=cursor, view_align=self.view_align, ) + obj = context.active_object obj.data = image obj.empty_display_size = 5.0 + self.set_settings(context, obj) return {'FINISHED'} + def set_settings(self, context, obj): + pass + + +class LoadBackgroundImage(LoadImageAsEmpty, Operator): + """Add a reference image into the background behind objects""" + bl_idname = "object.load_background_image" + bl_label = "Load Background Image" + + def set_settings(self, context, obj): + obj.empty_image_depth = "BACK" + obj.show_empty_image_backside = False + + if context.space_data.type == "VIEW_3D": + if not context.space_data.region_3d.is_perspective: + obj.show_empty_image_perspective = False + + +class LoadReferenceImage(LoadImageAsEmpty, Operator): + """Add a reference image into the scene between objects""" + bl_idname = "object.load_reference_image" + bl_label = "Load Reference Image" + + def set_settings(self, context, obj): + pass + classes = ( ClearAllRestrictRender, DupliOffsetFromCursor, IsolateTypeRender, JoinUVs, - LoadImageAsEmpty, + LoadBackgroundImage, + LoadReferenceImage, MakeDupliFace, SelectCamera, SelectHierarchy, diff --git a/release/scripts/startup/bl_operators/object_align.py b/release/scripts/startup/bl_operators/object_align.py index 60fb360480f..d4f8af1310d 100644 --- a/release/scripts/startup/bl_operators/object_align.py +++ b/release/scripts/startup/bl_operators/object_align.py @@ -66,13 +66,13 @@ def worldspace_bounds_from_object_bounds(bb_world): return (Vector((left, front, up)), Vector((right, back, down))) -def worldspace_bounds_from_object_data(scene, obj): +def worldspace_bounds_from_object_data(depsgraph, obj): matrix_world = obj.matrix_world.copy() # Initialize the variables with the last vertex - me = obj.to_mesh(scene=scene, apply_modifiers=True, settings='PREVIEW') + me = obj.to_mesh(depsgraph=depsgraph, apply_modifiers=True) verts = me.vertices val = matrix_world @ (verts[-1].co if verts else Vector((0.0, 0.0, 0.0))) @@ -127,6 +127,7 @@ def align_objects(context, relative_to, bb_quality): + depsgraph = context.depsgraph scene = context.scene space = context.space_data @@ -155,7 +156,7 @@ def align_objects(context, for obj, bb_world in objects: if bb_quality and obj.type == 'MESH': - GBB = worldspace_bounds_from_object_data(scene, obj) + GBB = worldspace_bounds_from_object_data(depsgraph, obj) else: GBB = worldspace_bounds_from_object_bounds(bb_world) @@ -219,7 +220,7 @@ def align_objects(context, bb_world = [matrix_world @ Vector(v[:]) for v in obj.bound_box] if bb_quality and obj.type == 'MESH': - GBB = worldspace_bounds_from_object_data(scene, obj) + GBB = worldspace_bounds_from_object_data(depsgraph, obj) else: GBB = worldspace_bounds_from_object_bounds(bb_world) diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py index f66c7082033..770133e2514 100644 --- a/release/scripts/startup/bl_operators/presets.py +++ b/release/scripts/startup/bl_operators/presets.py @@ -246,10 +246,8 @@ class ExecutePreset(Operator): preset_class.reset_cb(context) if ext == ".py": - import importlib.util - mod_spec = importlib.util.spec_from_file_location("__main__", filepath) try: - mod_spec.loader.exec_module(importlib.util.module_from_spec(mod_spec)) + bpy.utils.execfile(filepath) except Exception as ex: self.report({'ERROR'}, "Failed to execute the preset: " + repr(ex)) @@ -443,32 +441,6 @@ class AddPresetHairDynamics(AddPresetBase, Operator): ] -class AddPresetInteraction(AddPresetBase, Operator): - """Add or remove an Application Interaction Preset""" - bl_idname = "wm.interaction_preset_add" - bl_label = "Add Interaction Preset" - preset_menu = "USERPREF_MT_interaction_presets" - - preset_defines = [ - "user_preferences = bpy.context.user_preferences" - ] - - preset_values = [ - "user_preferences.edit.use_drag_immediately", - "user_preferences.edit.use_insertkey_xyz_to_rgb", - "user_preferences.inputs.invert_mouse_zoom", - "user_preferences.inputs.select_mouse", - "user_preferences.inputs.use_emulate_numpad", - "user_preferences.inputs.use_mouse_continuous", - "user_preferences.inputs.use_mouse_emulate_3_button", - "user_preferences.inputs.view_rotate_method", - "user_preferences.inputs.view_zoom_axis", - "user_preferences.inputs.view_zoom_method", - ] - - preset_subdir = "interaction" - - class AddPresetTrackingCamera(AddPresetBase, Operator): """Add or remove a Tracking Camera Intrinsics Preset""" bl_idname = "clip.camera_preset_add" @@ -750,7 +722,6 @@ classes = ( AddPresetCloth, AddPresetFluid, AddPresetHairDynamics, - AddPresetInteraction, AddPresetInterfaceTheme, AddPresetKeyconfig, AddPresetNodeColor, diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index f082fd308c6..8c0174d8f58 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1419,49 +1419,6 @@ class WM_OT_keyconfig_activate(Operator): return {'CANCELLED'} -class WM_OT_appconfig_default(Operator): - bl_idname = "wm.appconfig_default" - bl_label = "Default Application Configuration" - - def execute(self, context): - import os - - context.window_manager.keyconfigs.active = context.window_manager.keyconfigs.default - - filepath = os.path.join(bpy.utils.preset_paths("interaction")[0], "blender.py") - - if os.path.exists(filepath): - bpy.ops.script.execute_preset( - filepath=filepath, - menu_idname="USERPREF_MT_interaction_presets", - ) - - return {'FINISHED'} - - -class WM_OT_appconfig_activate(Operator): - bl_idname = "wm.appconfig_activate" - bl_label = "Activate Application Configuration" - - filepath: StringProperty( - subtype='FILE_PATH', - ) - - def execute(self, context): - import os - filepath = self.filepath - bpy.utils.keyconfig_set(filepath) - dirname, filename = os.path.split(filepath) - filepath = os.path.normpath(os.path.join(dirname, os.pardir, "interaction", filename)) - if os.path.exists(filepath): - bpy.ops.script.execute_preset( - filepath=filepath, - menu_idname="USERPREF_MT_interaction_presets", - ) - - return {'FINISHED'} - - class WM_OT_sysinfo(Operator): """Generate system information, saved into a text file""" @@ -1656,7 +1613,7 @@ class WM_OT_keyconfig_export(Operator): ) def execute(self, context): - from bpy_extras import keyconfig_utils + from bl_keymap_utils.io import keyconfig_export_as_data if not self.filepath: raise Exception("Filepath not set") @@ -1666,7 +1623,7 @@ class WM_OT_keyconfig_export(Operator): wm = context.window_manager - keyconfig_utils.keyconfig_export_as_data( + keyconfig_export_as_data( wm, wm.keyconfigs.active, self.filepath, @@ -2393,9 +2350,9 @@ class WM_OT_tool_set_by_name(Operator): if not self.properties.is_property_set("name"): WM_OT_toolbar._key_held = False return {'PASS_THROUGH'} - elif WM_OT_toolbar._key_held and event.value != 'RELEASE': + elif (WM_OT_toolbar._key_held == event.type) and (event.value != 'RELEASE'): return {'PASS_THROUGH'} - WM_OT_toolbar._key_held = False + WM_OT_toolbar._key_held = None return self.execute(context) @@ -2422,32 +2379,29 @@ class WM_OT_toolbar(Operator): bl_idname = "wm.toolbar" bl_label = "Toolbar" - if use_toolbar_release_hack: - _key_held = False - @classmethod def poll(cls, context): return context.space_data is not None + if use_toolbar_release_hack: + _key_held = None + def invoke(self, context, event): + WM_OT_toolbar._key_held = event.type + return self.execute(context) + def execute(self, context): - from bl_ui.space_toolsystem_common import ( - ToolSelectPanelHelper, - keymap_from_context, - ) - space_type = context.space_data.type + from bl_ui.space_toolsystem_common import ToolSelectPanelHelper + from bl_keymap_utils import keymap_from_toolbar + space_type = context.space_data.type cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type) if cls is None: return {'CANCELLED'} wm = context.window_manager - keymap = keymap_from_context(context, space_type) + keymap = keymap_from_toolbar.generate(context, space_type) def draw_menu(popover, context): - if use_toolbar_release_hack: - # Release event sets false. - WM_OT_toolbar._key_held = True - layout = popover.layout layout.operator_context = 'INVOKE_REGION_WIN' cls.draw_cls(layout, context, detect_layout=False, scale_y=1.0) @@ -2592,11 +2546,17 @@ class WM_MT_splash(Menu): text = "Blender" sub.menu("USERPREF_MT_keyconfigs", text=text) - sub = col.split(factor=0.35) - row = sub.row() - row.alignment = 'RIGHT' - row.label(text="Select With") - sub.row().prop(userpref.inputs, 'select_mouse', expand=True) + kc = wm.keyconfigs.active + kc_prefs = kc.preferences + has_select_mouse = hasattr(kc_prefs, "select_mouse") + if has_select_mouse: + sub = col.split(factor=0.35) + row = sub.row() + row.alignment = 'RIGHT' + row.label(text="Select With") + sub.row().prop(kc_prefs, 'select_mouse', expand=True) + has_select_mouse = True + col.separator() @@ -2617,7 +2577,9 @@ class WM_MT_splash(Menu): #userpref = context.user_preferences #sub.prop(userpref.system, "language", text="") - col.label() + # Keep height constant + if not has_select_mouse: + col.label() layout.label() @@ -2747,8 +2709,6 @@ classes = ( WM_OT_addon_remove, WM_OT_addon_userpref_show, WM_OT_app_template_install, - WM_OT_appconfig_activate, - WM_OT_appconfig_default, WM_OT_context_collection_boolean_set, WM_OT_context_cycle_array, WM_OT_context_cycle_enum, diff --git a/release/scripts/startup/bl_ui/properties_data_empty.py b/release/scripts/startup/bl_ui/properties_data_empty.py index f3a176a52fc..d72089c8a9a 100644 --- a/release/scripts/startup/bl_ui/properties_data_empty.py +++ b/release/scripts/startup/bl_ui/properties_data_empty.py @@ -54,9 +54,11 @@ class DATA_PT_empty(DataButtonsPanel, Panel): col.prop(ob, "empty_image_offset", text="Offset X", index=0) col.prop(ob, "empty_image_offset", text="Y", index=1) - layout.prop(ob, "empty_image_depth", text="Depth", expand=True) - layout.prop(ob, "show_empty_image_orthographic", text="Display Orthographic") - layout.prop(ob, "show_empty_image_perspective", text="Display Perspective") + col = layout.column() + col.row().prop(ob, "empty_image_depth", text="Depth", expand=True) + col.prop(ob, "show_empty_image_orthographic", text="Display Orthographic") + col.prop(ob, "show_empty_image_perspective", text="Display Perspective") + col.prop(ob, "show_empty_image_backside", text="Display Backside") classes = ( diff --git a/release/scripts/startup/bl_ui/properties_data_lightprobe.py b/release/scripts/startup/bl_ui/properties_data_lightprobe.py index 2ca7e1723b6..20ac2d52ad9 100644 --- a/release/scripts/startup/bl_ui/properties_data_lightprobe.py +++ b/release/scripts/startup/bl_ui/properties_data_lightprobe.py @@ -77,6 +77,7 @@ class DATA_PT_lightprobe(DataButtonsPanel, Panel): elif probe.type == 'PLANAR': col = layout.column() col.prop(probe, "influence_distance", text="Distance") + col.prop(probe, "falloff") else: col = layout.column() col.prop(probe, "influence_type") @@ -91,7 +92,10 @@ class DATA_PT_lightprobe(DataButtonsPanel, Panel): col = layout.column() sub = col.column() - sub.prop(probe, "clip_start", text="Clipping Start") + if probe.type != 'PLANAR': + sub.prop(probe, "clip_start", text="Clipping Start") + else: + sub.prop(probe, "clip_start", text="Clipping Offset") if probe.type != 'PLANAR': sub.prop(probe, "clip_end", text="End") diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py index 172fe07eab3..82685e15913 100644 --- a/release/scripts/startup/bl_ui/properties_data_modifier.py +++ b/release/scripts/startup/bl_ui/properties_data_modifier.py @@ -569,24 +569,59 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): layout.operator("object.meshdeform_bind", text="Bind") def MIRROR(self, layout, ob, md): - split = layout.split(factor=0.25) + axis_text = "XYZ" + split = layout.split(factor=0.33) col = split.column() col.label(text="Axis:") - col.prop(md, "use_x") - col.prop(md, "use_y") - col.prop(md, "use_z") + for i, text in enumerate(axis_text): + col.prop(md, "use_axis", text=text, index=i) col = split.column() - col.label(text="Options:") - col.prop(md, "use_mirror_merge", text="Merge") - col.prop(md, "use_clip", text="Clipping") - col.prop(md, "use_mirror_vertex_groups", text="Vertex Groups") + col.label(text="Bisect:") + for i, text in enumerate(axis_text): + colsub = col.column() + colsub.prop(md, "use_bisect_axis", text=text, index=i) + colsub.active = md.use_axis[i] col = split.column() + col.label(text="Flip:") + for i, text in enumerate(axis_text): + colsub = col.column() + colsub.prop(md, "use_bisect_flip_axis", text=text, index=i) + colsub.active = md.use_axis[i] and md.use_bisect_axis[i] + + layout.separator() + + col = layout.column() + col.label(text="Mirror Object:") + col.prop(md, "mirror_object", text="") + + layout.separator() + + col = layout.column() + col.label(text="Options:") + + row = layout.row() + row.prop(md, "use_mirror_vertex_groups", text="Vertex Groups") + row.prop(md, "use_clip", text="Clipping") + row = layout.row() + row.prop(md, "use_mirror_merge", text="Merge") + + col = layout.column() + if md.use_mirror_merge is True: + col.prop(md, "merge_threshold") + + layout.separator() + col = layout.column() + + + flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False) + col.label(text="Textures:") - col.prop(md, "use_mirror_u", text="Flip U") - col.prop(md, "use_mirror_v", text="Flip V") + row = layout.row() + row.prop(md, "use_mirror_u", text="Flip U") + row.prop(md, "use_mirror_v", text="Flip V") col = layout.column(align=True) @@ -600,12 +635,6 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): col.prop(md, "offset_u") col.prop(md, "offset_v") - col = layout.column() - - if md.use_mirror_merge is True: - col.prop(md, "merge_threshold") - col.label(text="Mirror Object:") - col.prop(md, "mirror_object", text="") def MULTIRES(self, layout, ob, md): layout.row().prop(md, "subdivision_type", expand=True) diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py index ff92b3731c3..296e05a709d 100644 --- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py +++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py @@ -140,7 +140,7 @@ class AnnotationDrawingToolsPanel: layout.separator() col = layout.column(align=True) - col.prop(gpd, "use_stroke_edit_mode", text="Enable Editing", icon='EDIT', toggle=True) + col.prop(gpd, "use_stroke_edit_mode", text="Enable Editing", toggle=True) # was: icon='EDIT' class GreasePencilStrokeEditPanel: @@ -573,7 +573,7 @@ class GPENCIL_MT_pie_sculpt(Menu): col = pie.column() # col.label(text="Tool:") col.prop(settings, "sculpt_tool", text="") - col.operator("gpencil.brush_paint", text="Sculpt", icon='SCULPTMODE_HLT') + col.operator("gpencil.sculpt_paint", text="Sculpt", icon='SCULPTMODE_HLT') # E - Common Settings col = pie.column(align=True) diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py index 18be337c204..026b306b49e 100644 --- a/release/scripts/startup/bl_ui/properties_render.py +++ b/release/scripts/startup/bl_ui/properties_render.py @@ -262,7 +262,7 @@ class RENDER_PT_eevee_volumetric(RenderButtonsPanel, Panel): col = layout.column() col.prop(props, "volumetric_tile_size") col.prop(props, "volumetric_samples") - col.prop(props, "volumetric_sample_distribution") + col.prop(props, "volumetric_sample_distribution", text="Distribution") class RENDER_PT_eevee_volumetric_lighting(RenderButtonsPanel, Panel): diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py index 50cf4bf9c0d..5870d344a7d 100644 --- a/release/scripts/startup/bl_ui/space_clip.py +++ b/release/scripts/startup/bl_ui/space_clip.py @@ -689,6 +689,7 @@ class CLIP_PT_tools_object(CLIP_PT_reconstruction_panel, Panel): class CLIP_PT_objects(CLIP_PT_clip_view_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_label = "Objects" bl_options = {'DEFAULT_CLOSED'} @@ -711,6 +712,7 @@ class CLIP_PT_objects(CLIP_PT_clip_view_panel, Panel): class CLIP_PT_track(CLIP_PT_tracking_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_label = "Track" def draw(self, context): @@ -775,6 +777,7 @@ class CLIP_PT_track(CLIP_PT_tracking_panel, Panel): class CLIP_PT_plane_track(CLIP_PT_tracking_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_label = "Plane Track" bl_options = {'DEFAULT_CLOSED'} @@ -802,6 +805,7 @@ class CLIP_PT_plane_track(CLIP_PT_tracking_panel, Panel): class CLIP_PT_track_settings(CLIP_PT_tracking_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_label = "Tracking Settings" bl_options = {'DEFAULT_CLOSED'} @@ -826,6 +830,7 @@ class CLIP_PT_track_settings(CLIP_PT_tracking_panel, Panel): class CLIP_PT_track_settings_extras(CLIP_PT_tracking_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_label = "Tracking Settings Extras" bl_parent_id = 'CLIP_PT_track_settings' bl_options = {'DEFAULT_CLOSED'} @@ -852,6 +857,7 @@ class CLIP_PT_track_settings_extras(CLIP_PT_tracking_panel, Panel): class CLIP_PT_tracking_camera(Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_label = "Camera" bl_options = {'DEFAULT_CLOSED'} @@ -887,6 +893,7 @@ class CLIP_PT_tracking_camera(Panel): class CLIP_PT_tracking_lens(Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_label = "Lens" bl_options = {'DEFAULT_CLOSED'} @@ -932,6 +939,7 @@ class CLIP_PT_tracking_lens(Panel): class CLIP_PT_marker(CLIP_PT_tracking_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_label = "Marker" bl_options = {'DEFAULT_CLOSED'} @@ -1054,6 +1062,7 @@ class CLIP_PT_stabilization(CLIP_PT_reconstruction_panel, Panel): class CLIP_PT_proxy(CLIP_PT_clip_view_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Footage" bl_label = "Proxy/Timecode" bl_options = {'DEFAULT_CLOSED'} @@ -1127,31 +1136,37 @@ from .properties_mask_common import ( class CLIP_PT_mask_layers(MASK_PT_layers, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Mask" class CLIP_PT_mask_display(MASK_PT_display, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'HEADER' + bl_category = "Mask" class CLIP_PT_active_mask_spline(MASK_PT_spline, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Mask" class CLIP_PT_active_mask_point(MASK_PT_point, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Mask" class CLIP_PT_mask(MASK_PT_mask, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Mask" class CLIP_PT_tools_mask_transforms(MASK_PT_transforms, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'TOOLS' + bl_category = "Mask" # --- end mask --- @@ -1160,6 +1175,7 @@ class CLIP_PT_tools_mask_transforms(MASK_PT_transforms, Panel): class CLIP_PT_footage(CLIP_PT_clip_view_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Footage" bl_label = "Footage Settings" bl_options = {'DEFAULT_CLOSED'} @@ -1203,6 +1219,7 @@ class CLIP_PT_tools_scenesetup(Panel): class CLIP_PT_grease_pencil(AnnotationDataPanel, CLIP_PT_clip_view_panel, Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'UI' + bl_category = "Track" bl_options = {'DEFAULT_CLOSED'} # NOTE: this is just a wrapper around the generic GP Panel diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py index b3daba47a13..836e15ef07b 100644 --- a/release/scripts/startup/bl_ui/space_image.py +++ b/release/scripts/startup/bl_ui/space_image.py @@ -653,26 +653,31 @@ from .properties_mask_common import ( class IMAGE_PT_mask(MASK_PT_mask, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" class IMAGE_PT_mask_layers(MASK_PT_layers, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" class IMAGE_PT_mask_display(MASK_PT_display, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" class IMAGE_PT_active_mask_spline(MASK_PT_spline, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" class IMAGE_PT_active_mask_point(MASK_PT_point, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" # --- end mask --- @@ -681,6 +686,7 @@ class IMAGE_PT_active_mask_point(MASK_PT_point, Panel): class IMAGE_PT_image_properties(Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" bl_label = "Image" @classmethod @@ -802,6 +808,7 @@ class IMAGE_UL_render_slots(UIList): class IMAGE_PT_render_slots(Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" bl_label = "Render Slots" @classmethod @@ -1187,6 +1194,7 @@ class ImageScopesPanel: class IMAGE_PT_view_scopes(ImageScopesPanel, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" bl_label = "Scopes" def draw(self, layout): @@ -1196,6 +1204,7 @@ class IMAGE_PT_view_scopes(ImageScopesPanel, Panel): class IMAGE_PT_view_histogram(ImageScopesPanel, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" bl_label = "Histogram" bl_parent_id = 'IMAGE_PT_view_scopes' @@ -1215,6 +1224,7 @@ class IMAGE_PT_view_histogram(ImageScopesPanel, Panel): class IMAGE_PT_view_waveform(ImageScopesPanel, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" bl_label = "Waveform" bl_parent_id = 'IMAGE_PT_view_scopes' bl_options = {'DEFAULT_CLOSED'} @@ -1233,6 +1243,7 @@ class IMAGE_PT_view_waveform(ImageScopesPanel, Panel): class IMAGE_PT_view_vectorscope(ImageScopesPanel, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" bl_label = "Vectorscope" bl_parent_id = 'IMAGE_PT_view_scopes' bl_options = {'DEFAULT_CLOSED'} @@ -1248,6 +1259,7 @@ class IMAGE_PT_view_vectorscope(ImageScopesPanel, Panel): class IMAGE_PT_sample_line(ImageScopesPanel, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" bl_label = "Sample Line" bl_parent_id = 'IMAGE_PT_view_scopes' bl_options = {'DEFAULT_CLOSED'} @@ -1269,6 +1281,7 @@ class IMAGE_PT_sample_line(ImageScopesPanel, Panel): class IMAGE_PT_scope_sample(ImageScopesPanel, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" bl_label = "Samples" bl_parent_id = 'IMAGE_PT_view_scopes' bl_options = {'DEFAULT_CLOSED'} @@ -1292,6 +1305,7 @@ class IMAGE_PT_scope_sample(ImageScopesPanel, Panel): class IMAGE_PT_grease_pencil(AnnotationDataPanel, Panel): bl_space_type = 'IMAGE_EDITOR' bl_region_type = 'UI' + bl_category = "Image" # NOTE: this is just a wrapper around the generic GP Panel. diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py index 829ccd706b9..49c55410f53 100644 --- a/release/scripts/startup/bl_ui/space_info.py +++ b/release/scripts/startup/bl_ui/space_info.py @@ -43,8 +43,15 @@ class INFO_MT_area(Menu): layout.operator("screen.region_quadview") layout.separator() + layout.operator("screen.area_split", text="Horizontal Split").direction = 'HORIZONTAL' + layout.operator("screen.area_split", text="Vertical Split").direction = 'VERTICAL' + + layout.separator() + layout.operator("screen.area_dupli", icon='DUPLICATE') + layout.separator() + layout.operator("screen.screen_full_area") layout.operator("screen.screen_full_area", text="Toggle Fullscreen Area", icon='FULLSCREEN_ENTER').use_hide_panels = True diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py index 26b52617616..a15bb24d100 100644 --- a/release/scripts/startup/bl_ui/space_node.py +++ b/release/scripts/startup/bl_ui/space_node.py @@ -180,9 +180,11 @@ class NODE_MT_add(bpy.types.Menu): layout = self.layout layout.operator_context = 'INVOKE_DEFAULT' - props = layout.operator("node.add_search", text="Search ...") + props = layout.operator("node.add_search", text="Search...", icon="VIEWZOOM") props.use_transform = True + layout.separator() + # actual node submenus are defined by draw functions from node categories nodeitems_utils.draw_node_categories_menu(self, context) @@ -358,6 +360,7 @@ class NODE_MT_specials(Menu): class NODE_PT_active_node_generic(Panel): bl_space_type = 'NODE_EDITOR' bl_region_type = 'UI' + bl_category = "Node" bl_label = "Node" @classmethod @@ -375,6 +378,7 @@ class NODE_PT_active_node_generic(Panel): class NODE_PT_active_node_color(Panel): bl_space_type = 'NODE_EDITOR' bl_region_type = 'UI' + bl_category = "Node" bl_label = "Color" bl_options = {'DEFAULT_CLOSED'} bl_parent_id = 'NODE_PT_active_node_generic' @@ -404,6 +408,7 @@ class NODE_PT_active_node_color(Panel): class NODE_PT_active_node_properties(Panel): bl_space_type = 'NODE_EDITOR' bl_region_type = 'UI' + bl_category = "Node" bl_label = "Properties" bl_options = {'DEFAULT_CLOSED'} bl_parent_id = 'NODE_PT_active_node_generic' @@ -437,6 +442,7 @@ class NODE_PT_active_node_properties(Panel): class NODE_PT_backdrop(Panel): bl_space_type = 'NODE_EDITOR' bl_region_type = 'UI' + bl_category = "Node" bl_label = "Backdrop" @classmethod @@ -471,6 +477,7 @@ class NODE_PT_backdrop(Panel): class NODE_PT_quality(bpy.types.Panel): bl_space_type = 'NODE_EDITOR' bl_region_type = 'UI' + bl_category = "Node" bl_label = "Performance" @classmethod @@ -524,6 +531,7 @@ class NODE_UL_interface_sockets(bpy.types.UIList): class NODE_PT_grease_pencil(AnnotationDataPanel, Panel): bl_space_type = 'NODE_EDITOR' bl_region_type = 'UI' + bl_category = "Node" bl_options = {'DEFAULT_CLOSED'} # NOTE: this is just a wrapper around the generic GP Panel @@ -537,6 +545,7 @@ class NODE_PT_grease_pencil(AnnotationDataPanel, Panel): class NODE_PT_grease_pencil_tools(GreasePencilToolsPanel, Panel): bl_space_type = 'NODE_EDITOR' bl_region_type = 'UI' + bl_category = "Node" bl_options = {'DEFAULT_CLOSED'} # NOTE: this is just a wrapper around the generic GP tools panel diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 402913ab642..46b0e26cda2 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -476,14 +476,14 @@ class SEQUENCER_MT_strip_lock_mute(Menu): def draw(self, context): layout = self.layout - layout.operator("sequencer.lock", icon='LOCK') + layout.operator("sequencer.lock", icon='LOCKED') layout.operator("sequencer.unlock") layout.separator() layout.operator("sequencer.mute").unselected = False layout.operator("sequencer.unmute").unselected = False - layout.operator("sequencer.mute", text="Mute Deselected Strips").unselected = True + layout.operator("sequencer.mute", text="Mute Unselected Strips").unselected = True class SEQUENCER_MT_strip(Menu): @@ -1185,6 +1185,7 @@ class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel): bl_label = "Scene Preview/Render" bl_space_type = 'SEQUENCE_EDITOR' bl_region_type = 'UI' + bl_category = "Strip" def draw(self, context): layout = self.layout @@ -1203,6 +1204,7 @@ class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel): class SEQUENCER_PT_view(SequencerButtonsPanel_Output, Panel): bl_label = "View Settings" + bl_category = "Strip" def draw(self, context): layout = self.layout @@ -1224,6 +1226,7 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output, Panel): class SEQUENCER_PT_view_safe_areas(SequencerButtonsPanel_Output, Panel): bl_label = "Safe Areas" + bl_category = "Strip" bl_options = {'DEFAULT_CLOSED'} @classmethod @@ -1326,6 +1329,7 @@ class SEQUENCER_PT_modifiers(SequencerButtonsPanel, Panel): class SEQUENCER_PT_grease_pencil(AnnotationDataPanel, SequencerButtonsPanel_Output, Panel): bl_space_type = 'SEQUENCE_EDITOR' bl_region_type = 'UI' + bl_category = "Strip" # NOTE: this is just a wrapper around the generic GP Panel # But, it should only show up when there are images in the preview region @@ -1334,6 +1338,7 @@ class SEQUENCER_PT_grease_pencil(AnnotationDataPanel, SequencerButtonsPanel_Outp class SEQUENCER_PT_grease_pencil_tools(GreasePencilToolsPanel, SequencerButtonsPanel_Output, Panel): bl_space_type = 'SEQUENCE_EDITOR' bl_region_type = 'UI' + bl_category = "Strip" # NOTE: this is just a wrapper around the generic GP tools panel # It contains access to some essential tools usually found only in diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py index 9ef165a36a6..12ba1c31cd5 100644 --- a/release/scripts/startup/bl_ui/space_text.py +++ b/release/scripts/startup/bl_ui/space_text.py @@ -111,6 +111,7 @@ class TEXT_MT_editor_menus(Menu): class TEXT_PT_properties(Panel): bl_space_type = 'TEXT_EDITOR' bl_region_type = 'UI' + bl_category = "Text" bl_label = "Properties" def draw(self, context): @@ -142,6 +143,7 @@ class TEXT_PT_properties(Panel): class TEXT_PT_find(Panel): bl_space_type = 'TEXT_EDITOR' bl_region_type = 'UI' + bl_category = "Text" bl_label = "Find" def draw(self, context): diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py index e06224b8924..2ff5c9692ec 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_common.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py @@ -29,7 +29,6 @@ __all__ = ( "activate_by_name_or_cycle", "description_from_name", "keymap_from_name", - "keymap_from_context", ) # Support reloading icons. @@ -49,8 +48,8 @@ def _keymap_fn_from_seq(keymap_data): def keymap_fn(km): if keymap_fn.keymap_data: - from bpy_extras.keyconfig_utils import keymap_items_from_data - keymap_items_from_data(km, keymap_fn.keymap_data) + from bl_keymap_utils.io import keymap_init_from_data + keymap_init_from_data(km, keymap_fn.keymap_data) keymap_fn.keymap_data = keymap_data return keymap_fn @@ -307,7 +306,7 @@ class ToolSelectPanelHelper: if km is None: km = kc.keymaps.new(km_idname, space_type=cls.bl_space_type, region_type='WINDOW', tool=True) keymap_fn[0](km) - keymap_fn[0] = km + keymap_fn[0] = km.name # Special internal function, gives use items that contain keymaps. @staticmethod @@ -355,9 +354,9 @@ class ToolSelectPanelHelper: for context_mode_test, tools in cls.tools_all(): if context_mode_test == context_mode: for item in cls._tools_flatten_with_keymap(tools): - km = item.keymap[0] + km_name = item.keymap[0] # print((km.name, cls.bl_space_type, 'WINDOW', [])) - yield (km.name, cls.bl_space_type, 'WINDOW', []) + yield (km_name, cls.bl_space_type, 'WINDOW', []) # ------------------------------------------------------------------------- # Layout Generators @@ -605,7 +604,7 @@ def _activate_by_item(context, space_type, item, index): tool = ToolSelectPanelHelper._tool_active_from_context(context, space_type, create=True) tool.setup( name=item.text, - keymap=item.keymap[0].name if item.keymap is not None else "", + keymap=item.keymap[0] if item.keymap is not None else "", cursor=item.cursor or 'DEFAULT', gizmo_group=item.widget or "", data_block=item.data_block or "", @@ -688,7 +687,14 @@ def description_from_name(context, space_type, text, *, use_operator=True): if operator is None: if item.keymap is not None: - operator = item.keymap[0].keymap_items[0].idname + wm = context.window_manager + keyconf = wm.keyconfigs.active + km = keyconf.keymaps.get(item.keymap[0]) + if km is not None: + for kmi in km.keymap_items: + if kmi.active: + operator = kmi.idname + break if operator is not None: import _bpy @@ -709,325 +715,6 @@ def keymap_from_name(context, space_type, text): return "" -def keymap_from_context(context, space_type): - """ - Keymap for popup toolbar, currently generated each time. - """ - - def modifier_keywords_from_item(kmi): - kw = {} - for (attr, default) in ( - ("any", False), - ("shift", False), - ("ctrl", False), - ("alt", False), - ("oskey", False), - ("key_modifier", 'NONE'), - ): - val = getattr(kmi, attr) - if val != default: - kw[attr] = val - return kw - - def dict_as_tuple(d): - return tuple((k, v) for (k, v) in sorted(d.items())) - - use_simple_keymap = False - - # Press the toolbar popup key again to set the default tool, - # this is useful because the cursor tool is useful as a way - # to 'drop' currently active tools (it's basically a 'none' tool). - # so this allows us to quickly go back to a state that allows - # a shortcut based workflow (before the tool system was added). - use_tap_reset = True - # TODO: support other tools for modes which don't use the cursor. - tap_reset_tool = "Cursor" - # Check the tool is available in the current context. - if ToolSelectPanelHelper._tool_get_by_name(context, space_type, tap_reset_tool)[1] is None: - use_tap_reset = False - - from bl_operators.wm import use_toolbar_release_hack - - # Pie-menu style release to activate. - use_release_confirm = True - - # Generate items when no keys are mapped. - use_auto_keymap = True - - # Temporary, only create so we can pass 'properties' to find_item_from_operator. - use_hack_properties = True - - km_name = "Toolbar Popup" - wm = context.window_manager - keyconf = wm.keyconfigs.active - keymap = keyconf.keymaps.get(km_name) - if keymap is None: - keymap = keyconf.keymaps.new(km_name, space_type='EMPTY', region_type='TEMPORARY', tool=True) - for kmi in keymap.keymap_items: - keymap.keymap_items.remove(kmi) - - kmi_unique_args = set() - - cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type) - - items_all = [ - # 0: tool - # 1: keymap item (direct access) - # 2: keymap item (newly calculated for toolbar) - [item, None, None] - for item in ToolSelectPanelHelper._tools_flatten(cls.tools_from_context(context)) - if item is not None - ] - - if use_hack_properties: - kmi_hack = keymap.keymap_items.new("wm.tool_set_by_name", 'A', 'PRESS') - kmi_hack_properties = kmi_hack.properties - - kmi_hack_brush_select = keymap.keymap_items.new("paint.brush_select", 'A', 'PRESS') - kmi_hack_brush_select_properties = kmi_hack_brush_select.properties - - if use_release_confirm or use_tap_reset: - kmi_toolbar = wm.keyconfigs.find_item_from_operator(idname="wm.toolbar")[1] - kmi_toolbar_type = None if not kmi_toolbar else kmi_toolbar.type - if use_tap_reset and kmi_toolbar_type is not None: - kmi_toolbar_args = { - "type": kmi_toolbar_type, - **modifier_keywords_from_item(kmi_toolbar), - } - else: - use_tap_reset = False - del kmi_toolbar - - if use_tap_reset: - kmi_found = None - if use_hack_properties: - # First check for direct assignment, if this tool already has a key, no need to add a new one. - kmi_hack_properties.name = tap_reset_tool - kmi_found = wm.keyconfigs.find_item_from_operator( - idname="wm.tool_set_by_name", - context='INVOKE_REGION_WIN', - # properties={"name": item.text}, - properties=kmi_hack_properties, - )[1] - if kmi_found: - use_tap_reset = False - del kmi_found - - if use_tap_reset: - kmi_toolbar_tuple = dict_as_tuple(kmi_toolbar_args) - if kmi_toolbar_tuple not in kmi_unique_args: - kmi = keymap.keymap_items.new( - "wm.tool_set_by_name", - value='PRESS' if use_toolbar_release_hack else 'DOUBLE_CLICK', - **kmi_toolbar_args, - ) - kmi.properties.name = tap_reset_tool - kmi_unique_args.add(kmi_toolbar_tuple) - del kmi_toolbar_tuple - - if use_simple_keymap: - # Simply assign a key from A-Z. - for i, (item, _, _) in enumerate(items_all): - key = chr(ord('A') + i) - kmi = keymap.keymap_items.new("wm.tool_set_by_name", key, 'PRESS') - kmi.properties.name = item.text - else: - for item_container in items_all: - item = item_container[0] - # Only check the first item in the tools key-map (a little arbitrary). - - if use_hack_properties: - # First check for direct assignment. - kmi_hack_properties.name = item.text - kmi_found = wm.keyconfigs.find_item_from_operator( - idname="wm.tool_set_by_name", - context='INVOKE_REGION_WIN', - # properties={"name": item.text}, - properties=kmi_hack_properties, - )[1] - - if kmi_found is None: - if item.data_block: - # PAINT_OT_brush_select - mode = context.active_object.mode - # See: BKE_paint_get_tool_prop_id_from_paintmode - attr = { - 'SCULPT': "sculpt_tool", - 'VERTEX_PAINT': "vertex_tool", - 'WEIGHT_PAINT': "weight_tool", - 'TEXTURE_PAINT': "image_tool", - 'GPENCIL_PAINT': "gpencil_tool", - }.get(mode, None) - if attr is not None: - setattr(kmi_hack_brush_select_properties, attr, item.data_block) - kmi_found = wm.keyconfigs.find_item_from_operator( - idname="paint.brush_select", - context='INVOKE_REGION_WIN', - properties=kmi_hack_brush_select_properties, - )[1] - else: - print("Unsupported mode:", mode) - del mode, attr - - else: - kmi_found = None - - if kmi_found is not None: - pass - elif item.operator is not None: - kmi_found = wm.keyconfigs.find_item_from_operator( - idname=item.operator, - context='INVOKE_REGION_WIN', - )[1] - elif item.keymap is not None: - kmi_first = item.keymap[0].keymap_items[0] - kmi_found = wm.keyconfigs.find_item_from_operator( - idname=kmi_first.idname, - # properties=kmi_first.properties, # prevents matches, don't use. - context='INVOKE_REGION_WIN', - )[1] - del kmi_first - else: - kmi_found = None - item_container[1] = kmi_found - - # More complex multi-pass test. - for item_container in items_all: - item, kmi_found = item_container[:2] - if kmi_found is None: - continue - kmi_found_type = kmi_found.type - - # Only for single keys. - if ( - (len(kmi_found_type) == 1) or - # When a tool is being activated instead of running an operator, just copy the shortcut. - (kmi_found.idname in {"wm.tool_set_by_name", "WM_OT_tool_set_by_name"}) - ): - kmi_args = {"type": kmi_found_type, **modifier_keywords_from_item(kmi_found)} - kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args) - kmi.properties.name = item.text - item_container[2] = kmi - if use_auto_keymap: - kmi_unique_args.add(dict_as_tuple(kmi_args)) - - # Test for key_modifier, where alpha key is used as a 'key_modifier' - # (grease pencil holding 'D' for example). - for item_container in items_all: - item, kmi_found, kmi_exist = item_container - if kmi_found is None or kmi_exist: - continue - - kmi_found_type = kmi_found.type - if kmi_found_type in { - 'LEFTMOUSE', - 'RIGHTMOUSE', - 'MIDDLEMOUSE', - 'BUTTON4MOUSE', - 'BUTTON5MOUSE', - 'BUTTON6MOUSE', - 'BUTTON7MOUSE', - 'ACTIONMOUSE', - 'SELECTMOUSE', - }: - kmi_found_type = kmi_found.key_modifier - # excludes 'NONE' - if len(kmi_found_type) == 1: - kmi_args = {"type": kmi_found_type, **modifier_keywords_from_item(kmi_found)} - del kmi_args["key_modifier"] - kmi_tuple = dict_as_tuple(kmi_args) - if kmi_tuple in kmi_unique_args: - continue - kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args) - kmi.properties.name = item.text - item_container[2] = kmi - if use_auto_keymap: - kmi_unique_args.add(kmi_tuple) - - if use_auto_keymap: - # Map all unmapped keys to numbers, - # while this is a bit strange it means users will not confuse regular key bindings to ordered bindings. - - # Free events (last used first). - kmi_type_auto = ('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'ZERO') - # Map both numbers and num-pad. - kmi_type_dupe = { - 'ONE': 'NUMPAD_1', - 'TWO': 'NUMPAD_2', - 'THREE': 'NUMPAD_3', - 'FOUR': 'NUMPAD_4', - 'FIVE': 'NUMPAD_5', - 'SIX': 'NUMPAD_6', - 'SEVEN': 'NUMPAD_7', - 'EIGHT': 'NUMPAD_8', - 'NINE': 'NUMPAD_9', - 'ZERO': 'NUMPAD_0', - } - - def iter_free_events(): - for mod in ({}, {"shift": True}, {"ctrl": True}, {"alt": True}): - for e in kmi_type_auto: - yield (e, mod) - - iter_events = iter(iter_free_events()) - - for item_container in items_all: - item, kmi_found, kmi_exist = item_container - if kmi_exist: - continue - kmi_args = None - while True: - key, mod = next(iter_events, (None, None)) - if key is None: - break - kmi_args = {"type": key, **mod} - kmi_tuple = dict_as_tuple(kmi_args) - if kmi_tuple in kmi_unique_args: - kmi_args = None - else: - break - - if kmi_args is not None: - kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args) - kmi.properties.name = item.text - item_container[2] = kmi - if use_auto_keymap: - kmi_unique_args.add(kmi_tuple) - - key = kmi_type_dupe.get(kmi_args["type"]) - if key is not None: - kmi_args["type"] = key - kmi_tuple = dict_as_tuple(kmi_args) - if not kmi_tuple in kmi_unique_args: - kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args) - kmi.properties.name = item.text - if use_auto_keymap: - kmi_unique_args.add(kmi_tuple) - - if use_hack_properties: - keymap.keymap_items.remove(kmi_hack) - - if use_release_confirm: - kmi = keymap.keymap_items.new( - "ui.button_execute", - type=kmi_toolbar_type, - value='RELEASE', - ) - kmi.properties.skip_depressed = True - - if use_toolbar_release_hack: - # ... or pass through to let the toolbar know we're released. - # Let the operator know we're released. - kmi = keymap.keymap_items.new( - "wm.tool_set_by_name", - type=kmi_toolbar_type, - value='RELEASE', - ) - - wm.keyconfigs.update() - return keymap - - classes = ( WM_MT_toolsystem_submenu, ) diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index e681b794f66..fab001cdb5c 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -63,6 +63,15 @@ def generate_from_enum_ex( return tuple(tool_defs) +# Use for shared widget data. +class _template_widget: + class VIEW3D_GGT_xform_extrude: + @staticmethod + def draw_settings(context, layout, tool): + props = tool.gizmo_group_properties("VIEW3D_GGT_xform_extrude") + layout.prop(props, "axis_type", expand=True) + + class _defs_view3d_generic: @ToolDef.from_fn def cursor(): @@ -76,6 +85,7 @@ class _defs_view3d_generic: "Set the cursor location, drag to transform" ), icon="ops.generic.cursor", + keymap=(), draw_settings=draw_settings, ) @@ -354,8 +364,9 @@ class _defs_edit_armature: return dict( text="Extrude", icon="ops.armature.extrude_move", - widget=None, + widget="VIEW3D_GGT_xform_extrude", keymap=(), + draw_settings=_template_widget.VIEW3D_GGT_xform_extrude.draw_settings, ) @ToolDef.from_fn @@ -508,9 +519,6 @@ class _defs_edit_mesh: @ToolDef.from_fn def extrude(): - def draw_settings(context, layout, tool): - props = tool.gizmo_group_properties("MESH_GGT_extrude") - layout.prop(props, "axis_type", expand=True) return dict( text="Extrude Region", # The operator description isn't useful in this case, give our own. @@ -518,11 +526,11 @@ class _defs_edit_mesh: "Extrude freely or along an axis" ), icon="ops.mesh.extrude_region_move", - widget="MESH_GGT_extrude", + widget="VIEW3D_GGT_xform_extrude", # Important to use same operator as 'E' key. operator="view3d.edit_mesh_extrude_move_normal", keymap=(), - draw_settings=draw_settings, + draw_settings=_template_widget.VIEW3D_GGT_xform_extrude.draw_settings, ) @ToolDef.from_fn @@ -732,8 +740,9 @@ class _defs_edit_curve: return dict( text="Extrude", icon="ops.curve.extrude_move", - widget=None, + widget="VIEW3D_GGT_xform_extrude", keymap=(), + draw_settings=_template_widget.VIEW3D_GGT_xform_extrude.draw_settings, ) @ToolDef.from_fn @@ -993,7 +1002,7 @@ class _defs_image_uv_sculpt: return generate_from_enum_ex( context, icon_prefix="brush.uv_sculpt.", - data=context.tool_settings, + type=bpy.types.ToolSettings, attr="uv_sculpt_tool", ) @@ -1017,6 +1026,7 @@ class _defs_gpencil_paint: return dict( text="Line", icon="ops.gpencil.primitive_line", + cursor='CROSSHAIR', widget=None, keymap=(), ) @@ -1026,6 +1036,7 @@ class _defs_gpencil_paint: return dict( text="Box", icon="ops.gpencil.primitive_box", + cursor='CROSSHAIR', widget=None, keymap=(), ) @@ -1035,6 +1046,7 @@ class _defs_gpencil_paint: return dict( text="Circle", icon="ops.gpencil.primitive_circle", + cursor='CROSSHAIR', widget=None, keymap=(), ) @@ -1226,8 +1238,8 @@ class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel): 'VIEW': [ ], 'UV': [ - _defs_image_generic.cursor, *_tools_select, + _defs_image_generic.cursor, None, *_tools_transform, None, @@ -1316,16 +1328,16 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): # End group. ], 'OBJECT': [ - _defs_view3d_generic.cursor, *_tools_select, + _defs_view3d_generic.cursor, None, *_tools_transform, None, *_tools_annotate, ], 'POSE': [ - _defs_view3d_generic.cursor, *_tools_select, + _defs_view3d_generic.cursor, None, *_tools_transform, None, @@ -1338,8 +1350,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ), ], 'EDIT_ARMATURE': [ - _defs_view3d_generic.cursor, *_tools_select, + _defs_view3d_generic.cursor, None, *_tools_transform, None, @@ -1356,8 +1368,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ), ], 'EDIT_MESH': [ - _defs_view3d_generic.cursor, *_tools_select, + _defs_view3d_generic.cursor, None, *_tools_transform, None, @@ -1408,8 +1420,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): ), ], 'EDIT_CURVE': [ - _defs_view3d_generic.cursor, *_tools_select, + _defs_view3d_generic.cursor, None, *_tools_transform, None, @@ -1422,6 +1434,24 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_edit_curve.extrude_cursor, ), ], + 'EDIT_METABALL': [ + *_tools_select, + _defs_view3d_generic.cursor, + None, + *_tools_transform, + None, + *_tools_annotate, + None, + ], + 'EDIT_LATTICE': [ + *_tools_select, + _defs_view3d_generic.cursor, + None, + *_tools_transform, + None, + *_tools_annotate, + None, + ], 'PARTICLE': [ _defs_view3d_generic.cursor, _defs_particle.generate_from_brushes, @@ -1470,8 +1500,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_gpencil_paint.circle, ], 'GPENCIL_EDIT': [ - _defs_view3d_generic.cursor, *_tools_gpencil_select, + _defs_view3d_generic.cursor, None, *_tools_transform, None, diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py index 6fffba1fe39..8b9c47839e9 100644 --- a/release/scripts/startup/bl_ui/space_topbar.py +++ b/release/scripts/startup/bl_ui/space_topbar.py @@ -408,6 +408,8 @@ class _draw_left_context_mode: row.prop(brush, "strength", slider=True) row.prop(brush, "use_pressure_strength", text="") + layout.prop(brush, "target_weight", slider=True) + @staticmethod def PARTICLE(context, layout, tool): # See: 'VIEW3D_PT_tools_brush', basically a duplicate diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 149206fc151..954326f8899 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -73,25 +73,6 @@ class USERPREF_PT_tabs(Panel): layout.row().prop(userpref, "active_section", expand=True) -class USERPREF_MT_interaction_presets(Menu): - bl_label = "Presets" - preset_subdir = "interaction" - preset_operator = "script.execute_preset" - draw = Menu.draw_preset - - -class USERPREF_MT_appconfigs(Menu): - bl_label = "AppPresets" - preset_subdir = "keyconfig" - preset_operator = "wm.appconfig_activate" - - def draw(self, context): - self.layout.operator("wm.appconfig_default", text="Blender (default)") - - # now draw the presets - Menu.draw_preset(self, context) - - class USERPREF_PT_interface(Panel): bl_space_type = 'USER_PREFERENCES' bl_label = "Interface" @@ -483,14 +464,15 @@ class USERPREF_PT_system(Panel): if bpy.app.build_options.international: column.prop(system, "use_international_fonts") - if system.use_international_fonts: - column.prop(system, "language") - row = column.row() - row.label(text="Translate:", text_ctxt=i18n_contexts.id_windowmanager) - row = column.row(align=True) - row.prop(system, "use_translate_interface", text="Interface", toggle=True) - row.prop(system, "use_translate_tooltips", text="Tooltips", toggle=True) - row.prop(system, "use_translate_new_dataname", text="New Data", toggle=True) + sub_col = column.column() + sub_col.active = system.use_international_fonts + sub_col.prop(system, "language") + row = sub_col.row() + row.label(text="Translate:", text_ctxt=i18n_contexts.id_windowmanager) + row = sub_col.row(align=True) + row.prop(system, "use_translate_tooltips", text="Tooltips", toggle=True) + row.prop(system, "use_translate_interface", text="Interface", toggle=True) + row.prop(system, "use_translate_new_dataname", text="New Data", toggle=True) class USERPREF_MT_interface_theme_presets(Menu): @@ -1074,30 +1056,15 @@ class USERPREF_PT_input(Panel): import sys # General settings - row = layout.row() - col = row.column() - - sub = col.column() - sub.label(text="Presets:") - subrow = sub.row(align=True) - - subrow.menu("USERPREF_MT_interaction_presets", text=bpy.types.USERPREF_MT_interaction_presets.bl_label) - subrow.operator("wm.interaction_preset_add", text="", icon='ADD') - subrow.operator("wm.interaction_preset_add", text="", icon='REMOVE').remove_active = True - sub.separator() + sub = layout.column() sub.label(text="Mouse:") - sub1 = sub.column() - sub1.active = (inputs.select_mouse == 'RIGHT') - sub1.prop(inputs, "use_mouse_emulate_3_button") + sub.prop(inputs, "use_mouse_emulate_3_button") sub.prop(inputs, "use_mouse_continuous") sub.prop(inputs, "drag_threshold") sub.prop(inputs, "tweak_threshold") - sub.label(text="Select With:") - sub.row().prop(inputs, "select_mouse", expand=True) - - sub = col.column() + sub = layout.column() sub.label(text="Double Click:") sub.prop(inputs, "mouse_double_click_time", text="Speed") @@ -1120,18 +1087,18 @@ class USERPREF_PT_input(Panel): #sub.prop(inputs, "use_mouse_mmb_paste") - # col.separator() + # layout.separator() - sub = col.column() + sub = layout.column() sub.prop(inputs, "invert_zoom_wheel", text="Invert Wheel Zoom Direction") #sub.prop(view, "wheel_scroll_lines", text="Scroll Lines") if sys.platform == "darwin": - sub = col.column() + sub = layout.column() sub.prop(inputs, "use_trackpad_natural", text="Natural Trackpad Direction") - col.separator() - sub = col.column() + layout.separator() + sub = layout.column() sub.label(text="View Navigation:") sub.row().prop(inputs, "navigation_mode", expand=True) @@ -1143,37 +1110,41 @@ class USERPREF_PT_input(Panel): sub.prop(walk, "mouse_speed") sub.prop(walk, "teleport_time") - sub = col.column(align=True) + sub = layout.column(align=True) sub.prop(walk, "walk_speed") sub.prop(walk, "walk_speed_factor") sub.separator() sub.prop(walk, "use_gravity") - sub = col.column(align=True) + sub = layout.column(align=True) sub.active = walk.use_gravity sub.prop(walk, "view_height") sub.prop(walk, "jump_height") + sub.separator() + sub = layout.column() + sub.label(text="Tablet Pressure:") + sub.prop(inputs, "pressure_threshold_max") + sub.prop(inputs, "pressure_softness") + if inputs.use_ndof: - col.separator() - col.label(text="NDOF Device:") - sub = col.column(align=True) + layout.separator() + layout.label(text="NDOF Device:") + sub = layout.column(align=True) sub.prop(inputs, "ndof_sensitivity", text="Pan Sensitivity") sub.prop(inputs, "ndof_orbit_sensitivity", text="Orbit Sensitivity") sub.prop(inputs, "ndof_deadzone", text="Deadzone") sub.separator() - col.label(text="Navigation Style:") - sub = col.column(align=True) + layout.label(text="Navigation Style:") + sub = layout.column(align=True) sub.row().prop(inputs, "ndof_view_navigate_method", expand=True) sub.separator() - col.label(text="Rotation Style:") - sub = col.column(align=True) + layout.label(text="Rotation Style:") + sub = layout.column(align=True) sub.row().prop(inputs, "ndof_view_rotate_method", expand=True) - row.separator() - def draw(self, context): from rna_keymap_ui import draw_keymaps @@ -1189,11 +1160,17 @@ class USERPREF_PT_input(Panel): split = layout.split(factor=0.25) + row = split.row() + col = row.column() + # Input settings - self.draw_input_prefs(inputs, split) + self.draw_input_prefs(inputs, col) + + row.separator() # Keymap Settings - draw_keymaps(context, split) + col = split.column() + draw_keymaps(context, col) #print("runtime", time.time() - start) @@ -1233,8 +1210,8 @@ class USERPREF_PT_addons(Panel): _support_icon_mapping = { 'OFFICIAL': 'FILE_BLEND', - 'COMMUNITY': 'POSE_DATA', - 'TESTING': 'MOD_EXPLODE', + 'COMMUNITY': 'COMMUNITY', + 'TESTING': 'EXPERIMENTAL', } @classmethod @@ -1377,7 +1354,7 @@ class USERPREF_PT_addons(Panel): row.operator( "wm.addon_expand", - icon='TRIA_DOWN' if info["show_expanded"] else 'TRIA_RIGHT', + icon='DISCLOSURE_TRI_DOWN' if info["show_expanded"] else 'DISCLOSURE_TRI_RIGHT', emboss=False, ).module = module_name @@ -1596,8 +1573,6 @@ class USERPREF_PT_studiolight_specular(Panel, StudioLightPanelMixin): classes = ( USERPREF_HT_header, USERPREF_PT_tabs, - USERPREF_MT_interaction_presets, - USERPREF_MT_appconfigs, USERPREF_PT_interface, USERPREF_PT_edit, USERPREF_PT_system, diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 0d96e11cb72..55d1636bd19 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -1534,10 +1534,8 @@ class VIEW3D_MT_add(Menu): layout.menu("VIEW3D_MT_armature_add", icon='OUTLINER_OB_ARMATURE') layout.operator("object.add", text="Lattice", icon='OUTLINER_OB_LATTICE').type = 'LATTICE' layout.operator_menu_enum("object.empty_add", "type", text="Empty", icon='OUTLINER_OB_EMPTY') + layout.menu("VIEW3D_MT_image_add", text="Image", icon='OUTLINER_OB_IMAGE') - sublayout = layout.column() - sublayout.operator_context = 'INVOKE_DEFAULT' - sublayout.operator("object.load_image_as_empty", text="Image", icon="OUTLINER_OB_IMAGE") layout.separator() layout.operator("object.speaker_add", text="Speaker", icon='OUTLINER_OB_SPEAKER') @@ -1576,6 +1574,15 @@ class VIEW3D_MT_add(Menu): ) +class VIEW3D_MT_image_add(Menu): + bl_label = "Add Image" + + def draw(self, context): + layout = self.layout + layout.operator("object.load_reference_image", text="Reference", icon='IMAGE_REFERENCE') + layout.operator("object.load_background_image", text="Background", icon='IMAGE_BACKGROUND') + + class VIEW3D_MT_object_relations(Menu): bl_label = "Relations" @@ -1726,37 +1733,14 @@ class VIEW3D_MT_object_specials(Menu): return context.object def draw(self, context): + layout = self.layout obj = context.object - - layout.operator("view3d.copybuffer", text="Copy Objects", icon='COPYDOWN') - layout.operator("view3d.pastebuffer", text="Paste Objects", icon='PASTEDOWN') - - layout.separator() - - layout.operator("object.duplicate_move") - layout.operator("object.duplicate_move_linked") - - layout.separator() - - layout.menu("VIEW3D_MT_snap") - layout.menu("VIEW3D_MT_object_parent") - layout.operator_context = 'INVOKE_REGION_WIN' - layout.operator("object.move_to_collection") - - layout.separator() - - layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...") - - layout.separator() - - layout.operator("object.delete", text="Delete...").use_global = False + is_eevee = context.scene.render.engine == 'BLENDER_EEVEE' if obj.type == 'MESH': - layout.separator() - layout.operator("object.shade_smooth", text="Smooth Shading") layout.operator("object.shade_flat", text="Flat Shading") @@ -1834,15 +1818,21 @@ class VIEW3D_MT_object_specials(Menu): emission_node = node break + if is_eevee and not emission_node: + props = layout.operator("wm.context_modal_mouse", text="Energy") + props.data_path_iter = "selected_editable_objects" + props.data_path_item = "data.energy" + props.header_text = "Light Energy: %.3f" + if emission_node is not None: - props = layout.operator("wm.context_modal_mouse", text="Strength") + props = layout.operator("wm.context_modal_mouse", text="Energy") props.data_path_iter = "selected_editable_objects" props.data_path_item = ( "data.node_tree" ".nodes[\"" + emission_node.name + "\"]" ".inputs[\"Strength\"].default_value" ) - props.header_text = "Light Strength: %.3f" + props.header_text = "Light Energy: %.3f" props.input_scale = 0.1 if light.type == 'AREA': @@ -1858,13 +1848,14 @@ class VIEW3D_MT_object_specials(Menu): props.header_text = "Light Size Y: %.3f" elif light.type in {'SPOT', 'POINT', 'SUN'}: - props = layout.operator("wm.context_modal_mouse", text="Size") + props = layout.operator("wm.context_modal_mouse", text="Radius") props.data_path_iter = "selected_editable_objects" props.data_path_item = "data.shadow_soft_size" - props.header_text = "Light Size: %.3f" + props.header_text = "Light Radius: %.3f" if light.type == 'SPOT': layout.separator() + props = layout.operator("wm.context_modal_mouse", text="Spot Size") props.data_path_iter = "selected_editable_objects" props.data_path_item = "data.spot_size" @@ -1877,6 +1868,31 @@ class VIEW3D_MT_object_specials(Menu): props.input_scale = -0.01 props.header_text = "Spot Blend: %.2f" + layout.separator() + + layout.operator("view3d.copybuffer", text="Copy Objects", icon='COPYDOWN') + layout.operator("view3d.pastebuffer", text="Paste Objects", icon='PASTEDOWN') + + layout.separator() + + layout.operator("object.duplicate_move", icon="DUPLICATE") + layout.operator("object.duplicate_move_linked") + + layout.separator() + + layout.menu("VIEW3D_MT_snap") + layout.menu("VIEW3D_MT_object_parent") + layout.operator_context = 'INVOKE_REGION_WIN' + layout.operator("object.move_to_collection") + + layout.separator() + + layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...") + + layout.separator() + + layout.operator("object.delete", text="Delete...").use_global = False + class VIEW3D_MT_object_shading(Menu): # XXX, this menu is a place to store shading operator in object mode @@ -3835,24 +3851,16 @@ class VIEW3D_MT_shading_pie(Menu): pie.prop_enum(view.shading, "type", value='WIREFRAME') pie.prop_enum(view.shading, "type", value='SOLID') - if context.mode == 'POSE': - pie.prop(view.overlay, "show_bone_select", icon='XRAY') + xray_active = ( + (context.mode in {'POSE', 'EDIT_MESH'}) or + (view.shading.type in {'SOLID', 'WIREFRAME'}) + ) + if xray_active: + sub = pie else: - xray_active = ( - (context.mode in 'EDIT_MESH') or - (view.shading.type in {'SOLID', 'WIREFRAME'}) - ) - - if xray_active: - sub = pie - else: - sub = pie.row() - sub.active = False - - if view.shading.type == 'WIREFRAME': - sub.prop(view.shading, "show_xray_wireframe", text="Toggle X-Ray", icon='XRAY') - else: - sub.prop(view.shading, "show_xray", text="Toggle X-Ray", icon='XRAY') + sub = pie.row() + sub.active = False + sub.operator("view3d.toggle_xray", text="Toggle X-Ray", icon='XRAY') pie.prop(view.overlay, "show_overlays", text="Toggle Overlays", icon='OVERLAY') pie.prop_enum(view.shading, "type", value='MATERIAL') @@ -5089,6 +5097,7 @@ class VIEW3D_PT_overlay_gpencil_options(Panel): class VIEW3D_PT_quad_view(Panel): bl_space_type = 'VIEW_3D' bl_region_type = 'UI' + bl_category = "View" bl_label = "Quad View" bl_options = {'DEFAULT_CLOSED'} @@ -5475,6 +5484,7 @@ classes = ( VIEW3D_PT_transform_orientations, VIEW3D_PT_overlay_gpencil_options, VIEW3D_PT_context_properties, + VIEW3D_MT_image_add, ) diff --git a/release/scripts/templates_py/operator_modal_view3d_raycast.py b/release/scripts/templates_py/operator_modal_view3d_raycast.py index 103c13dc1c2..4b9700dd3fe 100644 --- a/release/scripts/templates_py/operator_modal_view3d_raycast.py +++ b/release/scripts/templates_py/operator_modal_view3d_raycast.py @@ -37,8 +37,8 @@ def main(context, event): # get the ray relative to the object matrix_inv = matrix.inverted() - ray_origin_obj = matrix_inv * ray_origin - ray_target_obj = matrix_inv * ray_target + ray_origin_obj = matrix_inv @ ray_origin + ray_target_obj = matrix_inv @ ray_target ray_direction_obj = ray_target_obj - ray_origin_obj # cast the ray @@ -57,7 +57,7 @@ def main(context, event): if obj.type == 'MESH': hit, normal, face_index = obj_ray_cast(obj, matrix) if hit is not None: - hit_world = matrix * hit + hit_world = matrix @ hit scene.cursor_location = hit_world length_squared = (hit_world - ray_origin).length_squared if best_obj is None or length_squared < best_length_squared: diff --git a/release/scripts/templates_py/ui_tool_simple.py b/release/scripts/templates_py/ui_tool_simple.py index 920a23b081a..d9aeb294c68 100644 --- a/release/scripts/templates_py/ui_tool_simple.py +++ b/release/scripts/templates_py/ui_tool_simple.py @@ -17,8 +17,8 @@ def my_tool(): icon="ops.generic.select_circle", widget=None, keymap=( - ("view3d.select_circle", dict(deselect=False), dict(type='ACTIONMOUSE', value='PRESS')), - ("view3d.select_circle", dict(deselect=True), dict(type='ACTIONMOUSE', value='PRESS', ctrl=True)), + ("view3d.select_circle", dict(deselect=False), dict(type='LEFTMOUSE', value='PRESS')), + ("view3d.select_circle", dict(deselect=True), dict(type='LEFTMOUSE', value='PRESS', ctrl=True)), ), draw_settings=draw_settings, ) diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h index 23a9afbda31..be8bd9557e5 100644 --- a/source/blender/blenkernel/BKE_armature.h +++ b/source/blender/blenkernel/BKE_armature.h @@ -253,6 +253,10 @@ void BKE_pose_splineik_evaluate( struct Object *ob, int rootchan_index); +void BKE_pose_eval_done( + struct Depsgraph *depsgraph, + struct Object *object); + void BKE_pose_eval_cleanup( struct Depsgraph *depsgraph, struct Scene *scene, @@ -260,6 +264,8 @@ void BKE_pose_eval_cleanup( void BKE_pose_eval_proxy_init(struct Depsgraph *depsgraph, struct Object *object); +void BKE_pose_eval_proxy_done(struct Depsgraph *depsgraph, + struct Object *object); void BKE_pose_eval_proxy_cleanup(struct Depsgraph *depsgraph, struct Object *object); @@ -268,6 +274,18 @@ void BKE_pose_eval_proxy_copy_bone( struct Object *object, int pchan_index); +/* BBOne deformation cache. + * + * The idea here is to pre-calculate deformation queternions, matricies and such + * used by armature_deform_verts(). + */ +struct ObjectBBoneDeform; +struct ObjectBBoneDeform * BKE_armature_cached_bbone_deformation_get( + struct Object *object); +void BKE_armature_cached_bbone_deformation_free_data(struct Object *object); +void BKE_armature_cached_bbone_deformation_free(struct Object *object); +void BKE_armature_cached_bbone_deformation_update(struct Object *object); + #ifdef __cplusplus } #endif diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index b695132416e..781dd3f9826 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -28,7 +28,7 @@ * and keep comment above the defines. * Use STRINGIFY() rather than defining with quotes */ #define BLENDER_VERSION 280 -#define BLENDER_SUBVERSION 30 +#define BLENDER_SUBVERSION 32 /* Several breakages with 280, e.g. collections vs layers */ #define BLENDER_MINVERSION 280 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenkernel/BKE_blendfile.h b/source/blender/blenkernel/BKE_blendfile.h index 305b7d07e4d..e272fcaa3ec 100644 --- a/source/blender/blenkernel/BKE_blendfile.h +++ b/source/blender/blenkernel/BKE_blendfile.h @@ -34,6 +34,7 @@ struct Main; struct MemFile; struct ReportList; struct UserDef; +struct BlendFileReadParams; enum { BKE_BLENDFILE_READ_FAIL = 0, /* no load */ @@ -43,13 +44,16 @@ enum { int BKE_blendfile_read( struct bContext *C, const char *filepath, - struct ReportList *reports, int skip_flag); + const struct BlendFileReadParams *params, + struct ReportList *reports); bool BKE_blendfile_read_from_memory( - struct bContext *C, const void *filebuf, int filelength, - struct ReportList *reports, int skip_flag, bool update_defaults); + struct bContext *C, const void *filebuf, int filelength, bool update_defaults, + const struct BlendFileReadParams *params, + struct ReportList *reports); bool BKE_blendfile_read_from_memfile( struct bContext *C, struct MemFile *memfile, - struct ReportList *reports, int skip_flag); + const struct BlendFileReadParams *params, + struct ReportList *reports); void BKE_blendfile_read_make_empty(struct bContext *C); struct UserDef *BKE_blendfile_userdef_read( diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h index 12e3492368b..be46a2dd01a 100644 --- a/source/blender/blenkernel/BKE_curve.h +++ b/source/blender/blenkernel/BKE_curve.h @@ -89,7 +89,7 @@ void BKE_curve_curve_dimension_update(struct Curve *cu); void BKE_curve_boundbox_calc(struct Curve *cu, float r_loc[3], float r_size[3]); struct BoundBox *BKE_curve_boundbox_get(struct Object *ob); void BKE_curve_texspace_calc(struct Curve *cu); -void BKE_curve_texspace_get(struct Curve *cu, float r_loc[3], float r_rot[3], float r_size[3]); +struct BoundBox *BKE_curve_texspace_get(struct Curve *cu, float r_loc[3], float r_rot[3], float r_size[3]); bool BKE_curve_minmax(struct Curve *cu, bool use_radius, float min[3], float max[3]); bool BKE_curve_center_median(struct Curve *cu, float cent[3]); diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h index cffadeb5fd9..d6a9cbb5e17 100644 --- a/source/blender/blenkernel/BKE_dynamicpaint.h +++ b/source/blender/blenkernel/BKE_dynamicpaint.h @@ -69,13 +69,16 @@ struct Mesh *dynamicPaint_Modifier_do( struct DynamicPaintModifierData *pmd, struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct Mesh *me); void dynamicPaint_Modifier_free(struct DynamicPaintModifierData *pmd); -void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tsmd); +void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, + struct DynamicPaintModifierData *tsmd, + int flag); bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, struct Scene *scene); struct DynamicPaintSurface *dynamicPaint_createNewSurface(struct DynamicPaintCanvasSettings *canvas, struct Scene *scene); void dynamicPaint_clearSurface(const struct Scene *scene, struct DynamicPaintSurface *surface); bool dynamicPaint_resetSurface(const struct Scene *scene, struct DynamicPaintSurface *surface); -void dynamicPaint_freeSurface(struct DynamicPaintSurface *surface); +void dynamicPaint_freeSurface(const struct DynamicPaintModifierData *pmd, + struct DynamicPaintSurface *surface); void dynamicPaint_freeCanvas(struct DynamicPaintModifierData *pmd); void dynamicPaint_freeBrush(struct DynamicPaintModifierData *pmd); void dynamicPaint_freeSurfaceData(struct DynamicPaintSurface *surface); diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h index 3b8df66668a..34c61083872 100644 --- a/source/blender/blenkernel/BKE_gpencil.h +++ b/source/blender/blenkernel/BKE_gpencil.h @@ -65,7 +65,6 @@ bool BKE_gpencil_free_strokes(struct bGPDframe *gpf); void BKE_gpencil_free_frames(struct bGPDlayer *gpl); void BKE_gpencil_free_layers(struct ListBase *list); bool BKE_gpencil_free_frame_runtime_data(struct bGPDframe *derived_gpf); -void BKE_gpencil_free_derived_frames(struct bGPdata *gpd); void BKE_gpencil_free(struct bGPdata *gpd, bool free_all); void BKE_gpencil_batch_cache_dirty_tag(struct bGPdata *gpd); diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h index 91f368613cb..e31f61c909a 100644 --- a/source/blender/blenkernel/BKE_gpencil_modifier.h +++ b/source/blender/blenkernel/BKE_gpencil_modifier.h @@ -232,6 +232,11 @@ typedef struct GpencilModifierTypeInfo { */ void (*foreachTexLink)(struct GpencilModifierData *md, struct Object *ob, GreasePencilTexWalkFunc walk, void *userData); + + /* get the number of times the strokes are duplicated in this modifier. + * This is used to calculate the size of the GPU VBOs + */ + int (*getDuplicationFactor)(struct GpencilModifierData *md); } GpencilModifierTypeInfo; /* Initialize modifier's global data (type info and some common global storages). */ diff --git a/source/blender/blenkernel/BKE_keyconfig.h b/source/blender/blenkernel/BKE_keyconfig.h new file mode 100644 index 00000000000..a086930fe34 --- /dev/null +++ b/source/blender/blenkernel/BKE_keyconfig.h @@ -0,0 +1,56 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef __BKE_KEYCONFIG_H__ +#define __BKE_KEYCONFIG_H__ + +/** \file BKE_keyconfig.h + * \ingroup bke + */ + +/** Based on #BKE_addon_pref_type_init and friends */ + +struct UserDef; +struct wmKeyConfigPref; + +/** Actual data is stored in #wmKeyConfigPref. */ +#if defined(__RNA_TYPES_H__) +typedef struct wmKeyConfigPrefType_Runtime { + char idname[64]; + + /* RNA integration */ + ExtensionRNA ext; +} wmKeyConfigPrefType_Runtime; + +#else +typedef struct wmKeyConfigPrefType_Runtime wmKeyConfigPrefType_Runtime; +#endif + +/* KeyConfig preferenes (UserDef). */ +struct wmKeyConfigPref *BKE_keyconfig_pref_ensure(struct UserDef *userdef, const char *kc_idname); + +/* KeyConfig preferenes (RNA). */ +struct wmKeyConfigPrefType_Runtime *BKE_keyconfig_pref_type_find(const char *idname, bool quiet); +void BKE_keyconfig_pref_type_add(struct wmKeyConfigPrefType_Runtime *kpt_rt); +void BKE_keyconfig_pref_type_remove(const struct wmKeyConfigPrefType_Runtime *kpt_rt); + +void BKE_keyconfig_pref_type_init(void); +void BKE_keyconfig_pref_type_free(void); + +#endif /* __BKE_KEYCONFIG_H__ */ diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 8f0c81ce4f9..aba42820519 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -83,7 +83,7 @@ extern "C" { /* *** mesh.c *** */ struct BMesh *BKE_mesh_to_bmesh_ex( - struct Mesh *me, + const struct Mesh *me, const struct BMeshCreateParams *create_params, const struct BMeshFromMeshParams *convert_params); struct BMesh *BKE_mesh_to_bmesh( @@ -165,7 +165,7 @@ void BKE_mesh_smooth_flag_set(struct Object *meshOb, int enableSmooth); const char *BKE_mesh_cmp(struct Mesh *me1, struct Mesh *me2, float thresh); struct BoundBox *BKE_mesh_boundbox_get(struct Object *ob); -void BKE_mesh_texspace_get(struct Mesh *me, float r_loc[3], float r_rot[3], float r_size[3]); +struct BoundBox *BKE_mesh_texspace_get(struct Mesh *me, float r_loc[3], float r_rot[3], float r_size[3]); void BKE_mesh_texspace_get_reference(struct Mesh *me, short **r_texflag, float **r_loc, float **r_rot, float **r_size); void BKE_mesh_texspace_copy_from_object(struct Mesh *me, struct Object *ob); diff --git a/source/blender/blenkernel/BKE_mesh_runtime.h b/source/blender/blenkernel/BKE_mesh_runtime.h index 050d17771c9..5d35f798ad7 100644 --- a/source/blender/blenkernel/BKE_mesh_runtime.h +++ b/source/blender/blenkernel/BKE_mesh_runtime.h @@ -47,7 +47,7 @@ struct Object; struct Scene; /* Undefine to hide DerivedMesh-based function declarations */ -#define USE_DERIVEDMESH +#undef USE_DERIVEDMESH #ifdef USE_DERIVEDMESH struct DerivedMesh; diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index decfdc532a6..190ee9e7270 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -88,8 +88,6 @@ struct MultiresModifierData *find_multires_modifier_before(struct Scene *scene, struct MultiresModifierData *get_multires_modifier(struct Scene *scene, struct Object *ob, bool use_first); int multires_get_level(const struct Scene *scene, const struct Object *ob, const struct MultiresModifierData *mmd, bool render, bool ignore_simplify); -struct DerivedMesh *get_multires_dm(struct Depsgraph *depsgraph, struct Scene *scene, struct MultiresModifierData *mmd, - struct Object *ob); struct Mesh *BKE_multires_create_mesh( struct Depsgraph *depsgraph, struct Scene *scene, struct MultiresModifierData *mmd, struct Object *ob); diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 6d950ec01f6..f0f99c9cac5 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -53,6 +53,7 @@ struct RigidBodyWorld; struct HookModifierData; struct ModifierData; struct HookGpencilModifierData; +struct RegionView3D; #include "DNA_object_enums.h" @@ -232,7 +233,8 @@ void BKE_object_eval_constraints( struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob); -void BKE_object_eval_done(struct Depsgraph *depsgraph, struct Object *ob); +void BKE_object_eval_transform_final( + struct Depsgraph *depsgraph, struct Object *ob); bool BKE_object_eval_proxy_copy( struct Depsgraph *depsgraph, @@ -245,6 +247,8 @@ void BKE_object_eval_uber_data( struct Scene *scene, struct Object *ob); +void BKE_object_eval_boundbox(struct Depsgraph *depsgraph, struct Object *object); + void BKE_object_eval_ptcache_reset( struct Depsgraph *depsgraph, struct Scene *scene, @@ -342,6 +346,8 @@ bool BKE_object_modifier_update_subframe( struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, bool update_mesh, int parent_recursion, float frame, int type); +bool BKE_image_empty_visible_in_view3d(const struct Object *ob, const struct RegionView3D *rv3d); + #ifdef __cplusplus } #endif diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h index e09aed4b372..00425de50e0 100644 --- a/source/blender/blenkernel/BKE_paint.h +++ b/source/blender/blenkernel/BKE_paint.h @@ -90,6 +90,8 @@ typedef enum ePaintMode { PAINT_MODE_INVALID = 7, } ePaintMode; +#define PAINT_MODE_HAS_BRUSH(mode) !ELEM(mode, PAINT_MODE_SCULPT_UV) + /* overlay invalidation */ typedef enum eOverlayControlFlags { PAINT_OVERLAY_INVALID_TEXTURE_PRIMARY = 1, diff --git a/source/blender/blenkernel/BKE_studiolight.h b/source/blender/blenkernel/BKE_studiolight.h index 4a7f29d7190..7ec98c99c3f 100644 --- a/source/blender/blenkernel/BKE_studiolight.h +++ b/source/blender/blenkernel/BKE_studiolight.h @@ -61,43 +61,36 @@ #define STUDIOLIGHT_ICON_SIZE 96 -#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 2 -#define STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS 18 +/* Only 1 - 5 is supported */ +#define STUDIOLIGHT_SH_BANDS 2 -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 0 -# define STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS 1 -#endif - -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 1 -# define STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS 4 -#endif +#define STUDIOLIGHT_SH_COEFS_LEN (STUDIOLIGHT_SH_BANDS * STUDIOLIGHT_SH_BANDS) -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 2 -# define STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS 9 -# define STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING_TARGET_LAMPLACIAN 10.0f +#if STUDIOLIGHT_SH_BANDS > 3 +/* Bypass L3 */ +#define STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN (STUDIOLIGHT_SH_COEFS_LEN - 7) +#else +#define STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN STUDIOLIGHT_SH_COEFS_LEN #endif -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 4 -# define STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS 18 -#endif struct GPUTexture; struct StudioLight; /* StudioLight.flag */ enum StudioLightFlag { STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED = (1 << 0), - STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED = (1 << 1), +/* STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED = (1 << 1), */ STUDIOLIGHT_INTERNAL = (1 << 2), STUDIOLIGHT_EXTERNAL_FILE = (1 << 3), - STUDIOLIGHT_USER_DEFINED = (1 << 12), STUDIOLIGHT_ORIENTATION_CAMERA = (1 << 4), STUDIOLIGHT_ORIENTATION_WORLD = (1 << 5), STUDIOLIGHT_ORIENTATION_VIEWNORMAL = (1 << 6), STUDIOLIGHT_EXTERNAL_IMAGE_LOADED = (1 << 7), - STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED = (1 << 8), - STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE = (1 << 9), - STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE = (1 << 10), + STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED = (1 << 8), + STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE = (1 << 9), + STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE = (1 << 10), STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED = (1 << 11), + STUDIOLIGHT_USER_DEFINED = (1 << 12), STUDIOLIGHT_UI_EXPANDED = (1 << 13), }; @@ -121,14 +114,13 @@ typedef struct StudioLight { int icon_id_radiance; int icon_id_matcap; int icon_id_matcap_flipped; - float spherical_harmonics_coefs[STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS][3]; + float spherical_harmonics_coefs[STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN][3]; float light_direction[3]; - ImBuf *equirectangular_radiance_buffer; - ImBuf *equirectangular_irradiance_buffer; + ImBuf *equirect_radiance_buffer; + ImBuf *equirect_irradiance_buffer; ImBuf *radiance_cubemap_buffers[6]; - struct GPUTexture *equirectangular_radiance_gputexture; - struct GPUTexture *equirectangular_irradiance_gputexture; - float *gpu_matcap_3components; /* 3 channel buffer for GPU_R11F_G11F_B10F */ + struct GPUTexture *equirect_radiance_gputexture; + struct GPUTexture *equirect_irradiance_gputexture; /* * Free function to clean up the running icons previews (wmJob) the usage is in diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 4161a5ecd79..7d09374c99e 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -128,6 +128,7 @@ set(SRC intern/image_gen.c intern/ipo.c intern/key.c + intern/keyconfig.c intern/lamp.c intern/lattice.c intern/library.c @@ -280,6 +281,7 @@ set(SRC BKE_image.h BKE_ipo.h BKE_key.h + BKE_keyconfig.h BKE_lamp.h BKE_lattice.h BKE_library.h diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 1d787388774..54aa46d8b85 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1990,6 +1990,14 @@ static void mesh_build_extra_data(struct Depsgraph *depsgraph, Object *ob) } } +static void mesh_runtime_check_normals_valid(const Mesh *mesh) +{ + UNUSED_VARS_NDEBUG(mesh); + BLI_assert(!(mesh->runtime.cd_dirty_vert & CD_MASK_NORMAL)); + BLI_assert(!(mesh->runtime.cd_dirty_loop & CD_MASK_NORMAL)); + BLI_assert(!(mesh->runtime.cd_dirty_poly & CD_MASK_NORMAL)); +} + static void mesh_build_data( struct Depsgraph *depsgraph, Scene *scene, Object *ob, CustomDataMask dataMask, const bool build_shapekey_layers, const bool need_mapping) @@ -2005,15 +2013,19 @@ static void mesh_build_data( mesh_finalize_eval(ob); +#ifdef USE_DERIVEDMESH /* TODO(campbell): remove these copies, they are expected in various places over the code. */ ob->derivedDeform = CDDM_from_mesh_ex(ob->runtime.mesh_deform_eval, CD_REFERENCE, CD_MASK_MESH); ob->derivedFinal = CDDM_from_mesh_ex(ob->runtime.mesh_eval, CD_REFERENCE, CD_MASK_MESH); +#endif BKE_object_boundbox_calc_from_mesh(ob, ob->runtime.mesh_eval); BKE_mesh_texspace_copy_from_object(ob->runtime.mesh_eval, ob); +#ifdef USE_DERIVEDMESH ob->derivedFinal->needsFree = 0; ob->derivedDeform->needsFree = 0; +#endif ob->lastDataMask = dataMask; ob->lastNeedMapping = need_mapping; @@ -2025,8 +2037,7 @@ static void mesh_build_data( // BKE_sculpt_update_mesh_elements(depsgraph, scene, scene->toolsettings->sculpt, ob, false, false); } - BLI_assert(!(ob->derivedFinal->dirty & DM_DIRTY_NORMALS)); - + mesh_runtime_check_normals_valid(ob->runtime.mesh_eval); mesh_build_extra_data(depsgraph, ob); } @@ -2053,7 +2064,7 @@ static void editbmesh_build_data( em->lastDataMask = dataMask; - BLI_assert(!(em->mesh_eval_final->runtime.cd_dirty_vert & DM_DIRTY_NORMALS)); + mesh_runtime_check_normals_valid(em->mesh_eval_final); } static CustomDataMask object_get_datamask(const Depsgraph *depsgraph, Object *ob, bool *r_need_mapping) diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 66106a97566..a5a2e1d5645 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -75,6 +75,8 @@ #include "BIK_api.h" +#include "atomic_ops.h" + /* **************** Generic Functions, data level *************** */ bArmature *BKE_armature_add(Main *bmain, const char *name) @@ -813,6 +815,13 @@ typedef struct bPoseChanDeform { DualQuat *b_bone_dual_quats; } bPoseChanDeform; +/* Definition of cached object bbone deformations. */ +typedef struct ObjectBBoneDeform { + DualQuat *dualquats; + bPoseChanDeform *pdef_info_array; + int num_pchan; +} ObjectBBoneDeform; + static void pchan_b_bone_defmats(bPoseChannel *pchan, bPoseChanDeform *pdef_info, const bool use_quaternion) { Bone *bone = pchan->bone; @@ -854,10 +863,10 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, bPoseChanDeform *pdef_info } } -static void b_bone_deform(bPoseChanDeform *pdef_info, Bone *bone, float co[3], DualQuat *dq, float defmat[3][3]) +static void b_bone_deform(const bPoseChanDeform *pdef_info, Bone *bone, float co[3], DualQuat *dq, float defmat[3][3]) { - Mat4 *b_bone = pdef_info->b_bone_mats; - float (*mat)[4] = b_bone[0].mat; + const Mat4 *b_bone = pdef_info->b_bone_mats; + const float (*mat)[4] = b_bone[0].mat; float segment, y; int a; @@ -949,7 +958,7 @@ static void pchan_deform_mat_add(bPoseChannel *pchan, float weight, float bbonem add_m3_m3m3(mat, mat, wmat); } -static float dist_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float vec[3], DualQuat *dq, +static float dist_bone_deform(bPoseChannel *pchan, const bPoseChanDeform *pdef_info, float vec[3], DualQuat *dq, float mat[3][3], const float co[3]) { Bone *bone = pchan->bone; @@ -996,7 +1005,8 @@ static float dist_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, f return contrib; } -static void pchan_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float weight, float vec[3], DualQuat *dq, +static void pchan_bone_deform(bPoseChannel *pchan, const bPoseChanDeform *pdef_info, + float weight, float vec[3], DualQuat *dq, float mat[3][3], const float co[3], float *contrib) { float cop[3], bbonemat[3][3]; @@ -1064,14 +1074,12 @@ void armature_deform_verts( float (*defMats)[3][3], int numVerts, int deformflag, float (*prevCos)[3], const char *defgrp_name, bGPDstroke *gps) { - bPoseChanDeform *pdef_info_array; - bPoseChanDeform *pdef_info = NULL; + const bPoseChanDeform *pdef_info = NULL; bArmature *arm = armOb->data; bPoseChannel *pchan, **defnrToPC = NULL; int *defnrToPCIndex = NULL; MDeformVert *dverts = NULL; bDeformGroup *dg; - DualQuat *dualquats = NULL; float obinv[4][4], premat[4][4], postmat[4][4]; const bool use_envelope = (deformflag & ARM_DEF_ENVELOPE) != 0; const bool use_quaternion = (deformflag & ARM_DEF_QUATERNION) != 0; @@ -1080,7 +1088,6 @@ void armature_deform_verts( int i, target_totvert = 0; /* safety for vertexgroup overflow */ bool use_dverts = false; int armature_def_nr; - int totchan; /* in editmode, or not an armature */ if (arm->edbo || (armOb->pose == NULL)) { @@ -1097,21 +1104,20 @@ void armature_deform_verts( mul_m4_m4m4(postmat, obinv, armOb->obmat); invert_m4_m4(premat, postmat); - /* bone defmats are already in the channels, chan_mat */ - - /* initialize B_bone matrices and dual quaternions */ - totchan = BLI_listbase_count(&armOb->pose->chanbase); - - if (use_quaternion) { - dualquats = MEM_callocN(sizeof(DualQuat) * totchan, "dualquats"); + /* Use pre-calculated bbone deformation. + * + * TODO(sergey): Make this code robust somehow when there are dependency + * cycles involved. */ + ObjectBBoneDeform * bbone_deform = + BKE_armature_cached_bbone_deformation_get(armOb); + if (bbone_deform == NULL || bbone_deform->pdef_info_array == NULL) { + fprintf(stderr, + "Armature does not have bbone cache %s, " + "usually happens due to a dependency cycle.\n", + armOb->id.name + 2); + return; } - - pdef_info_array = MEM_callocN(sizeof(bPoseChanDeform) * totchan, "bPoseChanDeform"); - - ArmatureBBoneDefmatsData data = { - .pdef_info_array = pdef_info_array, .dualquats = dualquats, .use_quaternion = use_quaternion - }; - BLI_task_parallel_listbase(&armOb->pose->chanbase, &data, armature_bbone_defmats_cb, totchan > 512); + const bPoseChanDeform *pdef_info_array = bbone_deform->pdef_info_array; /* get the def_nr for the overall armature vertex group if present */ armature_def_nr = defgroup_name_index(target, defgrp_name); @@ -1343,23 +1349,10 @@ void armature_deform_verts( } } - if (dualquats) - MEM_freeN(dualquats); if (defnrToPC) MEM_freeN(defnrToPC); if (defnrToPCIndex) MEM_freeN(defnrToPCIndex); - - /* free B_bone matrices */ - pdef_info = pdef_info_array; - for (pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next, pdef_info++) { - if (pdef_info->b_bone_mats) - MEM_freeN(pdef_info->b_bone_mats); - if (pdef_info->b_bone_dual_quats) - MEM_freeN(pdef_info->b_bone_dual_quats); - } - - MEM_freeN(pdef_info_array); } /* ************ END Armature Deform ******************* */ @@ -2490,3 +2483,88 @@ bPoseChannel *BKE_armature_splineik_solver_find_root( } return rootchan; } + +/* ****************************** BBone cache ****************************** */ + +ObjectBBoneDeform * BKE_armature_cached_bbone_deformation_get(Object *object) +{ + return object->runtime.cached_bbone_deformation; +} + +void BKE_armature_cached_bbone_deformation_free_data(Object *object) +{ + ObjectBBoneDeform *bbone_deform = + BKE_armature_cached_bbone_deformation_get(object); + if (bbone_deform == NULL) { + return; + } + /* free B_bone matrices */ + for (int i = 0; i < bbone_deform->num_pchan; i++) { + bPoseChanDeform *pdef_info = &bbone_deform->pdef_info_array[i]; + if (pdef_info->b_bone_mats != NULL) { + MEM_freeN(pdef_info->b_bone_mats); + } + if (pdef_info->b_bone_dual_quats != NULL) { + MEM_freeN(pdef_info->b_bone_dual_quats); + } + } + /* Free arrays. */ + MEM_SAFE_FREE(bbone_deform->pdef_info_array); + MEM_SAFE_FREE(bbone_deform->dualquats); + /* Tag that we've got no data, so we are safe for sequential calls to + * data free. */ + bbone_deform->num_pchan = 0; +} + +void BKE_armature_cached_bbone_deformation_free(Object *object) +{ + ObjectBBoneDeform *bbone_deform = + BKE_armature_cached_bbone_deformation_get(object); + if (bbone_deform == NULL) { + return; + } + BKE_armature_cached_bbone_deformation_free_data(object); + MEM_freeN(bbone_deform); + object->runtime.cached_bbone_deformation = NULL; +} + +void BKE_armature_cached_bbone_deformation_update(Object *object) +{ + BLI_assert(object->type == OB_ARMATURE); + BLI_assert(object->pose != NULL); + bPose *pose = object->pose; + const int totchan = BLI_listbase_count(&pose->chanbase); + const bool use_quaternion = true; + /* Make sure cache exists. */ + ObjectBBoneDeform *bbone_deform = + BKE_armature_cached_bbone_deformation_get(object); + if (bbone_deform == NULL) { + bbone_deform = MEM_callocN(sizeof(*bbone_deform), "bbone deform cache"); + object->runtime.cached_bbone_deformation = bbone_deform; + } + /* Make sure arrays are allocateds at the proper size. */ + BKE_armature_cached_bbone_deformation_free_data(object); + DualQuat *dualquats = NULL; + if (use_quaternion) { + dualquats = MEM_calloc_arrayN( + sizeof(DualQuat), totchan, "dualquats"); + } + bPoseChanDeform *pdef_info_array = MEM_calloc_arrayN( + sizeof(bPoseChanDeform), totchan, "bPoseChanDeform"); + /* Calculate deofrmation matricies. */ + ArmatureBBoneDefmatsData data = { + .pdef_info_array = pdef_info_array, + .dualquats = dualquats, + .use_quaternion = use_quaternion + }; + BLI_task_parallel_listbase(&pose->chanbase, + &data, + armature_bbone_defmats_cb, + totchan > 512); + /* Store pointers. */ + bbone_deform->dualquats = dualquats; + atomic_cas_ptr((void **)&bbone_deform->pdef_info_array, + bbone_deform->pdef_info_array, + pdef_info_array); + bbone_deform->num_pchan = totchan; +} diff --git a/source/blender/blenkernel/intern/armature_update.c b/source/blender/blenkernel/intern/armature_update.c index c9e072caa6e..0fba7677479 100644 --- a/source/blender/blenkernel/intern/armature_update.c +++ b/source/blender/blenkernel/intern/armature_update.c @@ -47,6 +47,7 @@ #include "BKE_curve.h" #include "BKE_displist.h" #include "BKE_fcurve.h" +#include "BKE_object.h" #include "BKE_scene.h" #include "BIK_api.h" @@ -585,21 +586,21 @@ BLI_INLINE bPoseChannel *pose_pchan_get_indexed(Object *ob, int pchan_index) void BKE_pose_eval_init(struct Depsgraph *depsgraph, Scene *UNUSED(scene), - Object *ob) + Object *object) { - bPose *pose = ob->pose; + bPose *pose = object->pose; BLI_assert(pose != NULL); - DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob); + DEG_debug_print_eval(depsgraph, __func__, object->id.name, object); - BLI_assert(ob->type == OB_ARMATURE); + BLI_assert(object->type == OB_ARMATURE); /* We demand having proper pose. */ - BLI_assert(ob->pose != NULL); - BLI_assert((ob->pose->flag & POSE_RECALC) == 0); + BLI_assert(object->pose != NULL); + BLI_assert((object->pose->flag & POSE_RECALC) == 0); /* imat is needed for solvers. */ - invert_m4_m4(ob->imat, ob->obmat); + invert_m4_m4(object->imat, object->obmat); /* clear flags */ for (bPoseChannel *pchan = pose->chanbase.first; pchan != NULL; pchan = pchan->next) { @@ -607,6 +608,7 @@ void BKE_pose_eval_init(struct Depsgraph *depsgraph, } pose_pchan_index_create(pose); + BKE_armature_cached_bbone_deformation_free_data(object); } void BKE_pose_eval_init_ik(struct Depsgraph *depsgraph, @@ -746,41 +748,69 @@ void BKE_pose_splineik_evaluate(struct Depsgraph *depsgraph, BKE_splineik_execute_tree(depsgraph, scene, ob, rootchan, ctime); } -void BKE_pose_eval_cleanup(struct Depsgraph *depsgraph, - Scene *scene, - Object *ob) +/* Common part for both original and proxy armatrues. */ +static void pose_eval_done_common(struct Depsgraph *depsgraph, Object *object) { - bPose *pose = ob->pose; + bPose *pose = object->pose; + UNUSED_VARS_NDEBUG(pose); + BLI_assert(pose != NULL); + BKE_armature_cached_bbone_deformation_update(object); + BKE_object_eval_boundbox(depsgraph, object); +} +static void pose_eval_cleanup_common(Object *object) +{ + bPose *pose = object->pose; BLI_assert(pose != NULL); - - float ctime = BKE_scene_frame_get(scene); /* not accurate... */ - DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob); - BLI_assert(ob->type == OB_ARMATURE); - - /* release the IK tree */ - BIK_release_tree(scene, ob, ctime); - BLI_assert(pose->chan_array != NULL || BLI_listbase_is_empty(&pose->chanbase)); MEM_SAFE_FREE(pose->chan_array); } +void BKE_pose_eval_done(struct Depsgraph *depsgraph, Object *object) +{ + bPose *pose = object->pose; + BLI_assert(pose != NULL); + UNUSED_VARS_NDEBUG(pose); + DEG_debug_print_eval(depsgraph, __func__, object->id.name, object); + BLI_assert(object->type == OB_ARMATURE); + pose_eval_done_common(depsgraph, object); +} + +void BKE_pose_eval_cleanup(struct Depsgraph *depsgraph, + Scene *scene, + Object *object) +{ + bPose *pose = object->pose; + BLI_assert(pose != NULL); + UNUSED_VARS_NDEBUG(pose); + const float ctime = BKE_scene_frame_get(scene); /* not accurate... */ + DEG_debug_print_eval(depsgraph, __func__, object->id.name, object); + BLI_assert(object->type == OB_ARMATURE); + /* Release the IK tree. */ + BIK_release_tree(scene, object, ctime); + pose_eval_cleanup_common(object); +} + void BKE_pose_eval_proxy_init(struct Depsgraph *depsgraph, Object *object) { BLI_assert(ID_IS_LINKED(object) && object->proxy_from != NULL); DEG_debug_print_eval(depsgraph, __func__, object->id.name, object); pose_pchan_index_create(object->pose); + BKE_armature_cached_bbone_deformation_free_data(object); } -void BKE_pose_eval_proxy_cleanup(struct Depsgraph *depsgraph, Object *object) +void BKE_pose_eval_proxy_done(struct Depsgraph *depsgraph, Object *object) { BLI_assert(ID_IS_LINKED(object) && object->proxy_from != NULL); DEG_debug_print_eval(depsgraph, __func__, object->id.name, object); + pose_eval_done_common(depsgraph, object); +} - bPose *pose = object->pose; - BLI_assert(pose->chan_array != NULL); - MEM_freeN(pose->chan_array); - pose->chan_array = NULL; +void BKE_pose_eval_proxy_cleanup(struct Depsgraph *depsgraph, Object *object) +{ + BLI_assert(ID_IS_LINKED(object) && object->proxy_from != NULL); + DEG_debug_print_eval(depsgraph, __func__, object->id.name, object); + pose_eval_cleanup_common(object); } void BKE_pose_eval_proxy_copy_bone( diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index d0dea75860e..f1b1aa548d2 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -208,6 +208,17 @@ static void userdef_free_keymaps(UserDef *userdef) BLI_listbase_clear(&userdef->user_keymaps); } +static void userdef_free_keyconfig_prefs(UserDef *userdef) +{ + for (wmKeyConfigPref *kpt = userdef->user_keyconfig_prefs.first, *kpt_next; kpt; kpt = kpt_next) { + kpt_next = kpt->next; + IDP_FreeProperty(kpt->prop); + MEM_freeN(kpt->prop); + MEM_freeN(kpt); + } + BLI_listbase_clear(&userdef->user_keyconfig_prefs); +} + static void userdef_free_user_menus(UserDef *userdef) { for (bUserMenu *um = userdef->user_menus.first, *um_next; um; um = um_next) { @@ -237,6 +248,7 @@ void BKE_blender_userdef_data_free(UserDef *userdef, bool clear_fonts) #endif userdef_free_keymaps(userdef); + userdef_free_keyconfig_prefs(userdef); userdef_free_user_menus(userdef); userdef_free_addons(userdef); diff --git a/source/blender/blenkernel/intern/blender_undo.c b/source/blender/blenkernel/intern/blender_undo.c index a00ad5ff05f..fac3685f7b1 100644 --- a/source/blender/blenkernel/intern/blender_undo.c +++ b/source/blender/blenkernel/intern/blender_undo.c @@ -55,6 +55,7 @@ #include "BKE_main.h" #include "BLO_undofile.h" +#include "BLO_readfile.h" #include "BLO_writefile.h" #include "DEG_depsgraph.h" @@ -81,7 +82,10 @@ bool BKE_memfile_undo_decode(MemFileUndoData *mfu, bContext *C) success = (BKE_blendfile_read(C, mfu->filename, NULL, 0) != BKE_BLENDFILE_READ_FAIL); } else { - success = BKE_blendfile_read_from_memfile(C, &mfu->memfile, NULL, 0); + success = BKE_blendfile_read_from_memfile( + C, &mfu->memfile, + &(const struct BlendFileReadParams){0}, + NULL); } /* Restore, bmain has been re-allocated. */ diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c index 5a975402c90..cc42fe71579 100644 --- a/source/blender/blenkernel/intern/blendfile.c +++ b/source/blender/blenkernel/intern/blendfile.c @@ -114,11 +114,12 @@ static bool wm_scene_is_visible(wmWindowManager *wm, Scene *scene) */ static void setup_app_data( bContext *C, BlendFileData *bfd, - const char *filepath, ReportList *reports) + const char *filepath, + const bool is_startup, + ReportList *reports) { Main *bmain = G_MAIN; Scene *curscene = NULL; - const bool is_startup = (bfd->filename[0] == '\0'); const bool recover = (G.fileflags & G_FILE_RECOVER) != 0; enum { LOAD_UI = 1, @@ -314,7 +315,7 @@ static void setup_app_data( bmain->recovered = 0; /* startup.blend or recovered startup */ - if (bfd->filename[0] == 0) { + if (is_startup) { bmain->name[0] = '\0'; } else if (recover && G.relbase_valid) { @@ -376,7 +377,8 @@ static int handle_subversion_warning(Main *main, ReportList *reports) int BKE_blendfile_read( bContext *C, const char *filepath, - ReportList *reports, int skip_flags) + const struct BlendFileReadParams *params, + ReportList *reports) { BlendFileData *bfd; int retval = BKE_BLENDFILE_READ_OK; @@ -386,7 +388,7 @@ int BKE_blendfile_read( printf("Read blend: %s\n", filepath); } - bfd = BLO_read_from_file(filepath, reports, skip_flags); + bfd = BLO_read_from_file(filepath, params->skip_flags, reports); if (bfd) { if (bfd->user) { retval = BKE_BLENDFILE_READ_OK_USERPREFS; @@ -399,7 +401,7 @@ int BKE_blendfile_read( retval = BKE_BLENDFILE_READ_FAIL; } else { - setup_app_data(C, bfd, filepath, reports); + setup_app_data(C, bfd, filepath, params->is_startup, reports); } } else @@ -409,16 +411,17 @@ int BKE_blendfile_read( } bool BKE_blendfile_read_from_memory( - bContext *C, const void *filebuf, int filelength, - ReportList *reports, int skip_flags, bool update_defaults) + bContext *C, const void *filebuf, int filelength, bool update_defaults, + const struct BlendFileReadParams *params, + ReportList *reports) { BlendFileData *bfd; - bfd = BLO_read_from_memory(filebuf, filelength, reports, skip_flags); + bfd = BLO_read_from_memory(filebuf, filelength, params->skip_flags, reports); if (bfd) { if (update_defaults) BLO_update_defaults_startup_blend(bfd->main, NULL); - setup_app_data(C, bfd, "<memory2>", reports); + setup_app_data(C, bfd, "<memory2>", params->is_startup, reports); } else { BKE_reports_prepend(reports, "Loading failed: "); @@ -430,12 +433,13 @@ bool BKE_blendfile_read_from_memory( /* memfile is the undo buffer */ bool BKE_blendfile_read_from_memfile( bContext *C, struct MemFile *memfile, - ReportList *reports, int skip_flags) + const struct BlendFileReadParams *params, + ReportList *reports) { Main *bmain = CTX_data_main(C); BlendFileData *bfd; - bfd = BLO_read_from_memfile(bmain, BKE_main_blendfile_path(bmain), memfile, reports, skip_flags); + bfd = BLO_read_from_memfile(bmain, BKE_main_blendfile_path(bmain), memfile, params->skip_flags, reports); if (bfd) { /* remove the unused screens and wm */ while (bfd->main->wm.first) @@ -443,7 +447,7 @@ bool BKE_blendfile_read_from_memfile( while (bfd->main->screen.first) BKE_libblock_free(bfd->main, bfd->main->screen.first); - setup_app_data(C, bfd, "<memory1>", reports); + setup_app_data(C, bfd, "<memory1>", params->is_startup, reports); } else { BKE_reports_prepend(reports, "Loading failed: "); @@ -484,7 +488,7 @@ UserDef *BKE_blendfile_userdef_read(const char *filepath, ReportList *reports) BlendFileData *bfd; UserDef *userdef = NULL; - bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF); + bfd = BLO_read_from_file(filepath, BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF, reports); if (bfd) { if (bfd->user) { userdef = bfd->user; @@ -504,7 +508,10 @@ UserDef *BKE_blendfile_userdef_read_from_memory( BlendFileData *bfd; UserDef *userdef = NULL; - bfd = BLO_read_from_memory(filebuf, filelength, reports, BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF); + bfd = BLO_read_from_memory( + filebuf, filelength, + BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF, + reports); if (bfd) { if (bfd->user) { userdef = bfd->user; @@ -567,10 +574,10 @@ WorkspaceConfigFileData *BKE_blendfile_workspace_config_read(const char *filepat WorkspaceConfigFileData *workspace_config = NULL; if (filepath) { - bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_USERDEF); + bfd = BLO_read_from_file(filepath, BLO_READ_SKIP_USERDEF, reports); } else { - bfd = BLO_read_from_memory(filebuf, filelength, reports, BLO_READ_SKIP_USERDEF); + bfd = BLO_read_from_memory(filebuf, filelength, BLO_READ_SKIP_USERDEF, reports); } if (bfd) { diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index 39266eed6fe..f8fd3c56eb1 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -487,17 +487,31 @@ void BKE_brush_gpencil_presets(bContext *C) brush->gpencil_settings->draw_strength = 1.0f; /* Soft Eraser brush */ - brush = BKE_brush_add_gpencil(bmain, ts, "Eraser"); + brush = BKE_brush_add_gpencil(bmain, ts, "Eraser Soft"); brush->size = 30.0f; + brush->gpencil_settings->draw_strength = 0.5f; brush->gpencil_settings->flag |= (GP_BRUSH_ENABLE_CURSOR | GP_BRUSH_DEFAULT_ERASER); + brush->gpencil_settings->flag |= GP_BRUSH_USE_PRESSURE; + brush->gpencil_settings->flag |= GP_BRUSH_USE_STENGTH_PRESSURE; brush->gpencil_settings->icon_id = GP_BRUSH_ICON_ERASE_SOFT; brush->gpencil_tool = GPAINT_TOOL_ERASE; brush->gpencil_settings->eraser_mode = GP_BRUSH_ERASER_SOFT; brush->gpencil_settings->era_strength_f = 100.0f; - brush->gpencil_settings->era_thickness_f = 0.10f; + brush->gpencil_settings->era_thickness_f = 10.0f; /* Hard Eraser brush */ - brush = BKE_brush_add_gpencil(bmain, ts, "Eraser Vertex"); + brush = BKE_brush_add_gpencil(bmain, ts, "Eraser Hard"); + brush->size = 30.0f; + brush->gpencil_settings->draw_strength = 1.0f; + brush->gpencil_settings->flag |= (GP_BRUSH_ENABLE_CURSOR | GP_BRUSH_DEFAULT_ERASER); + brush->gpencil_settings->icon_id = GP_BRUSH_ICON_ERASE_HARD; + brush->gpencil_tool = GPAINT_TOOL_ERASE; + brush->gpencil_settings->eraser_mode = GP_BRUSH_ERASER_SOFT; + brush->gpencil_settings->era_strength_f = 100.0f; + brush->gpencil_settings->era_thickness_f = 50.0f; + + /* Point Eraser brush */ + brush = BKE_brush_add_gpencil(bmain, ts, "Eraser Point"); brush->size = 30.0f; brush->gpencil_settings->flag |= GP_BRUSH_ENABLE_CURSOR; brush->gpencil_settings->icon_id = GP_BRUSH_ICON_ERASE_HARD; diff --git a/source/blender/blenkernel/intern/colorband.c b/source/blender/blenkernel/intern/colorband.c index 38631c76009..7fc1124a422 100644 --- a/source/blender/blenkernel/intern/colorband.c +++ b/source/blender/blenkernel/intern/colorband.c @@ -78,7 +78,9 @@ void BKE_colorband_init(ColorBand *coba, bool rangetype) } coba->tot = 2; + coba->cur = 0; coba->color_mode = COLBAND_BLEND_RGB; + coba->ipotype = COLBAND_INTERP_LINEAR; } static void colorband_init_from_table_rgba_simple( diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 96480862b93..96df4f402c5 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -5107,7 +5107,7 @@ bConstraint *BKE_constraint_find_from_target(Object *ob, bConstraintTarget *tgt, /* Finds the original copy of the constraint based on a COW copy. */ static bConstraint *constraint_find_original(Object *ob, bPoseChannel *pchan, bConstraint *con, Object **r_orig_ob) { - Object *orig_ob = (Object*)DEG_get_original_id((ID*)ob); + Object *orig_ob = (Object *)DEG_get_original_id(&ob->id); if (ELEM(orig_ob, NULL, ob)) { return NULL; @@ -5139,7 +5139,7 @@ static bConstraint *constraint_find_original(Object *ob, bPoseChannel *pchan, bC int index = BLI_findindex(constraints, con); if (index >= 0) { - bConstraint *orig_con = (bConstraint*)BLI_findlink(orig_constraints, index); + bConstraint *orig_con = BLI_findlink(orig_constraints, index); /* Verify it has correct type and name. */ if (orig_con && orig_con->type == con->type && STREQ(orig_con->name, con->name)) { @@ -5251,7 +5251,7 @@ void BKE_constraint_target_matrix_get(struct Depsgraph *depsgraph, Scene *scene, cti->get_constraint_targets(con, &targets); /* only calculate the target matrix on the first target */ - ct = (bConstraintTarget *)BLI_findlink(&targets, index); + ct = BLI_findlink(&targets, index); if (ct) { if (cti->get_target_matrix) diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index 2f960a3a349..872b5074e4e 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -357,7 +357,7 @@ void BKE_curve_texspace_calc(Curve *cu) } } -void BKE_curve_texspace_get(Curve *cu, float r_loc[3], float r_rot[3], float r_size[3]) +BoundBox *BKE_curve_texspace_get(Curve *cu, float r_loc[3], float r_rot[3], float r_size[3]) { if (cu->bb == NULL || (cu->bb->flag & BOUNDBOX_DIRTY)) { BKE_curve_texspace_calc(cu); @@ -366,6 +366,8 @@ void BKE_curve_texspace_get(Curve *cu, float r_loc[3], float r_rot[3], float r_s if (r_loc) copy_v3_v3(r_loc, cu->loc); if (r_rot) copy_v3_v3(r_rot, cu->rot); if (r_size) copy_v3_v3(r_size, cu->size); + + return cu->bb; } bool BKE_nurbList_index_get_co(ListBase *nurb, const int index, float r_co[3]) diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 7e692330b79..5453982b070 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -915,10 +915,13 @@ void dynamicPaint_freeSurfaceData(DynamicPaintSurface *surface) surface->data = NULL; } -void dynamicPaint_freeSurface(DynamicPaintSurface *surface) +void dynamicPaint_freeSurface(const DynamicPaintModifierData *pmd, + DynamicPaintSurface *surface) { /* point cache */ - BKE_ptcache_free_list(&(surface->ptcaches)); + if ((pmd->modifier.flag & eModifierFlag_SharedCaches) == 0) { + BKE_ptcache_free_list(&(surface->ptcaches)); + } surface->pointcache = NULL; if (surface->effector_weights) @@ -940,7 +943,7 @@ void dynamicPaint_freeCanvas(DynamicPaintModifierData *pmd) while (surface) { next_surface = surface->next; - dynamicPaint_freeSurface(surface); + dynamicPaint_freeSurface(pmd, surface); surface = next_surface; } @@ -1139,7 +1142,9 @@ bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, str return true; } -void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tpmd) +void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, + struct DynamicPaintModifierData *tpmd, + int flag) { /* Init modifier */ tpmd->type = pmd->type; @@ -1154,11 +1159,19 @@ void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, stru tpmd->canvas->pmd = tpmd; /* free default surface */ if (tpmd->canvas->surfaces.first) - dynamicPaint_freeSurface(tpmd->canvas->surfaces.first); + dynamicPaint_freeSurface(tpmd, tpmd->canvas->surfaces.first); /* copy existing surfaces */ for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) { DynamicPaintSurface *t_surface = dynamicPaint_createNewSurface(tpmd->canvas, NULL); + if (flag & LIB_ID_CREATE_NO_MAIN) { + /* TODO(sergey): Consider passing some tips to the surface + * creation to avoid this allocate-and-free cache behavior. */ + BKE_ptcache_free_list(&t_surface->ptcaches); + tpmd->modifier.flag |= eModifierFlag_SharedCaches; + t_surface->ptcaches = surface->ptcaches; + t_surface->pointcache = surface->pointcache; + } /* surface settings */ t_surface->brush_group = surface->brush_group; diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index f2225bca3f5..98d255df080 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -211,46 +211,6 @@ void BKE_gpencil_free_layers(ListBase *list) } } -/* clear all runtime derived data */ -static void BKE_gpencil_clear_derived(bGPDlayer *gpl) -{ - if (gpl->runtime.derived_array == NULL) { - return; - } - - for (int i = 0; i < gpl->runtime.len_derived; i++) { - bGPDframe *derived_gpf = &gpl->runtime.derived_array[i]; - BKE_gpencil_free_frame_runtime_data(derived_gpf); - derived_gpf = NULL; - } - gpl->runtime.len_derived = 0; - MEM_SAFE_FREE(gpl->runtime.derived_array); -} - -/* Free all of the gp-layers temp data*/ -static void BKE_gpencil_free_layers_temp_data(ListBase *list) -{ - bGPDlayer *gpl_next; - - /* error checking */ - if (list == NULL) return; - /* delete layers */ - for (bGPDlayer *gpl = list->first; gpl; gpl = gpl_next) { - gpl_next = gpl->next; - BKE_gpencil_clear_derived(gpl); - } -} - -/* Free temp gpf derived frames */ -void BKE_gpencil_free_derived_frames(bGPdata *gpd) -{ - /* error checking */ - if (gpd == NULL) return; - for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) { - BKE_gpencil_clear_derived(gpl); - } -} - /** Free (or release) any data used by this grease pencil (does not free the gpencil itself). */ void BKE_gpencil_free(bGPdata *gpd, bool free_all) { @@ -258,9 +218,6 @@ void BKE_gpencil_free(bGPdata *gpd, bool free_all) BKE_animdata_free(&gpd->id, false); /* free layers */ - if (free_all) { - BKE_gpencil_free_layers_temp_data(&gpd->layers); - } BKE_gpencil_free_layers(&gpd->layers); /* materials */ @@ -639,8 +596,6 @@ bGPDlayer *BKE_gpencil_layer_duplicate(const bGPDlayer *gpl_src) /* make a copy of source layer */ gpl_dst = MEM_dupallocN(gpl_src); gpl_dst->prev = gpl_dst->next = NULL; - gpl_dst->runtime.derived_array = NULL; - gpl_dst->runtime.len_derived = 0; /* copy frames */ BLI_listbase_clear(&gpl_dst->frames); @@ -1031,9 +986,6 @@ void BKE_gpencil_layer_delete(bGPdata *gpd, bGPDlayer *gpl) /* free icon providing preview of icon color */ BKE_icon_delete(gpl->runtime.icon_id); - /* free derived data */ - BKE_gpencil_clear_derived(gpl); - BLI_freelinkN(&gpd->layers, gpl); } diff --git a/source/blender/blenkernel/intern/keyconfig.c b/source/blender/blenkernel/intern/keyconfig.c new file mode 100644 index 00000000000..755c9e1582d --- /dev/null +++ b/source/blender/blenkernel/intern/keyconfig.c @@ -0,0 +1,123 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/blenkernel/intern/keyconfig.c + * \ingroup bke + */ + +#include <stddef.h> +#include <stdlib.h> + +#include "RNA_types.h" + +#include "BLI_utildefines.h" +#include "BLI_ghash.h" +#include "BLI_listbase.h" +#include "BLI_string.h" + +#include "DNA_listBase.h" +#include "DNA_userdef_types.h" +#include "DNA_windowmanager_types.h" + +#include "BKE_keyconfig.h" /* own include */ +#include "BKE_idprop.h" + +#include "MEM_guardedalloc.h" + + +/* -------------------------------------------------------------------- */ +/** \name Key-Config Preference (UserDef) API + * + * \see #BKE_addon_pref_type_init for logic this is bases on. + * \{ */ + +wmKeyConfigPref *BKE_keyconfig_pref_ensure(UserDef *userdef, const char *kc_idname) +{ + wmKeyConfigPref *kpt = BLI_findstring( + &userdef->user_keyconfig_prefs, kc_idname, offsetof(wmKeyConfigPref, idname)); + if (kpt == NULL) { + kpt = MEM_callocN(sizeof(*kpt), __func__); + STRNCPY(kpt->idname, kc_idname); + BLI_addtail(&userdef->user_keyconfig_prefs, kpt); + } + if (kpt->prop == NULL) { + IDPropertyTemplate val = {0}; + kpt->prop = IDP_New(IDP_GROUP, &val, kc_idname); /* name is unimportant */ + } + return kpt; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Key-Config Preference (RNA Type) API + * + * \see #BKE_addon_pref_type_init for logic this is bases on. + * \{ */ + +static GHash *global_keyconfigpreftype_hash = NULL; + + +wmKeyConfigPrefType_Runtime *BKE_keyconfig_pref_type_find(const char *idname, bool quiet) +{ + if (idname[0]) { + wmKeyConfigPrefType_Runtime *kpt_rt; + + kpt_rt = BLI_ghash_lookup(global_keyconfigpreftype_hash, idname); + if (kpt_rt) { + return kpt_rt; + } + + if (!quiet) { + printf("search for unknown keyconfig-pref '%s'\n", idname); + } + } + else { + if (!quiet) { + printf("search for empty keyconfig-pref\n"); + } + } + + return NULL; +} + +void BKE_keyconfig_pref_type_add(wmKeyConfigPrefType_Runtime *kpt_rt) +{ + BLI_ghash_insert(global_keyconfigpreftype_hash, kpt_rt->idname, kpt_rt); +} + +void BKE_keyconfig_pref_type_remove(const wmKeyConfigPrefType_Runtime *kpt_rt) +{ + BLI_ghash_remove(global_keyconfigpreftype_hash, kpt_rt->idname, NULL, MEM_freeN); +} + +void BKE_keyconfig_pref_type_init(void) +{ + BLI_assert(global_keyconfigpreftype_hash == NULL); + global_keyconfigpreftype_hash = BLI_ghash_str_new(__func__); +} + +void BKE_keyconfig_pref_type_free(void) +{ + BLI_ghash_free(global_keyconfigpreftype_hash, NULL, MEM_freeN); + global_keyconfigpreftype_hash = NULL; +} + +/** \} */ diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index 0e4a38503ae..2f9c818934f 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -726,6 +726,7 @@ static short layer_collection_sync( if (base->flag & BASE_HIDDEN) { view_layer->runtime_flag |= VIEW_LAYER_HAS_HIDE; + lc->runtime_flag |= LAYER_COLLECTION_HAS_HIDDEN_OBJECTS; } else if (base->flag & BASE_VISIBLE) { lc->runtime_flag |= LAYER_COLLECTION_HAS_VISIBLE_OBJECTS; diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 0e64b9dd6d0..6741ebf39d2 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -244,7 +244,10 @@ Material *BKE_material_localize(Material *ma) man->nodetree = ntreeLocalize(ma->nodetree); } - /* man->gp_style = NULL; */ /* XXX: We probably don't want to clear here, or else we may get problems with COW later? */ + if (ma->gp_style != NULL) { + man->gp_style = MEM_dupallocN(ma->gp_style); + } + BLI_listbase_clear(&man->gpumaterial); /* TODO Duplicate Engine Settings and set runtime to NULL */ diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 6a00aaf576b..0942cb071a3 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -718,7 +718,7 @@ Mesh *BKE_mesh_copy(Main *bmain, const Mesh *me) } BMesh *BKE_mesh_to_bmesh_ex( - Mesh *me, + const Mesh *me, const struct BMeshCreateParams *create_params, const struct BMeshFromMeshParams *convert_params) { @@ -926,7 +926,7 @@ BoundBox *BKE_mesh_boundbox_get(Object *ob) return me->bb; } -void BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_rot[3], float r_size[3]) +BoundBox *BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_rot[3], float r_size[3]) { if (me->bb == NULL || (me->bb->flag & BOUNDBOX_DIRTY)) { BKE_mesh_texspace_calc(me); @@ -935,6 +935,8 @@ void BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_rot[3], float r_siz if (r_loc) copy_v3_v3(r_loc, me->loc); if (r_rot) copy_v3_v3(r_rot, me->rot); if (r_size) copy_v3_v3(r_size, me->size); + + return me->bb; } void BKE_mesh_texspace_get_reference(Mesh *me, short **r_texflag, float **r_loc, float **r_rot, float **r_size) diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 8f02b51fd5f..a21e919bca7 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -282,21 +282,6 @@ static MDisps *multires_mdisps_initialize_hidden(Mesh *me, int level) return mdisps; } -DerivedMesh *get_multires_dm(struct Depsgraph *depsgraph, Scene *scene, MultiresModifierData *mmd, Object *ob) -{ - ModifierData *md = (ModifierData *)mmd; - DerivedMesh *tdm = mesh_get_derived_deform(depsgraph, scene, ob, CD_MASK_BAREMESH); - DerivedMesh *dm; - ModifierEvalContext mectx = {depsgraph, ob, MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY}; - - dm = modifier_applyModifier_DM_deprecated(md, &mectx, tdm); - if (dm == tdm) { - dm = CDDM_copy(tdm); - } - - return dm; -} - Mesh *BKE_multires_create_mesh( struct Depsgraph *depsgraph, Scene *scene, diff --git a/source/blender/blenkernel/intern/multires_reshape.c b/source/blender/blenkernel/intern/multires_reshape.c index fe4bc5ca3e0..72be2617798 100644 --- a/source/blender/blenkernel/intern/multires_reshape.c +++ b/source/blender/blenkernel/intern/multires_reshape.c @@ -875,8 +875,6 @@ static bool multires_reshape_from_vertcos( Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); Mesh *coarse_mesh = object->data; MDisps *mdisps = CustomData_get_layer(&coarse_mesh->ldata, CD_MDISPS); - /* Make sure displacement grids are ready. */ - multires_reshape_ensure_grids(coarse_mesh, mmd->totlvl); /* Pick maximum between multires level and dispalcement level. * This is because mesh can be used by objects with multires at different * levels. @@ -885,6 +883,8 @@ static bool multires_reshape_from_vertcos( * mdisps->level. */ const int top_level = max_ii(mmd->totlvl, mdisps->level); + /* Make sure displacement grids are ready. */ + multires_reshape_ensure_grids(coarse_mesh, top_level); /* Construct context. */ MultiresReshapeFromDeformedVertsContext reshape_deformed_verts_ctx = { .reshape_ctx = { @@ -1166,8 +1166,6 @@ bool multiresModifier_reshapeFromCCG( GridPaintMask *grid_paint_mask = CustomData_get_layer(&coarse_mesh->ldata, CD_GRID_PAINT_MASK); Subdiv *subdiv = subdiv_ccg->subdiv; - /* Make sure displacement grids are ready. */ - multires_reshape_ensure_grids(coarse_mesh, tot_level); /* Pick maximum between multires level and dispalcement level. * This is because mesh can be used by objects with multires at different * levels. @@ -1176,6 +1174,8 @@ bool multiresModifier_reshapeFromCCG( * mdisps->level. */ const int top_level = max_ii(tot_level, mdisps->level); + /* Make sure displacement grids are ready. */ + multires_reshape_ensure_grids(coarse_mesh, top_level); /* Construct context. */ ReshapeFromCCGTaskData data = { .reshape_ctx = { diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index d36a5838630..95e51481d9a 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -458,6 +458,7 @@ void BKE_object_free_derived_caches(Object *ob) object_update_from_subsurf_ccg(ob); BKE_object_free_derived_mesh_caches(ob); + BKE_armature_cached_bbone_deformation_free(ob); if (ob->runtime.mesh_eval != NULL) { Mesh *mesh_eval = ob->runtime.mesh_eval; @@ -835,7 +836,8 @@ void BKE_object_init(Object *ob) ob->empty_image_depth = OB_EMPTY_IMAGE_DEPTH_DEFAULT; ob->empty_image_visibility_flag = ( OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE | - OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC); + OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC | + OB_EMPTY_IMAGE_VISIBLE_BACKSIDE); if (ob->type == OB_EMPTY) { copy_v2_fl(ob->ima_ofs, -0.5f); } @@ -2028,69 +2030,29 @@ static void give_parvert(Object *par, int nr, float vec[3]) if (par->type == OB_MESH) { Mesh *me = par->data; BMEditMesh *em = me->edit_btmesh; - DerivedMesh *dm = NULL; Mesh *me_eval = (em) ? em->mesh_eval_final : par->runtime.mesh_eval; - /* Keep this until subsurf code ported away from derived mesh - campbell. */ - dm = par->derivedFinal; - if (dm && dm->type != DM_TYPE_CCGDM) { - dm = NULL; - } - if (me_eval) { int count = 0; const int numVerts = me_eval->totvert; if (nr < numVerts) { - bool use_special_ss_case = false; - - if (dm && dm->type == DM_TYPE_CCGDM) { - ModifierData *md; - VirtualModifierData virtualModifierData; - use_special_ss_case = true; - for (md = modifiers_getVirtualModifierList(par, &virtualModifierData); - md != NULL; - md = md->next) - { - const ModifierTypeInfo *mti = modifierType_getInfo(md->type); - /* TODO(sergey): Check for disabled modifiers. */ - if (mti->type != eModifierTypeType_OnlyDeform && md->next != NULL) { - use_special_ss_case = false; - break; - } - } - } - - if (!use_special_ss_case) { - /* avoid dm->getVertDataArray() since it allocates arrays in the dm (not thread safe) */ - if (em && me_eval->runtime.is_original) { - if (em->bm->elem_table_dirty & BM_VERT) { + if (em && me_eval->runtime.is_original) { + if (em->bm->elem_table_dirty & BM_VERT) { #ifdef VPARENT_THREADING_HACK - BLI_mutex_lock(&vparent_lock); - if (em->bm->elem_table_dirty & BM_VERT) { - BM_mesh_elem_table_ensure(em->bm, BM_VERT); - } - BLI_mutex_unlock(&vparent_lock); -#else - BLI_assert(!"Not safe for threading"); + BLI_mutex_lock(&vparent_lock); + if (em->bm->elem_table_dirty & BM_VERT) { BM_mesh_elem_table_ensure(em->bm, BM_VERT); -#endif } + BLI_mutex_unlock(&vparent_lock); +#else + BLI_assert(!"Not safe for threading"); + BM_mesh_elem_table_ensure(em->bm, BM_VERT); +#endif } } - if (use_special_ss_case) { - /* Special case if the last modifier is SS and no constructive modifier are in front of it. */ - CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm; - CCGVert *ccg_vert = ccgSubSurf_getVert(ccgdm->ss, POINTER_FROM_INT(nr)); - /* In case we deleted some verts, nr may refer to inexistent one now, see T42557. */ - if (ccg_vert) { - float *co = ccgSubSurf_getVertData(ccgdm->ss, ccg_vert); - add_v3_v3(vec, co); - count++; - } - } - else if (CustomData_has_layer(&me_eval->vdata, CD_ORIGINDEX) && + if (CustomData_has_layer(&me_eval->vdata, CD_ORIGINDEX) && !(em && me_eval->runtime.is_original)) { const int *index = CustomData_get_layer(&me_eval->vdata, CD_ORIGINDEX); @@ -2125,7 +2087,7 @@ static void give_parvert(Object *par, int nr, float vec[3]) } else { fprintf(stderr, - "%s: DerivedMesh is needed to solve parenting, " + "%s: Evaluated mesh is needed to solve parenting, " "object position can be wrong now\n", __func__); } } @@ -4079,3 +4041,21 @@ bool BKE_object_modifier_update_subframe( return false; } + +bool BKE_image_empty_visible_in_view3d(const Object *ob, const RegionView3D *rv3d) +{ + int visibility_flag = ob->empty_image_visibility_flag; + + if ((visibility_flag & OB_EMPTY_IMAGE_VISIBLE_BACKSIDE) == 0) { + if (dot_v3v3((float *)&ob->obmat[2], (float *)&rv3d->viewinv[2]) < 0.0f) { + return false; + } + } + + if (rv3d->is_persp) { + return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE; + } + else { + return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC; + } +}
\ No newline at end of file diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c index 267f64aa53f..dc144f48b05 100644 --- a/source/blender/blenkernel/intern/object_update.c +++ b/source/blender/blenkernel/intern/object_update.c @@ -135,7 +135,7 @@ void BKE_object_eval_constraints(Depsgraph *depsgraph, BKE_constraints_clear_evalob(cob); } -void BKE_object_eval_done(Depsgraph *depsgraph, Object *ob) +void BKE_object_eval_transform_final(Depsgraph *depsgraph, Object *ob) { DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob); @@ -149,14 +149,6 @@ void BKE_object_eval_done(Depsgraph *depsgraph, Object *ob) copy_m4_m4(ob_orig->constinv, ob->constinv); ob_orig->transflag = ob->transflag; ob_orig->flag = ob->flag; - - BoundBox *bb = BKE_object_boundbox_get(ob); - if (bb != NULL) { - if (ob_orig->bb == NULL) { - ob_orig->bb = MEM_mallocN(sizeof(*ob_orig->bb), __func__); - } - *ob_orig->bb = *bb; - } } } @@ -276,8 +268,22 @@ void BKE_object_handle_data_update( psys = psys->next; } } + BKE_object_eval_boundbox(depsgraph, ob); +} - /* quick cache removed */ +void BKE_object_eval_boundbox(Depsgraph *depsgraph, Object *object) +{ + if (!DEG_is_active(depsgraph)) { + return; + } + Object *ob_orig = DEG_get_original_object(object); + BoundBox *bb = BKE_object_boundbox_get(object); + if (bb != NULL) { + if (ob_orig->bb == NULL) { + ob_orig->bb = MEM_mallocN(sizeof(*ob_orig->bb), __func__); + } + *ob_orig->bb = *bb; + } } bool BKE_object_eval_proxy_copy(Depsgraph *depsgraph, @@ -364,7 +370,7 @@ void BKE_object_eval_transform_all(Depsgraph *depsgraph, BKE_object_eval_constraints(depsgraph, scene, object); } BKE_object_eval_uber_transform(depsgraph, object); - BKE_object_eval_done(depsgraph, object); + BKE_object_eval_transform_final(depsgraph, object); } void BKE_object_eval_update_shading(Depsgraph *depsgraph, Object *object) diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index 24782af4d22..9445981538e 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -689,29 +689,30 @@ bool BKE_paint_ensure(const ToolSettings *ts, struct Paint **r_paint) paint->flags |= PAINT_SHOW_BRUSH; + *r_paint = paint; + BKE_paint_runtime_init(ts, paint); - *r_paint = paint; return false; } void BKE_paint_init(Main *bmain, Scene *sce, ePaintMode mode, const char col[3]) { UnifiedPaintSettings *ups = &sce->toolsettings->unified_paint_settings; - Brush *brush; Paint *paint = BKE_paint_get_active_from_paintmode(sce, mode); /* If there's no brush, create one */ - brush = BKE_paint_brush(paint); - if (brush == NULL) { - eObjectMode ob_mode = BKE_paint_object_mode_from_paintmode(mode); - brush = BKE_brush_first_search(bmain, ob_mode); - - if (!brush) { - brush = BKE_brush_add(bmain, "Brush", ob_mode); - id_us_min(&brush->id); /* fake user only */ + if (PAINT_MODE_HAS_BRUSH(mode)) { + Brush *brush = BKE_paint_brush(paint); + if (brush == NULL) { + eObjectMode ob_mode = BKE_paint_object_mode_from_paintmode(mode); + brush = BKE_brush_first_search(bmain, ob_mode); + if (!brush) { + brush = BKE_brush_add(bmain, "Brush", ob_mode); + id_us_min(&brush->id); /* fake user only */ + } + BKE_paint_brush_set(paint, brush); } - BKE_paint_brush_set(paint, brush); } memcpy(paint->paint_cursor_col, col, 3); diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index f4e918da4f0..5213afc3805 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -775,65 +775,65 @@ void BKE_scene_init(Scene *sce) /* GP Sculpt brushes */ { - GP_BrushEdit_Settings *gset = &sce->toolsettings->gp_sculpt; - GP_EditBrush_Data *gp_brush; + GP_Sculpt_Settings *gset = &sce->toolsettings->gp_sculpt; + GP_Sculpt_Data *gp_brush; float curcolor_add[3], curcolor_sub[3]; ARRAY_SET_ITEMS(curcolor_add, 1.0f, 0.6f, 0.6f); ARRAY_SET_ITEMS(curcolor_sub, 0.6f, 0.6f, 1.0f); - gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_SMOOTH]; + gp_brush = &gset->brush[GP_SCULPT_TYPE_SMOOTH]; gp_brush->size = 25; gp_brush->strength = 0.3f; - gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE | GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_SMOOTH_PRESSURE | GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); - gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_THICKNESS]; + gp_brush = &gset->brush[GP_SCULPT_TYPE_THICKNESS]; gp_brush->size = 25; gp_brush->strength = 0.5f; - gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); - gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_STRENGTH]; + gp_brush = &gset->brush[GP_SCULPT_TYPE_STRENGTH]; gp_brush->size = 25; gp_brush->strength = 0.5f; - gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); - gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_GRAB]; + gp_brush = &gset->brush[GP_SCULPT_TYPE_GRAB]; gp_brush->size = 50; gp_brush->strength = 0.3f; - gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); - gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_PUSH]; + gp_brush = &gset->brush[GP_SCULPT_TYPE_PUSH]; gp_brush->size = 25; gp_brush->strength = 0.3f; - gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); - gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_TWIST]; + gp_brush = &gset->brush[GP_SCULPT_TYPE_TWIST]; gp_brush->size = 50; - gp_brush->strength = 0.3f; // XXX? - gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->strength = 0.3f; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); - gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_PINCH]; + gp_brush = &gset->brush[GP_SCULPT_TYPE_PINCH]; gp_brush->size = 50; - gp_brush->strength = 0.5f; // XXX? - gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->strength = 0.5f; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); - gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_RANDOMIZE]; + gp_brush = &gset->brush[GP_SCULPT_TYPE_RANDOMIZE]; gp_brush->size = 25; gp_brush->strength = 0.5f; - gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); } diff --git a/source/blender/blenkernel/intern/studiolight.c b/source/blender/blenkernel/intern/studiolight.c index df5cc7551aa..f949fcaea07 100644 --- a/source/blender/blenkernel/intern/studiolight.c +++ b/source/blender/blenkernel/intern/studiolight.c @@ -58,25 +58,23 @@ /* Statics */ static ListBase studiolights; static int last_studiolight_id = 0; -#define STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE 128 -#define STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT 32 -#define STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH (STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT * 2) +#define STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE 96 +#define STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT 32 +#define STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH (STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT * 2) -#define STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE 0 -#define STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS 1 /* * The method to calculate the irradiance buffers * The irradiance buffer is only shown in the background when in LookDev. * * STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE is very slow, but very accurate * STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS is faster but has artifacts + * Cannot have both enabled at the same time!!! */ -// #define STUDIOLIGHT_IRRADIANCE_METHOD STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE -#define STUDIOLIGHT_IRRADIANCE_METHOD STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS +// #define STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE +#define STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 2 -# define STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING -#endif +/* Temporarily disabled due to the creation of textures with -nan(ind)s */ +#define STUDIOLIGHT_SH_WINDOWING 0.0f /* 0.0 is disabled */ /* * Disable this option so caches are not loaded from disk @@ -88,6 +86,34 @@ static const char *STUDIOLIGHT_CAMERA_FOLDER = "studiolights/camera/"; static const char *STUDIOLIGHT_WORLD_FOLDER = "studiolights/world/"; static const char *STUDIOLIGHT_MATCAP_FOLDER = "studiolights/matcap/"; +/* ITER MACRO */ + +/** Iter on all pixel giving texel center position and pixel pointer. + * Arguments + * type : type of src. + * src : source buffer. + * channels : number of channels per pixel. + * + * Others + * x, y : normalized UV coordinate [0..1] of the current pixel center. + * texel_size[2] : UV size of a pixel in this texture. + * pixel[] : pointer to the current pixel. + */ +#define ITER_PIXELS(type, src, channels, width, height) \ +{ \ + float texel_size[2]; \ + texel_size[0] = 1.0f / width; \ + texel_size[1] = 1.0f / height; \ + type (*pixel_)[channels] = (type (*)[channels])src; \ + for (float y = 0.5 * texel_size[1]; y < 1.0; y += texel_size[1]) { \ + for (float x = 0.5 * texel_size[0]; x < 1.0; x += texel_size[0], pixel_++) { \ + type *pixel = *pixel_; + +#define ITER_PIXELS_END \ + } \ + } \ +} ((void)0) + /* FUNCTIONS */ #define IMB_SAFE_FREE(p) do { \ if (p) { \ @@ -123,13 +149,12 @@ static void studiolight_free(struct StudioLight *sl) for (int index = 0; index < 6; index++) { IMB_SAFE_FREE(sl->radiance_cubemap_buffers[index]); } - GPU_TEXTURE_SAFE_FREE(sl->equirectangular_radiance_gputexture); - GPU_TEXTURE_SAFE_FREE(sl->equirectangular_irradiance_gputexture); - IMB_SAFE_FREE(sl->equirectangular_radiance_buffer); - IMB_SAFE_FREE(sl->equirectangular_irradiance_buffer); + GPU_TEXTURE_SAFE_FREE(sl->equirect_radiance_gputexture); + GPU_TEXTURE_SAFE_FREE(sl->equirect_irradiance_gputexture); + IMB_SAFE_FREE(sl->equirect_radiance_buffer); + IMB_SAFE_FREE(sl->equirect_irradiance_buffer); MEM_SAFE_FREE(sl->path_irr_cache); MEM_SAFE_FREE(sl->path_sh_cache); - MEM_SAFE_FREE(sl->gpu_matcap_3components); MEM_SAFE_FREE(sl); } @@ -159,13 +184,13 @@ static struct StudioLight *studiolight_create(int flag) return sl; } -static void direction_to_equirectangular(float r[2], const float dir[3]) +static void direction_to_equirect(float r[2], const float dir[3]) { r[0] = (atan2f(dir[1], dir[0]) - M_PI) / -(M_PI * 2); r[1] = (acosf(dir[2] / 1.0) - M_PI) / -M_PI; } -static void equirectangular_to_direction(float r[3], float u, float v) +static void equirect_to_direction(float r[3], float u, float v) { float phi = (-(M_PI * 2)) * u + M_PI; float theta = -M_PI * v + M_PI; @@ -175,38 +200,47 @@ static void equirectangular_to_direction(float r[3], float u, float v) r[2] = cosf(theta); } -static void studiolight_calculate_radiance(ImBuf *ibuf, float color[4], const float direction[3]) +static void UNUSED_FUNCTION(direction_to_cube_face_uv)(float r_uv[2], int *r_face, const float dir[3]) { - float uv[2]; - direction_to_equirectangular(uv, direction); - nearest_interpolation_color_wrap(ibuf, NULL, color, uv[0] * ibuf->x, uv[1] * ibuf->y); + if (fabsf(dir[0]) > fabsf(dir[1]) && fabsf(dir[0]) > fabsf(dir[2])) { + bool is_pos = (dir[0] > 0.0f); + *r_face = is_pos ? STUDIOLIGHT_X_POS : STUDIOLIGHT_X_NEG; + r_uv[0] = dir[2] / fabsf(dir[0]) * (is_pos ? 1 : -1); + r_uv[1] = dir[1] / fabsf(dir[0]) * (is_pos ? -1 : -1); + } + else if (fabsf(dir[1]) > fabsf(dir[0]) && fabsf(dir[1]) > fabsf(dir[2])) { + bool is_pos = (dir[1] > 0.0f); + *r_face = is_pos ? STUDIOLIGHT_Y_POS : STUDIOLIGHT_Y_NEG; + r_uv[0] = dir[0] / fabsf(dir[1]) * (is_pos ? 1 : 1); + r_uv[1] = dir[2] / fabsf(dir[1]) * (is_pos ? -1 : 1); + } + else { + bool is_pos = (dir[2] > 0.0f); + *r_face = is_pos ? STUDIOLIGHT_Z_NEG : STUDIOLIGHT_Z_POS; + r_uv[0] = dir[0] / fabsf(dir[2]) * (is_pos ? -1 : 1); + r_uv[1] = dir[1] / fabsf(dir[2]) * (is_pos ? -1 : -1); + } + r_uv[0] = r_uv[0] * 0.5f + 0.5f; + r_uv[1] = r_uv[1] * 0.5f + 0.5f; } -static void studiolight_calculate_radiance_buffer( - ImBuf *ibuf, float *colbuf, - const float start_x, const float add_x, - const float start_y, const float add_y, const float z, - const int index_x, const int index_y, const int index_z) +static void cube_face_uv_to_direction(float r_dir[3], float x, float y, int face) { - float direction[3]; - float yf = start_y; - float xf; - float *color = colbuf; - - for (int y = 0; y < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; y++, yf += add_y) { - xf = start_x; - for (int x = 0; x < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; x++, xf += add_x) { - direction[index_x] = xf; - direction[index_y] = yf; - direction[index_z] = z; - normalize_v3(direction); - studiolight_calculate_radiance(ibuf, color, direction); - color += 4; - } - } + const float conversion_matrices[6][3][3] = { + {{ 0.0f, 0.0f, 1.0f}, {0.0f, -1.0f, 0.0f}, { 1.0f, 0.0f, 0.0f}}, + {{ 0.0f, 0.0f, -1.0f}, {0.0f, -1.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}}, + {{ 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, -1.0f}, { 0.0f, 1.0f, 0.0f}}, + {{ 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 1.0f}, { 0.0f, -1.0f, 0.0f}}, + {{ 1.0f, 0.0f, 0.0f}, {0.0f, -1.0f, 0.0f}, { 0.0f, 0.0f, -1.0f}}, + {{-1.0f, 0.0f, 0.0f}, {0.0f, -1.0f, 0.0f}, { 0.0f, 0.0f, 1.0f}} + }; + + copy_v3_fl3(r_dir, x * 2.0f - 1.0f, y * 2.0f - 1.0f, 1.0f); + mul_m3_v3(conversion_matrices[face], r_dir); + normalize_v3(r_dir); } -static void studiolight_load_equirectangular_image(StudioLight *sl) +static void studiolight_load_equirect_image(StudioLight *sl) { if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) { ImBuf *ibuf = NULL; @@ -217,98 +251,123 @@ static void studiolight_load_equirectangular_image(StudioLight *sl) ibuf = IMB_allocFromBuffer(NULL, colbuf, 1, 1); } IMB_float_from_rect(ibuf); - sl->equirectangular_radiance_buffer = ibuf; + sl->equirect_radiance_buffer = ibuf; } sl->flag |= STUDIOLIGHT_EXTERNAL_IMAGE_LOADED; } -static void studiolight_create_equirectangular_radiance_gputexture(StudioLight *sl) +static void studiolight_create_equirect_radiance_gputexture(StudioLight *sl) { if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) { char error[256]; BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EXTERNAL_IMAGE_LOADED); - ImBuf *ibuf = sl->equirectangular_radiance_buffer; + ImBuf *ibuf = sl->equirect_radiance_buffer; if (sl->flag & STUDIOLIGHT_ORIENTATION_VIEWNORMAL) { - sl->gpu_matcap_3components = MEM_callocN(sizeof(float[3]) * ibuf->x * ibuf->y, __func__); - - float *offset4 = ibuf->rect_float; - float *offset3 = sl->gpu_matcap_3components; - for (int i = 0; i < ibuf->x * ibuf->y; i++) { - copy_v3_v3(offset3, offset4); - offset3 += 3; - offset4 += 4; + float *gpu_matcap_3components = MEM_callocN(sizeof(float[3]) * ibuf->x * ibuf->y, __func__); + + float (*offset4)[4] = (float (*)[4])ibuf->rect_float; + float (*offset3)[3] = (float (*)[3])gpu_matcap_3components; + for (int i = 0; i < ibuf->x * ibuf->y; i++, offset4++, offset3++) { + copy_v3_v3(*offset3, *offset4); } - sl->equirectangular_radiance_gputexture = GPU_texture_create_nD( - ibuf->x, ibuf->y, 0, 2, sl->gpu_matcap_3components, GPU_R11F_G11F_B10F, GPU_DATA_FLOAT, 0, false, error); + + sl->equirect_radiance_gputexture = GPU_texture_create_nD( + ibuf->x, ibuf->y, 0, 2, gpu_matcap_3components, GPU_R11F_G11F_B10F, GPU_DATA_FLOAT, 0, false, error); + + MEM_SAFE_FREE(gpu_matcap_3components); } else { - sl->equirectangular_radiance_gputexture = GPU_texture_create_2D( + sl->equirect_radiance_gputexture = GPU_texture_create_2D( ibuf->x, ibuf->y, GPU_RGBA16F, ibuf->rect_float, error); - GPUTexture *tex = sl->equirectangular_radiance_gputexture; + GPUTexture *tex = sl->equirect_radiance_gputexture; GPU_texture_bind(tex, 0); GPU_texture_filter_mode(tex, true); GPU_texture_wrap_mode(tex, true); GPU_texture_unbind(tex); } } - sl->flag |= STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE; + sl->flag |= STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE; } -static void studiolight_create_equirectangular_irradiance_gputexture(StudioLight *sl) +static void studiolight_create_equirect_irradiance_gputexture(StudioLight *sl) { if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) { char error[256]; - BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED); - ImBuf *ibuf = sl->equirectangular_irradiance_buffer; - sl->equirectangular_irradiance_gputexture = GPU_texture_create_2D( + BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED); + ImBuf *ibuf = sl->equirect_irradiance_buffer; + sl->equirect_irradiance_gputexture = GPU_texture_create_2D( ibuf->x, ibuf->y, GPU_RGBA16F, ibuf->rect_float, error); - GPUTexture *tex = sl->equirectangular_irradiance_gputexture; + GPUTexture *tex = sl->equirect_irradiance_gputexture; GPU_texture_bind(tex, 0); GPU_texture_filter_mode(tex, true); GPU_texture_wrap_mode(tex, true); GPU_texture_unbind(tex); } - sl->flag |= STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE; + sl->flag |= STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE; +} + +static void studiolight_calculate_radiance(ImBuf *ibuf, float color[4], const float direction[3]) +{ + float uv[2]; + direction_to_equirect(uv, direction); + nearest_interpolation_color_wrap(ibuf, NULL, color, uv[0] * ibuf->x, uv[1] * ibuf->y); +} + +static void studiolight_calculate_radiance_buffer( + ImBuf *ibuf, float *colbuf, + const int index_x, const int index_y, const int index_z, + const float xsign, const float ysign, const float zsign) +{ + ITER_PIXELS(float, colbuf, 4, + STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, + STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) + { + float direction[3]; + direction[index_x] = xsign * (x - 0.5f); + direction[index_y] = ysign * (y - 0.5f); + direction[index_z] = zsign * 0.5f; + normalize_v3(direction); + studiolight_calculate_radiance(ibuf, pixel, direction); + } + ITER_PIXELS_END; } static void studiolight_calculate_radiance_cubemap_buffers(StudioLight *sl) { if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) { BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EXTERNAL_IMAGE_LOADED); - ImBuf *ibuf = sl->equirectangular_radiance_buffer; + ImBuf *ibuf = sl->equirect_radiance_buffer; if (ibuf) { float *colbuf = MEM_mallocN(SQUARE(STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) * sizeof(float[4]), __func__); - const float add = 1.0f / (STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE + 1); - const float start = ((1.0f / STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) * 0.5f) - 0.5f; /* front */ - studiolight_calculate_radiance_buffer(ibuf, colbuf, start, add, start, add, 0.5f, 0, 2, 1); + studiolight_calculate_radiance_buffer(ibuf, colbuf, 0, 2, 1, 1, -1, 1); sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_POS] = IMB_allocFromBuffer( NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE); /* back */ - studiolight_calculate_radiance_buffer(ibuf, colbuf, -start, -add, start, add, -0.5f, 0, 2, 1); + studiolight_calculate_radiance_buffer(ibuf, colbuf, 0, 2, 1, 1, 1, -1); sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_NEG] = IMB_allocFromBuffer( NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE); /* left */ - studiolight_calculate_radiance_buffer(ibuf, colbuf, -start, -add, start, add, 0.5f, 1, 2, 0); + studiolight_calculate_radiance_buffer(ibuf, colbuf, 2, 1, 0, 1, -1, 1); sl->radiance_cubemap_buffers[STUDIOLIGHT_X_POS] = IMB_allocFromBuffer( NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE); /* right */ - studiolight_calculate_radiance_buffer(ibuf, colbuf, start, add, start, add, -0.5f, 1, 2, 0); + studiolight_calculate_radiance_buffer(ibuf, colbuf, 2, 1, 0, -1, -1, -1); sl->radiance_cubemap_buffers[STUDIOLIGHT_X_NEG] = IMB_allocFromBuffer( NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE); /* top */ - studiolight_calculate_radiance_buffer(ibuf, colbuf, start, add, start, add, -0.5f, 0, 1, 2); + studiolight_calculate_radiance_buffer(ibuf, colbuf, 0, 1, 2, -1, -1, 1); sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_NEG] = IMB_allocFromBuffer( NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE); /* bottom */ - studiolight_calculate_radiance_buffer(ibuf, colbuf, start, add, -start, -add, 0.5f, 0, 1, 2); + studiolight_calculate_radiance_buffer(ibuf, colbuf, 0, 1, 2, 1, -1, -1); sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_POS] = IMB_allocFromBuffer( NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE); @@ -326,243 +385,131 @@ static void studiolight_calculate_radiance_cubemap_buffers(StudioLight *sl) sl->flag |= STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED; } -BLI_INLINE void studiolight_evaluate_radiance_buffer( - ImBuf *radiance_buffer, const float normal[3], float color[3], int *hits, - int xoffset, int yoffset, int zoffset, float zvalue) -{ - if (radiance_buffer == NULL) { - return; - } - float angle; - float *radiance_color = radiance_buffer->rect_float; - float direction[3]; - for (int y = 0; y < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; y++) { - for (int x = 0; x < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; x++) { - // calculate light direction; - direction[zoffset] = zvalue; - direction[xoffset] = (x / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) - 0.5f; - direction[yoffset] = (y / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) - 0.5f; - normalize_v3(direction); - angle = fmax(0.0f, dot_v3v3(direction, normal)); - madd_v3_v3fl(color, radiance_color, angle); - (*hits)++; - radiance_color += 4; - } - } - -} - /* * Spherical Harmonics */ -BLI_INLINE float studiolight_area_element(float x, float y) +BLI_INLINE float area_element(float x, float y) { return atan2(x * y, sqrtf(x * x + y * y + 1)); } -BLI_INLINE float studiolight_texel_solid_angle(float x, float y, float halfpix) +BLI_INLINE float texel_solid_angle(float x, float y, float halfpix) { float v1x = (x - halfpix) * 2.0f - 1.0f; float v1y = (y - halfpix) * 2.0f - 1.0f; float v2x = (x + halfpix) * 2.0f - 1.0f; float v2y = (y + halfpix) * 2.0f - 1.0f; - return studiolight_area_element(v1x, v1y) - studiolight_area_element(v1x, v2y) - studiolight_area_element(v2x, v1y) + studiolight_area_element(v2x, v2y); + return area_element(v1x, v1y) - area_element(v1x, v2y) - area_element(v2x, v1y) + area_element(v2x, v2y); } static void studiolight_calculate_cubemap_vector_weight(float normal[3], float *weight, int face, float x, float y) { - copy_v3_fl3(normal, x * 2.0f - 1.0f, y * 2.0f - 1.0f, 1.0f); - const float conversion_matrices[6][3][3] = { - { - {0.0f, 0.0f, 1.0f}, - {0.0f, -1.0f, 0.0f}, - {1.0f, 0.0f, 0.0f}, - }, - { - {0.0f, 0.0f, -1.0f}, - {0.0f, -1.0f, 0.0f}, - {-1.0f, 0.0f, 0.0f}, - }, - { - {1.0f, 0.0f, 0.0f}, - {0.0f, 0.0f, -1.0f}, - {0.0f, 1.0f, 0.0f}, - }, - { - {1.0f, 0.0f, 0.0f}, - {0.0f, 0.0f, 1.0f}, - {0.0f, -1.0f, 0.0f}, - }, - { - {1.0f, 0.0f, 0.0f}, - {0.0f, -1.0f, 0.0f}, - {0.0f, 0.0f, -1.0f}, - }, - { - {-1.0f, 0.0f, 0.0f}, - {0.0f, -1.0f, 0.0f}, - {0.0f, 0.0f, 1.0f}, - } - }; - - mul_m3_v3(conversion_matrices[face], normal); - normalize_v3(normal); - const float halfpix = 1.0f / (2.0f * STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE); - *weight = studiolight_texel_solid_angle(x + halfpix, y + halfpix, halfpix); + const float halfpix = 0.5f / STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; + cube_face_uv_to_direction(normal, x, y, face); + *weight = texel_solid_angle(x, y, halfpix); } -static void studiolight_calculate_spherical_harmonics_coefficient(StudioLight *sl, int sh_component) +static void studiolight_spherical_harmonics_calculate_coefficients(StudioLight *sl, float (*sh)[3]) { - const float M_4PI = M_PI * 4.0f; - float weight_accum = 0.0f; - float sh[3] = {0.0f, 0.0f, 0.0f}; + memset(sh, 0, sizeof(float) * 3 * STUDIOLIGHT_SH_COEFS_LEN); + for (int face = 0; face < 6; face++) { - float *color; - color = sl->radiance_cubemap_buffers[face]->rect_float; - for (int y = 0; y < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; y++) { - float yf = y / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; - for (int x = 0; x < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; x++) { - float xf = x / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; - float weight, coef; - float cubevec[3]; - studiolight_calculate_cubemap_vector_weight(cubevec, &weight, face, xf, yf); - - const float nx = cubevec[0]; - const float ny = cubevec[1]; - const float nz = cubevec[2]; - const float nx2 = SQUARE(nx); - const float ny2 = SQUARE(ny); - const float nz2 = SQUARE(nz); - const float nx4 = SQUARE(nx2); - const float ny4 = SQUARE(ny2); - const float nz4 = SQUARE(nz2); - - switch (sh_component) { - /* L0 */ - case 0: - coef = 0.2822095f; - break; - /* L1 */ - case 1: - coef = -0.488603f * nz * 2.0f / 3.0f; - break; - case 2: - coef = 0.488603f * ny * 2.0f / 3.0f; - break; - case 3: - coef = -0.488603f * nx * 2.0f / 3.0f; - break; - /* L2 */ - case 4: - coef = 1.092548f * nx * nz * 1.0f / 4.0f; - break; - case 5: - coef = -1.092548f * nz * ny * 1.0f / 4.0f; - break; - case 6: - coef = 0.315392f * (3.0f * ny2 - 1.0f) * 1.0f / 4.0f; - break; - case 7: - coef = 1.092548f * nx * ny * 1.0f / 4.0f; - break; - case 8: - coef = 0.546274f * (nx2 - nz2) * 1.0f / 4.0f; - break; - /* L4 */ - case 9: - coef = (2.5033429417967046f * nx * nz * (nx2 - nz2)) / -24.0f; - break; - case 10: - coef = (-1.7701307697799304f * nz * ny * (3.0f * nx2 - nz2)) / -24.0f; - break; - case 11: - coef = (0.9461746957575601f * nz * nx * (-1.0f + 7.0f * ny2)) / -24.0f; - break; - case 12: - coef = (-0.6690465435572892f * nz * ny * (-3.0f + 7.0f * ny2)) / -24.0f; - break; - case 13: - coef = ((105.0f * ny4 - 90.0f * ny2 + 9.0f) / 28.359261614f) / -24.0f; - break; - case 14: - coef = (-0.6690465435572892f * nx * ny * (-3.0f + 7.0f * ny2)) / -24.0f; - break; - case 15: - coef = (0.9461746957575601f * (nx2 - nz2) * (-1.0f + 7.0f * ny2)) / -24.0f; - break; - case 16: - coef = (-1.7701307697799304f * nx * ny * (nx2 - 3.0f * nz2)) / -24.0f; - break; - case 17: - coef = (0.6258357354491761f * (nx4 - 6.0f * nz2 * nx2 + nz4)) / -24.0f; - break; - default: - coef = 0.0f; - } - - madd_v3_v3fl(sh, color, coef * weight); - weight_accum += weight; - color += 4; - } + ITER_PIXELS(float, sl->radiance_cubemap_buffers[face]->rect_float, 4, + STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, + STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) + { + float color[3], cubevec[3], weight; + studiolight_calculate_cubemap_vector_weight(cubevec, &weight, face, x, y); + mul_v3_v3fl(color, pixel, weight); + weight_accum += weight; + + int i = 0; + /* L0 */ + madd_v3_v3fl(sh[i++], color, 0.2822095f); +#if STUDIOLIGHT_SH_BANDS > 1 /* L1 */ + const float nx = cubevec[0]; + const float ny = cubevec[1]; + const float nz = cubevec[2]; + madd_v3_v3fl(sh[i++], color, -0.488603f * nz); + madd_v3_v3fl(sh[i++], color, 0.488603f * ny); + madd_v3_v3fl(sh[i++], color, -0.488603f * nx); +#endif +#if STUDIOLIGHT_SH_BANDS > 2 /* L2 */ + const float nx2 = SQUARE(nx); + const float ny2 = SQUARE(ny); + const float nz2 = SQUARE(nz); + madd_v3_v3fl(sh[i++], color, 1.092548f * nx * nz); + madd_v3_v3fl(sh[i++], color, -1.092548f * nz * ny); + madd_v3_v3fl(sh[i++], color, 0.315392f * (3.0f * ny2 - 1.0f)); + madd_v3_v3fl(sh[i++], color, 1.092548f * nx * ny); + madd_v3_v3fl(sh[i++], color, 0.546274f * (nx2 - nz2)); +#endif + /* Bypass L3 Because final irradiance does not need it. */ +#if STUDIOLIGHT_SH_BANDS > 4 /* L4 */ + const float nx4 = SQUARE(nx2); + const float ny4 = SQUARE(ny2); + const float nz4 = SQUARE(nz2); + madd_v3_v3fl(sh[i++], color, 2.5033429417967046f * nx * nz * (nx2 - nz2)); + madd_v3_v3fl(sh[i++], color, -1.7701307697799304f * nz * ny * (3.0f * nx2 - nz2)); + madd_v3_v3fl(sh[i++], color, 0.9461746957575601f * nz * nx * (-1.0f + 7.0f * ny2)); + madd_v3_v3fl(sh[i++], color, -0.6690465435572892f * nz * ny * (-3.0f + 7.0f * ny2)); + madd_v3_v3fl(sh[i++], color, (105.0f * ny4 - 90.0f * ny2 + 9.0f) / 28.359261614f); + madd_v3_v3fl(sh[i++], color, -0.6690465435572892f * nx * ny * (-3.0f + 7.0f * ny2)); + madd_v3_v3fl(sh[i++], color, 0.9461746957575601f * (nx2 - nz2) * (-1.0f + 7.0f * ny2)); + madd_v3_v3fl(sh[i++], color, -1.7701307697799304f * nx * ny * (nx2 - 3.0f * nz2)); + madd_v3_v3fl(sh[i++], color, 0.6258357354491761f * (nx4 - 6.0f * nz2 * nx2 + nz4)); +#endif } + ITER_PIXELS_END; } - mul_v3_fl(sh, M_4PI / weight_accum); - copy_v3_v3(sl->spherical_harmonics_coefs[sh_component], sh); -} - -#ifdef STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING -static void studiolight_calculate_spherical_harmonics_luminance(StudioLight *sl, float luminance[STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS]) -{ - for (int index = 0; index < STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS; index++) { - luminance[index] = rgb_to_grayscale(sl->spherical_harmonics_coefs[index]); + /* The sum of solid angle should be equal to the solid angle of the sphere (4 PI), + * so normalize in order to make our weightAccum exactly match 4 PI. */ + for (int i = 0; i < STUDIOLIGHT_SH_COEFS_LEN; ++i) { + mul_v3_fl(sh[i], M_PI * 4.0f / weight_accum); } } -static void studiolight_apply_spherical_harmonics_windowing(StudioLight *sl, float max_lamplacian) +/* Take monochrome SH as input */ +static float studiolight_spherical_harmonics_lambda_get(float *sh, float max_laplacian) { /* From Peter-Pike Sloan's Stupid SH Tricks http://www.ppsloan.org/publications/StupidSH36.pdf */ - float table_l[STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL + 1]; - float table_b[STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL + 1]; + float table_l[STUDIOLIGHT_SH_BANDS]; + float table_b[STUDIOLIGHT_SH_BANDS]; + + float lambda = 0.0f; table_l[0] = 0.0f; table_b[0] = 0.0f; - - /* convert to luminance */ - float luminance[STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS]; - studiolight_calculate_spherical_harmonics_luminance(sl, luminance); - int index = 1; - for (int level = 1; level <= STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL; level++) { + for (int level = 1; level < STUDIOLIGHT_SH_BANDS; level++) { table_l[level] = (float)(SQUARE(level) * SQUARE(level + 1)); float b = 0.0f; for (int m = -1; m <= level; m++) { - b += SQUARE(luminance[index++]); + b += SQUARE(sh[index++]); } table_b[level] = b; } float squared_lamplacian = 0.0f; - for (int level = 1; level <= STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL; level++) { + for (int level = 1; level < STUDIOLIGHT_SH_BANDS; level++) { squared_lamplacian += table_l[level] * table_b[level]; } - const float target_squared_laplacian = max_lamplacian * max_lamplacian; + const float target_squared_laplacian = max_laplacian * max_laplacian; if (squared_lamplacian <= target_squared_laplacian) { - return; + return lambda; } - float lambda = 0.0f; - const int no_iterations = 10000000; for (int i = 0; i < no_iterations; ++i) { float f = 0.0f; float fd = 0.0f; - for (int level = 1; level <= (int)STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL; ++level) { + for (int level = 1; level < STUDIOLIGHT_SH_BANDS; ++level) { f += table_l[level] * table_b[level] / SQUARE(1.0f + lambda * table_l[level]); fd += (2.0f * SQUARE(table_l[level]) * table_b[level]) / CUBE(1.0f + lambda * table_l[level]); } @@ -577,36 +524,79 @@ static void studiolight_apply_spherical_harmonics_windowing(StudioLight *sl, flo } } + return lambda; +} + +static void studiolight_spherical_harmonics_apply_windowing(float (*sh)[3], float max_laplacian) +{ + if (max_laplacian <= 0.0f) + return; + + float sh_r[STUDIOLIGHT_SH_COEFS_LEN]; + float sh_g[STUDIOLIGHT_SH_COEFS_LEN]; + float sh_b[STUDIOLIGHT_SH_COEFS_LEN]; + for (int i = 0; i < STUDIOLIGHT_SH_COEFS_LEN; i++) { + sh_r[i] = sh[i][0]; + sh_g[i] = sh[i][1]; + sh_b[i] = sh[i][2]; + } + float lambda_r = studiolight_spherical_harmonics_lambda_get(sh_r, max_laplacian); + float lambda_g = studiolight_spherical_harmonics_lambda_get(sh_g, max_laplacian); + float lambda_b = studiolight_spherical_harmonics_lambda_get(sh_b, max_laplacian); + /* Apply windowing lambda */ - index = 0; - for (int level = 0; level <= STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL; level++) { - float s = 1.0f / (1.0f + lambda * SQUARE(level) * SQUARE(level + 1.0f)); + int index = 0; + for (int level = 0; level < STUDIOLIGHT_SH_BANDS; level++) { + float s[3]; + s[0] = 1.0f / (1.0f + lambda_r * SQUARE(level) * SQUARE(level + 1.0f)); + s[1] = 1.0f / (1.0f + lambda_g * SQUARE(level) * SQUARE(level + 1.0f)); + s[2] = 1.0f / (1.0f + lambda_b * SQUARE(level) * SQUARE(level + 1.0f)); for (int m = -1; m <= level; m++) { - mul_v3_fl(sl->spherical_harmonics_coefs[index++], s); + mul_v3_v3(sh[index++], s); } } } -#endif -BLI_INLINE void studiolight_sample_spherical_harmonics(StudioLight *sl, float color[3], float normal[3]) +static float studiolight_spherical_harmonics_geomerics_eval(const float normal[3], float sh0, float sh1, float sh2, float sh3) +{ + /* Use Geomerics non-linear SH. */ + /* http://www.geomerics.com/wp-content/uploads/2015/08/CEDEC_Geomerics_ReconstructingDiffuseLighting1.pdf */ + float R0 = sh0 * M_1_PI; + + float R1[3] = {-sh3, sh2, -sh1}; + mul_v3_fl(R1, 0.5f * M_1_PI * 1.5f); /* 1.5f is to improve the contrast a bit. */ + float lenR1 = len_v3(R1); + mul_v3_fl(R1, 1.0f / lenR1); + float q = 0.5f * (1.0f + dot_v3v3(R1, normal)); + + float p = 1.0f + 2.0f * lenR1 / R0; + float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0); + + return R0 * (a + (1.0f - a) * (p + 1.0f) * powf(q, p)); +} + +BLI_INLINE void studiolight_spherical_harmonics_eval(StudioLight *sl, float color[3], const float normal[3]) { +#if STUDIOLIGHT_SH_BANDS == 2 + float (*sh)[3] = (float (*)[3])sl->spherical_harmonics_coefs; + for (int i = 0; i < 3; ++i) { + color[i] = studiolight_spherical_harmonics_geomerics_eval(normal, sh[0][i], sh[1][i], sh[2][i], sh[3][i]); + } + return; +#else + + /* L0 */ + mul_v3_v3fl(color, sl->spherical_harmonics_coefs[0], 0.282095f); +# if STUDIOLIGHT_SH_BANDS > 1 /* L1 */ const float nx = normal[0]; const float ny = normal[1]; const float nz = normal[2]; - - copy_v3_fl(color, 0.0f); - madd_v3_v3fl(color, sl->spherical_harmonics_coefs[0], 0.282095f); - -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 0 - /* Spherical Harmonics L1 */ madd_v3_v3fl(color, sl->spherical_harmonics_coefs[1], -0.488603f * nz); madd_v3_v3fl(color, sl->spherical_harmonics_coefs[2], 0.488603f * ny); madd_v3_v3fl(color, sl->spherical_harmonics_coefs[3], -0.488603f * nx); -#endif - -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 1 - /* Spherical Harmonics L2 */ +# endif +# if STUDIOLIGHT_SH_BANDS > 2 /* L2 */ const float nx2 = SQUARE(nx); const float ny2 = SQUARE(ny); const float nz2 = SQUARE(nz); @@ -615,10 +605,9 @@ BLI_INLINE void studiolight_sample_spherical_harmonics(StudioLight *sl, float co madd_v3_v3fl(color, sl->spherical_harmonics_coefs[6], 0.315392f * (3.0f * ny2 - 1.0f)); madd_v3_v3fl(color, sl->spherical_harmonics_coefs[7], -1.092548 * nx * ny); madd_v3_v3fl(color, sl->spherical_harmonics_coefs[8], 0.546274 * (nx2 - nz2)); -#endif - -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 3 - /* Spherical Harmonics L4 */ +# endif + /* L3 coefs are 0 */ +# if STUDIOLIGHT_SH_BANDS > 4 /* L4 */ const float nx4 = SQUARE(nx2); const float ny4 = SQUARE(ny2); const float nz4 = SQUARE(nz2); @@ -631,8 +620,31 @@ BLI_INLINE void studiolight_sample_spherical_harmonics(StudioLight *sl, float co madd_v3_v3fl(color, sl->spherical_harmonics_coefs[15], 0.9461746957575601f * (nx2 - nz2) * (-1.0f + 7.0f * ny2)); madd_v3_v3fl(color, sl->spherical_harmonics_coefs[16], -1.7701307697799304f * nx * ny * (nx2 - 3.0f * nz2)); madd_v3_v3fl(color, sl->spherical_harmonics_coefs[17], 0.6258357354491761f * (nx4 - 6.0f * nz2 * nx2 + nz4)); +# endif #endif +} +/* This modify the radiance into irradiance. */ +static void studiolight_spherical_harmonics_apply_band_factors(StudioLight *sl, float (*sh)[3]) +{ + static float sl_sh_band_factors[5] = { + 1.0f, + 2.0f / 3.0f, + 1.0f / 4.0f, + 0.0f, + -1.0f / 24.0f + }; + + int index = 0, dst_idx = 0; + for (int band = 0; band < STUDIOLIGHT_SH_BANDS; band++) { + for (int m = 0; m < SQUARE(band + 1) - SQUARE(band); m++) { + /* Skip L3 */ + if (band != 3) { + mul_v3_v3fl(sl->spherical_harmonics_coefs[dst_idx++], sh[index], sl_sh_band_factors[band]); + } + index++; + } + } } static void studiolight_calculate_diffuse_light(StudioLight *sl) @@ -641,13 +653,10 @@ static void studiolight_calculate_diffuse_light(StudioLight *sl) if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) { BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED); - for (int comp = 0; comp < STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS; comp++) { - studiolight_calculate_spherical_harmonics_coefficient(sl, comp); - } - -#ifdef STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING - studiolight_apply_spherical_harmonics_windowing(sl, STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING_TARGET_LAMPLACIAN); -#endif + float sh_coefs[STUDIOLIGHT_SH_COEFS_LEN][3]; + studiolight_spherical_harmonics_calculate_coefficients(sl, sh_coefs); + studiolight_spherical_harmonics_apply_windowing(sh_coefs, STUDIOLIGHT_SH_WINDOWING); + studiolight_spherical_harmonics_apply_band_factors(sl, sh_coefs); if (sl->flag & STUDIOLIGHT_USER_DEFINED) { FILE *fp = BLI_fopen(sl->path_sh_cache, "wb"); @@ -660,81 +669,70 @@ static void studiolight_calculate_diffuse_light(StudioLight *sl) sl->flag |= STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED; } -static float texel_coord_solid_angle(float a_U, float a_V, int a_Size) -{ - //scale up to [-1, 1] range (inclusive), offset by 0.5 to point to texel center. - float u = (2.0f * ((float)a_U + 0.5f) / (float)a_Size) - 1.0f; - float v = (2.0f * ((float)a_V + 0.5f) / (float)a_Size) - 1.0f; - - float resolution_inv = 1.0f / a_Size; - - // U and V are the -1..1 texture coordinate on the current face. - // Get projected area for this texel - float x0 = u - resolution_inv; - float y0 = v - resolution_inv; - float x1 = u + resolution_inv; - float y1 = v + resolution_inv; - return studiolight_area_element(x0, y0) - studiolight_area_element(x0, y1) - studiolight_area_element(x1, y0) + studiolight_area_element(x1, y1); -} - BLI_INLINE void studiolight_evaluate_specular_radiance_buffer( ImBuf *radiance_buffer, const float normal[3], float color[3], - int xoffset, int yoffset, int zoffset, float zvalue) + int xoffset, int yoffset, int zoffset, float zsign) { if (radiance_buffer == NULL) { return; } - float angle; - float *radiance_color = radiance_buffer->rect_float; - float direction[3]; - for (int y = 0; y < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; y++) { - for (int x = 0; x < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; x++) { - // calculate light direction; - float u = (x / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) - 0.5f; - float v = (y / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) - 0.5f; - direction[zoffset] = zvalue; - direction[xoffset] = u; - direction[yoffset] = v; - normalize_v3(direction); - angle = fmax(0.0f, dot_v3v3(direction, normal)) * texel_coord_solid_angle(x, y, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE); - madd_v3_v3fl(color, radiance_color, angle); - radiance_color += 4; - } + + float accum[3] = {0.0f, 0.0f, 0.0f}; + float accum_weight = 0.00001f; + ITER_PIXELS(float, radiance_buffer->rect_float, 4, + STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, + STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) + { + float direction[3]; + direction[zoffset] = zsign * 0.5f; + direction[xoffset] = x - 0.5f; + direction[yoffset] = y - 0.5f; + normalize_v3(direction); + float weight = dot_v3v3(direction, normal) > 0.95f ? 1.0f : 0.0f; + // float solid_angle = texel_solid_angle(x, y, texel_size[0] * 0.5f); + madd_v3_v3fl(accum, pixel, weight); + accum_weight += weight; } + ITER_PIXELS_END; + madd_v3_v3fl(color, accum, 1.0f / accum_weight); } -#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE -static void studiolight_calculate_specular_irradiance(StudioLight *sl, float color[3], const float normal[3]) +#ifdef STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE +static void studiolight_irradiance_eval(StudioLight *sl, float color[3], const float normal[3]) { copy_v3_fl(color, 0.0f); + /* XXX: This is madness, iterating over all cubemap pixels for each destination pixels + * even if their weight is 0.0f. + * It should use hemisphere, cosine sampling at least. */ + /* back */ studiolight_evaluate_specular_radiance_buffer( - sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_POS], normal, color, 0, 2, 1, 0.5); + sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_POS], normal, color, 0, 2, 1, 1); /* front */ studiolight_evaluate_specular_radiance_buffer( - sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_NEG], normal, color, 0, 2, 1, -0.5); + sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_NEG], normal, color, 0, 2, 1, -1); /* left */ studiolight_evaluate_specular_radiance_buffer( - sl->radiance_cubemap_buffers[STUDIOLIGHT_X_POS], normal, color, 1, 2, 0, 0.5); + sl->radiance_cubemap_buffers[STUDIOLIGHT_X_POS], normal, color, 1, 2, 0, 1); /* right */ studiolight_evaluate_specular_radiance_buffer( - sl->radiance_cubemap_buffers[STUDIOLIGHT_X_NEG], normal, color, 1, 2, 0, -0.5); + sl->radiance_cubemap_buffers[STUDIOLIGHT_X_NEG], normal, color, 1, 2, 0, -1); /* top */ studiolight_evaluate_specular_radiance_buffer( - sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_POS], normal, color, 0, 1, 2, 0.5); + sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_POS], normal, color, 0, 1, 2, 1); /* bottom */ studiolight_evaluate_specular_radiance_buffer( - sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_NEG], normal, color, 0, 1, 2, -0.5); + sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_NEG], normal, color, 0, 1, 2, -1); mul_v3_fl(color, 1.0 / M_PI); } #endif -static bool studiolight_load_irradiance_equirectangular_image(StudioLight *sl) +static bool studiolight_load_irradiance_equirect_image(StudioLight *sl) { #ifdef STUDIOLIGHT_LOAD_CACHED_FILES if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) { @@ -742,11 +740,13 @@ static bool studiolight_load_irradiance_equirectangular_image(StudioLight *sl) ibuf = IMB_loadiffname(sl->path_irr_cache, 0, NULL); if (ibuf) { IMB_float_from_rect(ibuf); - sl->equirectangular_irradiance_buffer = ibuf; - sl->flag |= STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED; + sl->equirect_irradiance_buffer = ibuf; + sl->flag |= STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED; return true; } } +#else + UNUSED_VARS(sl); #endif return false; } @@ -765,92 +765,54 @@ static bool studiolight_load_spherical_harmonics_coefficients(StudioLight *sl) fclose(fp); } } +#else + UNUSED_VARS(sl); #endif return false; } -static void studiolight_calculate_irradiance_equirectangular_image(StudioLight *sl) +static void studiolight_calculate_irradiance_equirect_image(StudioLight *sl) { if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) { -#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE +#ifdef STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED); -#endif -#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS +#else BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED); #endif - float *colbuf = MEM_mallocN(STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH * STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT * sizeof(float[4]), __func__); - float *color = colbuf; - for (int y = 0; y < STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT; y++) { - float yf = y / (float)STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT; - - for (int x = 0; x < STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH; x++) { - float xf = x / (float)STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH; - float dir[3]; - equirectangular_to_direction(dir, xf, yf); + float *colbuf = MEM_mallocN(STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH * STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT * sizeof(float[4]), __func__); -#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE - studiolight_calculate_specular_irradiance(sl, color, dir); -#endif -#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS - studiolight_sample_spherical_harmonics(sl, color, dir); + ITER_PIXELS(float, colbuf, 4, + STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH, + STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT) + { + float dir[3]; + equirect_to_direction(dir, x, y); +#ifdef STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE + studiolight_irradiance_eval(sl, pixel, dir); +#else + studiolight_spherical_harmonics_eval(sl, pixel, dir); #endif - - color[3] = 1.0f; - color += 4; - } + pixel[3] = 1.0f; } + ITER_PIXELS_END; - sl->equirectangular_irradiance_buffer = IMB_allocFromBuffer( + sl->equirect_irradiance_buffer = IMB_allocFromBuffer( NULL, colbuf, - STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH, - STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT); + STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH, + STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT); MEM_freeN(colbuf); -#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE +#ifdef STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE /* * Only store cached files when using STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE */ if (sl->flag & STUDIOLIGHT_USER_DEFINED) { - IMB_saveiff(sl->equirectangular_irradiance_buffer, sl->path_irr_cache, IB_rectfloat); + IMB_saveiff(sl->equirect_irradiance_buffer, sl->path_irr_cache, IB_rectfloat); } #endif } - sl->flag |= STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED; -} - -static void studiolight_calculate_light_direction(StudioLight *sl) -{ - float best_light = 0.0; - sl->light_direction[0] = 0.0f; - sl->light_direction[1] = 0.0f; - sl->light_direction[2] = -1.0f; - - if ((sl->flag & STUDIOLIGHT_EXTERNAL_FILE) && (sl->flag & STUDIOLIGHT_ORIENTATION_WORLD)) { - BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED); - ImBuf *ibuf = sl->equirectangular_irradiance_buffer; - if (ibuf) { - /* go over every pixel, determine light, if higher calc direction off the light */ - float new_light; - float *color = ibuf->rect_float; - for (int y = 0; y < STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT; y++) { - for (int x = 0; x < STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH; x++) { - new_light = color[0] + color[1] + color[2]; - if (new_light > best_light) { - float u = x / (float)STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH; - float v = y / (float)STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT; - equirectangular_to_direction(sl->light_direction, u, v); - SWAP(float, sl->light_direction[0], sl->light_direction[1]); - normalize_v3(sl->light_direction); - negate_v3(sl->light_direction); - best_light = new_light; - } - color += 4; - } - } - } - } - sl->flag |= STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED; + sl->flag |= STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED; } static StudioLight *studiolight_add_file(const char *path, int flag) @@ -929,119 +891,115 @@ static uint alpha_circle_mask(float u, float v, float inner_edge, float outer_ed return mask << 24; } +/* Percentage of the icon that the preview sphere covers. */ #define STUDIOLIGHT_DIAMETER 0.95f +/* Rescale coord around (0.5, 0.5) by STUDIOLIGHT_DIAMETER. */ +#define RESCALE_COORD(x) (x / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f) + +/* Remaps normalized UV [0..1] to a sphere normal around (0.5, 0.5) */ +static void sphere_normal_from_uv(float normal[3], float u, float v) +{ + normal[0] = u * 2.0f - 1.0f; + normal[1] = v * 2.0f - 1.0f; + float dist = len_v2(normal); + normal[2] = sqrtf(1.0f - SQUARE(dist)); +} static void studiolight_radiance_preview(uint *icon_buffer, StudioLight *sl) { BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EXTERNAL_IMAGE_LOADED); - float pixel_size = 1.0f / (float)STUDIOLIGHT_ICON_SIZE; - - int offset = 0; - for (int y = 0; y < STUDIOLIGHT_ICON_SIZE; y++) { - float dy = (y + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE; - dy = dy / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f; - for (int x = 0; x < STUDIOLIGHT_ICON_SIZE; x++) { - float dx = (x + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE; - dx = dx / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f; - - uint pixelresult = 0x0; - uint alphamask = alpha_circle_mask(dx, dy, 0.5f - pixel_size, 0.5f); - if (alphamask != 0) { - float incoming[3] = {0.0f, 0.0f, -1.0f}; - - float normal[3]; - normal[0] = dx * 2.0f - 1.0f; - normal[1] = dy * 2.0f - 1.0f; - float dist = len_v2(normal); - normal[2] = sqrtf(1.0f - SQUARE(dist)); - - float direction[3]; - reflect_v3_v3v3(direction, incoming, normal); - - /* We want to see horizon not poles. */ - SWAP(float, direction[1], direction[2]); - direction[1] = -direction[1]; - - float color[4]; - studiolight_calculate_radiance(sl->equirectangular_radiance_buffer, color, direction); - - pixelresult = rgb_to_cpack( - linearrgb_to_srgb(color[0]), - linearrgb_to_srgb(color[1]), - linearrgb_to_srgb(color[2])) | alphamask; - } - icon_buffer[offset++] = pixelresult; + ITER_PIXELS(uint, icon_buffer, 1, + STUDIOLIGHT_ICON_SIZE, + STUDIOLIGHT_ICON_SIZE) + { + float dy = RESCALE_COORD(y); + float dx = RESCALE_COORD(x); + + uint alphamask = alpha_circle_mask(dx, dy, 0.5f - texel_size[0], 0.5f); + if (alphamask != 0) { + float normal[3], direction[3], color[4]; + float incoming[3] = {0.0f, 0.0f, -1.0f}; + sphere_normal_from_uv(normal, dx, dy); + reflect_v3_v3v3(direction, incoming, normal); + /* We want to see horizon not poles. */ + SWAP(float, direction[1], direction[2]); + direction[1] = -direction[1]; + + studiolight_calculate_radiance(sl->equirect_radiance_buffer, color, direction); + + *pixel = rgb_to_cpack( + linearrgb_to_srgb(color[0]), + linearrgb_to_srgb(color[1]), + linearrgb_to_srgb(color[2])) | alphamask; + } + else { + *pixel = 0x0; } } + ITER_PIXELS_END; } static void studiolight_matcap_preview(uint *icon_buffer, StudioLight *sl, bool flipped) { BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EXTERNAL_IMAGE_LOADED); - float color[4]; - float fx, fy; - float pixel_size = 1.0f / (float)STUDIOLIGHT_ICON_SIZE; - int offset = 0; - ImBuf *ibuf = sl->equirectangular_radiance_buffer; - - for (int y = 0; y < STUDIOLIGHT_ICON_SIZE; y++) { - fy = (y + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE; - fy = fy / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f; - for (int x = 0; x < STUDIOLIGHT_ICON_SIZE; x++) { - fx = (x + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE; - fx = fx / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f; - if (flipped) { - fx = 1.0f - fx; - } - nearest_interpolation_color(ibuf, NULL, color, fx * ibuf->x - 1.0f, fy * ibuf->y - 1.0f); + ImBuf *ibuf = sl->equirect_radiance_buffer; - uint alphamask = alpha_circle_mask(fx, fy, 0.5f - pixel_size, 0.5f); - - icon_buffer[offset++] = rgb_to_cpack( - linearrgb_to_srgb(color[0]), - linearrgb_to_srgb(color[1]), - linearrgb_to_srgb(color[2])) | alphamask; + ITER_PIXELS(uint, icon_buffer, 1, + STUDIOLIGHT_ICON_SIZE, + STUDIOLIGHT_ICON_SIZE) + { + float dy = RESCALE_COORD(y); + float dx = RESCALE_COORD(x); + if (flipped) { + dx = 1.0f - dx; } + + float color[4]; + nearest_interpolation_color(ibuf, NULL, color, dx * ibuf->x - 1.0f, dy * ibuf->y - 1.0f); + + uint alphamask = alpha_circle_mask(dx, dy, 0.5f - texel_size[0], 0.5f); + + *pixel = rgb_to_cpack( + linearrgb_to_srgb(color[0]), + linearrgb_to_srgb(color[1]), + linearrgb_to_srgb(color[2])) | alphamask; } + ITER_PIXELS_END; } static void studiolight_irradiance_preview(uint *icon_buffer, StudioLight *sl) { BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED); - float pixel_size = 1.0f / (float)STUDIOLIGHT_ICON_SIZE; - - int offset = 0; - for (int y = 0; y < STUDIOLIGHT_ICON_SIZE; y++) { - float dy = (y + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE; - dy = dy / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f; - for (int x = 0; x < STUDIOLIGHT_ICON_SIZE; x++) { - float dx = (x + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE; - dx = dx / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f; - - uint pixelresult = 0x0; - uint alphamask = alpha_circle_mask(dx, dy, 0.5f - pixel_size, 0.5f); - if (alphamask != 0) { - /* calculate normal */ - float normal[3]; - normal[0] = dx * 2.0f - 1.0f; - normal[1] = -(dy * 2.0f - 1.0f); - float dist = len_v2(normal); - normal[2] = -sqrtf(1.0f - SQUARE(dist)); - SWAP(float, normal[1], normal[2]); - - float color[3]; - studiolight_sample_spherical_harmonics(sl, color, normal); - pixelresult = rgb_to_cpack( - linearrgb_to_srgb(color[0]), - linearrgb_to_srgb(color[1]), - linearrgb_to_srgb(color[2])) | alphamask; - } - icon_buffer[offset++] = pixelresult; + ITER_PIXELS(uint, icon_buffer, 1, + STUDIOLIGHT_ICON_SIZE, + STUDIOLIGHT_ICON_SIZE) + { + float dy = RESCALE_COORD(y); + float dx = RESCALE_COORD(x); + + uint alphamask = alpha_circle_mask(dx, dy, 0.5f - texel_size[0], 0.5f); + if (alphamask != 0) { + float normal[3], color[3]; + sphere_normal_from_uv(normal, dx, dy); + /* We want to see horizon not poles. */ + SWAP(float, normal[1], normal[2]); + normal[1] = -normal[1]; + + studiolight_spherical_harmonics_eval(sl, color, normal); + + *pixel = rgb_to_cpack( + linearrgb_to_srgb(color[0]), + linearrgb_to_srgb(color[1]), + linearrgb_to_srgb(color[2])) | alphamask; + } + else { + *pixel = 0x0; } } + ITER_PIXELS_END; } /* API */ @@ -1055,19 +1013,19 @@ void BKE_studiolight_init(void) sl = studiolight_create(STUDIOLIGHT_INTERNAL | STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED | STUDIOLIGHT_ORIENTATION_CAMERA); BLI_strncpy(sl->name, "Default", FILE_MAXFILE); - - copy_v3_fl3(sl->spherical_harmonics_coefs[0], 1.03271556f, 1.07163882f, 1.11193657f); -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 0 - copy_v3_fl3(sl->spherical_harmonics_coefs[1], -0.00480952f, 0.05290511f, 0.16394117f); - copy_v3_fl3(sl->spherical_harmonics_coefs[2], -0.29686999f, -0.27378261f, -0.24797194f); - copy_v3_fl3(sl->spherical_harmonics_coefs[3], 0.47932500f, 0.48242140f, 0.47190312f); + int i = 0; + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 1.03271556f, 1.07163882f, 1.11193657f); +#if STUDIOLIGHT_SH_BANDS > 1 + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], -0.00480952f, 0.05290511f, 0.16394117f); + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], -0.29686999f, -0.27378261f, -0.24797194f); + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 0.47932500f, 0.48242140f, 0.47190312f); #endif -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 1 - copy_v3_fl3(sl->spherical_harmonics_coefs[4], -0.00576984f, 0.00504886f, 0.01640534f); - copy_v3_fl3(sl->spherical_harmonics_coefs[5], 0.15500379f, 0.15415503f, 0.16244425f); - copy_v3_fl3(sl->spherical_harmonics_coefs[6], -0.02483751f, -0.02245096f, -0.00536885f); - copy_v3_fl3(sl->spherical_harmonics_coefs[7], 0.11155496f, 0.11005443f, 0.10839636f); - copy_v3_fl3(sl->spherical_harmonics_coefs[8], 0.01363425f, 0.01278363f, -0.00159006f); +#if STUDIOLIGHT_SH_BANDS > 2 + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], -0.00576984f, 0.00504886f, 0.01640534f); + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 0.15500379f, 0.15415503f, 0.16244425f); + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], -0.02483751f, -0.02245096f, -0.00536885f); + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 0.11155496f, 0.11005443f, 0.10839636f); + copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 0.01363425f, 0.01278363f, -0.00159006f); #endif BLI_addtail(&studiolights, sl); @@ -1169,7 +1127,7 @@ void BKE_studiolight_ensure_flag(StudioLight *sl, int flag) } if ((flag & STUDIOLIGHT_EXTERNAL_IMAGE_LOADED)) { - studiolight_load_equirectangular_image(sl); + studiolight_load_equirect_image(sl); } if ((flag & STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED)) { studiolight_calculate_radiance_cubemap_buffers(sl); @@ -1179,18 +1137,15 @@ void BKE_studiolight_ensure_flag(StudioLight *sl, int flag) studiolight_calculate_diffuse_light(sl); } } - if ((flag & STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE)) { - studiolight_create_equirectangular_radiance_gputexture(sl); - } - if ((flag & STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED)) { - studiolight_calculate_light_direction(sl); + if ((flag & STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE)) { + studiolight_create_equirect_radiance_gputexture(sl); } - if ((flag & STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE)) { - studiolight_create_equirectangular_irradiance_gputexture(sl); + if ((flag & STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE)) { + studiolight_create_equirect_irradiance_gputexture(sl); } - if ((flag & STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED)) { - if (!studiolight_load_irradiance_equirectangular_image(sl)) { - studiolight_calculate_irradiance_equirectangular_image(sl); + if ((flag & STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED)) { + if (!studiolight_load_irradiance_equirect_image(sl)) { + studiolight_calculate_irradiance_equirect_image(sl); } } } diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h index 9613847f28f..a663d08b074 100644 --- a/source/blender/blenlib/BLI_math_vector.h +++ b/source/blender/blenlib/BLI_math_vector.h @@ -338,6 +338,7 @@ void print_vn(const char *str, const float v[], const int n); MINLINE void normal_float_to_short_v2(short r[2], const float n[2]); MINLINE void normal_short_to_float_v3(float r[3], const short n[3]); MINLINE void normal_float_to_short_v3(short r[3], const float n[3]); +MINLINE void normal_float_to_short_v4(short r[4], const float n[4]); void minmax_v3v3_v3(float min[3], float max[3], const float vec[3]); void minmax_v2v2_v2(float min[2], float max[2], const float vec[2]); diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h index eef4e0647aa..2fb8f045841 100644 --- a/source/blender/blenlib/BLI_string.h +++ b/source/blender/blenlib/BLI_string.h @@ -33,6 +33,7 @@ */ #include <stdarg.h> +#include <inttypes.h> #ifdef __cplusplus extern "C" { @@ -71,6 +72,7 @@ char *BLI_sprintfN(const char *__restrict format, ...) ATTR_WARN_UNUSED_RESULT A size_t BLI_strescape(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL(); size_t BLI_str_format_int_grouped(char dst[16], int num) ATTR_NONNULL(); +size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num) ATTR_NONNULL(); void BLI_str_format_byte_unit(char dst[15], long long int size, const bool base_10) ATTR_NONNULL(); int BLI_strcaseeq(const char *a, const char *b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c index dbb2339461f..fc3f11fd1be 100644 --- a/source/blender/blenlib/intern/math_vector_inline.c +++ b/source/blender/blenlib/intern/math_vector_inline.c @@ -1025,6 +1025,15 @@ MINLINE void normal_float_to_short_v3(short out[3], const float in[3]) out[2] = (short) (in[2] * 32767.0f); } +MINLINE void normal_float_to_short_v4(short out[4], const float in[4]) +{ + out[0] = (short) (in[0] * 32767.0f); + out[1] = (short) (in[1] * 32767.0f); + out[2] = (short) (in[2] * 32767.0f); + out[3] = (short) (in[3] * 32767.0f); +} + + /********************************* Comparison ********************************/ diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c index 938728aa4bb..25375278901 100644 --- a/source/blender/blenlib/intern/string.c +++ b/source/blender/blenlib/intern/string.c @@ -35,6 +35,7 @@ #include <stdlib.h> #include <stdarg.h> #include <ctype.h> +#include <inttypes.h> #include "MEM_guardedalloc.h" @@ -975,24 +976,13 @@ size_t BLI_str_partition_ex( return end ? (size_t)(end - str) : strlen(str); } -/** - * Format ints with decimal grouping. - * 1000 -> 1,000 - * - * \param dst The resulting string - * \param num Number to format - * \return The length of \a dst - */ -size_t BLI_str_format_int_grouped(char dst[16], int num) +static size_t BLI_str_format_int_grouped_ex(char src[16], char dst[16], int num_len) { - char src[16]; char *p_src = src; char *p_dst = dst; const char separator = ','; - int num_len, commas; - - num_len = sprintf(src, "%d", num); + int commas; if (*p_src == '-') { *p_dst++ = *p_src++; @@ -1011,6 +1001,38 @@ size_t BLI_str_format_int_grouped(char dst[16], int num) } /** + * Format ints with decimal grouping. + * 1000 -> 1,000 + * + * \param dst The resulting string + * \param num Number to format + * \return The length of \a dst + */ +size_t BLI_str_format_int_grouped(char dst[16], int num) +{ + char src[16]; + int num_len = sprintf(src, "%d", num); + + return BLI_str_format_int_grouped_ex(src, dst, num_len); +} + +/** + * Format uint64_t with decimal grouping. + * 1000 -> 1,000 + * + * \param dst The resulting string + * \param num Number to format + * \return The length of \a dst + */ +size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num) +{ + char src[16]; + int num_len = sprintf(src, "%"PRIu64"", num); + + return BLI_str_format_int_grouped_ex(src, dst, num_len); +} + +/** * Format a size in bytes using binary units. * 1000 -> 1 KB * Number of decimal places grows with the used unit (e.g. 1.5 MB, 1.55 GB, 1.545 TB). diff --git a/source/blender/blenlib/intern/task.c b/source/blender/blenlib/intern/task.c index 75242350c66..b8b54e192b4 100644 --- a/source/blender/blenlib/intern/task.c +++ b/source/blender/blenlib/intern/task.c @@ -1221,6 +1221,31 @@ static void parallel_listbase_func( } } +static void task_parallel_listbase_no_threads( + struct ListBase *listbase, + void *userdata, + TaskParallelListbaseFunc func) +{ + int i = 0; + for (Link *link = listbase->first; link != NULL; link = link->next, ++i) { + func(userdata, link, i); + } +} + +/* NOTE: The idea here is to compensate for rather measurable threading + * overhead caused by fetching tasks. With too many CPU threads we are starting + * to spend too much time in those overheads. */ +BLI_INLINE int task_parallel_listbasecalc_chunk_size(const int num_threads) +{ + if (num_threads > 32) { + return 128; + } + else if (num_threads > 16) { + return 64; + } + return 32; +} + /** * This function allows to parallelize for loops over ListBase items. * @@ -1238,41 +1263,37 @@ void BLI_task_parallel_listbase( TaskParallelListbaseFunc func, const bool use_threading) { - TaskScheduler *task_scheduler; - TaskPool *task_pool; - ParallelListState state; - int i, num_threads, num_tasks; - if (BLI_listbase_is_empty(listbase)) { return; } - if (!use_threading) { - i = 0; - for (Link *link = listbase->first; link != NULL; link = link->next, ++i) { - func(userdata, link, i); - } + task_parallel_listbase_no_threads(listbase, userdata, func); + return; + } + TaskScheduler *task_scheduler = BLI_task_scheduler_get(); + const int num_threads = BLI_task_scheduler_num_threads(task_scheduler); + /* TODO(sergey): Consider making chunk size configurable. */ + const int chunk_size = task_parallel_listbasecalc_chunk_size(num_threads); + const int num_tasks = min_ii( + num_threads, + BLI_listbase_count(listbase) / chunk_size); + if (num_tasks <= 1) { + task_parallel_listbase_no_threads(listbase, userdata, func); return; } - task_scheduler = BLI_task_scheduler_get(); - task_pool = BLI_task_pool_create_suspended(task_scheduler, &state); - num_threads = BLI_task_scheduler_num_threads(task_scheduler); - - /* The idea here is to prevent creating task for each of the loop iterations - * and instead have tasks which are evenly distributed across CPU cores and - * pull next iter to be crunched using the queue. - */ - num_tasks = num_threads + 2; + ParallelListState state; + TaskPool *task_pool = BLI_task_pool_create_suspended(task_scheduler, &state); state.index = 0; state.link = listbase->first; state.userdata = userdata; state.func = func; - state.chunk_size = 32; + state.chunk_size = chunk_size; BLI_spin_init(&state.lock); - for (i = 0; i < num_tasks; i++) { + BLI_assert(num_tasks > 0); + for (int i = 0; i < num_tasks; i++) { /* Use this pool's pre-allocated tasks. */ BLI_task_pool_push_from_thread(task_pool, parallel_listbase_func, diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h index ef02e7d7034..df8cc164869 100644 --- a/source/blender/blenloader/BLO_readfile.h +++ b/source/blender/blenloader/BLO_readfile.h @@ -81,6 +81,10 @@ typedef struct WorkspaceConfigFileData { struct ListBase workspaces; } WorkspaceConfigFileData; +struct BlendFileReadParams { + uint skip_flags : 2; /* eBLOReadSkip */ + uint is_startup : 1; +}; /* skip reading some data-block types (may want to skip screen data too). */ typedef enum eBLOReadSkip { @@ -93,13 +97,16 @@ typedef enum eBLOReadSkip { BlendFileData *BLO_read_from_file( const char *filepath, - struct ReportList *reports, eBLOReadSkip skip_flag); + eBLOReadSkip skip_flags, + struct ReportList *reports); BlendFileData *BLO_read_from_memory( const void *mem, int memsize, - struct ReportList *reports, eBLOReadSkip skip_flag); + eBLOReadSkip skip_flags, + struct ReportList *reports); BlendFileData *BLO_read_from_memfile( struct Main *oldmain, const char *filename, struct MemFile *memfile, - struct ReportList *reports, eBLOReadSkip skip_flag); + eBLOReadSkip skip_flags, + struct ReportList *reports); void BLO_blendfiledata_free(BlendFileData *bfd); diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt index e0453e71a05..49987cb860c 100644 --- a/source/blender/blenloader/CMakeLists.txt +++ b/source/blender/blenloader/CMakeLists.txt @@ -36,6 +36,7 @@ set(INC ../makesrna ../nodes ../render/extern/include + ../windowmanager ../../../intern/guardedalloc # for writefile.c: dna_type_offsets.h diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c index 6fd77c34977..4d294870fb1 100644 --- a/source/blender/blenloader/intern/readblenentry.c +++ b/source/blender/blenloader/intern/readblenentry.c @@ -319,7 +319,8 @@ void BLO_blendhandle_close(BlendHandle *bh) */ BlendFileData *BLO_read_from_file( const char *filepath, - ReportList *reports, eBLOReadSkip skip_flags) + eBLOReadSkip skip_flags, + ReportList *reports) { BlendFileData *bfd = NULL; FileData *fd; @@ -346,7 +347,8 @@ BlendFileData *BLO_read_from_file( */ BlendFileData *BLO_read_from_memory( const void *mem, int memsize, - ReportList *reports, eBLOReadSkip skip_flags) + eBLOReadSkip skip_flags, + ReportList *reports) { BlendFileData *bfd = NULL; FileData *fd; @@ -370,7 +372,8 @@ BlendFileData *BLO_read_from_memory( */ BlendFileData *BLO_read_from_memfile( Main *oldmain, const char *filename, MemFile *memfile, - ReportList *reports, eBLOReadSkip skip_flags) + eBLOReadSkip skip_flags, + ReportList *reports) { BlendFileData *bfd = NULL; FileData *fd; diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index d3a128f34a3..f07f9363167 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -6612,8 +6612,6 @@ static void direct_link_gpencil(FileData *fd, bGPdata *gpd) gpl->actframe = newdataadr(fd, gpl->actframe); - gpl->runtime.derived_array = NULL; - gpl->runtime.len_derived = 0; gpl->runtime.icon_id = 0; for (gpf = gpl->frames.first; gpf; gpf = gpf->next) { @@ -8795,6 +8793,11 @@ static void do_versions_userdef(FileData *fd, BlendFileData *bfd) if (!DNA_struct_elem_find(fd->filesdna, "UserDef", "short", "gpencil_multisamples")) { user->gpencil_multisamples = 4; } + + /* tablet pressure threshold */ + if (!DNA_struct_elem_find(fd->filesdna, "UserDef", "float", "pressure_threshold_max")) { + user->pressure_threshold_max = 1.0f; + } } static void do_versions(FileData *fd, Library *lib, Main *main) @@ -8912,14 +8915,9 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead) /* read all data into fd->datamap */ bhead = read_data_into_oldnewmap(fd, bhead, "user def"); - if (user->keymaps.first) { - /* backwards compatibility */ - user->user_keymaps= user->keymaps; - user->keymaps.first= user->keymaps.last= NULL; - } - link_list(fd, &user->themes); link_list(fd, &user->user_keymaps); + link_list(fd, &user->user_keyconfig_prefs); link_list(fd, &user->user_menus); link_list(fd, &user->addons); link_list(fd, &user->autoexec_paths); @@ -8946,6 +8944,11 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead) direct_link_keymapitem(fd, kmi); } + for (wmKeyConfigPref *kpt = user->user_keyconfig_prefs.first; kpt; kpt = kpt->next) { + kpt->prop = newdataadr(fd, kpt->prop); + IDP_DirectLinkGroup_OrFree(&kpt->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); + } + for (bUserMenu *um = user->user_menus.first; um; um = um->next) { link_list(fd, &um->items); for (bUserMenuItem *umi = um->items.first; umi; umi = umi->next) { diff --git a/source/blender/blenloader/intern/undofile.c b/source/blender/blenloader/intern/undofile.c index b38259f0f98..5ceab1ca2cc 100644 --- a/source/blender/blenloader/intern/undofile.c +++ b/source/blender/blenloader/intern/undofile.c @@ -131,7 +131,7 @@ void memfile_chunk_add( struct Main *BLO_memfile_main_get(struct MemFile *memfile, struct Main *oldmain, struct Scene **r_scene) { struct Main *bmain_undo = NULL; - BlendFileData *bfd = BLO_read_from_memfile(oldmain, BKE_main_blendfile_path(oldmain), memfile, NULL, BLO_READ_SKIP_NONE); + BlendFileData *bfd = BLO_read_from_memfile(oldmain, BKE_main_blendfile_path(oldmain), memfile, BLO_READ_SKIP_NONE, NULL); if (bfd) { bmain_undo = bfd->main; diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c index fadf332c850..e446e268e61 100644 --- a/source/blender/blenloader/intern/versioning_270.c +++ b/source/blender/blenloader/intern/versioning_270.c @@ -1103,45 +1103,45 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain) ToolSettings *ts = scene->toolsettings; if (ts->gp_sculpt.brush[0].size == 0) { - GP_BrushEdit_Settings *gset = &ts->gp_sculpt; - GP_EditBrush_Data *brush; + GP_Sculpt_Settings *gset = &ts->gp_sculpt; + GP_Sculpt_Data *brush; - brush = &gset->brush[GP_EDITBRUSH_TYPE_SMOOTH]; + brush = &gset->brush[GP_SCULPT_TYPE_SMOOTH]; brush->size = 25; brush->strength = 0.3f; - brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE; + brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_SMOOTH_PRESSURE; - brush = &gset->brush[GP_EDITBRUSH_TYPE_THICKNESS]; + brush = &gset->brush[GP_SCULPT_TYPE_THICKNESS]; brush->size = 25; brush->strength = 0.5f; - brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF; + brush->flag = GP_SCULPT_FLAG_USE_FALLOFF; - brush = &gset->brush[GP_EDITBRUSH_TYPE_GRAB]; + brush = &gset->brush[GP_SCULPT_TYPE_GRAB]; brush->size = 50; brush->strength = 0.3f; - brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF; + brush->flag = GP_SCULPT_FLAG_USE_FALLOFF; - brush = &gset->brush[GP_EDITBRUSH_TYPE_PUSH]; + brush = &gset->brush[GP_SCULPT_TYPE_PUSH]; brush->size = 25; brush->strength = 0.3f; - brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF; + brush->flag = GP_SCULPT_FLAG_USE_FALLOFF; - brush = &gset->brush[GP_EDITBRUSH_TYPE_TWIST]; + brush = &gset->brush[GP_SCULPT_TYPE_TWIST]; brush->size = 50; brush->strength = 0.3f; // XXX? - brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF; + brush->flag = GP_SCULPT_FLAG_USE_FALLOFF; - brush = &gset->brush[GP_EDITBRUSH_TYPE_PINCH]; + brush = &gset->brush[GP_SCULPT_TYPE_PINCH]; brush->size = 50; brush->strength = 0.5f; // XXX? - brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF; + brush->flag = GP_SCULPT_FLAG_USE_FALLOFF; - brush = &gset->brush[GP_EDITBRUSH_TYPE_RANDOMIZE]; + brush = &gset->brush[GP_SCULPT_TYPE_RANDOMIZE]; brush->size = 25; brush->strength = 0.5f; - brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF; + brush->flag = GP_SCULPT_FLAG_USE_FALLOFF; - brush = &gset->brush[GP_EDITBRUSH_TYPE_CLONE]; + brush = &gset->brush[GP_SCULPT_TYPE_CLONE]; brush->size = 50; brush->strength = 1.0f; } @@ -1404,17 +1404,17 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain) for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { ToolSettings *ts = scene->toolsettings; /* initialize use position for sculpt brushes */ - ts->gp_sculpt.flag |= GP_BRUSHEDIT_FLAG_APPLY_POSITION; + ts->gp_sculpt.flag |= GP_SCULPT_SETT_FLAG_APPLY_POSITION; /* new strength sculpt brush */ if (ts->gp_sculpt.brush[0].size >= 11) { - GP_BrushEdit_Settings *gset = &ts->gp_sculpt; - GP_EditBrush_Data *brush; + GP_Sculpt_Settings *gset = &ts->gp_sculpt; + GP_Sculpt_Data *brush; - brush = &gset->brush[GP_EDITBRUSH_TYPE_STRENGTH]; + brush = &gset->brush[GP_SCULPT_TYPE_STRENGTH]; brush->size = 25; brush->strength = 0.5f; - brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF; + brush->flag = GP_SCULPT_FLAG_USE_FALLOFF; } } /* Convert Grease Pencil to new palettes/brushes diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index 0be1c048bfb..a28b4ae7784 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -454,6 +454,7 @@ static void do_version_layers_to_collections(Main *bmain, Scene *scene) /* Handle legacy render layers. */ bool have_override = false; + const bool need_default_renderlayer = scene->r.layers.first == NULL; for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) { ViewLayer *view_layer = BKE_view_layer_add(scene, srl->name); @@ -541,9 +542,9 @@ static void do_version_layers_to_collections(Main *bmain, Scene *scene) BLI_freelistN(&scene->r.layers); - /* If render layers included overrides, we also create a vanilla - * viewport layer without them. */ - if (have_override) { + /* If render layers included overrides, or there are no render layers, + * we also create a vanilla viewport layer. */ + if (have_override || need_default_renderlayer) { ViewLayer *view_layer = BKE_view_layer_add(scene, "Viewport"); /* Make it first in the list. */ @@ -1078,12 +1079,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) { /* Grease pencil sculpt and paint cursors */ - if (!DNA_struct_elem_find(fd->filesdna, "GP_BrushEdit_Settings", "int", "weighttype")) { + if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "weighttype")) { for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { /* sculpt brushes */ - GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt; + GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt; if (gset) { - gset->weighttype = GP_EDITBRUSH_TYPE_WEIGHT; + gset->weighttype = GP_SCULPT_TYPE_WEIGHT; } } } @@ -1092,15 +1093,15 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) float curcolor_add[3], curcolor_sub[3]; ARRAY_SET_ITEMS(curcolor_add, 1.0f, 0.6f, 0.6f); ARRAY_SET_ITEMS(curcolor_sub, 0.6f, 0.6f, 1.0f); - GP_EditBrush_Data *gp_brush; + GP_Sculpt_Data *gp_brush; for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { ToolSettings *ts = scene->toolsettings; /* sculpt brushes */ - GP_BrushEdit_Settings *gset = &ts->gp_sculpt; - for (int i = 0; i < GP_EDITBRUSH_TYPE_MAX; ++i) { + GP_Sculpt_Settings *gset = &ts->gp_sculpt; + for (int i = 0; i < GP_SCULPT_TYPE_MAX; ++i) { gp_brush = &gset->brush[i]; - gp_brush->flag |= GP_EDITBRUSH_FLAG_ENABLE_CURSOR; + gp_brush->flag |= GP_SCULPT_FLAG_ENABLE_CURSOR; copy_v3_v3(gp_brush->curcolor_add, curcolor_add); copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); } @@ -1122,10 +1123,10 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } /* Grease pencil multiframe falloff curve */ - if (!DNA_struct_elem_find(fd->filesdna, "GP_BrushEdit_Settings", "CurveMapping", "cur_falloff")) { + if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "CurveMapping", "cur_falloff")) { for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { /* sculpt brushes */ - GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt; + GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt; if ((gset) && (gset->cur_falloff == NULL)) { gset->cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); curvemapping_initialize(gset->cur_falloff); @@ -1962,10 +1963,10 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } /* default loc axis */ - if (!DNA_struct_elem_find(fd->filesdna, "GP_BrushEdit_Settings", "int", "lock_axis")) { + if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "lock_axis")) { for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { /* lock axis */ - GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt; + GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt; if (gset) { gset->lock_axis = GP_LOCKAXIS_Y; } @@ -2235,7 +2236,8 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) for (Object *ob = bmain->object.first; ob; ob = ob->id.next) { ob->empty_image_visibility_flag = ( OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE | - OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC); + OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC | + OB_EMPTY_IMAGE_VISIBLE_BACKSIDE); } @@ -2252,6 +2254,42 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } { + /* Grease pencil reset sculpt brushes after struct rename */ + if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "weighttype")) { + float curcolor_add[3], curcolor_sub[3]; + ARRAY_SET_ITEMS(curcolor_add, 1.0f, 0.6f, 0.6f); + ARRAY_SET_ITEMS(curcolor_sub, 0.6f, 0.6f, 1.0f); + + for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { + /* sculpt brushes */ + GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt; + if (gset) { + for (int i = 0; i < GP_SCULPT_TYPE_MAX; i++) { + GP_Sculpt_Data *gp_brush = &gset->brush[i]; + gp_brush->size = 30; + gp_brush->strength = 0.5f; + gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR; + copy_v3_v3(gp_brush->curcolor_add, curcolor_add); + copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub); + } + } + } + } + + /* Grease pencil target weight */ + if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "float", "target_weight")) { + for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { + /* sculpt brushes */ + GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt; + if (gset) { + for (int i = 0; i < GP_SCULPT_TYPE_MAX; i++) { + GP_Sculpt_Data *gp_brush = &gset->brush[i]; + gp_brush->target_weight = 1.0f; + } + } + } + } + if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "float", "overscan")) { for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { scene->eevee.overscan = 3.0f; diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c index 12d5e62aa18..420e3738427 100644 --- a/source/blender/blenloader/intern/versioning_defaults.c +++ b/source/blender/blenloader/intern/versioning_defaults.c @@ -42,10 +42,13 @@ #include "DNA_windowmanager_types.h" #include "DNA_workspace_types.h" +#include "BKE_brush.h" #include "BKE_colortools.h" #include "BKE_layer.h" +#include "BKE_library.h" #include "BKE_main.h" #include "BKE_node.h" +#include "BKE_paint.h" #include "BKE_screen.h" #include "BKE_workspace.h" @@ -77,6 +80,9 @@ void BLO_update_defaults_userpref_blend(void) /* Leave temp directory empty, will then get appropriate value per OS. */ U.tempdir[0] = '\0'; + + /* Only enable tooltips translation by default, without actually enabling translation itself, for now. */ + U.transopts = USER_TR_TOOLTIPS; } /** @@ -104,6 +110,9 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template) { View3D *v3d = (View3D *)sl; v3d->overlay.weight_paint_mode_opacity = 1.0f; + /* grease pencil settings */ + v3d->vertex_opacity = 1.0f; + v3d->gp_flag |= V3D_GP_SHOW_EDIT_LINES; } } } @@ -231,4 +240,36 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template) mesh->smoothresh = DEG2RADF(30); } } + + /* Grease Pencil New Eraser Brush */ + if (builtin_template) { + Brush *br; + /* Rename old Hard Eraser */ + br = (Brush *)BKE_libblock_find_name(bmain, ID_BR, "Eraser Hard"); + if (br) { + strcpy(br->id.name, "BREraser Point"); + } + for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) { + ToolSettings *ts = scene->toolsettings; + /* create new hard brush (only create one, but need ToolSettings) */ + br = (Brush *)BKE_libblock_find_name(bmain, ID_BR, "Eraser Hard"); + if (!br) { + Paint *paint = &ts->gp_paint->paint; + Brush *old_brush = paint->brush; + + br = BKE_brush_add_gpencil(bmain, ts, "Eraser Hard"); + br->size = 30.0f; + br->gpencil_settings->draw_strength = 1.0f; + br->gpencil_settings->flag = (GP_BRUSH_ENABLE_CURSOR | GP_BRUSH_DEFAULT_ERASER); + br->gpencil_settings->icon_id = GP_BRUSH_ICON_ERASE_HARD; + br->gpencil_tool = GPAINT_TOOL_ERASE; + br->gpencil_settings->eraser_mode = GP_BRUSH_ERASER_SOFT; + br->gpencil_settings->era_strength_f = 100.0f; + br->gpencil_settings->era_thickness_f = 50.0f; + + /* back to default brush */ + BKE_paint_brush_set(paint, old_brush); + } + } + } } diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c index b14b17cbd8f..5279ed19343 100644 --- a/source/blender/blenloader/intern/versioning_userdef.c +++ b/source/blender/blenloader/intern/versioning_userdef.c @@ -36,10 +36,14 @@ #include "BKE_addon.h" #include "BKE_colorband.h" +#include "BKE_idprop.h" #include "BKE_main.h" +#include "BKE_keyconfig.h" #include "BLO_readfile.h" /* Own include. */ +#include "wm_event_types.h" + /* Disallow access to global userdef. */ #define U (_error_) @@ -92,6 +96,29 @@ static void do_versions_theme(UserDef *userdef, bTheme *btheme) #undef USER_VERSION_ATLEAST } +/* UserDef.flag */ +#define USER_LMOUSESELECT (1 << 14) /* deprecated */ + +static void do_version_select_mouse(UserDef *userdef, wmKeyMapItem *kmi) +{ + /* Remove select/action mouse from user defined keymaps. */ + enum { + ACTIONMOUSE = 0x0005, + SELECTMOUSE = 0x0006, + EVT_TWEAK_A = 0x5005, + EVT_TWEAK_S = 0x5006, + }; + const bool left = (userdef->flag & USER_LMOUSESELECT) != 0; + + switch (kmi->type) { + case SELECTMOUSE: kmi->type = (left) ? LEFTMOUSE : RIGHTMOUSE; break; + case ACTIONMOUSE: kmi->type = (left) ? RIGHTMOUSE : LEFTMOUSE; break; + case EVT_TWEAK_S: kmi->type = (left) ? EVT_TWEAK_L : EVT_TWEAK_R; break; + case EVT_TWEAK_A: kmi->type = (left) ? EVT_TWEAK_R : EVT_TWEAK_L; break; + default: break; + } +} + /* patching UserDef struct and Themes */ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef) { @@ -353,6 +380,32 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef) } } + if (!USER_VERSION_ATLEAST(280, 31)) { + /* Remove select/action mouse from user defined keymaps. */ + for (wmKeyMap *keymap = userdef->user_keymaps.first; keymap; keymap = keymap->next) { + for (wmKeyMapDiffItem *kmdi = keymap->diff_items.first; kmdi; kmdi = kmdi->next) { + if (kmdi->remove_item) { + do_version_select_mouse(userdef, kmdi->remove_item); + } + if (kmdi->add_item) { + do_version_select_mouse(userdef, kmdi->add_item); + } + } + + for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) { + do_version_select_mouse(userdef, kmi); + } + } + } + + if (!USER_VERSION_ATLEAST(280, 32)) { + if ((userdef->flag & USER_LMOUSESELECT) ) { + userdef->flag &= ~USER_LMOUSESELECT; + wmKeyConfigPref *kpt = BKE_keyconfig_pref_ensure(userdef, WM_KEYCONFIG_STR_DEFAULT); + IDP_AddToGroup(kpt->prop, IDP_New(IDP_INT, &(IDPropertyTemplate){ .i = 0, }, "select_mouse")); + } + } + /** * Include next version bump. */ @@ -375,3 +428,5 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef) #undef USER_VERSION_ATLEAST } + +#undef USER_LMOUSESELECT diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index fd097927f57..99cd9b805bf 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1248,6 +1248,13 @@ static void write_userdef(WriteData *wd, const UserDef *userdef) } } + for (const wmKeyConfigPref *kpt = userdef->user_keyconfig_prefs.first; kpt; kpt = kpt->next) { + writestruct(wd, DATA, wmKeyConfigPref, 1, kpt); + if (kpt->prop) { + IDP_WriteProperty(kpt->prop, wd); + } + } + for (const bUserMenu *um = userdef->user_menus.first; um; um = um->next) { writestruct(wd, DATA, bUserMenu, 1, um); for (const bUserMenuItem *umi = um->items.first; umi; umi = umi->next) { diff --git a/source/blender/blentranslation/intern/blt_lang.c b/source/blender/blentranslation/intern/blt_lang.c index f373ca24861..a36fe245a2a 100644 --- a/source/blender/blentranslation/intern/blt_lang.c +++ b/source/blender/blentranslation/intern/blt_lang.c @@ -157,9 +157,12 @@ static void fill_locales(void) } if (id == 0) { - /* The DEFAULT item... */ + /* The DEFAULT/Automatic item... */ if (BLI_strnlen(loc, 2)) { - locales[id] = locales_menu[idx].description = BLI_strdup(""); + locales[id] = ""; + /* Keep this tip in sync with the one in rna_userdef (rna_enum_language_default_items). */ + locales_menu[idx].description = BLI_strdup("Automatically choose system's defined language " + "if available, or fall-back to English"); } /* Menu "label", not to be stored in locales! */ else { diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index 7bea0363a04..50aa3f08fbc 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -371,6 +371,8 @@ typedef struct BMVertsCalcNormalsData { static void mesh_verts_calc_normals_accum_cb(void *userdata, MempoolIterData *mp_f) { +#define FLT_EQ_NONAN(_fa, _fb) (*((const uint32_t *)&_fa) == *((const uint32_t *)&_fb)) + BMVertsCalcNormalsData *data = userdata; BMFace *f = (BMFace *)mp_f; @@ -398,6 +400,11 @@ static void mesh_verts_calc_normals_accum_cb(void *userdata, MempoolIterData *mp fac = saacos(-dotprod); + if (fac != fac) { /* NAN detection. */ + /* Degenerated case, nothing to do here, just ignore that vertex. */ + continue; + } + /* accumulate weighted face normal into the vertex's normal */ float *v_no = data->vnos ? data->vnos[BM_elem_index_get(l_iter->v)] : l_iter->v->no; @@ -413,7 +420,7 @@ static void mesh_verts_calc_normals_accum_cb(void *userdata, MempoolIterData *mp * - v_no[0] was not FLT_MAX, i.e. it was not locked by another thread. */ const float vl = atomic_cas_float(&v_no[0], virtual_lock, FLT_MAX); - if (vl == virtual_lock && vl != FLT_MAX) { + if (FLT_EQ_NONAN(vl, virtual_lock) && vl != FLT_MAX) { break; } virtual_lock = vl; @@ -431,6 +438,8 @@ static void mesh_verts_calc_normals_accum_cb(void *userdata, MempoolIterData *mp BLI_assert(virtual_lock == FLT_MAX); } while ((l_iter = l_iter->next) != l_first); + +#undef FLT_EQ_NONAN } static void mesh_verts_calc_normals_normalize_cb(void *userdata, MempoolIterData *mp_v) diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index 9f1b032ea0b..e7ee1d45dc3 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -193,7 +193,7 @@ static BMFace *bm_face_create_from_mpoly( * \warning This function doesn't calculate face normals. */ void BM_mesh_bm_from_me( - BMesh *bm, Mesh *me, + BMesh *bm, const Mesh *me, const struct BMeshFromMeshParams *params) { const bool is_new = diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.h b/source/blender/bmesh/intern/bmesh_mesh_conv.h index 0560155faa0..8f389a8cf05 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.h +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.h @@ -52,7 +52,7 @@ struct BMeshFromMeshParams { int64_t cd_mask_extra; }; void BM_mesh_bm_from_me( - BMesh *bm, struct Mesh *me, + BMesh *bm, const struct Mesh *me, const struct BMeshFromMeshParams *params) ATTR_NONNULL(1, 3); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_cycle.cc b/source/blender/depsgraph/intern/builder/deg_builder_cycle.cc index 0d28344ef95..a8768c899ad 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_cycle.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_cycle.cc @@ -148,6 +148,35 @@ bool schedule_non_checked_node(CyclesSolverState *state) return false; } +bool check_relation_can_murder(DepsRelation *relation) +{ + if (relation->flag & DEPSREL_FLAG_GODMODE) { + return false; + } + return true; +} + +DepsRelation *select_relation_to_murder(DepsRelation *relation, + StackEntry *cycle_start_entry) +{ + /* More or less russian roulette solver, which will make sure only + * specially marked relations are kept alive. + * + * TODO(sergey): There might be better strategies here. */ + if (check_relation_can_murder(relation)) { + return relation; + } + StackEntry *current = cycle_start_entry; + OperationDepsNode *to_node = (OperationDepsNode *)relation->to; + while (current->node != to_node) { + if (check_relation_can_murder(current->via_relation)) { + return current->via_relation; + } + current = current->from; + } + return relation; +} + /* Solve cycles with all nodes which are scheduled for traversal. */ void solve_cycles(CyclesSolverState *state) { @@ -168,7 +197,6 @@ void solve_cycles(CyclesSolverState *state) to->full_identifier().c_str(), node->full_identifier().c_str(), rel->name); - StackEntry *current = entry; while (current->node != to) { BLI_assert(current != NULL); @@ -178,8 +206,9 @@ void solve_cycles(CyclesSolverState *state) current->via_relation->name); current = current->from; } - /* TODO(sergey): So called russian roulette cycle solver. */ - rel->flag |= DEPSREL_FLAG_CYCLIC; + DepsRelation *sacrificial_relation = + select_relation_to_murder(rel, entry); + sacrificial_relation->flag |= DEPSREL_FLAG_CYCLIC; ++state->num_cycles; } else if (to_state == NODE_NOT_VISITED) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index adf67c5a8b1..e59de4224c0 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -507,7 +507,7 @@ void DepsgraphNodeBuilder::build_collection( id_node = find_id_node(&collection->id); if (is_collection_visible && id_node->is_directly_visible == false && - id_node->is_collection_fully_expanded == true) + id_node->is_collection_fully_expanded == true) { /* Collection became visible, make sure nested collections and * objects are poked with the new visibility flag, since they @@ -800,7 +800,7 @@ void DepsgraphNodeBuilder::build_object_transform(Object *object) /* object transform is done */ op_node = add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM, - function_bind(BKE_object_eval_done, + function_bind(BKE_object_eval_transform_final, _1, ob_cow), DEG_OPCODE_TRANSFORM_FINAL); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc index 88e5ca9346c..eb2ed0e637d 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc @@ -230,7 +230,9 @@ void DepsgraphNodeBuilder::build_rig(Object *object, bool is_object_visible) op_node = add_operation_node(&object->id, DEG_NODE_TYPE_EVAL_POSE, - NULL, + function_bind(BKE_pose_eval_done, + _1, + object_cow), DEG_OPCODE_POSE_DONE); op_node->set_as_exit(); /* Bones. */ @@ -379,7 +381,9 @@ void DepsgraphNodeBuilder::build_proxy_rig(Object *object) DEG_OPCODE_POSE_CLEANUP); op_node = add_operation_node(&object->id, DEG_NODE_TYPE_EVAL_POSE, - NULL, + function_bind(BKE_pose_eval_proxy_done, + _1, + object_cow), DEG_OPCODE_POSE_DONE); op_node->set_as_exit(); } diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 7a26121801a..8f579216518 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -104,6 +104,7 @@ extern "C" { #include "intern/builder/deg_builder.h" #include "intern/builder/deg_builder_pchanmap.h" +#include "intern/eval/deg_eval_copy_on_write.h" #include "intern/nodes/deg_node.h" #include "intern/nodes/deg_node_component.h" @@ -303,10 +304,12 @@ DepsRelation *DepsgraphRelationBuilder::add_time_relation( TimeSourceDepsNode *timesrc, DepsNode *node_to, const char *description, - bool check_unique) + bool check_unique, + int flags) { if (timesrc && node_to) { - return graph_->add_new_relation(timesrc, node_to, description, check_unique); + return graph_->add_new_relation( + timesrc, node_to, description, check_unique, flags); } else { DEG_DEBUG_PRINTF((::Depsgraph *)graph_, @@ -322,13 +325,15 @@ DepsRelation *DepsgraphRelationBuilder::add_operation_relation( OperationDepsNode *node_from, OperationDepsNode *node_to, const char *description, - bool check_unique) + bool check_unique, + int flags) { if (node_from && node_to) { return graph_->add_new_relation(node_from, node_to, description, - check_unique); + check_unique, + flags); } else { DEG_DEBUG_PRINTF((::Depsgraph *)graph_, @@ -2389,8 +2394,7 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node /* XXX: This is a quick hack to make Alt-A to work. */ // add_relation(time_source_key, copy_on_write_key, "Fluxgate capacitor hack"); /* Resat of code is using rather low level trickery, so need to get some - * explicit pointers. - */ + * explicit pointers. */ DepsNode *node_cow = find_node(copy_on_write_key); OperationDepsNode *op_cow = node_cow->get_exit_operation(); /* Plug any other components to this one. */ @@ -2404,7 +2408,7 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node /* Component explicitly requests to not add relation. */ continue; } - int rel_flag = DEPSREL_FLAG_NO_FLUSH; + int rel_flag = (DEPSREL_FLAG_NO_FLUSH | DEPSREL_FLAG_GODMODE); if (id_type == ID_ME && comp_node->type == DEG_NODE_TYPE_GEOMETRY) { rel_flag &= ~DEPSREL_FLAG_NO_FLUSH; } @@ -2412,7 +2416,6 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node if (id_type == ID_MA) { rel_flag &= ~DEPSREL_FLAG_NO_FLUSH; } - /* Notes on exceptions: * - Parameters component is where drivers are living. Changing any * of the (custom) properties in the original datablock (even the @@ -2426,9 +2429,15 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node * to preserve that cache in copy-on-write, but for the time being * we allow flush to layer collections component which will ensure * that cached array fo bases exists and is up-to-date. + * + * - Action is allowed to flush as well, this way it's possible to + * keep current tagging in animation editors (which tags action for + * CoW update when it's changed) but yet guarantee evaluation order + * with objects which are using that action. */ if (comp_node->type == DEG_NODE_TYPE_PARAMETERS || - comp_node->type == DEG_NODE_TYPE_LAYER_COLLECTIONS) + comp_node->type == DEG_NODE_TYPE_LAYER_COLLECTIONS || + (comp_node->type == DEG_NODE_TYPE_ANIMATION && id_type == ID_AC)) { rel_flag &= ~DEPSREL_FLAG_NO_FLUSH; } @@ -2490,10 +2499,15 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node Object *object = (Object *)id_orig; ID *object_data_id = (ID *)object->data; if (object_data_id != NULL) { - OperationKey data_copy_on_write_key(object_data_id, - DEG_NODE_TYPE_COPY_ON_WRITE, - DEG_OPCODE_COPY_ON_WRITE); - add_relation(data_copy_on_write_key, copy_on_write_key, "Eval Order"); + if (deg_copy_on_write_is_needed(object_data_id)) { + OperationKey data_copy_on_write_key(object_data_id, + DEG_NODE_TYPE_COPY_ON_WRITE, + DEG_OPCODE_COPY_ON_WRITE); + add_relation(data_copy_on_write_key, + copy_on_write_key, + "Eval Order", + DEPSREL_FLAG_GODMODE); + } } else { BLI_assert(object->type == OB_EMPTY); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h index 81f21f5bf77..c6db975c6c2 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h @@ -44,6 +44,7 @@ #include "BLI_string.h" #include "intern/builder/deg_builder_map.h" +#include "intern/depsgraph.h" #include "intern/nodes/deg_node.h" #include "intern/nodes/deg_node_component.h" #include "intern/nodes/deg_node_operation.h" @@ -186,19 +187,28 @@ struct DepsgraphRelationBuilder DepsRelation *add_relation(const KeyFrom& key_from, const KeyTo& key_to, const char *description, - bool check_unique = false); + bool check_unique = false, + int flags = 0); + + template <typename KeyFrom, typename KeyTo> + DepsRelation *add_relation(const KeyFrom& key_from, + const KeyTo& key_to, + const char *description, + eDepsRelation_Flag flag); template <typename KeyTo> DepsRelation *add_relation(const TimeSourceKey& key_from, const KeyTo& key_to, const char *description, - bool check_unique = false); + bool check_unique = false, + int flags = 0); template <typename KeyType> DepsRelation *add_node_handle_relation(const KeyType& key_from, const DepsNodeHandle *handle, const char *description, - bool check_unique = false); + bool check_unique = false, + int flags = 0); void add_customdata_mask(const ComponentKey &key, uint64_t mask); void add_special_eval_flag(ID *object, uint32_t flag); @@ -306,11 +316,13 @@ protected: DepsRelation *add_time_relation(TimeSourceDepsNode *timesrc, DepsNode *node_to, const char *description, - bool check_unique = false); + bool check_unique = false, + int flags = 0); DepsRelation *add_operation_relation(OperationDepsNode *node_from, OperationDepsNode *node_to, const char *description, - bool check_unique = false); + bool check_unique = false, + int flags = 0); template <typename KeyType> DepsNodeHandle create_node_handle(const KeyType& key, diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h index 894d4172c00..726393f39b9 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h @@ -49,14 +49,16 @@ template <typename KeyFrom, typename KeyTo> DepsRelation *DepsgraphRelationBuilder::add_relation(const KeyFrom &key_from, const KeyTo &key_to, const char *description, - bool check_unique) + bool check_unique, + int flags) { DepsNode *node_from = get_node(key_from); DepsNode *node_to = get_node(key_to); OperationDepsNode *op_from = node_from ? node_from->get_exit_operation() : NULL; OperationDepsNode *op_to = node_to ? node_to->get_entry_operation() : NULL; if (op_from && op_to) { - return add_operation_relation(op_from, op_to, description, check_unique); + return add_operation_relation( + op_from, op_to, description, check_unique, flags); } else { if (!op_from) { @@ -81,18 +83,31 @@ DepsRelation *DepsgraphRelationBuilder::add_relation(const KeyFrom &key_from, return NULL; } +template <typename KeyFrom, typename KeyTo> +DepsRelation *DepsgraphRelationBuilder::add_relation( + const KeyFrom& key_from, + const KeyTo& key_to, + const char *description, + eDepsRelation_Flag flag) +{ + return add_relation( + key_from, key_to, description, false, static_cast<int>(flag)); +} + template <typename KeyTo> DepsRelation *DepsgraphRelationBuilder::add_relation( const TimeSourceKey &key_from, const KeyTo &key_to, const char *description, - bool check_unique) + bool check_unique, + int flags) { TimeSourceDepsNode *time_from = get_node(key_from); DepsNode *node_to = get_node(key_to); OperationDepsNode *op_to = node_to ? node_to->get_entry_operation() : NULL; if (time_from != NULL && op_to != NULL) { - return add_time_relation(time_from, op_to, description, check_unique); + return add_time_relation( + time_from, op_to, description, check_unique, flags); } return NULL; } @@ -102,13 +117,15 @@ DepsRelation *DepsgraphRelationBuilder::add_node_handle_relation( const KeyType &key_from, const DepsNodeHandle *handle, const char *description, - bool check_unique) + bool check_unique, + int flags) { DepsNode *node_from = get_node(key_from); OperationDepsNode *op_from = node_from ? node_from->get_exit_operation() : NULL; OperationDepsNode *op_to = handle->node->get_entry_operation(); if (op_from != NULL && op_to != NULL) { - return add_operation_relation(op_from, op_to, description, check_unique); + return add_operation_relation( + op_from, op_to, description, check_unique, flags); } else { if (!op_from) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc index 331b476be2c..1abed8bb6a2 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc @@ -78,88 +78,100 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object, RootPChanMap *root_map) { bKinematicConstraint *data = (bKinematicConstraint *)con->data; - - /* attach owner to IK Solver too - * - assume that owner is always part of chain - * - see notes on direction of rel below... - */ + /* Attach owner to IK Solver to. */ bPoseChannel *rootchan = BKE_armature_ik_solver_find_root(pchan, data); if (rootchan == NULL) { return; } - OperationKey pchan_local_key(&object->id, DEG_NODE_TYPE_BONE, - pchan->name, DEG_OPCODE_BONE_LOCAL); - OperationKey init_ik_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT_IK); - OperationKey solver_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, + OperationKey pchan_local_key(&object->id, + DEG_NODE_TYPE_BONE, + pchan->name, + DEG_OPCODE_BONE_LOCAL); + OperationKey init_ik_key( + &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT_IK); + OperationKey solver_key(&object->id, + DEG_NODE_TYPE_EVAL_POSE, rootchan->name, DEG_OPCODE_POSE_IK_SOLVER); - + OperationKey pose_cleanup_key( + &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP); add_relation(pchan_local_key, init_ik_key, "IK Constraint -> Init IK Tree"); add_relation(init_ik_key, solver_key, "Init IK -> IK Solver"); - + /* Never cleanup before solver is run. */ + add_relation(solver_key, + pose_cleanup_key, + "IK Solver -> Cleanup", + DEPSREL_FLAG_GODMODE); /* IK target */ - // XXX: this should get handled as part of the constraint code + /* TODO(sergey): This should get handled as part of the constraint code. */ if (data->tar != NULL) { - /* TODO(sergey): For until we'll store partial matricies in the depsgraph, - * we create dependency between target object and pose eval component. + /* TODO(sergey): For until we'll store partial matricies in the + * depsgraph, we create dependency between target object and pose eval + * component. * - * This way we ensuring the whole subtree is updated from scratch without - * need of intermediate matricies. This is an overkill, but good enough for - * testing IK solver. - */ - // FIXME: geometry targets... + * This way we ensuring the whole subtree is updated from scratch + * without need of intermediate matricies. This is an overkill, but good + * enough for testing IK solver. */ ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE); if ((data->tar->type == OB_ARMATURE) && (data->subtarget[0])) { - /* TODO(sergey): This is only for until granular update stores intermediate result. */ + /* TODO(sergey): This is only for until granular update stores + * intermediate result. */ if (data->tar != object) { - /* different armature - can just read the results */ - ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_BONE, data->subtarget); + /* Different armature - can just read the results. */ + ComponentKey target_key( + &data->tar->id, DEG_NODE_TYPE_BONE, data->subtarget); add_relation(target_key, pose_key, con->name); } else { - /* same armature - we'll use the ready state only, just in case this bone is in the chain we're solving */ - OperationKey target_key(&data->tar->id, DEG_NODE_TYPE_BONE, data->subtarget, DEG_OPCODE_BONE_DONE); + /* Same armature - we'll use the ready state only, just in case + * this bone is in the chain we're solving. */ + OperationKey target_key(&data->tar->id, + DEG_NODE_TYPE_BONE, + data->subtarget, + DEG_OPCODE_BONE_DONE); add_relation(target_key, solver_key, con->name); } } - else if (ELEM(data->tar->type, OB_MESH, OB_LATTICE) && (data->subtarget[0])) { - /* vertex group target */ - /* NOTE: for now, we don't need to represent vertex groups separately... */ + else if (data->subtarget[0] && + ELEM(data->tar->type, OB_MESH, OB_LATTICE)) + { + /* Vertex group target. */ + /* NOTE: for now, we don't need to represent vertex groups + * separately. */ ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_GEOMETRY); add_relation(target_key, solver_key, con->name); - if (data->tar->type == OB_MESH) { add_customdata_mask(target_key, CD_MASK_MDEFORMVERT); } } else { - /* Standard Object Target */ + /* Standard Object Target. */ ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_TRANSFORM); add_relation(target_key, pose_key, con->name); } - - if ((data->tar == object) && (data->subtarget[0])) { + if (data->tar == object && data->subtarget[0]) { /* Prevent target's constraints from linking to anything from same - * chain that it controls. - */ + * chain that it controls. */ root_map->add_bone(data->subtarget, rootchan->name); } } - - /* Pole Target */ - // XXX: this should get handled as part of the constraint code + /* Pole Target. */ + /* TODO(sergey): This should get handled as part of the constraint code. */ if (data->poletar != NULL) { if ((data->poletar->type == OB_ARMATURE) && (data->polesubtarget[0])) { - // XXX: same armature issues - ready vs done? - ComponentKey target_key(&data->poletar->id, DEG_NODE_TYPE_BONE, data->polesubtarget); + ComponentKey target_key(&data->poletar->id, + DEG_NODE_TYPE_BONE, + data->polesubtarget); add_relation(target_key, solver_key, con->name); } - else if (ELEM(data->poletar->type, OB_MESH, OB_LATTICE) && (data->polesubtarget[0])) { - /* vertex group target */ - /* NOTE: for now, we don't need to represent vertex groups separately... */ + else if (data->polesubtarget[0] && + ELEM(data->poletar->type, OB_MESH, OB_LATTICE)) + { + /* Vertex group target. */ + /* NOTE: for now, we don't need to represent vertex groups + * separately. */ ComponentKey target_key(&data->poletar->id, DEG_NODE_TYPE_GEOMETRY); add_relation(target_key, solver_key, con->name); - if (data->poletar->type == OB_MESH) { add_customdata_mask(target_key, CD_MASK_MDEFORMVERT); } @@ -169,60 +181,65 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object, add_relation(target_key, solver_key, con->name); } } - - DEG_DEBUG_PRINTF((::Depsgraph *)graph_, - BUILD, "\nStarting IK Build: pchan = %s, target = (%s, %s), segcount = %d\n", - pchan->name, data->tar->id.name, data->subtarget, data->rootbone); - + DEG_DEBUG_PRINTF( + (::Depsgraph *)graph_, + BUILD, + "\nStarting IK Build: pchan = %s, target = (%s, %s), " + "segcount = %d\n", + pchan->name, data->tar->id.name, data->subtarget, data->rootbone); bPoseChannel *parchan = pchan; - /* exclude tip from chain? */ + /* Exclude tip from chain if needed. */ if (!(data->flag & CONSTRAINT_IK_TIP)) { parchan = pchan->parent; } - root_map->add_bone(parchan->name, rootchan->name); - OperationKey parchan_transforms_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_READY); add_relation(parchan_transforms_key, solver_key, "IK Solver Owner"); - - /* Walk to the chain's root */ - //size_t segcount = 0; + /* Walk to the chain's root. */ int segcount = 0; - - while (parchan) { - /* Make IK-solver dependent on this bone's result, - * since it can only run after the standard results - * of the bone are know. Validate links step on the - * bone will ensure that users of this bone only - * grab the result with IK solver results... - */ + while (parchan != NULL) { + /* Make IK-solver dependent on this bone's result, since it can only run + * after the standard results of the bone are know. Validate links step + * on the bone will ensure that users of this bone only grab the result + * with IK solver results. */ if (parchan != pchan) { - OperationKey parent_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_READY); + OperationKey parent_key(&object->id, + DEG_NODE_TYPE_BONE, + parchan->name, + DEG_OPCODE_BONE_READY); add_relation(parent_key, solver_key, "IK Chain Parent"); - - OperationKey done_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_DONE); - add_relation(solver_key, done_key, "IK Chain Result"); + OperationKey bone_done_key(&object->id, + DEG_NODE_TYPE_BONE, + parchan->name, + DEG_OPCODE_BONE_DONE); + add_relation(solver_key, bone_done_key, "IK Chain Result"); } else { - OperationKey final_transforms_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_DONE); + OperationKey final_transforms_key(&object->id, + DEG_NODE_TYPE_BONE, + parchan->name, + DEG_OPCODE_BONE_DONE); add_relation(solver_key, final_transforms_key, "IK Solver Result"); } parchan->flag |= POSE_DONE; - - root_map->add_bone(parchan->name, rootchan->name); - - /* continue up chain, until we reach target number of items... */ - DEG_DEBUG_PRINTF((::Depsgraph *)graph_, BUILD, " %d = %s\n", segcount, parchan->name); + /* continue up chain, until we reach target number of items. */ + DEG_DEBUG_PRINTF((::Depsgraph *)graph_, + BUILD, + " %d = %s\n", + segcount, parchan->name); + /* TODO(sergey): This is an arbitrary value, which was just following + * old code convention. */ segcount++; - if ((segcount == data->rootbone) || (segcount > 255)) break; /* 255 is weak */ - + if ((segcount == data->rootbone) || (segcount > 255)) { + break; + } parchan = parchan->parent; } - - OperationKey done_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE); - add_relation(solver_key, done_key, "PoseEval Result-Bone Link"); + OperationKey pose_done_key( + &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE); + add_relation(solver_key, pose_done_key, "PoseEval Result-Bone Link"); } /* Spline IK Eval Steps */ @@ -233,69 +250,85 @@ void DepsgraphRelationBuilder::build_splineik_pose(Object *object, { bSplineIKConstraint *data = (bSplineIKConstraint *)con->data; bPoseChannel *rootchan = BKE_armature_splineik_solver_find_root(pchan, data); - OperationKey transforms_key(&object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_READY); - OperationKey init_ik_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT_IK); - OperationKey solver_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, rootchan->name, DEG_OPCODE_POSE_SPLINE_IK_SOLVER); - + OperationKey transforms_key(&object->id, + DEG_NODE_TYPE_BONE, + pchan->name, + DEG_OPCODE_BONE_READY); + OperationKey init_ik_key(&object->id, + DEG_NODE_TYPE_EVAL_POSE, + DEG_OPCODE_POSE_INIT_IK); + OperationKey solver_key(&object->id, + DEG_NODE_TYPE_EVAL_POSE, + rootchan->name, + DEG_OPCODE_POSE_SPLINE_IK_SOLVER); + OperationKey pose_cleanup_key( + &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP); /* Solver depends on initialization. */ add_relation(init_ik_key, solver_key, "Init IK -> IK Solver"); - - /* attach owner to IK Solver too - * - assume that owner is always part of chain - * - see notes on direction of rel below... - */ - add_relation(transforms_key, solver_key, "Spline IK Solver Owner"); - - /* attach path dependency to solver */ - if (data->tar) { - /* TODO(sergey): For until we'll store partial matricies in the depsgraph, - * we create dependency between target object and pose eval component. - * See IK pose for a bit more information. + /* Never cleanup before solver is run. */ + add_relation(solver_key, pose_cleanup_key, "IK Solver -> Cleanup"); + /* Attach owner to IK Solver. */ + add_relation(transforms_key, + solver_key, + "Spline IK Solver Owner", + DEPSREL_FLAG_GODMODE); + /* Attach path dependency to solver. */ + if (data->tar != NULL) { + /* TODO(sergey): For until we'll store partial matricies in the + * depsgraph, we create dependency between target object and pose eval + * component. See IK pose for a bit more information. */ - // TODO: the bigggest point here is that we need the curve PATH and not just the general geometry... + /* TODO: the bigggest point here is that we need the curve PATH and not + * just the general geometry. */ ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_GEOMETRY); ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE); add_relation(target_key, pose_key, "Curve.Path -> Spline IK"); } - pchan->flag |= POSE_DONE; - OperationKey final_transforms_key(&object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_DONE); + OperationKey final_transforms_key( + &object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_DONE); add_relation(solver_key, final_transforms_key, "Spline IK Result"); - root_map->add_bone(pchan->name, rootchan->name); - - /* Walk to the chain's root */ - //size_t segcount = 0; + /* Walk to the chain's root/ */ int segcount = 0; - - for (bPoseChannel *parchan = pchan->parent; parchan; parchan = parchan->parent) { - /* Make Spline IK solver dependent on this bone's result, - * since it can only run after the standard results - * of the bone are know. Validate links step on the - * bone will ensure that users of this bone only - * grab the result with IK solver results... - */ + for (bPoseChannel *parchan = pchan->parent; + parchan != NULL; + parchan = parchan->parent) + { + /* Make Spline IK solver dependent on this bone's result, since it can + * only run after the standard results of the bone are know. Validate + * links step on the bone will ensure that users of this bone only grab + * the result with IK solver results. */ if (parchan != pchan) { - OperationKey parent_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_READY); + OperationKey parent_key(&object->id, + DEG_NODE_TYPE_BONE, + parchan->name, + DEG_OPCODE_BONE_READY); add_relation(parent_key, solver_key, "Spline IK Solver Update"); - - OperationKey done_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_DONE); - add_relation(solver_key, done_key, "IK Chain Result"); + OperationKey bone_done_key(&object->id, + DEG_NODE_TYPE_BONE, + parchan->name, + DEG_OPCODE_BONE_DONE); + add_relation(solver_key, bone_done_key, "IK Chain Result"); } parchan->flag |= POSE_DONE; - - OperationKey final_transforms_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_DONE); - add_relation(solver_key, final_transforms_key, "Spline IK Solver Result"); - + OperationKey final_transforms_key(&object->id, + DEG_NODE_TYPE_BONE, + parchan->name, + DEG_OPCODE_BONE_DONE); + add_relation( + solver_key, final_transforms_key, "Spline IK Solver Result"); root_map->add_bone(parchan->name, rootchan->name); - - /* continue up chain, until we reach target number of items... */ + /* TODO(sergey): This is an arbitrary value, which was just following + * old code convention. */ segcount++; - if ((segcount == data->chainlen) || (segcount > 255)) break; /* 255 is weak */ + if ((segcount == data->chainlen) || (segcount > 255)) { + break; + } } - - OperationKey done_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE); - add_relation(solver_key, done_key, "PoseEval Result-Bone Link"); + OperationKey pose_done_key( + &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE); + add_relation(solver_key, pose_done_key, "PoseEval Result-Bone Link"); } /* Pose/Armature Bones Graph */ @@ -328,21 +361,19 @@ void DepsgraphRelationBuilder::build_rig(Object *object) add_relation(armature_key, pose_init_key, "Data dependency"); /* IK Solvers. * - * - These require separate processing steps are pose-level - * to be executed between chains of bones (i.e. once the - * base transforms of a bunch of bones is done) + * - These require separate processing steps are pose-level to be executed + * between chains of bones (i.e. once the base transforms of a bunch of + * bones is done). * - * - We build relations for these before the dependencies - * between ops in the same component as it is necessary - * to check whether such bones are in the same IK chain - * (or else we get weird issues with either in-chain - * references, or with bones being parented to IK'd bones) + * - We build relations for these before the dependencies between operations + * in the same component as it is necessary to check whether such bones + * are in the same IK chain (or else we get weird issues with either + * in-chain references, or with bones being parented to IK'd bones). * * Unsolved Issues: * - Care is needed to ensure that multi-headed trees work out the same as * in ik-tree building - * - Animated chain-lengths are a problem... - */ + * - Animated chain-lengths are a problem. */ RootPChanMap root_map; bool pose_depends_on_local_transform = false; LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) { @@ -352,15 +383,12 @@ void DepsgraphRelationBuilder::build_rig(Object *object) build_ik_pose(object, pchan, con, &root_map); pose_depends_on_local_transform = true; break; - case CONSTRAINT_TYPE_SPLINEIK: build_splineik_pose(object, pchan, con, &root_map); pose_depends_on_local_transform = true; break; - /* Constraints which needs world's matrix for transform. - * TODO(sergey): More constraints here? - */ + * TODO(sergey): More constraints here? */ case CONSTRAINT_TYPE_ROTLIKE: case CONSTRAINT_TYPE_SIZELIKE: case CONSTRAINT_TYPE_LOCLIKE: @@ -368,17 +396,15 @@ void DepsgraphRelationBuilder::build_rig(Object *object) /* TODO(sergey): Add used space check. */ pose_depends_on_local_transform = true; break; - default: break; } } } - //root_map.print_debug(); + // root_map.print_debug(); if (pose_depends_on_local_transform) { /* TODO(sergey): Once partial updates are possible use relation between - * object transform and solver itself in it's build function. - */ + * object transform and solver itself in it's build function. */ ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE); ComponentKey local_transform_key(&object->id, DEG_NODE_TYPE_TRANSFORM); add_relation(local_transform_key, pose_key, "Local Transforms"); @@ -403,16 +429,17 @@ void DepsgraphRelationBuilder::build_rig(Object *object) DEG_OPCODE_BONE_DONE); pchan->flag &= ~POSE_DONE; /* Pose init to bone local. */ - add_relation(pose_init_key, bone_local_key, "Pose Init - Bone Local"); + add_relation(pose_init_key, + bone_local_key, + "Pose Init - Bone Local", + DEPSREL_FLAG_GODMODE); /* Local to pose parenting operation. */ add_relation(bone_local_key, bone_pose_key, "Bone Local - Bone Pose"); /* Parent relation. */ if (pchan->parent != NULL) { eDepsOperation_Code parent_key_opcode; - /* NOTE: this difference in handling allows us to prevent lockups - * while ensuring correct poses for separate chains. - */ + * while ensuring correct poses for separate chains. */ if (root_map.has_common_root(pchan->name, pchan->parent->name)) { parent_key_opcode = DEG_OPCODE_BONE_READY; } @@ -424,14 +451,16 @@ void DepsgraphRelationBuilder::build_rig(Object *object) DEG_NODE_TYPE_BONE, pchan->parent->name, parent_key_opcode); - add_relation(parent_key, bone_pose_key, "Parent Bone -> Child Bone"); + add_relation( + parent_key, bone_pose_key, "Parent Bone -> Child Bone"); } /* Build constraints. */ if (pchan->constraints.first != NULL) { /* Build relations for indirectly linked objects. */ BuilderWalkUserData data; data.builder = this; - BKE_constraints_id_loop(&pchan->constraints, constraint_walk, &data); + BKE_constraints_id_loop( + &pchan->constraints, constraint_walk, &data); /* Constraints stack and constraint dependencies. */ build_constraints(&object->id, DEG_NODE_TYPE_BONE, @@ -446,8 +475,7 @@ void DepsgraphRelationBuilder::build_rig(Object *object) add_relation(bone_pose_key, constraints_key, "Constraints Stack"); /* Constraints -> ready/ */ /* TODO(sergey): When constraint stack is exploded, this step should - * occur before the first IK solver. - */ + * occur before the first IK solver. */ add_relation( constraints_key, bone_ready_key, "Constraints -> Ready"); } @@ -458,12 +486,10 @@ void DepsgraphRelationBuilder::build_rig(Object *object) /* Bone ready -> Bone done. * NOTE: For bones without IK, this is all that's needed. * For IK chains however, an additional rel is created from IK - * to done, with transitive reduction removing this one.. - */ + * to done, with transitive reduction removing this one. */ add_relation(bone_ready_key, bone_done_key, "Ready -> Done"); - /* assume that all bones must be done for the pose to be ready - * (for deformers) - */ + /* Assume that all bones must be done for the pose to be ready + * (for deformers). */ add_relation(bone_done_key, pose_done_key, "PoseEval Result-Bone Link"); add_relation(bone_done_key, pose_cleanup_key, "Cleanup dependency"); /* Custom shape. */ diff --git a/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc b/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc index 8197fa116e6..ec1ea1e02b2 100644 --- a/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc +++ b/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc @@ -254,10 +254,14 @@ static void deg_debug_graphviz_relation_color(const DebugContext &ctx, const DepsRelation *rel) { const char *color_default = "black"; - const char *color_error = "red4"; + const char *color_cyclic = "red4"; /* The color of crime scene. */ + const char *color_godmode = "blue4"; /* The color of beautiful sky. */ const char *color = color_default; if (rel->flag & DEPSREL_FLAG_CYCLIC) { - color = color_error; + color = color_cyclic; + } + else if (rel->flag & DEPSREL_FLAG_GODMODE) { + color = color_godmode; } deg_debug_fprintf(ctx, "%s", color); } diff --git a/source/blender/depsgraph/intern/depsgraph.cc b/source/blender/depsgraph/intern/depsgraph.cc index 7f47dce9f47..6dd7ae97073 100644 --- a/source/blender/depsgraph/intern/depsgraph.cc +++ b/source/blender/depsgraph/intern/depsgraph.cc @@ -393,34 +393,40 @@ void Depsgraph::clear_id_nodes() DepsRelation *Depsgraph::add_new_relation(OperationDepsNode *from, OperationDepsNode *to, const char *description, - bool check_unique) + bool check_unique, + int flags) { DepsRelation *rel = NULL; if (check_unique) { rel = check_nodes_connected(from, to, description); } if (rel != NULL) { + rel->flag |= flags; return rel; } /* Create new relation, and add it to the graph. */ rel = OBJECT_GUARDED_NEW(DepsRelation, from, to, description); + rel->flag |= flags; return rel; } /* Add new relation between two nodes */ DepsRelation *Depsgraph::add_new_relation(DepsNode *from, DepsNode *to, const char *description, - bool check_unique) + bool check_unique, + int flags) { DepsRelation *rel = NULL; if (check_unique) { rel = check_nodes_connected(from, to, description); } if (rel != NULL) { + rel->flag |= flags; return rel; } /* Create new relation, and add it to the graph. */ rel = OBJECT_GUARDED_NEW(DepsRelation, from, to, description); + rel->flag |= flags; return rel; } diff --git a/source/blender/depsgraph/intern/depsgraph.h b/source/blender/depsgraph/intern/depsgraph.h index bbf1f883bde..fd45c482bb5 100644 --- a/source/blender/depsgraph/intern/depsgraph.h +++ b/source/blender/depsgraph/intern/depsgraph.h @@ -79,6 +79,8 @@ typedef enum eDepsRelation_Flag { /* Only flush along the relation is update comes from a node which was * affected by user input. */ DEPSREL_FLAG_FLUSH_USER_EDIT_ONLY = (1 << 2), + /* The relation can not be killed by the cyclic dependencies solver. */ + DEPSREL_FLAG_GODMODE = (1 << 3), } eDepsRelation_Flag; /* B depends on A (A -> B) */ @@ -139,12 +141,14 @@ struct Depsgraph { DepsRelation *add_new_relation(OperationDepsNode *from, OperationDepsNode *to, const char *description, - bool check_unique = false); + bool check_unique = false, + int flags = 0); DepsRelation *add_new_relation(DepsNode *from, DepsNode *to, const char *description, - bool check_unique = false); + bool check_unique = false, + int flags = 0); /* Check whether two nodes are connected by relation with given * description. Description might be NULL to check ANY relation between diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc index a86ea02d5e7..636b270fe83 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc @@ -608,8 +608,6 @@ void update_special_pointers(const Depsgraph *depsgraph, */ Object *object_cow = (Object *)id_cow; const Object *object_orig = (const Object *)id_orig; - BLI_assert(object_cow->derivedFinal == NULL); - BLI_assert(object_cow->derivedDeform == NULL); object_cow->mode = object_orig->mode; object_cow->sculpt = object_orig->sculpt; if (object_cow->type == OB_MESH) { diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index be742868cd6..2097fb66c8b 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -105,6 +105,7 @@ set(SRC engines/eevee/eevee_occlusion.c engines/eevee/eevee_render.c engines/eevee/eevee_screen_raytrace.c + engines/eevee/eevee_shaders.c engines/eevee/eevee_subsurface.c engines/eevee/eevee_temporal_sampling.c engines/eevee/eevee_volumes.c diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c index 687d5035ea2..48a73ccef18 100644 --- a/source/blender/draw/engines/eevee/eevee_effects.c +++ b/source/blender/draw/engines/eevee/eevee_effects.c @@ -52,9 +52,6 @@ static struct { struct GPUShader *downsample_sh; struct GPUShader *downsample_cube_sh; - /* Velocity Resolve */ - struct GPUShader *velocity_resolve_sh; - /* Theses are just references, not actually allocated */ struct GPUTexture *depth_src; struct GPUTexture *color_src; @@ -66,25 +63,15 @@ static struct { extern char datatoc_common_uniforms_lib_glsl[]; extern char datatoc_common_view_lib_glsl[]; extern char datatoc_bsdf_common_lib_glsl[]; -extern char datatoc_effect_velocity_resolve_frag_glsl[]; extern char datatoc_effect_minmaxz_frag_glsl[]; extern char datatoc_effect_downsample_frag_glsl[]; extern char datatoc_effect_downsample_cube_frag_glsl[]; extern char datatoc_lightprobe_vert_glsl[]; extern char datatoc_lightprobe_geom_glsl[]; + static void eevee_create_shader_downsample(void) { - char *frag_str = BLI_string_joinN( - datatoc_common_uniforms_lib_glsl, - datatoc_common_view_lib_glsl, - datatoc_bsdf_common_lib_glsl, - datatoc_effect_velocity_resolve_frag_glsl); - - e_data.velocity_resolve_sh = DRW_shader_create_fullscreen(frag_str, NULL); - - MEM_freeN(frag_str); - e_data.downsample_sh = DRW_shader_create_fullscreen(datatoc_effect_downsample_frag_glsl, NULL); e_data.downsample_cube_sh = DRW_shader_create( datatoc_lightprobe_vert_glsl, @@ -377,7 +364,7 @@ void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) /* This pass compute camera motions to the non moving objects. */ psl->velocity_resolve = DRW_pass_create( "Velocity Resolve", DRW_STATE_WRITE_COLOR); - DRWShadingGroup *grp = DRW_shgroup_create(e_data.velocity_resolve_sh, psl->velocity_resolve); + DRWShadingGroup *grp = DRW_shgroup_create(EEVEE_shaders_velocity_resolve_sh_get(), psl->velocity_resolve); DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &e_data.depth_src); DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); DRW_shgroup_uniform_mat4(grp, "currPersinv", effects->velocity_curr_persinv); @@ -576,8 +563,6 @@ void EEVEE_draw_effects(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) void EEVEE_effects_free(void) { - DRW_SHADER_FREE_SAFE(e_data.velocity_resolve_sh); - DRW_SHADER_FREE_SAFE(e_data.downsample_sh); DRW_SHADER_FREE_SAFE(e_data.downsample_cube_sh); diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index e9d67b73a0d..aa2cf3fede3 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -436,6 +436,7 @@ static void eevee_render_to_image(void *vedata, RenderEngine *engine, struct Ren static void eevee_engine_free(void) { + EEVEE_shaders_free(); EEVEE_bloom_free(); EEVEE_depth_of_field_free(); EEVEE_effects_free(); @@ -447,7 +448,6 @@ static void eevee_engine_free(void) EEVEE_occlusion_free(); EEVEE_screen_raytrace_free(); EEVEE_subsurface_free(); - EEVEE_temporal_sampling_free(); EEVEE_volumes_free(); } diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c index 207179edd49..451e7174a94 100644 --- a/source/blender/draw/engines/eevee/eevee_lightcache.c +++ b/source/blender/draw/engines/eevee/eevee_lightcache.c @@ -940,8 +940,9 @@ static void eevee_lightbake_render_probe_sample(void *ved, void *user_data) DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data); EEVEE_lightbake_render_scene(sldata, vedata, lbake->rt_fb, eprobe->position, prb->clipsta, prb->clipend); - EEVEE_lightbake_filter_glossy(sldata, vedata, lbake->rt_color, lbake->store_fb, lbake->cube_offset,prb->intensity, - lcache->mips_len, filter_quality, clamp); + EEVEE_lightbake_filter_glossy( + sldata, vedata, lbake->rt_color, lbake->store_fb, lbake->cube_offset, prb->intensity, + lcache->mips_len, filter_quality, clamp); lcache->cube_len += 1; diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c index 37276987f8d..0b4341f5cb9 100644 --- a/source/blender/draw/engines/eevee/eevee_lightprobes.c +++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c @@ -54,20 +54,7 @@ #include "WM_api.h" #include "WM_types.h" -#define HAMMERSLEY_SIZE 1024 - static struct { - struct GPUShader *probe_default_sh; - struct GPUShader *probe_default_studiolight_sh; - struct GPUShader *probe_filter_glossy_sh; - struct GPUShader *probe_filter_diffuse_sh; - struct GPUShader *probe_filter_visibility_sh; - struct GPUShader *probe_grid_fill_sh; - struct GPUShader *probe_grid_display_sh; - struct GPUShader *probe_planar_display_sh; - struct GPUShader *probe_planar_downsample_sh; - struct GPUShader *probe_cube_display_sh; - struct GPUTexture *hammersley; struct GPUTexture *planar_pool_placeholder; struct GPUTexture *depth_placeholder; @@ -78,31 +65,6 @@ static struct { struct GPUVertFormat *format_probe_display_planar; } e_data = {NULL}; /* Engine data */ -extern char datatoc_background_vert_glsl[]; -extern char datatoc_default_world_frag_glsl[]; -extern char datatoc_lightprobe_filter_glossy_frag_glsl[]; -extern char datatoc_lightprobe_filter_diffuse_frag_glsl[]; -extern char datatoc_lightprobe_filter_visibility_frag_glsl[]; -extern char datatoc_lightprobe_geom_glsl[]; -extern char datatoc_lightprobe_vert_glsl[]; -extern char datatoc_lightprobe_planar_display_frag_glsl[]; -extern char datatoc_lightprobe_planar_display_vert_glsl[]; -extern char datatoc_lightprobe_planar_downsample_frag_glsl[]; -extern char datatoc_lightprobe_planar_downsample_geom_glsl[]; -extern char datatoc_lightprobe_planar_downsample_vert_glsl[]; -extern char datatoc_lightprobe_cube_display_frag_glsl[]; -extern char datatoc_lightprobe_cube_display_vert_glsl[]; -extern char datatoc_lightprobe_grid_display_frag_glsl[]; -extern char datatoc_lightprobe_grid_display_vert_glsl[]; -extern char datatoc_lightprobe_grid_fill_frag_glsl[]; -extern char datatoc_irradiance_lib_glsl[]; -extern char datatoc_lightprobe_lib_glsl[]; -extern char datatoc_octahedron_lib_glsl[]; -extern char datatoc_bsdf_common_lib_glsl[]; -extern char datatoc_common_uniforms_lib_glsl[]; -extern char datatoc_common_view_lib_glsl[]; -extern char datatoc_bsdf_sampling_lib_glsl[]; - extern GlobalsUboStorage ts; /* *********** FUNCTIONS *********** */ @@ -185,121 +147,6 @@ static void planar_pool_ensure_alloc(EEVEE_Data *vedata, int num_planar_ref) } } -static void lightprobe_shaders_init(void) -{ - const char *filter_defines = "#define HAMMERSLEY_SIZE " STRINGIFY(HAMMERSLEY_SIZE) "\n" -#if defined(IRRADIANCE_SH_L2) - "#define IRRADIANCE_SH_L2\n" -#elif defined(IRRADIANCE_CUBEMAP) - "#define IRRADIANCE_CUBEMAP\n" -#elif defined(IRRADIANCE_HL2) - "#define IRRADIANCE_HL2\n" -#endif - "#define NOISE_SIZE 64\n"; - - char *shader_str = NULL; - char *vert_str = NULL; - - shader_str = BLI_string_joinN( - datatoc_common_view_lib_glsl, - datatoc_common_uniforms_lib_glsl, - datatoc_bsdf_common_lib_glsl, - datatoc_bsdf_sampling_lib_glsl, - datatoc_lightprobe_filter_glossy_frag_glsl); - - e_data.probe_filter_glossy_sh = DRW_shader_create( - datatoc_lightprobe_vert_glsl, datatoc_lightprobe_geom_glsl, shader_str, filter_defines); - - e_data.probe_default_sh = DRW_shader_create( - datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, NULL); - - e_data.probe_default_studiolight_sh = DRW_shader_create( - datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, "#define LOOKDEV\n"); - - MEM_freeN(shader_str); - - shader_str = BLI_string_joinN( - datatoc_common_view_lib_glsl, - datatoc_common_uniforms_lib_glsl, - datatoc_bsdf_common_lib_glsl, - datatoc_bsdf_sampling_lib_glsl, - datatoc_lightprobe_filter_diffuse_frag_glsl); - - e_data.probe_filter_diffuse_sh = DRW_shader_create_fullscreen(shader_str, filter_defines); - - MEM_freeN(shader_str); - - shader_str = BLI_string_joinN( - datatoc_common_view_lib_glsl, - datatoc_common_uniforms_lib_glsl, - datatoc_bsdf_common_lib_glsl, - datatoc_bsdf_sampling_lib_glsl, - datatoc_lightprobe_filter_visibility_frag_glsl); - - e_data.probe_filter_visibility_sh = DRW_shader_create_fullscreen(shader_str, filter_defines); - - MEM_freeN(shader_str); - - shader_str = BLI_string_joinN( - datatoc_octahedron_lib_glsl, - datatoc_common_view_lib_glsl, - datatoc_common_uniforms_lib_glsl, - datatoc_bsdf_common_lib_glsl, - datatoc_irradiance_lib_glsl, - datatoc_lightprobe_lib_glsl, - datatoc_lightprobe_grid_display_frag_glsl); - - vert_str = BLI_string_joinN( - datatoc_common_view_lib_glsl, - datatoc_lightprobe_grid_display_vert_glsl); - - e_data.probe_grid_display_sh = DRW_shader_create(vert_str, NULL, shader_str, filter_defines); - - MEM_freeN(vert_str); - MEM_freeN(shader_str); - - e_data.probe_grid_fill_sh = DRW_shader_create_fullscreen( - datatoc_lightprobe_grid_fill_frag_glsl, filter_defines); - - shader_str = BLI_string_joinN( - datatoc_octahedron_lib_glsl, - datatoc_common_view_lib_glsl, - datatoc_common_uniforms_lib_glsl, - datatoc_bsdf_common_lib_glsl, - datatoc_lightprobe_lib_glsl, - datatoc_lightprobe_cube_display_frag_glsl); - - vert_str = BLI_string_joinN( - datatoc_common_view_lib_glsl, - datatoc_lightprobe_cube_display_vert_glsl); - - e_data.probe_cube_display_sh = DRW_shader_create(vert_str, NULL, shader_str, SHADER_DEFINES); - - MEM_freeN(vert_str); - MEM_freeN(shader_str); - - vert_str = BLI_string_joinN( - datatoc_common_view_lib_glsl, - datatoc_lightprobe_planar_display_vert_glsl); - - shader_str = BLI_string_joinN( - datatoc_common_view_lib_glsl, - datatoc_lightprobe_planar_display_frag_glsl); - - e_data.probe_planar_display_sh = DRW_shader_create(vert_str, NULL, shader_str, NULL); - - MEM_freeN(vert_str); - MEM_freeN(shader_str); - - e_data.probe_planar_downsample_sh = DRW_shader_create( - datatoc_lightprobe_planar_downsample_vert_glsl, - datatoc_lightprobe_planar_downsample_geom_glsl, - datatoc_lightprobe_planar_downsample_frag_glsl, - NULL); - - e_data.hammersley = create_hammersley_sample_texture(HAMMERSLEY_SIZE); -} - void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) { EEVEE_CommonUniformBuffer *common_data = &sldata->common_data; @@ -308,8 +155,9 @@ void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) const DRWContextState *draw_ctx = DRW_context_state_get(); const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph); - if (!e_data.probe_filter_glossy_sh) { - lightprobe_shaders_init(); + if (!e_data.hammersley) { + EEVEE_shaders_lightprobe_shaders_init(); + e_data.hammersley = create_hammersley_sample_texture(HAMMERSLEY_SIZE); } /* Use fallback if we don't have gpu texture allocated an we cannot restore them. */ @@ -367,7 +215,9 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, { psl->probe_glossy_compute = DRW_pass_create("LightProbe Glossy Compute", DRW_STATE_WRITE_COLOR); - DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_filter_glossy_sh, psl->probe_glossy_compute); + DRWShadingGroup *grp = DRW_shgroup_create( + EEVEE_shaders_probe_filter_glossy_sh_get(), psl->probe_glossy_compute); + DRW_shgroup_uniform_float(grp, "intensityFac", &pinfo->intensity_fac, 1); DRW_shgroup_uniform_float(grp, "sampleCount", &pinfo->samples_len, 1); DRW_shgroup_uniform_float(grp, "invSampleCount", &pinfo->samples_len_inv, 1); @@ -390,7 +240,8 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, { psl->probe_diffuse_compute = DRW_pass_create("LightProbe Diffuse Compute", DRW_STATE_WRITE_COLOR); - DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_filter_diffuse_sh, psl->probe_diffuse_compute); + DRWShadingGroup *grp = DRW_shgroup_create( + EEVEE_shaders_probe_filter_diffuse_sh_get(), psl->probe_diffuse_compute); #ifdef IRRADIANCE_SH_L2 DRW_shgroup_uniform_int(grp, "probeSize", &pinfo->shres, 1); #else @@ -411,7 +262,7 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, { psl->probe_visibility_compute = DRW_pass_create("LightProbe Visibility Compute", DRW_STATE_WRITE_COLOR); - DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_filter_visibility_sh, psl->probe_visibility_compute); + DRWShadingGroup *grp = DRW_shgroup_create(EEVEE_shaders_probe_filter_visibility_sh_get(), psl->probe_visibility_compute); DRW_shgroup_uniform_int(grp, "outputSize", &pinfo->shres, 1); DRW_shgroup_uniform_float(grp, "visibilityRange", &pinfo->visibility_range, 1); DRW_shgroup_uniform_float(grp, "visibilityBlur", &pinfo->visibility_blur, 1); @@ -431,7 +282,9 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, { psl->probe_grid_fill = DRW_pass_create("LightProbe Grid Floodfill", DRW_STATE_WRITE_COLOR); - DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_grid_fill_sh, psl->probe_grid_fill); + DRWShadingGroup *grp = DRW_shgroup_create( + EEVEE_shaders_probe_grid_fill_sh_get(), psl->probe_grid_fill); + DRW_shgroup_uniform_texture_ref(grp, "irradianceGrid", &light_cache->grid_tx.tex); struct GPUBatch *geom = DRW_cache_fullscreen_quad_get(); @@ -466,7 +319,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat float *col = ts.colorBackground; /* LookDev */ - EEVEE_lookdev_cache_init(vedata, &grp, e_data.probe_default_studiolight_sh, psl->probe_background, wo, pinfo); + EEVEE_lookdev_cache_init(vedata, &grp, psl->probe_background, wo, pinfo); /* END */ if (!grp && wo) { col = &wo->horr; @@ -499,7 +352,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat /* Fallback if shader fails or if not using nodetree. */ if (grp == NULL) { - grp = DRW_shgroup_create(e_data.probe_default_sh, psl->probe_background); + grp = DRW_shgroup_create(EEVEE_shaders_probe_default_sh_get(), psl->probe_background); DRW_shgroup_uniform_vec3(grp, "color", col, 1); DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1); DRW_shgroup_call_add(grp, geom, NULL); @@ -513,8 +366,9 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat /* Cube Display */ if (scene_eval->eevee.flag & SCE_EEVEE_SHOW_CUBEMAPS && lcache->cube_len > 1) { int cube_len = lcache->cube_len - 1; /* don't count the world. */ - DRWShadingGroup *grp = DRW_shgroup_empty_tri_batch_create(e_data.probe_cube_display_sh, - psl->probe_display, cube_len * 2); + DRWShadingGroup *grp = DRW_shgroup_empty_tri_batch_create( + EEVEE_shaders_probe_cube_display_sh_get(), psl->probe_display, cube_len * 2); + DRW_shgroup_uniform_texture_ref(grp, "probeCubes", &lcache->cube_tx.tex); DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo); DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); @@ -529,7 +383,9 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat if (scene_eval->eevee.flag & SCE_EEVEE_SHOW_IRRADIANCE) { EEVEE_LightGrid *egrid = lcache->grid_data + 1; for (int p = 1; p < lcache->grid_len; ++p, egrid++) { - DRWShadingGroup *shgrp = DRW_shgroup_create(e_data.probe_grid_display_sh, psl->probe_display); + DRWShadingGroup *shgrp = DRW_shgroup_create( + EEVEE_shaders_probe_grid_display_sh_get(), psl->probe_display); + DRW_shgroup_uniform_int(shgrp, "offset", &egrid->offset, 1); DRW_shgroup_uniform_ivec3(shgrp, "grid_resolution", egrid->resolution, 1); DRW_shgroup_uniform_vec3(shgrp, "corner", egrid->corner, 1); @@ -556,7 +412,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat }); DRWShadingGroup *grp = DRW_shgroup_instance_create( - e_data.probe_planar_display_sh, + EEVEE_shaders_probe_planar_display_sh_get(), psl->probe_display, DRW_cache_quad_get(), e_data.format_probe_display_planar); @@ -570,7 +426,9 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat { psl->probe_planar_downsample_ps = DRW_pass_create("LightProbe Planar Downsample", DRW_STATE_WRITE_COLOR); - DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_planar_downsample_sh, psl->probe_planar_downsample_ps); + DRWShadingGroup *grp = DRW_shgroup_create( + EEVEE_shaders_probe_planar_downsample_sh_get(), psl->probe_planar_downsample_ps); + DRW_shgroup_uniform_texture_ref(grp, "source", &txl->planar_pool); DRW_shgroup_uniform_float(grp, "fireflyFactor", &sldata->common_data.ssr_firefly_fac, 1); DRW_shgroup_call_instances_add(grp, DRW_cache_fullscreen_quad_get(), NULL, (uint *)&pinfo->num_planar); @@ -788,7 +646,7 @@ void EEVEE_lightprobes_planar_data_from_object(Object *ob, EEVEE_PlanarReflectio eplanar->clip_edge_y_neg = dot_v3v3(eplanar->clip_vec_y, vec); /* Facing factors */ - float max_angle = max_ff(1e-2f, probe->falloff) * M_PI * 0.5f; + float max_angle = max_ff(1e-2f, 1.0f - probe->falloff) * M_PI * 0.5f; float min_angle = 0.0f; eplanar->facing_scale = 1.0f / max_ff(1e-8f, cosf(min_angle) - cosf(max_angle)); eplanar->facing_bias = -min_ff(1.0f - 1e-8f, cosf(max_angle)) * eplanar->facing_scale; @@ -1374,16 +1232,6 @@ void EEVEE_lightprobes_free(void) { MEM_SAFE_FREE(e_data.format_probe_display_cube); MEM_SAFE_FREE(e_data.format_probe_display_planar); - DRW_SHADER_FREE_SAFE(e_data.probe_default_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_default_studiolight_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_filter_glossy_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_filter_diffuse_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_filter_visibility_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_grid_fill_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_grid_display_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_planar_display_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_planar_downsample_sh); - DRW_SHADER_FREE_SAFE(e_data.probe_cube_display_sh); DRW_TEXTURE_FREE_SAFE(e_data.hammersley); DRW_TEXTURE_FREE_SAFE(e_data.planar_pool_placeholder); DRW_TEXTURE_FREE_SAFE(e_data.depth_placeholder); diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c index 49cf468711e..e46526ce6af 100644 --- a/source/blender/draw/engines/eevee/eevee_lookdev.c +++ b/source/blender/draw/engines/eevee/eevee_lookdev.c @@ -54,7 +54,7 @@ static void eevee_lookdev_lightcache_delete(EEVEE_Data *vedata) } void EEVEE_lookdev_cache_init( - EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShader *shader, DRWPass *pass, + EEVEE_Data *vedata, DRWShadingGroup **grp, DRWPass *pass, World *UNUSED(world), EEVEE_LightProbesInfo *pinfo) { EEVEE_StorageList *stl = vedata->stl; @@ -64,6 +64,7 @@ void EEVEE_lookdev_cache_init( if (LOOK_DEV_STUDIO_LIGHT_ENABLED(v3d)) { StudioLight *sl = BKE_studiolight_find(v3d->shading.studio_light, STUDIOLIGHT_ORIENTATIONS_MATERIAL_MODE); if (sl && (sl->flag & STUDIOLIGHT_ORIENTATION_WORLD)) { + GPUShader *shader = EEVEE_shaders_default_studiolight_sh_get(); struct GPUBatch *geom = DRW_cache_fullscreen_quad_get(); GPUTexture *tex = NULL; @@ -122,12 +123,13 @@ void EEVEE_lookdev_cache_init( if (!pinfo) { /* Do not fadeout when doing probe rendering, only when drawing the background */ DRW_shgroup_uniform_float(*grp, "studioLightBackground", &v3d->shading.studiolight_background, 1); - BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE); - tex = sl->equirectangular_irradiance_gputexture; + BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE); + tex = sl->equirect_irradiance_gputexture; } else { - BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE); - tex = sl->equirectangular_radiance_gputexture; + DRW_shgroup_uniform_float_copy(*grp, "studioLightBackground", 1.0f); + BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE); + tex = sl->equirect_radiance_gputexture; } DRW_shgroup_uniform_texture(*grp, "image", tex); @@ -162,6 +164,25 @@ void EEVEE_lookdev_draw_background(EEVEE_Data *vedata) RegionView3D *rv3d = draw_ctx->rv3d; ARegion *ar = draw_ctx->ar; + const float *viewport_size = DRW_viewport_size_get(); + rcti rect; + ED_region_visible_rect(draw_ctx->ar, &rect); + + const float viewport_size_target[2] = { + viewport_size[0] / 4, + viewport_size[1] / 4, + }; + const int viewport_inset[2] = { + max_ii(viewport_size_target[0], 300), + max_ii(viewport_size_target[0], 300) / 2, /* intentionally use 'x' here for 'y' value. */ + }; + + /* minimum size for preview spheres viewport */ + const float aspect[2] = { + viewport_inset[0] / viewport_size_target[0], + viewport_inset[1] / viewport_size_target[1], + }; + BKE_camera_params_from_view3d(¶ms, draw_ctx->depsgraph, v3d, rv3d); params.is_ortho = true; params.ortho_scale = 3.0f; @@ -172,15 +193,9 @@ void EEVEE_lookdev_draw_background(EEVEE_Data *vedata) params.shifty = 0.0f; params.clipsta = 0.001f; params.clipend = 20.0f; - BKE_camera_params_compute_viewplane(¶ms, ar->winx, ar->winy, 1.0f, 1.0f); + BKE_camera_params_compute_viewplane(¶ms, ar->winx, ar->winy, aspect[0], aspect[1]); BKE_camera_params_compute_matrix(¶ms); - const float *viewport_size = DRW_viewport_size_get(); - rcti rect; - ED_region_visible_rect(draw_ctx->ar, &rect); - int viewport_inset_x = viewport_size[0] / 4; - int viewport_inset_y = viewport_size[1] / 4; - EEVEE_CommonUniformBuffer *common = &sldata->common_data; common->la_num_light = 0; common->prb_num_planar = 0; @@ -209,12 +224,12 @@ void EEVEE_lookdev_draw_background(EEVEE_Data *vedata) GPUFrameBuffer *fb = effects->final_fb; GPU_framebuffer_bind(fb); - GPU_framebuffer_viewport_set(fb, rect.xmax - viewport_inset_x, rect.ymin, viewport_inset_x, viewport_inset_y); + GPU_framebuffer_viewport_set(fb, rect.xmax - viewport_inset[0], rect.ymin, viewport_inset[0], viewport_inset[1]); DRW_draw_pass(psl->lookdev_pass); fb = dfbl->depth_only_fb; GPU_framebuffer_bind(fb); - GPU_framebuffer_viewport_set(fb, rect.xmax - viewport_inset_x, rect.ymin, viewport_inset_x, viewport_inset_y); + GPU_framebuffer_viewport_set(fb, rect.xmax - viewport_inset[0], rect.ymin, viewport_inset[0], viewport_inset[1]); DRW_draw_pass(psl->lookdev_pass); DRW_viewport_matrix_override_unset_all(); diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c index 78d5231a793..a87b4626628 100644 --- a/source/blender/draw/engines/eevee/eevee_materials.c +++ b/source/blender/draw/engines/eevee/eevee_materials.c @@ -58,7 +58,6 @@ static struct { struct GPUShader *default_hair_prepass_clip_sh; struct GPUShader *default_lit[VAR_MAT_MAX]; struct GPUShader *default_background; - struct GPUShader *default_studiolight_background; struct GPUShader *update_noise_sh; /* 64*64 array texture containing all LUTs and other utilitarian arrays. @@ -597,10 +596,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, NULL); - e_data.default_studiolight_background = DRW_shader_create( - datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, - "#define LOOKDEV\n"); - e_data.default_prepass_sh = DRW_shader_create( datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl, NULL); @@ -969,7 +964,7 @@ void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) float *col = ts.colorBackground; /* LookDev */ - EEVEE_lookdev_cache_init(vedata, &grp, e_data.default_studiolight_background, psl->background_pass, wo, NULL); + EEVEE_lookdev_cache_init(vedata, &grp, psl->background_pass, wo, NULL); /* END */ if (!grp && wo) { @@ -1799,7 +1794,6 @@ void EEVEE_materials_free(void) DRW_SHADER_FREE_SAFE(e_data.default_prepass_sh); DRW_SHADER_FREE_SAFE(e_data.default_prepass_clip_sh); DRW_SHADER_FREE_SAFE(e_data.default_background); - DRW_SHADER_FREE_SAFE(e_data.default_studiolight_background); DRW_SHADER_FREE_SAFE(e_data.update_noise_sh); DRW_TEXTURE_FREE_SAFE(e_data.util_tex); DRW_TEXTURE_FREE_SAFE(e_data.noise_tex); diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h index 5a87f782151..451b1013103 100644 --- a/source/blender/draw/engines/eevee/eevee_private.h +++ b/source/blender/draw/engines/eevee/eevee_private.h @@ -52,6 +52,7 @@ extern struct DrawEngineType draw_engine_eevee_type; // #define IRRADIANCE_SH_L2 // #define IRRADIANCE_CUBEMAP #define IRRADIANCE_HL2 +#define HAMMERSLEY_SIZE 1024 #if defined(IRRADIANCE_SH_L2) # define SHADER_IRRADIANCE "#define IRRADIANCE_SH_L2\n" @@ -871,6 +872,22 @@ void EEVEE_draw_shadows(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); void EEVEE_lights_free(void); +/* eevee_shaders.c */ +void EEVEE_shaders_lightprobe_shaders_init(void); +struct GPUShader *EEVEE_shaders_probe_filter_glossy_sh_get(void); +struct GPUShader *EEVEE_shaders_probe_default_sh_get(void); +struct GPUShader *EEVEE_shaders_probe_filter_diffuse_sh_get(void); +struct GPUShader *EEVEE_shaders_probe_filter_visibility_sh_get(void); +struct GPUShader *EEVEE_shaders_probe_grid_fill_sh_get(void); +struct GPUShader *EEVEE_shaders_probe_planar_downsample_sh_get(void); +struct GPUShader *EEVEE_shaders_default_studiolight_sh_get(void); +struct GPUShader *EEVEE_shaders_probe_cube_display_sh_get(void); +struct GPUShader *EEVEE_shaders_probe_grid_display_sh_get(void); +struct GPUShader *EEVEE_shaders_probe_planar_display_sh_get(void); +struct GPUShader *EEVEE_shaders_velocity_resolve_sh_get(void); +struct GPUShader *EEVEE_shaders_taa_resolve_sh_get(EEVEE_EffectsFlag enabled_effects); +void EEVEE_shaders_free(void); + /* eevee_lightprobes.c */ bool EEVEE_lightprobes_obj_visibility_cb(bool vis_in, void *user_data); void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); @@ -958,7 +975,6 @@ void EEVEE_temporal_sampling_matrices_calc( EEVEE_EffectsInfo *effects, float viewmat[4][4], float persmat[4][4], const double ht_point[2]); void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata); -void EEVEE_temporal_sampling_free(void); /* eevee_volumes.c */ int EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); @@ -987,7 +1003,7 @@ void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct R void EEVEE_render_update_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer); /** eevee_lookdev.c */ -void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShader *shader, DRWPass *pass, struct World *world, EEVEE_LightProbesInfo *pinfo); +void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, DRWPass *pass, struct World *world, EEVEE_LightProbesInfo *pinfo); void EEVEE_lookdev_draw_background(EEVEE_Data *vedata); /** eevee_engine.c */ diff --git a/source/blender/draw/engines/eevee/eevee_shaders.c b/source/blender/draw/engines/eevee/eevee_shaders.c new file mode 100644 index 00000000000..6fbd0ae5173 --- /dev/null +++ b/source/blender/draw/engines/eevee/eevee_shaders.c @@ -0,0 +1,320 @@ +/* + * Copyright 2016, Blender Foundation. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Blender Institute + * + */ + +/** \file eevee_shaders.c + * \ingroup draw_engine + */ + +#include "DRW_render.h" + +#include "BLI_string_utils.h" + +#include "MEM_guardedalloc.h" + +#include "GPU_shader.h" + +#include "eevee_private.h" + +const char *filter_defines = "#define HAMMERSLEY_SIZE " STRINGIFY(HAMMERSLEY_SIZE) "\n" +#if defined(IRRADIANCE_SH_L2) + "#define IRRADIANCE_SH_L2\n" +#elif defined(IRRADIANCE_CUBEMAP) + "#define IRRADIANCE_CUBEMAP\n" +#elif defined(IRRADIANCE_HL2) + "#define IRRADIANCE_HL2\n" +#endif + "#define NOISE_SIZE 64\n"; + +static struct { + /* Probes */ + struct GPUShader *probe_default_sh; + struct GPUShader *probe_default_studiolight_sh; + struct GPUShader *probe_grid_display_sh; + struct GPUShader *probe_cube_display_sh; + struct GPUShader *probe_planar_display_sh; + struct GPUShader *probe_filter_glossy_sh; + struct GPUShader *probe_filter_diffuse_sh; + struct GPUShader *probe_filter_visibility_sh; + struct GPUShader *probe_grid_fill_sh; + struct GPUShader *probe_planar_downsample_sh; + + /* Velocity Resolve */ + struct GPUShader *velocity_resolve_sh; + + /* Temporal Anti Aliasing */ + struct GPUShader *taa_resolve_sh; + struct GPUShader *taa_resolve_reproject_sh; + +} e_data = {NULL}; /* Engine data */ + +extern char datatoc_bsdf_common_lib_glsl[]; +extern char datatoc_bsdf_sampling_lib_glsl[]; +extern char datatoc_common_uniforms_lib_glsl[]; +extern char datatoc_common_view_lib_glsl[]; + +extern char datatoc_background_vert_glsl[]; +extern char datatoc_default_world_frag_glsl[]; +extern char datatoc_lightprobe_geom_glsl[]; +extern char datatoc_lightprobe_vert_glsl[]; +extern char datatoc_lightprobe_cube_display_frag_glsl[]; +extern char datatoc_lightprobe_cube_display_vert_glsl[]; +extern char datatoc_lightprobe_filter_diffuse_frag_glsl[]; +extern char datatoc_lightprobe_filter_glossy_frag_glsl[]; +extern char datatoc_lightprobe_filter_visibility_frag_glsl[]; +extern char datatoc_lightprobe_grid_display_frag_glsl[]; +extern char datatoc_lightprobe_grid_display_vert_glsl[]; +extern char datatoc_lightprobe_grid_fill_frag_glsl[]; +extern char datatoc_lightprobe_planar_display_frag_glsl[]; +extern char datatoc_lightprobe_planar_display_vert_glsl[]; +extern char datatoc_lightprobe_planar_downsample_frag_glsl[]; +extern char datatoc_lightprobe_planar_downsample_geom_glsl[]; +extern char datatoc_lightprobe_planar_downsample_vert_glsl[]; +extern char datatoc_irradiance_lib_glsl[]; +extern char datatoc_lightprobe_lib_glsl[]; +extern char datatoc_octahedron_lib_glsl[]; + +/* Velocity Resolve */ +extern char datatoc_effect_velocity_resolve_frag_glsl[]; + +/* Temporal Sampling */ +extern char datatoc_effect_temporal_aa_glsl[]; + +extern GlobalsUboStorage ts; + +/* *********** FUNCTIONS *********** */ + +void EEVEE_shaders_lightprobe_shaders_init(void) +{ + BLI_assert(e_data.probe_filter_glossy_sh == NULL); + char *shader_str = NULL; + + shader_str = BLI_string_joinN( + datatoc_common_view_lib_glsl, + datatoc_common_uniforms_lib_glsl, + datatoc_bsdf_common_lib_glsl, + datatoc_bsdf_sampling_lib_glsl, + datatoc_lightprobe_filter_glossy_frag_glsl); + + e_data.probe_filter_glossy_sh = DRW_shader_create( + datatoc_lightprobe_vert_glsl, datatoc_lightprobe_geom_glsl, shader_str, filter_defines); + + e_data.probe_default_sh = DRW_shader_create( + datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, NULL); + + MEM_freeN(shader_str); + + shader_str = BLI_string_joinN( + datatoc_common_view_lib_glsl, + datatoc_common_uniforms_lib_glsl, + datatoc_bsdf_common_lib_glsl, + datatoc_bsdf_sampling_lib_glsl, + datatoc_lightprobe_filter_diffuse_frag_glsl); + + e_data.probe_filter_diffuse_sh = DRW_shader_create_fullscreen(shader_str, filter_defines); + + MEM_freeN(shader_str); + + shader_str = BLI_string_joinN( + datatoc_common_view_lib_glsl, + datatoc_common_uniforms_lib_glsl, + datatoc_bsdf_common_lib_glsl, + datatoc_bsdf_sampling_lib_glsl, + datatoc_lightprobe_filter_visibility_frag_glsl); + + e_data.probe_filter_visibility_sh = DRW_shader_create_fullscreen(shader_str, filter_defines); + + MEM_freeN(shader_str); + + e_data.probe_grid_fill_sh = DRW_shader_create_fullscreen( + datatoc_lightprobe_grid_fill_frag_glsl, filter_defines); + + e_data.probe_planar_downsample_sh = DRW_shader_create( + datatoc_lightprobe_planar_downsample_vert_glsl, + datatoc_lightprobe_planar_downsample_geom_glsl, + datatoc_lightprobe_planar_downsample_frag_glsl, + NULL); +} + +GPUShader *EEVEE_shaders_probe_filter_glossy_sh_get(void) +{ + return e_data.probe_filter_glossy_sh; +} + +GPUShader *EEVEE_shaders_probe_default_sh_get(void) +{ + return e_data.probe_default_sh; +} + +GPUShader *EEVEE_shaders_probe_filter_diffuse_sh_get(void) +{ + return e_data.probe_filter_diffuse_sh; +} + +GPUShader *EEVEE_shaders_probe_filter_visibility_sh_get(void) +{ + return e_data.probe_filter_visibility_sh; +} + +GPUShader *EEVEE_shaders_probe_grid_fill_sh_get(void) +{ + return e_data.probe_grid_fill_sh; +} + +GPUShader *EEVEE_shaders_probe_planar_downsample_sh_get(void) +{ + return e_data.probe_planar_downsample_sh; +} + +GPUShader *EEVEE_shaders_default_studiolight_sh_get(void) +{ + if (e_data.probe_default_studiolight_sh == NULL) { + e_data.probe_default_studiolight_sh = DRW_shader_create( + datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, "#define LOOKDEV\n"); + } + return e_data.probe_default_studiolight_sh; +} + +GPUShader *EEVEE_shaders_probe_cube_display_sh_get(void) +{ + if (e_data.probe_cube_display_sh == NULL) { + char *shader_str = BLI_string_joinN( + datatoc_octahedron_lib_glsl, + datatoc_common_view_lib_glsl, + datatoc_common_uniforms_lib_glsl, + datatoc_bsdf_common_lib_glsl, + datatoc_lightprobe_lib_glsl, + datatoc_lightprobe_cube_display_frag_glsl); + + char *vert_str = BLI_string_joinN( + datatoc_common_view_lib_glsl, + datatoc_lightprobe_cube_display_vert_glsl); + + e_data.probe_cube_display_sh = DRW_shader_create(vert_str, NULL, shader_str, SHADER_DEFINES); + + MEM_freeN(vert_str); + MEM_freeN(shader_str); + } + return e_data.probe_cube_display_sh; +} + + GPUShader *EEVEE_shaders_probe_grid_display_sh_get(void) +{ + if (e_data.probe_grid_display_sh == NULL ) { + char *shader_str = BLI_string_joinN( + datatoc_octahedron_lib_glsl, + datatoc_common_view_lib_glsl, + datatoc_common_uniforms_lib_glsl, + datatoc_bsdf_common_lib_glsl, + datatoc_irradiance_lib_glsl, + datatoc_lightprobe_lib_glsl, + datatoc_lightprobe_grid_display_frag_glsl); + + char *vert_str = BLI_string_joinN( + datatoc_common_view_lib_glsl, + datatoc_lightprobe_grid_display_vert_glsl); + + e_data.probe_grid_display_sh = DRW_shader_create(vert_str, NULL, shader_str, filter_defines); + + MEM_freeN(vert_str); + MEM_freeN(shader_str); + } + return e_data.probe_grid_display_sh; +} + + GPUShader *EEVEE_shaders_probe_planar_display_sh_get(void) +{ + if (e_data.probe_planar_display_sh == NULL) { + char *vert_str = BLI_string_joinN( + datatoc_common_view_lib_glsl, + datatoc_lightprobe_planar_display_vert_glsl); + + char *shader_str = BLI_string_joinN( + datatoc_common_view_lib_glsl, + datatoc_lightprobe_planar_display_frag_glsl); + + e_data.probe_planar_display_sh = DRW_shader_create(vert_str, NULL, shader_str, NULL); + + MEM_freeN(vert_str); + MEM_freeN(shader_str); + } + return e_data.probe_planar_display_sh; +} + +GPUShader *EEVEE_shaders_velocity_resolve_sh_get(void) +{ + if (e_data.velocity_resolve_sh == NULL) { + char *frag_str = BLI_string_joinN( + datatoc_common_uniforms_lib_glsl, + datatoc_common_view_lib_glsl, + datatoc_bsdf_common_lib_glsl, + datatoc_effect_velocity_resolve_frag_glsl); + + e_data.velocity_resolve_sh = DRW_shader_create_fullscreen(frag_str, NULL); + + MEM_freeN(frag_str); + } + return e_data.velocity_resolve_sh; +} + +GPUShader *EEVEE_shaders_taa_resolve_sh_get(EEVEE_EffectsFlag enabled_effects) +{ + GPUShader **sh; + const char *define = NULL; + if (enabled_effects & EFFECT_TAA_REPROJECT) { + sh = &e_data.taa_resolve_reproject_sh; + define = "#define USE_REPROJECTION\n"; + + + + } + else { + sh = &e_data.taa_resolve_sh; + } + if (*sh == NULL) { + char *frag_str = BLI_string_joinN( + datatoc_common_uniforms_lib_glsl, + datatoc_common_view_lib_glsl, + datatoc_bsdf_common_lib_glsl, + datatoc_effect_temporal_aa_glsl); + + *sh = DRW_shader_create_fullscreen(frag_str, define); + MEM_freeN(frag_str); + } + + return *sh; +} + +void EEVEE_shaders_free(void) +{ + DRW_SHADER_FREE_SAFE(e_data.probe_default_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_filter_glossy_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_filter_diffuse_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_filter_visibility_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_grid_fill_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_planar_downsample_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_default_studiolight_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_grid_display_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_cube_display_sh); + DRW_SHADER_FREE_SAFE(e_data.probe_planar_display_sh); + DRW_SHADER_FREE_SAFE(e_data.velocity_resolve_sh); + DRW_SHADER_FREE_SAFE(e_data.taa_resolve_sh); + DRW_SHADER_FREE_SAFE(e_data.taa_resolve_reproject_sh); +} diff --git a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c index 6216b28329b..deac0b89b10 100644 --- a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c +++ b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c @@ -40,32 +40,14 @@ #define FILTER_CDF_TABLE_SIZE 512 static struct { - /* Temporal Anti Aliasing */ - struct GPUShader *taa_resolve_sh; - struct GPUShader *taa_resolve_reproject_sh; - /* Pixel filter table: Only blackman-harris for now. */ + bool inited; float inverted_cdf[FILTER_CDF_TABLE_SIZE]; -} e_data = {NULL}; /* Engine data */ +} e_data = {false}; /* Engine data */ extern char datatoc_common_uniforms_lib_glsl[]; extern char datatoc_common_view_lib_glsl[]; extern char datatoc_bsdf_common_lib_glsl[]; -extern char datatoc_effect_temporal_aa_glsl[]; - -static void eevee_create_shader_temporal_sampling(void) -{ - char *frag_str = BLI_string_joinN( - datatoc_common_uniforms_lib_glsl, - datatoc_common_view_lib_glsl, - datatoc_bsdf_common_lib_glsl, - datatoc_effect_temporal_aa_glsl); - - e_data.taa_resolve_sh = DRW_shader_create_fullscreen(frag_str, NULL); - e_data.taa_resolve_reproject_sh = DRW_shader_create_fullscreen(frag_str, "#define USE_REPROJECTION\n"); - - MEM_freeN(frag_str); -} static float UNUSED_FUNCTION(filter_box)(float UNUSED(x)) { @@ -149,6 +131,7 @@ static void eevee_create_cdf_table_temporal_sampling(void) } MEM_freeN(cdf_table); + e_data.inited = true; } void EEVEE_temporal_sampling_matrices_calc( @@ -187,8 +170,7 @@ int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data EEVEE_EffectsInfo *effects = stl->effects; int repro_flag = 0; - if (!e_data.taa_resolve_sh) { - eevee_create_shader_temporal_sampling(); + if (!e_data.inited) { eevee_create_cdf_table_temporal_sampling(); } @@ -290,9 +272,7 @@ void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data EEVEE_EffectsInfo *effects = stl->effects; if ((effects->enabled_effects & (EFFECT_TAA | EFFECT_TAA_REPROJECT)) != 0) { - struct GPUShader *sh = (effects->enabled_effects & EFFECT_TAA_REPROJECT) - ? e_data.taa_resolve_reproject_sh - : e_data.taa_resolve_sh; + struct GPUShader *sh = EEVEE_shaders_taa_resolve_sh_get(effects->enabled_effects); psl->taa_resolve = DRW_pass_create("Temporal AA Resolve", DRW_STATE_WRITE_COLOR); DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->taa_resolve); @@ -378,9 +358,3 @@ void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata) } } } - -void EEVEE_temporal_sampling_free(void) -{ - DRW_SHADER_FREE_SAFE(e_data.taa_resolve_sh); - DRW_SHADER_FREE_SAFE(e_data.taa_resolve_reproject_sh); -} diff --git a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl index bda3c648bb6..40c6bb1f1e0 100644 --- a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl @@ -186,7 +186,7 @@ void integrate_slice(vec3 normal, vec2 t_phi, vec2 horizons, inout float visibil } void gtao_deferred( - vec3 normal, vec3 position, vec4 noise, float frag_depth, out float visibility, out vec3 bent_normal) + vec3 normal, vec4 noise, float frag_depth, out float visibility, out vec3 bent_normal) { /* Fetch early, hide latency! */ vec4 horizons = texelFetch(horizonBuffer, ivec2(gl_FragCoord.xy), 0); @@ -194,7 +194,6 @@ void gtao_deferred( vec4 dirs; dirs.xy = get_ao_dir(noise.x * 0.5); dirs.zw = get_ao_dir(noise.x * 0.5 + 0.5); - vec2 uvs = get_uvs_from_view(position); bent_normal = vec3(0.0); visibility = 0.0; @@ -252,7 +251,7 @@ float occlusion_compute(vec3 N, vec3 vpos, float user_occlusion, vec4 rand, out vec3 vnor = mat3(ViewMatrix) * N; #ifdef ENABLE_DEFERED_AO - gtao_deferred(vnor, vpos, rand, gl_FragCoord.z, visibility, bent_normal); + gtao_deferred(vnor, rand, gl_FragCoord.z, visibility, bent_normal); #else gtao(vnor, vpos, rand, visibility, bent_normal); #endif diff --git a/source/blender/draw/engines/eevee/shaders/background_vert.glsl b/source/blender/draw/engines/eevee/shaders/background_vert.glsl index c849a577316..380d6d96491 100644 --- a/source/blender/draw/engines/eevee/shaders/background_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/background_vert.glsl @@ -1,8 +1,6 @@ in vec2 pos; -out vec3 varposition; -out vec3 varnormal; out vec3 viewPosition; #ifndef VOLUMETRICS @@ -15,13 +13,12 @@ out vec3 viewNormal; void main() { gl_Position = vec4(pos, 1.0, 1.0); - varposition = viewPosition = vec3(pos, -1.0); - varnormal = normalize(-varposition); + viewPosition = vec3(pos, -1.0); #ifndef VOLUMETRICS /* Not used in practice but needed to avoid compilation errors. */ worldPosition = viewPosition; - worldNormal = viewNormal = varnormal; + worldNormal = viewNormal = normalize(-viewPosition); #endif #ifdef ATTRIB diff --git a/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl index 1f0ef76da0c..126f2d9610a 100644 --- a/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl @@ -1,27 +1,27 @@ -#define M_PI 3.14159265358979323846 - uniform float backgroundAlpha; +uniform vec3 color; + +out vec4 FragColor; + +#ifdef LOOKDEV uniform mat4 ProjectionMatrix; uniform mat4 ProjectionMatrixInverse; uniform mat4 ViewMatrixInverse; -#ifdef LOOKDEV uniform mat3 StudioLightMatrix; uniform sampler2D image; uniform float studioLightBackground = 1.0; in vec3 viewPosition; -#endif -uniform vec3 color; -out vec4 FragColor; +#define M_PI 3.14159265358979323846 -void background_transform_to_world(vec3 viewvec, out vec3 worldvec) +vec3 background_transform_to_world(vec3 viewvec) { vec4 v = (ProjectionMatrix[3][3] == 0.0) ? vec4(viewvec, 1.0) : vec4(0.0, 0.0, 1.0, 1.0); vec4 co_homogenous = (ProjectionMatrixInverse * v); vec4 co = vec4(co_homogenous.xyz / co_homogenous.w, 0.0); - worldvec = (ViewMatrixInverse * co).xyz; + return (ViewMatrixInverse * co).xyz; } float hypot(float x, float y) @@ -29,7 +29,7 @@ float hypot(float x, float y) return sqrt(x * x + y * y); } -void node_tex_environment_equirectangular(vec3 co, sampler2D ima, out vec4 color) +vec4 node_tex_environment_equirectangular(vec3 co, sampler2D ima) { vec3 nco = normalize(co); float u = -atan(nco.y, nco.x) / (2.0 * M_PI) + 0.5; @@ -44,19 +44,19 @@ void node_tex_environment_equirectangular(vec3 co, sampler2D ima, out vec4 color /* This is caused by texture filtering, since uv don't have smooth derivatives * at u = 0 or 2PI, hardware filtering is using the smallest mipmap for certain * texels. So we force the highest mipmap and don't do anisotropic filtering. */ - color = textureLod(ima, vec2(u, v), 0.0); + return textureLod(ima, vec2(u, v), 0.0); } +#endif void main() { + vec3 background_color; #ifdef LOOKDEV - vec3 worldvec; - vec4 background_color; - background_transform_to_world(viewPosition, worldvec); - node_tex_environment_equirectangular(StudioLightMatrix * worldvec, image, background_color); - background_color.rgb = mix(color, background_color.rgb, studioLightBackground); + vec3 worldvec = background_transform_to_world(viewPosition); + background_color = node_tex_environment_equirectangular(StudioLightMatrix * worldvec, image).rgb; + background_color = mix(color, background_color, studioLightBackground); #else - vec3 background_color = color; + background_color = color; #endif - FragColor = vec4(clamp(background_color.rgb, vec3(0.0), vec3(1e10)), backgroundAlpha); + FragColor = vec4(clamp(background_color, vec3(0.0), vec3(1e10)), backgroundAlpha); } diff --git a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl index b7bcf5c8a8b..ccef05ef985 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl @@ -26,7 +26,7 @@ void main() vec4 noise = texelfetch_noise_tex(gl_FragCoord.xy); - gtao_deferred(normal, viewPosition, noise, depth, visibility, bent_normal); + gtao_deferred(normal, noise, depth, visibility, bent_normal); /* Handle Background case. Prevent artifact due to uncleared Horizon Render Target. */ FragColor = vec4((depth == 1.0) ? 0.0 : visibility); diff --git a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl index 0f76f8e1b8c..b8a86f8d742 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl @@ -237,12 +237,11 @@ vec3 get_hit_vector( } else { /* Find hit position in previous frame. */ - mask = screen_border_mask(gl_FragCoord.xy / vec2(textureSize(depthBuffer, 0))); hit_co = get_reprojected_reflection(hit_pos, worldPosition, N); hit_vec = hit_pos - worldPosition; } - mask = min(mask, screen_border_mask(hit_co)); + mask = screen_border_mask(hit_co); return hit_vec; } @@ -410,34 +409,6 @@ void main() if (dot(speccol_roughness.rgb, vec3(1.0)) == 0.0) discard; - /* TODO optimize with textureGather */ - /* Doing these fetches early to hide latency. */ - vec4 hit_pdf; - hit_pdf.x = texelFetch(pdfBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).r; - hit_pdf.y = texelFetch(pdfBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).r; - hit_pdf.z = texelFetch(pdfBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).r; - hit_pdf.w = texelFetch(pdfBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).r; - - ivec4 hit_data[2]; - hit_data[0].xy = texelFetch(hitBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).rg; - hit_data[0].zw = texelFetch(hitBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).rg; - hit_data[1].xy = texelFetch(hitBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).rg; - hit_data[1].zw = texelFetch(hitBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).rg; - - /* Find Planar Reflections affecting this pixel */ - PlanarData pd; - float planar_index; - for (int i = 0; i < MAX_PLANAR && i < prbNumPlanar; ++i) { - pd = planars_data[i]; - - float fade = probe_attenuation_planar(pd, worldPosition, N, 0.0); - - if (fade > 0.5) { - planar_index = float(i); - break; - } - } - float roughness = speccol_roughness.a; float roughnessSquared = max(1e-3, roughness * roughness); @@ -454,6 +425,34 @@ void main() float weight_acc = 0.0; if (roughness < ssrMaxRoughness + 0.2) { + /* TODO optimize with textureGather */ + /* Doing these fetches early to hide latency. */ + vec4 hit_pdf; + hit_pdf.x = texelFetch(pdfBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).r; + hit_pdf.y = texelFetch(pdfBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).r; + hit_pdf.z = texelFetch(pdfBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).r; + hit_pdf.w = texelFetch(pdfBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).r; + + ivec4 hit_data[2]; + hit_data[0].xy = texelFetch(hitBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).rg; + hit_data[0].zw = texelFetch(hitBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).rg; + hit_data[1].xy = texelFetch(hitBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).rg; + hit_data[1].zw = texelFetch(hitBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).rg; + + /* Find Planar Reflections affecting this pixel */ + PlanarData pd; + float planar_index; + for (int i = 0; i < MAX_PLANAR && i < prbNumPlanar; ++i) { + pd = planars_data[i]; + + float fade = probe_attenuation_planar(pd, worldPosition, N, 0.0); + + if (fade > 0.5) { + planar_index = float(i); + break; + } + } + ssr_accum += get_ssr_samples(hit_pdf, hit_data, pd, planar_index, worldPosition, N, V, roughnessSquared, cone_tan, source_uvs, weight_acc); } diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl index 142afa5705b..a6e6f1fac42 100644 --- a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl @@ -52,6 +52,7 @@ void main() vec3 pos, binor; hair_get_pos_tan_binor_time( (ProjectionMatrix[3][3] == 0.0), + ModelMatrixInverse, ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz, pos, hairTangent, binor, hairTime, hairThickness, hairThickTime); diff --git a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl index e110937c5aa..1a8dbc97317 100644 --- a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl @@ -1,6 +1,7 @@ uniform mat4 ModelViewProjectionMatrix; uniform mat4 ModelMatrix; +uniform mat4 ModelMatrixInverse; #ifdef CLIP_PLANES /* keep in sync with DRWManager.view_data */ @@ -20,6 +21,7 @@ void main() vec3 pos, tan, binor; hair_get_pos_tan_binor_time( (ProjectionMatrix[3][3] == 0.0), + ModelMatrixInverse, ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz, pos, tan, binor, time, thickness, thick_time); diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c index 30887e3fb19..15ac3f37add 100644 --- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c +++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c @@ -26,14 +26,14 @@ #include "DRW_engine.h" #include "DRW_render.h" -#include "BKE_global.h" - #include "ED_gpencil.h" #include "ED_view3d.h" #include "DNA_gpencil_types.h" #include "DNA_view3d_types.h" +#include "BKE_gpencil.h" + #include "gpencil_engine.h" #include "draw_cache_impl.h" @@ -41,63 +41,6 @@ #include "DEG_depsgraph.h" #include "DEG_depsgraph_query.h" -static bool gpencil_check_ob_duplicated(tGPencilObjectCache *cache_array, - int gp_cache_used, Object *ob, int *r_index) -{ - if (gp_cache_used == 0) { - return false; - } - - for (int i = 0; i < gp_cache_used; i++) { - tGPencilObjectCache *cache_elem = &cache_array[i]; - if (cache_elem->ob == ob) { - *r_index = cache_elem->data_idx; - return true; - } - } - return false; -} - -static bool gpencil_check_datablock_duplicated( - tGPencilObjectCache *cache_array, int gp_cache_used, - Object *ob, bGPdata *gpd) -{ - if (gp_cache_used == 0) { - return false; - } - - for (int i = 0; i < gp_cache_used; i++) { - tGPencilObjectCache *cache_elem = &cache_array[i]; - if ((cache_elem->ob != ob) && - (cache_elem->gpd == gpd)) - { - return true; - } - } - return false; -} - -static int gpencil_len_datablock_duplicated( - tGPencilObjectCache *cache_array, int gp_cache_used, - Object *ob, bGPdata *gpd) -{ - int tot = 0; - if (gp_cache_used == 0) { - return 0; - } - - for (int i = 0; i < gp_cache_used; i++) { - tGPencilObjectCache *cache_elem = &cache_array[i]; - if ((cache_elem->ob != ob) && - (cache_elem->gpd == gpd) && - (!cache_elem->is_dup_ob)) - { - tot++; - } - } - return tot; -} - /* add a gpencil object to cache to defer drawing */ tGPencilObjectCache *gpencil_object_cache_add( tGPencilObjectCache *cache_array, Object *ob, @@ -133,38 +76,15 @@ tGPencilObjectCache *gpencil_object_cache_add( copy_m4_m4(cache_elem->obmat, ob->obmat); cache_elem->idx = *gp_cache_used; - /* check if object is duplicated */ - cache_elem->is_dup_ob = gpencil_check_ob_duplicated( - cache_array, - *gp_cache_used, ob_orig, - &cache_elem->data_idx); - - if (!cache_elem->is_dup_ob) { - /* check if object reuse datablock */ - cache_elem->is_dup_data = gpencil_check_datablock_duplicated( - cache_array, *gp_cache_used, - ob_orig, cache_elem->gpd); - if (cache_elem->is_dup_data) { - cache_elem->data_idx = gpencil_len_datablock_duplicated( - cache_array, *gp_cache_used, - ob_orig, cache_elem->gpd); - - cache_elem->gpd->flag |= GP_DATA_CACHE_IS_DIRTY; - } - else { - cache_elem->data_idx = 0; - } - } - else { - cache_elem->is_dup_data = false; - } + /* object is duplicated (particle) */ + cache_elem->is_dup_ob = ob->base_flag & BASE_FROMDUPLI; /* save FXs */ cache_elem->pixfactor = cache_elem->gpd->pixfactor; cache_elem->shader_fx = ob_orig->shader_fx; - cache_elem->init_grp = 0; - cache_elem->end_grp = -1; + cache_elem->init_grp = NULL; + cache_elem->end_grp = NULL; /* calculate zdepth from point of view */ float zdepth = 0.0; @@ -198,6 +118,48 @@ tGPencilObjectCache *gpencil_object_cache_add( return cache_array; } +/* add a shading group to the cache to create later */ +GpencilBatchGroup *gpencil_group_cache_add( + GpencilBatchGroup *cache_array, + bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, + const short type, const bool onion, + const int vertex_idx, + int *grp_size, int *grp_used) +{ + GpencilBatchGroup *cache_elem = NULL; + GpencilBatchGroup *p = NULL; + + /* By default a cache is created with one block with a predefined number of free slots, + if the size is not enough, the cache is reallocated adding a new block of free slots. + This is done in order to keep cache small */ + if (*grp_used + 1 > *grp_size) { + if ((*grp_size == 0) || (cache_array == NULL)) { + p = MEM_callocN(sizeof(struct GpencilBatchGroup) * GPENCIL_GROUPS_BLOCK_SIZE, "GpencilBatchGroup"); + *grp_size = GPENCIL_GROUPS_BLOCK_SIZE; + } + else { + *grp_size += GPENCIL_GROUPS_BLOCK_SIZE; + p = MEM_recallocN(cache_array, sizeof(struct GpencilBatchGroup) * *grp_size); + } + cache_array = p; + } + /* zero out all data */ + cache_elem = &cache_array[*grp_used]; + memset(cache_elem, 0, sizeof(*cache_elem)); + + cache_elem->gpl = gpl; + cache_elem->gpf = gpf; + cache_elem->gps = gps; + cache_elem->type = type; + cache_elem->onion = onion; + cache_elem->vertex_idx = vertex_idx; + + /* increase slots used in cache */ + (*grp_used)++; + + return cache_array; +} + /* get current cache data */ static GpencilBatchCache *gpencil_batch_get_element(Object *ob) { @@ -208,51 +170,33 @@ static GpencilBatchCache *gpencil_batch_get_element(Object *ob) /* verify if cache is valid */ static bool gpencil_batch_cache_valid(GpencilBatchCache *cache, bGPdata *gpd, int cfra) { + bool valid = true; if (cache == NULL) { return false; } cache->is_editmode = GPENCIL_ANY_EDIT_MODE(gpd); - if (cfra != cache->cache_frame) { - return false; + valid = false; } - - if (gpd->flag & GP_DATA_CACHE_IS_DIRTY) { - return false; + else if (gpd->flag & GP_DATA_CACHE_IS_DIRTY) { + valid = false; } - - if (cache->is_editmode) { - return false; + else if (gpd->flag & GP_DATA_SHOW_ONIONSKINS) { + /* if onion, set as dirty always + * This reduces performance, but avoid any crash in the multiple + * overlay and multiwindow options and keep all windows working + */ + valid = false; } - - if (cache->is_dirty) { - return false; + else if (cache->is_editmode) { + valid = false; } - - return true; -} - -/* resize the cache to the number of slots */ -static void gpencil_batch_cache_resize(GpencilBatchCache *cache, int slots) -{ - cache->cache_size = slots; - cache->batch_stroke = MEM_recallocN(cache->batch_stroke, sizeof(struct Gwn_Batch *) * slots); - cache->batch_fill = MEM_recallocN(cache->batch_fill, sizeof(struct Gwn_Batch *) * slots); - cache->batch_edit = MEM_recallocN(cache->batch_edit, sizeof(struct Gwn_Batch *) * slots); - cache->batch_edlin = MEM_recallocN(cache->batch_edlin, sizeof(struct Gwn_Batch *) * slots); -} - -/* check size and increase if no free slots */ -void gpencil_batch_cache_check_free_slots(Object *ob) -{ - GpencilBatchCache *cache = gpencil_batch_get_element(ob); - - /* the memory is reallocated by chunks, not for one slot only to improve speed */ - if (cache->cache_idx >= cache->cache_size) { - cache->cache_size += GPENCIL_MIN_BATCH_SLOTS_CHUNK; - gpencil_batch_cache_resize(cache, cache->cache_size); + else if (cache->is_dirty) { + valid = false; } + + return valid; } /* cache init */ @@ -263,10 +207,6 @@ static GpencilBatchCache *gpencil_batch_cache_init(Object *ob, int cfra) GpencilBatchCache *cache = gpencil_batch_get_element(ob); - if (G.debug_value >= 664) { - printf("gpencil_batch_cache_init: %s\n", ob->id.name); - } - if (!cache) { cache = MEM_callocN(sizeof(*cache), __func__); ob_orig->runtime.gpencil_cache = cache; @@ -275,19 +215,17 @@ static GpencilBatchCache *gpencil_batch_cache_init(Object *ob, int cfra) memset(cache, 0, sizeof(*cache)); } - cache->cache_size = GPENCIL_MIN_BATCH_SLOTS_CHUNK; - cache->batch_stroke = MEM_callocN(sizeof(struct Gwn_Batch *) * cache->cache_size, "Gpencil_Batch_Stroke"); - cache->batch_fill = MEM_callocN(sizeof(struct Gwn_Batch *) * cache->cache_size, "Gpencil_Batch_Fill"); - cache->batch_edit = MEM_callocN(sizeof(struct Gwn_Batch *) * cache->cache_size, "Gpencil_Batch_Edit"); - cache->batch_edlin = MEM_callocN(sizeof(struct Gwn_Batch *) * cache->cache_size, "Gpencil_Batch_Edlin"); - cache->is_editmode = GPENCIL_ANY_EDIT_MODE(gpd); - gpd->flag &= ~GP_DATA_CACHE_IS_DIRTY; - cache->cache_idx = 0; cache->is_dirty = true; + cache->cache_frame = cfra; + /* create array of derived frames equal to number of layers */ + cache->tot_layers = BLI_listbase_count(&gpd->layers); + CLAMP_MIN(cache->tot_layers, 1); + cache->derived_array = MEM_callocN(sizeof(struct bGPDframe) * cache->tot_layers, "Derived GPF"); + return cache; } @@ -298,24 +236,30 @@ static void gpencil_batch_cache_clear(GpencilBatchCache *cache) return; } - if (cache->cache_size == 0) { - return; - } - - if (cache->cache_size > 0) { - for (int i = 0; i < cache->cache_size; i++) { - GPU_BATCH_DISCARD_SAFE(cache->batch_stroke[i]); - GPU_BATCH_DISCARD_SAFE(cache->batch_fill[i]); - GPU_BATCH_DISCARD_SAFE(cache->batch_edit[i]); - GPU_BATCH_DISCARD_SAFE(cache->batch_edlin[i]); - } - MEM_SAFE_FREE(cache->batch_stroke); - MEM_SAFE_FREE(cache->batch_fill); - MEM_SAFE_FREE(cache->batch_edit); - MEM_SAFE_FREE(cache->batch_edlin); + GPU_BATCH_DISCARD_SAFE(cache->b_stroke.batch); + GPU_BATCH_DISCARD_SAFE(cache->b_point.batch); + GPU_BATCH_DISCARD_SAFE(cache->b_fill.batch); + GPU_BATCH_DISCARD_SAFE(cache->b_edit.batch); + GPU_BATCH_DISCARD_SAFE(cache->b_edlin.batch); + + MEM_SAFE_FREE(cache->b_stroke.batch); + MEM_SAFE_FREE(cache->b_point.batch); + MEM_SAFE_FREE(cache->b_fill.batch); + MEM_SAFE_FREE(cache->b_edit.batch); + MEM_SAFE_FREE(cache->b_edlin.batch); + + MEM_SAFE_FREE(cache->grp_cache); + cache->grp_size = 0; + cache->grp_used = 0; + + /* clear all frames derived data */ + for (int i = 0; i < cache->tot_layers; i++) { + bGPDframe *derived_gpf = &cache->derived_array[i]; + BKE_gpencil_free_frame_runtime_data(derived_gpf); + derived_gpf = NULL; } - - cache->cache_size = 0; + cache->tot_layers = 0; + MEM_SAFE_FREE(cache->derived_array); } /* get cache */ @@ -326,10 +270,6 @@ GpencilBatchCache *gpencil_batch_cache_get(Object *ob, int cfra) GpencilBatchCache *cache = gpencil_batch_get_element(ob); if (!gpencil_batch_cache_valid(cache, gpd, cfra)) { - if (G.debug_value >= 664) { - printf("gpencil_batch_cache: %s\n", gpd->id.name); - } - if (cache) { gpencil_batch_cache_clear(cache); } diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c index f255892de44..6289e76664d 100644 --- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c +++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c @@ -87,24 +87,32 @@ static void gpencil_set_fill_point( GPU_vertbuf_attr_set(vbo, text_id, idx, uv); } -/* create batch geometry data for points stroke shader */ -GPUBatch *DRW_gpencil_get_point_geom(bGPDstroke *gps, short thickness, const float ink[4]) +static void gpencil_vbo_ensure_size(GpencilBatchCacheElem *be, int totvertex) { - static GPUVertFormat format = { 0 }; - static uint pos_id, color_id, size_id, uvdata_id; - if (format.attr_len == 0) { - pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); - size_id = GPU_vertformat_attr_add(&format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); - uvdata_id = GPU_vertformat_attr_add(&format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + if (be->vbo->vertex_alloc <= be->vbo_len + totvertex) { + uint newsize = be->vbo->vertex_alloc + (((totvertex / GPENCIL_VBO_BLOCK_SIZE) + 1) * GPENCIL_VBO_BLOCK_SIZE); + GPU_vertbuf_data_resize(be->vbo, newsize); } +} - GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - GPU_vertbuf_data_alloc(vbo, gps->totpoints); +/* create batch geometry data for points stroke shader */ +void DRW_gpencil_get_point_geom(GpencilBatchCacheElem *be, bGPDstroke *gps, short thickness, const float ink[4]) +{ + int totvertex = gps->totpoints; + if (be->vbo == NULL) { + be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); + be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); + be->thickness_id = GPU_vertformat_attr_add(&be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); + be->uvdata_id = GPU_vertformat_attr_add(&be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + + be->vbo = GPU_vertbuf_create_with_format(&be->format); + GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex); + be->vbo_len = 0; + } + gpencil_vbo_ensure_size(be, totvertex); /* draw stroke curve */ const bGPDspoint *pt = gps->points; - int idx = 0; float alpha; float col[4]; @@ -116,86 +124,120 @@ GPUBatch *DRW_gpencil_get_point_geom(bGPDstroke *gps, short thickness, const flo float thick = max_ff(pt->pressure * thickness, 1.0f); - GPU_vertbuf_attr_set(vbo, color_id, idx, col); - GPU_vertbuf_attr_set(vbo, size_id, idx, &thick); + GPU_vertbuf_attr_set(be->vbo, be->color_id, be->vbo_len, col); + GPU_vertbuf_attr_set(be->vbo, be->thickness_id, be->vbo_len, &thick); /* transfer both values using the same shader variable */ float uvdata[2] = { pt->uv_fac, pt->uv_rot }; - GPU_vertbuf_attr_set(vbo, uvdata_id, idx, uvdata); + GPU_vertbuf_attr_set(be->vbo, be->uvdata_id, be->vbo_len, uvdata); - GPU_vertbuf_attr_set(vbo, pos_id, idx, &pt->x); - idx++; + GPU_vertbuf_attr_set(be->vbo, be->pos_id, be->vbo_len, &pt->x); + be->vbo_len++; } - - return GPU_batch_create_ex(GPU_PRIM_POINTS, vbo, NULL, GPU_BATCH_OWNS_VBO); } /* create batch geometry data for stroke shader */ -GPUBatch *DRW_gpencil_get_stroke_geom(bGPDstroke *gps, short thickness, const float ink[4]) +void DRW_gpencil_get_stroke_geom(struct GpencilBatchCacheElem *be, bGPDstroke *gps, short thickness, const float ink[4]) { bGPDspoint *points = gps->points; int totpoints = gps->totpoints; /* if cyclic needs more vertex */ int cyclic_add = (gps->flag & GP_STROKE_CYCLIC) ? 1 : 0; + int totvertex = totpoints + cyclic_add + 2; - static GPUVertFormat format = { 0 }; - static uint pos_id, color_id, thickness_id, uvdata_id; - if (format.attr_len == 0) { - pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); - thickness_id = GPU_vertformat_attr_add(&format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); - uvdata_id = GPU_vertformat_attr_add(&format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - } + if (be->vbo == NULL) { + be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); + be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); + be->thickness_id = GPU_vertformat_attr_add(&be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); + be->uvdata_id = GPU_vertformat_attr_add(&be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - GPU_vertbuf_data_alloc(vbo, totpoints + cyclic_add + 2); + be->vbo = GPU_vertbuf_create_with_format(&be->format); + GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex); + be->vbo_len = 0; + } + gpencil_vbo_ensure_size(be, totvertex); /* draw stroke curve */ const bGPDspoint *pt = points; - int idx = 0; for (int i = 0; i < totpoints; i++, pt++) { /* first point for adjacency (not drawn) */ if (i == 0) { if (gps->flag & GP_STROKE_CYCLIC && totpoints > 2) { gpencil_set_stroke_point( - vbo, &points[totpoints - 1], idx, - pos_id, color_id, thickness_id, uvdata_id, thickness, ink); - idx++; + be->vbo, &points[totpoints - 1], be->vbo_len, + be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink); + be->vbo_len++; } else { gpencil_set_stroke_point( - vbo, &points[1], idx, - pos_id, color_id, thickness_id, uvdata_id, thickness, ink); - idx++; + be->vbo, &points[1], be->vbo_len, + be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink); + be->vbo_len++; } } /* set point */ gpencil_set_stroke_point( - vbo, pt, idx, - pos_id, color_id, thickness_id, uvdata_id, thickness, ink); - idx++; + be->vbo, pt, be->vbo_len, + be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink); + be->vbo_len++; } if (gps->flag & GP_STROKE_CYCLIC && totpoints > 2) { /* draw line to first point to complete the cycle */ gpencil_set_stroke_point( - vbo, &points[0], idx, - pos_id, color_id, thickness_id, uvdata_id, thickness, ink); - idx++; + be->vbo, &points[0], be->vbo_len, + be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink); + be->vbo_len++; /* now add adjacency point (not drawn) */ gpencil_set_stroke_point( - vbo, &points[1], idx, - pos_id, color_id, thickness_id, uvdata_id, thickness, ink); - idx++; + be->vbo, &points[1], be->vbo_len, + be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink); + be->vbo_len++; } /* last adjacency point (not drawn) */ else { gpencil_set_stroke_point( - vbo, &points[totpoints - 2], idx, - pos_id, color_id, thickness_id, uvdata_id, thickness, ink); + be->vbo, &points[totpoints - 2], be->vbo_len, + be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink); + be->vbo_len++; } +} - return GPU_batch_create_ex(GPU_PRIM_LINE_STRIP_ADJ, vbo, NULL, GPU_BATCH_OWNS_VBO); +/* create batch geometry data for stroke shader */ +void DRW_gpencil_get_fill_geom(struct GpencilBatchCacheElem *be, Object *ob, bGPDstroke *gps, const float color[4]) +{ + BLI_assert(gps->totpoints >= 3); + + /* Calculate triangles cache for filling area (must be done only after changes) */ + if ((gps->flag & GP_STROKE_RECALC_CACHES) || (gps->tot_triangles == 0) || (gps->triangles == NULL)) { + DRW_gpencil_triangulate_stroke_fill(ob, gps); + ED_gpencil_calc_stroke_uv(ob, gps); + } + + BLI_assert(gps->tot_triangles >= 1); + int totvertex = gps->tot_triangles * 3; + + if (be->vbo == NULL) { + be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); + be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); + be->uvdata_id = GPU_vertformat_attr_add(&be->format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + + be->vbo = GPU_vertbuf_create_with_format(&be->format); + GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex); + be->vbo_len = 0; + } + gpencil_vbo_ensure_size(be, totvertex); + + /* Draw all triangles for filling the polygon (cache must be calculated before) */ + bGPDtriangle *stroke_triangle = gps->triangles; + for (int i = 0; i < gps->tot_triangles; i++, stroke_triangle++) { + for (int j = 0; j < 3; j++) { + gpencil_set_fill_point( + be->vbo, be->vbo_len, &gps->points[stroke_triangle->verts[j]], color, stroke_triangle->uv[j], + be->pos_id, be->color_id, be->uvdata_id); + be->vbo_len++; + } + } } /* create batch geometry data for current buffer stroke shader */ @@ -407,47 +449,8 @@ GPUBatch *DRW_gpencil_get_buffer_fill_geom(bGPdata *gpd) return GPU_batch_create_ex(GPU_PRIM_TRIS, vbo, NULL, GPU_BATCH_OWNS_VBO); } -/* create batch geometry data for stroke shader */ -GPUBatch *DRW_gpencil_get_fill_geom(Object *ob, bGPDstroke *gps, const float color[4]) -{ - BLI_assert(gps->totpoints >= 3); - - /* Calculate triangles cache for filling area (must be done only after changes) */ - if ((gps->flag & GP_STROKE_RECALC_CACHES) || (gps->tot_triangles == 0) || (gps->triangles == NULL)) { - DRW_gpencil_triangulate_stroke_fill(ob, gps); - ED_gpencil_calc_stroke_uv(ob, gps); - } - - BLI_assert(gps->tot_triangles >= 1); - - static GPUVertFormat format = { 0 }; - static uint pos_id, color_id, text_id; - if (format.attr_len == 0) { - pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); - text_id = GPU_vertformat_attr_add(&format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - } - - GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - GPU_vertbuf_data_alloc(vbo, gps->tot_triangles * 3); - - /* Draw all triangles for filling the polygon (cache must be calculated before) */ - bGPDtriangle *stroke_triangle = gps->triangles; - int idx = 0; - for (int i = 0; i < gps->tot_triangles; i++, stroke_triangle++) { - for (int j = 0; j < 3; j++) { - gpencil_set_fill_point( - vbo, idx, &gps->points[stroke_triangle->verts[j]], color, stroke_triangle->uv[j], - pos_id, color_id, text_id); - idx++; - } - } - - return GPU_batch_create_ex(GPU_PRIM_TRIS, vbo, NULL, GPU_BATCH_OWNS_VBO); -} - /* Draw selected verts for strokes being edited */ -GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag) +void DRW_gpencil_get_edit_geom(struct GpencilBatchCacheElem *be, bGPDstroke *gps, float alpha, short dflag) { const DRWContextState *draw_ctx = DRW_context_state_get(); Object *ob = draw_ctx->obact; @@ -483,16 +486,16 @@ GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag) UI_GetThemeColor3fv(TH_GP_VERTEX, unselectColor); unselectColor[3] = alpha; - static GPUVertFormat format = { 0 }; - static uint pos_id, color_id, size_id; - if (format.attr_len == 0) { - pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); - size_id = GPU_vertformat_attr_add(&format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); - } + if (be->vbo == NULL) { + be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); + be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); + be->thickness_id = GPU_vertformat_attr_add(&be->format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); - GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - GPU_vertbuf_data_alloc(vbo, gps->totpoints); + be->vbo = GPU_vertbuf_create_with_format(&be->format); + GPU_vertbuf_data_alloc(be->vbo, gps->totpoints); + be->vbo_len = 0; + } + gpencil_vbo_ensure_size(be, gps->totpoints); /* Draw start and end point differently if enabled stroke direction hint */ bool show_direction_hint = (dflag & GP_DATA_SHOW_DIRECTION) && (gps->totpoints > 1); @@ -501,7 +504,6 @@ GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag) bGPDspoint *pt = gps->points; MDeformVert *dvert = gps->dvert; - int idx = 0; float fcolor[4]; float fsize = 0; for (int i = 0; i < gps->totpoints; i++, pt++) { @@ -535,20 +537,18 @@ GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag) } } - GPU_vertbuf_attr_set(vbo, color_id, idx, fcolor); - GPU_vertbuf_attr_set(vbo, size_id, idx, &fsize); - GPU_vertbuf_attr_set(vbo, pos_id, idx, &pt->x); - idx++; + GPU_vertbuf_attr_set(be->vbo, be->color_id, be->vbo_len, fcolor); + GPU_vertbuf_attr_set(be->vbo, be->thickness_id, be->vbo_len, &fsize); + GPU_vertbuf_attr_set(be->vbo, be->pos_id, be->vbo_len, &pt->x); + be->vbo_len++; if (gps->dvert != NULL) { dvert++; } } - - return GPU_batch_create_ex(GPU_PRIM_POINTS, vbo, NULL, GPU_BATCH_OWNS_VBO); } /* Draw lines for strokes being edited */ -GPUBatch *DRW_gpencil_get_edlin_geom(bGPDstroke *gps, float alpha, short UNUSED(dflag)) +void DRW_gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be, bGPDstroke *gps, float alpha, short UNUSED(dflag)) { const DRWContextState *draw_ctx = DRW_context_state_get(); Object *ob = draw_ctx->obact; @@ -566,21 +566,20 @@ GPUBatch *DRW_gpencil_get_edlin_geom(bGPDstroke *gps, float alpha, short UNUSED( float linecolor[4]; copy_v4_v4(linecolor, gpd->line_color); - static GPUVertFormat format = { 0 }; - static uint pos_id, color_id; - if (format.attr_len == 0) { - pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); - } + if (be->vbo == NULL) { + be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); + be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT); - GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - GPU_vertbuf_data_alloc(vbo, gps->totpoints); + be->vbo = GPU_vertbuf_create_with_format(&be->format); + GPU_vertbuf_data_alloc(be->vbo, gps->totpoints); + be->vbo_len = 0; + } + gpencil_vbo_ensure_size(be, gps->totpoints); /* Draw all the stroke lines (selected or not) */ bGPDspoint *pt = gps->points; MDeformVert *dvert = gps->dvert; - int idx = 0; float fcolor[4]; for (int i = 0; i < gps->totpoints; i++, pt++) { /* weight paint */ @@ -600,16 +599,14 @@ GPUBatch *DRW_gpencil_get_edlin_geom(bGPDstroke *gps, float alpha, short UNUSED( } } - GPU_vertbuf_attr_set(vbo, color_id, idx, fcolor); - GPU_vertbuf_attr_set(vbo, pos_id, idx, &pt->x); - idx++; + GPU_vertbuf_attr_set(be->vbo, be->color_id, be->vbo_len, fcolor); + GPU_vertbuf_attr_set(be->vbo, be->pos_id, be->vbo_len, &pt->x); + be->vbo_len++; if (gps->dvert != NULL) { dvert++; } } - - return GPU_batch_create_ex(GPU_PRIM_LINE_STRIP, vbo, NULL, GPU_BATCH_OWNS_VBO); } static void set_grid_point( diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c index ae62e61c5c1..40b6a4e5b2b 100644 --- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c +++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c @@ -43,7 +43,7 @@ #include "DNA_view3d_types.h" #include "DNA_gpencil_modifier_types.h" - /* If builtin shaders are needed */ +/* If builtin shaders are needed */ #include "GPU_shader.h" #include "GPU_texture.h" @@ -65,6 +65,67 @@ #define GP_SET_SRC_GPS(src_gps) if (src_gps) src_gps = src_gps->next +/* Get number of vertex for using in GPU VBOs */ +static void gpencil_calc_vertex( + GPENCIL_StorageList *stl, tGPencilObjectCache *cache_ob, + GpencilBatchCache *cache, bGPdata *gpd, + int cfra_eval) +{ + Object *ob = cache_ob->ob; + const DRWContextState *draw_ctx = DRW_context_state_get(); + bGPDframe *gpf = NULL; + + const bool time_remap = BKE_gpencil_has_time_modifiers(ob); + + cache_ob->tot_vertex = 0; + cache_ob->tot_triangles = 0; + + for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) { + if (gpl->flag & GP_LAYER_HIDE) { + continue; + } + + /* verify time modifiers */ + if ((time_remap) && (!stl->storage->simplify_modif)) { + int remap_cfra = BKE_gpencil_time_modifier( + draw_ctx->depsgraph, draw_ctx->scene, ob, gpl, cfra_eval, + stl->storage->is_render); + gpf = BKE_gpencil_layer_getframe(gpl, remap_cfra, GP_GETFRAME_USE_PREV); + } + else { + gpf = gpl->actframe; + } + + if (gpf == NULL) { + continue; + } + + for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) { + cache_ob->tot_vertex += gps->totpoints + 3; + cache_ob->tot_triangles += gps->totpoints - 1; + } + } + + cache->b_fill.tot_vertex = cache_ob->tot_triangles * 3; + cache->b_stroke.tot_vertex = cache_ob->tot_vertex; + cache->b_point.tot_vertex = cache_ob->tot_vertex; + + /* some modifiers can change the number of points */ + int factor = 0; + GpencilModifierData *md; + for (md = ob->greasepencil_modifiers.first; md; md = md->next) { + const GpencilModifierTypeInfo *mti = BKE_gpencil_modifierType_getInfo(md->type); + /* only modifiers that change size */ + if (mti && mti->getDuplicationFactor) { + factor = mti->getDuplicationFactor(md); + + cache->b_fill.tot_vertex *= factor; + cache->b_stroke.tot_vertex *= factor; + cache->b_point.tot_vertex *= factor; + } + } +} + /* Helper for doing all the checks on whether a stroke can be drawn */ static bool gpencil_can_draw_stroke( struct MaterialGPencilStyle *gp_style, const bGPDstroke *gps, @@ -182,79 +243,6 @@ static void gpencil_stroke_2d_flat(const bGPDspoint *points, int totpoints, floa *r_direction = (int)locy[2]; } -/* Triangulate stroke for high quality fill (this is done only if cache is null or stroke was modified) */ -void DRW_gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps) -{ - BLI_assert(gps->totpoints >= 3); - - bGPdata *gpd = (bGPdata *)ob->data; - - /* allocate memory for temporary areas */ - gps->tot_triangles = gps->totpoints - 2; - uint(*tmp_triangles)[3] = MEM_mallocN(sizeof(*tmp_triangles) * gps->tot_triangles, "GP Stroke temp triangulation"); - float(*points2d)[2] = MEM_mallocN(sizeof(*points2d) * gps->totpoints, "GP Stroke temp 2d points"); - float(*uv)[2] = MEM_mallocN(sizeof(*uv) * gps->totpoints, "GP Stroke temp 2d uv data"); - - int direction = 0; - - /* convert to 2d and triangulate */ - gpencil_stroke_2d_flat(gps->points, gps->totpoints, points2d, &direction); - BLI_polyfill_calc(points2d, (uint)gps->totpoints, direction, tmp_triangles); - - /* calc texture coordinates automatically */ - float minv[2]; - float maxv[2]; - /* first needs bounding box data */ - if (gpd->flag & GP_DATA_UV_ADAPTATIVE) { - gpencil_calc_2d_bounding_box(points2d, gps->totpoints, minv, maxv); - } - else { - ARRAY_SET_ITEMS(minv, -1.0f, -1.0f); - ARRAY_SET_ITEMS(maxv, 1.0f, 1.0f); - } - - /* calc uv data */ - gpencil_calc_stroke_fill_uv(points2d, gps->totpoints, minv, maxv, uv); - - /* Number of triangles */ - gps->tot_triangles = gps->totpoints - 2; - /* save triangulation data in stroke cache */ - if (gps->tot_triangles > 0) { - if (gps->triangles == NULL) { - gps->triangles = MEM_callocN(sizeof(*gps->triangles) * gps->tot_triangles, "GP Stroke triangulation"); - } - else { - gps->triangles = MEM_recallocN(gps->triangles, sizeof(*gps->triangles) * gps->tot_triangles); - } - - for (int i = 0; i < gps->tot_triangles; i++) { - bGPDtriangle *stroke_triangle = &gps->triangles[i]; - memcpy(gps->triangles[i].verts, tmp_triangles[i], sizeof(uint[3])); - /* copy texture coordinates */ - copy_v2_v2(stroke_triangle->uv[0], uv[tmp_triangles[i][0]]); - copy_v2_v2(stroke_triangle->uv[1], uv[tmp_triangles[i][1]]); - copy_v2_v2(stroke_triangle->uv[2], uv[tmp_triangles[i][2]]); - } - } - else { - /* No triangles needed - Free anything allocated previously */ - if (gps->triangles) - MEM_freeN(gps->triangles); - - gps->triangles = NULL; - } - - /* disable recalculation flag */ - if (gps->flag & GP_STROKE_RECALC_CACHES) { - gps->flag &= ~GP_STROKE_RECALC_CACHES; - } - - /* clear memory */ - MEM_SAFE_FREE(tmp_triangles); - MEM_SAFE_FREE(points2d); - MEM_SAFE_FREE(uv); -} - /* recalc the internal geometry caches for fill and uvs */ static void DRW_gpencil_recalc_geometry_caches(Object *ob, MaterialGPencilStyle *gp_style, bGPDstroke *gps) { @@ -279,7 +267,8 @@ static void DRW_gpencil_recalc_geometry_caches(Object *ob, MaterialGPencilStyle /* create shading group for filling */ static DRWShadingGroup *DRW_gpencil_shgroup_fill_create( GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass, - GPUShader *shader, bGPdata *gpd, MaterialGPencilStyle *gp_style, int id) + GPUShader *shader, bGPdata *gpd, bGPDlayer *gpl, + MaterialGPencilStyle *gp_style, int id) { GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; @@ -330,6 +319,7 @@ static DRWShadingGroup *DRW_gpencil_shgroup_fill_create( DRW_shgroup_uniform_vec2(grp, "texture_scale", gp_style->texture_scale, 1); DRW_shgroup_uniform_vec2(grp, "texture_offset", gp_style->texture_offset, 1); DRW_shgroup_uniform_float(grp, "texture_opacity", &gp_style->texture_opacity, 1); + DRW_shgroup_uniform_float(grp, "layer_opacity", &gpl->opacity, 1); stl->shgroups[id].texture_mix = gp_style->flag & GP_STYLE_COLOR_TEX_MIX ? 1 : 0; DRW_shgroup_uniform_int(grp, "texture_mix", &stl->shgroups[id].texture_mix, 1); @@ -464,7 +454,7 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create( return grp; } -/* create shading group for volumetrics */ +/* create shading group for points */ static DRWShadingGroup *DRW_gpencil_shgroup_point_create( GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob, bGPdata *gpd, MaterialGPencilStyle *gp_style, int id, bool onion) @@ -557,10 +547,10 @@ static DRWShadingGroup *DRW_gpencil_shgroup_point_create( return grp; } -/* add fill shading group to pass */ -static void gpencil_add_fill_shgroup( - GpencilBatchCache *cache, DRWShadingGroup *fillgrp, - Object *ob, bGPDframe *gpf, bGPDstroke *gps, +/* add fill vertex info */ +static void gpencil_add_fill_vertexdata( + GpencilBatchCache *cache, + Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, float opacity, const float tintcolor[4], const bool onion, const bool custonion) { MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1); @@ -584,20 +574,28 @@ static void gpencil_add_fill_shgroup( color = tfill; } } - gpencil_batch_cache_check_free_slots(ob); - cache->batch_fill[cache->cache_idx] = DRW_gpencil_get_fill_geom(ob, gps, color); + /* create vertex data */ + const int old_len = cache->b_fill.vbo_len; + DRW_gpencil_get_fill_geom(&cache->b_fill, ob, gps, color); + + /* add to list of groups */ + if (old_len < cache->b_fill.vbo_len) { + cache->grp_cache = gpencil_group_cache_add( + cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Fill, onion, + cache->b_fill.vbo_len, + &cache->grp_size, &cache->grp_used); + } } - - DRW_shgroup_call_add(fillgrp, cache->batch_fill[cache->cache_idx], gpf->runtime.viewmatrix); } } } -/* add stroke shading group to pass */ -static void gpencil_add_stroke_shgroup(GpencilBatchCache *cache, DRWShadingGroup *strokegrp, - Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, - const float opacity, const float tintcolor[4], const bool onion, - const bool custonion) +/* add stroke vertex info */ +static void gpencil_add_stroke_vertexdata( + GpencilBatchCache *cache, + Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, + const float opacity, const float tintcolor[4], const bool onion, + const bool custonion) { float tcolor[4]; float ink[4]; @@ -630,20 +628,39 @@ static void gpencil_add_stroke_shgroup(GpencilBatchCache *cache, DRWShadingGroup sthickness = gps->thickness + gpl->line_change; CLAMP_MIN(sthickness, 1); - gpencil_batch_cache_check_free_slots(ob); + if ((gps->totpoints > 1) && (gp_style->mode == GP_STYLE_MODE_LINE)) { - cache->batch_stroke[cache->cache_idx] = DRW_gpencil_get_stroke_geom(gps, sthickness, ink); + /* create vertex data */ + const int old_len = cache->b_stroke.vbo_len; + DRW_gpencil_get_stroke_geom(&cache->b_stroke, gps, sthickness, ink); + + /* add to list of groups */ + if (old_len < cache->b_stroke.vbo_len) { + cache->grp_cache = gpencil_group_cache_add( + cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Stroke, onion, + cache->b_stroke.vbo_len, + &cache->grp_size, &cache->grp_used); + } } else { - cache->batch_stroke[cache->cache_idx] = DRW_gpencil_get_point_geom(gps, sthickness, ink); + /* create vertex data */ + const int old_len = cache->b_point.vbo_len; + DRW_gpencil_get_point_geom(&cache->b_point, gps, sthickness, ink); + + /* add to list of groups */ + if (old_len < cache->b_point.vbo_len) { + cache->grp_cache = gpencil_group_cache_add( + cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Point, onion, + cache->b_point.vbo_len, + &cache->grp_size, &cache->grp_used); + } } } - DRW_shgroup_call_add(strokegrp, cache->batch_stroke[cache->cache_idx], gpf->runtime.viewmatrix); } -/* add edit points shading group to pass */ -static void gpencil_add_editpoints_shgroup( - GPENCIL_StorageList *stl, GpencilBatchCache *cache, ToolSettings *UNUSED(ts), Object *ob, +/* add edit points vertex info */ +static void gpencil_add_editpoints_vertexdata( + GPENCIL_StorageList *UNUSED(stl), GpencilBatchCache *cache, ToolSettings *UNUSED(ts), Object *ob, bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps) { const DRWContextState *draw_ctx = DRW_context_state_get(); @@ -660,36 +677,31 @@ static void gpencil_add_editpoints_shgroup( } const bool is_weight_paint = (gpd) && (gpd->flag & GP_DATA_STROKE_WEIGHTMODE); - /* line of the original stroke */ if (cache->is_dirty) { - gpencil_batch_cache_check_free_slots(ob); - cache->batch_edlin[cache->cache_idx] = DRW_gpencil_get_edlin_geom(gps, edit_alpha, gpd->flag); - } - if (cache->batch_edlin[cache->cache_idx]) { - if ((obact) && (obact == ob) && + if ((obact == ob) && ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) && (v3d->gp_flag & V3D_GP_SHOW_EDIT_LINES)) { - DRW_shgroup_call_add( - stl->g_data->shgrps_edit_line, - cache->batch_edlin[cache->cache_idx], - gpf->runtime.viewmatrix); + /* line of the original stroke */ + DRW_gpencil_get_edlin_geom(&cache->b_edlin, gps, edit_alpha, gpd->flag); + + /* add to list of groups */ + cache->grp_cache = gpencil_group_cache_add( + cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Edlin, false, + cache->b_edlin.vbo_len, + &cache->grp_size, &cache->grp_used); } - } - /* edit points */ - if ((gps->flag & GP_STROKE_SELECT) || (is_weight_paint)) { - if ((gpl->flag & GP_LAYER_UNLOCK_COLOR) || ((gp_style->flag & GP_STYLE_COLOR_LOCKED) == 0)) { - if (cache->is_dirty) { - gpencil_batch_cache_check_free_slots(ob); - cache->batch_edit[cache->cache_idx] = DRW_gpencil_get_edit_geom(gps, edit_alpha, gpd->flag); - } - if (cache->batch_edit[cache->cache_idx]) { - if ((obact) && (obact == ob)) { - /* edit pass */ - DRW_shgroup_call_add( - stl->g_data->shgrps_edit_point, - cache->batch_edit[cache->cache_idx], - gpf->runtime.viewmatrix); + /* edit points */ + if ((gps->flag & GP_STROKE_SELECT) || (is_weight_paint)) { + if ((gpl->flag & GP_LAYER_UNLOCK_COLOR) || ((gp_style->flag & GP_STYLE_COLOR_LOCKED) == 0)) { + if (obact == ob) { + DRW_gpencil_get_edit_geom(&cache->b_edit, gps, edit_alpha, gpd->flag); + + /* add to list of groups */ + cache->grp_cache = gpencil_group_cache_add( + cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Edit, false, + cache->b_edit.vbo_len, + &cache->grp_size, &cache->grp_used); } } } @@ -697,57 +709,6 @@ static void gpencil_add_editpoints_shgroup( } } -/* function to draw strokes for onion only */ -static void gpencil_draw_onion_strokes( - GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata, Object *ob, - bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf, - const float opacity, const float tintcolor[4], const bool custonion) -{ - GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl; - GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; - Depsgraph *depsgraph = DRW_context_state_get()->depsgraph; - - float viewmatrix[4][4]; - - /* get parent matrix and save as static data */ - ED_gpencil_parent_location(depsgraph, ob, gpd, gpl, viewmatrix); - copy_m4_m4(gpf->runtime.viewmatrix, viewmatrix); - - for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) { - MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1); - copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba); - copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba); - - int id = stl->storage->shgroup_id; - /* check if stroke can be drawn */ - if (gpencil_can_draw_stroke(gp_style, gps, true, false) == false) { - continue; - } - /* limit the number of shading groups */ - if (id >= GPENCIL_MAX_SHGROUPS) { - continue; - } - - stl->shgroups[id].shgrps_fill = NULL; - if ((gps->totpoints > 1) && (gp_style->mode == GP_STYLE_MODE_LINE)) { - stl->shgroups[id].shgrps_stroke = DRW_gpencil_shgroup_stroke_create( - e_data, vedata, psl->stroke_pass, e_data->gpencil_stroke_sh, ob, gpd, gp_style, id, true); - } - else { - stl->shgroups[id].shgrps_stroke = DRW_gpencil_shgroup_point_create( - e_data, vedata, psl->stroke_pass, e_data->gpencil_point_sh, ob, gpd, gp_style, id, true); - } - - /* stroke */ - gpencil_add_stroke_shgroup( - cache, stl->shgroups[id].shgrps_stroke, ob, gpl, gpf, gps, opacity, tintcolor, true, custonion); - - stl->storage->shgroup_id++; - cache->cache_idx++; - } -} - - /* main function to draw strokes */ static void gpencil_draw_strokes( GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata, ToolSettings *ts, Object *ob, @@ -761,8 +722,6 @@ static void gpencil_draw_strokes( Scene *scene = draw_ctx->scene; View3D *v3d = draw_ctx->v3d; bGPDstroke *gps, *src_gps; - DRWShadingGroup *fillgrp; - DRWShadingGroup *strokegrp; float viewmatrix[4][4]; const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd); const bool playing = stl->storage->is_playing; @@ -808,11 +767,6 @@ static void gpencil_draw_strokes( GP_SET_SRC_GPS(src_gps); continue; } - /* limit the number of shading groups */ - if (stl->storage->shgroup_id >= GPENCIL_MAX_SHGROUPS) { - GP_SET_SRC_GPS(src_gps); - continue; - } /* be sure recalc all cache in source stroke to avoid recalculation when frame change * and improve fps */ @@ -833,37 +787,6 @@ static void gpencil_draw_strokes( if ((gpl->actframe->framenum == derived_gpf->framenum) || (!is_multiedit) || (overlay_multiedit)) { - int id = stl->storage->shgroup_id; - if (gps->totpoints > 0) { - if ((gps->totpoints > 2) && (!stl->storage->simplify_fill) && - ((gp_style->fill_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH) || (gp_style->fill_style > 0)) && - ((gps->flag & GP_STROKE_NOFILL) == 0) && - (gp_style->flag & GP_STYLE_FILL_SHOW)) - { - stl->shgroups[id].shgrps_fill = DRW_gpencil_shgroup_fill_create( - e_data, vedata, psl->stroke_pass, e_data->gpencil_fill_sh, gpd, gp_style, id); - } - else { - stl->shgroups[id].shgrps_fill = NULL; - } - if ((gp_style->mode == GP_STYLE_MODE_LINE) && (gps->totpoints > 1)) { - stl->shgroups[id].shgrps_stroke = DRW_gpencil_shgroup_stroke_create( - e_data, vedata, psl->stroke_pass, e_data->gpencil_stroke_sh, ob, gpd, gp_style, id, false); - } - else { - stl->shgroups[id].shgrps_stroke = DRW_gpencil_shgroup_point_create( - e_data, vedata, psl->stroke_pass, e_data->gpencil_point_sh, ob, gpd, gp_style, id, false); - } - } - else { - stl->shgroups[id].shgrps_fill = NULL; - stl->shgroups[id].shgrps_stroke = NULL; - } - stl->storage->shgroup_id++; - - fillgrp = stl->shgroups[id].shgrps_fill; - strokegrp = stl->shgroups[id].shgrps_stroke; - /* copy color to temp fields to apply temporal changes in the stroke */ copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba); copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba); @@ -876,17 +799,20 @@ static void gpencil_draw_strokes( } /* fill */ - if ((fillgrp) && (!stl->storage->simplify_fill)) { - gpencil_add_fill_shgroup( - cache, fillgrp, ob, derived_gpf, gps, + if ((gp_style->flag & GP_STYLE_FILL_SHOW) && + (!stl->storage->simplify_fill)) + { + gpencil_add_fill_vertexdata( + cache, ob, gpl, derived_gpf, gps, opacity, tintcolor, false, custonion); } /* stroke */ - if (strokegrp) { - const float nop = ((gp_style->flag & GP_STYLE_STROKE_SHOW) == 0) || (gp_style->stroke_rgba[3] < GPENCIL_ALPHA_OPACITY_THRESH) ? 0.0f : opacity; - gpencil_add_stroke_shgroup( - cache, strokegrp, ob, gpl, derived_gpf, gps, - nop, tintcolor, false, custonion); + if ((gp_style->flag & GP_STYLE_STROKE_SHOW) && + (gp_style->stroke_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH)) + { + gpencil_add_stroke_vertexdata( + cache, ob, gpl, derived_gpf, gps, + opacity, tintcolor, false, custonion); } } @@ -904,118 +830,11 @@ static void gpencil_draw_strokes( DRW_shgroup_uniform_vec2(stl->g_data->shgrps_edit_point, "Viewport", viewport_size, 1); } - gpencil_add_editpoints_shgroup(stl, cache, ts, ob, gpd, gpl, derived_gpf, src_gps); - } - else { - gpencil_batch_cache_check_free_slots(ob); + gpencil_add_editpoints_vertexdata(stl, cache, ts, ob, gpd, gpl, derived_gpf, src_gps); } } GP_SET_SRC_GPS(src_gps); - - cache->cache_idx++; - } -} - - /* draw stroke in drawing buffer */ -void DRW_gpencil_populate_buffer_strokes(GPENCIL_e_data *e_data, void *vedata, ToolSettings *ts, Object *ob) -{ - GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl; - GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; - Brush *brush = BKE_paint_brush(&ts->gp_paint->paint); - bGPdata *gpd_eval = ob->data; - /* need the original to avoid cow overhead while drawing */ - bGPdata *gpd = (bGPdata *)DEG_get_original_id(&gpd_eval->id); - - MaterialGPencilStyle *gp_style = NULL; - - float obscale = mat4_to_scale(ob->obmat); - - /* use the brush material */ - Material *ma = BKE_gpencil_get_material_from_brush(brush); - if (ma != NULL) { - gp_style = ma->gp_style; - } - /* this is not common, but avoid any special situations when brush could be without material */ - if (gp_style == NULL) { - gp_style = BKE_material_gpencil_settings_get(ob, ob->actcol); - } - - /* drawing strokes */ - /* Check if may need to draw the active stroke cache, only if this layer is the active layer - * that is being edited. (Stroke buffer is currently stored in gp-data) - */ - if (ED_gpencil_session_active() && (gpd->runtime.sbuffer_size > 0)) { - if ((gpd->runtime.sbuffer_sflag & GP_STROKE_ERASER) == 0) { - /* It should also be noted that sbuffer contains temporary point types - * i.e. tGPspoints NOT bGPDspoints - */ - short lthick = brush->size * obscale; - /* if only one point, don't need to draw buffer because the user has no time to see it */ - if (gpd->runtime.sbuffer_size > 1) { - if ((gp_style) && (gp_style->mode == GP_STYLE_MODE_LINE)) { - stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_stroke_create( - e_data, vedata, psl->drawing_pass, e_data->gpencil_stroke_sh, NULL, gpd, gp_style, -1, false); - } - else { - stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_point_create( - e_data, vedata, psl->drawing_pass, e_data->gpencil_point_sh, NULL, gpd, gp_style, -1, false); - } - - /* clean previous version of the batch */ - if (stl->storage->buffer_stroke) { - GPU_BATCH_DISCARD_SAFE(e_data->batch_buffer_stroke); - MEM_SAFE_FREE(e_data->batch_buffer_stroke); - stl->storage->buffer_stroke = false; - } - - /* use unit matrix because the buffer is in screen space and does not need conversion */ - if (gpd->runtime.mode == GP_STYLE_MODE_LINE) { - e_data->batch_buffer_stroke = DRW_gpencil_get_buffer_stroke_geom( - gpd, lthick); - } - else { - e_data->batch_buffer_stroke = DRW_gpencil_get_buffer_point_geom( - gpd, lthick); - } - - if (gp_style->flag & GP_STYLE_STROKE_SHOW) { - DRW_shgroup_call_add( - stl->g_data->shgrps_drawing_stroke, - e_data->batch_buffer_stroke, - stl->storage->unit_matrix); - } - - if ((gpd->runtime.sbuffer_size >= 3) && - (gpd->runtime.sfill[3] > GPENCIL_ALPHA_OPACITY_THRESH) && - ((gpd->runtime.sbuffer_sflag & GP_STROKE_NOFILL) == 0) && - ((brush->gpencil_settings->flag & GP_BRUSH_DISSABLE_LASSO) == 0) && - (gp_style->flag & GP_STYLE_FILL_SHOW)) - { - /* if not solid, fill is simulated with solid color */ - if (gpd->runtime.bfill_style > 0) { - gpd->runtime.sfill[3] = 0.5f; - } - stl->g_data->shgrps_drawing_fill = DRW_shgroup_create( - e_data->gpencil_drawing_fill_sh, psl->drawing_pass); - - /* clean previous version of the batch */ - if (stl->storage->buffer_fill) { - GPU_BATCH_DISCARD_SAFE(e_data->batch_buffer_fill); - MEM_SAFE_FREE(e_data->batch_buffer_fill); - stl->storage->buffer_fill = false; - } - - e_data->batch_buffer_fill = DRW_gpencil_get_buffer_fill_geom(gpd); - DRW_shgroup_call_add( - stl->g_data->shgrps_drawing_fill, - e_data->batch_buffer_fill, - stl->storage->unit_matrix); - stl->storage->buffer_fill = true; - } - stl->storage->buffer_stroke = true; - } - } } } @@ -1036,10 +855,48 @@ static void gpencil_get_onion_alpha(float color[4], bGPdata *gpd) CLAMP(color[3], MIN_ALPHA_VALUE, 1.0f); } +/* function to draw strokes for onion only */ +static void gpencil_draw_onion_strokes( + GpencilBatchCache *cache, GPENCIL_e_data *UNUSED(e_data), void *vedata, Object *ob, + bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf, + const float opacity, const float tintcolor[4], const bool custonion) +{ + GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; + Depsgraph *depsgraph = DRW_context_state_get()->depsgraph; + + float viewmatrix[4][4]; + + /* get parent matrix and save as static data */ + ED_gpencil_parent_location(depsgraph, ob, gpd, gpl, viewmatrix); + copy_m4_m4(gpf->runtime.viewmatrix, viewmatrix); + + for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) { + MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1); + copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba); + copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba); + + int id = stl->storage->shgroup_id; + /* check if stroke can be drawn */ + if (gpencil_can_draw_stroke(gp_style, gps, true, false) == false) { + continue; + } + /* limit the number of shading groups */ + if (id >= GPENCIL_MAX_SHGROUPS) { + continue; + } + + /* stroke */ + gpencil_add_stroke_vertexdata( + cache, ob, gpl, gpf, gps, opacity, tintcolor, true, custonion); + + stl->storage->shgroup_id++; + } +} + /* draw onion-skinning for a layer */ static void gpencil_draw_onionskins( - GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata, - Object *ob, bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf) + GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata, + Object *ob, bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf) { const float default_color[3] = { UNPACK3(U.gpencil_new_layer_col) }; @@ -1055,7 +912,6 @@ static void gpencil_draw_onionskins( colflag = (bool)gpd->onion_flag & GP_ONION_GHOST_PREVCOL; - /* ------------------------------- * 1) Draw Previous Frames First * ------------------------------- */ @@ -1174,15 +1030,354 @@ static void gpencil_draw_onionskins( if ((last == gpf->framenum) || (gpf->next == NULL)) { gpencil_get_onion_alpha(color, gpd); gpencil_draw_onion_strokes( - cache, e_data, vedata, ob, gpd, gpl, - gpf_loop, color[3], color, colflag); + cache, e_data, vedata, ob, gpd, gpl, + gpf_loop, color[3], color, colflag); + } + } +} + +static void gpencil_copy_frame(bGPDframe *gpf, bGPDframe *derived_gpf) +{ + derived_gpf->prev = gpf->prev; + derived_gpf->next = gpf->next; + derived_gpf->framenum = gpf->framenum; + derived_gpf->flag = gpf->flag; + derived_gpf->key_type = gpf->key_type; + derived_gpf->runtime = gpf->runtime; + copy_m4_m4(derived_gpf->runtime.viewmatrix, gpf->runtime.viewmatrix); + + /* copy strokes */ + BLI_listbase_clear(&derived_gpf->strokes); + for (bGPDstroke *gps_src = gpf->strokes.first; gps_src; gps_src = gps_src->next) { + /* make copy of source stroke */ + bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src); + BLI_addtail(&derived_gpf->strokes, gps_dst); + } +} + +/* Triangulate stroke for high quality fill (this is done only if cache is null or stroke was modified) */ +void DRW_gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps) +{ + BLI_assert(gps->totpoints >= 3); + + bGPdata *gpd = (bGPdata *)ob->data; + + /* allocate memory for temporary areas */ + gps->tot_triangles = gps->totpoints - 2; + uint(*tmp_triangles)[3] = MEM_mallocN(sizeof(*tmp_triangles) * gps->tot_triangles, "GP Stroke temp triangulation"); + float(*points2d)[2] = MEM_mallocN(sizeof(*points2d) * gps->totpoints, "GP Stroke temp 2d points"); + float(*uv)[2] = MEM_mallocN(sizeof(*uv) * gps->totpoints, "GP Stroke temp 2d uv data"); + + int direction = 0; + + /* convert to 2d and triangulate */ + gpencil_stroke_2d_flat(gps->points, gps->totpoints, points2d, &direction); + BLI_polyfill_calc(points2d, (uint)gps->totpoints, direction, tmp_triangles); + + /* calc texture coordinates automatically */ + float minv[2]; + float maxv[2]; + /* first needs bounding box data */ + if (gpd->flag & GP_DATA_UV_ADAPTATIVE) { + gpencil_calc_2d_bounding_box(points2d, gps->totpoints, minv, maxv); + } + else { + ARRAY_SET_ITEMS(minv, -1.0f, -1.0f); + ARRAY_SET_ITEMS(maxv, 1.0f, 1.0f); + } + + /* calc uv data */ + gpencil_calc_stroke_fill_uv(points2d, gps->totpoints, minv, maxv, uv); + + /* Number of triangles */ + gps->tot_triangles = gps->totpoints - 2; + /* save triangulation data in stroke cache */ + if (gps->tot_triangles > 0) { + if (gps->triangles == NULL) { + gps->triangles = MEM_callocN(sizeof(*gps->triangles) * gps->tot_triangles, "GP Stroke triangulation"); + } + else { + gps->triangles = MEM_recallocN(gps->triangles, sizeof(*gps->triangles) * gps->tot_triangles); + } + + for (int i = 0; i < gps->tot_triangles; i++) { + bGPDtriangle *stroke_triangle = &gps->triangles[i]; + memcpy(gps->triangles[i].verts, tmp_triangles[i], sizeof(uint[3])); + /* copy texture coordinates */ + copy_v2_v2(stroke_triangle->uv[0], uv[tmp_triangles[i][0]]); + copy_v2_v2(stroke_triangle->uv[1], uv[tmp_triangles[i][1]]); + copy_v2_v2(stroke_triangle->uv[2], uv[tmp_triangles[i][2]]); } } + else { + /* No triangles needed - Free anything allocated previously */ + if (gps->triangles) + MEM_freeN(gps->triangles); + + gps->triangles = NULL; + } + + /* disable recalculation flag */ + if (gps->flag & GP_STROKE_RECALC_CACHES) { + gps->flag &= ~GP_STROKE_RECALC_CACHES; + } + + /* clear memory */ + MEM_SAFE_FREE(tmp_triangles); + MEM_SAFE_FREE(points2d); + MEM_SAFE_FREE(uv); } +/* draw stroke in drawing buffer */ +void DRW_gpencil_populate_buffer_strokes(GPENCIL_e_data *e_data, void *vedata, ToolSettings *ts, Object *ob) +{ + GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl; + GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; + Brush *brush = BKE_paint_brush(&ts->gp_paint->paint); + bGPdata *gpd_eval = ob->data; + /* need the original to avoid cow overhead while drawing */ + bGPdata *gpd = (bGPdata *)DEG_get_original_id(&gpd_eval->id); + + MaterialGPencilStyle *gp_style = NULL; + + float obscale = mat4_to_scale(ob->obmat); + + /* use the brush material */ + Material *ma = BKE_gpencil_get_material_from_brush(brush); + if (ma != NULL) { + gp_style = ma->gp_style; + } + /* this is not common, but avoid any special situations when brush could be without material */ + if (gp_style == NULL) { + gp_style = BKE_material_gpencil_settings_get(ob, ob->actcol); + } + + /* drawing strokes */ + /* Check if may need to draw the active stroke cache, only if this layer is the active layer + * that is being edited. (Stroke buffer is currently stored in gp-data) + */ + if (ED_gpencil_session_active() && (gpd->runtime.sbuffer_size > 0)) { + if ((gpd->runtime.sbuffer_sflag & GP_STROKE_ERASER) == 0) { + /* It should also be noted that sbuffer contains temporary point types + * i.e. tGPspoints NOT bGPDspoints + */ + short lthick = brush->size * obscale; + /* if only one point, don't need to draw buffer because the user has no time to see it */ + if (gpd->runtime.sbuffer_size > 1) { + if ((gp_style) && (gp_style->mode == GP_STYLE_MODE_LINE)) { + stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_stroke_create( + e_data, vedata, psl->drawing_pass, e_data->gpencil_stroke_sh, NULL, gpd, gp_style, -1, false); + } + else { + stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_point_create( + e_data, vedata, psl->drawing_pass, e_data->gpencil_point_sh, NULL, gpd, gp_style, -1, false); + } + + /* clean previous version of the batch */ + if (stl->storage->buffer_stroke) { + GPU_BATCH_DISCARD_SAFE(e_data->batch_buffer_stroke); + MEM_SAFE_FREE(e_data->batch_buffer_stroke); + stl->storage->buffer_stroke = false; + } + + /* use unit matrix because the buffer is in screen space and does not need conversion */ + if (gpd->runtime.mode == GP_STYLE_MODE_LINE) { + e_data->batch_buffer_stroke = DRW_gpencil_get_buffer_stroke_geom( + gpd, lthick); + } + else { + e_data->batch_buffer_stroke = DRW_gpencil_get_buffer_point_geom( + gpd, lthick); + } + + if (gp_style->flag & GP_STYLE_STROKE_SHOW) { + DRW_shgroup_call_add( + stl->g_data->shgrps_drawing_stroke, + e_data->batch_buffer_stroke, + stl->storage->unit_matrix); + } + + if ((gpd->runtime.sbuffer_size >= 3) && + (gpd->runtime.sfill[3] > GPENCIL_ALPHA_OPACITY_THRESH) && + ((gpd->runtime.sbuffer_sflag & GP_STROKE_NOFILL) == 0) && + ((brush->gpencil_settings->flag & GP_BRUSH_DISSABLE_LASSO) == 0) && + (gp_style->flag & GP_STYLE_FILL_SHOW)) + { + /* if not solid, fill is simulated with solid color */ + if (gpd->runtime.bfill_style > 0) { + gpd->runtime.sfill[3] = 0.5f; + } + stl->g_data->shgrps_drawing_fill = DRW_shgroup_create( + e_data->gpencil_drawing_fill_sh, psl->drawing_pass); + + /* clean previous version of the batch */ + if (stl->storage->buffer_fill) { + GPU_BATCH_DISCARD_SAFE(e_data->batch_buffer_fill); + MEM_SAFE_FREE(e_data->batch_buffer_fill); + stl->storage->buffer_fill = false; + } + + e_data->batch_buffer_fill = DRW_gpencil_get_buffer_fill_geom(gpd); + DRW_shgroup_call_add( + stl->g_data->shgrps_drawing_fill, + e_data->batch_buffer_fill, + stl->storage->unit_matrix); + stl->storage->buffer_fill = true; + } + stl->storage->buffer_stroke = true; + } + } + } +} + +/* create all missing batches */ +static void DRW_gpencil_create_batches(GpencilBatchCache *cache) +{ + if ((cache->b_point.vbo) && (cache->b_point.batch == NULL)) { + cache->b_point.batch = GPU_batch_create_ex(GPU_PRIM_POINTS, cache->b_point.vbo, NULL, GPU_BATCH_OWNS_VBO); + } + if ((cache->b_stroke.vbo) && (cache->b_stroke.batch == NULL)) { + cache->b_stroke.batch = GPU_batch_create_ex(GPU_PRIM_LINE_STRIP_ADJ, cache->b_stroke.vbo, NULL, GPU_BATCH_OWNS_VBO); + } + if ((cache->b_fill.vbo) && (cache->b_fill.batch == NULL)) { + cache->b_fill.batch = GPU_batch_create_ex(GPU_PRIM_TRIS, cache->b_fill.vbo, NULL, GPU_BATCH_OWNS_VBO); + } + if ((cache->b_edit.vbo) && (cache->b_edit.batch == NULL)) { + cache->b_edit.batch = GPU_batch_create_ex(GPU_PRIM_POINTS, cache->b_edit.vbo, NULL, GPU_BATCH_OWNS_VBO); + } + if ((cache->b_edlin.vbo) && (cache->b_edlin.batch == NULL)) { + cache->b_edlin.batch = GPU_batch_create_ex(GPU_PRIM_LINE_STRIP, cache->b_edlin.vbo, NULL, GPU_BATCH_OWNS_VBO); + } +} + +/* create all shading groups */ +static void DRW_gpencil_shgroups_create( + GPENCIL_e_data *e_data, void *vedata, + Object *ob, bGPdata *gpd, + GpencilBatchCache *cache, tGPencilObjectCache *cache_ob) +{ + GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; + GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl; + DRWShadingGroup *shgrp = NULL; + + int start_stroke = 0; + int start_point = 0; + int start_fill = 0; + int start_edit = 0; + int start_edlin = 0; + + cache_ob->init_grp = NULL; + cache_ob->end_grp = NULL; + + for (int i = 0; i < cache->grp_used; i++) { + GpencilBatchGroup *elm = &cache->grp_cache[i]; + bGPDlayer *gpl = elm->gpl; + bGPDframe *gpf = elm->gpf; + bGPDstroke *gps = elm->gps; + MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1); + + /* limit the number of shading groups */ + if (i >= GPENCIL_MAX_SHGROUPS) { + break; + } + + switch (elm->type) { + case eGpencilBatchGroupType_Stroke: + { + const int len = elm->vertex_idx - start_stroke; + + shgrp = DRW_gpencil_shgroup_stroke_create( + e_data, vedata, psl->stroke_pass, e_data->gpencil_stroke_sh, + ob, gpd, gp_style, stl->storage->shgroup_id, elm->onion); + + DRW_shgroup_call_range_add( + shgrp, cache->b_stroke.batch, + (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat, + start_stroke, len); + + stl->storage->shgroup_id++; + start_stroke = elm->vertex_idx; + break; + } + case eGpencilBatchGroupType_Point: + { + const int len = elm->vertex_idx - start_point; + + shgrp = DRW_gpencil_shgroup_point_create( + e_data, vedata, psl->stroke_pass, e_data->gpencil_point_sh, + ob, gpd, gp_style, stl->storage->shgroup_id, elm->onion); + + DRW_shgroup_call_range_add( + shgrp, cache->b_point.batch, + (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat, + start_point, len); + + stl->storage->shgroup_id++; + start_point = elm->vertex_idx; + break; + } + case eGpencilBatchGroupType_Fill: + { + const int len = elm->vertex_idx - start_fill; + + shgrp = DRW_gpencil_shgroup_fill_create( + e_data, vedata, psl->stroke_pass, e_data->gpencil_fill_sh, + gpd, gpl, gp_style, stl->storage->shgroup_id); + + DRW_shgroup_call_range_add( + shgrp, cache->b_fill.batch, + (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat, + start_fill, len); + + stl->storage->shgroup_id++; + start_fill = elm->vertex_idx; + break; + } + case eGpencilBatchGroupType_Edit: + { + const int len = elm->vertex_idx - start_edit; + /* use always the same group */ + DRW_shgroup_call_range_add( + stl->g_data->shgrps_edit_point, + cache->b_edit.batch, + (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat, + start_edit, len); + + start_edit = elm->vertex_idx; + break; + } + case eGpencilBatchGroupType_Edlin: + { + const int len = elm->vertex_idx - start_edlin; + /* use always the same group */ + DRW_shgroup_call_range_add( + stl->g_data->shgrps_edit_line, + cache->b_edlin.batch, + (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat, + start_edlin, len); + + start_edlin = elm->vertex_idx; + break; + } + default: + { + break; + } + } + /* save first group */ + if ((shgrp != NULL) && (cache_ob->init_grp == NULL)) { + cache_ob->init_grp = shgrp; + } + } + + /* save last group */ + if (shgrp != NULL) { + cache_ob->end_grp = shgrp; + } +} /* populate a datablock for multiedit (no onions, no modifiers) */ void DRW_gpencil_populate_multiedit( - GPENCIL_e_data *e_data, void *vedata, Scene *scene, Object *ob, + GPENCIL_e_data *e_data, void *vedata, Object *ob, tGPencilObjectCache *cache_ob) { bGPdata *gpd = (bGPdata *)ob->data; @@ -1192,12 +1387,15 @@ void DRW_gpencil_populate_multiedit( const DRWContextState *draw_ctx = DRW_context_state_get(); int cfra_eval = (int)DEG_get_ctime(draw_ctx->depsgraph); GpencilBatchCache *cache = gpencil_batch_cache_get(ob, cfra_eval); + Scene *scene = draw_ctx->scene; ToolSettings *ts = scene->toolsettings; - cache->cache_idx = 0; /* check if playing animation */ bool playing = stl->storage->is_playing; + /* calc max size of VBOs */ + gpencil_calc_vertex(stl, cache_ob, cache, gpd, cfra_eval); + /* draw strokes */ for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) { /* don't draw layer if hidden */ @@ -1225,36 +1423,23 @@ void DRW_gpencil_populate_multiedit( } - cache->is_dirty = false; -} + /* create batchs and shading groups */ + DRW_gpencil_create_batches(cache); + DRW_gpencil_shgroups_create(e_data, vedata, ob, gpd, cache, cache_ob); -static void gpencil_copy_frame(bGPDframe *gpf, bGPDframe *derived_gpf) -{ - derived_gpf->prev = gpf->prev; - derived_gpf->next = gpf->next; - derived_gpf->framenum = gpf->framenum; - derived_gpf->flag = gpf->flag; - derived_gpf->key_type = gpf->key_type; - derived_gpf->runtime = gpf->runtime; - - /* copy strokes */ - BLI_listbase_clear(&derived_gpf->strokes); - for (bGPDstroke *gps_src = gpf->strokes.first; gps_src; gps_src = gps_src->next) { - /* make copy of source stroke */ - bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src); - BLI_addtail(&derived_gpf->strokes, gps_dst); - } + cache->is_dirty = false; } /* helper for populate a complete grease pencil datablock */ void DRW_gpencil_populate_datablock( GPENCIL_e_data *e_data, void *vedata, - Scene *scene, Object *ob, + Object *ob, tGPencilObjectCache *cache_ob) { GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; const DRWContextState *draw_ctx = DRW_context_state_get(); const ViewLayer *view_layer = DEG_get_evaluated_view_layer(draw_ctx->depsgraph); + Scene *scene = draw_ctx->scene; bGPdata *gpd_eval = (bGPdata *)ob->data; bGPdata *gpd = (bGPdata *)DEG_get_original_id(&gpd_eval->id); @@ -1270,7 +1455,6 @@ void DRW_gpencil_populate_datablock( const bool time_remap = BKE_gpencil_has_time_modifiers(ob); float opacity; - bGPDframe *p = NULL; bGPDframe *gpf = NULL; bGPDlayer *gpl_active = BKE_gpencil_layer_getactive(gpd); @@ -1278,7 +1462,15 @@ void DRW_gpencil_populate_datablock( bool playing = stl->storage->is_playing; GpencilBatchCache *cache = gpencil_batch_cache_get(ob, cfra_eval); - cache->cache_idx = 0; + + /* if object is duplicate, only create shading groups */ + if (cache_ob->is_dup_ob) { + DRW_gpencil_shgroups_create(e_data, vedata, ob, gpd, cache, cache_ob); + return; + } + + /* calc max size of VBOs */ + gpencil_calc_vertex(stl, cache_ob, cache, gpd, cfra_eval); /* init general modifiers data */ if (!stl->storage->simplify_modif) { @@ -1299,16 +1491,15 @@ void DRW_gpencil_populate_datablock( } } - if ((!time_remap) || (stl->storage->simplify_modif)) { - gpf = BKE_gpencil_layer_getframe(gpl, cfra_eval, GP_GETFRAME_USE_PREV); - } - else { - int remap_cfra = BKE_gpencil_time_modifier( + /* remap time */ + int remap_cfra = cfra_eval; + if ((time_remap) && (!stl->storage->simplify_modif)) { + remap_cfra = BKE_gpencil_time_modifier( draw_ctx->depsgraph, scene, ob, gpl, cfra_eval, stl->storage->is_render); - - gpf = BKE_gpencil_layer_getframe(gpl, remap_cfra, GP_GETFRAME_USE_PREV); } + + gpf = BKE_gpencil_layer_getframe(gpl, remap_cfra, GP_GETFRAME_USE_PREV); if (gpf == NULL) continue; @@ -1328,24 +1519,9 @@ void DRW_gpencil_populate_datablock( opacity = opacity * v3d->overlay.gpencil_fade_layer; } - /* create derived array data or expand */ - if (cache_ob->data_idx + 1 > gpl->runtime.len_derived) { - if ((gpl->runtime.len_derived == 0) || - (gpl->runtime.derived_array == NULL)) - { - p = MEM_callocN(sizeof(struct bGPDframe), "bGPDframe array"); - gpl->runtime.len_derived = 1; - } - else { - gpl->runtime.len_derived++; - p = MEM_recallocN(gpl->runtime.derived_array, sizeof(struct bGPDframe) * gpl->runtime.len_derived); - } - gpl->runtime.derived_array = p; - - derived_gpf = &gpl->runtime.derived_array[cache_ob->data_idx]; - } - - derived_gpf = &gpl->runtime.derived_array[cache_ob->data_idx]; + /* create derived frames array data or expand */ + int derived_idx = BLI_findindex(&gpd->layers, gpl); + derived_gpf = &cache->derived_array[derived_idx]; /* if no derived frame or dirty cache, create a new one */ if ((derived_gpf == NULL) || (cache->is_dirty)) { @@ -1359,8 +1535,7 @@ void DRW_gpencil_populate_datablock( /* draw onion skins */ if (!ID_IS_LINKED(&gpd->id)) { - if ((!cache_ob->is_dup_data) && - (gpd->flag & GP_DATA_SHOW_ONIONSKINS) && + if ((gpd->flag & GP_DATA_SHOW_ONIONSKINS) && (do_onion) && (gpl->onion_flag & GP_LAYER_ONIONSKIN) && ((!playing) || (gpd->onion_flag & GP_ONION_GHOST_ALWAYS)) && (!cache_ob->is_dup_ob) && (gpd->id.us <= 1)) @@ -1373,18 +1548,9 @@ void DRW_gpencil_populate_datablock( } } /* draw normal strokes */ - if (!cache_ob->is_dup_ob) { - /* save batch index */ - gpl->runtime.batch_index = cache->cache_idx; - } - else { - cache->cache_idx = gpl->runtime.batch_index; - } - gpencil_draw_strokes( - cache, e_data, vedata, ts, ob, gpd, gpl, gpf, derived_gpf, - opacity, gpl->tintcolor, false, cache_ob); - + cache, e_data, vedata, ts, ob, gpd, gpl, gpf, derived_gpf, + opacity, gpl->tintcolor, false, cache_ob); } /* clear any lattice data */ @@ -1392,5 +1558,25 @@ void DRW_gpencil_populate_datablock( BKE_gpencil_lattice_clear(ob); } + /* create batchs and shading groups */ + DRW_gpencil_create_batches(cache); + DRW_gpencil_shgroups_create(e_data, vedata, ob, gpd, cache, cache_ob); + cache->is_dirty = false; } + +void DRW_gpencil_populate_particles(GPENCIL_e_data *e_data, void *vedata) +{ + GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; + + /* add particles */ + for (int i = 0; i < stl->g_data->gp_cache_used; i++) { + tGPencilObjectCache *cache_ob = &stl->g_data->gp_object_cache[i]; + Object *ob = cache_ob->ob; + if (cache_ob->is_dup_ob) { + bGPdata *gpd = (bGPdata *)ob->data; + GpencilBatchCache *cache = ob->runtime.gpencil_cache; + DRW_gpencil_shgroups_create(e_data, vedata, ob, gpd, cache, cache_ob); + } + } +} diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c index 52cd79e4394..7be06d501f1 100644 --- a/source/blender/draw/engines/gpencil/gpencil_engine.c +++ b/source/blender/draw/engines/gpencil/gpencil_engine.c @@ -315,9 +315,6 @@ void GPENCIL_cache_init(void *vedata) if (!stl->shgroups) { /* Alloc maximum size because count strokes is very slow and can be very complex due onion skinning. - I tried to allocate only one block and using realloc, increasing the size when read a new strokes - in cache_finish, but the realloc produce weird things on screen, so we keep as is while we found - a better solution */ stl->shgroups = MEM_mallocN(sizeof(GPENCIL_shgroup) * GPENCIL_MAX_SHGROUPS, "GPENCIL_shgroup"); } @@ -498,28 +495,22 @@ void GPENCIL_cache_init(void *vedata) static void gpencil_add_draw_data(void *vedata, Object *ob) { GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; - const DRWContextState *draw_ctx = DRW_context_state_get(); - Scene *scene = draw_ctx->scene; bGPdata *gpd = (bGPdata *)ob->data; const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd); int i = stl->g_data->gp_cache_used - 1; tGPencilObjectCache *cache_ob = &stl->g_data->gp_object_cache[i]; - /* save init shading group */ - cache_ob->init_grp = stl->storage->shgroup_id; - - /* fill shading groups */ - if ((!is_multiedit) || (cache_ob->is_dup_ob)) { - DRW_gpencil_populate_datablock(&e_data, vedata, scene, ob, cache_ob); - } - else { - DRW_gpencil_populate_multiedit(&e_data, vedata, scene, ob, cache_ob); + if (!cache_ob->is_dup_ob) { + /* fill shading groups */ + if (!is_multiedit) { + DRW_gpencil_populate_datablock(&e_data, vedata, ob, cache_ob); + } + else { + DRW_gpencil_populate_multiedit(&e_data, vedata, ob, cache_ob); + } } - /* save end shading group */ - cache_ob->end_grp = stl->storage->shgroup_id - 1; - /* FX passses */ cache_ob->has_fx = false; if ((!stl->storage->simplify_fx) && @@ -549,25 +540,12 @@ void GPENCIL_cache_populate(void *vedata, Object *ob) if (ob->type == OB_GPENCIL && ob->data) { bGPdata *gpd = (bGPdata *)ob->data; - /* if onion, set as dirty always - * This reduces performance, but avoid any crash in the multiple - * overlay and multiwindow options - */ - if (gpd->flag & GP_DATA_SHOW_ONIONSKINS) { - gpd->flag |= GP_DATA_CACHE_IS_DIRTY; - } - /* when start/stop animation the cache must be set as dirty to reset all data */ if (stl->storage->reset_cache) { gpd->flag |= GP_DATA_CACHE_IS_DIRTY; stl->storage->reset_cache = false; } - /* is edit mode only current object, not particle instances */ - if ((ob->base_flag & BASE_FROMDUPLI) && GPENCIL_ANY_EDIT_MODE(gpd)) { - return; - } - if ((stl->g_data->session_flag & GP_DRW_PAINT_READY) == 0) { /* save gp objects for drawing later */ @@ -618,10 +596,9 @@ void GPENCIL_cache_populate(void *vedata, Object *ob) } } -void GPENCIL_cache_finish(void *UNUSED(vedata)) +void GPENCIL_cache_finish(void *vedata) { - return; - + DRW_gpencil_populate_particles(&e_data, vedata); } /* helper function to sort inverse gpencil objects using qsort */ @@ -657,6 +634,13 @@ static void gpencil_prepare_fast_drawing( static void gpencil_free_obj_runtime(GPENCIL_StorageList *stl) { + /* reset all cache flags */ + for (int i = 0; i < stl->g_data->gp_cache_used; i++) { + tGPencilObjectCache *cache_ob = &stl->g_data->gp_object_cache[i]; + bGPdata *gpd = cache_ob->gpd; + gpd->flag &= ~GP_DATA_CACHE_IS_DIRTY; + } + /* free the cache itself */ MEM_SAFE_FREE(stl->g_data->gp_object_cache); } @@ -672,7 +656,6 @@ void GPENCIL_draw_scene(void *ved) DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); GPENCIL_TextureList *txl = ((GPENCIL_Data *)vedata)->txl; - int init_grp, end_grp; tGPencilObjectCache *cache_ob; const float clearcol[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; @@ -729,33 +712,27 @@ void GPENCIL_draw_scene(void *ved) for (int i = 0; i < stl->g_data->gp_cache_used; i++) { cache_ob = &stl->g_data->gp_object_cache[i]; bGPdata *gpd = cache_ob->gpd; - init_grp = cache_ob->init_grp; - end_grp = cache_ob->end_grp; /* Render stroke in separated framebuffer */ GPU_framebuffer_bind(fbl->temp_fb_a); GPU_framebuffer_clear_color_depth(fbl->temp_fb_a, clearcol, 1.0f); - /* Stroke Pass: DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND | DRW_STATE_WRITE_DEPTH - * draw only a subset that usually start with a fill and end with stroke because the - * shading groups are created by pairs */ - if (end_grp >= init_grp) { + /* Stroke Pass: + * draw only a subset that usually starts with a fill and ends with stroke + */ + if (cache_ob->init_grp) { /* previews don't use AA */ if (!stl->storage->is_mat_preview) { MULTISAMPLE_GP_SYNC_ENABLE(stl->storage->multisamples, fbl); } DRW_draw_pass_subset( - psl->stroke_pass, - stl->shgroups[init_grp].shgrps_fill != NULL ? - stl->shgroups[init_grp].shgrps_fill : stl->shgroups[init_grp].shgrps_stroke, - stl->shgroups[end_grp].shgrps_stroke); + psl->stroke_pass, cache_ob->init_grp, cache_ob->end_grp); if (!stl->storage->is_mat_preview) { MULTISAMPLE_GP_SYNC_DISABLE(stl->storage->multisamples, fbl, fbl->temp_fb_a, txl); } } - /* Current buffer drawing */ if ((!is_render) && (cache_ob->is_dup_ob == false)) { DRW_draw_pass(psl->drawing_pass); diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h index 8e68fdef952..0fe25ba9f0f 100644 --- a/source/blender/draw/engines/gpencil/gpencil_engine.h +++ b/source/blender/draw/engines/gpencil/gpencil_engine.h @@ -40,7 +40,10 @@ struct RenderLayer; #define GPENCIL_CACHE_BLOCK_SIZE 8 #define GPENCIL_MAX_SHGROUPS 65536 -#define GPENCIL_MIN_BATCH_SLOTS_CHUNK 16 +#define GPENCIL_GROUPS_BLOCK_SIZE 1024 + +/* used to expand VBOs. Size has a big impact in the speed */ +#define GPENCIL_VBO_BLOCK_SIZE 128 #define GPENCIL_COLOR_SOLID 0 #define GPENCIL_COLOR_TEXTURE 1 @@ -60,7 +63,8 @@ struct RenderLayer; typedef struct tGPencilObjectCache { struct Object *ob; struct bGPdata *gpd; - int init_grp, end_grp; + DRWShadingGroup *init_grp; + DRWShadingGroup *end_grp; int idx; /*original index, can change after sort */ /* effects */ @@ -82,8 +86,10 @@ typedef struct tGPencilObjectCache { float obmat[4][4]; float zdepth; /* z-depth value to sort gp object */ bool is_dup_ob; /* flag to tag duplicate objects */ - bool is_dup_data; /* other object uses datablock already */ - int data_idx; /* derived data index */ + + /* GPU data size */ + int tot_vertex; + int tot_triangles; } tGPencilObjectCache; /* *********** LISTS *********** */ @@ -98,8 +104,6 @@ typedef struct GPENCIL_shgroup { int fill_style; int keep_size; float obj_scale; - struct DRWShadingGroup *shgrps_fill; - struct DRWShadingGroup *shgrps_stroke; } GPENCIL_shgroup; typedef struct GPENCIL_Storage { @@ -276,24 +280,57 @@ typedef struct GPENCIL_e_data { } GPENCIL_e_data; /* Engine data */ /* GPUBatch Cache */ +typedef struct GpencilBatchCacheElem { + GPUBatch *batch; + GPUVertBuf *vbo; + int vbo_len; + /* attr ids */ + GPUVertFormat format; + uint pos_id; + uint color_id; + uint thickness_id; + uint uvdata_id; + + /* size for VBO alloc */ + int tot_vertex; +} GpencilBatchCacheElem; + +typedef struct GpencilBatchGroup { + bGPDlayer *gpl; /* reference to original layer */ + bGPDframe *gpf; /* reference to original frame */ + bGPDstroke *gps; /* reference to original stroke */ + short type; /* type of element */ + bool onion; /* the group is part of onion skin */ + int vertex_idx; /* index of vertex data */ +} GpencilBatchGroup; + +typedef enum GpencilBatchGroup_Type { + eGpencilBatchGroupType_Stroke = 1, + eGpencilBatchGroupType_Point = 2, + eGpencilBatchGroupType_Fill = 3, + eGpencilBatchGroupType_Edit = 4, + eGpencilBatchGroupType_Edlin = 5, +} GpencilBatchGroup_Type; + typedef struct GpencilBatchCache { - /* For normal strokes, a variable number of batch can be needed depending of number of strokes. - It could use the stroke number as total size, but when activate the onion skining, the number - can change, so the size is changed dynamically. - */ - GPUBatch **batch_stroke; - GPUBatch **batch_fill; - GPUBatch **batch_edit; - GPUBatch **batch_edlin; + GpencilBatchCacheElem b_stroke; + GpencilBatchCacheElem b_point; + GpencilBatchCacheElem b_fill; + GpencilBatchCacheElem b_edit; + GpencilBatchCacheElem b_edlin; /* settings to determine if cache is invalid */ bool is_dirty; bool is_editmode; int cache_frame; - /* keep information about the size of the cache */ - int cache_size; /* total batch slots available */ - int cache_idx; /* current slot index */ + /* data with the shading groups */ + int grp_used; /* total groups in arrays */ + int grp_size; /* max size of the array */ + struct GpencilBatchGroup *grp_cache; /* array of elements */ + + int tot_layers; + struct bGPDframe *derived_array; /* runtime data created by modifiers */ } GpencilBatchCache; /* general drawing functions */ @@ -302,23 +339,24 @@ struct DRWShadingGroup *DRW_gpencil_shgroup_stroke_create( struct Object *ob, struct bGPdata *gpd, struct MaterialGPencilStyle *gp_style, int id, bool onion); void DRW_gpencil_populate_datablock( struct GPENCIL_e_data *e_data, void *vedata, - struct Scene *scene, struct Object *ob, struct tGPencilObjectCache *cache_ob); void DRW_gpencil_populate_buffer_strokes( struct GPENCIL_e_data *e_data, void *vedata, struct ToolSettings *ts, struct Object *ob); void DRW_gpencil_populate_multiedit( struct GPENCIL_e_data *e_data, void *vedata, - struct Scene *scene, struct Object *ob, struct tGPencilObjectCache *cache_ob); + struct Object *ob, struct tGPencilObjectCache *cache_ob); void DRW_gpencil_triangulate_stroke_fill(struct Object *ob, struct bGPDstroke *gps); +void DRW_gpencil_populate_particles(struct GPENCIL_e_data *e_data, void *vedata); void DRW_gpencil_multisample_ensure(struct GPENCIL_Data *vedata, int rect_w, int rect_h); /* create geometry functions */ -struct GPUBatch *DRW_gpencil_get_point_geom(struct bGPDstroke *gps, short thickness, const float ink[4]); -struct GPUBatch *DRW_gpencil_get_stroke_geom(struct bGPDstroke *gps, short thickness, const float ink[4]); -struct GPUBatch *DRW_gpencil_get_fill_geom(struct Object *ob, struct bGPDstroke *gps, const float color[4]); -struct GPUBatch *DRW_gpencil_get_edit_geom(struct bGPDstroke *gps, float alpha, short dflag); -struct GPUBatch *DRW_gpencil_get_edlin_geom(struct bGPDstroke *gps, float alpha, short dflag); +void DRW_gpencil_get_point_geom(struct GpencilBatchCacheElem *be, struct bGPDstroke *gps, short thickness, const float ink[4]); +void DRW_gpencil_get_stroke_geom(struct GpencilBatchCacheElem *be, struct bGPDstroke *gps, short thickness, const float ink[4]); +void DRW_gpencil_get_fill_geom(struct GpencilBatchCacheElem *be, struct Object *ob, struct bGPDstroke *gps, const float color[4]); +void DRW_gpencil_get_edit_geom(struct GpencilBatchCacheElem *be, struct bGPDstroke *gps, float alpha, short dflag); +void DRW_gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be, struct bGPDstroke *gps, float alpha, short dflag); + struct GPUBatch *DRW_gpencil_get_buffer_stroke_geom(struct bGPdata *gpd, short thickness); struct GPUBatch *DRW_gpencil_get_buffer_fill_geom(struct bGPdata *gpd); struct GPUBatch *DRW_gpencil_get_buffer_point_geom(struct bGPdata *gpd, short thickness); @@ -329,8 +367,15 @@ struct tGPencilObjectCache *gpencil_object_cache_add( struct tGPencilObjectCache *cache_array, struct Object *ob, int *gp_cache_size, int *gp_cache_used); +/* shading groups cache functions */ +struct GpencilBatchGroup *gpencil_group_cache_add( + struct GpencilBatchGroup *cache_array, + struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps, + const short type, const bool onion, + const int vertex_idx, + int *grp_size, int *grp_used); + /* geometry batch cache functions */ -void gpencil_batch_cache_check_free_slots(struct Object *ob); struct GpencilBatchCache *gpencil_batch_cache_get(struct Object *ob, int cfra); /* effects */ diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl index d2cad4e44f7..1d57cdc4bcf 100644 --- a/source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl +++ b/source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl @@ -15,6 +15,7 @@ uniform int texture_mix; uniform int texture_flip; uniform float texture_opacity; uniform int xraymode; +uniform float layer_opacity; uniform sampler2D myTexture; uniform int texture_clamp; @@ -66,6 +67,7 @@ void set_color(in vec4 color, in vec4 color2, in vec4 tcolor, in float mixv, in ocolor = (flip == 0) ? mix(color, color2, factor) : mix(color2, color, factor); } } + ocolor.a *= layer_opacity; } void main() @@ -115,15 +117,17 @@ void main() } /* mix with texture */ fragColor = (texture_mix == 1) ? mix(chesscolor, text_color, mix_factor) : chesscolor; + fragColor.a *= layer_opacity; } /* texture */ if (fill_type == TEXTURE) { fragColor = (texture_mix == 1) ? mix(text_color, finalColor, mix_factor) : text_color; + fragColor.a *= layer_opacity; } /* pattern */ if (fill_type == PATTERN) { fragColor = finalColor; - fragColor.a = min(text_color.a, finalColor.a); + fragColor.a = min(text_color.a, finalColor.a) * layer_opacity; } } diff --git a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl index eadc5e4b0d0..7ba6b3a5193 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl @@ -4,7 +4,7 @@ struct LightData { }; struct WorldData { - vec3 spherical_harmonics_coefs[STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS]; + vec3 spherical_harmonics_coefs[STUDIOLIGHT_SH_MAX_COMPONENTS]; vec4 background_color_low; vec4 background_color_high; vec4 object_outline_color; diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl index 66b529fcf5e..62040da8524 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl @@ -1,4 +1,5 @@ uniform mat4 ModelViewProjectionMatrix; +uniform mat4 ModelMatrixInverse; uniform mat4 ProjectionMatrix; uniform mat4 ViewProjectionMatrix; uniform mat4 ViewMatrixInverse; @@ -41,6 +42,7 @@ void main() vec3 pos, tan, binor; hair_get_pos_tan_binor_time( (ProjectionMatrix[3][3] == 0.0), + ModelMatrixInverse, ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz, pos, tan, binor, time, thickness, thick_time); /* To "simulate" anisotropic shading, randomize hair normal per strand. */ diff --git a/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl index 82d0d1fcd02..ab48aa5fa03 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl @@ -1,59 +1,85 @@ #define BLINN -vec3 spherical_harmonics(vec3 N, vec3 spherical_harmonics_coefs[STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS]) +#if STUDIOLIGHT_SH_BANDS == 2 +vec3 spherical_harmonics(vec3 N, vec3 sh_coefs[STUDIOLIGHT_SH_MAX_COMPONENTS]) { - vec3 sh = vec3(0.0); + /* http://www.geomerics.com/wp-content/uploads/2015/08/CEDEC_Geomerics_ReconstructingDiffuseLighting1.pdf */ + /* Highly optimized form, precompute as much as we can. */ + /** + * R1 = 0.5 * vec3(L3.r, L2.r, L1.r); + * sh_coefs[0..2] = R1 / length(R1); + **/ + vec3 q; + q.x = dot(sh_coefs[1], N); + q.y = dot(sh_coefs[2], N); + q.z = dot(sh_coefs[3], N); + q = 0.5 * q + 0.5; + + /** + * R0 = L0.r; + * lr1_r0 = lenR1 / R0; + * p = 1.0 + 2.0 * lr1_r0; + * a = (1.0 - lr1_r0) / (1.0 + lr1_r0); + * return R0 * (a + (1.0 - a) * (p + 1.0) * pow(q, p)); + * + * sh_coefs[4] = p; + * sh_coefs[5] = R0 * a; + * sh_coefs[0] = R0 * (1.0 - a) * (p + 1.0); + **/ + q = pow(q, sh_coefs[4]); + return sh_coefs[0] * q + sh_coefs[5]; +} + +#else - sh += 0.282095 * spherical_harmonics_coefs[0]; +vec3 spherical_harmonics(vec3 N, vec3 sh_coefs[STUDIOLIGHT_SH_MAX_COMPONENTS]) +{ + vec3 sh = 0.282095 * sh_coefs[0]; -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 0 +# if STUDIOLIGHT_SH_BANDS > 1 float nx = N.x; float ny = N.y; float nz = N.z; - sh += -0.488603 * nz * spherical_harmonics_coefs[1]; - sh += 0.488603 * ny * spherical_harmonics_coefs[2]; - sh += -0.488603 * nx * spherical_harmonics_coefs[3]; -#endif - -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 1 + sh += -0.488603 * nz * sh_coefs[1]; + sh += 0.488603 * ny * sh_coefs[2]; + sh += -0.488603 * nx * sh_coefs[3]; +# endif +# if STUDIOLIGHT_SH_BANDS > 2 float nx2 = nx * nx; float ny2 = ny * ny; float nz2 = nz * nz; - - sh += 1.092548 * nx * nz * spherical_harmonics_coefs[4]; - sh += -1.092548 * nz * ny * spherical_harmonics_coefs[5]; - sh += 0.315392 * (3.0 * ny2 - 1.0) * spherical_harmonics_coefs[6]; - sh += -1.092548 * nx * ny * spherical_harmonics_coefs[7]; - sh += 0.546274 * (nx2 - nz2) * spherical_harmonics_coefs[8]; -#endif - -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 3 + sh += 1.092548 * nx * nz * sh_coefs[4]; + sh += -1.092548 * nz * ny * sh_coefs[5]; + sh += 0.315392 * (3.0 * ny2 - 1.0) * sh_coefs[6]; + sh += -1.092548 * nx * ny * sh_coefs[7]; + sh += 0.546274 * (nx2 - nz2) * sh_coefs[8]; +# endif +# if STUDIOLIGHT_SH_BANDS > 4 float nx4 = nx2 * nx2; float ny4 = ny2 * ny2; float nz4 = nz2 * nz2; - - sh += (2.5033429417967046 * nx * nz * (nx2 - nz2)) * spherical_harmonics_coefs[9]; - sh += (-1.7701307697799304 * nz * ny * (3.0 * nx2 - nz2)) * spherical_harmonics_coefs[10]; - sh += (0.9461746957575601 * nz * nx * (-1.0 +7.0*ny2)) * spherical_harmonics_coefs[11]; - sh += (-0.6690465435572892 * nz * ny * (-3.0 + 7.0 * ny2)) * spherical_harmonics_coefs[12]; - sh += ((105.0*ny4-90.0*ny2+9.0)/28.359261614) * spherical_harmonics_coefs[13]; - sh += (-0.6690465435572892 * nx * ny * (-3.0 + 7.0 * ny2)) * spherical_harmonics_coefs[14]; - sh += (0.9461746957575601 * (nx2 - nz2) * (-1.0 + 7.0 * ny2)) * spherical_harmonics_coefs[15]; - sh += (-1.7701307697799304 * nx * ny * (nx2 - 3.0 * nz2)) * spherical_harmonics_coefs[16]; - sh += (0.6258357354491761 * (nx4 - 6.0 * nz2 * nx2 + nz4)) * spherical_harmonics_coefs[17]; -#endif - + sh += (2.5033429417967046 * nx * nz * (nx2 - nz2)) * sh_coefs[9]; + sh += (-1.7701307697799304 * nz * ny * (3.0 * nx2 - nz2)) * sh_coefs[10]; + sh += (0.9461746957575601 * nz * nx * (-1.0 +7.0*ny2)) * sh_coefs[11]; + sh += (-0.6690465435572892 * nz * ny * (-3.0 + 7.0 * ny2)) * sh_coefs[12]; + sh += ((105.0*ny4-90.0*ny2+9.0)/28.359261614) * sh_coefs[13]; + sh += (-0.6690465435572892 * nx * ny * (-3.0 + 7.0 * ny2)) * sh_coefs[14]; + sh += (0.9461746957575601 * (nx2 - nz2) * (-1.0 + 7.0 * ny2)) * sh_coefs[15]; + sh += (-1.7701307697799304 * nx * ny * (nx2 - 3.0 * nz2)) * sh_coefs[16]; + sh += (0.6258357354491761 * (nx4 - 6.0 * nz2 * nx2 + nz4)) * sh_coefs[17]; +# endif return sh; } +#endif vec3 get_world_diffuse_light(WorldData world_data, vec3 N) { - return (spherical_harmonics(vec3(N.x, N.y, -N.z), world_data.spherical_harmonics_coefs)); + return spherical_harmonics(N, world_data.spherical_harmonics_coefs); } vec3 get_camera_diffuse_light(WorldData world_data, vec3 N) { - return (spherical_harmonics(vec3(N.x, -N.z, -N.y), world_data.spherical_harmonics_coefs)); + return spherical_harmonics(vec3(N.x, -N.z, N.y), world_data.spherical_harmonics_coefs); } /* N And I are in View Space. */ @@ -62,20 +88,20 @@ vec3 get_world_specular_light(vec4 specular_data, LightData light_data, vec3 N, #ifdef V3D_SHADING_SPECULAR_HIGHLIGHT vec3 specular_light = specular_data.rgb * light_data.specular_color.rgb * light_data.specular_color.a; - float shininess = exp2(10*(1.0-specular_data.a) + 1); + float shininess = exp2(10.0 * (1.0 - specular_data.a) + 1); # ifdef BLINN - float normalization_factor = (shininess + 8) / (8 * M_PI); + float normalization_factor = (shininess + 8.0) / (8.0 * M_PI); vec3 L = -light_data.light_direction_vs.xyz; vec3 halfDir = normalize(L + I); - float specAngle = max(dot(halfDir, N), 0.0); + float spec_angle = max(dot(halfDir, N), 0.0); float NL = max(dot(L, N), 0.0); - float specular_influence = pow(specAngle, shininess) * NL * normalization_factor; + float specular_influence = pow(spec_angle, shininess) * NL * normalization_factor; # else vec3 reflection_vector = reflect(I, N); - float specAngle = max(dot(light_data.light_direction_vs.xyz, reflection_vector), 0.0); - float specular_influence = pow(specAngle, shininess); + float spec_angle = max(dot(light_data.light_direction_vs.xyz, reflection_vector), 0.0); + float specular_influence = pow(spec_angle, shininess); # endif vec3 specular_color = specular_light * specular_influence; @@ -89,8 +115,15 @@ vec3 get_world_specular_light(vec4 specular_data, LightData light_data, vec3 N, vec3 get_world_specular_lights(WorldData world_data, vec4 specular_data, vec3 N, vec3 I) { vec3 specular_light = vec3(0.0); - for (int i = 0 ; i < world_data.num_lights ; i ++) { - specular_light += get_world_specular_light(specular_data, world_data.lights[i], N, I); + /* Manual loop unrolling provide much better perf. */ + if (world_data.num_lights > 0) { + specular_light += get_world_specular_light(specular_data, world_data.lights[0], N, I); + } + if (world_data.num_lights > 1) { + specular_light += get_world_specular_light(specular_data, world_data.lights[1], N, I); + } + if (world_data.num_lights > 2) { + specular_light += get_world_specular_light(specular_data, world_data.lights[2], N, I); } return specular_light; } diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c index f7ab9bad5ec..66dcfdd66d0 100644 --- a/source/blender/draw/engines/workbench/workbench_deferred.c +++ b/source/blender/draw/engines/workbench/workbench_deferred.c @@ -510,8 +510,8 @@ static void workbench_composite_uniforms(WORKBENCH_PrivateData *wpd, DRWShadingG DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1); if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) { - BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE); - DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture); + BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE); + DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirect_radiance_gputexture ); } workbench_material_set_normal_world_matrix(grp, wpd, e_data.normal_world_matrix); diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c index 9991c30ea8e..aa75e1746c7 100644 --- a/source/blender/draw/engines/workbench/workbench_forward.c +++ b/source/blender/draw/engines/workbench/workbench_forward.c @@ -169,8 +169,8 @@ static WORKBENCH_MaterialData *get_or_create_material_data( workbench_material_set_normal_world_matrix(grp, wpd, e_data.normal_world_matrix); workbench_material_copy(material, &material_template); if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) { - BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE); - DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture); + BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE); + DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirect_radiance_gputexture ); } if (SPECULAR_HIGHLIGHT_ENABLED(wpd) || MATCAP_ENABLED(wpd)) { DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1); @@ -456,8 +456,8 @@ static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O float hair_alpha = XRAY_ALPHA(wpd) * 0.33f; DRW_shgroup_uniform_float_copy(shgrp, "alpha", hair_alpha); if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) { - BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE); - DRW_shgroup_uniform_texture(shgrp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture); + BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE); + DRW_shgroup_uniform_texture(shgrp, "matcapImage", wpd->studio_light->equirect_radiance_gputexture ); } if (SPECULAR_HIGHLIGHT_ENABLED(wpd) || MATCAP_ENABLED(wpd)) { DRW_shgroup_uniform_vec2(shgrp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1); diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c index 6a11b2b8457..572a26c86bd 100644 --- a/source/blender/draw/engines/workbench/workbench_materials.c +++ b/source/blender/draw/engines/workbench/workbench_materials.c @@ -91,19 +91,8 @@ char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_text BLI_dynstr_appendf(ds, "#define HAIR_SHADER\n"); } -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 0 - BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 0\n"); -#endif -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 1 - BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 1\n"); -#endif -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 2 - BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 2\n"); -#endif -#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 4 - BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 4\n"); -#endif - BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS 18\n"); + BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SH_BANDS %d\n", STUDIOLIGHT_SH_BANDS); + BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SH_MAX_COMPONENTS %d\n", WORKBENCH_SH_DATA_LEN); str = BLI_dynstr_get_cstring(ds); BLI_dynstr_free(ds); diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h index 35cd3cc140e..93b3bddfb72 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -138,8 +138,10 @@ typedef struct WORKBENCH_UBO_Light { float energy; } WORKBENCH_UBO_Light; +#define WORKBENCH_SH_DATA_LEN ((STUDIOLIGHT_SH_BANDS == 2) ? 6 : STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN) + typedef struct WORKBENCH_UBO_World { - float spherical_harmonics_coefs[STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS][4]; + float spherical_harmonics_coefs[WORKBENCH_SH_DATA_LEN][4]; float background_color_low[4]; float background_color_high[4]; float object_outline_color[4]; diff --git a/source/blender/draw/engines/workbench/workbench_studiolight.c b/source/blender/draw/engines/workbench/workbench_studiolight.c index f9e5df91388..901260d0660 100644 --- a/source/blender/draw/engines/workbench/workbench_studiolight.c +++ b/source/blender/draw/engines/workbench/workbench_studiolight.c @@ -34,15 +34,59 @@ void studiolight_update_world(StudioLight *sl, WORKBENCH_UBO_World *wd) { - int i; BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED); - for (i = 0; i < STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS; i++) { - copy_v3_v3(wd->spherical_harmonics_coefs[i], sl->spherical_harmonics_coefs[i]); +#if STUDIOLIGHT_SH_BANDS == 2 + /* Use Geomerics non-linear SH. */ + mul_v3_v3fl(wd->spherical_harmonics_coefs[0], sl->spherical_harmonics_coefs[0], M_1_PI); + /* Swizzle to make shader code simpler. */ + for (int i = 0; i < 3; ++i) { + copy_v3_fl3( + wd->spherical_harmonics_coefs[i + 1], + -sl->spherical_harmonics_coefs[3][i], + sl->spherical_harmonics_coefs[2][i], + -sl->spherical_harmonics_coefs[1][i]); + mul_v3_fl(wd->spherical_harmonics_coefs[i + 1], M_1_PI * 1.5f); /* 1.5f is to improve the contrast a bit. */ + } + + /* Precompute as much as we can. See shader code for derivation. */ + float len_r1[3], lr1_r0[3], p[3], a[3]; + for (int i = 0; i < 3; ++i) { + mul_v3_fl(wd->spherical_harmonics_coefs[i + 1], 0.5f); + len_r1[i] = len_v3(wd->spherical_harmonics_coefs[i + 1]); + mul_v3_fl(wd->spherical_harmonics_coefs[i + 1], 1.0f / len_r1[i]); } - for (; i < STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS; i++) { - copy_v3_fl(wd->spherical_harmonics_coefs[i], 0.0); + /* lr1_r0 = lenR1 / R0; */ + copy_v3_v3(lr1_r0, wd->spherical_harmonics_coefs[0]); + invert_v3(lr1_r0); + mul_v3_v3(lr1_r0, len_r1); + /* p = 1.0 + 2.0 * lr1_r0; */ + copy_v3_v3(p, lr1_r0); + mul_v3_fl(p, 2.0f); + add_v3_fl(p, 1.0f); + /* a = (1.0 - lr1_r0) / (1.0 + lr1_r0); */ + copy_v3_v3(a, lr1_r0); + add_v3_fl(a, 1.0f); + invert_v3(a); + negate_v3(lr1_r0); + add_v3_fl(lr1_r0, 1.0f); + mul_v3_v3(a, lr1_r0); + /* sh_coefs[4] = p; */ + copy_v3_v3(wd->spherical_harmonics_coefs[4], p); + /* sh_coefs[5] = R0 * a; */ + mul_v3_v3v3(wd->spherical_harmonics_coefs[5], wd->spherical_harmonics_coefs[0], a); + /* sh_coefs[0] = R0 * (1.0 - a) * (p + 1.0); */ + negate_v3(a); + add_v3_fl(a, 1.0f); + add_v3_fl(p, 1.0f); + mul_v3_v3(a, p); + mul_v3_v3(wd->spherical_harmonics_coefs[0], a); +#else + for (int i = 0; i < STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN; i++) { + /* Can't memcpy because of alignment */ + copy_v3_v3(wd->spherical_harmonics_coefs[i], sl->spherical_harmonics_coefs[i]); } +#endif } static void compute_parallel_lines_nor_and_dist(const float v1[2], const float v2[2], const float v3[2], float r_line[2]) diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 8cd2da1a898..a24702368de 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -1646,12 +1646,13 @@ static void add_overlay_tri( } if (vbo_nor) { - /* TODO real loop normal */ - GPUPackedNormal lnor = GPU_normal_convert_i10_v3(bm_looptri[0]->f->no); + float (*lnors)[3] = rdata->loop_normals; for (uint i = 0; i < 3; i++) { + const float *nor = (lnors) ? lnors[BM_elem_index_get(bm_looptri[i])] : bm_looptri[0]->f->no; + GPUPackedNormal lnor = GPU_normal_convert_i10_v3(nor); + GPU_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor); GPUPackedNormal vnor = GPU_normal_convert_i10_v3(bm_looptri[i]->v->no); GPU_vertbuf_attr_set(vbo_nor, vnor_id, base_vert_idx + i, &vnor); - GPU_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor); } } @@ -1720,12 +1721,13 @@ static void add_overlay_tri_mapped( } if (vbo_nor) { - /* TODO real loop normal */ - GPUPackedNormal lnor = GPU_normal_convert_i10_v3(poly_normal); + float (*lnors)[3] = rdata->loop_normals; for (uint i = 0; i < 3; i++) { + const float *nor = (lnors) ? lnors[mlt->tri[i]] : poly_normal; + GPUPackedNormal lnor = GPU_normal_convert_i10_v3(nor); + GPU_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor); GPUPackedNormal vnor = GPU_normal_convert_i10_s3(mvert[mloop[mlt->tri[i]].v].no); GPU_vertbuf_attr_set(vbo_nor, vnor_id, base_vert_idx + i, &vnor); - GPU_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor); } } @@ -2416,7 +2418,6 @@ void DRW_mesh_batch_cache_free(Mesh *me) static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata, MeshBatchCache *cache) { BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY)); -#define USE_COMP_MESH_DATA if (cache->shaded_triangles_data == NULL) { const uint uv_len = rdata->cd.layers.uv_len; @@ -2464,6 +2465,8 @@ static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata, cache->auto_layer_names = MEM_callocN(auto_names_len * sizeof(char), "Auto layer name buf"); cache->auto_layer_is_srgb = MEM_mallocN(cache->auto_layer_len * sizeof(int), "Auto layer value buf"); +#define USE_COMP_MESH_DATA + for (uint i = 0; i < uv_len; i++) { /* UV */ const char *attrib_name = mesh_render_data_uv_layer_uuid_get(rdata, i); @@ -2489,13 +2492,11 @@ static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata, for (uint i = 0; i < tangent_len; i++) { const char *attrib_name = mesh_render_data_tangent_layer_uuid_get(rdata, i); - /* WATCH IT : only specifying 3 component instead of 4 (4th is sign). - * That may cause some problem but I could not make it to fail (fclem) */ #ifdef USE_COMP_MESH_DATA /* Tangents need more precision than 10_10_10 */ - tangent_id[i] = GPU_vertformat_attr_add(format, attrib_name, GPU_COMP_I16, 3, GPU_FETCH_INT_TO_FLOAT_UNIT); + tangent_id[i] = GPU_vertformat_attr_add(format, attrib_name, GPU_COMP_I16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT); #else - tangent_id[i] = GPU_vertformat_attr_add(format, attrib_name, GPU_COMP_F32, 3, GPU_FETCH_FLOAT); + tangent_id[i] = GPU_vertformat_attr_add(format, attrib_name, GPU_COMP_F32, 4, GPU_FETCH_FLOAT); #endif if (i == rdata->cd.layers.tangent_active) { @@ -2574,7 +2575,11 @@ static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata, float (*layer_data)[4] = rdata->cd.layers.tangent[j]; for (uint t = 0; t < 3; t++) { const float *elem = layer_data[BM_elem_index_get(bm_looptri[t])]; - normal_float_to_short_v3(GPU_vertbuf_raw_step(&tangent_step[j]), elem); +#ifdef USE_COMP_MESH_DATA + normal_float_to_short_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem); +#else + copy_v4_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem); +#endif } } /* VCOLs */ @@ -2605,9 +2610,9 @@ static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata, for (uint t = 0; t < 3; t++) { const float *elem = layer_data[mlt->tri[t]]; #ifdef USE_COMP_MESH_DATA - normal_float_to_short_v3(GPU_vertbuf_raw_step(&tangent_step[j]), elem); + normal_float_to_short_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem); #else - copy_v3_v3(GPU_vertbuf_raw_step(&tangent_step[j]), elem); + copy_v4_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem); #endif } } diff --git a/source/blender/draw/intern/draw_manager_profiling.c b/source/blender/draw/intern/draw_manager_profiling.c index 3900117327e..7b5ea4445ce 100644 --- a/source/blender/draw/intern/draw_manager_profiling.c +++ b/source/blender/draw/intern/draw_manager_profiling.c @@ -126,6 +126,7 @@ static void drw_stats_timer_start_ex(const char *name, const bool is_query) glGenQueries(1, timer->query); } + glFinish(); /* Issue query for the next frame */ glBeginQuery(GL_TIME_ELAPSED, timer->query[0]); DTP.is_querying = true; diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c index 4ab3c1f992a..fabff950c60 100644 --- a/source/blender/draw/modes/edit_mesh_mode.c +++ b/source/blender/draw/modes/edit_mesh_mode.c @@ -355,42 +355,45 @@ static DRWPass *edit_mesh_create_overlay_pass( "Edit Mesh Face Overlay Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_POINT | statemod); - *r_face_shgrp = DRW_shgroup_create(tri_sh, pass); - DRW_shgroup_uniform_block(*r_face_shgrp, "globalsBlock", globals_ubo); - DRW_shgroup_uniform_vec2(*r_face_shgrp, "viewportSize", DRW_viewport_size_get(), 1); - DRW_shgroup_uniform_float(*r_face_shgrp, "faceAlphaMod", face_alpha, 1); - DRW_shgroup_uniform_float(*r_face_shgrp, "edgeScale", edge_width_scale, 1); - DRW_shgroup_uniform_ivec4(*r_face_shgrp, "dataMask", data_mask, 1); - DRW_shgroup_uniform_bool_copy(*r_face_shgrp, "doEdges", do_edges); - if (!fast_mode) { - DRW_shgroup_uniform_bool_copy(*r_face_shgrp, "isXray", xray); - } - - *r_ledges_shgrp = DRW_shgroup_create(ledge_sh, pass); - DRW_shgroup_uniform_block(*r_ledges_shgrp, "globalsBlock", globals_ubo); - DRW_shgroup_uniform_vec2(*r_ledges_shgrp, "viewportSize", DRW_viewport_size_get(), 1); - DRW_shgroup_uniform_float(*r_ledges_shgrp, "edgeScale", edge_width_scale, 1); - DRW_shgroup_uniform_ivec4(*r_ledges_shgrp, "dataMask", data_mask, 1); - DRW_shgroup_uniform_bool_copy(*r_ledges_shgrp, "doEdges", do_edges); - if ((tsettings->selectmode & SCE_SELECT_VERTEX) != 0) { *r_lverts_shgrp = DRW_shgroup_create(e_data.overlay_lvert_sh, pass); DRW_shgroup_uniform_block(*r_lverts_shgrp, "globalsBlock", globals_ubo); DRW_shgroup_uniform_vec2(*r_lverts_shgrp, "viewportSize", DRW_viewport_size_get(), 1); DRW_shgroup_uniform_float(*r_lverts_shgrp, "edgeScale", edge_width_scale, 1); + DRW_shgroup_state_enable(*r_lverts_shgrp, DRW_STATE_WRITE_DEPTH); *r_verts_shgrp = DRW_shgroup_create(e_data.overlay_vert_sh, pass); DRW_shgroup_uniform_block(*r_verts_shgrp, "globalsBlock", globals_ubo); DRW_shgroup_uniform_vec2(*r_verts_shgrp, "viewportSize", DRW_viewport_size_get(), 1); DRW_shgroup_uniform_float(*r_verts_shgrp, "edgeScale", edge_width_scale, 1); + DRW_shgroup_state_enable(*r_verts_shgrp, DRW_STATE_WRITE_DEPTH); } if ((tsettings->selectmode & SCE_SELECT_FACE) != 0) { *r_facedot_shgrp = DRW_shgroup_create(e_data.overlay_facedot_sh, pass); DRW_shgroup_uniform_block(*r_facedot_shgrp, "globalsBlock", globals_ubo); DRW_shgroup_uniform_float(*r_facedot_shgrp, "edgeScale", edge_width_scale, 1); + DRW_shgroup_state_enable(*r_facedot_shgrp, DRW_STATE_WRITE_DEPTH); } + *r_face_shgrp = DRW_shgroup_create(tri_sh, pass); + DRW_shgroup_uniform_block(*r_face_shgrp, "globalsBlock", globals_ubo); + DRW_shgroup_uniform_vec2(*r_face_shgrp, "viewportSize", DRW_viewport_size_get(), 1); + DRW_shgroup_uniform_float(*r_face_shgrp, "faceAlphaMod", face_alpha, 1); + DRW_shgroup_uniform_float(*r_face_shgrp, "edgeScale", edge_width_scale, 1); + DRW_shgroup_uniform_ivec4(*r_face_shgrp, "dataMask", data_mask, 1); + DRW_shgroup_uniform_bool_copy(*r_face_shgrp, "doEdges", do_edges); + if (!fast_mode) { + DRW_shgroup_uniform_bool_copy(*r_face_shgrp, "isXray", xray); + } + + *r_ledges_shgrp = DRW_shgroup_create(ledge_sh, pass); + DRW_shgroup_uniform_block(*r_ledges_shgrp, "globalsBlock", globals_ubo); + DRW_shgroup_uniform_vec2(*r_ledges_shgrp, "viewportSize", DRW_viewport_size_get(), 1); + DRW_shgroup_uniform_float(*r_ledges_shgrp, "edgeScale", edge_width_scale, 1); + DRW_shgroup_uniform_ivec4(*r_ledges_shgrp, "dataMask", data_mask, 1); + DRW_shgroup_uniform_bool_copy(*r_ledges_shgrp, "doEdges", do_edges); + return pass; } diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index 7f364698d07..88e30d65977 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -106,6 +106,7 @@ extern char datatoc_gpu_shader_uniform_color_frag_glsl[]; /* *********** LISTS *********** */ typedef struct OBJECT_PassList { struct DRWPass *non_meshes[2]; + struct DRWPass *image_empties[2]; struct DRWPass *spot_shapes[2]; struct DRWPass *ob_center; struct DRWPass *outlines; @@ -147,6 +148,7 @@ typedef struct OBJECT_Data { typedef struct OBJECT_ShadingGroupList { /* Reference only */ struct DRWPass *non_meshes; + struct DRWPass *image_empties; struct DRWPass *spot_shapes; struct DRWPass *bone_solid; struct DRWPass *bone_outline; @@ -167,8 +169,6 @@ typedef struct OBJECT_ShadingGroupList { DRWShadingGroup *single_arrow; DRWShadingGroup *single_arrow_line; DRWShadingGroup *empty_axes; - /* GPUTexture -> EmptyImageShadingGroupData */ - GHash *image_plane_map; /* Force Field */ DRWShadingGroup *field_wind; @@ -856,106 +856,48 @@ static void image_calc_aspect(Image *ima, ImageUser *iuser, float r_image_aspect } } -static bool is_image_empty_visible(Object *ob, RegionView3D *rv3d) -{ - int visibility_flag = ob->empty_image_visibility_flag; - if (rv3d->is_persp) { - return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE; - } - else { - return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC; - } -} - -/* per-image shading groups for image-type empty objects */ -struct EmptyImageShadingGroupData { - DRWShadingGroup *shgrp_image; - DRWShadingGroup *shgrp_wire; - float image_aspect[2]; -}; - static void DRW_shgroup_empty_image( OBJECT_ShadingGroupList *sgl, Object *ob, const float color[3], RegionView3D *rv3d) { /* TODO: 'StereoViews', see draw_empty_image. */ - if (!is_image_empty_visible(ob, rv3d)) return; - - if (sgl->image_plane_map == NULL) { - sgl->image_plane_map = BLI_ghash_ptr_new(__func__); - } - - struct EmptyImageShadingGroupData *empty_image_data; + if (!BKE_image_empty_visible_in_view3d(ob, rv3d)) + return; GPUTexture *tex = ob->data ? - GPU_texture_from_blender(ob->data, ob->iuser, GL_TEXTURE_2D, false, 0.0f) : NULL; - void **val_p; - - /* Create on demand, 'tex' may be NULL. */ - if (BLI_ghash_ensure_p(sgl->image_plane_map, tex, &val_p)) { - empty_image_data = *val_p; - } - else { - empty_image_data = MEM_mallocN(sizeof(*empty_image_data), __func__); - - image_calc_aspect(ob->data, ob->iuser, empty_image_data->image_aspect); - - if (tex) { - DRW_shgroup_instance_format(e_data.empty_image_format, { - {"objectColor", DRW_ATTRIB_FLOAT, 4}, - {"size", DRW_ATTRIB_FLOAT, 1}, - {"offset", DRW_ATTRIB_FLOAT, 2}, - {"InstanceModelMatrix", DRW_ATTRIB_FLOAT, 16}, - }); - - struct GPUBatch *geom = DRW_cache_image_plane_get(); - DRWShadingGroup *grp = DRW_shgroup_instance_create( - e_data.object_empty_image_sh, sgl->non_meshes, geom, e_data.empty_image_format); - DRW_shgroup_uniform_texture(grp, "image", tex); - DRW_shgroup_uniform_vec2(grp, "aspect", empty_image_data->image_aspect, 1); - DRW_shgroup_uniform_int_copy(grp, "depthMode", ob->empty_image_depth); - - empty_image_data->shgrp_image = grp; - } - else { - empty_image_data->shgrp_image = NULL; - } + GPU_texture_from_blender(ob->data, ob->iuser, GL_TEXTURE_2D, false, 0.0f) : + NULL; - { - DRW_shgroup_instance_format(e_data.empty_image_wire_format, { - {"color", DRW_ATTRIB_FLOAT, 4}, - {"size", DRW_ATTRIB_FLOAT, 1}, - {"offset", DRW_ATTRIB_FLOAT, 2}, - {"InstanceModelMatrix", DRW_ATTRIB_FLOAT, 16} - }); + float image_aspect[2]; + image_calc_aspect(ob->data, ob->iuser, image_aspect); - struct GPUBatch *geom = DRW_cache_image_plane_wire_get(); - DRWShadingGroup *grp = DRW_shgroup_instance_create( - e_data.object_empty_image_wire_sh, sgl->non_meshes, geom, e_data.empty_image_wire_format); - DRW_shgroup_uniform_vec2(grp, "aspect", empty_image_data->image_aspect, 1); - DRW_shgroup_uniform_int_copy(grp, "depthMode", ob->empty_image_depth); + /* OPTI(fclem) We need sorting only for transparent images. If an image as no alpha channel and + * ob->col[3] == 1.0f, we could remove it from the sorting pass. */ - empty_image_data->shgrp_wire = grp; - } - - *val_p = empty_image_data; + if (tex && (ob->col[3] > 0.0f)) { + DRWShadingGroup *grp = DRW_shgroup_create(e_data.object_empty_image_sh, sgl->image_empties); + DRW_shgroup_uniform_texture(grp, "image", tex); + /* TODO(fclem) implement DRW_shgroup_uniform_vec2_copy */ + DRW_shgroup_uniform_float_copy(grp, "aspectX", image_aspect[0]); + DRW_shgroup_uniform_float_copy(grp, "aspectY", image_aspect[1]); + DRW_shgroup_uniform_int_copy(grp, "depthMode", ob->empty_image_depth); + DRW_shgroup_uniform_float(grp, "size", &ob->empty_drawsize, 1); + DRW_shgroup_uniform_vec2(grp, "offset", ob->ima_ofs, 1); + DRW_shgroup_uniform_vec4(grp, "objectColor", ob->col, 1); + DRW_shgroup_call_add(grp, DRW_cache_image_plane_get(), ob->obmat); } - if (empty_image_data->shgrp_image != NULL) { - DRW_shgroup_call_dynamic_add( - empty_image_data->shgrp_image, - ob->col, - &ob->empty_drawsize, - ob->ima_ofs, - ob->obmat); - } - - DRW_shgroup_call_dynamic_add( - empty_image_data->shgrp_wire, - color, - &ob->empty_drawsize, - ob->ima_ofs, - ob->obmat); + { + DRWShadingGroup *grp = DRW_shgroup_create(e_data.object_empty_image_wire_sh, sgl->non_meshes); + /* TODO(fclem) implement DRW_shgroup_uniform_vec2_copy */ + DRW_shgroup_uniform_float_copy(grp, "aspectX", image_aspect[0]); + DRW_shgroup_uniform_float_copy(grp, "aspectY", image_aspect[1]); + DRW_shgroup_uniform_int_copy(grp, "depthMode", ob->empty_image_depth); + DRW_shgroup_uniform_float(grp, "size", &ob->empty_drawsize, 1); + DRW_shgroup_uniform_vec2(grp, "offset", ob->ima_ofs, 1); + DRW_shgroup_uniform_vec4(grp, "color", color, 1); + DRW_shgroup_call_add(grp, DRW_cache_image_plane_wire_get(), ob->obmat); + } } static void OBJECT_cache_init(void *vedata) @@ -1141,6 +1083,10 @@ static void OBJECT_cache_init(void *vedata) DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND | DRW_STATE_POINT | DRW_STATE_WIRE; sgl->non_meshes = psl->non_meshes[i] = DRW_pass_create("Non Meshes Pass", state); + state = DRW_STATE_WRITE_COLOR | + DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND | DRW_STATE_WIRE; + sgl->image_empties = psl->image_empties[i] = DRW_pass_create("Image Empties", state); + /* Empties */ geom = DRW_cache_plain_axes_get(); sgl->plain_axes = shgroup_instance(sgl->non_meshes, geom); @@ -1178,9 +1124,6 @@ static void OBJECT_cache_init(void *vedata) geom = DRW_cache_bone_arrows_get(); sgl->empty_axes = shgroup_instance_empty_axes(sgl->non_meshes, geom); - /* initialize on first use */ - sgl->image_plane_map = NULL; - /* Force Field */ geom = DRW_cache_field_wind_get(); sgl->field_wind = shgroup_instance_scaled(sgl->non_meshes, geom); @@ -2886,9 +2829,16 @@ static void OBJECT_cache_populate(void *vedata, Object *ob) } } -static void OBJECT_draw_scene(void *vedata) +static void OBJECT_cache_finish(void *vedata) { + OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl; + DRW_pass_sort_shgroup_z(stl->g_data->sgl.image_empties); + DRW_pass_sort_shgroup_z(stl->g_data->sgl_ghost.image_empties); +} + +static void OBJECT_draw_scene(void *vedata) +{ OBJECT_PassList *psl = ((OBJECT_Data *)vedata)->psl; OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl; OBJECT_FramebufferList *fbl = ((OBJECT_Data *)vedata)->fbl; @@ -2920,6 +2870,7 @@ static void OBJECT_draw_scene(void *vedata) DRW_draw_pass(stl->g_data->sgl.bone_outline); DRW_draw_pass(stl->g_data->sgl.non_meshes); DRW_draw_pass(psl->particle); + DRW_draw_pass(stl->g_data->sgl.image_empties); DRW_draw_pass(stl->g_data->sgl.bone_axes); MULTISAMPLE_SYNC_DISABLE(dfbl, dtxl) @@ -2974,12 +2925,6 @@ static void OBJECT_draw_scene(void *vedata) } } - /* This has to be freed only after drawing empties! */ - if (stl->g_data->sgl.image_plane_map) { - BLI_ghash_free(stl->g_data->sgl.image_plane_map, NULL, MEM_freeN); - stl->g_data->sgl.image_plane_map = NULL; - } - volumes_free_smoke_textures(); batch_camera_path_free(&stl->g_data->sgl.camera_path); @@ -2987,6 +2932,7 @@ static void OBJECT_draw_scene(void *vedata) !DRW_pass_is_empty(stl->g_data->sgl_ghost.bone_wire) || !DRW_pass_is_empty(stl->g_data->sgl_ghost.bone_outline) || !DRW_pass_is_empty(stl->g_data->sgl_ghost.non_meshes) || + !DRW_pass_is_empty(stl->g_data->sgl_ghost.image_empties) || !DRW_pass_is_empty(stl->g_data->sgl_ghost.bone_axes)) { if (DRW_state_is_fbo()) { @@ -3016,6 +2962,7 @@ static void OBJECT_draw_scene(void *vedata) DRW_draw_pass(stl->g_data->sgl_ghost.bone_wire); DRW_draw_pass(stl->g_data->sgl_ghost.bone_outline); DRW_draw_pass(stl->g_data->sgl_ghost.non_meshes); + DRW_draw_pass(stl->g_data->sgl_ghost.image_empties); DRW_draw_pass(stl->g_data->sgl_ghost.bone_axes); if (DRW_state_is_select()) { @@ -3024,11 +2971,6 @@ static void OBJECT_draw_scene(void *vedata) } batch_camera_path_free(&stl->g_data->sgl_ghost.camera_path); - /* This has to be freed only after drawing empties! */ - if (stl->g_data->sgl_ghost.image_plane_map) { - BLI_ghash_free(stl->g_data->sgl_ghost.image_plane_map, NULL, MEM_freeN); - stl->g_data->sgl_ghost.image_plane_map = NULL; - } DRW_draw_pass(psl->ob_center); } @@ -3043,7 +2985,7 @@ DrawEngineType draw_engine_object_type = { &OBJECT_engine_free, &OBJECT_cache_init, &OBJECT_cache_populate, - NULL, + &OBJECT_cache_finish, NULL, &OBJECT_draw_scene, NULL, diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c index a5c20033287..2409d4033e0 100644 --- a/source/blender/draw/modes/overlay_mode.c +++ b/source/blender/draw/modes/overlay_mode.c @@ -232,11 +232,12 @@ static void overlay_cache_populate(void *vedata, Object *ob) RegionView3D *rv3d = draw_ctx->rv3d; View3D *v3d = draw_ctx->v3d; - if (!stl->g_data->show_overlays) - return; - - if (!DRW_object_is_renderable(ob) && (ob->dt != OB_WIRE)) + if ((!stl->g_data->show_overlays) || + (ob->dt < OB_WIRE) || + (!DRW_object_is_renderable(ob) && (ob->dt != OB_WIRE))) + { return; + } if (DRW_object_is_renderable(ob) && stl->g_data->overlay.flag & V3D_OVERLAY_FACE_ORIENTATION) { struct GPUBatch *geom = DRW_cache_object_surface_get(ob); @@ -278,11 +279,13 @@ static void overlay_cache_populate(void *vedata, Object *ob) else if (is_flat_object_viewed_from_side) { /* Avoid losing flat objects when in ortho views (see T56549) */ struct GPUBatch *geom = DRW_cache_object_wire_outline_get(ob); - GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR); - shgrp = DRW_shgroup_create(sh, psl->flat_wireframe_pass); - DRW_shgroup_stencil_mask(shgrp, stencil_mask); - DRW_shgroup_uniform_vec4(shgrp, "color", ts.colorWire, 1); - DRW_shgroup_call_object_add(shgrp, geom, ob); + if (geom) { + GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR); + shgrp = DRW_shgroup_create(sh, psl->flat_wireframe_pass); + DRW_shgroup_stencil_mask(shgrp, stencil_mask); + DRW_shgroup_uniform_vec4(shgrp, "color", ts.colorWire, 1); + DRW_shgroup_call_object_add(shgrp, geom, ob); + } } else { int tri_count; diff --git a/source/blender/draw/modes/shaders/common_hair_lib.glsl b/source/blender/draw/modes/shaders/common_hair_lib.glsl index e272db02318..c0c5f84d166 100644 --- a/source/blender/draw/modes/shaders/common_hair_lib.glsl +++ b/source/blender/draw/modes/shaders/common_hair_lib.glsl @@ -135,7 +135,7 @@ float hair_shaperadius(float shape, float root, float tip, float time) } void hair_get_pos_tan_binor_time( - bool is_persp, vec3 camera_pos, vec3 camera_z, + bool is_persp, mat4 invmodel_mat, vec3 camera_pos, vec3 camera_z, out vec3 wpos, out vec3 wtan, out vec3 wbinor, out float time, out float thickness, out float thick_time) { int id = hair_get_base_id(); @@ -159,7 +159,11 @@ void hair_get_pos_tan_binor_time( thick_time = float(gl_VertexID % hairThicknessRes) / float(hairThicknessRes - 1); thick_time = thickness * (thick_time * 2.0 - 1.0); - wpos += wbinor * thick_time; + /* Take object scale into account. + * NOTE: This only works fine with uniform scaling. */ + float scale = 1.0 / length(mat3(invmodel_mat) * wbinor); + + wpos += wbinor * thick_time * scale; } } diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl index 7fa822bc697..8d7a653c2fe 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl @@ -120,35 +120,24 @@ void main() #ifdef VERTEX_SELECTION vec4 inner_edge_color = vec4(vertexColor, 1.0); -# ifdef EDGE_FIX - inner_edge_color *= isXray ? 1.0 : EDGE_FIX_ALPHA; -# endif - colorDistEdge(vec4(vertexColor, 1.0), innerEdge); #else vec4 inner_edge_color = EDIT_MESH_edge_color_inner(flag[v], (flag[0] & FACE_ACTIVE_) != 0); -# ifdef EDGE_FIX +#endif +#ifdef EDGE_FIX inner_edge_color *= isXray ? 1.0 : EDGE_FIX_ALPHA; -# endif - colorDistEdge(inner_edge_color, innerEdge); #endif + colorDistEdge(inner_edge_color, innerEdge); } } #if defined(VERTEX_SELECTION) && defined(EDGE_FIX) /* Points */ for (int v = 0; v < 3; ++v) { - if ((flag[v] & EDGE_VERTEX_EXISTS) == 0) { - /* Leave as-is, no vertex. */ - } - else { + if ((flag[v] & EDGE_VERTEX_EXISTS) != 0) { float size = p[v] - sizeVertex; - vec4 point_color = colorVertex; point_color = ((flag[v] & EDGE_VERTEX_SELECTED) != 0) ? colorVertexSelect : point_color; point_color = ((flag[v] & EDGE_VERTEX_ACTIVE) != 0) ? vec4(colorEditMeshActive.xyz, 1.0) : point_color; -# ifdef EDGE_FIX - point_color *= isXray ? 1.0 : EDGE_FIX_ALPHA; -# endif colorDist(point_color, size); } } diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl index e97bc7d1f67..a04494d2ec4 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl @@ -37,7 +37,7 @@ out float facing; #endif #ifdef ANTI_ALIASING -#define Z_OFFSET -0.0013 +#define Z_OFFSET -0.0005 #else #define Z_OFFSET 0.0 #endif @@ -80,7 +80,8 @@ void doVertexOfs(int v, vec2 fixvec) #ifdef VERTEX_FACING facing = v_facing[v]; #endif - gl_Position = pPos[v] + vec4(fixvec * pPos[v].w, Z_OFFSET, 0.0); + float z_ofs = Z_OFFSET * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0); + gl_Position = pPos[v] + vec4(fixvec * pPos[v].w, z_ofs, 0.0); EmitVertex(); } @@ -91,7 +92,7 @@ void mask_edge_flag(int v, ivec3 eflag) /* Only shade the edge that we are currently drawing. * (fix corner bleeding) */ - flag = eflag; + flag = eflag & ~EDGE_VERTEX_EXISTS; flag[vaf] &= ~EDGE_EXISTS; flag[v] &= ~EDGE_EXISTS; } diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl index 722411571e4..3886213ce49 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl @@ -3,7 +3,7 @@ uniform mat3 NormalMatrix; uniform mat4 ProjectionMatrix; uniform mat4 ModelViewMatrix; uniform mat4 ModelViewProjectionMatrix; -uniform float ofs = 1e-4; +uniform float ofs = 3e-5; in vec3 pos; in ivec4 data; @@ -21,7 +21,15 @@ void main() gl_PointSize = sizeVertex * 2.0; gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); - gl_Position.z -= ofs; + gl_Position.z -= ofs * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0); + + /* Make selected and active vertex always on top. */ + if ((data.x & VERTEX_SELECTED) != 0) { + gl_Position.z -= 1e-7; + } + if ((data.x & VERTEX_ACTIVE) != 0) { + gl_Position.z -= 1e-7; + } #ifdef VERTEX_FACING vec4 vPos = ModelViewMatrix * vec4(pos, 1.0); diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl index f1ebb419d60..e4268188e09 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl @@ -29,7 +29,7 @@ out float vFacing; void main() { pPos = ModelViewProjectionMatrix * vec4(pos, 1.0); - pPos.z -= ofs; + pPos.z -= ofs * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0); vData = data & dataMask; # ifdef VERTEX_FACING vec4 vpos = ModelViewMatrix * vec4(pos, 1.0); @@ -59,7 +59,7 @@ out vec3 barycentric; void main() { gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); - gl_Position.z -= ofs; + gl_Position.z -= ofs * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0); int v_0 = (gl_VertexID / 3) * 3; int vidx = gl_VertexID % 3; diff --git a/source/blender/draw/modes/shaders/object_empty_image_vert.glsl b/source/blender/draw/modes/shaders/object_empty_image_vert.glsl index c1a957f0640..3469e37358e 100644 --- a/source/blender/draw/modes/shaders/object_empty_image_vert.glsl +++ b/source/blender/draw/modes/shaders/object_empty_image_vert.glsl @@ -1,21 +1,16 @@ - -uniform mat4 ViewProjectionMatrix; -uniform vec2 aspect; - -/* ---- Instantiated Attribs ---- */ -in vec2 texCoord; -in vec2 pos; -/* ---- Per instance Attribs ---- */ -in mat4 InstanceModelMatrix; - +uniform mat4 ModelViewProjectionMatrix; +uniform float aspectX; +uniform float aspectY; +uniform float size; +uniform vec2 offset; #ifdef USE_WIRE -in vec3 color; +uniform vec3 color; #else -in vec4 objectColor; +uniform vec4 objectColor; #endif -in float size; -in vec2 offset; +in vec2 texCoord; +in vec2 pos; flat out vec4 finalColor; @@ -25,9 +20,8 @@ out vec2 texCoord_interp; void main() { - gl_Position = ViewProjectionMatrix * InstanceModelMatrix * vec4( - (pos[0] + offset[0]) * (size * aspect[0]), - (pos[1] + offset[1]) * (size * aspect[1]), + gl_Position = ModelViewProjectionMatrix * vec4( + (pos + offset) * (size * vec2(aspectX, aspectY)), 0.0, 1.0); #ifdef USE_WIRE finalColor = vec4(color, 1.0); diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index 4d21ed8b5b4..f82250df4d3 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -416,6 +416,7 @@ static void draw_marker( else { immUniformColor4f(0.0f, 0.0f, 0.0f, 0.38f); } + immUniform1i("colors_len", 0); /* "simple" mode */ immUniform1f("dash_width", 6.0f); immUniform1f("dash_factor", 0.5f); diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index f6fdd539983..8914cf9492c 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -231,9 +231,7 @@ static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event) case LEFTMOUSE: case RIGHTMOUSE: case MIDDLEMOUSE: - /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init - * the modal op) doesn't work for some reason - */ + /* We check for either mouse-button to end, to work with all user keymaps. */ if (event->val == KM_RELEASE) ret = OPERATOR_FINISHED; break; diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c index 0e95b6c3467..28bab00e665 100644 --- a/source/blender/editors/armature/armature_relations.c +++ b/source/blender/editors/armature/armature_relations.c @@ -549,8 +549,15 @@ static void separate_armature_bones(Main *bmain, Object *ob, short sel) /* clear the pchan->parent var of any pchan that had this as its parent */ for (pchn = ob->pose->chanbase.first; pchn; pchn = pchn->next) { - if (pchn->parent == pchan) + if (pchn->parent == pchan) { pchn->parent = NULL; + } + if (pchn->bbone_next == pchan) { + pchn->bbone_next = NULL; + } + if (pchn->bbone_prev == pchan) { + pchn->bbone_prev = NULL; + } } /* free any of the extra-data this pchan might have */ diff --git a/source/blender/editors/armature/armature_utils.c b/source/blender/editors/armature/armature_utils.c index 339f0306779..53b07c59973 100644 --- a/source/blender/editors/armature/armature_utils.c +++ b/source/blender/editors/armature/armature_utils.c @@ -816,6 +816,12 @@ void ED_armature_ebone_listbase_copy(ListBase *lb_dst, ListBase *lb_src) if (ebone_dst->parent) { ebone_dst->parent = ebone_dst->parent->temp.ebone; } + if (ebone_dst->bbone_next) { + ebone_dst->bbone_next = ebone_dst->bbone_next->temp.ebone; + } + if (ebone_dst->bbone_prev) { + ebone_dst->bbone_prev = ebone_dst->bbone_prev->temp.ebone; + } } } diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt index de862c0cc08..f0e3b181873 100644 --- a/source/blender/editors/datafiles/CMakeLists.txt +++ b/source/blender/editors/datafiles/CMakeLists.txt @@ -52,12 +52,10 @@ set(ICON_NAMES dot collapsemenu x - go_left - plug - ui + duplicate node node_sel - fullscreen + window workspace rightarrow_thin bordermove @@ -67,7 +65,6 @@ set(ICON_NAMES panel_close copy_id eyedropper - link_area auto checkbox_dehlt checkbox_hlt @@ -78,25 +75,21 @@ set(ICON_NAMES screen_back rightarrow downarrow_hlt - dotsup - dotsdown - link - inlink plugin help ghost_enabled color - linked unlinked + linked hand zoom_all zoom_selected zoom_previous zoom_in zoom_out - render_region - border_rect - border_lasso + driver_distance + driver_rotational_difference + driver_transform freeze stylus_pressure ghost_disabled @@ -105,27 +98,24 @@ set(ICON_NAMES quit url recover_last - 30 + three_dots fullscreen_enter fullscreen_exit - #onionskin light material texture anim world scene - edit - game - radio + output script particles physics speaker - texture_shaded tool_settings shaderfx - #blank1 + fake_user_off + fake_user_on view3d graph outliner @@ -141,7 +131,6 @@ set(ICON_NAMES preferences time nodetree - logic console clip asset_manager @@ -150,15 +139,13 @@ set(ICON_NAMES node_material object_datamode editmode_hlt - facesel_hlt + uv vpaint_hlt tpaint_hlt wpaint_hlt sculptmode_hlt pose_hlt particlemode - lightpaint - greasepencil_stroke_paint tracking tracking_backwards tracking_forwards @@ -185,7 +172,7 @@ set(ICON_NAMES library_data_direct group armature_data - pose_data + community bone_data constraint shapekey_data @@ -193,6 +180,7 @@ set(ICON_NAMES camera_stereo package uglypackage + experimental brush_data image_data file @@ -201,6 +189,7 @@ set(ICON_NAMES render_result surface_data empty_data + preset render_animation render_still library_data_broken @@ -224,16 +213,18 @@ set(ICON_NAMES mouse_lmb_drag mouse_mmb_drag mouse_rmb_drag - preset + preset_new decorate decorate_keyframe decorate_animate decorate_driver decorate_linked - decorate_override + decorate_library_override decorate_unlocked decorate_locked - fake_user + decorate_override + sealed + heart orphan_data user system @@ -256,12 +247,13 @@ set(ICON_NAMES outliner_ob_image restrict_color_off restrict_color_on - restrict_view_off - restrict_view_on - restrict_select_off + hide_on + hide_off restrict_select_on - restrict_render_off + restrict_select_off restrict_render_on + restrict_render_off + outliner_data_empty outliner_data_mesh outliner_data_curve outliner_data_lattice @@ -272,12 +264,17 @@ set(ICON_NAMES outliner_data_font outliner_data_surface outliner_data_speaker - outliner_data_pose outliner_data_greasepencil + gp_select_points + gp_select_strokes + gp_multiframe_editing + gp_only_selected + modifier_off + modifier_on onionskin_off onionskin_on - hide_off - hide_on + restrict_view_on + restrict_view_off mesh_plane mesh_cube mesh_circle @@ -289,12 +286,15 @@ set(ICON_NAMES mesh_torus mesh_cone mesh_capsule + empty_single_arrow light_point light_sun light_spot light_hemi light_area - meta_empty + cube + sphere + cone meta_plane meta_cube meta_ball @@ -306,6 +306,9 @@ set(ICON_NAMES surface_ncylinder surface_nsphere surface_ntorus + empty_axis + stroke + empty_arrows curve_bezcurve curve_bezcircle curve_ncurve @@ -334,8 +337,9 @@ set(ICON_NAMES force_turbulence force_drag force_smokeflow - temperature - gear + image_plane + image_background + image_reference node_insert_on node_insert_off node_top @@ -370,7 +374,7 @@ set(ICON_NAMES mod_displace mod_curve mod_lattice - constraint_data + mod_tint mod_armature mod_shrinkwrap mod_cast @@ -396,6 +400,15 @@ set(ICON_NAMES mod_wireframe mod_data_transfer mod_normaledit + mod_particle_instance + mod_hue_saturation + mod_noise + mod_offset + mod_simplify + mod_thickness + mod_instance + mod_time + mod_opacity rec play ff @@ -466,10 +479,6 @@ set(ICON_NAMES particle_point particle_tip particle_path - man_trans - man_rot - man_scale - manipul snap_off snap_on snap_normal @@ -492,8 +501,8 @@ set(ICON_NAMES orientation_local orientation_normal orientation_view - pastedown copydown + pastedown pasteflipup pasteflipdown vis_sel_11 @@ -502,15 +511,14 @@ set(ICON_NAMES vis_sel_00 automerge_on automerge_off - retopo uv_vertexsel uv_edgesel uv_facesel uv_islandsel uv_sync_select normals_vertex - normals_vertex_face normals_face + normals_vertex_face shading_bbox shading_wire shading_solid @@ -533,15 +541,13 @@ set(ICON_NAMES sortbyext sorttime sortsize - longdisplay shortdisplay - ghost + longdisplay imgdisplay bookmarks fontpreview filter newfolder - open_recent file_parent file_refresh file_folder @@ -559,11 +565,11 @@ set(ICON_NAMES append_blend import export - external_data loop_back loop_forwards back forward + file_volume alembic volume file_hidden @@ -577,6 +583,9 @@ set(ICON_NAMES aliased antialiased mat_sphere_sky + matshaderball + matcloth + matfluid wordwrap_off wordwrap_on syntax_off @@ -594,7 +603,6 @@ set(ICON_NAMES image_rgb_alpha image_alpha image_zdepth - imagefile view_perspective view_ortho view_camera diff --git a/source/blender/editors/gpencil/annotate_draw.c b/source/blender/editors/gpencil/annotate_draw.c index 1a51875af9e..c83015675a0 100644 --- a/source/blender/editors/gpencil/annotate_draw.c +++ b/source/blender/editors/gpencil/annotate_draw.c @@ -134,7 +134,6 @@ static void gp_draw_stroke_buffer( immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); immUniformColor3fvAlpha(ink, ink[3]); - /* TODO: implement this with a geometry shader to draw one continuous tapered stroke */ immBeginAtMost(GPU_PRIM_LINE_STRIP, totpoints); for (int i = 0; i < totpoints; i++, pt++) { @@ -263,8 +262,6 @@ static void gp_draw_stroke_3d( immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR); immUniformColor3fvAlpha(ink, ink[3]); - /* TODO: implement this with a geometry shader to draw one continuous tapered stroke */ - /* draw stroke curve */ GPU_line_width(max_ff(curpressure * thickness, 1.0f)); immBeginAtMost(GPU_PRIM_LINE_STRIP, totpoints + cyclic_add); @@ -337,8 +334,6 @@ static void gp_draw_stroke_2d( scalefac = 0.001f; } - /* TODO: fancy++ with the magic of shaders */ - /* tessellation code - draw stroke as series of connected quads (triangle strips in fact) with connection * edges rotated to minimize shrinking artifacts, and rounded endcaps */ diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c index e9b862cba9e..5a8641ed0a7 100644 --- a/source/blender/editors/gpencil/annotate_paint.c +++ b/source/blender/editors/gpencil/annotate_paint.c @@ -1221,7 +1221,7 @@ static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode, Deps * (though this is only available in editmode) */ if (p->gpd->flag & GP_DATA_STROKE_EDITMODE) { - if (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_SELECT_MASK) { + if (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) { p->flags |= GP_PAINTFLAG_SELECTMASK; } } diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c index 18ff0efd3f9..657c3c8b9b6 100644 --- a/source/blender/editors/gpencil/gpencil_brush.c +++ b/source/blender/editors/gpencil/gpencil_brush.c @@ -107,11 +107,11 @@ typedef struct tGP_BrushEditData { bGPdata *gpd; /* Brush Settings */ - GP_BrushEdit_Settings *settings; - GP_EditBrush_Data *gp_brush; + GP_Sculpt_Settings *settings; + GP_Sculpt_Data *gp_brush; - eGP_EditBrush_Types brush_type; - eGP_EditBrush_Flag flag; + eGP_Sculpt_Types brush_type; + eGP_Sculpt_Flag flag; /* Space Conversion Data */ GP_SpaceConversion gsc; @@ -199,16 +199,16 @@ static void gpsculpt_compute_lock_axis(tGP_BrushEditData *gso, bGPDspoint *pt, c /* Context ---------------------------------------- */ /* Get the sculpting settings */ -static GP_BrushEdit_Settings *gpsculpt_get_settings(Scene *scene) +static GP_Sculpt_Settings *gpsculpt_get_settings(Scene *scene) { return &scene->toolsettings->gp_sculpt; } /* Get the active brush */ -static GP_EditBrush_Data *gpsculpt_get_brush(Scene *scene, bool is_weight_mode) +static GP_Sculpt_Data *gpsculpt_get_brush(Scene *scene, bool is_weight_mode) { - GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt; - GP_EditBrush_Data *gp_brush = NULL; + GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt; + GP_Sculpt_Data *gp_brush = NULL; if (is_weight_mode) { gp_brush = &gset->brush[gset->weighttype]; } @@ -225,19 +225,19 @@ static GP_EditBrush_Data *gpsculpt_get_brush(Scene *scene, bool is_weight_mode) static bool gp_brush_invert_check(tGP_BrushEditData *gso) { /* The basic setting is the brush's setting (from the panel) */ - bool invert = ((gso->gp_brush->flag & GP_EDITBRUSH_FLAG_INVERT) != 0); + bool invert = ((gso->gp_brush->flag & GP_SCULPT_FLAG_INVERT) != 0); /* During runtime, the user can hold down the Ctrl key to invert the basic behaviour */ - if (gso->flag & GP_EDITBRUSH_FLAG_INVERT) { + if (gso->flag & GP_SCULPT_FLAG_INVERT) { invert ^= true; } /* set temporary status */ if (invert) { - gso->gp_brush->flag |= GP_EDITBRUSH_FLAG_TMP_INVERT; + gso->gp_brush->flag |= GP_SCULPT_FLAG_TMP_INVERT; } else { - gso->gp_brush->flag &= ~GP_EDITBRUSH_FLAG_TMP_INVERT; + gso->gp_brush->flag &= ~GP_SCULPT_FLAG_TMP_INVERT; } return invert; @@ -246,18 +246,18 @@ static bool gp_brush_invert_check(tGP_BrushEditData *gso) /* Compute strength of effect */ static float gp_brush_influence_calc(tGP_BrushEditData *gso, const int radius, const int co[2]) { - GP_EditBrush_Data *gp_brush = gso->gp_brush; + GP_Sculpt_Data *gp_brush = gso->gp_brush; /* basic strength factor from brush settings */ float influence = gp_brush->strength; /* use pressure? */ - if (gp_brush->flag & GP_EDITBRUSH_FLAG_USE_PRESSURE) { + if (gp_brush->flag & GP_SCULPT_FLAG_USE_PRESSURE) { influence *= gso->pressure; } /* distance fading */ - if (gp_brush->flag & GP_EDITBRUSH_FLAG_USE_FALLOFF) { + if (gp_brush->flag & GP_SCULPT_FLAG_USE_FALLOFF) { float distance = (float)len_v2v2_int(gso->mval, co); float fac; @@ -288,29 +288,29 @@ static bool gp_brush_smooth_apply( tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2]) { - // GP_EditBrush_Data *gp_brush = gso->brush; + // GP_Sculpt_Data *gp_brush = gso->brush; float inf = gp_brush_influence_calc(gso, radius, co); /* need one flag enabled by default */ if ((gso->settings->flag & - (GP_BRUSHEDIT_FLAG_APPLY_POSITION | - GP_BRUSHEDIT_FLAG_APPLY_STRENGTH | - GP_BRUSHEDIT_FLAG_APPLY_THICKNESS | - GP_BRUSHEDIT_FLAG_APPLY_UV)) == 0) + (GP_SCULPT_SETT_FLAG_APPLY_POSITION | + GP_SCULPT_SETT_FLAG_APPLY_STRENGTH | + GP_SCULPT_SETT_FLAG_APPLY_THICKNESS | + GP_SCULPT_SETT_FLAG_APPLY_UV)) == 0) { - gso->settings->flag |= GP_BRUSHEDIT_FLAG_APPLY_POSITION; + gso->settings->flag |= GP_SCULPT_SETT_FLAG_APPLY_POSITION; } /* perform smoothing */ - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_POSITION) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_POSITION) { BKE_gpencil_smooth_stroke(gps, pt_index, inf); } - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_STRENGTH) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_STRENGTH) { BKE_gpencil_smooth_stroke_strength(gps, pt_index, inf); } - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_THICKNESS) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_THICKNESS) { BKE_gpencil_smooth_stroke_thickness(gps, pt_index, inf); } - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_UV) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_UV) { BKE_gpencil_smooth_stroke_uv(gps, pt_index, inf); } @@ -766,16 +766,16 @@ static bool gp_brush_randomize_apply( const float fac = BLI_rng_get_float(gso->rng) * inf; /* need one flag enabled by default */ if ((gso->settings->flag & - (GP_BRUSHEDIT_FLAG_APPLY_POSITION | - GP_BRUSHEDIT_FLAG_APPLY_STRENGTH | - GP_BRUSHEDIT_FLAG_APPLY_THICKNESS | - GP_BRUSHEDIT_FLAG_APPLY_UV)) == 0) + (GP_SCULPT_SETT_FLAG_APPLY_POSITION | + GP_SCULPT_SETT_FLAG_APPLY_STRENGTH | + GP_SCULPT_SETT_FLAG_APPLY_THICKNESS | + GP_SCULPT_SETT_FLAG_APPLY_UV)) == 0) { - gso->settings->flag |= GP_BRUSHEDIT_FLAG_APPLY_POSITION; + gso->settings->flag |= GP_SCULPT_SETT_FLAG_APPLY_POSITION; } /* apply random to position */ - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_POSITION) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_POSITION) { /* Jitter is applied perpendicular to the mouse movement vector * - We compute all effects in screenspace (since it's easier) * and then project these to get the points/distances in @@ -832,7 +832,7 @@ static bool gp_brush_randomize_apply( } } /* apply random to strength */ - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_STRENGTH) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_STRENGTH) { if (BLI_rng_get_float(gso->rng) > 0.5f) { pt->strength += fac; } @@ -843,7 +843,7 @@ static bool gp_brush_randomize_apply( CLAMP_MAX(pt->strength, 1.0f); } /* apply random to thickness (use pressure) */ - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_THICKNESS) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_THICKNESS) { if (BLI_rng_get_float(gso->rng) > 0.5f) { pt->pressure += fac; } @@ -854,7 +854,7 @@ static bool gp_brush_randomize_apply( CLAMP_MIN(pt->pressure, 0.0f); } /* apply random to UV (use pressure) */ - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_UV) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_UV) { if (BLI_rng_get_float(gso->rng) > 0.5f) { pt->uv_rot += fac; } @@ -910,6 +910,9 @@ static bool gp_brush_weight_apply( curweight += inf; } + /* verify target weight */ + CLAMP_MAX(curweight, gso->gp_brush->target_weight); + CLAMP(curweight, 0.0f, 1.0f); if (dw) { dw->weight = curweight; @@ -1108,7 +1111,7 @@ static void gp_brush_clone_adjust(tGP_BrushEditData *gso) int i; for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) { - if (gso->gp_brush->flag & GP_EDITBRUSH_FLAG_USE_FALLOFF) { + if (gso->gp_brush->flag & GP_SCULPT_FLAG_USE_FALLOFF) { /* "Smudge" Effect when falloff is enabled */ float delta[3] = {0.0f}; int sco[2] = {0}; @@ -1189,8 +1192,8 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op) const bool is_weight_mode = ob->mode == OB_MODE_GPENCIL_WEIGHT; /* set the brush using the tool */ #if 0 - GP_BrushEdit_Settings *gset = &ts->gp_sculpt; - eGP_EditBrush_Types mode = is_weight_mode ? gset->weighttype : gset->brushtype; + GP_Sculpt_Settings *gset = &ts->gp_sculpt; + eGP_Sculpt_Types mode = is_weight_mode ? gset->weighttype : gset->brushtype; #endif tGP_BrushEditData *gso; @@ -1222,8 +1225,8 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op) gso->cfra = INT_MAX; /* NOTE: So that first stroke will get handled in init_stroke() */ /* some brushes cannot use pressure for radius */ - if (ELEM(gso->brush_type, GP_EDITBRUSH_TYPE_GRAB, GP_EDITBRUSH_TYPE_CLONE)) { - gso->gp_brush->flag &= ~GP_EDITBRUSH_FLAG_PRESSURE_RADIUS; + if (ELEM(gso->brush_type, GP_SCULPT_TYPE_GRAB, GP_SCULPT_TYPE_CLONE)) { + gso->gp_brush->flag &= ~GP_SCULPT_FLAG_PRESSURE_RADIUS; } gso->scene = scene; @@ -1243,7 +1246,7 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op) /* multiframe settings */ gso->is_multiframe = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gso->gpd); - gso->use_multiframe_falloff = (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_FRAME_FALLOFF) != 0; + gso->use_multiframe_falloff = (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_FRAME_FALLOFF) != 0; /* init multiedit falloff curve data before doing anything, * so we won't have to do it again later @@ -1254,7 +1257,7 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op) /* initialise custom data for brushes */ switch (gso->brush_type) { - case GP_EDITBRUSH_TYPE_CLONE: + case GP_SCULPT_TYPE_CLONE: { bGPDstroke *gps; bool found = false; @@ -1283,7 +1286,7 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op) break; } - case GP_EDITBRUSH_TYPE_GRAB: + case GP_SCULPT_TYPE_GRAB: { /* initialise the cache needed for this brush */ gso->stroke_customdata = BLI_ghash_ptr_new("GP Grab Brush - Strokes Hash"); @@ -1317,7 +1320,7 @@ static void gpsculpt_brush_exit(bContext *C, wmOperator *op) /* free brush-specific data */ switch (gso->brush_type) { - case GP_EDITBRUSH_TYPE_GRAB: + case GP_SCULPT_TYPE_GRAB: { /* Free per-stroke customdata * - Keys don't need to be freed, as those are the strokes @@ -1327,7 +1330,7 @@ static void gpsculpt_brush_exit(bContext *C, wmOperator *op) break; } - case GP_EDITBRUSH_TYPE_CLONE: + case GP_SCULPT_TYPE_CLONE: { /* Free customdata */ gp_brush_clone_free(gso); @@ -1355,7 +1358,7 @@ static void gpsculpt_brush_exit(bContext *C, wmOperator *op) } /* disable temp invert flag */ - gso->gp_brush->flag &= ~GP_EDITBRUSH_FLAG_TMP_INVERT; + gso->gp_brush->flag &= ~GP_SCULPT_FLAG_TMP_INVERT; /* free operator data */ MEM_freeN(gso); @@ -1412,8 +1415,8 @@ static bool gpsculpt_brush_do_stroke( { GP_SpaceConversion *gsc = &gso->gsc; rcti *rect = &gso->brush_rect; - GP_EditBrush_Data *gp_brush = gso->gp_brush; - const int radius = (gp_brush->flag & GP_EDITBRUSH_FLAG_PRESSURE_RADIUS) ? gso->gp_brush->size * gso->pressure : gso->gp_brush->size; + GP_Sculpt_Data *gp_brush = gso->gp_brush; + const int radius = (gp_brush->flag & GP_SCULPT_FLAG_PRESSURE_RADIUS) ? gso->gp_brush->size * gso->pressure : gso->gp_brush->size; bGPDspoint *pt1, *pt2; int pc1[2] = {0}; @@ -1446,7 +1449,7 @@ static bool gpsculpt_brush_do_stroke( pt2 = gps->points + i + 1; /* Skip if neither one is selected (and we are only allowed to edit/consider selected points) */ - if (gso->settings->flag & GP_BRUSHEDIT_FLAG_SELECT_MASK) { + if (gso->settings->flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) { if (!(pt1->flag & GP_SPOINT_SELECT) && !(pt2->flag & GP_SPOINT_SELECT)) { include_last = false; continue; @@ -1527,25 +1530,25 @@ static bool gpsculpt_brush_do_frame( } switch (gso->brush_type) { - case GP_EDITBRUSH_TYPE_SMOOTH: /* Smooth strokes */ + case GP_SCULPT_TYPE_SMOOTH: /* Smooth strokes */ { changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_smooth_apply); break; } - case GP_EDITBRUSH_TYPE_THICKNESS: /* Adjust stroke thickness */ + case GP_SCULPT_TYPE_THICKNESS: /* Adjust stroke thickness */ { changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_thickness_apply); break; } - case GP_EDITBRUSH_TYPE_STRENGTH: /* Adjust stroke color strength */ + case GP_SCULPT_TYPE_STRENGTH: /* Adjust stroke color strength */ { changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_strength_apply); break; } - case GP_EDITBRUSH_TYPE_GRAB: /* Grab points */ + case GP_SCULPT_TYPE_GRAB: /* Grab points */ { if (gso->first) { /* First time this brush stroke is being applied: @@ -1563,31 +1566,31 @@ static bool gpsculpt_brush_do_frame( break; } - case GP_EDITBRUSH_TYPE_PUSH: /* Push points */ + case GP_SCULPT_TYPE_PUSH: /* Push points */ { changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_push_apply); break; } - case GP_EDITBRUSH_TYPE_PINCH: /* Pinch points */ + case GP_SCULPT_TYPE_PINCH: /* Pinch points */ { changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_pinch_apply); break; } - case GP_EDITBRUSH_TYPE_TWIST: /* Twist points around midpoint */ + case GP_SCULPT_TYPE_TWIST: /* Twist points around midpoint */ { changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_twist_apply); break; } - case GP_EDITBRUSH_TYPE_RANDOMIZE: /* Apply jitter */ + case GP_SCULPT_TYPE_RANDOMIZE: /* Apply jitter */ { changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_randomize_apply); break; } - case GP_EDITBRUSH_TYPE_WEIGHT: /* Adjust vertex group weight */ + case GP_SCULPT_TYPE_WEIGHT: /* Adjust vertex group weight */ { changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_weight_apply); break; @@ -1619,23 +1622,23 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso) /* Calculate brush-specific data which applies equally to all points */ switch (gso->brush_type) { - case GP_EDITBRUSH_TYPE_GRAB: /* Grab points */ - case GP_EDITBRUSH_TYPE_PUSH: /* Push points */ + case GP_SCULPT_TYPE_GRAB: /* Grab points */ + case GP_SCULPT_TYPE_PUSH: /* Push points */ { /* calculate amount of displacement to apply */ gp_brush_grab_calc_dvec(gso); break; } - case GP_EDITBRUSH_TYPE_PINCH: /* Pinch points */ - case GP_EDITBRUSH_TYPE_TWIST: /* Twist points around midpoint */ + case GP_SCULPT_TYPE_PINCH: /* Pinch points */ + case GP_SCULPT_TYPE_TWIST: /* Twist points around midpoint */ { /* calculate midpoint of the brush (in data space) */ gp_brush_calc_midpoint(gso); break; } - case GP_EDITBRUSH_TYPE_RANDOMIZE: /* Random jitter */ + case GP_SCULPT_TYPE_RANDOMIZE: /* Random jitter */ { /* compute the displacement vector for the cursor (in data space) */ gp_brush_grab_calc_dvec(gso); @@ -1705,9 +1708,9 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso) static void gpsculpt_brush_apply(bContext *C, wmOperator *op, PointerRNA *itemptr) { tGP_BrushEditData *gso = op->customdata; - GP_EditBrush_Data *gp_brush = gso->gp_brush; + GP_Sculpt_Data *gp_brush = gso->gp_brush; const int radius = ( - (gp_brush->flag & GP_EDITBRUSH_FLAG_PRESSURE_RADIUS) ? + (gp_brush->flag & GP_SCULPT_FLAG_PRESSURE_RADIUS) ? gso->gp_brush->size * gso->pressure : gso->gp_brush->size); float mousef[2]; int mouse[2]; @@ -1721,9 +1724,9 @@ static void gpsculpt_brush_apply(bContext *C, wmOperator *op, PointerRNA *itempt gso->pressure = RNA_float_get(itemptr, "pressure"); if (RNA_boolean_get(itemptr, "pen_flip")) - gso->flag |= GP_EDITBRUSH_FLAG_INVERT; + gso->flag |= GP_SCULPT_FLAG_INVERT; else - gso->flag &= ~GP_EDITBRUSH_FLAG_INVERT; + gso->flag &= ~GP_SCULPT_FLAG_INVERT; /* Store coordinates as reference, if operator just started running */ @@ -1741,7 +1744,7 @@ static void gpsculpt_brush_apply(bContext *C, wmOperator *op, PointerRNA *itempt /* Apply brush */ - if (gso->brush_type == GP_EDITBRUSH_TYPE_CLONE) { + if (gso->brush_type == GP_SCULPT_TYPE_CLONE) { changed = gpsculpt_brush_apply_clone(C, gso); } else { @@ -1849,22 +1852,22 @@ static int gpsculpt_brush_invoke(bContext *C, wmOperator *op, const wmEvent *eve /* initialise type-specific data (used for the entire session) */ switch (gso->brush_type) { /* Brushes requiring timer... */ - case GP_EDITBRUSH_TYPE_THICKNESS: + case GP_SCULPT_TYPE_THICKNESS: brush_rate = 0.01f; // XXX: hardcoded needs_timer = true; break; - case GP_EDITBRUSH_TYPE_STRENGTH: + case GP_SCULPT_TYPE_STRENGTH: brush_rate = 0.01f; // XXX: hardcoded needs_timer = true; break; - case GP_EDITBRUSH_TYPE_PINCH: + case GP_SCULPT_TYPE_PINCH: brush_rate = 0.001f; // XXX: hardcoded needs_timer = true; break; - case GP_EDITBRUSH_TYPE_TWIST: + case GP_SCULPT_TYPE_TWIST: brush_rate = 0.01f; // XXX: hardcoded needs_timer = true; break; @@ -2091,11 +2094,11 @@ static int gpsculpt_brush_modal(bContext *C, wmOperator *op, const wmEvent *even return OPERATOR_RUNNING_MODAL; } -void GPENCIL_OT_brush_paint(wmOperatorType *ot) +void GPENCIL_OT_sculpt_paint(wmOperatorType *ot) { /* identifiers */ ot->name = "Stroke Sculpt"; - ot->idname = "GPENCIL_OT_brush_paint"; + ot->idname = "GPENCIL_OT_sculpt_paint"; ot->description = "Apply tweaks to strokes by painting over the strokes"; // XXX /* api callbacks */ diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c index 20100354070..b7568ce20dd 100644 --- a/source/blender/editors/gpencil/gpencil_data.c +++ b/source/blender/editors/gpencil/gpencil_data.c @@ -479,8 +479,6 @@ static int gp_layer_duplicate_object_exec(bContext *C, wmOperator *op) /* make copy of layer */ bGPDlayer *gpl_dst = MEM_dupallocN(gpl_src); gpl_dst->prev = gpl_dst->next = NULL; - gpl_dst->runtime.derived_array = NULL; - gpl_dst->runtime.len_derived = 0; BLI_addtail(&gpd_dst->layers, gpl_dst); BLI_uniquename(&gpd_dst->layers, gpl_dst, DATA_("GP_Layer"), '.', offsetof(bGPDlayer, info), sizeof(gpl_dst->info)); diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index f2caba026ca..b56d46fdc1e 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -2840,10 +2840,12 @@ void GPENCIL_OT_stroke_flip(wmOperatorType *ot) /* ***************** Reproject Strokes ********************** */ typedef enum eGP_ReprojectModes { - /* Axis (equal to lock axis) */ - GP_REPROJECT_AXIS = 0, + /* Axis */ + GP_REPROJECT_FRONT = 0, + GP_REPROJECT_SIDE, + GP_REPROJECT_TOP, /* On same plane, parallel to viewplane */ - GP_REPROJECT_PLANAR, + GP_REPROJECT_VIEW, /* Reprojected on to the scene geometry */ GP_REPROJECT_SURFACE, } eGP_ReprojectModes; @@ -2863,14 +2865,8 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op) GP_SpaceConversion gsc = {NULL}; eGP_ReprojectModes mode = RNA_enum_get(op->ptr, "type"); - int lock_axis = ts->gp_sculpt.lock_axis; float origin[3]; - if ((mode == GP_REPROJECT_AXIS) && (lock_axis == GP_LOCKAXIS_VIEW)) { - BKE_report(op->reports, RPT_ERROR, "To reproject by axis, a lock axis must be set before"); - return OPERATOR_CANCELLED; - } - /* init space conversion stuff */ gp_point_conversion_init(C, &gsc); @@ -2907,24 +2903,47 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op) gp_point_to_parent_space(pt, gpstroke_iter.diff_mat, &pt2); gp_point_to_xy_fl(&gsc, gps, &pt2, &xy[0], &xy[1]); - /* Project stroke in the axis locked */ - if (mode == GP_REPROJECT_AXIS) { - if (lock_axis > GP_LOCKAXIS_VIEW) { - ED_gp_get_drawing_reference(v3d, scene, ob, gpl, - ts->gpencil_v3d_align, origin); - ED_gp_project_point_to_plane(ob, rv3d, origin, - lock_axis - 1, &pt2); + /* Project stroke in one axis */ + if (ELEM(mode, GP_REPROJECT_FRONT, GP_REPROJECT_SIDE, GP_REPROJECT_TOP)) { + ED_gp_get_drawing_reference(v3d, scene, ob, gpl, + ts->gpencil_v3d_align, origin); + + int axis = 0; + switch (mode) { + case GP_REPROJECT_FRONT: + { + axis = 1; + break; + } + case GP_REPROJECT_SIDE: + { + axis = 0; + break; + } + case GP_REPROJECT_TOP: + { + axis = 2; + break; + } + default: + { + axis = 1; + break; + } + } + + ED_gp_project_point_to_plane(ob, rv3d, origin, + axis, &pt2); - copy_v3_v3(&pt->x, &pt2.x); + copy_v3_v3(&pt->x, &pt2.x); - /* apply parent again */ - gp_apply_parent_point(depsgraph, ob, gpd, gpl, pt); - } + /* apply parent again */ + gp_apply_parent_point(depsgraph, ob, gpd, gpl, pt); } /* Project screenspace back to 3D space (from current perspective) * so that all points have been treated the same way */ - else if (mode == GP_REPROJECT_PLANAR) { + else if (mode == GP_REPROJECT_VIEW) { /* Planar - All on same plane parallel to the viewplane */ gp_point_xy_to_3d(&gsc, scene, xy, &pt->x); } @@ -2947,7 +2966,7 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op) } /* Unapply parent corrections */ - if (mode != GP_REPROJECT_AXIS) { + if (!ELEM(mode, GP_REPROJECT_FRONT, GP_REPROJECT_SIDE, GP_REPROJECT_TOP)) { mul_m4_v3(inverse_diff_mat, &pt->x); } } @@ -2963,10 +2982,13 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op) void GPENCIL_OT_reproject(wmOperatorType *ot) { static const EnumPropertyItem reproject_type[] = { - {GP_REPROJECT_AXIS, "AXIS", 0, "Axis", - "Reproject the strokes using the current lock axis configuration. This is the same projection using while" - "drawing new strokes"}, - {GP_REPROJECT_PLANAR, "PLANAR", 0, "Planar", + {GP_REPROJECT_FRONT, "FRONT", 0, "Front", + "Reproject the strokes using the X-Z plane"}, + {GP_REPROJECT_SIDE, "SIDE", 0, "Side", + "Reproject the strokes using the Y-Z plane"}, + {GP_REPROJECT_TOP, "TOP", 0, "Top", + "Reproject the strokes using the X-Y plane"}, + {GP_REPROJECT_VIEW, "VIEW", 0, "View", "Reproject the strokes to end up on the same plane, as if drawn from the current viewpoint " "using 'Cursor' Stroke Placement"}, {GP_REPROJECT_SURFACE, "SURFACE", 0, "Surface", @@ -2990,7 +3012,7 @@ void GPENCIL_OT_reproject(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_USE_EVAL_DATA; /* properties */ - ot->prop = RNA_def_enum(ot->srna, "type", reproject_type, GP_REPROJECT_PLANAR, "Projection Type", ""); + ot->prop = RNA_def_enum(ot->srna, "type", reproject_type, GP_REPROJECT_VIEW, "Projection Type", ""); } /* ******************* Stroke subdivide ************************** */ diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h index d94b5d49add..d737d34a017 100644 --- a/source/blender/editors/gpencil/gpencil_intern.h +++ b/source/blender/editors/gpencil/gpencil_intern.h @@ -328,7 +328,7 @@ void GPENCIL_OT_reproject(struct wmOperatorType *ot); /* stroke sculpting -- */ -void GPENCIL_OT_brush_paint(struct wmOperatorType *ot); +void GPENCIL_OT_sculpt_paint(struct wmOperatorType *ot); /* buttons editing --- */ diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c index a199f943a8d..01221f57f05 100644 --- a/source/blender/editors/gpencil/gpencil_ops.c +++ b/source/blender/editors/gpencil/gpencil_ops.c @@ -266,7 +266,7 @@ void ED_operatortypes_gpencil(void) WM_operatortype_append(GPENCIL_OT_reproject); - WM_operatortype_append(GPENCIL_OT_brush_paint); + WM_operatortype_append(GPENCIL_OT_sculpt_paint); /* Editing (Buttons) ------------ */ diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index f60c7892ab5..3941c757a50 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -2012,7 +2012,7 @@ static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode, Deps * (though this is only available in editmode) */ if (p->gpd->flag & GP_DATA_STROKE_EDITMODE) { - if (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_SELECT_MASK) { + if (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) { p->flags |= GP_PAINTFLAG_SELECTMASK; } } diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c index 6cb539a5f60..a0c31b64666 100644 --- a/source/blender/editors/gpencil/gpencil_utils.c +++ b/source/blender/editors/gpencil/gpencil_utils.c @@ -1516,9 +1516,9 @@ static void gp_brush_drawcursor(bContext *C, int x, int y, void *customdata) Object *ob = CTX_data_active_object(C); ARegion *ar = CTX_wm_region(C); - GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt; + GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt; bGPdata *gpd = ED_gpencil_data_get_active(C); - GP_EditBrush_Data *gp_brush = NULL; + GP_Sculpt_Data *gp_brush = NULL; Brush *brush = NULL; Material *ma = NULL; MaterialGPencilStyle *gp_style = NULL; @@ -1599,12 +1599,12 @@ static void gp_brush_drawcursor(bContext *C, int x, int y, void *customdata) /* for sculpt use sculpt brush size */ if (GPENCIL_SCULPT_OR_WEIGHT_MODE(gpd)) { if (gp_brush) { - if ((gp_brush->flag & GP_EDITBRUSH_FLAG_ENABLE_CURSOR) == 0) { + if ((gp_brush->flag & GP_SCULPT_FLAG_ENABLE_CURSOR) == 0) { return; } radius = gp_brush->size; - if (gp_brush->flag & (GP_EDITBRUSH_FLAG_INVERT | GP_EDITBRUSH_FLAG_TMP_INVERT)) { + if (gp_brush->flag & (GP_SCULPT_FLAG_INVERT | GP_SCULPT_FLAG_TMP_INVERT)) { copy_v3_v3(color, gp_brush->curcolor_sub); } else { @@ -1671,7 +1671,7 @@ static void gp_brush_drawcursor(bContext *C, int x, int y, void *customdata) void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata) { Scene *scene = CTX_data_scene(C); - GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt; + GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt; int *lastpost = customdata; if (gset->paintcursor && !enable) { @@ -1700,19 +1700,19 @@ void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata) static void gpencil_verify_brush_type(bContext *C, int newmode) { ToolSettings *ts = CTX_data_tool_settings(C); - GP_BrushEdit_Settings *gset = &ts->gp_sculpt; + GP_Sculpt_Settings *gset = &ts->gp_sculpt; switch (newmode) { case OB_MODE_GPENCIL_SCULPT: - gset->flag &= ~GP_BRUSHEDIT_FLAG_WEIGHT_MODE; - if ((gset->brushtype < 0) || (gset->brushtype >= GP_EDITBRUSH_TYPE_WEIGHT)) { - gset->brushtype = GP_EDITBRUSH_TYPE_PUSH; + gset->flag &= ~GP_SCULPT_SETT_FLAG_WEIGHT_MODE; + if ((gset->brushtype < 0) || (gset->brushtype >= GP_SCULPT_TYPE_WEIGHT)) { + gset->brushtype = GP_SCULPT_TYPE_PUSH; } break; case OB_MODE_GPENCIL_WEIGHT: - gset->flag |= GP_BRUSHEDIT_FLAG_WEIGHT_MODE; - if ((gset->weighttype < GP_EDITBRUSH_TYPE_WEIGHT) || (gset->weighttype >= GP_EDITBRUSH_TYPE_MAX)) { - gset->weighttype = GP_EDITBRUSH_TYPE_WEIGHT; + gset->flag |= GP_SCULPT_SETT_FLAG_WEIGHT_MODE; + if ((gset->weighttype < GP_SCULPT_TYPE_WEIGHT) || (gset->weighttype >= GP_SCULPT_TYPE_MAX)) { + gset->weighttype = GP_SCULPT_TYPE_WEIGHT; } break; default: @@ -1844,7 +1844,9 @@ void ED_gpencil_calc_stroke_uv(Object *ob, bGPDstroke *gps) float factor; /* if image, use texture width */ - if ((gp_style) && (gp_style->sima)) { + if ((gp_style) && (gp_style->stroke_style == GP_STYLE_STROKE_STYLE_TEXTURE) && + (gp_style->sima)) + { factor = gp_style->sima->gen_x; } else if (totlen == 0) { diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 4547aaae5d4..1101c966118 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -111,6 +111,8 @@ void ED_object_parent_clear(struct Object *ob, const int type); void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode); void ED_object_base_activate(struct bContext *C, struct Base *base); void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob); +bool ED_object_base_deselect_all_ex(struct ViewLayer *view_layer, int action, bool *r_any_visible); +bool ED_object_base_deselect_all(struct ViewLayer *view_layer, int action); /* single object duplicate, if (dupflag == 0), fully linked, else it uses the flags given */ struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Base *base, int dupflag); @@ -300,6 +302,15 @@ const struct EnumPropertyItem *ED_object_vgroup_selection_itemf_helper( void ED_object_check_force_modifiers( struct Main *bmain, struct Scene *scene, struct Object *object); +struct Base *ED_object_find_first_by_data_id(struct ViewLayer *view_layer, struct ID *id); + +bool ED_object_jump_to_object( + struct bContext *C, struct Object *ob, + const bool reveal_hidden); +bool ED_object_jump_to_bone( + struct bContext *C, struct Object *ob, const char *bone_name, + const bool reveal_hidden); + /* object_facemap_ops.c */ void ED_object_facemap_face_add(struct Object *ob, struct bFaceMap *fmap, int facenum); void ED_object_facemap_face_remove(struct Object *ob, struct bFaceMap *fmap, int facenum); diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 7adc2d99879..dd17fa6f434 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -166,6 +166,9 @@ void TRANSFORM_GGT_gizmo(struct wmGizmoGroupType *gzgt); void VIEW3D_GGT_xform_cage(struct wmGizmoGroupType *gzgt); void VIEW3D_GGT_xform_shear(struct wmGizmoGroupType *gzgt); +/* *** transform_gizmo_extrude_3d.c *** */ +void VIEW3D_GGT_xform_extrude(struct wmGizmoGroupType *gzgt); + bool ED_widgetgroup_gizmo2d_poll(const struct bContext *C, struct wmGizmoGroupType *gzgt); void ED_widgetgroup_gizmo2d_setup(const struct bContext *C, struct wmGizmoGroup *gzgroup); void ED_widgetgroup_gizmo2d_refresh(const struct bContext *C, struct wmGizmoGroup *gzgroup); diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index 9d82e074415..9b4ee0c8264 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -141,7 +141,7 @@ DEF_ICON_SHADING(TEXTURE) DEF_ICON(ANIM) DEF_ICON_SHADING(WORLD) DEF_ICON(SCENE) -DEF_ICON_BLANK(144) +DEF_ICON(OUTPUT) DEF_ICON_BLANK(145) DEF_ICON_BLANK(146) DEF_ICON(SCRIPT) @@ -235,7 +235,7 @@ DEF_ICON(PARTICLE_DATA) DEF_ICON(LIBRARY_DATA_DIRECT) DEF_ICON_COLLECTION(GROUP) DEF_ICON(ARMATURE_DATA) -DEF_ICON(POSE_DATA) +DEF_ICON(COMMUNITY) DEF_ICON(BONE_DATA) DEF_ICON_MODIFIER(CONSTRAINT) DEF_ICON(SHAPEKEY_DATA) @@ -243,7 +243,7 @@ DEF_ICON_MODIFIER(CONSTRAINT_BONE) DEF_ICON(CAMERA_STEREO) DEF_ICON(PACKAGE) DEF_ICON(UGLYPACKAGE) -DEF_ICON_BLANK(246) +DEF_ICON(EXPERIMENTAL) /* DATA */ DEF_ICON_SHADING(BRUSH_DATA) @@ -341,7 +341,7 @@ DEF_ICON_OBJECT_DATA(OUTLINER_DATA_ARMATURE) DEF_ICON_OBJECT_DATA(OUTLINER_DATA_FONT) DEF_ICON_OBJECT_DATA(OUTLINER_DATA_SURFACE) DEF_ICON_OBJECT_DATA(OUTLINER_DATA_SPEAKER) -DEF_ICON_OBJECT_DATA(OUTLINER_DATA_POSE) +DEF_ICON_BLANK(344) DEF_ICON_BLANK(345) DEF_ICON_OBJECT_DATA(OUTLINER_DATA_GREASEPENCIL) DEF_ICON(GP_SELECT_POINTS) @@ -369,15 +369,15 @@ DEF_ICON(MESH_CYLINDER) DEF_ICON(MESH_TORUS) DEF_ICON(MESH_CONE) DEF_ICON(MESH_CAPSULE) -DEF_ICON_BLANK(372) +DEF_ICON(EMPTY_SINGLE_ARROW) DEF_ICON_SHADING(LIGHT_POINT) DEF_ICON_SHADING(LIGHT_SUN) DEF_ICON_SHADING(LIGHT_SPOT) DEF_ICON_SHADING(LIGHT_HEMI) DEF_ICON_SHADING(LIGHT_AREA) -DEF_ICON_BLANK(278) -DEF_ICON_BLANK(379) -DEF_ICON(META_EMPTY) +DEF_ICON(CUBE) +DEF_ICON(SPHERE) +DEF_ICON(CONE) DEF_ICON(META_PLANE) DEF_ICON(META_CUBE) DEF_ICON(META_BALL) @@ -392,9 +392,9 @@ DEF_ICON(SURFACE_NSURFACE) DEF_ICON(SURFACE_NCYLINDER) DEF_ICON(SURFACE_NSPHERE) DEF_ICON(SURFACE_NTORUS) -DEF_ICON(GP_EMPTY) -DEF_ICON(GP_STROKE) -DEF_ICON_BLANK(397) +DEF_ICON(EMPTY_AXIS) +DEF_ICON(STROKE) +DEF_ICON(EMPTY_ARROWS) DEF_ICON(CURVE_BEZCURVE) DEF_ICON(CURVE_BEZCIRCLE) DEF_ICON(CURVE_NCURVE) @@ -437,9 +437,9 @@ DEF_ICON_BLANK(679) DEF_ICON_BLANK(680) DEF_ICON_BLANK(681) DEF_ICON_BLANK(682) -DEF_ICON_BLANK(683) -DEF_ICON_BLANK(684) -DEF_ICON_BLANK(685) +DEF_ICON(IMAGE_PLANE) +DEF_ICON(IMAGE_BACKGROUND) +DEF_ICON(IMAGE_REFERENCE) /* EMPTY */ DEF_ICON_BLANK(445) @@ -825,7 +825,7 @@ DEF_ICON(FORWARD) DEF_ICON_BLANK(825) DEF_ICON_BLANK(826) DEF_ICON_BLANK(827) -DEF_ICON_BLANK(828) +DEF_ICON(FILE_VOLUME) DEF_ICON(ALEMBIC) DEF_ICON(VOLUME) DEF_ICON(FILE_HIDDEN) diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index d0d2b83f7cc..dd0070b3b37 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -938,7 +938,7 @@ void UI_exit(void); #define UI_ITEM_O_DEPRESS (1 << 9) #define UI_ITEM_R_COMPACT (1 << 10) -#define UI_HEADER_OFFSET ((void)0, 0.2f * UI_UNIT_X) +#define UI_HEADER_OFFSET ((void)0, 0.4f * UI_UNIT_X) /* uiLayoutOperatorButs flags */ enum { diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 0ad7a18b5ac..6fc627d3847 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -988,8 +988,8 @@ static bool ui_but_event_operator_string_from_menu( IDP_AddToGroup(prop_menu, IDP_NewString(mt->idname, "name", sizeof(mt->idname))); if (WM_key_event_operator_string( - C, "WM_OT_call_menu", WM_OP_INVOKE_REGION_WIN, prop_menu, true, - buf, buf_len)) + C, "WM_OT_call_menu", WM_OP_INVOKE_REGION_WIN, prop_menu, true, + buf, buf_len)) { found = true; } @@ -1151,8 +1151,8 @@ static bool ui_but_event_property_operator_string( /* check each until one works... */ for (i = 0; (i < num_ops) && (ctx_toggle_opnames[i]); i++) { if (WM_key_event_operator_string( - C, ctx_toggle_opnames[i], WM_OP_INVOKE_REGION_WIN, prop_path, false, - buf, buf_len)) + C, ctx_toggle_opnames[i], WM_OP_INVOKE_REGION_WIN, prop_path, false, + buf, buf_len)) { found = true; break; @@ -1510,10 +1510,10 @@ static void ui_block_message_subscribe(ARegion *ar, struct wmMsgBus *mbus, uiBlo if (but->rnapoin.type && but->rnaprop) { /* quick check to avoid adding buttons representing a vector, multiple times. */ if ((but_prev && - (but_prev->rnaprop == but->rnaprop) && - (but_prev->rnapoin.type == but->rnapoin.type) && - (but_prev->rnapoin.data == but->rnapoin.data) && - (but_prev->rnapoin.id.data == but->rnapoin.id.data)) == false) + (but_prev->rnaprop == but->rnaprop) && + (but_prev->rnapoin.type == but->rnapoin.type) && + (but_prev->rnapoin.data == but->rnapoin.data) && + (but_prev->rnapoin.id.data == but->rnapoin.id.data)) == false) { /* TODO: could make this into utility function. */ WM_msg_subscribe_rna( @@ -1829,7 +1829,7 @@ bool ui_but_is_float(const uiBut *but) bool ui_but_is_bool(const uiBut *but) { - if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_TOGGLE_N, UI_BTYPE_ICON_TOGGLE, UI_BTYPE_ICON_TOGGLE_N)) + if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_TOGGLE_N, UI_BTYPE_ICON_TOGGLE, UI_BTYPE_ICON_TOGGLE_N, UI_BTYPE_TAB)) return true; if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_BOOLEAN) @@ -3019,8 +3019,8 @@ void ui_but_update_ex(uiBut *but, const bool validate) EnumPropertyItem item; if (RNA_property_enum_item_from_value_gettexted( - but->block->evil_C, - &but->rnapoin, but->rnaprop, value_enum, &item)) + but->block->evil_C, + &but->rnapoin, but->rnaprop, value_enum, &item)) { size_t slen = strlen(item.name); ui_but_string_free_internal(but); diff --git a/source/blender/editors/interface/interface_context_menu.c b/source/blender/editors/interface/interface_context_menu.c index 03d941c2387..0ffc97444e1 100644 --- a/source/blender/editors/interface/interface_context_menu.c +++ b/source/blender/editors/interface/interface_context_menu.c @@ -361,7 +361,12 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but) uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_DEFAULT); } - if (but->type == UI_BTYPE_TAB) { + const bool is_disabled = but->flag & UI_BUT_DISABLED; + + if (is_disabled) { + /* Suppress editing commands. */ + } + else if (but->type == UI_BTYPE_TAB) { uiButTab *tab = (uiButTab *)but; if (tab->menu) { UI_menutype_draw(C, tab->menu, layout); @@ -639,6 +644,17 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but) } } + /* Pointer properties and string properties with prop_search support jumping to target object/bone. */ + if (but->rnapoin.data && but->rnaprop) { + const PropertyType type = RNA_property_type(but->rnaprop); + + if ((type == PROP_POINTER) || (type == PROP_STRING && but->type == UI_BTYPE_SEARCH_MENU && but->search_func == ui_rna_collection_search_cb)) { + uiItemO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Jump To Target"), + ICON_NONE, "UI_OT_jump_to_target_button"); + uiItemS(layout); + } + } + /* Favorites Menu */ if (ui_but_is_user_menu_compatible(C, but)) { uiBlock *block = uiLayoutGetBlock(layout); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index fffc28d1cdf..eaba2fbbc95 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1721,7 +1721,7 @@ static bool ui_but_drag_init( /* prevent other WM gestures to start while we try to drag */ WM_gestures_remove(C); - if (ABS(data->dragstartx - event->x) + ABS(data->dragstarty - event->y) > U.dragthreshold) { + if (ABS(data->dragstartx - event->x) + ABS(data->dragstarty - event->y) > U.dragthreshold * U.dpi_fac) { button_activate_state(C, but, BUTTON_STATE_EXIT); data->cancel = true; @@ -2174,8 +2174,8 @@ static bool ui_but_has_array_value(uiBut *but) { return (but->rnapoin.data && but->rnaprop && ELEM(RNA_property_subtype(but->rnaprop), PROP_COLOR, PROP_TRANSLATION, PROP_DIRECTION, - PROP_VELOCITY, PROP_ACCELERATION, PROP_MATRIX, PROP_EULER, PROP_QUATERNION, PROP_AXISANGLE, - PROP_XYZ, PROP_XYZ_LENGTH, PROP_COLOR_GAMMA, PROP_COORDS)); + PROP_VELOCITY, PROP_ACCELERATION, PROP_MATRIX, PROP_EULER, PROP_QUATERNION, PROP_AXISANGLE, + PROP_XYZ, PROP_XYZ_LENGTH, PROP_COLOR_GAMMA, PROP_COORDS)); } static void ui_but_paste_normalized_vector(bContext *C, uiBut *but, char *buf_paste) @@ -3882,6 +3882,15 @@ static bool ui_but_is_mouse_over_icon_extra(const ARegion *region, uiBut *but, c static int ui_do_but_TAB(bContext *C, uiBlock *block, uiBut *but, uiHandleButtonData *data, const wmEvent *event) { +#ifdef USE_DRAG_TOGGLE + { + int retval; + if (ui_do_but_ANY_drag_toggle(C, but, data, event, &retval)) { + return retval; + } + } +#endif + if (data->state == BUTTON_STATE_HIGHLIGHT) { const int rna_type = but->rnaprop ? RNA_property_type(but->rnaprop) : 0; @@ -3894,7 +3903,7 @@ static int ui_do_but_TAB(bContext *C, uiBlock *block, uiBut *but, uiHandleButton button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING); return WM_UI_HANDLER_BREAK; } - else if (ELEM(event->type, LEFTMOUSE, PADENTER, RETKEY) && (event->val == KM_CLICK)) { + else if (ELEM(event->type, LEFTMOUSE, PADENTER, RETKEY) && (event->val == KM_PRESS)) { button_activate_state(C, but, BUTTON_STATE_EXIT); return WM_UI_HANDLER_BREAK; } @@ -6614,6 +6623,17 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, const wmEvent * return WM_UI_HANDLER_BREAK; } + /* handle menu */ + if ((event->type == RIGHTMOUSE) && + !IS_EVENT_MOD(event, shift, ctrl, alt, oskey) && + (event->val == KM_PRESS)) + { + /* RMB has two options now */ + if (ui_popup_context_menu_for_button(C, but)) { + return WM_UI_HANDLER_BREAK; + } + } + if (is_disabled) { return WM_UI_HANDLER_CONTINUE; } @@ -6627,16 +6647,6 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, const wmEvent * if (event->type == EVT_DROP) { ui_but_drop(C, event, but, data); } - /* handle menu */ - else if ((event->type == RIGHTMOUSE) && - !IS_EVENT_MOD(event, shift, ctrl, alt, oskey) && - (event->val == KM_PRESS)) - { - /* RMB has two options now */ - if (ui_popup_context_menu_for_button(C, but)) { - return WM_UI_HANDLER_BREAK; - } - } } if (but->flag & UI_BUT_DISABLED) { @@ -8062,38 +8072,38 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but) break; } case MOUSEMOVE: - { - /* deselect the button when moving the mouse away */ - /* also de-activate for buttons that only show highlights */ - if (ui_but_contains_point_px(ar, but, event->x, event->y)) { - - /* Drag on a hold button (used in the toolbar) now opens it immediately. */ - if (data->hold_action_timer) { - if (but->flag & UI_SELECT) { - if ((abs(event->x - event->prevx)) > 2 || - (abs(event->y - event->prevy)) > 2) - { - WM_event_remove_timer(data->wm, data->window, data->hold_action_timer); - data->hold_action_timer = WM_event_add_timer(data->wm, data->window, TIMER, 0.0f); - } + { + /* deselect the button when moving the mouse away */ + /* also de-activate for buttons that only show highlights */ + if (ui_but_contains_point_px(ar, but, event->x, event->y)) { + + /* Drag on a hold button (used in the toolbar) now opens it immediately. */ + if (data->hold_action_timer) { + if (but->flag & UI_SELECT) { + if ((abs(event->x - event->prevx)) > 2 || + (abs(event->y - event->prevy)) > 2) + { + WM_event_remove_timer(data->wm, data->window, data->hold_action_timer); + data->hold_action_timer = WM_event_add_timer(data->wm, data->window, TIMER, 0.0f); } } + } - if (!(but->flag & UI_SELECT)) { - but->flag |= (UI_SELECT | UI_ACTIVE); - data->cancel = false; - ED_region_tag_redraw(data->region); - } + if (!(but->flag & UI_SELECT)) { + but->flag |= (UI_SELECT | UI_ACTIVE); + data->cancel = false; + ED_region_tag_redraw(data->region); } - else { - if (but->flag & UI_SELECT) { - but->flag &= ~(UI_SELECT | UI_ACTIVE); - data->cancel = true; - ED_region_tag_redraw(data->region); - } + } + else { + if (but->flag & UI_SELECT) { + but->flag &= ~(UI_SELECT | UI_ACTIVE); + data->cancel = true; + ED_region_tag_redraw(data->region); } } break; + } default: /* otherwise catch mouse release event */ ui_do_button(C, block, but, event); @@ -8690,7 +8700,7 @@ float ui_block_calc_pie_segment(uiBlock *block, const float event_xy[2]) len = normalize_v2_v2(block->pie_data.pie_dir, seg2); - if (len < U.pie_menu_threshold * U.pixelsize) + if (len < U.pie_menu_threshold * U.dpi_fac) block->pie_data.flags |= UI_PIE_INVALID_DIR; else block->pie_data.flags &= ~UI_PIE_INVALID_DIR; @@ -9408,7 +9418,7 @@ static int ui_pie_handler(bContext *C, const wmEvent *event, uiPopupBlockHandle but = ui_but_find_active_in_region(menu->region); if (but && (U.pie_menu_confirm > 0) && - (dist >= U.pie_menu_threshold + U.pie_menu_confirm)) + (dist >= U.dpi_fac * (U.pie_menu_threshold + U.pie_menu_confirm))) { if (but) return ui_but_pie_menu_apply(C, menu, but, true); @@ -9435,7 +9445,7 @@ static int ui_pie_handler(bContext *C, const wmEvent *event, uiPopupBlockHandle /* here instead, we use the offset location to account for the initial direction timeout */ if ((U.pie_menu_confirm > 0) && - (dist >= U.pie_menu_threshold + U.pie_menu_confirm)) + (dist >= U.dpi_fac * (U.pie_menu_threshold + U.pie_menu_confirm))) { block->pie_data.flags |= UI_PIE_GESTURE_END_WAIT; copy_v2_v2(block->pie_data.last_pos, event_xy); diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 424f5004bf0..5e8b420e018 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -268,7 +268,7 @@ static int ui_item_fit(int item, int pos, int all, int available, bool is_last, static int ui_layout_vary_direction(uiLayout *layout) { return ((ELEM(layout->root->type, UI_LAYOUT_HEADER, UI_LAYOUT_PIEMENU) || - (layout->alignment != UI_LAYOUT_ALIGN_EXPAND)) ? + (layout->alignment != UI_LAYOUT_ALIGN_EXPAND)) ? UI_ITEM_VARY_X : UI_ITEM_VARY_Y); } @@ -2533,8 +2533,8 @@ void uiItemMenuEnumO_ptr( { char keybuf[128]; if (WM_key_event_operator_string( - C, ot->idname, layout->root->opcontext, NULL, false, - keybuf, sizeof(keybuf))) + C, ot->idname, layout->root->opcontext, NULL, false, + keybuf, sizeof(keybuf))) { ui_but_add_shortcut(but, keybuf, false); } @@ -2957,7 +2957,7 @@ static void ui_litem_layout_root_radial(uiLayout *litem) ui_item_size(item, &itemw, &itemh); - ui_item_position(item, x - itemw / 2, y + U.pixelsize * (U.pie_menu_threshold + 9.0f), itemw, itemh); + ui_item_position(item, x - itemw / 2, y + U.dpi_fac * (U.pie_menu_threshold + 9.0f), itemw, itemh); } } diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index d2bed210f9c..cc609216e9a 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -31,6 +31,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_armature_types.h" #include "DNA_screen_types.h" #include "DNA_text_types.h" /* for UI_OT_reports_to_text */ #include "DNA_object_types.h" /* for OB_DATA_SUPPORT_ID */ @@ -65,6 +66,7 @@ #include "WM_api.h" #include "WM_types.h" +#include "ED_object.h" #include "ED_paint.h" /* only for UI_OT_editsource */ @@ -802,6 +804,153 @@ static void UI_OT_copy_to_selected_button(wmOperatorType *ot) RNA_def_boolean(ot->srna, "all", true, "All", "Copy to selected all elements of the array"); } + +/* -------------------------------------------------------------------- */ +/** \name Jump to Target Operator + * \{ */ + +/** Jump to the object or bone referenced by the pointer, or check if it is possible. */ +static bool jump_to_target_ptr(bContext *C, PointerRNA ptr, const bool poll) +{ + if (RNA_pointer_is_null(&ptr)) { + return false; + } + + /* Verify pointer type. */ + char bone_name[MAXBONENAME]; + const StructRNA *target_type = NULL; + + if (ELEM(ptr.type, &RNA_EditBone, &RNA_PoseBone, &RNA_Bone)) { + RNA_string_get(&ptr, "name", bone_name); + if (bone_name[0] != '\0') { + target_type = &RNA_Bone; + } + } + else if (RNA_struct_is_a(ptr.type, &RNA_Object)) { + target_type = &RNA_Object; + } + + if (target_type == NULL) { + return false; + } + + /* Find the containing Object. */ + ViewLayer *view_layer = CTX_data_view_layer(C); + Base *base = NULL; + const short id_type = GS(((ID *)ptr.id.data)->name); + if (id_type == ID_OB) { + base = BKE_view_layer_base_find(view_layer, ptr.id.data); + } + else if (OB_DATA_SUPPORT_ID(id_type)) { + base = ED_object_find_first_by_data_id(view_layer, ptr.id.data); + } + + bool ok = false; + if ((base == NULL) || + ((target_type == &RNA_Bone) && (base->object->type != OB_ARMATURE))) + { + /* pass */ + } + else if (poll) { + ok = true; + } + else { + /* Make optional. */ + const bool reveal_hidden = true; + /* Select and activate the target. */ + if (target_type == &RNA_Bone) { + ok = ED_object_jump_to_bone(C, base->object, bone_name, reveal_hidden); + } + else if (target_type == &RNA_Object) { + ok = ED_object_jump_to_object(C, base->object, reveal_hidden); + } + else { + BLI_assert(0); + } + } + return ok; +} + +/** + * Jump to the object or bone referred to by the current UI field value. + * + * \note quite heavy for a poll callback, but the operator is only + * used as a right click menu item for certain UI field types, and + * this will fail quickly if the context is completely unsuitable. + */ +static bool jump_to_target_button(bContext *C, bool poll) +{ + PointerRNA ptr, target_ptr; + PropertyRNA *prop; + int index; + + UI_context_active_but_prop_get(C, &ptr, &prop, &index); + + /* If there is a valid property... */ + if (ptr.data && prop) { + const PropertyType type = RNA_property_type(prop); + + /* For pointer properties, use their value directly. */ + if (type == PROP_POINTER) { + target_ptr = RNA_property_pointer_get(&ptr, prop); + + return jump_to_target_ptr(C, target_ptr, poll); + } + /* For string properties with prop_search, look up the search collection item. */ + else if (type == PROP_STRING) { + const uiBut *but = UI_context_active_but_get(C); + + if (but->type == UI_BTYPE_SEARCH_MENU && but->search_func == ui_rna_collection_search_cb) { + uiRNACollectionSearch *coll_search = but->search_arg; + + char str_buf[MAXBONENAME]; + char *str_ptr = RNA_property_string_get_alloc(&ptr, prop, str_buf, sizeof(str_buf), NULL); + + int found = RNA_property_collection_lookup_string(&coll_search->search_ptr, coll_search->search_prop, str_ptr, &target_ptr); + + if (str_ptr != str_buf) { + MEM_freeN(str_ptr); + } + + if (found) { + return jump_to_target_ptr(C, target_ptr, poll); + } + } + } + } + + return false; +} + +static bool jump_to_target_button_poll(bContext *C) +{ + return jump_to_target_button(C, true); +} + +static int jump_to_target_button_exec(bContext *C, wmOperator *UNUSED(op)) +{ + bool success = jump_to_target_button(C, false); + + return (success) ? OPERATOR_FINISHED : OPERATOR_CANCELLED; +} + +static void UI_OT_jump_to_target_button(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Jump To Target"; + ot->idname = "UI_OT_jump_to_target_button"; + ot->description = "Switch to the target object or bone"; + + /* callbacks */ + ot->poll = jump_to_target_button_poll; + ot->exec = jump_to_target_button_exec; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +/** \} */ + /* Reports to Textblock Operator ------------------------ */ /* FIXME: this is just a temporary operator so that we can see all the reports somewhere @@ -1410,6 +1559,7 @@ void ED_operatortypes_ui(void) WM_operatortype_append(UI_OT_override_type_set_button); WM_operatortype_append(UI_OT_override_remove_button); WM_operatortype_append(UI_OT_copy_to_selected_button); + WM_operatortype_append(UI_OT_jump_to_target_button); WM_operatortype_append(UI_OT_reports_to_textblock); /* XXX: temp? */ WM_operatortype_append(UI_OT_drop_color); #ifdef WITH_PYTHON diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index 4662d76a5e1..3197c4a2cbf 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -1993,12 +1993,6 @@ void UI_panel_category_draw_all(ARegion *ar, const char *category_id_active) const bool is_active = STREQ(category_id, category_id_active); -#ifdef DEBUG - if (STREQ(category_id, PNL_CATEGORY_FALLBACK)) { - printf("WARNING: Panel has no 'bl_category', script needs updating!\n"); - } -#endif - GPU_blend(true); #ifdef USE_FLAT_INACTIVE diff --git a/source/blender/editors/interface/interface_region_color_picker.c b/source/blender/editors/interface/interface_region_color_picker.c index afa3486cf6c..a99bcb2b73c 100644 --- a/source/blender/editors/interface/interface_region_color_picker.c +++ b/source/blender/editors/interface/interface_region_color_picker.c @@ -549,8 +549,8 @@ static void ui_block_colorpicker( UI_but_func_set(bt, ui_colorpicker_hex_rna_cb, bt, hexcol); bt->custom_data = cpicker; uiDefBut( - block, UI_BTYPE_LABEL, 0, IFACE_("(Gamma Corrected)"), 0, yco - UI_UNIT_Y, - butwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); + block, UI_BTYPE_LABEL, 0, IFACE_("(Gamma Corrected)"), 0, yco - UI_UNIT_Y, + butwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); ui_rgb_to_color_picker_v(rgb_gamma, hsv); diff --git a/source/blender/editors/interface/interface_region_menu_pie.c b/source/blender/editors/interface/interface_region_menu_pie.c index 6887235f5db..44effc8c097 100644 --- a/source/blender/editors/interface/interface_region_menu_pie.c +++ b/source/blender/editors/interface/interface_region_menu_pie.c @@ -105,7 +105,7 @@ static float ui_pie_menu_title_width(const char *name, int icon) { const uiFontStyle *fstyle = UI_FSTYLE_WIDGET; return (UI_fontstyle_string_width(fstyle, name) + - (UI_UNIT_X * (1.50f + (icon ? 0.25f : 0.0f)))); + (UI_UNIT_X * (1.50f + (icon ? 0.25f : 0.0f)))); } uiPieMenu *UI_pie_menu_begin(struct bContext *C, const char *title, int icon, const wmEvent *event) @@ -152,15 +152,9 @@ uiPieMenu *UI_pie_menu_begin(struct bContext *C, const char *title, int icon, co pie->layout = UI_block_layout(pie->block_radial, UI_LAYOUT_VERTICAL, UI_LAYOUT_PIEMENU, 0, 0, 200, 0, 0, style); - /* Open from where we started dragging. */ - if (event->val == KM_CLICK_DRAG) { - pie->mx = event->prevclickx; - pie->my = event->prevclicky; - } - else { - pie->mx = event->x; - pie->my = event->y; - } + /* Note event->x/y is where we started dragging in case of KM_CLICK_DRAG. */ + pie->mx = event->x; + pie->my = event->y; /* create title button */ if (title[0]) { diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c index 6bdcdf57f47..b8cbf7950b7 100644 --- a/source/blender/editors/interface/interface_region_tooltip.c +++ b/source/blender/editors/interface/interface_region_tooltip.c @@ -500,10 +500,10 @@ static uiTooltipData *ui_tooltip_data_from_tool(bContext *C, uiBut *but, bool is { /* Generate keymap in order to inspect it. * Note, we could make a utility to avoid the keymap generation part of this. */ - const char *expr_imports[] = {"bpy", "bl_ui", NULL}; + const char *expr_imports[] = {"bpy", "bl_keymap_utils", "bl_keymap_utils.keymap_from_toolbar", NULL}; const char *expr = ( "getattr(" - "bl_ui.space_toolsystem_common.keymap_from_context(" + "bl_keymap_utils.keymap_from_toolbar.generate(" "bpy.context, " "bpy.context.space_data.type), " "'as_pointer', lambda: 0)()"); @@ -897,22 +897,20 @@ static uiTooltipData *ui_tooltip_data_from_gizmo(bContext *C, wmGizmo *gz) /* Shortcut */ { - bool found = false; IDProperty *prop = gzop->ptr.data; char buf[128]; if (WM_key_event_operator_string( C, gzop->type->idname, WM_OP_INVOKE_DEFAULT, prop, true, buf, ARRAY_SIZE(buf))) { - found = true; + uiTooltipField *field = text_field_add( + data, &(uiTooltipFormat){ + .style = UI_TIP_STYLE_NORMAL, + .color_id = UI_TIP_LC_VALUE, + .is_pad = true, + }); + field->text = BLI_sprintfN(TIP_("Shortcut: %s"), buf); } - uiTooltipField *field = text_field_add( - data, &(uiTooltipFormat){ - .style = UI_TIP_STYLE_NORMAL, - .color_id = UI_TIP_LC_VALUE, - .is_pad = true, - }); - field->text = BLI_sprintfN(TIP_("Shortcut: %s"), found ? buf : "None"); } } } diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 738da4184b7..d4f6933693e 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -318,7 +318,8 @@ void UI_fontstyle_draw_simple_backdrop( float color[4] = { col_bg[0], col_bg[1], col_bg[2], 0.5f }; UI_draw_roundbox_corner_set(UI_CNR_ALL); - UI_draw_roundbox_aa(true, + UI_draw_roundbox_aa( + true, x - margin, (y + decent) - margin, x + width + margin, @@ -529,10 +530,11 @@ void uiStyleInit(void) /* Set default flags based on UI preferences (not render fonts) */ { - int flag_disable = BLF_MONOCHROME | - BLF_HINTING_NONE | - BLF_HINTING_SLIGHT | - BLF_HINTING_FULL; + int flag_disable = ( + BLF_MONOCHROME | + BLF_HINTING_NONE | + BLF_HINTING_SLIGHT | + BLF_HINTING_FULL); int flag_enable = 0; if (U.text_render & USER_TEXT_HINTING_NONE) { diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 5bdf8f45832..5b9f9b1faf3 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -993,14 +993,14 @@ void uiTemplateIDPreview( } void uiTemplateGpencilColorPreview( - uiLayout *layout, bContext *C, PointerRNA *ptr, const char *propname, - int rows, int cols, float scale, int filter) + uiLayout *layout, bContext *C, PointerRNA *ptr, const char *propname, + int rows, int cols, float scale, int filter) { ui_template_id( - layout, C, ptr, propname, - NULL, NULL, NULL, - UI_ID_BROWSE | UI_ID_PREVIEWS | UI_ID_DELETE, - rows, cols, filter, false, scale < 0.5f ? 0.5f : scale, false, false); + layout, C, ptr, propname, + NULL, NULL, NULL, + UI_ID_BROWSE | UI_ID_PREVIEWS | UI_ID_DELETE, + rows, cols, filter, false, scale < 0.5f ? 0.5f : scale, false, false); } /** @@ -1355,7 +1355,7 @@ static int modifier_is_simulation(ModifierData *md) { /* Physic Tab */ if (ELEM(md->type, eModifierType_Cloth, eModifierType_Collision, eModifierType_Fluidsim, eModifierType_Smoke, - eModifierType_Softbody, eModifierType_Surface, eModifierType_DynamicPaint)) + eModifierType_Softbody, eModifierType_Surface, eModifierType_DynamicPaint)) { return 1; } @@ -1533,7 +1533,7 @@ static uiLayout *draw_modifier( UI_block_lock_set(block, ob && ID_IS_LINKED(ob), ERROR_LIBDATA_MESSAGE); if (!ELEM(md->type, eModifierType_Fluidsim, eModifierType_Softbody, eModifierType_ParticleSystem, - eModifierType_Cloth, eModifierType_Smoke)) + eModifierType_Cloth, eModifierType_Smoke)) { uiItemO(row, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy"), ICON_NONE, "OBJECT_OT_modifier_copy"); @@ -1636,8 +1636,8 @@ static uiLayout *gpencil_draw_modifier( /* mode enabling buttons */ UI_block_align_begin(block); - uiItemR(row, &ptr, "show_render", 0, "", ICON_NONE); - uiItemR(row, &ptr, "show_viewport", 0, "", ICON_NONE); + uiItemR(row, &ptr, "show_render", 0, "", ICON_NONE); + uiItemR(row, &ptr, "show_viewport", 0, "", ICON_NONE); if (mti->flags & eGpencilModifierTypeFlag_SupportsEditmode) { sub = uiLayoutRow(row, true); @@ -1675,7 +1675,7 @@ static uiLayout *gpencil_draw_modifier( uiItemEnumO(sub, "OBJECT_OT_gpencil_modifier_apply", CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Apply"), 0, "apply_as", MODIFIER_APPLY_DATA); uiItemO(row, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy"), ICON_NONE, - "OBJECT_OT_gpencil_modifier_copy"); + "OBJECT_OT_gpencil_modifier_copy"); /* result is the layout block inside the box, that we return so that modifier settings can be drawn */ result = uiLayoutColumn(box, false); @@ -1726,8 +1726,9 @@ uiLayout *uiTemplateGpencilModifier(uiLayout *layout, bContext *UNUSED(C), Point /************************ Shader FX Template *************************/ -static uiLayout *gpencil_draw_shaderfx(uiLayout *layout, Object *ob, - ShaderFxData *md) +static uiLayout *gpencil_draw_shaderfx( + uiLayout *layout, Object *ob, + ShaderFxData *md) { const ShaderFxTypeInfo *mti = BKE_shaderfxType_getInfo(md->type); PointerRNA ptr; @@ -2295,6 +2296,110 @@ static void rna_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg)) RNA_property_update(C, &cb->ptr, cb->prop); } +enum { + CB_FUNC_FLIP, + CB_FUNC_DISTRIBUTE_LR, + CB_FUNC_DISTRIBUTE_EVENLY, + CB_FUNC_RESET, +}; + +static void colorband_flip_cb(bContext *C, ColorBand *coba) +{ + CBData data_tmp[MAXCOLORBAND]; + + int a; + + for (a = 0; a < coba->tot; a++) { + data_tmp[a] = coba->data[coba->tot - (a + 1)]; + } + for (a = 0; a < coba->tot; a++) { + data_tmp[a].pos = 1.0f - data_tmp[a].pos; + coba->data[a] = data_tmp[a]; + } + + /* may as well flip the cur*/ + coba->cur = coba->tot - (coba->cur + 1); + + ED_undo_push(C, "Flip Color Ramp"); +} + +static void colorband_distribute_cb(bContext *C, ColorBand *coba, bool evenly) +{ + if (coba->tot > 1) { + int a; + int tot = evenly ? coba->tot - 1 : coba->tot; + float gap = 1.0f / tot; + float pos = 0.0f; + for (a = 0; a < coba->tot; a++) { + coba->data[a].pos = pos; + pos += gap; + } + ED_undo_push(C, evenly ? "Distribute Stops Evenly" : "Distribute Stops from Left"); + } +} + +static void colorband_tools_dofunc(bContext *C, void *coba_v, int event) +{ + ColorBand *coba = coba_v; + + switch (event) { + case CB_FUNC_FLIP: + colorband_flip_cb(C, coba); + break; + case CB_FUNC_DISTRIBUTE_LR: + colorband_distribute_cb(C, coba, false); + break; + case CB_FUNC_DISTRIBUTE_EVENLY: + colorband_distribute_cb(C, coba, true); + break; + case CB_FUNC_RESET: + BKE_colorband_init(coba, true); + ED_undo_push(C, "Reset Color Ramp"); + break; + } + ED_region_tag_redraw(CTX_wm_region(C)); +} + +static uiBlock *colorband_tools_func( + bContext *C, ARegion *ar, void *coba_v) +{ + ColorBand *coba = coba_v; + uiBlock *block; + short yco = 0, menuwidth = 10 * UI_UNIT_X; + + block = UI_block_begin(C, ar, __func__, UI_EMBOSS); + UI_block_func_butmenu_set(block, colorband_tools_dofunc, coba); + + { + uiBut *but; + uiDefIconTextBut( + block, UI_BTYPE_BUT_MENU, 1, ICON_BLANK1, + IFACE_("Flip Color Ramp"), 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y, + NULL, 0.0, 0.0, 0, CB_FUNC_FLIP, ""); + uiDefIconTextBut( + block, UI_BTYPE_BUT_MENU, 1, ICON_BLANK1, + IFACE_("Distribute Stops from Left"), 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y, + NULL, 0.0, 0.0, 0, CB_FUNC_DISTRIBUTE_LR, ""); + uiDefIconTextBut( + block, UI_BTYPE_BUT_MENU, 1, ICON_BLANK1, + IFACE_("Distribute Stops Evenly"), 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y, + NULL, 0.0, 0.0, 0, CB_FUNC_DISTRIBUTE_EVENLY, ""); + but = uiDefIconTextButO( + block, UI_BTYPE_BUT_MENU, "UI_OT_eyedropper_colorband", WM_OP_INVOKE_DEFAULT, ICON_EYEDROPPER, + IFACE_("Eyedropper"), 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y, + ""); + but->custom_data = coba; + uiDefIconTextBut( + block, UI_BTYPE_BUT_MENU, 1, ICON_BLANK1, IFACE_("Reset Color Ramp"), + 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, CB_FUNC_RESET, ""); + } + + UI_block_direction_set(block, UI_DIR_DOWN); + UI_block_bounds_set_text(block, 3.0f * UI_UNIT_X); + + return block; +} + static void colorband_add_cb(bContext *C, void *cb_v, void *coba_v) { ColorBand *coba = coba_v; @@ -2307,7 +2412,7 @@ static void colorband_add_cb(bContext *C, void *cb_v, void *coba_v) if (BKE_colorband_element_add(coba, pos)) { rna_update_cb(C, cb_v, NULL); - ED_undo_push(C, "Add colorband"); + ED_undo_push(C, "Add Color Ramp Stop"); } } @@ -2316,34 +2421,11 @@ static void colorband_del_cb(bContext *C, void *cb_v, void *coba_v) ColorBand *coba = coba_v; if (BKE_colorband_element_remove(coba, coba->cur)) { - ED_undo_push(C, "Delete colorband"); + ED_undo_push(C, "Delete Color Ramp Stop"); rna_update_cb(C, cb_v, NULL); } } -static void colorband_flip_cb(bContext *C, void *cb_v, void *coba_v) -{ - CBData data_tmp[MAXCOLORBAND]; - - ColorBand *coba = coba_v; - int a; - - for (a = 0; a < coba->tot; a++) { - data_tmp[a] = coba->data[coba->tot - (a + 1)]; - } - for (a = 0; a < coba->tot; a++) { - data_tmp[a].pos = 1.0f - data_tmp[a].pos; - coba->data[a] = data_tmp[a]; - } - - /* may as well flip the cur*/ - coba->cur = coba->tot - (coba->cur + 1); - - ED_undo_push(C, "Flip colorband"); - - rna_update_cb(C, cb_v, NULL); -} - static void colorband_update_cb(bContext *UNUSED(C), void *bt_v, void *coba_v) { uiBut *bt = bt_v; @@ -2376,8 +2458,7 @@ static void colorband_buttons_layout( bt = uiDefIconTextBut( block, UI_BTYPE_BUT, 0, ICON_ADD, "", 0, 0, 2.0f * unit, UI_UNIT_Y, NULL, - 0, 0, 0, 0, TIP_("Add a new color stop to the colorband")); - + 0, 0, 0, 0, TIP_("Add a new color stop to the color ramp")); UI_but_funcN_set(bt, colorband_add_cb, MEM_dupallocN(cb), coba); bt = uiDefIconTextBut( @@ -2385,14 +2466,10 @@ static void colorband_buttons_layout( NULL, 0, 0, 0, 0, TIP_("Delete the active position")); UI_but_funcN_set(bt, colorband_del_cb, MEM_dupallocN(cb), coba); - bt = uiDefIconTextBut( - block, UI_BTYPE_BUT, 0, ICON_ARROW_LEFTRIGHT, "", xs + 4.0f * unit, ys + UI_UNIT_Y, 2.0f * unit, UI_UNIT_Y, - NULL, 0, 0, 0, 0, TIP_("Flip the color ramp")); - UI_but_funcN_set(bt, colorband_flip_cb, MEM_dupallocN(cb), coba); - - bt = uiDefIconButO(block, UI_BTYPE_BUT, "UI_OT_eyedropper_colorband", WM_OP_INVOKE_DEFAULT, ICON_EYEDROPPER, xs + 6.0f * unit, ys + UI_UNIT_Y, UI_UNIT_X, UI_UNIT_Y, NULL); - bt->custom_data = coba; - bt->func_argN = MEM_dupallocN(cb); + bt = uiDefIconBlockBut( + block, colorband_tools_func, coba, 0, ICON_DOWNARROW_HLT, + xs + 4.0f * unit, ys + UI_UNIT_Y, 2.0f * unit, UI_UNIT_Y, TIP_("Tools")); + UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), coba); UI_block_align_end(block); UI_block_emboss_set(block, UI_EMBOSS); @@ -2921,8 +2998,8 @@ static uiBlock *curvemap_tools_func( 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, reset_mode, ""); } - UI_block_direction_set(block, UI_DIR_RIGHT); - UI_block_bounds_set_text(block, 50); + UI_block_direction_set(block, UI_DIR_DOWN); + UI_block_bounds_set_text(block, 3.0f * UI_UNIT_X); return block; } @@ -3507,7 +3584,7 @@ static void uilist_draw_filter_default(struct uiList *ui_list, struct bContext * subrow = uiLayoutRow(row, true); uiItemR(subrow, &listptr, "use_filter_sort_alpha", UI_ITEM_R_TOGGLE | UI_ITEM_R_ICON_ONLY, "", ICON_NONE); uiItemR(subrow, &listptr, "use_filter_sort_reverse", UI_ITEM_R_TOGGLE | UI_ITEM_R_ICON_ONLY, "", - (ui_list->filter_sort_flag & UILST_FLT_SORT_REVERSE) ? ICON_SORT_DESC : ICON_SORT_ASC); + (ui_list->filter_sort_flag & UILST_FLT_SORT_REVERSE) ? ICON_SORT_DESC : ICON_SORT_ASC); } } @@ -4224,8 +4301,8 @@ static void operator_search_cb(const bContext *C, void *UNUSED(arg), const char /* check for hotkey */ if (len < sizeof(name) - 6) { if (WM_key_event_operator_string( - C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, true, - &name[len + 1], sizeof(name) - len - 1)) + C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, true, + &name[len + 1], sizeof(name) - len - 1)) { name[len] = UI_SEP_CHAR; } diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index ea588c703c6..0ffc40bdf9d 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -4566,8 +4566,8 @@ void ui_draw_pie_center(uiBlock *block) float *pie_dir = block->pie_data.pie_dir; - float pie_radius_internal = U.pixelsize * U.pie_menu_threshold; - float pie_radius_external = U.pixelsize * (U.pie_menu_threshold + 7.0f); + float pie_radius_internal = U.dpi_fac * U.pie_menu_threshold; + float pie_radius_external = U.dpi_fac * (U.pie_menu_threshold + 7.0f); int subd = 40; @@ -4609,8 +4609,8 @@ void ui_draw_pie_center(uiBlock *block) immUnbindProgram(); if (U.pie_menu_confirm > 0 && !(block->pie_data.flags & (UI_PIE_INVALID_DIR | UI_PIE_CLICK_STYLE))) { - float pie_confirm_radius = U.pixelsize * (pie_radius_internal + U.pie_menu_confirm); - float pie_confirm_external = U.pixelsize * (pie_radius_internal + U.pie_menu_confirm + 7.0f); + float pie_confirm_radius = U.dpi_fac * (pie_radius_internal + U.pie_menu_confirm); + float pie_confirm_external = U.dpi_fac * (pie_radius_internal + U.pie_menu_confirm + 7.0f); const char col[4] = {btheme->tui.wcol_pie_menu.text_sel[0], btheme->tui.wcol_pie_menu.text_sel[1], diff --git a/source/blender/editors/mesh/CMakeLists.txt b/source/blender/editors/mesh/CMakeLists.txt index 5e014d3ef25..4cefbf21c24 100644 --- a/source/blender/editors/mesh/CMakeLists.txt +++ b/source/blender/editors/mesh/CMakeLists.txt @@ -48,7 +48,6 @@ set(SRC editmesh_bevel.c editmesh_bisect.c editmesh_extrude.c - editmesh_extrude_gizmo.c editmesh_extrude_screw.c editmesh_extrude_spin.c editmesh_extrude_spin_gizmo.c diff --git a/source/blender/editors/mesh/editmesh_extrude.c b/source/blender/editors/mesh/editmesh_extrude.c index 714ff10f6ca..a25b296830a 100644 --- a/source/blender/editors/mesh/editmesh_extrude.c +++ b/source/blender/editors/mesh/editmesh_extrude.c @@ -54,8 +54,6 @@ #include "mesh_intern.h" /* own include */ -#define USE_GIZMO - /* -------------------------------------------------------------------- */ /** \name Extrude Internal Utilities * \{ */ @@ -502,10 +500,6 @@ void MESH_OT_extrude_context(wmOperatorType *ot) RNA_def_boolean(ot->srna, "use_normal_flip", false, "Flip Normals", ""); Transform_Properties(ot, P_NO_DEFAULTS | P_MIRROR_DUMMY); - -#ifdef USE_GIZMO - WM_gizmogrouptype_append(MESH_GGT_extrude); -#endif } /** \} */ diff --git a/source/blender/editors/mesh/editmesh_polybuild.c b/source/blender/editors/mesh/editmesh_polybuild.c index 882ee3092b4..c175102511a 100644 --- a/source/blender/editors/mesh/editmesh_polybuild.c +++ b/source/blender/editors/mesh/editmesh_polybuild.c @@ -426,7 +426,10 @@ static int edbm_polybuild_dissolve_at_cursor_invoke( BMEditMesh *em = vc.em; BMesh *bm = em->bm; - if (ele_act->head.htype == BM_EDGE) { + if (ele_act == NULL) { + /* pass */ + } + else if (ele_act->head.htype == BM_EDGE) { BMEdge *e_act = (BMEdge *)ele_act; BMLoop *l_a, *l_b; if (BM_edge_loop_pair(e_act, &l_a, &l_b)) { diff --git a/source/blender/editors/mesh/editmesh_preselect_edgering.c b/source/blender/editors/mesh/editmesh_preselect_edgering.c index ce62998a133..3b31b9c15f6 100644 --- a/source/blender/editors/mesh/editmesh_preselect_edgering.c +++ b/source/blender/editors/mesh/editmesh_preselect_edgering.c @@ -35,6 +35,8 @@ #include "ED_mesh.h" +#include "UI_resources.h" + /* -------------------------------------------------------------------- */ /** \name Mesh Edge Ring Pre-Select * Public API: @@ -174,7 +176,7 @@ void EDBM_preselect_edgering_draw( uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR); - immUniformColor3ub(255, 0, 255); + immUniformThemeColor3(TH_GIZMO_PRIMARY); if (psel->edges_len > 0) { immBegin(GPU_PRIM_LINES, psel->edges_len * 2); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 4a2787e92e2..72cde69b0bc 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -1116,6 +1116,11 @@ static bool edbm_connect_vert_pair(BMEditMesh *em, wmOperator *op) BMVert **verts; bool checks_succeded = true; + /* sanity check */ + if (verts_len < 2) { + return false; + } + verts = MEM_mallocN(sizeof(*verts) * verts_len, __func__); { BMIter iter; diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 25a477546cc..9c70fdceb8d 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -110,9 +110,6 @@ void MESH_OT_extrude_edges_indiv(struct wmOperatorType *ot); void MESH_OT_extrude_faces_indiv(struct wmOperatorType *ot); void MESH_OT_dupli_extrude_cursor(struct wmOperatorType *ot); -/* *** editmesh_extrude_gizmo.c *** */ -void MESH_GGT_extrude(struct wmGizmoGroupType *gzgt); - /* *** editmesh_extrude_screw.c *** */ void MESH_OT_screw(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 0a16a62d788..c4eb0aad337 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -79,6 +79,7 @@ #include "BKE_library.h" #include "BKE_library_query.h" #include "BKE_library_remap.h" +#include "BKE_lightprobe.h" #include "BKE_main.h" #include "BKE_material.h" #include "BKE_mball.h" @@ -1304,7 +1305,7 @@ static int object_delete_exec(bContext *C, wmOperator *op) wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win; const bool use_global = RNA_boolean_get(op->ptr, "use_global"); - bool changed = false; + uint changed_count = 0; if (CTX_data_edit_object(C)) return OPERATOR_CANCELLED; @@ -1337,7 +1338,7 @@ static int object_delete_exec(bContext *C, wmOperator *op) if (use_global && ob->id.lib == NULL) { /* We want to nuke the object, let's nuke it the easy way (not for linked data though)... */ BKE_libblock_delete(bmain, &ob->id); - changed = true; + changed_count += 1; continue; } @@ -1356,7 +1357,7 @@ static int object_delete_exec(bContext *C, wmOperator *op) /* remove from current scene only */ ED_object_base_free_and_unlink(bmain, scene, ob); - changed = true; + changed_count += 1; if (use_global) { Scene *scene_iter; @@ -1376,8 +1377,11 @@ static int object_delete_exec(bContext *C, wmOperator *op) } CTX_DATA_END; - if (!changed) + BKE_reportf(op->reports, RPT_INFO, "Deleted %u object(s)", changed_count); + + if (changed_count == 0) { return OPERATOR_CANCELLED; + } /* delete has to handle all open scenes */ BKE_main_id_tag_listbase(&bmain->scene, LIB_TAG_DOIT, true); @@ -1406,7 +1410,7 @@ void OBJECT_OT_delete(wmOperatorType *ot) ot->idname = "OBJECT_OT_delete"; /* api callbacks */ - ot->invoke = WM_operator_confirm; + ot->invoke = WM_operator_confirm_or_exec; ot->exec = object_delete_exec; ot->poll = ED_operator_objectmode; @@ -1416,6 +1420,7 @@ void OBJECT_OT_delete(wmOperatorType *ot) PropertyRNA *prop; prop = RNA_def_boolean(ot->srna, "use_global", 0, "Delete Globally", "Remove object from all scenes"); RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); + WM_operator_properties_confirm_or_exec(ot); } /**************************** Copy Utilities ******************************/ @@ -2343,6 +2348,16 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, ViewLayer id_us_min(id); } break; + case OB_LIGHTPROBE: + if (dupflag != 0) { + ID_NEW_REMAP_US2(obn->data) + else { + obn->data = ID_NEW_SET(obn->data, BKE_lightprobe_copy(bmain, obn->data)); + didit = 1; + } + id_us_min(id); + } + break; case OB_SPEAKER: if (dupflag != 0) { ID_NEW_REMAP_US2(obn->data) diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index a50c5a14e06..1e69916d865 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -44,6 +44,7 @@ #include "DNA_gpencil_types.h" #include "BLI_math.h" +#include "BLI_math_bits.h" #include "BLI_listbase.h" #include "BLI_rand.h" #include "BLI_string_utils.h" @@ -51,6 +52,8 @@ #include "BLT_translation.h" +#include "BKE_action.h" +#include "BKE_armature.h" #include "BKE_collection.h" #include "BKE_context.h" #include "BKE_deform.h" @@ -70,6 +73,7 @@ #include "WM_api.h" #include "WM_types.h" +#include "ED_armature.h" #include "ED_object.h" #include "ED_screen.h" #include "ED_select_utils.h" @@ -134,6 +138,235 @@ void ED_object_base_activate(bContext *C, Base *base) DEG_id_tag_update(&CTX_data_scene(C)->id, DEG_TAG_SELECT_UPDATE); } +bool ED_object_base_deselect_all_ex(ViewLayer *view_layer, int action, bool *r_any_visible) +{ + if (action == SEL_TOGGLE) { + action = SEL_SELECT; + FOREACH_VISIBLE_BASE_BEGIN(view_layer, base) { + if ((base->flag & BASE_SELECTED) != 0) { + action = SEL_DESELECT; + break; + } + } + FOREACH_VISIBLE_BASE_END; + } + + bool any_visible = false; + bool changed = false; + FOREACH_VISIBLE_BASE_BEGIN(view_layer, base) { + switch (action) { + case SEL_SELECT: + if ((base->flag & BASE_SELECTED) == 0) { + ED_object_base_select(base, BA_SELECT); + changed = true; + } + break; + case SEL_DESELECT: + if ((base->flag & BASE_SELECTED) != 0) { + ED_object_base_select(base, BA_DESELECT); + changed = true; + } + break; + case SEL_INVERT: + if ((base->flag & BASE_SELECTED) != 0) { + ED_object_base_select(base, BA_DESELECT); + changed = true; + } + else { + ED_object_base_select(base, BA_SELECT); + changed = true; + } + break; + } + any_visible = true; + } + FOREACH_VISIBLE_BASE_END; + if (r_any_visible) { + *r_any_visible = any_visible; + } + return changed; +} + + +bool ED_object_base_deselect_all(ViewLayer *view_layer, int action) +{ + return ED_object_base_deselect_all_ex(view_layer, action, NULL); +} + +/********************** Jump To Object Utilities **********************/ + +static int get_base_select_priority(Base *base) +{ + if (base->flag & BASE_VISIBLE) { + if (base->flag & BASE_SELECTABLE) { + return 3; + } + else { + return 2; + } + } + else { + return 1; + } +} + +/** + * If id is not already an Object, try to find an object that uses it as data. + * Prefers active, then selected, then visible/selectable. + */ +Base *ED_object_find_first_by_data_id(ViewLayer *view_layer, ID *id) +{ + BLI_assert(OB_DATA_SUPPORT_ID(GS(id->name))); + + /* Try active object. */ + Base *basact = view_layer->basact; + + if (basact && basact->object && basact->object->data == id) { + return basact; + } + + /* Try all objects. */ + Base *base_best = NULL; + int priority_best = 0; + + for (Base *base = view_layer->object_bases.first; base; base = base->next) { + if (base->object && base->object->data == id) { + if (base->flag & BASE_SELECTED) { + return base; + } + else { + int priority_test = get_base_select_priority(base); + + if (priority_test > priority_best) { + priority_best = priority_test; + base_best = base; + } + } + } + } + + return base_best; +} + +/** + * Select and make the target object active in the view layer. + * If already selected, selection isn't changed. + * + * \returns false if not found in current view layer + */ +bool ED_object_jump_to_object( + bContext *C, Object *ob, const bool UNUSED(reveal_hidden)) +{ + ViewLayer *view_layer = CTX_data_view_layer(C); + Base *base = BKE_view_layer_base_find(view_layer, ob); + + if (base == NULL) { + return false; + } + + /* TODO, use 'reveal_hidden', as is done with bones. */ + + if (view_layer->basact != base || !(base->flag & BASE_SELECTED)) { + /* Select if not selected. */ + if (!(base->flag & BASE_SELECTED)) { + ED_object_base_deselect_all(view_layer, SEL_DESELECT); + + if (base->flag & BASE_VISIBLE) { + ED_object_base_select(base, BA_SELECT); + } + + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); + } + + /* Make active if not active. */ + ED_object_base_activate(C, base); + } + + return true; +} + +/** + * Select and make the target object and bone active. + * Switches to Pose mode if in Object mode so the selection is visible. + * Unhides the target bone and bone layer if necessary. + * + * \returns false if object not in layer, bone not found, or other error + */ +bool ED_object_jump_to_bone( + bContext *C, Object *ob, const char *bone_name, + const bool reveal_hidden) +{ + /* Verify it's a valid armature object. */ + if (ob == NULL || ob->type != OB_ARMATURE) { + return false; + } + + bArmature *arm = ob->data; + + /* Activate the armature object. */ + if (!ED_object_jump_to_object(C, ob, reveal_hidden)) { + return false; + } + + /* Switch to pose mode from object mode. */ + if (!ELEM(ob->mode, OB_MODE_EDIT, OB_MODE_POSE)) { + ED_object_mode_set(C, OB_MODE_POSE); + } + + if (ob->mode == OB_MODE_EDIT && arm->edbo != NULL) { + /* In Edit mode select and activate the target Edit-Bone. */ + EditBone *ebone = ED_armature_ebone_find_name(arm->edbo, bone_name); + if (ebone != NULL) { + if (reveal_hidden) { + /* Unhide the bone. */ + ebone->flag &= ~BONE_HIDDEN_A; + + if ((arm->layer & ebone->layer) == 0) { + arm->layer |= 1U << bitscan_forward_uint(ebone->layer); + } + } + + /* Select it. */ + ED_armature_edit_deselect_all(ob); + + if (EBONE_SELECTABLE(arm, ebone)) { + ED_armature_ebone_select_set(ebone, true); + ED_armature_edit_sync_selection(arm->edbo); + } + + arm->act_edbone = ebone; + + ED_pose_bone_select_tag_update(ob); + return true; + } + } + else if (ob->mode == OB_MODE_POSE && ob->pose != NULL) { + /* In Pose mode select and activate the target Bone/Pose-Channel. */ + bPoseChannel *pchan = BKE_pose_channel_find_name(ob->pose, bone_name); + if (pchan != NULL) { + if (reveal_hidden) { + /* Unhide the bone. */ + pchan->bone->flag &= ~BONE_HIDDEN_P; + + if ((arm->layer & pchan->bone->layer) == 0) { + arm->layer |= 1U << bitscan_forward_uint(pchan->bone->layer); + } + } + + /* Select it. */ + ED_pose_deselect_all(ob, SEL_DESELECT, true); + ED_pose_bone_select(ob, pchan, true); + + arm->act_bone = pchan->bone; + + ED_pose_bone_select_tag_update(ob); + return true; + } + } + + return false; +} + /********************** Selection Operators **********************/ static bool objects_selectable_poll(bContext *C) @@ -154,17 +387,14 @@ static bool objects_selectable_poll(bContext *C) static int object_select_by_type_exec(bContext *C, wmOperator *op) { + ViewLayer *view_layer = CTX_data_view_layer(C); short obtype, extend; obtype = RNA_enum_get(op->ptr, "type"); extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base *, base, visible_bases) - { - ED_object_base_select(base, BA_DESELECT); - } - CTX_DATA_END; + ED_object_base_deselect_all(view_layer, SEL_DESELECT); } CTX_DATA_BEGIN (C, Base *, base, visible_bases) @@ -387,11 +617,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base *, base, visible_bases) - { - ED_object_base_select(base, BA_DESELECT); - } - CTX_DATA_END; + ED_object_base_deselect_all(view_layer, SEL_DESELECT); } ob = OBACT(view_layer); @@ -760,12 +986,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base *, base, visible_bases) - { - ED_object_base_select(base, BA_DESELECT); - changed = true; - } - CTX_DATA_END; + changed = ED_object_base_deselect_all(view_layer, SEL_DESELECT); } ob = OBACT(view_layer); @@ -849,49 +1070,27 @@ void OBJECT_OT_select_grouped(wmOperatorType *ot) static int object_select_all_exec(bContext *C, wmOperator *op) { + ViewLayer *view_layer = CTX_data_view_layer(C); int action = RNA_enum_get(op->ptr, "action"); + bool any_visible = false; - /* passthrough if no objects are visible */ - if (CTX_DATA_COUNT(C, visible_bases) == 0) return OPERATOR_PASS_THROUGH; + bool changed = ED_object_base_deselect_all_ex(view_layer, action, &any_visible); - if (action == SEL_TOGGLE) { - action = SEL_SELECT; - CTX_DATA_BEGIN (C, Base *, base, visible_bases) - { - if ((base->flag & BASE_SELECTED) != 0) { - action = SEL_DESELECT; - break; - } - } - CTX_DATA_END; - } + if (changed) { + Scene *scene = CTX_data_scene(C); + DEG_id_tag_update(&scene->id, DEG_TAG_SELECT_UPDATE); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); - CTX_DATA_BEGIN (C, Base *, base, visible_bases) - { - switch (action) { - case SEL_SELECT: - ED_object_base_select(base, BA_SELECT); - break; - case SEL_DESELECT: - ED_object_base_select(base, BA_DESELECT); - break; - case SEL_INVERT: - if ((base->flag & BASE_SELECTED) != 0) { - ED_object_base_select(base, BA_DESELECT); - } - else { - ED_object_base_select(base, BA_SELECT); - } - break; - } + return OPERATOR_FINISHED; + } + else if (any_visible == false) { + /* TODO(campbell): Looks like we could remove this, + * if not comment should say why its needed. */ + return OPERATOR_PASS_THROUGH; + } + else { + return OPERATOR_CANCELLED; } - CTX_DATA_END; - - Scene *scene = CTX_data_scene(C); - DEG_id_tag_update(&scene->id, DEG_TAG_SELECT_UPDATE); - WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); - - return OPERATOR_FINISHED; } void OBJECT_OT_select_all(wmOperatorType *ot) diff --git a/source/blender/editors/physics/dynamicpaint_ops.c b/source/blender/editors/physics/dynamicpaint_ops.c index a967450408c..5fb03b628b2 100644 --- a/source/blender/editors/physics/dynamicpaint_ops.c +++ b/source/blender/editors/physics/dynamicpaint_ops.c @@ -130,7 +130,7 @@ static int surface_slot_remove_exec(bContext *C, wmOperator *UNUSED(op)) for (; surface; surface = surface->next) { if (id == canvas->active_sur) { canvas->active_sur -= 1; - dynamicPaint_freeSurface(surface); + dynamicPaint_freeSurface(pmd, surface); break; } id++; diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 457ff5be4de..09d3beadb2a 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -4829,10 +4829,18 @@ static int particle_edit_toggle_exec(bContext *C, wmOperator *op) edit = PE_create_current(depsgraph, scene, ob); - /* mesh may have changed since last entering editmode. - * note, this may have run before if the edit data was just created, so could avoid this and speed up a little */ - if (edit && edit->psys) + /* Mesh may have changed since last entering editmode. + * note, this may have run before if the edit data was just created, + * so could avoid this and speed up a little. */ + if (edit && edit->psys) { + /* Make sure pointer to the evaluated modifier data is up to date, + * with possible changes applied when object was outside of the + * edit mode. */ + Object *object_eval = DEG_get_evaluated_object(depsgraph, ob); + edit->psmd_eval = (ParticleSystemModifierData *)modifiers_findByName( + object_eval, edit->psmd->modifier.name); recalc_emitter_field(depsgraph, ob, edit->psys); + } toggle_particle_cursor(C, 1); WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_PARTICLE, NULL); diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 1c2aa4537e9..ad2caead1e6 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -207,7 +207,7 @@ static Main *load_main_from_memory(const void *blend, int blend_size) BlendFileData *bfd; G.fileflags |= G_FILE_NO_UI; - bfd = BLO_read_from_memory(blend, blend_size, NULL, BLO_READ_SKIP_NONE); + bfd = BLO_read_from_memory(blend, blend_size, BLO_READ_SKIP_NONE, NULL); if (bfd) { bmain = bfd->main; diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 98a59292473..0a69a53e6fa 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1115,10 +1115,6 @@ bool ED_region_is_overlap(int spacetype, int regiontype) if (regiontype == RGN_TYPE_HEADER) return 1; } - else if (spacetype == SPACE_SEQ) { - if (regiontype == RGN_TYPE_PREVIEW) - return 1; - } } } diff --git a/source/blender/editors/screen/screen_draw.c b/source/blender/editors/screen/screen_draw.c index 5371fcfd6d4..af6f9acfa47 100644 --- a/source/blender/editors/screen/screen_draw.c +++ b/source/blender/editors/screen/screen_draw.c @@ -370,6 +370,12 @@ static void drawscredge_area(ScrArea *sa, int sizex, int sizey, float edge_thick void ED_screen_draw_edges(wmWindow *win) { bScreen *screen = WM_window_get_active_screen(win); + screen->do_draw = false; + + if (screen->state == SCREENFULL) { + return; + } + const int winsize_x = WM_window_pixels_x(win); const int winsize_y = WM_window_pixels_y(win); float col[4], corner_scale, edge_thickness; @@ -421,8 +427,6 @@ void ED_screen_draw_edges(wmWindow *win) } glDisable(GL_SCISSOR_TEST); - - screen->do_draw = false; } /** diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index 77def4af6d0..738c5e4d2e2 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -476,7 +476,6 @@ void timeline_draw_cache(SpaceAction *saction, Object *ob, Scene *scene) } const int sta = pid->cache->startframe, end = pid->cache->endframe; - const int len = (end - sta + 1) * 6; GPU_blend(true); @@ -493,23 +492,40 @@ void timeline_draw_cache(SpaceAction *saction, Object *ob, Scene *scene) immUniformColor4fv(col); - if (len > 0) { - immBeginAtMost(GPU_PRIM_TRIS, len); + { + /* draw a quad for each chunk of consecutive cached frames */ + const int chunk_tot = 32; + int chunk_len = 0; + int ista = 0, iend = -1; - /* draw a quad for each cached frame */ for (int i = sta; i <= end; i++) { if (pid->cache->cached_frames[i - sta]) { - immVertex2f(pos, (float)i - 0.5f, 0.0f); - immVertex2f(pos, (float)i - 0.5f, 1.0f); - immVertex2f(pos, (float)i + 0.5f, 1.0f); - - immVertex2f(pos, (float)i - 0.5f, 0.0f); - immVertex2f(pos, (float)i + 0.5f, 1.0f); - immVertex2f(pos, (float)i + 0.5f, 0.0f); + if (chunk_len == 0) { + immBeginAtMost(GPU_PRIM_TRIS, chunk_tot * 6); + } + if (ista > iend) { + chunk_len++; + ista = i; + } + iend = i; + } + else { + if (ista <= iend) { + immRectf_fast(pos, (float)ista - 0.5f, 0.0f, (float)iend + 0.5f, 1.0f); + iend = ista - 1; + } + if (chunk_len >= chunk_tot) { + immEnd(); + chunk_len = 0; + } } } - - immEnd(); + if (ista <= iend) { + immRectf_fast(pos, (float)ista - 0.5f, 0.0f, (float)iend + 0.5f, 1.0f); + } + if (chunk_len != 0) { + immEnd(); + } } GPU_blend(false); diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 226a663971e..151959a916e 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -1014,6 +1014,7 @@ void buttons_context_draw(const bContext *C, uiLayout *layout) PointerRNA *ptr; char namebuf[128], *name; int a, icon; + bool first = true; if (!path) return; @@ -1024,29 +1025,36 @@ void buttons_context_draw(const bContext *C, uiLayout *layout) for (a = 0; a < path->len; a++) { ptr = &path->ptr[a]; - if (a != 0) + /* Skip scene and view layer to save space. */ + if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_OUTPUT, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD) && ptr->type == &RNA_Scene)) { + continue; + } + else if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_OUTPUT, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD) && ptr->type == &RNA_ViewLayer)) { + continue; + } + + /* Add > triangle. */ + if (!first) { uiItemL(row, "", ICON_SMALL_TRI_RIGHT_VEC); + } + else { + first = false; + } + /* Add icon + name .*/ if (ptr->data) { icon = RNA_struct_ui_icon(ptr->type); name = RNA_struct_name_get_alloc(ptr, namebuf, sizeof(namebuf), NULL); if (name) { - if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_OUTPUT, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD) && ptr->type == &RNA_Scene)) { - uiItemLDrag(row, ptr, "", icon); /* save some space */ - } - else if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_OUTPUT, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD) && ptr->type == &RNA_ViewLayer)) { - uiItemLDrag(row, ptr, "", icon); /* save some space */ - } - else { - uiItemLDrag(row, ptr, name, icon); - } + uiItemLDrag(row, ptr, name, icon); if (name != namebuf) MEM_freeN(name); } - else + else { uiItemL(row, "", icon); + } } } diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index 10f7777ee31..83b4f0aa6ce 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -888,6 +888,9 @@ static void clip_main_region_draw(const bContext *C, ARegion *ar) /* data... */ movieclip_main_area_set_view2d(C, ar); + /* callback */ + ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW); + clip_draw_main(C, sc, ar); /* TODO(sergey): would be nice to find a way to de-duplicate all this space conversions */ @@ -933,6 +936,9 @@ static void clip_main_region_draw(const bContext *C, ARegion *ar) clip_draw_grease_pencil((bContext *)C, true); } + /* callback */ + ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW); + /* reset view matrix */ UI_view2d_view_restore(C); diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 6fd2c3515fa..9b1aae03219 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -57,6 +57,7 @@ #ifdef __linux__ #include <mntent.h> +#include "BLI_fileops_types.h" #endif #include "fsmenu.h" /* include ourselves */ @@ -628,6 +629,33 @@ void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks) fprintf(stderr, "could not close the list of mounted filesystems\n"); } } + /* Check gvfs shares. */ + const char * const xdg_runtime_dir = BLI_getenv("XDG_RUNTIME_DIR"); + if (xdg_runtime_dir != NULL) { + struct direntry *dir; + char name[FILE_MAX]; + BLI_join_dirfile(name, sizeof(name), xdg_runtime_dir, "gvfs/"); + const uint dir_len = BLI_filelist_dir_contents(name, &dir); + for (uint i = 0; i < dir_len; i++) { + if ((dir[i].type & S_IFDIR)) { + const char *dirname = dir[i].relname; + if (dirname[0] != '.') { + /* Dir names contain a lot of unwanted text. + * Assuming every entry ends with the share name */ + const char *label = strstr(dirname, "share="); + if (label != NULL) { + /* Move pointer so "share=" is trimmed off or use full dirname as label. */ + const char *label_test = label + 6; + label = *label_test ? label_test : dirname; + } + BLI_snprintf(line, sizeof(line), "%s%s/", name, dirname); + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, line, label, FS_INSERT_SORTED); + found = 1; + } + } + } + BLI_filelist_free(dir, dir_len); + } #endif /* fallback */ diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index a6cc047d2dc..4ed6a980fcb 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -196,9 +196,7 @@ static int graphview_cursor_modal(bContext *C, wmOperator *op, const wmEvent *ev case LEFTMOUSE: case RIGHTMOUSE: case MIDDLEMOUSE: - /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init - * the modal op) doesn't work for some reason - */ + /* We check for either mouse-button to end, to work with all user keymaps. */ if (event->val == KM_RELEASE) { if (screen) screen->scrubbing = false; diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index a6e94e0875d..c842ac07eef 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -70,14 +70,14 @@ #define MAX_INFO_NUM_LEN 16 typedef struct SceneStats { - int totvert, totvertsel; - int totedge, totedgesel; - int totface, totfacesel; - int totbone, totbonesel; - int totobj, totobjsel; - int totlamp, totlampsel; - int tottri; - int totgplayer, totgpframe, totgpstroke, totgppoint; + uint64_t totvert, totvertsel; + uint64_t totedge, totedgesel; + uint64_t totface, totfacesel; + uint64_t totbone, totbonesel; + uint64_t totobj, totobjsel; + uint64_t totlamp, totlampsel; + uint64_t tottri; + uint64_t totgplayer, totgpframe, totgpstroke, totgppoint; char infostr[MAX_INFO_LEN]; } SceneStats; @@ -154,16 +154,18 @@ static void stats_object(Object *ob, int sel, int totob, SceneStats *stats) } case OB_GPENCIL: { - bGPdata *gpd = (bGPdata *)ob->data; - /* GPXX Review if we can move to other place when object change - * maybe to depsgraph evaluation - */ - BKE_gpencil_stats_update(gpd); - - stats->totgplayer = gpd->totlayer; - stats->totgpframe = gpd->totframe; - stats->totgpstroke = gpd->totstroke; - stats->totgppoint = gpd->totpoint; + if (sel) { + bGPdata *gpd = (bGPdata *)ob->data; + /* GPXX Review if we can move to other place when object change + * maybe to depsgraph evaluation + */ + BKE_gpencil_stats_update(gpd); + + stats->totgplayer += gpd->totlayer; + stats->totgpframe += gpd->totframe; + stats->totgpstroke += gpd->totstroke; + stats->totgppoint += gpd->totpoint; + } break; } } @@ -448,7 +450,7 @@ static void stats_string(ViewLayer *view_layer) /* Generate formatted numbers */ #define SCENE_STATS_FMT_INT(_id) \ - BLI_str_format_int_grouped(stats_fmt._id, stats->_id) + BLI_str_format_uint64_grouped(stats_fmt._id, stats->_id) SCENE_STATS_FMT_INT(totvert); SCENE_STATS_FMT_INT(totvertsel); diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index b01ef02fb38..74744f63321 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1789,7 +1789,7 @@ static int sequencer_unmute_exec(bContext *C, wmOperator *op) void SEQUENCER_OT_unmute(struct wmOperatorType *ot) { /* identifiers */ - ot->name = "Un-Mute Strips"; + ot->name = "Unmute Strips"; ot->idname = "SEQUENCER_OT_unmute"; ot->description = "Unmute (un)selected strips"; @@ -1858,7 +1858,7 @@ static int sequencer_unlock_exec(bContext *C, wmOperator *UNUSED(op)) void SEQUENCER_OT_unlock(struct wmOperatorType *ot) { /* identifiers */ - ot->name = "UnLock Strips"; + ot->name = "Unlock Strips"; ot->idname = "SEQUENCER_OT_unlock"; ot->description = "Unlock the active strip so that it can't be transformed"; diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 4fe2fe08fc9..91b13e1ac87 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -704,6 +704,7 @@ static void view3d_widgets(void) WM_gizmogrouptype_append(TRANSFORM_GGT_gizmo); WM_gizmogrouptype_append(VIEW3D_GGT_xform_cage); WM_gizmogrouptype_append(VIEW3D_GGT_xform_shear); + WM_gizmogrouptype_append(VIEW3D_GGT_xform_extrude); WM_gizmogrouptype_append(VIEW3D_GGT_mesh_preselect_elem); WM_gizmogrouptype_append(VIEW3D_GGT_mesh_preselect_edgering); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index dea28b75745..82e0511afe5 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -4918,3 +4918,51 @@ void VIEW3D_OT_toggle_shading(wmOperatorType *ot) } /** \} */ + + +/* -------------------------------------------------------------------- */ +/** \name Toggle XRay + * \{ */ + +static int toggle_xray_exec(bContext *C, wmOperator *op) +{ + View3D *v3d = CTX_wm_view3d(C); + ScrArea *sa = CTX_wm_area(C); + Object *obact = CTX_data_active_object(C); + + if (obact && obact->mode & OB_MODE_POSE) { + v3d->overlay.flag ^= V3D_OVERLAY_BONE_SELECT; + } + else { + const bool xray_active = ( + (obact && (obact->mode & OB_MODE_EDIT)) || + ELEM(v3d->shading.type, OB_WIRE, OB_SOLID)); + + if (v3d->shading.type == OB_WIRE) { + v3d->shading.flag ^= V3D_SHADING_XRAY_WIREFRAME; + } + else { + v3d->shading.flag ^= V3D_SHADING_XRAY; + } + if (!xray_active) { + BKE_report(op->reports, RPT_INFO, "X-Ray not available in current mode"); + } + } + + ED_area_tag_redraw(sa); + + return OPERATOR_FINISHED; +} + +void VIEW3D_OT_toggle_xray(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Toggle X-Ray"; + ot->idname = "VIEW3D_OT_toggle_xray"; + + /* api callbacks */ + ot->exec = toggle_xray_exec; + ot->poll = ED_operator_view3d_active; +} + +/** \} */ diff --git a/source/blender/editors/space_view3d/view3d_gizmo_empty.c b/source/blender/editors/space_view3d/view3d_gizmo_empty.c index c58b1a6d6cd..9ce0041c76c 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_empty.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_empty.c @@ -107,17 +107,6 @@ static void gizmo_empty_image_prop_matrix_set( ob->ima_ofs[1] = (matrix[3][1] - (0.5f * dims[1])) / dims[1]; } -static bool is_image_empty_visible(Object *ob, RegionView3D *rv3d) -{ - int visibility_flag = ob->empty_image_visibility_flag; - if (rv3d->is_persp) { - return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE; - } - else { - return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC; - } -} - static bool WIDGETGROUP_empty_image_poll(const bContext *C, wmGizmoGroupType *UNUSED(gzgt)) { View3D *v3d = CTX_wm_view3d(C); @@ -133,7 +122,7 @@ static bool WIDGETGROUP_empty_image_poll(const bContext *C, wmGizmoGroupType *UN if (ob && ob->type == OB_EMPTY) { if (ob->empty_drawtype == OB_EMPTY_IMAGE) { - return is_image_empty_visible(ob, rv3d); + return BKE_image_empty_visible_in_view3d(ob, rv3d); } } return false; diff --git a/source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c b/source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c index 356f671345a..1358204a3a4 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c @@ -209,7 +209,7 @@ static void axis_geom_draw( float depth; char index; char axis; - char is_pos; + bool is_pos; } axis_order[6] = { {-gz->matrix_offset[0][2], 0, 0, false}, {+gz->matrix_offset[0][2], 1, 0, true}, @@ -218,6 +218,22 @@ static void axis_geom_draw( {-gz->matrix_offset[2][2], 4, 2, false}, {+gz->matrix_offset[2][2], 5, 2, true}, }; + + int axis_align = -1; + for (int axis = 0; axis < 3; axis++) { + if (len_squared_v2(gz->matrix_offset[axis]) < 1e-6f) { + axis_align = axis; + break; + } + } + + /* Show backwards pointing highlight on-top (else we can't see it at all). */ + if ((select == false) && (gz->highlight_part > 0) && (axis_align != -1)) { + if (axis_order[gz->highlight_part - 1].is_pos == false) { + axis_order[gz->highlight_part - 1].depth = FLT_MAX; + } + } + qsort(&axis_order, ARRAY_SIZE(axis_order), sizeof(axis_order[0]), BLI_sortutil_cmp_float); static const float axis_highlight[4] = {1, 1, 1, 1}; @@ -256,14 +272,6 @@ static void axis_geom_draw( bool draw_center_done = false; - int axis_align = -1; - for (int axis = 0; axis < 3; axis++) { - if (len_squared_v2(gz->matrix_offset[axis]) < 1e-6f) { - axis_align = axis; - break; - } - } - for (int axis_index = 0; axis_index < ARRAY_SIZE(axis_order); axis_index++) { const int index = axis_order[axis_index].index; const int axis = axis_order[axis_index].axis; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 8c21497dd53..05f2d8f67e1 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -104,6 +104,7 @@ void VIEW3D_OT_render_border(struct wmOperatorType *ot); void VIEW3D_OT_clear_render_border(struct wmOperatorType *ot); void VIEW3D_OT_zoom_border(struct wmOperatorType *ot); void VIEW3D_OT_toggle_shading(struct wmOperatorType *ot); +void VIEW3D_OT_toggle_xray(struct wmOperatorType *ot); void view3d_boxview_copy(struct ScrArea *sa, struct ARegion *ar); void view3d_boxview_sync(struct ScrArea *sa, struct ARegion *ar); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 0c916ebf2a3..2dbe0a0b843 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -224,6 +224,7 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active); WM_operatortype_append(VIEW3D_OT_toggle_shading); + WM_operatortype_append(VIEW3D_OT_toggle_xray); WM_operatortype_append(VIEW3D_OT_toggle_matcap_flip); WM_operatortype_append(VIEW3D_OT_ruler_add); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index c421c96e530..a99e276979b 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -2368,6 +2368,7 @@ static int opengl_bone_select_buffer_cmp(const void *sel_a_p, const void *sel_b_ static int do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const eSelectOp sel_op) { + bool changed = false; int totobj = MAXPICKBUF; /* XXX solve later */ /* selection buffer now has bones potentially too, so we add MAXPICKBUF */ @@ -2386,29 +2387,32 @@ static int do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const Base **bases = NULL; BLI_array_declare(bases); - /* The draw order doesn't always match the order we populate the engine, see: T51695. */ - if (hits > 0) { - qsort(vbuffer, hits, sizeof(uint[4]), opengl_bone_select_buffer_cmp); + if (SEL_OP_USE_PRE_DESELECT(sel_op)) { + object_deselect_all_visible(vc->view_layer); + changed = true; + } - for (Base *base = vc->view_layer->object_bases.first; base; base = base->next) { - if (BASE_SELECTABLE(base)) { - if ((base->object->select_color & 0x0000FFFF) != 0) { - BLI_array_append(bases, base); - } + if ((hits == -1) && !SEL_OP_USE_OUTSIDE(sel_op)) { + goto finally; + } + + for (Base *base = vc->view_layer->object_bases.first; base; base = base->next) { + if (BASE_SELECTABLE(base)) { + if ((base->object->select_color & 0x0000FFFF) != 0) { + BLI_array_append(bases, base); } } } + /* The draw order doesn't always match the order we populate the engine, see: T51695. */ + qsort(vbuffer, hits, sizeof(uint[4]), opengl_bone_select_buffer_cmp); + for (const uint *col = vbuffer + 3, *col_end = col + (hits * 4); col < col_end; col += 4) { Bone *bone; Base *base = ED_armature_base_and_bone_from_select_buffer(bases, BLI_array_len(bases), *col, &bone); base->object->id.tag |= LIB_TAG_DOIT; } - if (SEL_OP_USE_PRE_DESELECT(sel_op)) { - object_deselect_all_visible(vc->view_layer); - } - for (Base *base = vc->view_layer->object_bases.first; base && hits; base = base->next) { if (BASE_SELECTABLE(base)) { const bool is_select = base->flag & BASE_SELECTED; @@ -2416,18 +2420,26 @@ static int do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const const int sel_op_result = ED_select_op_action_deselected(sel_op, is_select, is_inside); if (sel_op_result != -1) { ED_object_base_select(base, sel_op_result ? BA_SELECT : BA_DESELECT); + changed = true; } } - DEG_id_tag_update(&vc->scene->id, DEG_TAG_SELECT_UPDATE); - WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc->scene); } +finally: if (bases != NULL) { MEM_freeN(bases); } + MEM_freeN(vbuffer); - return hits > 0 ? OPERATOR_FINISHED : OPERATOR_CANCELLED; + if (changed) { + DEG_id_tag_update(&vc->scene->id, DEG_TAG_SELECT_UPDATE); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc->scene); + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } } static int do_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, const eSelectOp sel_op) @@ -2773,9 +2785,12 @@ void VIEW3D_OT_select(wmOperatorType *ot) /* properties */ WM_operator_properties_mouse_select(ot); - RNA_def_boolean(ot->srna, "center", 0, "Center", "Use the object center when selecting, in editmode used to extend object selection"); - RNA_def_boolean(ot->srna, "enumerate", 0, "Enumerate", "List objects under the mouse (object mode only)"); - RNA_def_boolean(ot->srna, "object", 0, "Object", "Use object selection (editmode only)"); + prop = RNA_def_boolean(ot->srna, "center", 0, "Center", "Use the object center when selecting, in editmode used to extend object selection"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE); + prop = RNA_def_boolean(ot->srna, "enumerate", 0, "Enumerate", "List objects under the mouse (object mode only)"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE); + prop = RNA_def_boolean(ot->srna, "object", 0, "Object", "Use object selection (editmode only)"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE); prop = RNA_def_int_vector(ot->srna, "location", 2, NULL, INT_MIN, INT_MAX, "Location", "Mouse location", INT_MIN, INT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt index 45055eb1225..ccc143af18f 100644 --- a/source/blender/editors/transform/CMakeLists.txt +++ b/source/blender/editors/transform/CMakeLists.txt @@ -45,9 +45,10 @@ set(SRC transform_constraints.c transform_conversions.c transform_generics.c - transform_input.c transform_gizmo_2d.c transform_gizmo_3d.c + transform_gizmo_extrude_3d.c + transform_input.c transform_ops.c transform_orientations.c transform_snap.c diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 9bd8417c46e..29ac5a92def 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -2121,7 +2121,8 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) if (t->spacetype == SPACE_VIEW3D) { if ((prop = RNA_struct_find_property(op->ptr, "constraint_orientation")) && - !RNA_property_is_set(op->ptr, prop)) + !RNA_property_is_set(op->ptr, prop) && + (t->current_orientation != V3D_MANIP_CUSTOM_MATRIX)) { t->scene->orientation_type = t->current_orientation; BLI_assert(((t->scene->orientation_index_custom == -1) && (t->custom_orientation == NULL)) || diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 06e4f63d3d0..3f7a41c53a7 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -8146,7 +8146,7 @@ static void createTransGPencil(bContext *C, TransInfo *t) ToolSettings *ts = CTX_data_tool_settings(C); bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd); - bool use_multiframe_falloff = (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_FRAME_FALLOFF) != 0; + bool use_multiframe_falloff = (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_FRAME_FALLOFF) != 0; Object *obact = CTX_data_active_object(C); bGPDlayer *gpl; diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c index bf5500903a2..6f3cef7c09d 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.c +++ b/source/blender/editors/transform/transform_gizmo_3d.c @@ -461,6 +461,18 @@ static void calc_tw_center(struct TransformBounds *tbounds, const float co[3]) } } +static void calc_tw_center_with_matrix( + struct TransformBounds *tbounds, const float co[3], + const bool use_matrix, const float matrix[4][4]) +{ + float co_world[3]; + if (use_matrix) { + mul_v3_m4v3(co_world, matrix, co); + co = co_world; + } + calc_tw_center(tbounds, co); +} + static void protectflag_to_drawflags(short protectflag, short *drawflags) { if (protectflag & OB_LOCK_LOCX) @@ -731,7 +743,7 @@ int ED_transform_calc_gizmo_stats( /* global, local or normal orientation? * if we could check 'totsel' now, this should be skipped with no selection. */ - if (ob && !is_gp_edit) { + if (ob) { const short orientation_type = params->orientation_type ? (params->orientation_type - 1) : scene->orientation_type; float mat[3][3]; ED_transform_calc_orientation_from_type_ex( @@ -761,10 +773,9 @@ int ED_transform_calc_gizmo_stats( if (is_gp_edit) { float diff_mat[4][4]; - float fpt[3]; - for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) { /* only editable and visible layers are considered */ + const bool use_mat_local = gpl->parent != NULL; if (gpencil_layer_is_editable(gpl) && (gpl->actframe != NULL)) { /* calculate difference matrix */ @@ -784,15 +795,8 @@ int ED_transform_calc_gizmo_stats( /* Change selection status of all points, then make the stroke match */ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) { if (pt->flag & GP_SPOINT_SELECT) { - if (gpl->parent == NULL) { - calc_tw_center(tbounds, &pt->x); - totsel++; - } - else { - mul_v3_m4v3(fpt, diff_mat, &pt->x); - calc_tw_center(tbounds, fpt); - totsel++; - } + calc_tw_center_with_matrix(tbounds, &pt->x, use_mat_local, diff_mat); + totsel++; } } } @@ -807,6 +811,21 @@ int ED_transform_calc_gizmo_stats( } } else if (obedit) { + +#define FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) \ + { \ + invert_m4_m4(obedit->imat, obedit->obmat); \ + uint objects_len = 0; \ + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len); \ + for (uint ob_index = 0; ob_index < objects_len; ob_index++) { \ + Object *ob_iter = objects[ob_index]; \ + const bool use_mat_local = (ob_iter != obedit); + +#define FOREACH_EDIT_OBJECT_END() \ + } \ + MEM_freeN(objects); \ + } ((void)0) + ob = obedit; if (obedit->type == OB_MESH) { BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -820,14 +839,7 @@ int ED_transform_calc_gizmo_stats( totsel = 1; } else { - uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len); - - float mat_local[4][4]; - invert_m4_m4(obedit->imat, obedit->obmat); - - for (uint ob_index = 0; ob_index < objects_len; ob_index++) { - Object *ob_iter = objects[ob_index]; + FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) { BMEditMesh *em_iter = BKE_editmesh_from_object(ob_iter); BMesh *bm = em_iter->bm; @@ -838,7 +850,7 @@ int ED_transform_calc_gizmo_stats( BMVert *eve; BMIter iter; - const bool use_mat_local = (ob_iter != obedit); + float mat_local[4][4]; if (use_mat_local) { mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat); } @@ -846,20 +858,12 @@ int ED_transform_calc_gizmo_stats( BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { - float co[3]; - if (use_mat_local) { - mul_v3_m4v3(co, mat_local, eve->co); - } - else { - copy_v3_v3(co, eve->co); - } - calc_tw_center(tbounds, co); + calc_tw_center_with_matrix(tbounds, eve->co, use_mat_local, mat_local); totsel++; } } } - } - MEM_freeN(objects); + } FOREACH_EDIT_OBJECT_END(); } } /* end editmesh */ else if (obedit->type == OB_ARMATURE) { @@ -881,28 +885,35 @@ int ED_transform_calc_gizmo_stats( protectflag_to_drawflags_ebone(rv3d, ebo); } else { - /* TODO: multi-object support. */ - for (ebo = arm->edbo->first; ebo; ebo = ebo->next) { - if (EBONE_VISIBLE(arm, ebo)) { - if (ebo->flag & BONE_TIPSEL) { - calc_tw_center(tbounds, ebo->tail); - totsel++; - } - if ((ebo->flag & BONE_ROOTSEL) && - /* don't include same point multiple times */ - ((ebo->flag & BONE_CONNECTED) && - (ebo->parent != NULL) && - (ebo->parent->flag & BONE_TIPSEL) && - EBONE_VISIBLE(arm, ebo->parent)) == 0) - { - calc_tw_center(tbounds, ebo->head); - totsel++; - } - if (ebo->flag & BONE_SELECTED) { - protectflag_to_drawflags_ebone(rv3d, ebo); + FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) { + arm = ob_iter->data; + + float mat_local[4][4]; + if (use_mat_local) { + mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat); + } + for (ebo = arm->edbo->first; ebo; ebo = ebo->next) { + if (EBONE_VISIBLE(arm, ebo)) { + if (ebo->flag & BONE_TIPSEL) { + calc_tw_center_with_matrix(tbounds, ebo->tail, use_mat_local, mat_local); + totsel++; + } + if ((ebo->flag & BONE_ROOTSEL) && + /* don't include same point multiple times */ + ((ebo->flag & BONE_CONNECTED) && + (ebo->parent != NULL) && + (ebo->parent->flag & BONE_TIPSEL) && + EBONE_VISIBLE(arm, ebo->parent)) == 0) + { + calc_tw_center_with_matrix(tbounds, ebo->head, use_mat_local, mat_local); + totsel++; + } + if (ebo->flag & BONE_SELECTED) { + protectflag_to_drawflags_ebone(rv3d, ebo); + } } } - } + } FOREACH_EDIT_OBJECT_END(); } } else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) { @@ -914,60 +925,67 @@ int ED_transform_calc_gizmo_stats( totsel++; } else { - /* TODO: multi-object support. */ - Nurb *nu; - BezTriple *bezt; - BPoint *bp; - ListBase *nurbs = BKE_curve_editNurbs_get(cu); - - nu = nurbs->first; - while (nu) { - if (nu->type == CU_BEZIER) { - bezt = nu->bezt; - a = nu->pntsu; - while (a--) { - /* exceptions - * if handles are hidden then only check the center points. - * If the center knot is selected then only use this as the center point. - */ - if ((v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_CU_HANDLES) == 0) { - if (bezt->f2 & SELECT) { - calc_tw_center(tbounds, bezt->vec[1]); - totsel++; + FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) { + cu = ob_iter->data; + Nurb *nu; + BezTriple *bezt; + BPoint *bp; + ListBase *nurbs = BKE_curve_editNurbs_get(cu); + + float mat_local[4][4]; + if (use_mat_local) { + mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat); + } + + nu = nurbs->first; + while (nu) { + if (nu->type == CU_BEZIER) { + bezt = nu->bezt; + a = nu->pntsu; + while (a--) { + /* exceptions + * if handles are hidden then only check the center points. + * If the center knot is selected then only use this as the center point. + */ + if ((v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_CU_HANDLES) == 0) { + if (bezt->f2 & SELECT) { + calc_tw_center_with_matrix(tbounds, bezt->vec[1], use_mat_local, mat_local); + totsel++; + } } - } - else if (bezt->f2 & SELECT) { - calc_tw_center(tbounds, bezt->vec[1]); - totsel++; - } - else { - if (bezt->f1 & SELECT) { - calc_tw_center( - tbounds, bezt->vec[(pivot_point == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 0]); + else if (bezt->f2 & SELECT) { + calc_tw_center_with_matrix(tbounds, bezt->vec[1], use_mat_local, mat_local); totsel++; } - if (bezt->f3 & SELECT) { - calc_tw_center( - tbounds, bezt->vec[(pivot_point == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 2]); - totsel++; + else { + if (bezt->f1 & SELECT) { + const float *co = bezt->vec[(pivot_point == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 0]; + calc_tw_center_with_matrix(tbounds, co, use_mat_local, mat_local); + totsel++; + } + if (bezt->f3 & SELECT) { + const float *co = bezt->vec[(pivot_point == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 2]; + calc_tw_center_with_matrix(tbounds, co, use_mat_local, mat_local); + totsel++; + } } + bezt++; } - bezt++; } - } - else { - bp = nu->bp; - a = nu->pntsu * nu->pntsv; - while (a--) { - if (bp->f1 & SELECT) { - calc_tw_center(tbounds, bp->vec); - totsel++; + else { + bp = nu->bp; + a = nu->pntsu * nu->pntsv; + while (a--) { + if (bp->f1 & SELECT) { + calc_tw_center_with_matrix(tbounds, bp->vec, use_mat_local, mat_local); + totsel++; + } + bp++; } - bp++; } + nu = nu->next; } - nu = nu->next; - } + } FOREACH_EDIT_OBJECT_END(); } } else if (obedit->type == OB_MBALL) { @@ -979,13 +997,21 @@ int ED_transform_calc_gizmo_stats( totsel++; } else { - /* TODO: multi-object support. */ - for (ml = mb->editelems->first; ml; ml = ml->next) { - if (ml->flag & SELECT) { - calc_tw_center(tbounds, &ml->x); - totsel++; + FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) { + mb = (MetaBall *)ob_iter->data; + + float mat_local[4][4]; + if (use_mat_local) { + mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat); } - } + + for (ml = mb->editelems->first; ml; ml = ml->next) { + if (ml->flag & SELECT) { + calc_tw_center_with_matrix(tbounds, &ml->x, use_mat_local, mat_local); + totsel++; + } + } + } FOREACH_EDIT_OBJECT_END(); } } else if (obedit->type == OB_LATTICE) { @@ -997,19 +1023,30 @@ int ED_transform_calc_gizmo_stats( totsel++; } else { - /* TODO: multi-object support. */ - bp = lt->def; - a = lt->pntsu * lt->pntsv * lt->pntsw; - while (a--) { - if (bp->f1 & SELECT) { - calc_tw_center(tbounds, bp->vec); - totsel++; + FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) { + lt = ((Lattice *)ob_iter->data)->editlatt->latt; + bp = lt->def; + a = lt->pntsu * lt->pntsv * lt->pntsw; + + float mat_local[4][4]; + if (use_mat_local) { + mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat); } - bp++; - } + + while (a--) { + if (bp->f1 & SELECT) { + calc_tw_center_with_matrix(tbounds, bp->vec, use_mat_local, mat_local); + totsel++; + } + bp++; + } + } FOREACH_EDIT_OBJECT_END(); } } +#undef FOREACH_EDIT_OBJECT_BEGIN +#undef FOREACH_EDIT_OBJECT_END + /* selection center */ if (totsel) { mul_v3_fl(tbounds->center, 1.0f / (float)totsel); // centroid! diff --git a/source/blender/editors/mesh/editmesh_extrude_gizmo.c b/source/blender/editors/transform/transform_gizmo_extrude_3d.c index 5de8e896ddf..1dc50f476fa 100644 --- a/source/blender/editors/mesh/editmesh_extrude_gizmo.c +++ b/source/blender/editors/transform/transform_gizmo_extrude_3d.c @@ -15,20 +15,15 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * The Original Code is Copyright (C) 2004 by Blender Foundation. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): Joseph Eagar - * * ***** END GPL LICENSE BLOCK ***** */ -/** \file blender/editors/mesh/editmesh_extrude_gizmo.c +/** \file blender/editors/transform/transform_gizmo_extrude_3d.c * \ingroup edmesh */ +#include "BLI_utildefines.h" +#include "BLI_array_utils.h" #include "BLI_math.h" #include "BLI_listbase.h" @@ -53,8 +48,6 @@ #include "MEM_guardedalloc.h" -#include "mesh_intern.h" /* own include */ - /* -------------------------------------------------------------------- */ /** \name Extrude Gizmo * \{ */ @@ -69,6 +62,7 @@ static const float extrude_button_offset_scale = 1.5f; static const float extrude_arrow_scale = 1.0f; static const float extrude_arrow_xyz_axis_scale = 1.0f; static const float extrude_arrow_normal_axis_scale = 1.0f; +static const float extrude_dial_scale = 0.2; static const uchar shape_plus[] = { 0x5f, 0xfb, 0x40, 0xee, 0x25, 0xda, 0x11, 0xbf, 0x4, 0xa0, 0x0, 0x80, 0x4, 0x5f, 0x11, @@ -82,10 +76,22 @@ static const uchar shape_plus[] = { typedef struct GizmoExtrudeGroup { /* XYZ & normal. */ - struct wmGizmo *invoke_xyz_no[4]; - struct wmGizmo *adjust; + wmGizmo *invoke_xyz_no[4]; + /* Constrained & unconstrained (arrow & circle). */ + wmGizmo *adjust[2]; int adjust_axis; + /* Copied from the transform operator, + * use to redo with the same settings. */ + struct { + float constraint_matrix[3][3]; + bool constraint_axis[3]; + float value[4]; + } redo_xform; + + /* Depends on object type. */ + int normal_axis; + struct { float normal_mat3[3][3]; /* use Z axis for normal. */ int orientation_type; @@ -111,21 +117,23 @@ static void gizmo_mesh_extrude_orientation_matrix_set_for_adjust( { /* Set orientation without location. */ for (int j = 0; j < 3; j++) { - copy_v3_v3(ggd->adjust->matrix_basis[j], mat[j]); + copy_v3_v3(ggd->adjust[0]->matrix_basis[j], mat[j]); } /* nop when (i == 2). */ - swap_v3_v3(ggd->adjust->matrix_basis[ggd->adjust_axis], ggd->adjust->matrix_basis[2]); + swap_v3_v3(ggd->adjust[0]->matrix_basis[ggd->adjust_axis], ggd->adjust[0]->matrix_basis[2]); } -static void gizmo_mesh_extrude_setup(const bContext *UNUSED(C), wmGizmoGroup *gzgroup) +static void gizmo_mesh_extrude_setup(const bContext *C, wmGizmoGroup *gzgroup) { struct GizmoExtrudeGroup *ggd = MEM_callocN(sizeof(GizmoExtrudeGroup), __func__); gzgroup->customdata = ggd; const wmGizmoType *gzt_arrow = WM_gizmotype_find("GIZMO_GT_arrow_3d", true); const wmGizmoType *gzt_move = WM_gizmotype_find("GIZMO_GT_button_2d", true); + const wmGizmoType *gzt_dial = WM_gizmotype_find("GIZMO_GT_dial_3d", true); - ggd->adjust = WM_gizmo_new_ptr(gzt_arrow, gzgroup, NULL); + ggd->adjust[0] = WM_gizmo_new_ptr(gzt_arrow, gzgroup, NULL); + ggd->adjust[1] = WM_gizmo_new_ptr(gzt_dial, gzgroup, NULL); for (int i = 0; i < 4; i++) { ggd->invoke_xyz_no[i] = WM_gizmo_new_ptr(gzt_move, gzgroup, NULL); ggd->invoke_xyz_no[i]->flag |= WM_GIZMO_DRAW_OFFSET_SCALE; @@ -141,7 +149,24 @@ static void gizmo_mesh_extrude_setup(const bContext *UNUSED(C), wmGizmoGroup *gz } { - ggd->ot_extrude = WM_operatortype_find("MESH_OT_extrude_context_move", true); + const Object *obedit = CTX_data_edit_object(C); + const char *op_idname = NULL; + if (obedit->type == OB_MESH) { + op_idname = "MESH_OT_extrude_context_move"; + ggd->normal_axis = 2; + } + else if (obedit->type == OB_ARMATURE) { + op_idname = "ARMATURE_OT_extrude_move"; + ggd->normal_axis = 1; + } + else if (obedit->type == OB_CURVE) { + op_idname = "CURVE_OT_extrude_move"; + ggd->normal_axis = 2; + } + else { + BLI_assert(0); + } + ggd->ot_extrude = WM_operatortype_find(op_idname, true); ggd->gzgt_axis_type_prop = RNA_struct_type_find_property(gzgroup->type->srna, "axis_type"); } @@ -149,21 +174,23 @@ static void gizmo_mesh_extrude_setup(const bContext *UNUSED(C), wmGizmoGroup *gz UI_GetThemeColor3fv(TH_AXIS_X + i, ggd->invoke_xyz_no[i]->color); } UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, ggd->invoke_xyz_no[3]->color); - UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, ggd->adjust->color); + for (int i = 0; i < 2; i++) { + UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, ggd->adjust[i]->color); + } for (int i = 0; i < 4; i++) { WM_gizmo_set_scale(ggd->invoke_xyz_no[i], extrude_button_scale); } - WM_gizmo_set_scale(ggd->adjust, extrude_arrow_scale); - - WM_gizmo_set_flag(ggd->adjust, WM_GIZMO_DRAW_VALUE, true); + WM_gizmo_set_scale(ggd->adjust[0], extrude_arrow_scale); + WM_gizmo_set_scale(ggd->adjust[1], extrude_dial_scale); + ggd->adjust[1]->line_width = 2.0f; /* XYZ & normal axis extrude. */ for (int i = 0; i < 4; i++) { PointerRNA *ptr = WM_gizmo_operator_set(ggd->invoke_xyz_no[i], 0, ggd->ot_extrude, NULL); { bool constraint[3] = {0, 0, 0}; - constraint[MIN2(i, 2)] = 1; + constraint[(i < 3) ? i : ggd->normal_axis] = true; PointerRNA macroptr = RNA_pointer_get(ptr, "TRANSFORM_OT_translate"); RNA_boolean_set(¯optr, "release_confirm", true); RNA_boolean_set_array(¯optr, "constraint_axis", constraint); @@ -171,11 +198,12 @@ static void gizmo_mesh_extrude_setup(const bContext *UNUSED(C), wmGizmoGroup *gz } /* Adjust extrude. */ - { - PointerRNA *ptr = WM_gizmo_operator_set(ggd->adjust, 0, ggd->ot_extrude, NULL); + for (int i = 0; i < 2; i++) { + wmGizmo *gz = ggd->adjust[i]; + PointerRNA *ptr = WM_gizmo_operator_set(gz, 0, ggd->ot_extrude, NULL); PointerRNA macroptr = RNA_pointer_get(ptr, "TRANSFORM_OT_translate"); RNA_boolean_set(¯optr, "release_confirm", true); - wmGizmoOpElem *gzop = WM_gizmo_operator_get(ggd->adjust, 0); + wmGizmoOpElem *gzop = WM_gizmo_operator_get(gz, 0); gzop->is_redo = true; } } @@ -187,7 +215,9 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup) for (int i = 0; i < 4; i++) { WM_gizmo_set_flag(ggd->invoke_xyz_no[i], WM_GIZMO_HIDDEN, true); } - WM_gizmo_set_flag(ggd->adjust, WM_GIZMO_HIDDEN, true); + for (int i = 0; i < 2; i++) { + WM_gizmo_set_flag(ggd->adjust[i], WM_GIZMO_HIDDEN, true); + } if (G.moving) { return; @@ -240,32 +270,32 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup) /* Offset the add icon. */ mul_v3_v3fl( ggd->invoke_xyz_no[3]->matrix_offset[3], - ggd->data.normal_mat3[2], + ggd->data.normal_mat3[ggd->normal_axis], (extrude_arrow_normal_axis_scale * extrude_button_offset_scale) / extrude_button_scale); /* Adjust current operator. */ /* Don't use 'WM_operator_last_redo' because selection actions will be ignored. */ wmOperator *op = CTX_wm_manager(C)->operators.last; bool has_redo = (op && op->type == ggd->ot_extrude); - wmOperator *op_transform = has_redo ? op->macro.last : NULL; + wmOperator *op_xform = has_redo ? op->macro.last : NULL; - struct { - float constraint_matrix[3][3]; - bool constraint_axis[3]; - float value[4]; - bool is_flip; - } redo; + bool adjust_is_flip = false; + wmGizmo *gz_adjust = NULL; if (has_redo) { + gz_adjust = ggd->adjust[1]; /* We can't access this from 'ot->last_properties' * because some properties use skip-save. */ - RNA_float_get_array(op_transform->ptr, "constraint_matrix", &redo.constraint_matrix[0][0]); - RNA_boolean_get_array(op_transform->ptr, "constraint_axis", redo.constraint_axis); - RNA_float_get_array(op_transform->ptr, "value", redo.value); + RNA_float_get_array(op_xform->ptr, "constraint_matrix", &ggd->redo_xform.constraint_matrix[0][0]); + RNA_boolean_get_array(op_xform->ptr, "constraint_axis", ggd->redo_xform.constraint_axis); + RNA_float_get_array(op_xform->ptr, "value", ggd->redo_xform.value); + + /* Set properties for redo. */ for (int i = 0; i < 3; i++) { - if (redo.constraint_axis[i]) { - redo.is_flip = redo.value[i] < 0.0f; + if (ggd->redo_xform.constraint_axis[i]) { + adjust_is_flip = ggd->redo_xform.value[i] < 0.0f; ggd->adjust_axis = i; + gz_adjust = ggd->adjust[0]; break; } } @@ -273,30 +303,25 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup) /* Needed for normal orientation. */ gizmo_mesh_extrude_orientation_matrix_set(ggd, tbounds.axis); - if (has_redo) { - gizmo_mesh_extrude_orientation_matrix_set_for_adjust(ggd, redo.constraint_matrix); - if (redo.is_flip) { - negate_v3(ggd->adjust->matrix_basis[2]); - } - } /* Location. */ for (int i = 0; i < axis_len_used; i++) { WM_gizmo_set_matrix_location(ggd->invoke_xyz_no[i], tbounds.center); } - WM_gizmo_set_matrix_location(ggd->adjust, tbounds.center); - /* Un-hide. */ for (int i = 0; i < axis_len_used; i++) { WM_gizmo_set_flag(ggd->invoke_xyz_no[i], WM_GIZMO_HIDDEN, false); } - WM_gizmo_set_flag(ggd->adjust, WM_GIZMO_HIDDEN, !has_redo); - /* Operator properties. */ - if (use_normal) { - wmGizmoOpElem *gzop = WM_gizmo_operator_get(ggd->invoke_xyz_no[3], 0); - PointerRNA macroptr = RNA_pointer_get(&gzop->ptr, "TRANSFORM_OT_translate"); - RNA_float_set_array(¯optr, "constraint_matrix", &ggd->data.normal_mat3[0][0]); + if (has_redo) { + if (gz_adjust == ggd->adjust[0]) { + gizmo_mesh_extrude_orientation_matrix_set_for_adjust(ggd, ggd->redo_xform.constraint_matrix); + if (adjust_is_flip) { + negate_v3(ggd->adjust[0]->matrix_basis[2]); + } + } + WM_gizmo_set_matrix_location(gz_adjust, tbounds.center); + WM_gizmo_set_flag(gz_adjust, WM_GIZMO_HIDDEN, false); } /* Redo with current settings. */ @@ -305,7 +330,8 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup) RNA_enum_set( ggd->invoke_xyz_no[i]->ptr, "draw_options", - (dot_v3v3(ggd->adjust->matrix_basis[2], + ((gz_adjust == ggd->adjust[0]) && + dot_v3v3(ggd->adjust[0]->matrix_basis[2], ggd->invoke_xyz_no[i]->matrix_offset[3]) > 0.98f) ? 0 : ED_GIZMO_BUTTON_SHOW_HELPLINE); } } @@ -350,6 +376,44 @@ static void gizmo_mesh_extrude_draw_prepare(const bContext *C, wmGizmoGroup *gzg gz->temp.f = dot_v3v3(rv3d->viewinv[2], gz->matrix_offset[3]); } BLI_listbase_sort(&gzgroup->gizmos, WM_gizmo_cmp_temp_fl_reverse); + + if ((ggd->adjust[1]->flag & WM_GIZMO_HIDDEN) == 0) { + copy_v3_v3(ggd->adjust[1]->matrix_basis[0], rv3d->viewinv[0]); + copy_v3_v3(ggd->adjust[1]->matrix_basis[1], rv3d->viewinv[1]); + copy_v3_v3(ggd->adjust[1]->matrix_basis[2], rv3d->viewinv[2]); + } + } +} + +static void gizmo_mesh_extrude_invoke_prepare(const bContext *UNUSED(C), wmGizmoGroup *gzgroup, wmGizmo *gz) +{ + GizmoExtrudeGroup *ggd = gzgroup->customdata; + if (ELEM(gz, ggd->adjust[0], ggd->adjust[1])) { + /* Set properties for redo. */ + wmGizmoOpElem *gzop = WM_gizmo_operator_get(gz, 0); + PointerRNA macroptr = RNA_pointer_get(&gzop->ptr, "TRANSFORM_OT_translate"); + if (gz == ggd->adjust[0]) { + RNA_float_set_array(¯optr, "constraint_matrix", &ggd->redo_xform.constraint_matrix[0][0]); + RNA_boolean_set_array(¯optr, "constraint_axis", ggd->redo_xform.constraint_axis); + } + RNA_float_set_array(¯optr, "value", ggd->redo_xform.value); + } + else { + /* Workaround for extrude action modifying normals. */ + const int i = BLI_array_findindex(ggd->invoke_xyz_no, ARRAY_SIZE(ggd->invoke_xyz_no), &gz); + BLI_assert(i != -1); + bool use_normal_matrix = false; + if (i == 3) { + use_normal_matrix = true; + } + else if (ggd->data.orientation_type == V3D_MANIP_NORMAL) { + use_normal_matrix = true; + } + if (use_normal_matrix) { + wmGizmoOpElem *gzop = WM_gizmo_operator_get(gz, 0); + PointerRNA macroptr = RNA_pointer_get(&gzop->ptr, "TRANSFORM_OT_translate"); + RNA_float_set_array(¯optr, "constraint_matrix", &ggd->data.normal_mat3[0][0]); + } } } @@ -380,10 +444,10 @@ static void gizmo_mesh_extrude_message_subscribe( &msg_sub_value_gz_tag_refresh, __func__); } -void MESH_GGT_extrude(struct wmGizmoGroupType *gzgt) +void VIEW3D_GGT_xform_extrude(struct wmGizmoGroupType *gzgt) { - gzgt->name = "Mesh Extrude"; - gzgt->idname = "MESH_GGT_extrude"; + gzgt->name = "3D View Extrude"; + gzgt->idname = "VIEW3D_GGT_xform_extrude"; gzgt->flag = WM_GIZMOGROUPTYPE_3D; @@ -394,6 +458,7 @@ void MESH_GGT_extrude(struct wmGizmoGroupType *gzgt) gzgt->setup = gizmo_mesh_extrude_setup; gzgt->refresh = gizmo_mesh_extrude_refresh; gzgt->draw_prepare = gizmo_mesh_extrude_draw_prepare; + gzgt->invoke_prepare = gizmo_mesh_extrude_invoke_prepare; gzgt->message_subscribe = gizmo_mesh_extrude_message_subscribe; static const EnumPropertyItem axis_type_items[] = { diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 447842e9bf0..b220652395d 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -976,6 +976,14 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3 ok = true; } else { + /* When we only have the root/tip are selected. */ + bool fallback_ok = false; + float fallback_normal[3]; + float fallback_plane[3]; + + zero_v3(fallback_normal); + zero_v3(fallback_plane); + for (ebone = arm->edbo->first; ebone; ebone = ebone->next) { if (arm->layer & ebone->layer) { if (ebone->flag & BONE_SELECTED) { @@ -984,8 +992,23 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3 add_v3_v3(plane, tmat[1]); ok = true; } + else if ((ok == false) && + ((ebone->flag & BONE_TIPSEL) || + ((ebone->flag & BONE_ROOTSEL) && + (ebone->parent && ebone->flag & BONE_CONNECTED) == false))) + { + ED_armature_ebone_to_mat3(ebone, tmat); + add_v3_v3(fallback_normal, tmat[2]); + add_v3_v3(fallback_plane, tmat[1]); + fallback_ok = true; + } } } + if ((ok == false) && fallback_ok) { + ok = true; + copy_v3_v3(normal, fallback_normal); + copy_v3_v3(plane, fallback_plane); + } } if (ok) { diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c index aecbb22072d..e28f00e6509 100644 --- a/source/blender/editors/transform/transform_snap_object.c +++ b/source/blender/editors/transform/transform_snap_object.c @@ -112,10 +112,6 @@ typedef struct SnapObjectData_EditMesh { SnapObjectData sd; BVHTreeFromEditMesh *bvh_trees[3]; - /* It's like a boundbox. It is tested first to avoid - * to create a bvhtree for all the edited objects. */ - float min[3], max[3]; - } SnapObjectData_EditMesh; struct SnapObjectContext { @@ -161,18 +157,6 @@ struct SnapObjectContext { typedef void(*IterSnapObjsCallback)(SnapObjectContext *sctx, bool is_obedit, Object *ob, float obmat[4][4], void *data); -static void min_max_from_bmesh( - BMesh *bm, float r_min[3], float r_max[3]) -{ - BMIter iter; - BMVert *eve; - - INIT_MINMAX(r_min, r_max); - BM_ITER_MESH(eve, &iter, bm, BM_VERTS_OF_MESH) { - minmax_v3v3_v3(r_min, r_max, eve->co); - } -} - static SnapObjectData_Mesh *snap_object_data_mesh_get(SnapObjectContext *sctx, Object *ob) { void **sod_p; @@ -202,7 +186,6 @@ static SnapObjectData_EditMesh *snap_object_data_editmesh_get(SnapObjectContext else { SnapObjectData_EditMesh *sod = *sod_p = BLI_memarena_calloc(sctx->cache.mem_arena, sizeof(*sod)); sod->sd.type = SNAP_EDIT_MESH; - min_max_from_bmesh(em->bm, sod->min, sod->max); } return *sod_p; @@ -383,12 +366,10 @@ static bool raycastMesh( } float imat[4][4]; - float timat[3][3]; /* transpose inverse matrix for normals */ float ray_start_local[3], ray_normal_local[3]; float local_scale, local_depth, len_diff = 0.0f; invert_m4_m4(imat, obmat); - transpose_m3_m4(timat, imat); copy_v3_v3(ray_start_local, ray_start); copy_v3_v3(ray_normal_local, ray_dir); @@ -478,6 +459,10 @@ static bool raycastMesh( else { len_diff = 0.0f; } + + float timat[3][3]; /* transpose inverse matrix for normals */ + transpose_m3_m4(timat, imat); + if (r_hit_list) { struct RayCastAll_Data data; @@ -549,19 +534,38 @@ static bool raycastEditMesh( BLI_assert(em->ob->data == BKE_object_get_pre_modified_mesh(ob)); - SnapObjectData_EditMesh *sod = snap_object_data_editmesh_get(sctx, em); - { - float min[3], max[3]; - mul_v3_m4v3(min, obmat, sod->min); - mul_v3_m4v3(max, obmat, sod->max); + float imat[4][4]; + float ray_start_local[3], ray_normal_local[3]; + float local_scale, local_depth, len_diff = 0.0f; + + invert_m4_m4(imat, obmat); + + copy_v3_v3(ray_start_local, ray_start); + copy_v3_v3(ray_normal_local, ray_dir); + + mul_m4_v3(imat, ray_start_local); + mul_mat3_m4_v3(imat, ray_normal_local); + + /* local scale in normal direction */ + local_scale = normalize_v3(ray_normal_local); + local_depth = *ray_depth; + if (local_depth != BVH_RAYCAST_DIST_MAX) { + local_depth *= local_scale; + } + /* Test BoundBox */ + BoundBox *bb = BKE_mesh_texspace_get(em->ob->data, NULL, NULL, NULL); + if (bb) { + /* was BKE_boundbox_ray_hit_check, see: cf6ca226fa58 */ if (!isect_ray_aabb_v3_simple( - ray_start, ray_dir, min, max, NULL, NULL)) + ray_start_local, ray_normal_local, bb->vec[0], bb->vec[6], &len_diff, NULL)) { return retval; } } + SnapObjectData_EditMesh *sod = snap_object_data_editmesh_get(sctx, em); + if (sod->bvh_trees[2] == NULL) { sod->bvh_trees[2] = BLI_memarena_calloc(sctx->cache.mem_arena, sizeof(BVHTreeFromEditMesh)); } @@ -610,26 +614,6 @@ static bool raycastEditMesh( treedata->em = em; } - float imat[4][4]; - float timat[3][3]; /* transpose inverse matrix for normals */ - float ray_normal_local[3], ray_start_local[3], len_diff = 0.0f; - - invert_m4_m4(imat, obmat); - transpose_m3_m4(timat, imat); - - copy_v3_v3(ray_normal_local, ray_dir); - mul_mat3_m4_v3(imat, ray_normal_local); - - copy_v3_v3(ray_start_local, ray_start); - mul_m4_v3(imat, ray_start_local); - - /* local scale in normal direction */ - float local_scale = normalize_v3(ray_normal_local); - float local_depth = *ray_depth; - if (local_depth != BVH_RAYCAST_DIST_MAX) { - local_depth *= local_scale; - } - /* Only use closer ray_start in case of ortho view! In perspective one, ray_start * may already been *inside* boundbox, leading to snap failures (see T38409). * Note also ar might be null (see T38435), in this case we assume ray_start is ok! @@ -653,6 +637,10 @@ static bool raycastEditMesh( } else len_diff = 0.0f; } + + float timat[3][3]; /* transpose inverse matrix for normals */ + transpose_m3_m4(timat, imat); + if (r_hit_list) { struct RayCastAll_Data data; @@ -875,6 +863,25 @@ static bool raycastObjects( /** Snap Nearest utilities * \{ */ + /* Test BoundBox */ +static bool snap_bound_box_check_dist(BoundBox *bb, float lpmat[4][4], float win_size[2], float mval[2], float dist_px_sq) +{ + /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */ + + struct DistProjectedAABBPrecalc data_precalc; + dist_squared_to_projected_aabb_precalc( + &data_precalc, lpmat, win_size, mval); + + bool dummy[3]; + float bb_dist_px_sq = dist_squared_to_projected_aabb( + &data_precalc, bb->vec[0], bb->vec[6], dummy); + + if (bb_dist_px_sq > dist_px_sq) { + return false; + } + return true; +} + static void cb_mvert_co_get( const int index, const float **co, const BVHTreeFromMesh *data) { @@ -1421,15 +1428,8 @@ static short snapArmature( if (use_obedit == false) { /* Test BoundBox */ BoundBox *bb = BKE_armature_boundbox_get(ob); - if (bb) { - bool dummy[3]; - /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */ - float bb_dist_px_sq = dist_squared_to_projected_aabb( - &neasrest_precalc, bb->vec[0], bb->vec[6], dummy); - - if (bb_dist_px_sq > dist_px_sq) { - return retval; - } + if (bb && !snap_bound_box_check_dist(bb, lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) { + return retval; } } @@ -1556,16 +1556,9 @@ static short snapCurve( if (use_obedit == false) { /* Test BoundBox */ - BoundBox *bb = BKE_curve_boundbox_get(ob); - if (bb) { - bool dummy[3]; - /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */ - float bb_dist_px_sq = dist_squared_to_projected_aabb( - &neasrest_precalc, bb->vec[0], bb->vec[6], dummy); - - if (bb_dist_px_sq > dist_px_sq) { - return 0; - } + BoundBox *bb = BKE_curve_texspace_get(cu, NULL, NULL, NULL); + if (bb && !snap_bound_box_check_dist(bb, lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) { + return 0; } } @@ -1841,20 +1834,8 @@ static short snapMesh( /* Test BoundBox */ BoundBox *bb = BKE_mesh_boundbox_get(ob); - if (bb) { - /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */ - - struct DistProjectedAABBPrecalc data_precalc; - dist_squared_to_projected_aabb_precalc( - &data_precalc, lpmat, snapdata->win_size, snapdata->mval); - - bool dummy[3]; - float bb_dist_px_sq = dist_squared_to_projected_aabb( - &data_precalc, bb->vec[0], bb->vec[6], dummy); - - if (bb_dist_px_sq > dist_px_sq) { - return 0; - } + if (bb && !snap_bound_box_check_dist(bb, lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) { + return 0; } SnapObjectData_Mesh *sod = snap_object_data_mesh_get(sctx, ob); @@ -2057,29 +2038,19 @@ static short snapEditMesh( BLI_assert(em->ob->data == BKE_object_get_pre_modified_mesh(ob)); UNUSED_VARS_NDEBUG(ob); - SnapObjectData_EditMesh *sod = snap_object_data_editmesh_get(sctx, em); + float lpmat[4][4]; + mul_m4_m4m4(lpmat, snapdata->pmat, obmat); float dist_px_sq = SQUARE(*dist_px); - { - float min[3], max[3]; - mul_v3_m4v3(min, obmat, sod->min); - mul_v3_m4v3(max, obmat, sod->max); - - /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */ - struct DistProjectedAABBPrecalc data_precalc; - dist_squared_to_projected_aabb_precalc( - &data_precalc, snapdata->pmat, snapdata->win_size, snapdata->mval); - - bool dummy[3]; - float bb_dist_px_sq = dist_squared_to_projected_aabb( - &data_precalc, min, max, dummy); - - if (bb_dist_px_sq > dist_px_sq) { - return 0; - } + /* Test BoundBox */ + BoundBox *bb = BKE_mesh_texspace_get(em->ob->data, NULL, NULL, NULL); + if (bb && !snap_bound_box_check_dist(bb, lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) { + return 0; } + SnapObjectData_EditMesh *sod = snap_object_data_editmesh_get(sctx, em); + BVHCache *em_bvh_cache = ((Mesh *)em->ob->data)->runtime.bvh_cache; if (snapdata->snap_to_flag & SCE_SNAP_MODE_VERTEX) { @@ -2161,8 +2132,7 @@ static short snapEditMesh( int last_index = nearest.index; short elem = SCE_SNAP_MODE_VERTEX; - float lpmat[4][4], tobmat[4][4], clip_planes_local[MAX_CLIPPLANE_LEN][4]; - mul_m4_m4m4(lpmat, snapdata->pmat, obmat); + float tobmat[4][4], clip_planes_local[MAX_CLIPPLANE_LEN][4]; transpose_m4_m4(tobmat, obmat); for (int i = snapdata->clip_plane_len; i--;) { diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c index c358cffa0b4..ffdd371dfdb 100644 --- a/source/blender/editors/uvedit/uvedit_smart_stitch.c +++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c @@ -2549,18 +2549,6 @@ static int stitch_modal(bContext *C, wmOperator *op, const wmEvent *event) return OPERATOR_CANCELLED; case LEFTMOUSE: - if (event->shift && (U.flag & USER_LMOUSESELECT)) { - if (event->val == KM_PRESS) { - StitchState *selected_state = stitch_select(C, scene, event, ssc); - - if (selected_state && !stitch_process_data(ssc, selected_state, scene, false)) { - stitch_cancel(C, op); - return OPERATOR_CANCELLED; - } - } - break; - } - ATTR_FALLTHROUGH; case PADENTER: case RETKEY: if (event->val == KM_PRESS) { @@ -2658,7 +2646,7 @@ static int stitch_modal(bContext *C, wmOperator *op, const wmEvent *event) stitch_cancel(C, op); return OPERATOR_CANCELLED; } - if (event->val == KM_PRESS && !(U.flag & USER_LMOUSESELECT)) { + if (event->val == KM_PRESS) { StitchState *selected_state = stitch_select(C, scene, event, ssc); if (selected_state && !stitch_process_data(ssc, selected_state, scene, false)) { diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c index 69a48a2c93b..55728ca581f 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c @@ -203,4 +203,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Armature = { /* foreachObjectLink */ foreachObjectLink, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c index 0d0ce7476b9..553d9087c3f 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c @@ -315,6 +315,13 @@ static void foreachObjectLink( walk(userData, ob, &mmd->object, IDWALK_CB_NOP); } +static int getDuplicationFactor(GpencilModifierData *md) +{ + ArrayGpencilModifierData *mmd = (ArrayGpencilModifierData *)md; + int t = mmd->count; + CLAMP_MIN(t, 1); + return t; +} GpencilModifierTypeInfo modifierType_Gpencil_Array = { /* name */ "Array", @@ -338,4 +345,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Array = { /* foreachObjectLink */ foreachObjectLink, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ getDuplicationFactor, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c index e2a257fcb43..ba814c8538a 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c @@ -553,4 +553,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Build = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c index 4c1418fe0e3..94c5e9ddbdf 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c @@ -164,4 +164,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Color = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c index 1ec6103939a..97f260f307f 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c @@ -353,4 +353,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Hook = { /* foreachObjectLink */ foreachObjectLink, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c index d9ec81b70b9..1d8f2c20b59 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c @@ -211,4 +211,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Lattice = { /* foreachObjectLink */ foreachObjectLink, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c index 9c3d3dc9235..7599e7e9bce 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c @@ -189,6 +189,21 @@ static void foreachObjectLink( walk(userData, ob, &mmd->object, IDWALK_CB_NOP); } +static int getDuplicationFactor(GpencilModifierData *md) +{ + MirrorGpencilModifierData *mmd = (MirrorGpencilModifierData *)md; + int factor = 1; + /* create a duplication for each axis */ + for (int xi = 0; xi < 3; ++xi) { + if (mmd->flag & (GP_MIRROR_AXIS_X << xi)) { + factor++; + } + } + CLAMP_MIN(factor, 1); + + return factor; +} + GpencilModifierTypeInfo modifierType_Gpencil_Mirror = { /* name */ "Mirror", /* structName */ "MirrorGpencilModifierData", @@ -211,4 +226,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Mirror = { /* foreachObjectLink */ foreachObjectLink, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ getDuplicationFactor, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c index 399ff27eafb..097b5702721 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c @@ -285,4 +285,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Noise = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c index 43af4b94c15..2c2a5c2f994 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c @@ -143,4 +143,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Offset = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c index b89c3792455..7033b246e1c 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c @@ -183,4 +183,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Opacity = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c index 2d0b90e6de7..6ddf40df6c0 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c @@ -123,4 +123,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Simplify = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c index 8d93980a9d0..ece7ebc9816 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c @@ -150,4 +150,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Smooth = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c index 38aa4159632..71881de50fc 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c @@ -97,6 +97,14 @@ static void bakeModifier( } } +static int getDuplicationFactor(GpencilModifierData *md) +{ + SubdivGpencilModifierData *mmd = (SubdivGpencilModifierData *)md; + int t = (mmd->level + 1) * (mmd->level + 1); + CLAMP_MIN(t, 2); + return t; +} + GpencilModifierTypeInfo modifierType_Gpencil_Subdiv = { /* name */ "Subdivision", /* structName */ "SubdivGpencilModifierData", @@ -119,4 +127,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Subdiv = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ getDuplicationFactor, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c index 4c44559f36e..441cab909d3 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c @@ -53,7 +53,7 @@ static void initData(GpencilModifierData *md) { ThickGpencilModifierData *gpmd = (ThickGpencilModifierData *)md; gpmd->pass_index = 0; - gpmd->thickness = 0; + gpmd->thickness = 2; gpmd->layername[0] = '\0'; gpmd->vgname[0] = '\0'; gpmd->curve_thickness = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); @@ -171,4 +171,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Thick = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c index e220d5a5e85..d90dea91af9 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c @@ -187,4 +187,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Time = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c index ba3b2d84861..385296c943e 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c @@ -172,4 +172,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Tint = { /* foreachObjectLink */ NULL, /* foreachIDLink */ NULL, /* foreachTexLink */ NULL, + /* getDuplicationFactor */ NULL, }; diff --git a/source/blender/gpu/GPU_immediate_util.h b/source/blender/gpu/GPU_immediate_util.h index 7baf359c52e..e5b259b4783 100644 --- a/source/blender/gpu/GPU_immediate_util.h +++ b/source/blender/gpu/GPU_immediate_util.h @@ -33,6 +33,7 @@ void immRectf(uint pos, float x1, float y1, float x2, float y2); void immRecti(uint pos, int x1, int y1, int x2, int y2); /* Same as immRectf/immRecti but does not call immBegin/immEnd. To use with GPU_PRIM_TRIS. */ +void immRectf_fast(uint pos, float x1, float y1, float x2, float y2); void immRectf_fast_with_color(uint pos, uint col, float x1, float y1, float x2, float y2, const float color[4]); void immRecti_fast_with_color(uint pos, uint col, int x1, int y1, int x2, int y2, const float color[4]); diff --git a/source/blender/gpu/intern/gpu_immediate_util.c b/source/blender/gpu/intern/gpu_immediate_util.c index 983c70281a2..5cba0c42ee3 100644 --- a/source/blender/gpu/intern/gpu_immediate_util.c +++ b/source/blender/gpu/intern/gpu_immediate_util.c @@ -87,6 +87,17 @@ void immRecti(uint pos, int x1, int y1, int x2, int y2) immEnd(); } +void immRectf_fast(uint pos, float x1, float y1, float x2, float y2) +{ + immVertex2f(pos, x1, y1); + immVertex2f(pos, x2, y1); + immVertex2f(pos, x2, y2); + + immVertex2f(pos, x1, y1); + immVertex2f(pos, x2, y2); + immVertex2f(pos, x1, y2); +} + void immRectf_fast_with_color(uint pos, uint col, float x1, float y1, float x2, float y2, const float color[4]) { immAttr4fv(col, color); diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index ae6ea7eefa2..6c7c8f24f51 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -141,26 +141,16 @@ void linearrgb_to_srgb(vec4 col_from, out vec4 col_to) col_to.a = col_from.a; } -void color_to_normal(vec3 color, out vec3 normal) -{ - normal.x = 2.0 * ((color.r) - 0.5); - normal.y = -2.0 * ((color.g) - 0.5); - normal.z = 2.0 * ((color.b) - 0.5); -} - void color_to_normal_new_shading(vec3 color, out vec3 normal) { - normal.x = 2.0 * ((color.r) - 0.5); - normal.y = 2.0 * ((color.g) - 0.5); - normal.z = 2.0 * ((color.b) - 0.5); + normal = vec3(2.0) * color - vec3(1.0); } void color_to_blender_normal_new_shading(vec3 color, out vec3 normal) { - normal.x = 2.0 * ((color.r) - 0.5); - normal.y = -2.0 * ((color.g) - 0.5); - normal.z = -2.0 * ((color.b) - 0.5); + normal = vec3(2.0, -2.0, -2.0) * color - vec3(1.0); } + #ifndef M_PI #define M_PI 3.14159265358979323846 #endif @@ -812,6 +802,19 @@ void mix_linear(float fac, vec4 col1, vec4 col2, out vec4 outcol) outcol = col1 + fac * (2.0 * (col2 - vec4(0.5))); } +void valtorgb_opti_constant(float fac, float edge, vec4 color1, vec4 color2, out vec4 outcol, out float outalpha) +{ + outcol = (fac > edge) ? color2 : color1; + outalpha = outcol.a; +} + +void valtorgb_opti_linear(float fac, vec2 mulbias, vec4 color1, vec4 color2, out vec4 outcol, out float outalpha) +{ + fac = clamp(fac * mulbias.x + mulbias.y, 0.0, 1.0); + outcol = mix(color1, color2, fac); + outalpha = outcol.a; +} + void valtorgb(float fac, sampler1DArray colormap, float layer, out vec4 outcol, out float outalpha) { outcol = texture(colormap, vec2(fac, layer)); diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h index 503ad2f28d9..8a1bccc6957 100644 --- a/source/blender/makesdna/DNA_gpencil_types.h +++ b/source/blender/makesdna/DNA_gpencil_types.h @@ -236,10 +236,7 @@ typedef enum eGPDframe_Flag { /* Runtime temp data for bGPDlayer */ typedef struct bGPDlayer_Runtime { - struct bGPDframe *derived_array;/* runtime data created by modifiers */ int icon_id; /* id for dynamic icon used to show annotation color preview for layer */ - int batch_index; /* batch used for dupli instances */ - int len_derived; /* len of the derived array */ char pad_[4]; } bGPDlayer_Runtime; diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h index 3dcd31fbd7b..e363c0c54b2 100644 --- a/source/blender/makesdna/DNA_layer_types.h +++ b/source/blender/makesdna/DNA_layer_types.h @@ -123,7 +123,8 @@ enum { enum { LAYER_COLLECTION_HAS_OBJECTS = (1 << 0), LAYER_COLLECTION_HAS_VISIBLE_OBJECTS = (1 << 1), - LAYER_COLLECTION_HAS_ENABLED_OBJECTS = (1 << 2), + LAYER_COLLECTION_HAS_HIDDEN_OBJECTS = (1 << 2), + LAYER_COLLECTION_HAS_ENABLED_OBJECTS = (1 << 3), }; /* ViewLayer->flag */ diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 4eb9f890be0..c5045caec9c 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -313,14 +313,20 @@ typedef struct MirrorModifierData { /* MirrorModifierData->flag */ enum { - MOD_MIR_CLIPPING = (1 << 0), - MOD_MIR_MIRROR_U = (1 << 1), - MOD_MIR_MIRROR_V = (1 << 2), - MOD_MIR_AXIS_X = (1 << 3), - MOD_MIR_AXIS_Y = (1 << 4), - MOD_MIR_AXIS_Z = (1 << 5), - MOD_MIR_VGROUP = (1 << 6), - MOD_MIR_NO_MERGE = (1 << 7), + MOD_MIR_CLIPPING = (1 << 0), + MOD_MIR_MIRROR_U = (1 << 1), + MOD_MIR_MIRROR_V = (1 << 2), + MOD_MIR_AXIS_X = (1 << 3), + MOD_MIR_AXIS_Y = (1 << 4), + MOD_MIR_AXIS_Z = (1 << 5), + MOD_MIR_VGROUP = (1 << 6), + MOD_MIR_NO_MERGE = (1 << 7), + MOD_MIR_BISECT_AXIS_X = (1 << 8), + MOD_MIR_BISECT_AXIS_Y = (1 << 9), + MOD_MIR_BISECT_AXIS_Z = (1 << 10), + MOD_MIR_BISECT_FLIP_AXIS_X = (1 << 11), + MOD_MIR_BISECT_FLIP_AXIS_Y = (1 << 12), + MOD_MIR_BISECT_FLIP_AXIS_Z = (1 << 13), }; typedef struct EdgeSplitModifierData { diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index fca6a8767be..22b878ebac6 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -127,6 +127,11 @@ typedef struct ObjectDisplay { int flag; } ObjectDisplay; +/* Forward declaration for cache bbone deformation information. + * + * TODO(sergey): Consider moving it to more appropriate place. */ +struct ObjectBBoneDeform; + /* Not saved in file! */ typedef struct Object_Runtime { /* Original mesh pointer, before object->data was changed to point @@ -149,6 +154,8 @@ typedef struct Object_Runtime { /* Runtime grease pencil drawing data */ struct GpencilBatchCache *gpencil_cache; + + struct ObjectBBoneDeform *cached_bbone_deformation; } Object_Runtime; typedef struct Object { @@ -608,6 +615,7 @@ enum { enum { OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE = 1 << 0, OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC = 1 << 1, + OB_EMPTY_IMAGE_VISIBLE_BACKSIDE = 1 << 2, }; #define MAX_DUPLI_RECUR 8 diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 3d352d4540f..029e8765c8d 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -959,28 +959,28 @@ enum { /* ------------------------------------------- */ /* GPencil Stroke Sculpting */ -/* GP_BrushEdit_Settings.brushtype */ -typedef enum eGP_EditBrush_Types { - GP_EDITBRUSH_TYPE_SMOOTH = 0, - GP_EDITBRUSH_TYPE_THICKNESS = 1, - GP_EDITBRUSH_TYPE_STRENGTH = 2, - GP_EDITBRUSH_TYPE_GRAB = 3, - GP_EDITBRUSH_TYPE_PUSH = 4, - GP_EDITBRUSH_TYPE_TWIST = 5, - GP_EDITBRUSH_TYPE_PINCH = 6, - GP_EDITBRUSH_TYPE_RANDOMIZE = 7, - GP_EDITBRUSH_TYPE_CLONE = 8, - GP_EDITBRUSH_TYPE_SUBDIVIDE = 9, - GP_EDITBRUSH_TYPE_SIMPLIFY = 10, +/* GP_Sculpt_Settings.brushtype */ +typedef enum eGP_Sculpt_Types { + GP_SCULPT_TYPE_SMOOTH = 0, + GP_SCULPT_TYPE_THICKNESS = 1, + GP_SCULPT_TYPE_STRENGTH = 2, + GP_SCULPT_TYPE_GRAB = 3, + GP_SCULPT_TYPE_PUSH = 4, + GP_SCULPT_TYPE_TWIST = 5, + GP_SCULPT_TYPE_PINCH = 6, + GP_SCULPT_TYPE_RANDOMIZE = 7, + GP_SCULPT_TYPE_CLONE = 8, + GP_SCULPT_TYPE_SUBDIVIDE = 9, + GP_SCULPT_TYPE_SIMPLIFY = 10, /* add any sculpt brush above this value */ - GP_EDITBRUSH_TYPE_WEIGHT = 11, + GP_SCULPT_TYPE_WEIGHT = 11, /* add any weight paint brush below this value. Do no mix brushes */ - /* !!! Update GP_EditBrush_Data brush[###]; below !!! */ - GP_EDITBRUSH_TYPE_MAX, -} eGP_EditBrush_Types; + /* !!! Update GP_Sculpt_Data brush[###]; below !!! */ + GP_SCULPT_TYPE_MAX, +} eGP_Sculpt_Types; -/* GP_BrushEdit_Settings.lock_axis */ +/* GP_Sculpt_Settings.lock_axis */ typedef enum eGP_Lockaxis_Types { GP_LOCKAXIS_VIEW = 0, GP_LOCKAXIS_X = 1, @@ -989,73 +989,71 @@ typedef enum eGP_Lockaxis_Types { } eGP_Lockaxis_Types; /* Settings for a GPencil Stroke Sculpting Brush */ -typedef struct GP_EditBrush_Data { +typedef struct GP_Sculpt_Data { short size; /* radius of brush */ - short flag; /* eGP_EditBrush_Flag */ + short flag; /* eGP_Sculpt_Flag */ float strength; /* strength of effect */ float curcolor_add[3]; /* cursor color for add */ float curcolor_sub[3]; /* cursor color for sub */ -} GP_EditBrush_Data; + float target_weight; /* target weight */ + char pad_[4]; +} GP_Sculpt_Data; -/* GP_EditBrush_Data.flag */ -typedef enum eGP_EditBrush_Flag { +/* GP_Sculpt_Data.flag */ +typedef enum eGP_Sculpt_Flag { /* invert the effect of the brush */ - GP_EDITBRUSH_FLAG_INVERT = (1 << 0), + GP_SCULPT_FLAG_INVERT = (1 << 0), /* adjust strength using pen pressure */ - GP_EDITBRUSH_FLAG_USE_PRESSURE = (1 << 1), + GP_SCULPT_FLAG_USE_PRESSURE = (1 << 1), /* strength of brush falls off with distance from cursor */ - GP_EDITBRUSH_FLAG_USE_FALLOFF = (1 << 2), + GP_SCULPT_FLAG_USE_FALLOFF = (1 << 2), - /* XXX: currently unused. */ /* smooth brush affects pressure values as well */ - GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE = (1 << 3), + GP_SCULPT_FLAG_SMOOTH_PRESSURE = (1 << 3), /* enable screen cursor */ - GP_EDITBRUSH_FLAG_ENABLE_CURSOR = (1 << 4), + GP_SCULPT_FLAG_ENABLE_CURSOR = (1 << 4), /* temporary invert action */ - GP_EDITBRUSH_FLAG_TMP_INVERT = (1 << 5), + GP_SCULPT_FLAG_TMP_INVERT = (1 << 5), /* adjust radius using pen pressure */ - GP_EDITBRUSH_FLAG_PRESSURE_RADIUS = (1 << 6), -} eGP_EditBrush_Flag; - - + GP_SCULPT_FLAG_PRESSURE_RADIUS = (1 << 6), +} eGP_Sculpt_Flag; /* GPencil Stroke Sculpting Settings */ -typedef struct GP_BrushEdit_Settings { - GP_EditBrush_Data brush[12]; /* GP_EDITBRUSH_TYPE_MAX */ +typedef struct GP_Sculpt_Settings { + GP_Sculpt_Data brush[12]; /* GP_SCULPT_TYPE_MAX */ void *paintcursor; /* runtime */ - int brushtype; /* eGP_EditBrush_Types (sculpt) */ - int flag; /* eGP_BrushEdit_SettingsFlag */ + int brushtype; /* eGP_Sculpt_Types (sculpt) */ + int flag; /* eGP_Sculpt_SettingsFlag */ int lock_axis; /* eGP_Lockaxis_Types lock drawing to one axis */ char pad1[4]; /* weight paint is a submode of sculpt but use its own index. All weight paint * brushes must be defined at the end of the brush array. */ - int weighttype; /* eGP_EditBrush_Types (weight paint) */ + int weighttype; /* eGP_Sculpt_Types (weight paint) */ char pad[4]; struct CurveMapping *cur_falloff; /* multiframe edit falloff effect by frame */ -} GP_BrushEdit_Settings; +} GP_Sculpt_Settings; -/* GP_BrushEdit_Settings.flag */ -typedef enum eGP_BrushEdit_SettingsFlag { +/* GP_Sculpt_Settings.flag */ +typedef enum eGP_Sculpt_SettingsFlag { /* only affect selected points */ - GP_BRUSHEDIT_FLAG_SELECT_MASK = (1 << 0), + GP_SCULPT_SETT_FLAG_SELECT_MASK = (1 << 0), /* apply brush to position */ - GP_BRUSHEDIT_FLAG_APPLY_POSITION = (1 << 1), + GP_SCULPT_SETT_FLAG_APPLY_POSITION = (1 << 1), /* apply brush to strength */ - GP_BRUSHEDIT_FLAG_APPLY_STRENGTH = (1 << 2), + GP_SCULPT_SETT_FLAG_APPLY_STRENGTH = (1 << 2), /* apply brush to thickness */ - GP_BRUSHEDIT_FLAG_APPLY_THICKNESS = (1 << 3), + GP_SCULPT_SETT_FLAG_APPLY_THICKNESS = (1 << 3), /* apply brush to thickness */ - GP_BRUSHEDIT_FLAG_WEIGHT_MODE = (1 << 4), + GP_SCULPT_SETT_FLAG_WEIGHT_MODE = (1 << 4), /* enable falloff for multiframe editing */ - GP_BRUSHEDIT_FLAG_FRAME_FALLOFF = (1 << 5), + GP_SCULPT_SETT_FLAG_FRAME_FALLOFF = (1 << 5), /* apply brush to uv data */ - GP_BRUSHEDIT_FLAG_APPLY_UV = (1 << 6), -} eGP_BrushEdit_SettingsFlag; - + GP_SCULPT_SETT_FLAG_APPLY_UV = (1 << 6), +} eGP_Sculpt_SettingsFlag; /* Settings for GP Interpolation Operators */ typedef struct GP_Interpolate_Settings { @@ -1311,7 +1309,7 @@ typedef struct ToolSettings { short gpencil_selectmode; /* stroke selection mode */ /* Grease Pencil Sculpt */ - struct GP_BrushEdit_Settings gp_sculpt; + struct GP_Sculpt_Settings gp_sculpt; /* Grease Pencil Interpolation Tool(s) */ struct GP_Interpolate_Settings gp_interpolate; diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 512481a75b5..c9d16351635 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -541,7 +541,9 @@ typedef struct UserDef { * which are outside the scope of typical preferences. */ short app_flag; short language; - short userpref, viewzoom; + short userpref; + char userpref_flag; + char viewzoom; int mixbufsize; int audiodevice; @@ -568,8 +570,8 @@ typedef struct UserDef { struct ListBase themes; struct ListBase uifonts; struct ListBase uistyles; - struct ListBase keymaps DNA_DEPRECATED; /* deprecated in favor of user_keymaps */ struct ListBase user_keymaps; + struct ListBase user_keyconfig_prefs; /* wmKeyConfigPref. */ struct ListBase addons; struct ListBase autoexec_paths; struct ListBase user_menus; /* bUserMenu */ @@ -616,6 +618,9 @@ typedef struct UserDef { short anisotropic_filter; short use_16bit_textures, use_gpu_mipmap; + float pressure_threshold_max; /* raw tablet pressure that maps to 100% */ + float pressure_softness; /* curve non-linearity parameter */ + float ndof_sensitivity; /* overall sensitivity of 3D mouse */ float ndof_orbit_sensitivity; float ndof_deadzone; /* deadzone of 3D mouse */ @@ -684,6 +689,12 @@ typedef enum eUserPref_Section { USER_SECTION_LIGHT = 7, } eUserPref_Section; +/* UserDef.userpref_flag (State of the user preferences UI). */ +typedef enum eUserPref_SectionFlag { + /* Hide/expand keymap preferences. */ + USER_SECTION_INPUT_HIDE_UI_KEYCONFIG = (1 << 0), +} eUserPref_SectionFlag; + /* UserDef.flag */ typedef enum eUserPref_Flag { USER_AUTOSAVE = (1 << 0), @@ -700,7 +711,7 @@ typedef enum eUserPref_Flag { USER_TOOLTIPS = (1 << 11), USER_TWOBUTTONMOUSE = (1 << 12), USER_NONUMPAD = (1 << 13), - USER_LMOUSESELECT = (1 << 14), + USER_FLAG_DEPRECATED_14 = (1 << 14), /* cleared */ USER_FILECOMPRESS = (1 << 15), USER_SAVE_PREVIEWS = (1 << 16), USER_CUSTOM_RANGE = (1 << 17), diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index e51933f5a22..1fdd4d10586 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -171,6 +171,8 @@ enum { WM_KEYCONFIG_IS_INITIALIZED = (1<<1), }; +#define WM_KEYCONFIG_STR_DEFAULT "blender" + /* IME is win32 only! */ #ifndef WIN32 # ifdef __GNUC__ @@ -348,6 +350,19 @@ enum { KEYMAP_TOOL = (1 << 7), /* keymap for active tool system */ }; +/** + * This is similar to addon-preferences, + * however unlike add-ons key-config's aren't saved to disk. + * + * #wmKeyConfigPref is written to DNA, + * #wmKeyConfigPrefType_Runtime has the RNA type. + */ +typedef struct wmKeyConfigPref { + struct wmKeyConfigPref *next, *prev; + char idname[64]; /* unique name */ + IDProperty *prop; +} wmKeyConfigPref; + typedef struct wmKeyConfig { struct wmKeyConfig *next, *prev; @@ -355,13 +370,15 @@ typedef struct wmKeyConfig { char basename[64]; /* idname of configuration this is derives from, "" if none */ ListBase keymaps; - int actkeymap, flag; + int actkeymap; + short flag; + char _pad0[2]; } wmKeyConfig; /* wmKeyConfig.flag */ enum { KEYCONF_USER = (1 << 1), /* And what about (1 << 0)? */ - KEYCONF_INIT_DEFAULT = (1 << 2), + KEYCONF_INIT_DEFAULT = (1 << 2), /* Has default keymap been initialized? */ }; /* this one is the operator itself, stored in files for macros etc */ diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index a74479e193c..f540930b1d5 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -307,6 +307,7 @@ extern StructRNA RNA_Itasc; extern StructRNA RNA_JoystickSensor; extern StructRNA RNA_Key; extern StructRNA RNA_KeyConfig; +extern StructRNA RNA_KeyConfigPreferences; extern StructRNA RNA_KeyMap; extern StructRNA RNA_KeyMapItem; extern StructRNA RNA_KeyMapItems; diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index a0ceb6ce66a..cb6f62d35eb 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -2084,7 +2084,7 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR prop->update(bmain, scene, ptr); } -#if 0 +#if 1 /* TODO(campbell): Should eventually be replaced entirely by message bus (below) * for now keep since COW, bugs are hard to track when we have other missing updates. */ if (prop->noteflag) { diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index fc443f6c2fc..d9b9677bbc6 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -117,7 +117,7 @@ const EnumPropertyItem rna_enum_brush_image_tool_items[] = { }; const EnumPropertyItem rna_enum_brush_gpencil_types_items[] = { - {GPAINT_TOOL_DRAW, "DRAW", ICON_GP_STROKE, "Draw", "The brush is of type used for drawing strokes"}, + {GPAINT_TOOL_DRAW, "DRAW", ICON_STROKE, "Draw", "The brush is of type used for drawing strokes"}, {GPAINT_TOOL_FILL, "FILL", ICON_COLOR, "Fill", "The brush is of type used for filling areas"}, {GPAINT_TOOL_ERASE, "ERASE", ICON_PANEL_CLOSE, "Erase", "The brush is used for erasing strokes"}, {0, NULL, 0, NULL, NULL} diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c index 60c68bc7214..1e68ab65965 100644 --- a/source/blender/makesrna/intern/rna_camera.c +++ b/source/blender/makesrna/intern/rna_camera.c @@ -233,7 +233,7 @@ static void rna_def_camera_background_image(BlenderRNA *brna) prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_EXPANDED); RNA_def_property_ui_text(prop, "Show Expanded", "Show the expanded in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); prop = RNA_def_property(srna, "use_camera_clip", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_CAMERACLIP); diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index 898852739eb..4116dd5753f 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -2648,7 +2648,7 @@ void RNA_def_constraint(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC); RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* XXX this is really an internal flag, but it may be useful for some tools to be able to access this... */ prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c index d24be434ea1..523a4e4ad6e 100644 --- a/source/blender/makesrna/intern/rna_dynamicpaint.c +++ b/source/blender/makesrna/intern/rna_dynamicpaint.c @@ -775,8 +775,8 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna) /* paint collision type */ static const EnumPropertyItem prop_dynamicpaint_collisiontype[] = { {MOD_DPAINT_COL_PSYS, "PARTICLE_SYSTEM", ICON_PARTICLES, "Particle System", ""}, - {MOD_DPAINT_COL_POINT, "POINT", ICON_META_EMPTY, "Object Center", ""}, - {MOD_DPAINT_COL_DIST, "DISTANCE", ICON_META_EMPTY, "Proximity", ""}, + {MOD_DPAINT_COL_POINT, "POINT", ICON_EMPTY_AXIS, "Object Center", ""}, + {MOD_DPAINT_COL_DIST, "DISTANCE", ICON_DRIVER_DISTANCE, "Proximity", ""}, {MOD_DPAINT_COL_VOLDIST, "VOLUME_DISTANCE", ICON_META_CUBE, "Mesh Volume + Proximity", ""}, {MOD_DPAINT_COL_VOLUME, "VOLUME", ICON_MESH_CUBE, "Mesh Volume", ""}, {0, NULL, 0, NULL, NULL} diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index b4715075624..ef573079116 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -1395,7 +1395,7 @@ static void rna_def_fmodifier(BlenderRNA *brna) prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_EXPANDED); RNA_def_property_ui_text(prop, "Expanded", "F-Curve Modifier's panel is expanded in UI"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_MUTED); @@ -1424,7 +1424,7 @@ static void rna_def_fmodifier(BlenderRNA *brna) "F-Curve Modifier is only applied for the specified frame range to help " "mask off effects in order to chain them"); RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, "rna_FModifier_update"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); /* XXX: depends on UI implementation */ + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* XXX: depends on UI implementation */ prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "sfra"); @@ -1457,7 +1457,7 @@ static void rna_def_fmodifier(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_USEINFLUENCE); RNA_def_property_ui_text(prop, "Use Influence", "F-Curve Modifier's effects will be tempered by a default factor"); RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, "rna_FModifier_update"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); /* XXX: depends on UI implementation */ + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* XXX: depends on UI implementation */ prop = RNA_def_property(srna, "influence", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "influence"); diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c index aca68992b59..beba47f33b4 100644 --- a/source/blender/makesrna/intern/rna_gpencil_modifier.c +++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c @@ -1628,7 +1628,7 @@ void RNA_def_greasepencil_modifier(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Expanded); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC); RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* types */ rna_def_modifier_gpencilnoise(brna); diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c index ffa48df010d..46d1f5bef7d 100644 --- a/source/blender/makesrna/intern/rna_layer.c +++ b/source/blender/makesrna/intern/rna_layer.c @@ -232,6 +232,16 @@ static bool rna_LayerCollection_has_visible_objects(LayerCollection *lc, ViewLay return true; } +static bool rna_LayerCollection_has_hidden_objects(LayerCollection *lc, ViewLayer *view_layer) +{ + if ((view_layer->runtime_flag & VIEW_LAYER_HAS_HIDE) && + (lc->runtime_flag & LAYER_COLLECTION_HAS_HIDDEN_OBJECTS)) + { + return true; + } + return false; +} + static bool rna_LayerCollection_has_selected_objects(LayerCollection *lc, ViewLayer *view_layer) { return BKE_layer_collection_has_selected_objects(view_layer, lc); @@ -297,6 +307,12 @@ static void rna_def_layer_collection(BlenderRNA *brna) RNA_def_parameter_flags(prop, 0, PARM_REQUIRED); RNA_def_function_return(func, RNA_def_boolean(func, "result", 0, "", "")); + func = RNA_def_function(srna, "has_hidden_objects", "rna_LayerCollection_has_hidden_objects"); + RNA_def_function_ui_description(func, ""); + prop = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "ViewLayer the layer collection belongs to"); + RNA_def_parameter_flags(prop, 0, PARM_REQUIRED); + RNA_def_function_return(func, RNA_def_boolean(func, "result", 0, "", "")); + func = RNA_def_function(srna, "has_selected_objects", "rna_LayerCollection_has_selected_objects"); RNA_def_function_ui_description(func, ""); prop = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "ViewLayer the layer collection belongs to"); diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index b633dd907ae..2a7bb6c1533 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -1541,19 +1541,22 @@ static void rna_def_modifier_mirror(BlenderRNA *brna) RNA_def_struct_sdna(srna, "MirrorModifierData"); RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR); - prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "use_axis", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_X); - RNA_def_property_ui_text(prop, "X", "Enable X axis mirror"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Mirror Axis", "Enable axis mirror"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); - prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Y); - RNA_def_property_ui_text(prop, "Y", "Enable Y axis mirror"); + prop = RNA_def_property(srna, "use_bisect_axis", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_BISECT_AXIS_X); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Bisect Axis", "Cuts the mesh across the mirrorplane"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); - prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Z); - RNA_def_property_ui_text(prop, "Z", "Enable Z axis mirror"); + prop = RNA_def_property(srna, "use_bisect_flip_axis", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_BISECT_FLIP_AXIS_X); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Bisect Flip Axis", "Flips the direction of the slice"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE); @@ -5088,7 +5091,7 @@ void RNA_def_modifier(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC); RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); prop = RNA_def_property(srna, "use_apply_on_spline", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_ApplyOnSpline); diff --git a/source/blender/makesrna/intern/rna_movieclip.c b/source/blender/makesrna/intern/rna_movieclip.c index aedaeccc0b6..db93518a6c7 100644 --- a/source/blender/makesrna/intern/rna_movieclip.c +++ b/source/blender/makesrna/intern/rna_movieclip.c @@ -72,6 +72,12 @@ static void rna_MovieClip_size_get(PointerRNA *ptr, int *values) values[1] = clip->lastsize[1]; } +static float rna_MovieClip_fps_get(PointerRNA *ptr) +{ + MovieClip *clip = (MovieClip *)ptr->id.data; + return BKE_movieclip_get_fps(clip); +} + static void rna_MovieClipUser_proxy_render_settings_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) { ID *id = (ID *) ptr->id.data; @@ -363,6 +369,12 @@ static void rna_def_movieclip(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "len"); RNA_def_property_ui_text(prop, "Duration", "Detected duration of movie clip in frames"); + /* FPS */ + prop = RNA_def_property(srna, "fps", PROP_FLOAT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_float_funcs(prop, "rna_MovieClip_fps_get", NULL, NULL); + RNA_def_property_ui_text(prop, "Frame Rate", "Detected frame rate of the movie clip in frames per second"); + /* color management */ prop = RNA_def_property(srna, "colorspace_settings", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "colorspace_settings"); diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 9ac5d73ed93..96def17bc3e 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -99,14 +99,14 @@ const EnumPropertyItem rna_enum_workspace_object_mode_items[] = { }; const EnumPropertyItem rna_enum_object_empty_drawtype_items[] = { - {OB_PLAINAXES, "PLAIN_AXES", 0, "Plain Axes", ""}, - {OB_ARROWS, "ARROWS", 0, "Arrows", ""}, - {OB_SINGLE_ARROW, "SINGLE_ARROW", 0, "Single Arrow", ""}, - {OB_CIRCLE, "CIRCLE", 0, "Circle", ""}, - {OB_CUBE, "CUBE", 0, "Cube", ""}, - {OB_EMPTY_SPHERE, "SPHERE", 0, "Sphere", ""}, - {OB_EMPTY_CONE, "CONE", 0, "Cone", ""}, - {OB_EMPTY_IMAGE, "IMAGE", 0, "Image", ""}, + {OB_PLAINAXES, "PLAIN_AXES", ICON_EMPTY_AXIS, "Plain Axes", ""}, + {OB_ARROWS, "ARROWS", ICON_EMPTY_ARROWS, "Arrows", ""}, + {OB_SINGLE_ARROW, "SINGLE_ARROW", ICON_EMPTY_SINGLE_ARROW, "Single Arrow", ""}, + {OB_CIRCLE, "CIRCLE", ICON_MESH_CIRCLE, "Circle", ""}, + {OB_CUBE, "CUBE", ICON_CUBE, "Cube", ""}, + {OB_EMPTY_SPHERE, "SPHERE", ICON_SPHERE, "Sphere", ""}, + {OB_EMPTY_CONE, "CONE", ICON_CONE, "Cone", ""}, + {OB_EMPTY_IMAGE, "IMAGE", ICON_FILE_IMAGE, "Image", ""}, {0, NULL, 0, NULL, NULL} }; @@ -118,8 +118,8 @@ const EnumPropertyItem rna_enum_object_empty_image_depth_items[] = { }; const EnumPropertyItem rna_enum_object_gpencil_type_items[] = { - {GP_EMPTY, "EMPTY", ICON_GP_EMPTY, "Blank", "Create an empty grease pencil object"}, - {GP_STROKE, "STROKE", ICON_GP_STROKE, "Stroke", "Create a simple stroke with basic colors"}, + {GP_EMPTY, "EMPTY", ICON_EMPTY_AXIS, "Blank", "Create an empty grease pencil object"}, + {GP_STROKE, "STROKE", ICON_STROKE, "Stroke", "Create a simple stroke with basic colors"}, {GP_MONKEY, "MONKEY", ICON_MONKEY, "Monkey", "Construct a Suzanne grease pencil object"}, {0, NULL, 0, NULL, NULL } }; @@ -2510,6 +2510,11 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Display in Orthographic Mode", "Display image in orthographic mode"); RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL); + prop = RNA_def_property(srna, "show_empty_image_backside", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "empty_image_visibility_flag", OB_EMPTY_IMAGE_VISIBLE_BACKSIDE); + RNA_def_property_ui_text(prop, "Display Back Side", "Display empty image even when viewed from the back"); + RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL); + /* render */ prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "index"); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 4791fbdc642..eeb48b67d28 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -2225,7 +2225,7 @@ static void rna_def_tool_settings(BlenderRNA *brna) {GP_PROJECT_VIEWSPACE, "ORIGIN", ICON_OBJECT_ORIGIN, "Origin", "Draw stroke at Object origin"}, {GP_PROJECT_VIEWSPACE | GP_PROJECT_CURSOR, "CURSOR", ICON_PIVOT_CURSOR, "3D Cursor", "Draw stroke at 3D cursor location" }, {GP_PROJECT_VIEWSPACE | GP_PROJECT_DEPTH_VIEW, "SURFACE", ICON_SNAP_FACE, "Surface", "Stick stroke to surfaces"}, - {GP_PROJECT_VIEWSPACE | GP_PROJECT_DEPTH_STROKE, "STROKE", ICON_GP_STROKE, "Stroke", "Stick stroke to other strokes"}, + {GP_PROJECT_VIEWSPACE | GP_PROJECT_DEPTH_STROKE, "STROKE", ICON_STROKE, "Stroke", "Stick stroke to other strokes"}, {0, NULL, 0, NULL, NULL} }; @@ -4872,8 +4872,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna) prop = RNA_def_property(srna, "motion_blur_shutter", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_sdna(prop, NULL, "blurfac"); RNA_def_property_ui_range(prop, 0.01f, 2.0f, 1, 2); - RNA_def_property_ui_text(prop, "Shutter", "Time taken in frames between shutter open and close " - "(NOTE: Blender Internal does not support animated shutter)"); + RNA_def_property_ui_text(prop, "Shutter", "Time taken in frames between shutter open and close"); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_glsl_update"); prop = RNA_def_property(srna, "motion_blur_shutter_curve", PROP_POINTER, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 953571247f2..d106e2db6eb 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -66,20 +66,20 @@ const EnumPropertyItem rna_enum_particle_edit_hair_brush_items[] = { }; const EnumPropertyItem rna_enum_gpencil_sculpt_brush_items[] = { - {GP_EDITBRUSH_TYPE_SMOOTH, "SMOOTH", ICON_GPBRUSH_SMOOTH, "Smooth", "Smooth stroke points"}, - {GP_EDITBRUSH_TYPE_THICKNESS, "THICKNESS", ICON_GPBRUSH_THICKNESS, "Thickness", "Adjust thickness of strokes"}, - {GP_EDITBRUSH_TYPE_STRENGTH, "STRENGTH", ICON_GPBRUSH_STRENGTH, "Strength", "Adjust color strength of strokes" }, - {GP_EDITBRUSH_TYPE_GRAB, "GRAB", ICON_GPBRUSH_GRAB, "Grab", "Translate the set of points initially within the brush circle" }, - {GP_EDITBRUSH_TYPE_PUSH, "PUSH", ICON_GPBRUSH_PUSH, "Push", "Move points out of the way, as if combing them"}, - {GP_EDITBRUSH_TYPE_TWIST, "TWIST", ICON_GPBRUSH_TWIST, "Twist", "Rotate points around the midpoint of the brush"}, - {GP_EDITBRUSH_TYPE_PINCH, "PINCH", ICON_GPBRUSH_PINCH, "Pinch", "Pull points towards the midpoint of the brush"}, - {GP_EDITBRUSH_TYPE_RANDOMIZE, "RANDOMIZE", ICON_GPBRUSH_RANDOMIZE, "Randomize", "Introduce jitter/randomness into strokes"}, - {GP_EDITBRUSH_TYPE_CLONE, "CLONE", ICON_GPBRUSH_CLONE, "Clone", "Paste copies of the strokes stored on the clipboard"}, + {GP_SCULPT_TYPE_SMOOTH, "SMOOTH", ICON_GPBRUSH_SMOOTH, "Smooth", "Smooth stroke points"}, + {GP_SCULPT_TYPE_THICKNESS, "THICKNESS", ICON_GPBRUSH_THICKNESS, "Thickness", "Adjust thickness of strokes"}, + {GP_SCULPT_TYPE_STRENGTH, "STRENGTH", ICON_GPBRUSH_STRENGTH, "Strength", "Adjust color strength of strokes" }, + {GP_SCULPT_TYPE_GRAB, "GRAB", ICON_GPBRUSH_GRAB, "Grab", "Translate the set of points initially within the brush circle" }, + {GP_SCULPT_TYPE_PUSH, "PUSH", ICON_GPBRUSH_PUSH, "Push", "Move points out of the way, as if combing them"}, + {GP_SCULPT_TYPE_TWIST, "TWIST", ICON_GPBRUSH_TWIST, "Twist", "Rotate points around the midpoint of the brush"}, + {GP_SCULPT_TYPE_PINCH, "PINCH", ICON_GPBRUSH_PINCH, "Pinch", "Pull points towards the midpoint of the brush"}, + {GP_SCULPT_TYPE_RANDOMIZE, "RANDOMIZE", ICON_GPBRUSH_RANDOMIZE, "Randomize", "Introduce jitter/randomness into strokes"}, + {GP_SCULPT_TYPE_CLONE, "CLONE", ICON_GPBRUSH_CLONE, "Clone", "Paste copies of the strokes stored on the clipboard"}, { 0, NULL, 0, NULL, NULL } }; const EnumPropertyItem rna_enum_gpencil_weight_brush_items[] = { - {GP_EDITBRUSH_TYPE_WEIGHT, "WEIGHT", ICON_GPBRUSH_WEIGHT, "Weight", "Weight Paint for Vertex Groups"}, + {GP_SCULPT_TYPE_WEIGHT, "WEIGHT", ICON_GPBRUSH_WEIGHT, "Weight", "Weight Paint for Vertex Groups"}, {0, NULL, 0, NULL, NULL} }; @@ -518,15 +518,15 @@ static bool rna_ImaPaint_detect_data(ImagePaintSettings *imapaint) static PointerRNA rna_GPencilSculptSettings_brush_get(PointerRNA *ptr) { - GP_BrushEdit_Settings *gset = (GP_BrushEdit_Settings *)ptr->data; - GP_EditBrush_Data *brush = NULL; + GP_Sculpt_Settings *gset = (GP_Sculpt_Settings *)ptr->data; + GP_Sculpt_Data *brush = NULL; - if ((gset) && (gset->flag & GP_BRUSHEDIT_FLAG_WEIGHT_MODE)) { - if ((gset->weighttype >= GP_EDITBRUSH_TYPE_WEIGHT) && (gset->weighttype < GP_EDITBRUSH_TYPE_MAX)) + if ((gset) && (gset->flag & GP_SCULPT_SETT_FLAG_WEIGHT_MODE)) { + if ((gset->weighttype >= GP_SCULPT_TYPE_WEIGHT) && (gset->weighttype < GP_SCULPT_TYPE_MAX)) brush = &gset->brush[gset->weighttype]; } else { - if ((gset->brushtype >= 0) && (gset->brushtype < GP_EDITBRUSH_TYPE_WEIGHT)) + if ((gset->brushtype >= 0) && (gset->brushtype < GP_SCULPT_TYPE_WEIGHT)) brush = &gset->brush[gset->brushtype]; } return rna_pointer_inherit_refine(ptr, &RNA_GPencilSculptBrush, brush); @@ -1181,7 +1181,7 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) { static const EnumPropertyItem prop_direction_items[] = { {0, "ADD", ICON_ADD, "Add", "Add effect of brush"}, - {GP_EDITBRUSH_FLAG_INVERT, "SUBTRACT", ICON_REMOVE, "Subtract", "Subtract effect of brush"}, + {GP_SCULPT_FLAG_INVERT, "SUBTRACT", ICON_REMOVE, "Subtract", "Subtract effect of brush"}, {0, NULL, 0, NULL, NULL}}; StructRNA *srna; @@ -1189,7 +1189,7 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) /* == Settings == */ srna = RNA_def_struct(brna, "GPencilSculptSettings", NULL); - RNA_def_struct_sdna(srna, "GP_BrushEdit_Settings"); + RNA_def_struct_sdna(srna, "GP_Sculpt_Settings"); RNA_def_struct_path_func(srna, "rna_GPencilSculptSettings_path"); RNA_def_struct_ui_text(srna, "GPencil Sculpt Settings", "Properties for Grease Pencil stroke sculpting tool"); @@ -1214,38 +1214,38 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Brush", ""); prop = RNA_def_property(srna, "use_select_mask", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_SELECT_MASK); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_SELECT_MASK); RNA_def_property_ui_text(prop, "Selection Mask", "Only sculpt selected stroke points"); RNA_def_property_ui_icon(prop, ICON_GP_ONLY_SELECTED, 0); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_APPLY_POSITION); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_POSITION); RNA_def_property_ui_text(prop, "Affect Position", "The brush affects the position of the point"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_APPLY_STRENGTH); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_STRENGTH); RNA_def_property_ui_text(prop, "Affect Strength", "The brush affects the color strength of the point"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_APPLY_THICKNESS); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_THICKNESS); RNA_def_property_ui_text(prop, "Affect Thickness", "The brush affects the thickness of the point"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_APPLY_UV); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_UV); RNA_def_property_ui_text(prop, "Affect UV", "The brush affects the UV rotation of the point"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); prop = RNA_def_property(srna, "use_multiframe_falloff", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_FRAME_FALLOFF); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_FRAME_FALLOFF); RNA_def_property_ui_text(prop, "Use Falloff", "Use falloff effect when edit in multiframe mode to compute brush effect by frame"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); @@ -1269,7 +1269,7 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) /* brush */ srna = RNA_def_struct(brna, "GPencilSculptBrush", NULL); - RNA_def_struct_sdna(srna, "GP_EditBrush_Data"); + RNA_def_struct_sdna(srna, "GP_Sculpt_Data"); RNA_def_struct_path_func(srna, "rna_GPencilSculptBrush_path"); RNA_def_struct_ui_text(srna, "GPencil Sculpt Brush", "Stroke editing brush"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); @@ -1287,28 +1287,34 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + prop = RNA_def_property(srna, "target_weight", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Weight", "Target weight"); + RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + prop = RNA_def_property(srna, "use_pressure_strength", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_USE_PRESSURE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_USE_PRESSURE); RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0); RNA_def_property_ui_text(prop, "Strength Pressure", "Enable tablet pressure sensitivity for strength"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); prop = RNA_def_property(srna, "use_pressure_radius", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_PRESSURE_RADIUS); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_PRESSURE_RADIUS); RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0); RNA_def_property_ui_text(prop, "Radius Pressure", "Enable tablet pressure sensitivity for radius"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); prop = RNA_def_property(srna, "use_falloff", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_USE_FALLOFF); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_USE_FALLOFF); RNA_def_property_ui_text(prop, "Use Falloff", "Strength of brush decays with distance from cursor"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); prop = RNA_def_property(srna, "use_edit_pressure", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_SMOOTH_PRESSURE); RNA_def_property_ui_text(prop, "Affect Pressure", "Affect pressure values as well when smoothing strokes"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); @@ -1341,7 +1347,7 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); prop = RNA_def_property(srna, "use_cursor", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_ENABLE_CURSOR); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_ENABLE_CURSOR); RNA_def_property_boolean_default(prop, true); RNA_def_property_ui_text(prop, "Enable Cursor", "Enable cursor on screen"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); diff --git a/source/blender/makesrna/intern/rna_shader_fx.c b/source/blender/makesrna/intern/rna_shader_fx.c index c1bc9ba191e..ef045be82ca 100644 --- a/source/blender/makesrna/intern/rna_shader_fx.c +++ b/source/blender/makesrna/intern/rna_shader_fx.c @@ -689,7 +689,7 @@ void RNA_def_shader_fx(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "mode", eShaderFxMode_Expanded); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC); RNA_def_property_ui_text(prop, "Expanded", "Set effect expanded in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* types */ rna_def_shader_fx_blur(brna); diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index daff33f40db..ee00d897530 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -278,7 +278,7 @@ static const EnumPropertyItem buttons_context_items[] = { {BCONTEXT_TOOL, "TOOL", ICON_TOOL_SETTINGS, "Tool", "Active Tool and Workspace settings"}, {BCONTEXT_SCENE, "SCENE", ICON_SCENE_DATA, "Scene", "Scene"}, {BCONTEXT_RENDER, "RENDER", ICON_SCENE, "Render", "Render"}, - {BCONTEXT_OUTPUT, "OUTPUT", ICON_IMAGE_DATA, "Output", "Output"}, + {BCONTEXT_OUTPUT, "OUTPUT", ICON_OUTPUT, "Output", "Output"}, {BCONTEXT_VIEW_LAYER, "VIEW_LAYER", ICON_RENDER_RESULT, "View Layer", "View Layer"}, {BCONTEXT_WORLD, "WORLD", ICON_WORLD, "World", "World"}, {BCONTEXT_OBJECT, "OBJECT", ICON_OBJECT_DATA, "Object", "Object"}, diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index 4c5af755b13..ed41d209f6a 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -915,14 +915,14 @@ static void rna_def_trackingSettings(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_SETTINGS_SHOW_DEFAULT_EXPANDED); RNA_def_property_ui_text(prop, "Show Expanded", "Show default options expanded in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* ** extra tracker settings ** */ prop = RNA_def_property(srna, "show_extra_expanded", PROP_BOOLEAN, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_SETTINGS_SHOW_EXTRA_EXPANDED); RNA_def_property_ui_text(prop, "Show Expanded", "Show extra options expanded in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* solver settings */ prop = RNA_def_property(srna, "use_tripod_solver", PROP_BOOLEAN, PROP_NONE); @@ -1794,7 +1794,7 @@ static void rna_def_trackingStabilization(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_SHOW_STAB_TRACKS); RNA_def_property_ui_text(prop, "Show Tracks", "Show UI list of tracks participating in stabilization"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); } static void rna_def_reconstructedCamera(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 5f4b6ffc41c..ea39ce72598 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -249,6 +249,9 @@ static StructRNA *rna_Panel_register( if (dummypt.category[0] == '\0') { /* Use a fallback, otherwise an empty value will draw the panel in every category. */ strcpy(dummypt.category, PNL_CATEGORY_FALLBACK); +#ifndef NDEBUG + printf("Registering panel class: '%s' misses category, please update the script\n", dummypt.idname); +#endif } } else { diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 84258835b14..03f86eba601 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -81,7 +81,8 @@ const EnumPropertyItem rna_enum_navigation_mode_items[] = { #if defined(WITH_INTERNATIONAL) || !defined(RNA_RUNTIME) static const EnumPropertyItem rna_enum_language_default_items[] = { - {0, "DEFAULT", 0, "Default (Default)", ""}, + {0, "DEFAULT", 0, "Automatic (Automatic)", + "Automatically choose system's defined language if available, or fall-back to English"}, {0, NULL, 0, NULL, NULL} }; #endif @@ -210,23 +211,6 @@ static void rna_userdef_undo_steps_set(PointerRNA *ptr, int value) userdef->undosteps = (value == 1) ? 2 : value; } -static void rna_userdef_select_mouse_set(PointerRNA *ptr, int value) -{ - UserDef *userdef = (UserDef *)ptr->data; - - if (value) { - userdef->flag |= USER_LMOUSESELECT; - userdef->flag &= ~USER_TWOBUTTONMOUSE; - } - else - userdef->flag &= ~USER_LMOUSESELECT; -} - -static void rna_userdef_select_mouse_update(bContext *C, Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr)) -{ - WM_keyconfig_reload(C); -} - static int rna_userdef_autokeymode_get(PointerRNA *ptr) { UserDef *userdef = (UserDef *)ptr->data; @@ -565,34 +549,34 @@ static StructRNA *rna_AddonPref_register( Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) { - bAddonPrefType *apt, dummyapt = {{'\0'}}; - bAddon dummyaddon = {NULL}; - PointerRNA dummyhtr; + bAddonPrefType *apt, dummy_apt = {{'\0'}}; + bAddon dummy_addon = {NULL}; + PointerRNA dummy_ptr; // int have_function[1]; - /* setup dummy header & header type to store static properties in */ - RNA_pointer_create(NULL, &RNA_AddonPreferences, &dummyaddon, &dummyhtr); + /* setup dummy addon-pref & addon-pref type to store static properties in */ + RNA_pointer_create(NULL, &RNA_AddonPreferences, &dummy_addon, &dummy_ptr); /* validate the python class */ - if (validate(&dummyhtr, data, NULL /* have_function */ ) != 0) + if (validate(&dummy_ptr, data, NULL /* have_function */ ) != 0) return NULL; - BLI_strncpy(dummyapt.idname, dummyaddon.module, sizeof(dummyapt.idname)); - if (strlen(identifier) >= sizeof(dummyapt.idname)) { + BLI_strncpy(dummy_apt.idname, dummy_addon.module, sizeof(dummy_apt.idname)); + if (strlen(identifier) >= sizeof(dummy_apt.idname)) { BKE_reportf(reports, RPT_ERROR, "Registering add-on preferences class: '%s' is too long, maximum length is %d", - identifier, (int)sizeof(dummyapt.idname)); + identifier, (int)sizeof(dummy_apt.idname)); return NULL; } - /* check if we have registered this header type before, and remove it */ - apt = BKE_addon_pref_type_find(dummyaddon.module, true); + /* check if we have registered this addon-pref type before, and remove it */ + apt = BKE_addon_pref_type_find(dummy_addon.module, true); if (apt && apt->ext.srna) { rna_AddonPref_unregister(bmain, apt->ext.srna); } - /* create a new header type */ + /* create a new addon-pref type */ apt = MEM_mallocN(sizeof(bAddonPrefType), "addonpreftype"); - memcpy(apt, &dummyapt, sizeof(dummyapt)); + memcpy(apt, &dummy_apt, sizeof(dummy_apt)); BKE_addon_pref_type_add(apt); apt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_AddonPreferences); @@ -743,7 +727,7 @@ static void rna_UserDef_studiolight_spherical_harmonics_coefficients_get(Pointer { StudioLight *sl = (StudioLight *)ptr->data; float *value = values; - for (int i = 0; i < STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS; i++) { + for (int i = 0; i < STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN; i++) { copy_v3_v3(value, sl->spherical_harmonics_coefs[i]); value += 3; } @@ -3396,7 +3380,7 @@ static void rna_def_userdef_studiolight(BlenderRNA *brna) RNA_def_property_ui_text(prop, "SH Cache Path", "Path where the spherical harmonics cache is stored"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - const int spherical_harmonics_dim[] = {STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS, 3}; + const int spherical_harmonics_dim[] = {STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN, 3}; prop = RNA_def_property(srna, "spherical_harmonics_coefficients", PROP_FLOAT, PROP_COLOR); RNA_def_property_multi_array(prop, 2, spherical_harmonics_dim); RNA_def_property_clear_flag(prop, PROP_EDITABLE); @@ -4213,12 +4197,7 @@ static void rna_def_userdef_system(BlenderRNA *brna) RNA_def_struct_clear_flag(srna, STRUCT_UNDO); RNA_def_struct_ui_text(srna, "System & OpenGL", "Graphics driver and operating system settings"); - /* Language */ - - prop = RNA_def_property(srna, "use_international_fonts", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_DOTRANSLATE); - RNA_def_property_ui_text(prop, "International Fonts", "Use international fonts"); - RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_language_update"); + /* UI settings. */ prop = RNA_def_property(srna, "ui_scale", PROP_FLOAT, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); @@ -4263,7 +4242,12 @@ static void rna_def_userdef_system(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Author", "Name that will be used in exported files when format supports such feature"); - /* Language Selection */ + /* Language. */ + + prop = RNA_def_property(srna, "use_international_fonts", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_DOTRANSLATE); + RNA_def_property_ui_text(prop, "Translate UI", "Enable UI translation and use international fonts"); + RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_language_update"); prop = RNA_def_property(srna, "language", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, rna_enum_language_default_items); @@ -4275,17 +4259,21 @@ static void rna_def_userdef_system(BlenderRNA *brna) prop = RNA_def_property(srna, "use_translate_tooltips", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_TOOLTIPS); - RNA_def_property_ui_text(prop, "Translate Tooltips", "Translate tooltips"); + RNA_def_property_ui_text(prop, "Translate Tooltips", + "Translate the descriptions when hovering UI elements (recommended)"); RNA_def_property_update(prop, 0, "rna_userdef_update"); prop = RNA_def_property(srna, "use_translate_interface", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_IFACE); - RNA_def_property_ui_text(prop, "Translate Interface", "Translate interface"); + RNA_def_property_ui_text(prop, "Translate Interface", + "Translate all labels in menus, buttons and panels " + "(note that this might make it hard to follow tutorials or the manual)"); RNA_def_property_update(prop, 0, "rna_userdef_update"); prop = RNA_def_property(srna, "use_translate_new_dataname", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_NEWDATANAME); - RNA_def_property_ui_text(prop, "Translate New Names", "Translate new data names (when adding/creating some)"); + RNA_def_property_ui_text(prop, "Translate New Names", + "Translate the names of new data-blocks (objects, materials...)"); RNA_def_property_update(prop, 0, "rna_userdef_update"); /* System & OpenGL */ @@ -4500,12 +4488,6 @@ static void rna_def_userdef_input(BlenderRNA *brna) PropertyRNA *prop; StructRNA *srna; - static const EnumPropertyItem select_mouse_items[] = { - {USER_LMOUSESELECT, "LEFT", 0, "Left", "Use left Mouse Button for selection"}, - {0, "RIGHT", 0, "Right", "Use Right Mouse Button for selection"}, - {0, NULL, 0, NULL, NULL} - }; - static const EnumPropertyItem view_rotation_items[] = { {0, "TURNTABLE", 0, "Turntable", "Use turntable style rotation in the viewport"}, {USER_TRACKBALL, "TRACKBALL", 0, "Trackball", "Use trackball style rotation in the viewport"}, @@ -4546,13 +4528,9 @@ static void rna_def_userdef_input(BlenderRNA *brna) RNA_def_struct_clear_flag(srna, STRUCT_UNDO); RNA_def_struct_ui_text(srna, "Input", "Settings for input devices"); - prop = RNA_def_property(srna, "select_mouse", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag"); - RNA_def_property_enum_items(prop, select_mouse_items); - RNA_def_property_enum_funcs(prop, NULL, "rna_userdef_select_mouse_set", NULL); - RNA_def_property_ui_text(prop, "Select Mouse", "Mouse button used for selection"); - RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); - RNA_def_property_update(prop, 0, "rna_userdef_select_mouse_update"); + prop = RNA_def_property(srna, "show_ui_keyconfig", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "userpref_flag", USER_SECTION_INPUT_HIDE_UI_KEYCONFIG); + RNA_def_property_ui_text(prop, "Show UI Key-Config", ""); prop = RNA_def_property(srna, "view_zoom_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "viewzoom"); @@ -4604,6 +4582,20 @@ static void rna_def_userdef_input(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Tweak Threshold", "Number of pixels you have to drag before tweak event is triggered"); + /* tablet pressure curve */ + prop = RNA_def_property(srna, "pressure_threshold_max", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_float_default(prop, 1.0f); + RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01f, 3); + RNA_def_property_ui_text(prop, "Max Threshold", + "Raw input pressure value that is interpreted as 100% by Blender"); + + prop = RNA_def_property(srna, "pressure_softness", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); + RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.1f, 2); + RNA_def_property_ui_text(prop, "Softness", + "Adjusts softness of the low pressure response onset using a gamma curve"); + #ifdef WITH_INPUT_NDOF /* 3D mouse settings */ /* global options */ diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 4e79c516ae3..77a10e6dbbc 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -37,6 +37,7 @@ #include "BLT_translation.h" #include "BKE_workspace.h" +#include "BKE_keyconfig.h" #include "RNA_access.h" #include "RNA_define.h" @@ -74,8 +75,6 @@ static const EnumPropertyItem event_tweak_type_items[] = { {EVT_TWEAK_L, "EVT_TWEAK_L", 0, "Left", ""}, {EVT_TWEAK_M, "EVT_TWEAK_M", 0, "Middle", ""}, {EVT_TWEAK_R, "EVT_TWEAK_R", 0, "Right", ""}, - {EVT_TWEAK_A, "EVT_TWEAK_A", 0, "Action", ""}, - {EVT_TWEAK_S, "EVT_TWEAK_S", 0, "Select", ""}, {0, NULL, 0, NULL, NULL} }; @@ -87,8 +86,6 @@ static const EnumPropertyItem event_mouse_type_items[] = { {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5", ""}, {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6", ""}, {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7", ""}, - {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action", ""}, - {SELECTMOUSE, "SELECTMOUSE", 0, "Select", ""}, {0, "", 0, NULL, NULL}, {TABLET_STYLUS, "PEN", 0, "Pen", ""}, {TABLET_ERASER, "ERASER", 0, "Eraser", ""}, @@ -184,8 +181,6 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5 Mouse", "MB5"}, {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6 Mouse", "MB6"}, {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7 Mouse", "MB7"}, - {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action Mouse", "MBA"}, - {SELECTMOUSE, "SELECTMOUSE", 0, "Select Mouse", "MBS"}, {0, "", 0, NULL, NULL}, {TABLET_STYLUS, "PEN", 0, "Pen", ""}, {TABLET_ERASER, "ERASER", 0, "Eraser", ""}, @@ -204,8 +199,6 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {EVT_TWEAK_L, "EVT_TWEAK_L", 0, "Tweak Left", "TwkL"}, {EVT_TWEAK_M, "EVT_TWEAK_M", 0, "Tweak Middle", "TwkM"}, {EVT_TWEAK_R, "EVT_TWEAK_R", 0, "Tweak Right", "TwkR"}, - {EVT_TWEAK_A, "EVT_TWEAK_A", 0, "Tweak Action", "TwkA"}, - {EVT_TWEAK_S, "EVT_TWEAK_S", 0, "Tweak Select", "TwkS"}, {0, "", 0, NULL, NULL}, {AKEY, "A", 0, "A", ""}, {BKEY, "B", 0, "B", ""}, @@ -994,6 +987,107 @@ static void rna_WindowManager_active_keyconfig_set(PointerRNA *ptr, PointerRNA v WM_keyconfig_set_active(wm, kc->idname); } +/* -------------------------------------------------------------------- */ +/** \name Key Config Preferences + * \{ */ + +static PointerRNA rna_wmKeyConfig_preferences_get(PointerRNA *ptr) +{ + wmKeyConfig *kc = ptr->data; + wmKeyConfigPrefType_Runtime *kpt_rt = BKE_keyconfig_pref_type_find(kc->idname, true); + if (kpt_rt) { + wmKeyConfigPref *kpt = BKE_keyconfig_pref_ensure(&U, kc->idname); + return rna_pointer_inherit_refine(ptr, kpt_rt->ext.srna, kpt->prop); + } + else { + return PointerRNA_NULL; + } +} + +static IDProperty *rna_wmKeyConfigPref_idprops(PointerRNA *ptr, bool create) +{ + if (create && !ptr->data) { + IDPropertyTemplate val = {0}; + ptr->data = IDP_New(IDP_GROUP, &val, "RNA_KeyConfigPreferences group"); + } + return ptr->data; +} + +static void rna_wmKeyConfigPref_unregister(Main *UNUSED(bmain), StructRNA *type) +{ + wmKeyConfigPrefType_Runtime *kpt_rt = RNA_struct_blender_type_get(type); + + if (!kpt_rt) + return; + + RNA_struct_free_extension(type, &kpt_rt->ext); + RNA_struct_free(&BLENDER_RNA, type); + + /* Possible we're not in the preferences if they have been reset. */ + BKE_keyconfig_pref_type_remove(kpt_rt); + + /* update while blender is running */ + WM_main_add_notifier(NC_WINDOW, NULL); +} + +static StructRNA *rna_wmKeyConfigPref_register( + Main *bmain, ReportList *reports, void *data, const char *identifier, + StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) +{ + wmKeyConfigPrefType_Runtime *kpt_rt, dummy_kpt_rt = {{'\0'}}; + wmKeyConfigPref dummy_kpt = {NULL}; + PointerRNA dummy_ptr; + // int have_function[1]; + + /* setup dummy keyconf-prefs & keyconf-prefs type to store static properties in */ + RNA_pointer_create(NULL, &RNA_KeyConfigPreferences, &dummy_kpt, &dummy_ptr); + + /* validate the python class */ + if (validate(&dummy_ptr, data, NULL /* have_function */ ) != 0) + return NULL; + + STRNCPY(dummy_kpt_rt.idname, dummy_kpt.idname); + if (strlen(identifier) >= sizeof(dummy_kpt_rt.idname)) { + BKE_reportf(reports, RPT_ERROR, "Registering key-config preferences class: '%s' is too long, maximum length is %d", + identifier, (int)sizeof(dummy_kpt_rt.idname)); + return NULL; + } + + /* check if we have registered this keyconf-prefs type before, and remove it */ + kpt_rt = BKE_keyconfig_pref_type_find(dummy_kpt.idname, true); + if (kpt_rt && kpt_rt->ext.srna) { + rna_wmKeyConfigPref_unregister(bmain, kpt_rt->ext.srna); + } + + /* create a new keyconf-prefs type */ + kpt_rt = MEM_mallocN(sizeof(wmKeyConfigPrefType_Runtime), "keyconfigpreftype"); + memcpy(kpt_rt, &dummy_kpt_rt, sizeof(dummy_kpt_rt)); + + BKE_keyconfig_pref_type_add(kpt_rt); + + kpt_rt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_KeyConfigPreferences); + kpt_rt->ext.data = data; + kpt_rt->ext.call = call; + kpt_rt->ext.free = free; + RNA_struct_blender_type_set(kpt_rt->ext.srna, kpt_rt); + +// kpt_rt->draw = (have_function[0]) ? header_draw : NULL; + + /* update while blender is running */ + WM_main_add_notifier(NC_WINDOW, NULL); + + return kpt_rt->ext.srna; +} + +/* placeholder, doesn't do anything useful yet */ +static StructRNA *rna_wmKeyConfigPref_refine(PointerRNA *ptr) +{ + return (ptr->type) ? ptr->type : &RNA_KeyConfigPreferences; +} + +/** \} */ + + static void rna_wmKeyMapItem_idname_get(PointerRNA *ptr, char *value) { wmKeyMapItem *kmi = ptr->data; @@ -2206,6 +2300,28 @@ static void rna_def_wm_keymaps(BlenderRNA *brna, PropertyRNA *cprop) RNA_api_keymaps(srna); } +static void rna_def_keyconfig_prefs(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "KeyConfigPreferences", NULL); + RNA_def_struct_ui_text(srna, "Key-Config Preferences", ""); + RNA_def_struct_sdna(srna, "wmKeyConfigPref"); /* WARNING: only a bAddon during registration */ + + RNA_def_struct_refine_func(srna, "rna_wmKeyConfigPref_refine"); + RNA_def_struct_register_funcs(srna, "rna_wmKeyConfigPref_register", "rna_wmKeyConfigPref_unregister", NULL); + RNA_def_struct_idprops_func(srna, "rna_wmKeyConfigPref_idprops"); + RNA_def_struct_flag(srna, STRUCT_NO_DATABLOCK_IDPROPERTIES); /* Mandatory! */ + + /* registration */ + RNA_define_verify_sdna(0); + prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "idname"); + RNA_def_property_flag(prop, PROP_REGISTER); + RNA_define_verify_sdna(1); +} + static void rna_def_keyconfig(BlenderRNA *brna) { StructRNA *srna; @@ -2241,6 +2357,11 @@ static void rna_def_keyconfig(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "User Defined", "Indicates that a keyconfig was defined by the user"); + /* Collection active property */ + prop = RNA_def_property(srna, "preferences", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "KeyConfigPreferences"); + RNA_def_property_pointer_funcs(prop, "rna_wmKeyConfig_preferences_get", NULL, NULL, NULL); + RNA_api_keyconfig(srna); /* KeyMap */ @@ -2289,12 +2410,12 @@ static void rna_def_keyconfig(BlenderRNA *brna) prop = RNA_def_property(srna, "show_expanded_items", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_EXPANDED); RNA_def_property_ui_text(prop, "Items Expanded", "Expanded in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); prop = RNA_def_property(srna, "show_expanded_children", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_CHILDREN_EXPANDED); RNA_def_property_ui_text(prop, "Children Expanded", "Children expanded in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); RNA_api_keymap(srna); @@ -2401,7 +2522,7 @@ static void rna_def_keyconfig(BlenderRNA *brna) prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", KMI_EXPANDED); RNA_def_property_ui_text(prop, "Expanded", "Show key map event and property details in the user interface"); - RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); prop = RNA_def_property(srna, "propvalue", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "propvalue"); @@ -2445,6 +2566,7 @@ void RNA_def_wm(BlenderRNA *brna) rna_def_piemenu(brna); rna_def_window(brna); rna_def_windowmanager(brna); + rna_def_keyconfig_prefs(brna); rna_def_keyconfig(brna); } diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index d548bae96a0..d9b6cfa1ac5 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -198,7 +198,7 @@ static void bevel_mod_harden_normals( const bool has_vgroup = dvert != NULL; const bool vert_of_group = ( has_vgroup && - (defvert_find_index(&dvert[BM_elem_index_get(l->v)], vgroup) != NULL)); + (defvert_find_index(&dvert[BM_elem_index_get(lfan_pivot->v)], vgroup) != NULL)); if (vert_of_group && hnmode == MOD_BEVEL_HN_FACE) { float cur[3]; diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c index 2e3d164a86e..c23a65ec23c 100644 --- a/source/blender/modifiers/intern/MOD_dynamicpaint.c +++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c @@ -58,12 +58,12 @@ static void initData(ModifierData *md) pmd->type = MOD_DYNAMICPAINT_TYPE_CANVAS; } -static void copyData(const ModifierData *md, ModifierData *target, const int UNUSED(flag)) +static void copyData(const ModifierData *md, ModifierData *target, const int flag) { const DynamicPaintModifierData *pmd = (const DynamicPaintModifierData *)md; DynamicPaintModifierData *tpmd = (DynamicPaintModifierData *)target; - dynamicPaint_Modifier_copy(pmd, tpmd); + dynamicPaint_Modifier_copy(pmd, tpmd, flag); } static void freeData(ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_mirror.c b/source/blender/modifiers/intern/MOD_mirror.c index d4e02a437d7..659ac0dee30 100644 --- a/source/blender/modifiers/intern/MOD_mirror.c +++ b/source/blender/modifiers/intern/MOD_mirror.c @@ -45,6 +45,9 @@ #include "BKE_modifier.h" #include "BKE_deform.h" +#include "bmesh.h" +#include "bmesh_tools.h" + #include "MEM_guardedalloc.h" #include "DEG_depsgraph_build.h" @@ -78,21 +81,90 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Mirror Modifier"); } -static Mesh *doMirrorOnAxis( +static Mesh *doBiscetOnMirrorPlane( MirrorModifierData *mmd, Object *ob, const Mesh *mesh, - int axis) + int axis, + float mirrormat[4][4]) +{ + bool do_bisect_flip_axis = ( + (axis == 0 && mmd->flag & MOD_MIR_BISECT_FLIP_AXIS_X) || + (axis == 1 && mmd->flag & MOD_MIR_BISECT_FLIP_AXIS_Y) || + (axis == 2 && mmd->flag & MOD_MIR_BISECT_FLIP_AXIS_Z)); + + const float bisect_distance = 0.001; + + Mesh *result; + BMesh *bm; + BMIter viter; + BMVert *v, *v_next; + + bm = BKE_mesh_to_bmesh_ex( + mesh, + &(struct BMeshCreateParams){0}, + &(struct BMeshFromMeshParams){ + .calc_face_normal = true, + .cd_mask_extra = CD_MASK_ORIGINDEX, + }); + + /* prepare data for bisecting */ + float plane[4]; + float plane_co[3] = {0, 0, 0}; + float plane_no[3]; + copy_v3_v3(plane_no, mirrormat[axis]); + + if (mmd->mirror_ob) { + float tmp[4][4]; + invert_m4_m4(tmp, ob->obmat); + mul_m4_m4m4(tmp, tmp, mmd->mirror_ob->obmat); + + copy_v3_v3(plane_no, tmp[axis]); + copy_v3_v3(plane_co, tmp[3]); + } + + plane_from_point_normal_v3(plane, plane_co, plane_no); + + BM_mesh_bisect_plane(bm, plane, false, false, 0, 0, bisect_distance); + + /* Plane definitions for vert killing. */ + float plane_offset[4]; + copy_v3_v3(plane_offset, plane); + plane_offset[3] = plane[3] - bisect_distance; + + if (do_bisect_flip_axis) { + negate_v3(plane_offset); + } + + /* Delete verts across the mirror plane. */ + BM_ITER_MESH_MUTABLE(v, v_next, &viter, bm, BM_VERTS_OF_MESH) { + if (plane_point_side_v3(plane_offset, v->co) > 0.0f) { + BM_vert_kill(bm, v); + } + } + + result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); + BM_mesh_free(bm); + + return result; +} + +static Mesh *doMirrorOnAxis( + MirrorModifierData *mmd, + Object *ob, + const Mesh *mesh, + int axis) { const float tolerance_sq = mmd->tolerance * mmd->tolerance; const bool do_vtargetmap = (mmd->flag & MOD_MIR_NO_MERGE) == 0; int tot_vtargetmap = 0; /* total merge vertices */ + const bool do_bisect = ( + (axis == 0 && mmd->flag & MOD_MIR_BISECT_AXIS_X) || + (axis == 1 && mmd->flag & MOD_MIR_BISECT_AXIS_Y) || + (axis == 2 && mmd->flag & MOD_MIR_BISECT_AXIS_Z)); + Mesh *result; - const int maxVerts = mesh->totvert; - const int maxEdges = mesh->totedge; - const int maxLoops = mesh->totloop; - const int maxPolys = mesh->totpoly; MVert *mv, *mv_prev; MEdge *me; MLoop *ml; @@ -125,6 +197,18 @@ static Mesh *doMirrorOnAxis( mul_m4_m4m4(mtx, itmp, mtx); } + + Mesh *mesh_bisect = NULL; + if (do_bisect) { + mesh_bisect = doBiscetOnMirrorPlane(mmd, ob, mesh, axis, mtx); + mesh = mesh_bisect; + } + + const int maxVerts = mesh->totvert; + const int maxEdges = mesh->totedge; + const int maxLoops = mesh->totloop; + const int maxPolys = mesh->totpoly; + result = BKE_mesh_new_nomain_from_template( mesh, maxVerts * 2, maxEdges * 2, 0, maxLoops * 2, maxPolys * 2); @@ -290,6 +374,10 @@ static Mesh *doMirrorOnAxis( MEM_freeN(vtargetmap); } + if (mesh_bisect != NULL) { + BKE_id_free(NULL, mesh_bisect); + } + return result; } diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c index 321ac1a6b76..2c69da2d9cd 100644 --- a/source/blender/nodes/shader/node_shader_tree.c +++ b/source/blender/nodes/shader/node_shader_tree.c @@ -65,6 +65,10 @@ #include "node_util.h" #include "node_shader_util.h" + +static void ntree_shader_tag_ssr_node(bNodeTree *ntree, bNode *output_node); +static void ntree_shader_tag_sss_node(bNodeTree *ntree, bNode *output_node); + static bool shader_tree_poll(const bContext *C, bNodeTreeType *UNUSED(treetype)) { Scene *scene = CTX_data_scene(C); @@ -257,6 +261,30 @@ bNode *ntreeShaderOutputNode(bNodeTree *ntree, int target) return output_node; } +/* Find the active output node of a group nodetree. + * + * Does not return the shading output node but the group output node. + */ +static bNode *ntree_group_output_node(bNodeTree *ntree) +{ + /* Make sure we only have single node tagged as output. */ + ntreeSetOutput(ntree); + + /* Find output node that matches type and target. If there are + * multiple, we prefer exact target match and active nodes. */ + bNode *output_node = NULL; + + for (bNode *node = ntree->nodes.first; node; node = node->next) { + if ((node->type == NODE_GROUP_OUTPUT) && + (node->flag & NODE_DO_OUTPUT)) + { + output_node = node; + } + } + + return output_node; +} + /* Find socket with a specified identifier. */ static bNodeSocket *ntree_shader_node_find_socket(ListBase *sockets, const char *identifier) @@ -608,6 +636,16 @@ static void ntree_shader_relink_displacement(bNodeTree *ntree, bNode *output_nod static bool ntree_tag_ssr_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *userdata, const bool UNUSED(reversed)) { switch (fromnode->type) { + case NODE_GROUP: + /* Recursive */ + if (fromnode->id != NULL) { + bNodeTree *ntree = (bNodeTree *)fromnode->id; + bNode *group_output = ntree_group_output_node(ntree); + if (fromnode) { + ntree_shader_tag_ssr_node(ntree, group_output); + } + } + break; case SH_NODE_BSDF_ANISOTROPIC: case SH_NODE_EEVEE_SPECULAR: case SH_NODE_BSDF_PRINCIPLED: @@ -629,7 +667,7 @@ static bool ntree_tag_ssr_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void * /* EEVEE: Scan the ntree to set the Screen Space Reflection * layer id of every specular node. */ -static void ntree_shader_tag_ssr_node(bNodeTree *ntree, bNode *output_node) +void ntree_shader_tag_ssr_node(bNodeTree *ntree, bNode *output_node) { if (output_node == NULL) { return; @@ -644,6 +682,16 @@ static void ntree_shader_tag_ssr_node(bNodeTree *ntree, bNode *output_node) static bool ntree_tag_sss_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *userdata, const bool UNUSED(reversed)) { switch (fromnode->type) { + case NODE_GROUP: + /* Recursive */ + if (fromnode->id != NULL) { + bNodeTree *ntree = (bNodeTree *)fromnode->id; + bNode *group_output = ntree_group_output_node(ntree); + if (fromnode) { + ntree_shader_tag_sss_node(ntree, group_output); + } + } + break; case SH_NODE_BSDF_PRINCIPLED: case SH_NODE_SUBSURFACE_SCATTERING: fromnode->sss_id = (*(float *)userdata); @@ -658,7 +706,7 @@ static bool ntree_tag_sss_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void * /* EEVEE: Scan the ntree to set the Subsurface Scattering id of every SSS node. */ -static void ntree_shader_tag_sss_node(bNodeTree *ntree, bNode *output_node) +void ntree_shader_tag_sss_node(bNodeTree *ntree, bNode *output_node) { if (output_node == NULL) { return; diff --git a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c index 4f4462f20bb..1a1d5658d97 100644 --- a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c +++ b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c @@ -69,6 +69,26 @@ static int gpu_shader_valtorgb(GPUMaterial *mat, bNode *node, bNodeExecData *UNU float *array, layer; int size; + /* Common / easy case optimisation. */ + if ((coba->tot <= 2) && (coba->color_mode == COLBAND_BLEND_RGB)) { + float mul_bias[2]; + switch (coba->ipotype) { + case COLBAND_INTERP_LINEAR: + mul_bias[0] = 1.0f / (coba->data[1].pos - coba->data[0].pos); + mul_bias[1] = -mul_bias[0] * coba->data[0].pos; + return GPU_stack_link(mat, node, "valtorgb_opti_linear", in, out, GPU_uniform(mul_bias), + GPU_uniform(&coba->data[0].r), + GPU_uniform(&coba->data[1].r)); + case COLBAND_INTERP_CONSTANT: + mul_bias[1] = max_ff(coba->data[0].pos, coba->data[1].pos); + return GPU_stack_link(mat, node, "valtorgb_opti_constant", in, out, GPU_uniform(&mul_bias[1]), + GPU_uniform(&coba->data[0].r), + GPU_uniform(&coba->data[1].r)); + default: + break; + } + } + BKE_colorband_evaluate_table_rgba(coba, &array, &size); GPUNodeLink *tex = GPU_color_band(mat, size, array, &layer); diff --git a/source/blender/python/gpu/gpu_py_matrix.c b/source/blender/python/gpu/gpu_py_matrix.c index ea883bea465..6c77f2ee02b 100644 --- a/source/blender/python/gpu/gpu_py_matrix.c +++ b/source/blender/python/gpu/gpu_py_matrix.c @@ -329,7 +329,7 @@ PyDoc_STRVAR(bpygpu_matrix_scale_uniform_doc, ".. function:: scale_uniform(scale)\n" "\n" " :param scale: Scale the current stack matrix.\n" -" :type scale: sequence of 2 or 3 floats\n" +" :type scale: float\n" ); static PyObject *bpygpu_matrix_scale_uniform(PyObject *UNUSED(self), PyObject *value) { diff --git a/source/blender/python/gpu/gpu_py_offscreen.c b/source/blender/python/gpu/gpu_py_offscreen.c index 7a8a2ca0a9f..c51a356d900 100644 --- a/source/blender/python/gpu/gpu_py_offscreen.c +++ b/source/blender/python/gpu/gpu_py_offscreen.c @@ -55,11 +55,36 @@ #include "gpu_py_offscreen.h" /* own include */ + + /* -------------------------------------------------------------------- */ + + /** \name GPUOffScreen Common Utilities + * \{ */ + +static int bpygpu_offscreen_valid_check(BPyGPUOffScreen *bpygpu_ofs) +{ + if (UNLIKELY(bpygpu_ofs->ofs == NULL)) { + PyErr_SetString(PyExc_ReferenceError, "GPU offscreen was freed, no further access is valid"); + return -1; + } + return 0; +} + +#define BPY_GPU_OFFSCREEN_CHECK_OBJ(bpygpu) { \ + if (UNLIKELY(bpygpu_offscreen_valid_check(bpygpu) == -1)) { \ + return NULL; \ + } \ +} ((void)0) + +/** \} */ + + /* -------------------------------------------------------------------- */ /** \name GPUOffscreen Type * \{ */ + static PyObject *bpygpu_offscreen_new(PyTypeObject *UNUSED(self), PyObject *args, PyObject *kwds) { GPUOffScreen *ofs; @@ -87,21 +112,6 @@ static PyObject *bpygpu_offscreen_new(PyTypeObject *UNUSED(self), PyObject *args return BPyGPUOffScreen_CreatePyObject(ofs); } -static int bpygpu_offscreen_valid_check(BPyGPUOffScreen *bpygpu_ofs) -{ - if (UNLIKELY(bpygpu_ofs->ofs == NULL)) { - PyErr_SetString(PyExc_ReferenceError, "GPU offscreen was freed, no further access is valid"); - return -1; - } - return 0; -} - -#define BPY_GPU_OFFSCREEN_CHECK_OBJ(bpygpu) { \ - if (UNLIKELY(bpygpu_offscreen_valid_check(bpygpu) == -1)) { \ - return NULL; \ - } \ -} ((void)0) - PyDoc_STRVAR(bpygpu_offscreen_width_doc, "Width of the texture.\n\n:type: `int`"); static PyObject *bpygpu_offscreen_width_get(BPyGPUOffScreen *self, void *UNUSED(type)) { @@ -128,15 +138,15 @@ PyDoc_STRVAR(bpygpu_offscreen_bind_doc, ".. method:: bind(save=True)\n" "\n" " Bind the offscreen object.\n" +" To make sure that the offscreen gets unbind whether an exception occurs or not, pack it into a `with` statement.\n" "\n" " :arg save: Save the current OpenGL state, so that it can be restored when unbinding.\n" " :type save: `bool`\n" ); static PyObject *bpygpu_offscreen_bind(BPyGPUOffScreen *self, PyObject *args, PyObject *kwds) { - bool save = true; - BPY_GPU_OFFSCREEN_CHECK_OBJ(self); + bool save = true; static const char *_keywords[] = {"save", NULL}; static _PyArg_Parser _parser = {"|O&:bind", _keywords, 0}; @@ -148,7 +158,11 @@ static PyObject *bpygpu_offscreen_bind(BPyGPUOffScreen *self, PyObject *args, Py } GPU_offscreen_bind(self->ofs, save); - Py_RETURN_NONE; + + self->is_saved = save; + Py_INCREF(self); + + return (PyObject *)self; } PyDoc_STRVAR(bpygpu_offscreen_unbind_doc, @@ -275,6 +289,17 @@ static PyObject *bpygpu_offscreen_free(BPyGPUOffScreen *self) Py_RETURN_NONE; } +static PyObject *bpygpu_offscreen_bind_context_enter(BPyGPUOffScreen *UNUSED(self)) +{ + Py_RETURN_NONE; +} + +static PyObject *bpygpu_offscreen_bind_context_exit(BPyGPUOffScreen *self, PyObject *UNUSED(args)) +{ + GPU_offscreen_unbind(self->ofs, self->is_saved); + Py_RETURN_NONE; +} + static void BPyGPUOffScreen__tp_dealloc(BPyGPUOffScreen *self) { if (self->ofs) @@ -294,6 +319,8 @@ static struct PyMethodDef bpygpu_offscreen_methods[] = { {"unbind", (PyCFunction)bpygpu_offscreen_unbind, METH_VARARGS | METH_KEYWORDS, bpygpu_offscreen_unbind_doc}, {"draw_view3d", (PyCFunction)bpygpu_offscreen_draw_view3d, METH_VARARGS | METH_KEYWORDS, bpygpu_offscreen_draw_view3d_doc}, {"free", (PyCFunction)bpygpu_offscreen_free, METH_NOARGS, bpygpu_offscreen_free_doc}, + {"__enter__", (PyCFunction)bpygpu_offscreen_bind_context_enter, METH_NOARGS}, + {"__exit__", (PyCFunction)bpygpu_offscreen_bind_context_exit, METH_VARARGS}, {NULL, NULL, 0, NULL} }; diff --git a/source/blender/python/gpu/gpu_py_offscreen.h b/source/blender/python/gpu/gpu_py_offscreen.h index 8b94671b82c..c4a2d02a694 100644 --- a/source/blender/python/gpu/gpu_py_offscreen.h +++ b/source/blender/python/gpu/gpu_py_offscreen.h @@ -34,6 +34,7 @@ extern PyTypeObject BPyGPUOffScreen_Type; typedef struct BPyGPUOffScreen { PyObject_HEAD struct GPUOffScreen *ofs; + bool is_saved; } BPyGPUOffScreen; PyObject *BPyGPUOffScreen_CreatePyObject(struct GPUOffScreen *ofs) ATTR_NONNULL(1); diff --git a/source/blender/render/intern/source/bake_api.c b/source/blender/render/intern/source/bake_api.c index 17b26bce7bb..ca3907e8b73 100644 --- a/source/blender/render/intern/source/bake_api.c +++ b/source/blender/render/intern/source/bake_api.c @@ -514,9 +514,9 @@ bool RE_bake_pixels_populate_from_objects( tris_high[i] = mesh_calc_tri_tessface(highpoly[i].me, false, NULL); me_highpoly[i] = highpoly[i].me; - BKE_mesh_runtime_looptri_ensure(me_highpoly[i]); + BKE_mesh_tessface_ensure(me_highpoly[i]); - if (me_highpoly[i]->runtime.looptris.len != 0) { + if (me_highpoly[i]->totface != 0) { /* Create a bvh-tree for each highpoly object */ BKE_bvhtree_from_mesh_get(&treeData[i], me_highpoly[i], BVHTREE_FROM_FACES, 2); diff --git a/source/blender/shader_fx/intern/FX_shader_rim.c b/source/blender/shader_fx/intern/FX_shader_rim.c index 72be2202867..f3bec9a9571 100644 --- a/source/blender/shader_fx/intern/FX_shader_rim.c +++ b/source/blender/shader_fx/intern/FX_shader_rim.c @@ -44,7 +44,7 @@ static void initData(ShaderFxData *fx) ARRAY_SET_ITEMS(gpfx->mask_rgb, 0.0f, 0.0f, 0.0f); gpfx->mode = eShaderFxRimMode_Multiply; - ARRAY_SET_ITEMS(gpfx->blur, 5, 5); + ARRAY_SET_ITEMS(gpfx->blur, 0, 0); gpfx->samples = 2; } diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 7628217d88f..8e12ac96ea3 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -287,7 +287,8 @@ void WM_menu_name_call(struct bContext *C, const char *menu_name, short context int WM_enum_search_invoke_previews(struct bContext *C, struct wmOperator *op, short prv_cols, short prv_rows); int WM_enum_search_invoke(struct bContext *C, struct wmOperator *op, const struct wmEvent *event); /* invoke callback, confirm menu + exec */ -int WM_operator_confirm (struct bContext *C, struct wmOperator *op, const struct wmEvent *event); +int WM_operator_confirm(struct bContext *C, struct wmOperator *op, const struct wmEvent *event); +int WM_operator_confirm_or_exec(struct bContext *C, struct wmOperator *op, const struct wmEvent *event); /* invoke callback, file selector "filepath" unset + exec */ int WM_operator_filesel (struct bContext *C, struct wmOperator *op, const struct wmEvent *event); bool WM_operator_filesel_ensure_ext_imtype(wmOperator *op, const struct ImageFormatData *im_format); @@ -348,6 +349,7 @@ bool WM_operator_last_properties_store(struct wmOperator *op); /* wm_operator_props.c */ +void WM_operator_properties_confirm_or_exec(struct wmOperatorType *ot); void WM_operator_properties_filesel( struct wmOperatorType *ot, int filter, short type, short action, short flag, short display, short sort); diff --git a/source/blender/windowmanager/WM_keymap.h b/source/blender/windowmanager/WM_keymap.h index 6072749b283..2093a29ba33 100644 --- a/source/blender/windowmanager/WM_keymap.h +++ b/source/blender/windowmanager/WM_keymap.h @@ -150,12 +150,6 @@ char *WM_key_event_operator_string( const char *WM_bool_as_string(bool test); -/* Minimal keymap, see: T55666, will eventually remove. - * Keep this until final design is settled on. */ -#if 0 -#define USE_WM_KEYMAP_27X -#endif - #ifdef __cplusplus } #endif diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c index 90a0ff8b651..517f92491f0 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c @@ -693,16 +693,26 @@ wmKeyMap *WM_gizmogroup_keymap_common_select( { /* Use area and region id since we might have multiple gizmos with the same name in different areas/regions */ wmKeyMap *km = WM_keymap_ensure(config, gzgt->name, gzgt->gzmap_params.spaceid, gzgt->gzmap_params.regionid); + /* FIXME(campbell) */ +#if 0 + const int select_mouse = (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; + const int select_tweak = (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_L : EVT_TWEAK_R; + const int action_mouse = (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; +#else + const int select_mouse = RIGHTMOUSE; + const int select_tweak = EVT_TWEAK_R; + const int action_mouse = LEFTMOUSE; +#endif - WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", ACTIONMOUSE, KM_PRESS, KM_ANY, 0); - WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", EVT_TWEAK_S, KM_ANY, 0, 0); + WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", action_mouse, KM_PRESS, KM_ANY, 0); + WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", select_tweak, KM_ANY, 0, 0); gizmogroup_tweak_modal_keymap(config, gzgt->name); - wmKeyMapItem *kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", SELECTMOUSE, KM_PRESS, 0, 0); + wmKeyMapItem *kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", select_mouse, KM_PRESS, 0, 0); RNA_boolean_set(kmi->ptr, "extend", false); RNA_boolean_set(kmi->ptr, "deselect", false); RNA_boolean_set(kmi->ptr, "toggle", false); - kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); + kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", select_mouse, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "extend", false); RNA_boolean_set(kmi->ptr, "deselect", false); RNA_boolean_set(kmi->ptr, "toggle", true); diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c index ede0f7c96ea..ec8e012b1a7 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c @@ -945,12 +945,14 @@ void wm_gizmomap_modal_set( WM_tooltip_clear(C, win); + /* Use even if we don't have invoke, so we can setup data before an operator runs. */ + if (gz->parent_gzgroup->type->invoke_prepare) { + gz->parent_gzgroup->type->invoke_prepare(C, gz->parent_gzgroup, gz); + } + if (gz->type->invoke && (gz->type->modal || gz->custom_modal)) { - if (gz->parent_gzgroup->type->invoke_prepare) { - gz->parent_gzgroup->type->invoke_prepare(C, gz->parent_gzgroup, gz); - } const int retval = gz->type->invoke(C, gz, event); if ((retval & OPERATOR_RUNNING_MODAL) == 0) { return; diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 29a1252cf4b..866c846810b 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -239,12 +239,16 @@ void WM_keyconfig_init(bContext *C) wmWindowManager *wm = CTX_wm_manager(C); /* create standard key configs */ - if (!wm->defaultconf) - wm->defaultconf = WM_keyconfig_new(wm, "Blender", false); - if (!wm->addonconf) - wm->addonconf = WM_keyconfig_new(wm, "Blender Addon", false); - if (!wm->userconf) - wm->userconf = WM_keyconfig_new(wm, "Blender User", false); + if (wm->defaultconf == NULL) { + /* Keep lowercase to match the preset filename. */ + wm->defaultconf = WM_keyconfig_new(wm, WM_KEYCONFIG_STR_DEFAULT, false); + } + if (wm->addonconf == NULL) { + wm->addonconf = WM_keyconfig_new(wm, WM_KEYCONFIG_STR_DEFAULT " addon", false); + } + if (wm->userconf == NULL) { + wm->userconf = WM_keyconfig_new(wm, WM_KEYCONFIG_STR_DEFAULT " user", false); + } /* initialize only after python init is done, for keymaps that * use python operators */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index fcda06a7c2d..a9a248f027b 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -91,8 +91,9 @@ #include "DEG_depsgraph.h" -/* Motion in pixels allowed before we don't consider single/double click. */ -#define WM_EVENT_CLICK_WIGGLE_ROOM 2 +/* Motion in pixels allowed before we don't consider single/double click, + * or detect the start of a tweak event. */ +#define WM_EVENT_CLICK_TWEAK_THRESHOLD (U.tweak_threshold * U.dpi_fac) static void wm_notifier_clear(wmNotifier *note); static void update_tablet_data(wmWindow *win, wmEvent *event); @@ -1769,14 +1770,6 @@ void WM_event_remove_handlers(bContext *C, ListBase *handlers) int WM_userdef_event_map(int kmitype) { switch (kmitype) { - case SELECTMOUSE: - return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; - case ACTIONMOUSE: - return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; - case EVT_TWEAK_A: - return (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_R : EVT_TWEAK_L; - case EVT_TWEAK_S: - return (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_L : EVT_TWEAK_R; case WHEELOUTMOUSE: return (U.uiflag & USER_WHEELZOOMDIR) ? WHEELUPMOUSE : WHEELDOWNMOUSE; case WHEELINMOUSE: @@ -1794,14 +1787,6 @@ int WM_userdef_event_map(int kmitype) int WM_userdef_event_type_from_keymap_type(int kmitype) { switch (kmitype) { - case SELECTMOUSE: - return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; - case ACTIONMOUSE: - return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; - case EVT_TWEAK_S: - return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; - case EVT_TWEAK_A: - return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; case EVT_TWEAK_L: return LEFTMOUSE; case EVT_TWEAK_M: @@ -2628,11 +2613,16 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) if (wm_action_not_handled(action)) { if (event->check_drag) { wmWindow *win = CTX_wm_window(C); - if ((abs(event->x - win->eventstate->prevclickx)) >= U.tweak_threshold || - (abs(event->y - win->eventstate->prevclicky)) >= U.tweak_threshold) + if ((abs(event->x - win->eventstate->prevclickx)) >= WM_EVENT_CLICK_TWEAK_THRESHOLD || + (abs(event->y - win->eventstate->prevclicky)) >= WM_EVENT_CLICK_TWEAK_THRESHOLD) { + int x = event->x; + int y = event->y; short val = event->val; short type = event->type; + + event->x = win->eventstate->prevclickx; + event->y = win->eventstate->prevclicky; event->val = KM_CLICK_DRAG; event->type = win->eventstate->type; @@ -2642,6 +2632,8 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) event->val = val; event->type = type; + event->x = x; + event->y = y; win->eventstate->check_click = 0; win->eventstate->check_drag = 0; @@ -2681,9 +2673,16 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) (win->eventstate->prevval == KM_PRESS) && (win->eventstate->check_click == true)) { - if ((abs(event->x - win->eventstate->prevclickx)) <= WM_EVENT_CLICK_WIGGLE_ROOM && - (abs(event->y - win->eventstate->prevclicky)) <= WM_EVENT_CLICK_WIGGLE_ROOM) + if ((abs(event->x - win->eventstate->prevclickx)) < WM_EVENT_CLICK_TWEAK_THRESHOLD && + (abs(event->y - win->eventstate->prevclicky)) < WM_EVENT_CLICK_TWEAK_THRESHOLD) { + /* Position is where the actual click happens, for more + * accurate selecting in case the mouse drifts a little. */ + int x = event->x; + int y = event->y; + + event->x = win->eventstate->prevclickx; + event->y = win->eventstate->prevclicky; event->val = KM_CLICK; CLOG_INFO(WM_LOG_HANDLERS, 1, "handling CLICK"); @@ -2691,6 +2690,8 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) action |= wm_handlers_do_intern(C, event, handlers); event->val = KM_RELEASE; + event->x = x; + event->y = y; } else { win->eventstate->check_click = 0; @@ -3662,6 +3663,22 @@ static void wm_eventemulation(wmEvent *event) } } +/* applies the global tablet pressure correction curve */ +float wm_pressure_curve(float pressure) +{ + if (U.pressure_threshold_max != 0.0f) { + pressure /= U.pressure_threshold_max; + } + + CLAMP(pressure, 0.0f, 1.0f); + + if (U.pressure_softness != 0.0f) { + pressure = powf(pressure, powf(4.0f, -U.pressure_softness)); + } + + return pressure; +} + /* adds customdata to event */ static void update_tablet_data(wmWindow *win, wmEvent *event) { @@ -3672,7 +3689,7 @@ static void update_tablet_data(wmWindow *win, wmEvent *event) struct wmTabletData *wmtab = MEM_mallocN(sizeof(wmTabletData), "customdata tablet"); wmtab->Active = (int)td->Active; - wmtab->Pressure = td->Pressure; + wmtab->Pressure = wm_pressure_curve(td->Pressure); wmtab->Xtilt = td->Xtilt; wmtab->Ytilt = td->Ytilt; @@ -3767,8 +3784,8 @@ static bool wm_event_is_double_click(wmEvent *event, const wmEvent *event_state) (event->val == KM_PRESS)) { if ((ISMOUSE(event->type) == false) || - ((abs(event->x - event_state->prevclickx)) <= WM_EVENT_CLICK_WIGGLE_ROOM && - (abs(event->y - event_state->prevclicky)) <= WM_EVENT_CLICK_WIGGLE_ROOM)) + ((abs(event->x - event_state->prevclickx)) < WM_EVENT_CLICK_TWEAK_THRESHOLD && + (abs(event->y - event_state->prevclicky)) < WM_EVENT_CLICK_TWEAK_THRESHOLD)) { if ((PIL_check_seconds_timer() - event_state->prevclicktime) * 1000 < U.dbl_click_time) { return true; diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 318147e8c25..d90ad24dc16 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -594,7 +594,10 @@ bool WM_file_read(bContext *C, const char *filepath, ReportList *reports) /* confusing this global... */ G.relbase_valid = 1; - retval = BKE_blendfile_read(C, filepath, reports, 0); + retval = BKE_blendfile_read( + C, filepath, + &(const struct BlendFileReadParams){0}, + reports); /* BKE_file_read sets new Main into context. */ Main *bmain = CTX_data_main(C); @@ -865,7 +868,13 @@ int wm_homefile_read( if (!use_factory_settings || (filepath_startup[0] != '\0')) { if (BLI_access(filepath_startup, R_OK) == 0) { - success = (BKE_blendfile_read(C, filepath_startup, NULL, skip_flags) != BKE_BLENDFILE_READ_FAIL); + success = BKE_blendfile_read( + C, filepath_startup, + &(const struct BlendFileReadParams){ + .is_startup = true, + .skip_flags = skip_flags, + }, + NULL) != BKE_BLENDFILE_READ_FAIL; } if (BLI_listbase_is_empty(&U.themes)) { if (G.debug & G_DEBUG) @@ -884,8 +893,12 @@ int wm_homefile_read( if (success == false) { success = BKE_blendfile_read_from_memory( - C, datatoc_startup_blend, datatoc_startup_blend_size, - NULL, skip_flags, true); + C, datatoc_startup_blend, datatoc_startup_blend_size, true, + &(const struct BlendFileReadParams){ + .is_startup = true, + .skip_flags = skip_flags, + }, + NULL); if (success) { if (use_userdef) { if ((skip_flags & BLO_READ_SKIP_USERDEF) == 0) { @@ -956,6 +969,17 @@ int wm_homefile_read( /* match the read WM with current WM */ wm_window_match_do(C, &wmbase, &bmain->wm, &bmain->wm); + + if (use_factory_settings) { + /* Clear keymaps because the current default keymap may have been initialized from user preferences, + * which have been reset. */ + for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) { + if (wm->defaultconf) { + wm->defaultconf->flag &= ~KEYCONF_INIT_DEFAULT; + } + } + } + WM_check(C); /* opens window(s), checks keymaps */ bmain->name[0] = '\0'; diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 06a7f3528c5..70150e40142 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -130,7 +130,8 @@ int wm_gesture_evaluate(wmGesture *gesture) rcti *rect = gesture->customdata; int dx = BLI_rcti_size_x(rect); int dy = BLI_rcti_size_y(rect); - if (abs(dx) + abs(dy) > U.tweak_threshold) { + float tweak_threshold = U.tweak_threshold * U.dpi_fac; + if (abs(dx) + abs(dy) > tweak_threshold) { int theta = round_fl_to_int(4.0f * atan2f((float)dy, (float)dx) / (float)M_PI); int val = EVT_GESTURE_W; diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 52f609700b3..e6114b44221 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -70,6 +70,7 @@ #include "BKE_node.h" #include "BKE_report.h" #include "BKE_screen.h" +#include "BKE_keyconfig.h" #include "BKE_addon.h" #include "BKE_appdir.h" @@ -207,6 +208,7 @@ void WM_init(bContext *C, int argc, const char **argv) GHOST_CreateSystemPaths(); BKE_addon_pref_type_init(); + BKE_keyconfig_pref_type_init(); wm_operatortype_init(); wm_operatortypes_register(); @@ -459,7 +461,10 @@ void WM_exit_ext(bContext *C, const bool do_python) } WM_paneltype_clear(); + BKE_addon_pref_type_free(); + BKE_keyconfig_pref_type_free(); + wm_operatortype_free(); wm_dropbox_free(); WM_menutype_free(); diff --git a/source/blender/windowmanager/intern/wm_operator_props.c b/source/blender/windowmanager/intern/wm_operator_props.c index 4515223f829..f8fa652ed63 100644 --- a/source/blender/windowmanager/intern/wm_operator_props.c +++ b/source/blender/windowmanager/intern/wm_operator_props.c @@ -44,6 +44,15 @@ #include "WM_api.h" #include "WM_types.h" + +void WM_operator_properties_confirm_or_exec(wmOperatorType *ot) +{ + PropertyRNA *prop; + + prop = RNA_def_boolean(ot->srna, "confirm", true, "Confirm", "Prompt for confirmation"); + RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); +} + /* default properties for fileselect */ void WM_operator_properties_filesel( wmOperatorType *ot, int filter, short type, short action, diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 1bb79755e46..e0bd48dfec1 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -863,6 +863,18 @@ int WM_operator_confirm(bContext *C, wmOperator *op, const wmEvent *UNUSED(event return WM_operator_confirm_message(C, op, NULL); } +int WM_operator_confirm_or_exec(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) +{ + const bool confirm = RNA_boolean_get(op->ptr, "confirm"); + if (confirm) { + return WM_operator_confirm_message(C, op, NULL); + } + else { + return op->type->exec(C, op); + } +} + + /* op->invoke, opens fileselect if path property not set, otherwise executes */ int WM_operator_filesel(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) { diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c index 7b91f8360ff..d1173fccff8 100644 --- a/source/blender/windowmanager/intern/wm_toolsystem.c +++ b/source/blender/windowmanager/intern/wm_toolsystem.c @@ -810,17 +810,11 @@ static const char *toolsystem_default_tool(const bToolKey *tkey) case CTX_MODE_PARTICLE: return "Comb"; - default: - /* FIXME(campbell): disable for now since this means we can't lasso select by default. */ -#if 0 - return "Select Box"; -#endif - break; } break; } - return "Cursor"; + return "Select Box"; } /** diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index b84b851476a..df20dbd8055 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -2014,7 +2014,7 @@ float WM_cursor_pressure(const struct wmWindow *win) const GHOST_TabletData *td = GHOST_GetTabletData(win->ghostwin); /* if there's tablet data from an active tablet device then add it */ if ((td != NULL) && td->Active != GHOST_kTabletModeNone) { - return td->Pressure; + return wm_pressure_curve(td->Pressure); } else { return -1.0f; diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h index a0610ffcff3..fe28cbf9895 100644 --- a/source/blender/windowmanager/wm_event_system.h +++ b/source/blender/windowmanager/wm_event_system.h @@ -101,6 +101,8 @@ void wm_event_do_depsgraph(bContext *C); void wm_event_do_refresh_wm_and_depsgraph(bContext *C); void wm_event_do_notifiers(bContext *C); +float wm_pressure_curve(float raw_pressure); + /* wm_keymap.c */ /* wm_dropbox.c */ diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index cfb43bf43ed..40a3d148b7b 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -61,9 +61,6 @@ enum { MIDDLEMOUSE = 0x0002, RIGHTMOUSE = 0x0003, MOUSEMOVE = 0x0004, - /* only use if you want user option switch possible */ - ACTIONMOUSE = 0x0005, - SELECTMOUSE = 0x0006, /* Extra mouse buttons */ BUTTON4MOUSE = 0x0007, BUTTON5MOUSE = 0x0008, @@ -324,9 +321,6 @@ enum { EVT_TWEAK_L = 0x5002, EVT_TWEAK_M = 0x5003, EVT_TWEAK_R = 0x5004, - /* tweak events for action or select mousebutton */ - EVT_TWEAK_A = 0x5005, - EVT_TWEAK_S = 0x5006, EVT_GESTURE = 0x5010, /* 0x5011 is taken, see EVT_ACTIONZONE_FULLSCREEN */ @@ -371,7 +365,7 @@ enum { #define ISMOUSE_GESTURE(event_type) ((event_type) >= MOUSEPAN && (event_type) <= MOUSEROTATE) #define ISMOUSE_BUTTON(event_type) \ (ELEM(event_type, \ - LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE, ACTIONMOUSE, SELECTMOUSE, \ + LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE, \ BUTTON4MOUSE, BUTTON5MOUSE, BUTTON6MOUSE, BUTTON7MOUSE)) /* test whether the event is tweak event */ diff --git a/tests/python/bl_keymap_completeness.py b/tests/python/bl_keymap_completeness.py index 0edee3b02f0..19541b355e2 100644 --- a/tests/python/bl_keymap_completeness.py +++ b/tests/python/bl_keymap_completeness.py @@ -18,10 +18,15 @@ # <pep8 compliant> -# simple script to test 'keyconfig_utils' contains correct values. +# simple script to test 'bl_keymap_utils.keymap_hierarchy' contains correct values. +# Needed for 'bl_keymap_utils.keymap_hierarchy' which inspects tools. +import sys +import os +sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, "release", "scripts", "startup")) +del sys, os -from bpy_extras import keyconfig_utils +from bl_keymap_utils import keymap_hierarchy def check_maps(): @@ -32,7 +37,7 @@ def check_maps(): maps[km_name] = (km_space_type, km_region_type) fill_maps(km_sub) - fill_maps(keyconfig_utils.km_hierarchy()) + fill_maps(keymap_hierarchy.generate()) import bpy keyconf = bpy.context.window_manager.keyconfigs.active @@ -43,14 +48,14 @@ def check_maps(): # Check keyconfig contains only maps that exist in blender test = maps_py - maps_bl if test: - print("Keymaps that are in 'keyconfig_utils' but not blender") + print("Keymaps that are in 'bl_keymap_utils.keymap_hierarchy' but not blender") for km_id in sorted(test): print("\t%s" % km_id) err = True test = maps_bl - maps_py if test: - print("Keymaps that are in blender but not in 'keyconfig_utils'") + print("Keymaps that are in blender but not in 'bl_keymap_utils.keymap_hierarchy'") for km_id in sorted(test): km = keyconf.keymaps[km_id] print(" ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type)) diff --git a/tests/python/bl_run_operators.py b/tests/python/bl_run_operators.py index 9a3f801b04a..f3b1ec2f4c2 100644 --- a/tests/python/bl_run_operators.py +++ b/tests/python/bl_run_operators.py @@ -81,7 +81,6 @@ op_blacklist = ( "wm.operator_cheat_sheet", "wm.interface_theme_*", "wm.previews_ensure", # slow - but harmless - "wm.appconfig_*", # just annoying - but harmless "wm.keyitem_add", # just annoying - but harmless "wm.keyconfig_activate", # just annoying - but harmless "wm.keyconfig_preset_add", # just annoying - but harmless |