summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.editorconfig3
-rw-r--r--.gitignore2
-rw-r--r--COPYRIGHT.txt1139
-rw-r--r--LICENSE.md28
-rw-r--r--LICENSE.txt22
-rw-r--r--LOGO_LICENSE.md5
-rw-r--r--README.md2
-rw-r--r--core/SCsub46
-rw-r--r--core/bind/core_bind.cpp6
-rw-r--r--core/bind/core_bind.h3
-rw-r--r--core/class_db.cpp3
-rw-r--r--core/compressed_translation.cpp211
-rw-r--r--core/global_config.cpp22
-rw-r--r--core/global_constants.cpp13
-rw-r--r--core/image.cpp235
-rw-r--r--core/image.h75
-rw-r--r--core/io/SCsub2
-rw-r--r--core/io/compression.cpp8
-rw-r--r--core/io/file_access_encrypted.cpp11
-rw-r--r--core/io/file_access_pack.cpp9
-rw-r--r--core/io/file_access_zip.h4
-rw-r--r--core/io/image_loader.cpp3
-rw-r--r--core/io/image_loader.h4
-rw-r--r--core/io/ip.cpp65
-rw-r--r--core/io/marshalls.cpp56
-rw-r--r--core/io/resource_format_binary.cpp140
-rw-r--r--core/io/resource_loader.cpp2
-rw-r--r--core/io/sha-README.md5
-rw-r--r--core/io/zip_io.h5
-rw-r--r--core/math/math_2d.cpp9
-rw-r--r--core/math/math_defs.h4
-rw-r--r--core/math/math_funcs.cpp6
-rw-r--r--core/math/math_funcs.h7
-rw-r--r--core/math/matrix3.cpp126
-rw-r--r--core/math/matrix3.h20
-rw-r--r--core/math/quat.cpp4
-rw-r--r--core/math/quat.h3
-rw-r--r--core/math/vector3.h7
-rw-r--r--core/message_queue.cpp10
-rw-r--r--core/method_bind.h2
-rw-r--r--core/method_ptrcall.h1
-rw-r--r--core/os/file_access.cpp6
-rw-r--r--core/os/input_event.h6
-rw-r--r--core/os/os.cpp3
-rw-r--r--core/os/os.h3
-rw-r--r--core/packed_data_container.cpp1
-rw-r--r--core/register_core_types.cpp2
-rw-r--r--core/resource.cpp2
-rw-r--r--core/resource.h2
-rw-r--r--core/ring_buffer.h26
-rw-r--r--core/script_debugger_remote.cpp4
-rw-r--r--core/script_language.h4
-rw-r--r--core/translation.cpp2
-rw-r--r--core/typedefs.h11
-rw-r--r--core/ustring.cpp64
-rw-r--r--core/ustring.h9
-rw-r--r--core/variant.cpp38
-rw-r--r--core/variant.h17
-rw-r--r--core/variant_call.cpp112
-rw-r--r--core/variant_op.cpp59
-rw-r--r--core/variant_parser.cpp253
-rw-r--r--core/version.h (renamed from scene/resources/baked_light.h)15
-rw-r--r--doc/Makefile19
-rw-r--r--doc/base/classes.xml133
-rw-r--r--[-rwxr-xr-x]doc/tools/doc_status.py0
-rw-r--r--doc/tools/locales/es/LC_MESSAGES/makedocs.mobin2321 -> 0 bytes
-rw-r--r--doc/tools/locales/es/LC_MESSAGES/makedocs.po142
-rw-r--r--doc/tools/main.css146
-rw-r--r--doc/tools/makedocs.pot108
-rw-r--r--doc/tools/makedocs.py383
-rw-r--r--doc/tools/makedoku.py499
-rw-r--r--doc/tools/makehtml.py689
-rw-r--r--drivers/convex_decomp/SCsub9
-rw-r--r--drivers/convex_decomp/b2d_decompose.cpp3
-rw-r--r--drivers/gles2/rasterizer_gles2.cpp4
-rw-r--r--drivers/gles3/rasterizer_gles3.cpp10
-rw-r--r--drivers/gles3/rasterizer_gles3.h2
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.cpp7
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.cpp77
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.h8
-rw-r--r--drivers/gles3/shader_compiler_gles3.cpp1
-rw-r--r--drivers/gles3/shaders/particles.glsl12
-rw-r--r--drivers/png/image_loader_png.cpp42
-rw-r--r--drivers/png/image_loader_png.h4
-rw-r--r--drivers/png/resource_saver_png.cpp26
-rw-r--r--drivers/png/resource_saver_png.h3
-rw-r--r--drivers/pulseaudio/audio_driver_pulseaudio.cpp1
-rw-r--r--drivers/unix/ip_unix.cpp15
-rw-r--r--drivers/unix/packet_peer_udp_posix.cpp2
-rw-r--r--drivers/unix/socket_helpers.h10
-rw-r--r--drivers/xaudio2/audio_driver_xaudio2.h1
-rw-r--r--editor/animation_editor.cpp33
-rw-r--r--editor/asset_library_editor_plugin.cpp115
-rw-r--r--editor/code_editor.cpp3
-rw-r--r--editor/connections_dialog.cpp4
-rw-r--r--editor/create_dialog.cpp1
-rw-r--r--editor/doc/doc_data.cpp16
-rw-r--r--editor/doc/doc_dump.cpp16
-rw-r--r--editor/editor_asset_installer.cpp2
-rw-r--r--editor/editor_audio_buses.cpp20
-rw-r--r--editor/editor_export.cpp161
-rw-r--r--editor/editor_export.h5
-rw-r--r--editor/editor_file_dialog.cpp14
-rw-r--r--editor/editor_file_system.cpp8
-rw-r--r--editor/editor_name_dialog.cpp6
-rw-r--r--editor/editor_name_dialog.h1
-rw-r--r--editor/editor_node.cpp81
-rw-r--r--editor/editor_node.h3
-rw-r--r--editor/editor_plugin.cpp7
-rw-r--r--editor/editor_plugin.h3
-rw-r--r--editor/editor_profiler.cpp6
-rw-r--r--editor/editor_run.cpp3
-rw-r--r--editor/editor_run_native.cpp9
-rw-r--r--editor/editor_settings.cpp33
-rw-r--r--editor/editor_themes.cpp84
-rw-r--r--editor/export_template_manager.cpp33
-rw-r--r--editor/export_template_manager.h29
-rw-r--r--editor/filesystem_dock.cpp24
-rw-r--r--editor/filesystem_dock.h3
-rw-r--r--editor/icons/2x/icon_2_d.pngbin0 -> 366 bytes
-rw-r--r--editor/icons/2x/icon_3_d.pngbin0 -> 571 bytes
-rw-r--r--editor/icons/2x/icon_animation_player.pngbin174 -> 173 bytes
-rw-r--r--editor/icons/2x/icon_animation_tree.pngbin471 -> 421 bytes
-rw-r--r--editor/icons/2x/icon_animation_tree_player.pngbin471 -> 421 bytes
-rw-r--r--editor/icons/2x/icon_arrow_left.pngbin333 -> 354 bytes
-rw-r--r--editor/icons/2x/icon_arrow_right.pngbin308 -> 349 bytes
-rw-r--r--editor/icons/2x/icon_arrow_up.pngbin293 -> 382 bytes
-rw-r--r--editor/icons/2x/icon_asset_lib.pngbin0 -> 367 bytes
-rw-r--r--editor/icons/2x/icon_audio_bus_bypass.pngbin0 -> 368 bytes
-rw-r--r--editor/icons/2x/icon_audio_bus_layout.pngbin0 -> 565 bytes
-rw-r--r--editor/icons/2x/icon_audio_bus_mute.pngbin0 -> 527 bytes
-rw-r--r--editor/icons/2x/icon_audio_bus_solo.pngbin0 -> 479 bytes
-rw-r--r--editor/icons/2x/icon_audio_effect_amplify.pngbin0 -> 462 bytes
-rw-r--r--editor/icons/2x/icon_audio_player.pngbin0 -> 769 bytes
-rw-r--r--editor/icons/2x/icon_back.pngbin323 -> 410 bytes
-rw-r--r--editor/icons/2x/icon_baked_light.pngbin267 -> 264 bytes
-rw-r--r--editor/icons/2x/icon_bool.pngbin171 -> 422 bytes
-rw-r--r--editor/icons/2x/icon_bus_vu_db.pngbin0 -> 7645 bytes
-rw-r--r--editor/icons/2x/icon_bus_vu_empty.pngbin0 -> 2241 bytes
-rw-r--r--editor/icons/2x/icon_bus_vu_frozen.pngbin0 -> 1673 bytes
-rw-r--r--editor/icons/2x/icon_bus_vu_full.pngbin0 -> 1839 bytes
-rw-r--r--editor/icons/2x/icon_copy_node_path.pngbin356 -> 358 bytes
-rw-r--r--editor/icons/2x/icon_curve_texture.pngbin0 -> 728 bytes
-rw-r--r--editor/icons/2x/icon_debug.pngbin0 -> 1018 bytes
-rw-r--r--editor/icons/2x/icon_edit_resource.pngbin396 -> 311 bytes
-rw-r--r--editor/icons/2x/icon_error.pngbin155 -> 346 bytes
-rw-r--r--editor/icons/2x/icon_file.pngbin196 -> 242 bytes
-rw-r--r--editor/icons/2x/icon_forward.pngbin326 -> 410 bytes
-rw-r--r--editor/icons/2x/icon_g_d_native_script.pngbin0 -> 698 bytes
-rw-r--r--editor/icons/2x/icon_godot.pngbin1842 -> 0 bytes
-rw-r--r--editor/icons/2x/icon_godot_docs.pngbin0 -> 1840 bytes
-rw-r--r--editor/icons/2x/icon_gradient_texture.pngbin0 -> 330 bytes
-rw-r--r--editor/icons/2x/icon_graph_scalars_to_vec.pngbin255 -> 565 bytes
-rw-r--r--editor/icons/2x/icon_graph_vec_to_scalars.pngbin257 -> 575 bytes
-rw-r--r--editor/icons/2x/icon_graph_vecs_to_xform.pngbin282 -> 549 bytes
-rw-r--r--editor/icons/2x/icon_graph_xform_to_vecs.pngbin277 -> 560 bytes
-rw-r--r--editor/icons/2x/icon_key_hover.pngbin376 -> 191 bytes
-rw-r--r--editor/icons/2x/icon_key_selected.pngbin353 -> 255 bytes
-rw-r--r--editor/icons/2x/icon_key_value.pngbin380 -> 244 bytes
-rw-r--r--editor/icons/2x/icon_key_xform.pngbin388 -> 261 bytes
-rw-r--r--editor/icons/2x/icon_line_2d.pngbin795 -> 739 bytes
-rw-r--r--editor/icons/2x/icon_load.pngbin523 -> 228 bytes
-rw-r--r--editor/icons/2x/icon_mini_basis.pngbin0 -> 472 bytes
-rw-r--r--editor/icons/2x/icon_mini_matrix3.pngbin391 -> 472 bytes
-rw-r--r--editor/icons/2x/icon_mini_transform2D.pngbin0 -> 602 bytes
-rw-r--r--editor/icons/2x/icon_mirror_x.pngbin247 -> 361 bytes
-rw-r--r--editor/icons/2x/icon_mirror_y.pngbin240 -> 406 bytes
-rw-r--r--editor/icons/2x/icon_move_down.pngbin357 -> 553 bytes
-rw-r--r--editor/icons/2x/icon_move_up.pngbin346 -> 505 bytes
-rw-r--r--editor/icons/2x/icon_new.pngbin196 -> 242 bytes
-rw-r--r--editor/icons/2x/icon_particles_material.pngbin0 -> 657 bytes
-rw-r--r--editor/icons/2x/icon_search.pngbin0 -> 762 bytes
-rw-r--r--editor/icons/2x/icon_spatial_material.pngbin0 -> 704 bytes
-rw-r--r--editor/icons/2x/icon_stream_texture.pngbin0 -> 247 bytes
-rw-r--r--editor/icons/2x/icon_tabs.pngbin222 -> 366 bytes
-rw-r--r--editor/icons/2x/icon_texture.pngbin262 -> 0 bytes
-rw-r--r--editor/icons/2x/icon_tween.pngbin315 -> 320 bytes
-rw-r--r--editor/icons/2x/icon_warning.pngbin154 -> 350 bytes
-rw-r--r--editor/icons/2x/icon_zoom.pngbin762 -> 718 bytes
-rw-r--r--editor/icons/SCsub6
-rw-r--r--editor/icons/icon_2_d.pngbin0 -> 252 bytes
-rw-r--r--editor/icons/icon_3_d.pngbin0 -> 363 bytes
-rw-r--r--editor/icons/icon_animation_player.pngbin153 -> 151 bytes
-rw-r--r--editor/icons/icon_animation_tree.pngbin279 -> 291 bytes
-rw-r--r--editor/icons/icon_animation_tree_player.pngbin279 -> 291 bytes
-rw-r--r--editor/icons/icon_arrow_left.pngbin211 -> 269 bytes
-rw-r--r--editor/icons/icon_arrow_right.pngbin215 -> 262 bytes
-rw-r--r--editor/icons/icon_arrow_up.pngbin223 -> 259 bytes
-rw-r--r--editor/icons/icon_asset_lib.pngbin0 -> 224 bytes
-rw-r--r--editor/icons/icon_audio_bus_bypass.pngbin0 -> 242 bytes
-rw-r--r--editor/icons/icon_audio_bus_layout.pngbin0 -> 319 bytes
-rw-r--r--editor/icons/icon_audio_bus_mute.pngbin0 -> 292 bytes
-rw-r--r--editor/icons/icon_audio_bus_solo.pngbin0 -> 309 bytes
-rw-r--r--editor/icons/icon_audio_effect_amplify.pngbin379 -> 300 bytes
-rw-r--r--editor/icons/icon_audio_player.pngbin0 -> 443 bytes
-rw-r--r--editor/icons/icon_back.pngbin223 -> 290 bytes
-rw-r--r--editor/icons/icon_baked_light.pngbin180 -> 179 bytes
-rw-r--r--editor/icons/icon_bool.pngbin154 -> 250 bytes
-rw-r--r--editor/icons/icon_bus_vu_db.pngbin1136 -> 3410 bytes
-rw-r--r--editor/icons/icon_bus_vu_empty.pngbin1631 -> 938 bytes
-rw-r--r--editor/icons/icon_bus_vu_frozen.pngbin267 -> 868 bytes
-rw-r--r--editor/icons/icon_bus_vu_full.pngbin2463 -> 894 bytes
-rw-r--r--editor/icons/icon_copy_node_path.pngbin248 -> 241 bytes
-rw-r--r--editor/icons/icon_curve_texture.pngbin0 -> 391 bytes
-rw-r--r--editor/icons/icon_debug.pngbin659 -> 492 bytes
-rw-r--r--editor/icons/icon_default_project_icon.pngbin2713 -> 3480 bytes
-rw-r--r--editor/icons/icon_edit_resource.pngbin232 -> 202 bytes
-rw-r--r--editor/icons/icon_error.pngbin121 -> 195 bytes
-rw-r--r--editor/icons/icon_file.pngbin157 -> 203 bytes
-rw-r--r--editor/icons/icon_forward.pngbin224 -> 292 bytes
-rw-r--r--editor/icons/icon_g_d_native_script.pngbin0 -> 392 bytes
-rw-r--r--editor/icons/icon_godot.pngbin769 -> 0 bytes
-rw-r--r--editor/icons/icon_godot_docs.pngbin0 -> 722 bytes
-rw-r--r--editor/icons/icon_gradient_texture.pngbin0 -> 250 bytes
-rw-r--r--editor/icons/icon_graph_scalars_to_vec.pngbin172 -> 355 bytes
-rw-r--r--editor/icons/icon_graph_vec_to_scalars.pngbin181 -> 358 bytes
-rw-r--r--editor/icons/icon_graph_vecs_to_xform.pngbin178 -> 347 bytes
-rw-r--r--editor/icons/icon_graph_xform_to_vecs.pngbin195 -> 352 bytes
-rw-r--r--editor/icons/icon_key_hover.pngbin206 -> 138 bytes
-rw-r--r--editor/icons/icon_key_selected.pngbin203 -> 181 bytes
-rw-r--r--editor/icons/icon_key_value.pngbin210 -> 182 bytes
-rw-r--r--editor/icons/icon_key_xform.pngbin213 -> 192 bytes
-rw-r--r--editor/icons/icon_line_2d.pngbin474 -> 418 bytes
-rw-r--r--editor/icons/icon_load.pngbin271 -> 170 bytes
-rw-r--r--editor/icons/icon_logo.pngbin6211 -> 11594 bytes
-rw-r--r--editor/icons/icon_logo_small.pngbin1825 -> 1465 bytes
-rw-r--r--editor/icons/icon_mini_basis.pngbin0 -> 270 bytes
-rw-r--r--editor/icons/icon_mini_matrix3.pngbin236 -> 270 bytes
-rw-r--r--editor/icons/icon_mini_transform2D.pngbin0 -> 330 bytes
-rw-r--r--editor/icons/icon_mirror_x.pngbin166 -> 247 bytes
-rw-r--r--editor/icons/icon_mirror_y.pngbin168 -> 277 bytes
-rw-r--r--editor/icons/icon_move_down.pngbin268 -> 309 bytes
-rw-r--r--editor/icons/icon_move_up.pngbin269 -> 296 bytes
-rw-r--r--editor/icons/icon_new.pngbin157 -> 203 bytes
-rw-r--r--editor/icons/icon_particles_material.pngbin0 -> 367 bytes
-rw-r--r--editor/icons/icon_search.pngbin0 -> 404 bytes
-rw-r--r--editor/icons/icon_spatial_material.pngbin0 -> 483 bytes
-rw-r--r--editor/icons/icon_stream_texture.pngbin0 -> 180 bytes
-rw-r--r--editor/icons/icon_tabs.pngbin146 -> 232 bytes
-rw-r--r--editor/icons/icon_texture.pngbin200 -> 0 bytes
-rw-r--r--editor/icons/icon_tween.pngbin248 -> 247 bytes
-rw-r--r--editor/icons/icon_warning.pngbin120 -> 204 bytes
-rw-r--r--editor/icons/icon_zoom.pngbin404 -> 410 bytes
-rw-r--r--editor/icons/source/icon_2_d.svg93
-rw-r--r--editor/icons/source/icon_3_d.svg105
-rw-r--r--editor/icons/source/icon_animation_player.svg16
-rw-r--r--editor/icons/source/icon_animation_tree_player.svg20
-rw-r--r--editor/icons/source/icon_arrow_left.svg25
-rw-r--r--editor/icons/source/icon_arrow_right.svg26
-rw-r--r--editor/icons/source/icon_arrow_up.svg16
-rw-r--r--editor/icons/source/icon_asset_lib.svg80
-rw-r--r--editor/icons/source/icon_audio_bus_bypass.svg295
-rw-r--r--editor/icons/source/icon_audio_bus_layout.svg107
-rw-r--r--editor/icons/source/icon_audio_bus_mute.svg301
-rw-r--r--editor/icons/source/icon_audio_bus_solo.svg315
-rw-r--r--editor/icons/source/icon_audio_effect_amplify.svg110
-rw-r--r--editor/icons/source/icon_audio_player.svg113
-rw-r--r--editor/icons/source/icon_back.svg21
-rw-r--r--editor/icons/source/icon_baked_light.svg10
-rw-r--r--editor/icons/source/icon_bool.svg80
-rw-r--r--editor/icons/source/icon_bus_vu_db.svg111
-rw-r--r--editor/icons/source/icon_bus_vu_empty.svg115
-rw-r--r--editor/icons/source/icon_bus_vu_frozen.svg110
-rw-r--r--editor/icons/source/icon_bus_vu_full.svg110
-rw-r--r--editor/icons/source/icon_copy_node_path.svg14
-rw-r--r--editor/icons/source/icon_curve_texture.svg81
-rw-r--r--editor/icons/source/icon_debug.svg93
-rw-r--r--editor/icons/source/icon_edit_resource.svg18
-rw-r--r--editor/icons/source/icon_error.svg14
-rw-r--r--editor/icons/source/icon_forward.svg19
-rw-r--r--editor/icons/source/icon_g_d_native_script.svg77
-rw-r--r--editor/icons/source/icon_godot.svg168
-rw-r--r--editor/icons/source/icon_godot_docs.svg173
-rw-r--r--editor/icons/source/icon_gradient_texture.svg (renamed from editor/icons/source/icon_texture.svg)37
-rw-r--r--editor/icons/source/icon_graph_scalars_to_vec.svg58
-rw-r--r--editor/icons/source/icon_graph_vec_to_scalars.svg55
-rw-r--r--editor/icons/source/icon_graph_vecs_to_xform.svg45
-rw-r--r--editor/icons/source/icon_graph_xform_to_vecs.svg45
-rw-r--r--editor/icons/source/icon_key_hover.svg28
-rw-r--r--editor/icons/source/icon_key_selected.svg26
-rw-r--r--editor/icons/source/icon_key_value.svg26
-rw-r--r--editor/icons/source/icon_key_xform.svg26
-rw-r--r--editor/icons/source/icon_mini_basis.svg204
-rw-r--r--editor/icons/source/icon_mini_matrix3.svg176
-rw-r--r--editor/icons/source/icon_mini_transform2D.svg (renamed from editor/icons/source/icon_mini_matrix32.svg)86
-rw-r--r--editor/icons/source/icon_mirror_x.svg34
-rw-r--r--editor/icons/source/icon_mirror_y.svg21
-rw-r--r--editor/icons/source/icon_move_down.svg25
-rw-r--r--editor/icons/source/icon_move_up.svg27
-rw-r--r--editor/icons/source/icon_new.svg26
-rw-r--r--editor/icons/source/icon_particles_material.svg (renamed from editor/icons/source/icon_particles_shader.svg)0
-rw-r--r--editor/icons/source/icon_search.svg87
-rw-r--r--editor/icons/source/icon_spatial_material.svg (renamed from editor/icons/source/icon_spatial_shader.svg)0
-rw-r--r--editor/icons/source/icon_stream_texture.svg81
-rw-r--r--editor/icons/source/icon_tabs.svg83
-rw-r--r--editor/icons/source/icon_tween.svg33
-rw-r--r--editor/icons/source/icon_warning.svg10
-rw-r--r--editor/icons/source/icon_zoom.svg30
-rw-r--r--editor/import/editor_import_collada.cpp2
-rw-r--r--editor/import/editor_import_plugin.cpp152
-rw-r--r--editor/import/editor_import_plugin.h (renamed from platform/bb10/payment_service.h)48
-rw-r--r--editor/import/resource_importer_obj.cpp7
-rw-r--r--editor/import/resource_importer_texture.cpp67
-rw-r--r--editor/import/resource_importer_texture.h4
-rw-r--r--editor/io_plugins/editor_scene_import_plugin.cpp30
-rw-r--r--editor/io_plugins/editor_texture_import_plugin.cpp6
-rw-r--r--editor/io_plugins/editor_translation_import_plugin.cpp2
-rw-r--r--editor/plugins/animation_player_editor_plugin.cpp20
-rw-r--r--editor/plugins/animation_player_editor_plugin.h3
-rw-r--r--editor/plugins/baked_light_baker.h2
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp11
-rw-r--r--editor/plugins/curve_editor_plugin.cpp30
-rw-r--r--editor/plugins/curve_editor_plugin.h29
-rw-r--r--editor/plugins/gradient_texture_editor_plugin.cpp36
-rw-r--r--editor/plugins/gradient_texture_editor_plugin.h29
-rw-r--r--editor/plugins/line_2d_editor_plugin.cpp2
-rw-r--r--editor/plugins/particles_2d_editor_plugin.cpp15
-rw-r--r--editor/plugins/particles_editor_plugin.cpp4
-rw-r--r--editor/plugins/polygon_2d_editor_plugin.cpp4
-rw-r--r--editor/plugins/script_editor_plugin.cpp253
-rw-r--r--editor/plugins/script_editor_plugin.h20
-rw-r--r--editor/plugins/script_text_editor.cpp201
-rw-r--r--editor/plugins/script_text_editor.h15
-rw-r--r--editor/plugins/shader_editor_plugin.cpp3
-rw-r--r--editor/plugins/spatial_editor_plugin.cpp434
-rw-r--r--editor/plugins/spatial_editor_plugin.h24
-rw-r--r--editor/plugins/texture_region_editor_plugin.cpp9
-rw-r--r--editor/project_export.cpp2
-rw-r--r--editor/project_manager.cpp33
-rw-r--r--editor/project_settings.cpp17
-rw-r--r--editor/property_editor.cpp103
-rw-r--r--editor/property_editor.h3
-rw-r--r--editor/property_selector.cpp1
-rw-r--r--editor/pvrtc_compress.cpp4
-rw-r--r--editor/scene_tree_dock.cpp6
-rw-r--r--editor/scene_tree_editor.cpp26
-rw-r--r--editor/script_create_dialog.cpp539
-rw-r--r--editor/script_create_dialog.h22
-rw-r--r--editor/script_editor_debugger.cpp75
-rw-r--r--editor/translations/ar.po302
-rw-r--r--editor/translations/bg.po311
-rw-r--r--editor/translations/bn.po328
-rw-r--r--editor/translations/ca.po326
-rw-r--r--editor/translations/cs.po314
-rw-r--r--editor/translations/da.po310
-rw-r--r--editor/translations/de.po328
-rw-r--r--editor/translations/de_CH.po317
-rw-r--r--editor/translations/editor.pot302
-rw-r--r--editor/translations/el.po321
-rw-r--r--editor/translations/es.po328
-rw-r--r--editor/translations/es_AR.po328
-rwxr-xr-xeditor/translations/extract.py3
-rw-r--r--editor/translations/fa.po314
-rw-r--r--editor/translations/fr.po328
-rw-r--r--editor/translations/hu.po302
-rw-r--r--editor/translations/id.po314
-rw-r--r--editor/translations/it.po328
-rw-r--r--editor/translations/ja.po315
-rw-r--r--editor/translations/ko.po328
-rw-r--r--editor/translations/nb.po302
-rw-r--r--editor/translations/nl.po314
-rw-r--r--editor/translations/pl.po328
-rw-r--r--editor/translations/pr.po303
-rw-r--r--editor/translations/pt_BR.po328
-rw-r--r--editor/translations/pt_PT.po303
-rw-r--r--editor/translations/ru.po328
-rw-r--r--editor/translations/sk.po305
-rw-r--r--editor/translations/sl.po303
-rw-r--r--editor/translations/th.po334
-rw-r--r--editor/translations/tr.po328
-rw-r--r--editor/translations/ur_PK.po303
-rw-r--r--editor/translations/zh_CN.po328
-rw-r--r--editor/translations/zh_HK.po312
-rw-r--r--editor/translations/zh_TW.po302
-rw-r--r--icon.pngbin12675 -> 11155 bytes
-rw-r--r--icon.svg161
-rw-r--r--logo.pngbin2486 -> 19339 bytes
-rw-r--r--logo.svg335
-rw-r--r--main/app_icon.pngbin18284 -> 5569 bytes
-rw-r--r--main/main.cpp47
-rw-r--r--main/splash.pngbin88469 -> 29867 bytes
-rw-r--r--main/tests/test_containers.cpp12
-rw-r--r--main/tests/test_image.cpp5
-rw-r--r--main/tests/test_math.cpp2
-rw-r--r--main/tests/test_physics_2d.cpp10
-rw-r--r--methods.py2
-rw-r--r--misc/dist/project_icon.svg138
-rw-r--r--misc/scripts/sort-demos.sh4
-rw-r--r--misc/scripts/svgs_2_pngs.py12
-rw-r--r--modules/dds/texture_loader_dds.cpp12
-rw-r--r--modules/etc1/image_etc.cpp19
-rw-r--r--modules/etc1/texture_loader_pkm.cpp2
-rw-r--r--modules/gdnative/config.py2
-rw-r--r--modules/gdnative/gdnative.cpp65
-rw-r--r--modules/gdnative/gdnative.h2
-rw-r--r--modules/gdnative/godot.cpp35
-rw-r--r--modules/gdnative/godot.h50
-rw-r--r--modules/gdnative/godot/godot_basis.cpp180
-rw-r--r--modules/gdnative/godot/godot_basis.h32
-rw-r--r--modules/gdnative/godot/godot_string.cpp5
-rw-r--r--modules/gdnative/godot/godot_string.h2
-rw-r--r--modules/gdnative/godot/godot_variant.cpp16
-rw-r--r--modules/gdnative/godot/godot_variant.h33
-rw-r--r--modules/gdnative/godot/godot_vector2.cpp348
-rw-r--r--modules/gdnative/godot/godot_vector2.h62
-rw-r--r--modules/gdnative/godot/godot_vector3.cpp396
-rw-r--r--modules/gdnative/godot/godot_vector3.h90
-rw-r--r--modules/gdscript/gd_editor.cpp60
-rw-r--r--modules/gdscript/gd_function.cpp18
-rw-r--r--modules/gdscript/gd_function.h2
-rw-r--r--modules/gdscript/gd_parser.cpp15
-rw-r--r--modules/gdscript/gd_parser.h1
-rw-r--r--modules/gdscript/gd_script.cpp5
-rw-r--r--modules/gdscript/gd_script.h2
-rw-r--r--modules/gdscript/gd_tokenizer.cpp1
-rw-r--r--modules/gridmap/grid_map_editor_plugin.cpp4
-rw-r--r--modules/jpg/image_loader_jpegd.cpp11
-rw-r--r--modules/jpg/image_loader_jpegd.h2
-rw-r--r--modules/openssl/SCsub11
-rw-r--r--modules/openssl/stream_peer_openssl.h6
-rw-r--r--modules/pvr/texture_loader_pvr.cpp43
-rw-r--r--modules/squish/image_compress_squish.cpp6
-rw-r--r--modules/stb_vorbis/audio_stream_ogg_vorbis.cpp13
-rw-r--r--modules/stb_vorbis/audio_stream_ogg_vorbis.h2
-rw-r--r--modules/theora/video_stream_theora.cpp5
-rw-r--r--modules/visual_script/visual_script.cpp12
-rw-r--r--modules/visual_script/visual_script.h2
-rw-r--r--modules/visual_script/visual_script_editor.cpp27
-rw-r--r--modules/visual_script/visual_script_editor.h3
-rw-r--r--modules/webm/libvpx/SCsub2
-rw-r--r--modules/webm/video_stream_webm.cpp3
-rw-r--r--modules/webp/image_loader_webp.cpp45
-rw-r--r--modules/webp/image_loader_webp.h2
-rw-r--r--platform/android/build.gradle.template5
-rw-r--r--platform/android/export/export.cpp2
-rw-r--r--platform/android/java/gradle/wrapper/gradle-wrapper.properties5
-rw-r--r--platform/android/java/res/drawable/icon.pngbin12675 -> 11155 bytes
-rw-r--r--platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.java16
-rw-r--r--platform/android/java/src/com/android/vending/licensing/ILicensingService.java16
-rw-r--r--platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java6
-rw-r--r--platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java4
-rw-r--r--platform/android/power_android.cpp27
-rw-r--r--platform/bb10/SCsub23
-rw-r--r--platform/bb10/audio_driver_bb10.cpp254
-rw-r--r--platform/bb10/audio_driver_bb10.h77
-rw-r--r--platform/bb10/bar/bar-descriptor.xml53
-rw-r--r--platform/bb10/bar/icon.pngbin8809 -> 0 bytes
-rw-r--r--platform/bb10/bbutil.c513
-rw-r--r--platform/bb10/bbutil.h72
-rw-r--r--platform/bb10/detect.py92
-rw-r--r--platform/bb10/export/export.cpp829
-rw-r--r--platform/bb10/export/export.h30
-rw-r--r--platform/bb10/godot_bb10.cpp48
-rw-r--r--platform/bb10/logo.pngbin1244 -> 0 bytes
-rw-r--r--platform/bb10/os_bb10.cpp608
-rw-r--r--platform/bb10/os_bb10.h153
-rw-r--r--platform/bb10/payment_service.cpp149
-rw-r--r--platform/bb10/platform_config.h30
-rw-r--r--platform/iphone/app_delegate.mm512
-rw-r--r--platform/iphone/os_iphone.cpp16
-rw-r--r--platform/iphone/os_iphone.h5
-rw-r--r--platform/javascript/export/export.cpp2
-rw-r--r--platform/javascript/javascript_main.cpp148
-rw-r--r--platform/javascript/os_javascript.cpp524
-rw-r--r--platform/javascript/os_javascript.h27
-rw-r--r--platform/osx/os_osx.h2
-rw-r--r--platform/osx/os_osx.mm81
-rw-r--r--platform/osx/power_osx.cpp26
-rw-r--r--platform/uwp/SCsub1
-rw-r--r--platform/uwp/app.h2
-rw-r--r--platform/uwp/export/export.cpp9
-rw-r--r--platform/uwp/os_uwp.cpp71
-rw-r--r--platform/uwp/os_uwp.h9
-rw-r--r--platform/uwp/power_uwp.cpp (renamed from platform/bb10/power_bb10.cpp)31
-rw-r--r--platform/uwp/power_uwp.h (renamed from platform/bb10/power_bb10.h)19
-rw-r--r--platform/windows/export/export.cpp2
-rw-r--r--platform/windows/os_windows.cpp23
-rw-r--r--platform/windows/os_windows.h2
-rw-r--r--platform/windows/packet_peer_udp_winsock.cpp2
-rw-r--r--platform/windows/power_windows.cpp25
-rw-r--r--platform/x11/context_gl_x11.cpp2
-rw-r--r--platform/x11/detect.py9
-rw-r--r--platform/x11/export/export.cpp2
-rw-r--r--platform/x11/os_x11.cpp14
-rw-r--r--platform/x11/os_x11.h2
-rw-r--r--platform/x11/power_x11.cpp25
-rw-r--r--scene/2d/collision_polygon_2d.cpp5
-rw-r--r--scene/2d/navigation_polygon.cpp4
-rw-r--r--scene/2d/physics_body_2d.cpp2
-rw-r--r--scene/2d/ray_cast_2d.cpp8
-rw-r--r--scene/3d/baked_light_instance.cpp1754
-rw-r--r--scene/3d/baked_light_instance.h199
-rw-r--r--scene/3d/gi_probe.cpp20
-rw-r--r--scene/3d/gi_probe.h4
-rw-r--r--scene/3d/light.cpp20
-rw-r--r--scene/3d/light.h1
-rw-r--r--scene/3d/particles.cpp2
-rw-r--r--scene/3d/physics_body.cpp124
-rw-r--r--scene/3d/physics_body.h17
-rw-r--r--scene/3d/ray_cast.cpp86
-rw-r--r--scene/3d/ray_cast.h7
-rw-r--r--scene/SCsub19
-rw-r--r--scene/gui/base_button.cpp2
-rw-r--r--scene/gui/button.cpp29
-rw-r--r--scene/gui/color_picker.cpp14
-rw-r--r--scene/gui/color_picker.h2
-rw-r--r--scene/gui/color_ramp_edit.cpp3
-rw-r--r--scene/gui/dialogs.cpp79
-rw-r--r--scene/gui/file_dialog.cpp4
-rw-r--r--scene/gui/graph_edit.cpp16
-rw-r--r--scene/gui/item_list.cpp22
-rw-r--r--scene/gui/item_list.h4
-rw-r--r--scene/gui/line_edit.cpp8
-rw-r--r--scene/gui/option_button.cpp19
-rw-r--r--scene/gui/popup_menu.cpp9
-rw-r--r--scene/gui/rich_text_label.cpp6
-rw-r--r--scene/gui/scroll_container.cpp30
-rw-r--r--scene/gui/spin_box.cpp13
-rw-r--r--scene/gui/tab_container.cpp9
-rw-r--r--scene/gui/text_edit.cpp162
-rw-r--r--scene/gui/text_edit.h14
-rw-r--r--scene/gui/tool_button.cpp4
-rw-r--r--scene/gui/tool_button.h3
-rw-r--r--scene/gui/tree.cpp24
-rw-r--r--scene/gui/tree.h4
-rw-r--r--scene/gui/video_player.h2
-rw-r--r--scene/main/http_request.cpp2
-rwxr-xr-xscene/main/node.cpp2
-rw-r--r--scene/main/scene_main_loop.cpp4
-rw-r--r--scene/main/viewport.cpp4
-rw-r--r--scene/main/viewport.h2
-rw-r--r--scene/register_scene_types.cpp4
-rw-r--r--scene/resources/SCsub1
-rw-r--r--scene/resources/animation.cpp4
-rw-r--r--scene/resources/baked_light.cpp31
-rw-r--r--scene/resources/bit_mask.cpp14
-rw-r--r--scene/resources/bit_mask.h3
-rw-r--r--scene/resources/default_theme/arrow_down.pngbin184 -> 170 bytes
-rw-r--r--scene/resources/default_theme/arrow_right.pngbin183 -> 189 bytes
-rw-r--r--scene/resources/default_theme/button_disabled.pngbin486 -> 333 bytes
-rw-r--r--scene/resources/default_theme/button_group.pngbin0 -> 427 bytes
-rw-r--r--scene/resources/default_theme/button_hover.pngbin606 -> 309 bytes
-rw-r--r--scene/resources/default_theme/button_normal.pngbin598 -> 333 bytes
-rw-r--r--scene/resources/default_theme/button_pressed.pngbin499 -> 307 bytes
-rw-r--r--scene/resources/default_theme/checked.pngbin627 -> 341 bytes
-rw-r--r--scene/resources/default_theme/close.pngbin230 -> 265 bytes
-rw-r--r--scene/resources/default_theme/close_hl.pngbin230 -> 265 bytes
-rw-r--r--scene/resources/default_theme/default_theme.cpp260
-rw-r--r--scene/resources/default_theme/dropdown.pngbin369 -> 179 bytes
-rw-r--r--scene/resources/default_theme/focus.pngbin411 -> 90 bytes
-rw-r--r--scene/resources/default_theme/frame_focus.pngbin448 -> 90 bytes
-rw-r--r--scene/resources/default_theme/full_panel_bg.pngbin430 -> 332 bytes
-rw-r--r--scene/resources/default_theme/graph_node.pngbin762 -> 277 bytes
-rw-r--r--scene/resources/default_theme/graph_node_comment.pngbin506 -> 214 bytes
-rw-r--r--scene/resources/default_theme/graph_node_comment_focus.pngbin482 -> 226 bytes
-rw-r--r--scene/resources/default_theme/graph_node_position.pngbin278 -> 252 bytes
-rw-r--r--scene/resources/default_theme/graph_node_selected.pngbin933 -> 271 bytes
-rw-r--r--scene/resources/default_theme/hseparator.pngbin323 -> 90 bytes
-rw-r--r--scene/resources/default_theme/hslider_bg.pngbin526 -> 177 bytes
-rw-r--r--scene/resources/default_theme/hslider_grabber.pngbin591 -> 328 bytes
-rw-r--r--scene/resources/default_theme/hslider_grabber_hl.pngbin734 -> 316 bytes
-rw-r--r--scene/resources/default_theme/hsplit_bg.pngbin334 -> 96 bytes
-rw-r--r--scene/resources/default_theme/hsplitter.pngbin359 -> 132 bytes
-rw-r--r--scene/resources/default_theme/icon_close.pngbin230 -> 265 bytes
-rw-r--r--scene/resources/default_theme/line_edit.pngbin424 -> 408 bytes
-rw-r--r--scene/resources/default_theme/line_edit_active.pngbin0 -> 411 bytes
-rw-r--r--scene/resources/default_theme/line_edit_disabled.pngbin406 -> 389 bytes
-rw-r--r--scene/resources/default_theme/line_edit_focus.pngbin660 -> 0 bytes
-rw-r--r--scene/resources/default_theme/line_edit_selected.pngbin0 -> 411 bytes
-rwxr-xr-xscene/resources/default_theme/make_header.py21
-rw-r--r--scene/resources/default_theme/option_arrow.pngbin227 -> 205 bytes
-rw-r--r--scene/resources/default_theme/option_button_disabled.pngbin901 -> 346 bytes
-rw-r--r--scene/resources/default_theme/option_button_focus.pngbin679 -> 0 bytes
-rw-r--r--scene/resources/default_theme/option_button_hover.pngbin924 -> 320 bytes
-rw-r--r--scene/resources/default_theme/option_button_normal.pngbin922 -> 100 bytes
-rw-r--r--scene/resources/default_theme/option_button_pressed.pngbin931 -> 318 bytes
-rw-r--r--scene/resources/default_theme/panel_bg.pngbin334 -> 95 bytes
-rw-r--r--scene/resources/default_theme/popup_bg.pngbin672 -> 425 bytes
-rw-r--r--scene/resources/default_theme/popup_hover.pngbin404 -> 0 bytes
-rw-r--r--scene/resources/default_theme/popup_unchecked.pngbin310 -> 0 bytes
-rw-r--r--scene/resources/default_theme/popup_window.pngbin1234 -> 514 bytes
-rw-r--r--scene/resources/default_theme/progress_bar.pngbin460 -> 93 bytes
-rw-r--r--scene/resources/default_theme/progress_fill.pngbin402 -> 309 bytes
-rw-r--r--scene/resources/default_theme/radio_checked.pngbin477 -> 441 bytes
-rw-r--r--scene/resources/default_theme/radio_unchecked.pngbin422 -> 406 bytes
-rw-r--r--scene/resources/default_theme/scroll_bg.pngbin510 -> 90 bytes
-rw-r--r--scene/resources/default_theme/scroll_button_down.pngbin418 -> 187 bytes
-rw-r--r--scene/resources/default_theme/scroll_button_down_hl.pngbin418 -> 222 bytes
-rw-r--r--scene/resources/default_theme/scroll_button_left.pngbin444 -> 207 bytes
-rw-r--r--scene/resources/default_theme/scroll_button_left_hl.pngbin461 -> 244 bytes
-rw-r--r--scene/resources/default_theme/scroll_button_right.pngbin446 -> 205 bytes
-rw-r--r--scene/resources/default_theme/scroll_button_right_hl.pngbin464 -> 243 bytes
-rw-r--r--scene/resources/default_theme/scroll_button_up.pngbin421 -> 190 bytes
-rw-r--r--scene/resources/default_theme/scroll_button_up_hl.pngbin421 -> 232 bytes
-rw-r--r--scene/resources/default_theme/scroll_grabber.pngbin523 -> 147 bytes
-rw-r--r--scene/resources/default_theme/scroll_grabber_hl.pngbin536 -> 188 bytes
-rw-r--r--scene/resources/default_theme/selection.pngbin406 -> 261 bytes
-rw-r--r--scene/resources/default_theme/selection_oof.pngbin411 -> 257 bytes
-rw-r--r--scene/resources/default_theme/source/arrow_down.svg20
-rw-r--r--scene/resources/default_theme/source/arrow_right.svg18
-rw-r--r--scene/resources/default_theme/source/button_disabled.svg80
-rw-r--r--scene/resources/default_theme/source/button_group.svg78
-rw-r--r--scene/resources/default_theme/source/button_hover.svg80
-rw-r--r--scene/resources/default_theme/source/button_normal.svg80
-rw-r--r--scene/resources/default_theme/source/button_pressed.svg80
-rw-r--r--scene/resources/default_theme/source/checked.svg79
-rw-r--r--scene/resources/default_theme/source/dropdown.svg79
-rw-r--r--scene/resources/default_theme/source/focus.svg71
-rw-r--r--scene/resources/default_theme/source/frame_focus.svg71
-rw-r--r--scene/resources/default_theme/source/full_panel_bg.svg80
-rw-r--r--scene/resources/default_theme/source/graph_node.svg83
-rw-r--r--scene/resources/default_theme/source/graph_node_comment.svg83
-rw-r--r--scene/resources/default_theme/source/graph_node_comment_focus.svg83
-rw-r--r--scene/resources/default_theme/source/graph_node_position.svg77
-rw-r--r--scene/resources/default_theme/source/graph_node_selected.svg83
-rw-r--r--scene/resources/default_theme/source/hseparator.svg73
-rw-r--r--scene/resources/default_theme/source/hslider_bg.svg79
-rw-r--r--scene/resources/default_theme/source/hslider_grabber.svg80
-rw-r--r--scene/resources/default_theme/source/hslider_grabber_hl.svg80
-rw-r--r--scene/resources/default_theme/source/hsplitter.svg79
-rw-r--r--scene/resources/default_theme/source/icon_close.svg43
-rw-r--r--scene/resources/default_theme/source/line_edit.svg89
-rw-r--r--scene/resources/default_theme/source/line_edit_active.svg89
-rw-r--r--scene/resources/default_theme/source/line_edit_disabled.svg86
-rw-r--r--scene/resources/default_theme/source/option_arrow.svg28
-rw-r--r--scene/resources/default_theme/source/panel_bg.svg79
-rw-r--r--scene/resources/default_theme/source/popup_bg.svg87
-rw-r--r--scene/resources/default_theme/source/popup_window.svg96
-rw-r--r--scene/resources/default_theme/source/progress_bar.svg72
-rw-r--r--scene/resources/default_theme/source/progress_fill.svg82
-rw-r--r--scene/resources/default_theme/source/radio_checked.svg85
-rw-r--r--scene/resources/default_theme/source/radio_unchecked.svg79
-rw-r--r--scene/resources/default_theme/source/scroll_bg.svg71
-rw-r--r--scene/resources/default_theme/source/scroll_button_down.svg77
-rw-r--r--scene/resources/default_theme/source/scroll_button_down_hl.svg77
-rw-r--r--scene/resources/default_theme/source/scroll_button_left.svg77
-rw-r--r--scene/resources/default_theme/source/scroll_button_left_hl.svg77
-rw-r--r--scene/resources/default_theme/source/scroll_button_right.svg77
-rw-r--r--scene/resources/default_theme/source/scroll_button_right_hl.svg77
-rw-r--r--scene/resources/default_theme/source/scroll_button_up.svg77
-rw-r--r--scene/resources/default_theme/source/scroll_button_up_hl.svg77
-rw-r--r--scene/resources/default_theme/source/scroll_grabber.svg78
-rw-r--r--scene/resources/default_theme/source/scroll_grabber_hl.svg79
-rw-r--r--scene/resources/default_theme/source/selection.svg88
-rw-r--r--scene/resources/default_theme/source/selection_oof.svg88
-rw-r--r--scene/resources/default_theme/source/spinbox_updown.svg33
-rw-r--r--scene/resources/default_theme/source/submenu.svg19
-rw-r--r--scene/resources/default_theme/source/tab.svg81
-rw-r--r--scene/resources/default_theme/source/tab_behind.svg71
-rw-r--r--scene/resources/default_theme/source/tab_close.svg46
-rw-r--r--scene/resources/default_theme/source/tab_container_bg.svg80
-rw-r--r--scene/resources/default_theme/source/tab_current.svg79
-rw-r--r--scene/resources/default_theme/source/tab_menu.svg36
-rw-r--r--scene/resources/default_theme/source/toggle_off.svg86
-rw-r--r--scene/resources/default_theme/source/toggle_on.svg85
-rw-r--r--scene/resources/default_theme/source/tooltip_bg.svg85
-rw-r--r--scene/resources/default_theme/source/tree_bg.svg80
-rw-r--r--scene/resources/default_theme/source/tree_title.svg80
-rw-r--r--scene/resources/default_theme/source/tree_title_pressed.svg80
-rw-r--r--scene/resources/default_theme/source/unchecked.svg77
-rw-r--r--scene/resources/default_theme/source/updown.svg14
-rw-r--r--scene/resources/default_theme/source/vseparator.svg73
-rw-r--r--scene/resources/default_theme/source/vslider_bg.svg85
-rw-r--r--scene/resources/default_theme/source/vslider_grabber.svg80
-rw-r--r--scene/resources/default_theme/source/vslider_grabber_hl.svg80
-rw-r--r--scene/resources/default_theme/source/vsplit_bg.svg79
-rw-r--r--scene/resources/default_theme/source/vsplitter.svg79
-rw-r--r--scene/resources/default_theme/source/window_resizer.svg81
-rw-r--r--scene/resources/default_theme/spinbox_updown.pngbin280 -> 345 bytes
-rw-r--r--scene/resources/default_theme/submenu.pngbin175 -> 217 bytes
-rw-r--r--scene/resources/default_theme/tab.pngbin300 -> 158 bytes
-rw-r--r--scene/resources/default_theme/tab_behind.pngbin553 -> 93 bytes
-rw-r--r--scene/resources/default_theme/tab_close.pngbin325 -> 265 bytes
-rw-r--r--scene/resources/default_theme/tab_container_backup.pngbin0 -> 211 bytes
-rw-r--r--scene/resources/default_theme/tab_container_bg.pngbin598 -> 331 bytes
-rw-r--r--scene/resources/default_theme/tab_current.pngbin627 -> 256 bytes
-rw-r--r--scene/resources/default_theme/tab_menu.pngbin186 -> 146 bytes
-rw-r--r--scene/resources/default_theme/tab_menu_hl.pngbin186 -> 146 bytes
-rw-r--r--scene/resources/default_theme/theme_data.h579
-rw-r--r--scene/resources/default_theme/toggle_off.pngbin1355 -> 702 bytes
-rw-r--r--scene/resources/default_theme/toggle_on.pngbin1318 -> 738 bytes
-rw-r--r--scene/resources/default_theme/tool_button_pressed.pngbin1230 -> 0 bytes
-rw-r--r--scene/resources/default_theme/tooltip_bg.pngbin424 -> 194 bytes
-rw-r--r--scene/resources/default_theme/tree_bg.pngbin424 -> 304 bytes
-rw-r--r--scene/resources/default_theme/tree_bg_focus.pngbin1039 -> 0 bytes
-rw-r--r--scene/resources/default_theme/tree_title.pngbin335 -> 104 bytes
-rw-r--r--scene/resources/default_theme/tree_title_pressed.pngbin335 -> 104 bytes
-rw-r--r--scene/resources/default_theme/unchecked.pngbin477 -> 231 bytes
-rw-r--r--scene/resources/default_theme/updown.pngbin241 -> 214 bytes
-rw-r--r--scene/resources/default_theme/vseparator.pngbin323 -> 90 bytes
-rw-r--r--scene/resources/default_theme/vslider_bg.pngbin532 -> 180 bytes
-rw-r--r--scene/resources/default_theme/vslider_grabber.pngbin394 -> 328 bytes
-rw-r--r--scene/resources/default_theme/vslider_grabber_hl.pngbin439 -> 316 bytes
-rw-r--r--scene/resources/default_theme/vsplit_bg.pngbin334 -> 96 bytes
-rw-r--r--scene/resources/default_theme/vsplitter.pngbin351 -> 122 bytes
-rw-r--r--scene/resources/default_theme/window_resizer.pngbin181 -> 138 bytes
-rw-r--r--scene/resources/dynamic_font.cpp2
-rw-r--r--scene/resources/dynamic_font_stb.cpp1
-rw-r--r--scene/resources/dynamic_font_stb.h3
-rw-r--r--scene/resources/sky_box.cpp15
-rw-r--r--scene/resources/style_box.cpp5
-rw-r--r--scene/resources/surface_tool.h3
-rw-r--r--scene/resources/texture.cpp163
-rw-r--r--scene/resources/texture.h21
-rw-r--r--servers/audio_server.cpp1
-rw-r--r--servers/physics/body_sw.cpp4
-rw-r--r--servers/physics/gjk_epa.cpp25
-rw-r--r--servers/physics/joints/cone_twist_joint_sw.cpp18
-rw-r--r--servers/physics/joints/generic_6dof_joint_sw.cpp23
-rw-r--r--servers/physics/joints/hinge_joint_sw.cpp16
-rw-r--r--servers/physics/joints/pin_joint_sw.cpp16
-rw-r--r--servers/physics/joints/slider_joint_sw.cpp22
-rw-r--r--servers/visual/rasterizer.h6
-rw-r--r--servers/visual/shader_language.cpp2
-rw-r--r--servers/visual/visual_server_raster.cpp2
-rw-r--r--servers/visual/visual_server_raster.h6
-rw-r--r--servers/visual_server.cpp11
-rw-r--r--servers/visual_server.h9
-rw-r--r--thirdparty/README.md92
-rw-r--r--thirdparty/b2d_convexdecomp/b2Glue.h (renamed from drivers/convex_decomp/b2Glue.h)0
-rw-r--r--thirdparty/b2d_convexdecomp/b2Polygon.cpp (renamed from drivers/convex_decomp/b2Polygon.cpp)0
-rw-r--r--thirdparty/b2d_convexdecomp/b2Polygon.h (renamed from drivers/convex_decomp/b2Polygon.h)0
-rw-r--r--thirdparty/b2d_convexdecomp/b2Triangle.cpp (renamed from drivers/convex_decomp/b2Triangle.cpp)0
-rw-r--r--thirdparty/b2d_convexdecomp/b2Triangle.h (renamed from drivers/convex_decomp/b2Triangle.h)0
-rw-r--r--thirdparty/minizip/LICENSE-InfoZip.txt (renamed from core/io/LICENSE-InfoZip.txt)0
-rw-r--r--thirdparty/minizip/LICENSE-MiniZip.txt (renamed from core/io/LICENSE-MiniZip.txt)0
-rw-r--r--thirdparty/minizip/crypt.h (renamed from core/io/crypt.h)0
-rw-r--r--thirdparty/minizip/ioapi.c (renamed from core/io/ioapi.c)0
-rw-r--r--thirdparty/minizip/ioapi.h (renamed from core/io/ioapi.h)0
-rw-r--r--thirdparty/minizip/unzip.c (renamed from core/io/unzip.c)0
-rw-r--r--thirdparty/minizip/unzip.h (renamed from core/io/unzip.h)0
-rw-r--r--thirdparty/minizip/zip.c (renamed from core/io/zip.c)0
-rw-r--r--thirdparty/minizip/zip.h (renamed from core/io/zip.h)0
-rw-r--r--thirdparty/misc/aes256.cpp (renamed from core/io/aes256.cpp)0
-rw-r--r--thirdparty/misc/aes256.h (renamed from core/io/aes256.h)0
-rw-r--r--thirdparty/misc/base64.c (renamed from core/io/base64.c)0
-rw-r--r--thirdparty/misc/base64.h (renamed from core/io/base64.h)0
-rw-r--r--thirdparty/misc/curl_hostcheck.c (renamed from modules/openssl/curl_hostcheck.c)0
-rw-r--r--thirdparty/misc/curl_hostcheck.h (renamed from modules/openssl/curl_hostcheck.h)0
-rw-r--r--thirdparty/misc/fastlz.c (renamed from core/io/fastlz.c)0
-rw-r--r--thirdparty/misc/fastlz.h (renamed from core/io/fastlz.h)0
-rw-r--r--thirdparty/misc/hq2x.cpp (renamed from core/hq2x.cpp)0
-rw-r--r--thirdparty/misc/hq2x.h (renamed from core/hq2x.h)0
-rw-r--r--thirdparty/misc/md5.cpp (renamed from core/io/md5.cpp)4
-rw-r--r--thirdparty/misc/md5.h (renamed from core/io/md5.h)0
-rw-r--r--thirdparty/misc/mikktspace.c (renamed from scene/resources/mikktspace.c)0
-rw-r--r--thirdparty/misc/mikktspace.h (renamed from scene/resources/mikktspace.h)0
-rw-r--r--thirdparty/misc/pcg.cpp (renamed from core/math/pcg.cpp)0
-rw-r--r--thirdparty/misc/pcg.h (renamed from core/math/pcg.h)0
-rw-r--r--thirdparty/misc/sha256.c (renamed from core/io/sha256.c)0
-rw-r--r--thirdparty/misc/sha256.h (renamed from core/io/sha256.h)0
-rw-r--r--thirdparty/misc/smaz.c207
-rw-r--r--thirdparty/misc/smaz.h20
-rw-r--r--thirdparty/misc/stb_truetype.h (renamed from scene/resources/stb_truetype.h)0
-rw-r--r--thirdparty/misc/stb_vorbis.c (renamed from thirdparty/stb_vorbis/stb_vorbis.c)0
-rw-r--r--thirdparty/misc/triangulator.cpp (renamed from core/math/triangulator.cpp)0
-rw-r--r--thirdparty/misc/triangulator.h (renamed from core/math/triangulator.h)0
-rw-r--r--thirdparty/misc/yuv2rgb.h (renamed from modules/theora/yuv2rgb.h)25
758 files changed, 25365 insertions, 14387 deletions
diff --git a/.editorconfig b/.editorconfig
index e19057f0e8..b7ef43c340 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -5,6 +5,9 @@ charset = utf-8
end_of_line = lf
indent_style = tab
+[*.{cpp,hpp,c,h,mm}]
+trim_trailing_whitespace = true
+
[.travis.yml]
indent_style = space
indent_size = 2
diff --git a/.gitignore b/.gitignore
index 0e516e4a68..537ed7d32a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,7 @@ core/global_defaults.cpp
core/method_bind_ext.inc
core/method_bind.inc
core/script_encryption_key.cpp
-core/version.h
+core/version_generated.h
drivers/gles2/shaders/*.h
drivers/gles3/shaders/*.h
drivers/unix/os_unix_global_settings_path.cpp
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
new file mode 100644
index 0000000000..9a525d4f89
--- /dev/null
+++ b/COPYRIGHT.txt
@@ -0,0 +1,1139 @@
+# Exhaustive licensing information for files in the Godot Engine repository
+# =========================================================================
+#
+# This file aims at documenting the copyright and license for every source
+# file in the Godot Engine repository, and especially outline the files
+# whose license differs from the MIT/Expat license used by Godot Engine.
+#
+# It is written as a machine-readable format following the debian/copyright
+# specification. Globbing patterns (e.g. "Files: *") mean that they affect
+# all corresponding files (also recursively in subfolders), apart from those
+# with a more explicit copyright statement.
+#
+# Licenses are given with their SPDX identifier, and are all included in
+# plain text at the end of this file (in alphabetical order).
+#
+# Disclaimer for thirdparty libraries:
+# ------------------------------------
+#
+# Licensing details for thirdparty libraries in the 'thirdparty/' directory
+# are given in summarized form, i.e. with only the "main" license described
+# in the library's license statement. Different licenses of single files or
+# code snippets in thirdparty libraries are not documented here.
+# For example:
+# Files: ./thirdparty/zlib/
+# Copyright: 1995-2017, Jean-loup Gailly and Mark Adler
+# License: Zlib
+# The exact copyright for each file in that library *may* differ, and some
+# files or code snippets might be distributed under other compatible licenses
+# (e.g. a public domain dedication), but as far as Godot Engine is concerned
+# the library is considered as a whole under the Zlib license.
+#
+# Nota: When linking dynamically against thirdparty libraries instead of
+# building them into the Godot binary, you may remove the corresponding
+# license details from this file.
+
+-----------------------------------------------------------------------
+
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: Godot Engine
+Upstream-Contact: Rémi Verschelde <contact@godotengine.org>
+Source: https://github.com/godotengine/godot
+
+Files: *
+Copyright: 2007-2017, Juan Linietsky, Ariel Manzur.
+ 2014-2017, Godot Engine contributors (cf. AUTHORS.md)
+License: Expat
+
+Files: ./icon.png
+ ./icon.svg
+ ./logo.png
+ ./logo.svg
+Copyright: Andrea Calabró
+License: CC-BY-3.0
+
+Files: ./platform/android/android_native_app_glue.c
+ ./platform/android/android_native_app_glue.h
+ ./platform/android/java/aidl/com/android/vending/billing/IInAppBillingService.aidl
+ ./platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml
+ ./platform/android/java/src/com/android/vending/licensing/*
+ ./platform/android/java/src/com/google/android/vending/expansion/downloader/*
+ ./platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java
+ ./platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java
+ ./platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java
+Copyright: 2008-2013, The Android Open Source Project
+License: Apache-2.0
+
+Files: ./platform/android/cpu-features.c
+ ./platform/android/cpu-features.h
+Copyright: 2010, The Android Open Source Project
+License: BSD-2-clause
+
+Files: ./platform/android/ifaddrs_android.cpp
+ ./platform/android/ifaddrs_android.h
+Copyright: 2012-2013, Google Inc.
+License: BSD-3-clause
+
+Files: ./platform/android/java/src/com/android/vending/licensing/util/Base64.java
+ ./platform/android/java/src/com/android/vending/licensing/util/Base64DecoderException.java
+Copyright: 2002, Google Inc.
+License: Apache-2.0
+
+Files: ./platform/android/power_android.cpp
+ ./platform/osx/power_osx.cpp
+ ./platform/windows/power_windows.cpp
+ ./platform/x11/power_x11.cpp
+Copyright: 1997-2017, Sam Lantinga
+ 2007-2017, Juan Linietsky, Ariel Manzur.
+ 2014-2017, Godot Engine contributors (cf. AUTHORS.md)
+License: Expat and Zlib
+
+Files: ./platform/uwp/export/export.cpp
+Copyright: 2016, Facebook, Inc. All rights reserved.
+ 2007-2017, Juan Linietsky, Ariel Manzur.
+ 2014-2017, Godot Engine contributors (cf. AUTHORS.md)
+License: BSD-3-clause and Expat
+
+Files: ./servers/physics/gjk_epa.cpp
+ ./servers/physics/joints/generic_6dof_joint_sw.cpp
+ ./servers/physics/joints/generic_6dof_joint_sw.h
+ ./servers/physics/joints/hinge_joint_sw.cpp
+ ./servers/physics/joints/hinge_joint_sw.h
+ ./servers/physics/joints/jacobian_entry_sw.h
+ ./servers/physics/joints/pin_joint_sw.cpp
+ ./servers/physics/joints/pin_joint_sw.h
+ ./servers/physics/joints/slider_joint_sw.cpp
+ ./servers/physics/joints/slider_joint_sw.h
+Copyright: 2003-2008, Erwin Coumans
+ 2007-2017, Juan Linietsky, Ariel Manzur.
+ 2014-2017, Godot Engine contributors (cf. AUTHORS.md)
+License: Expat and Zlib
+
+Files: ./servers/physics/joints/cone_twist_joint_sw.cpp
+ ./servers/physics/joints/cone_twist_joint_sw.h
+Copyright: 2007, Starbreeze Studios
+ 2007-2017, Juan Linietsky, Ariel Manzur.
+ 2014-2017, Godot Engine contributors (cf. AUTHORS.md)
+License: Expat and Zlib
+
+Files: ./thirdparty/b2d_convexdecomp/
+Copyright: 2007, Eric Jordan
+Copyright: 2006-2009, Erin Catto
+License: Zlib
+
+Files: ./thirdparty/certs/ca-certificates.crt
+Copyright: FIXME
+License: FIXME
+
+Files: ./thirdparty/enet/
+Copyright: 2002-2016, Lee Salzman
+License: Expat
+
+Files: ./thirdparty/fonts/DroidSans*.ttf
+Copyright: 2008, The Android Open Source Project
+License: Apache-2.0
+
+Files: ./thirdparty/fonts/source_code_pro.otf
+Copyright: 2010, 2012, Adobe Systems Incorporated
+License: OFL-1.1
+
+Files: ./thirdparty/freetype/
+Copyright: 1996-2016, David Turner, Robert Wilhelm, and Werner Lemberg.
+License: FTL
+
+Files: ./thirdparty/glad/
+Copyright: 2013, David Herberth
+License: Expat
+
+Files: ./thirdparty/jpeg_compressor/
+Copyright: 2012, Rich Geldreich
+License: public-domain
+
+Files: ./thirdparty/libogg/
+Copyright: 2002, Xiph.org Foundation
+License: BSD-3-clause
+
+Files: ./thirdparty/libpng/
+Copyright: 1995-1996, Guy Eric Schalnat, Group 42, Inc.
+ 1996-1997, Andreas Dilger
+ 1998-2016, Glenn Randers-Pehrson
+License: Zlib
+
+Files: ./thirdparty/libsimplewebm/
+Copyright: 2016, Błażej Szczygieł
+License: Expat
+
+Files: ./thirdparty/libsimplewebm/libwebm/
+Copyright: 2010, Google Inc.
+License: BSD-3-clause
+
+Files: ./thirdparty/libtheora/
+Copyright: 2002-2009, Xiph.org Foundation
+License: BSD-3-clause
+
+Files: ./thirdparty/libvorbis/
+Copyright: 2002-2015, Xiph.org Foundation
+License: BSD-3-clause
+
+Files: ./thirdparty/libvpx/
+Copyright: 2010, The WebM Project authors.
+License: BSD-3-clause
+
+Files: ./thirdparty/libwebp/COPYING
+Copyright: 2010, Google Inc.
+License: BSD-3-clause
+
+Files: ./thirdparty/minizip/
+Copyright: 1998-2010, Gilles Vollant
+ 2007-2008, Even Rouault
+ 2009-2010, Mathias Svensson
+License: Zlib
+
+Files: ./thirdparty/misc/aes256.cpp
+ ./thirdparty/misc/aes256.h
+ ./thirdparty/misc/sha256.c
+ ./thirdparty/misc/sha256.h
+Copyright: 2007-2011, Ilya O. Levin
+License: ISC
+
+Files: ./thirdparty/misc/base64.c
+ ./thirdparty/misc/base64.h
+Copyright: Ari Edelkind
+License: public-domain
+
+Files: ./thirdparty/misc/curl_hostcheck.c
+ ./thirdparty/misc/curl_hostcheck.h
+Copyright: 1998-2012, Daniel Stenberg et al.
+License: curl
+
+Files: ./thirdparty/misc/fastlz.c
+ ./thirdparty/misc/fastlz.h
+Copyright: 2005-2007, Ariya Hidayat
+License: Expat
+
+Files: ./thirdparty/misc/hq2x.cpp
+ ./thirdparty/misc/hq2x.h
+Copyright: 2016, Bruno Ribeiro
+License: Apache-2.0
+
+Files: ./thirdparty/misc/md5.cpp
+ ./thirdparty/misc/md5.h
+Copyright: 1990, RSA Data Security, Inc.
+License: RSA-MD
+
+Files: ./thirdparty/misc/mikktspace.c
+ ./thirdparty/misc/mikktspace.h
+Copyright: 2011, Morten S. Mikkelsen
+License: Zlib
+
+Files: ./thirdparty/misc/pcg.cpp
+ ./thirdparty/misc/pcg.h
+Copyright: 2014, M.E. O'Neill
+License: Apache-2.0
+
+Files: ./thirdparty/misc/smaz.c
+ ./thirdparty/misc/smaz.h
+Copyright: 2006-2009, Salvatore Sanfilippo
+License: BSD-3-clause
+
+Files: ./thirdparty/misc/stb_truetype.h
+ ./thirdparty/misc/stb_vorbis.c
+Copyright: 2007-2015, Sean Barrett
+License: public-domain
+
+Files: ./thirdparty/misc/triangulator.cpp
+ ./thirdparty/misc/triangulator.h
+Copyright: 2011, Ivan Fratric
+License: Expat
+
+Files: ./thirdparty/misc/yuv2rgb.h
+Copyright: 2008-2011, Robin Watts
+License: BSD-2-clause
+
+Files: ./thirdparty/openssl/
+Copyright: 1998-2016, The OpenSSL Project.
+License: OpenSSL
+
+Files: ./thirdparty/opus/
+Copyright: 2001-2011, Xiph.Org, Skype Limited, Octasic,
+ Jean-Marc Valin, Timothy B. Terriberry,
+ CSIRO, Gregory Maxwell, Mark Borgerding,
+ Erik de Castro Lopo
+License: BSD-3-clause
+
+Files: ./thirdparty/pvrtccompressor/
+Copyright: 2014, Jeffrey Lim.
+License: BSD-3-clause
+
+Files: ./thirdparty/rg-etc1/
+Copyright: 2012, Rich Geldreich
+License: Zlib
+
+Files: ./thirdparty/rtaudio/
+Copyright: 2001-2016, Gary P. Scavone
+License: Expat
+
+Files: ./thirdparty/squish/
+Copyright: 2006, Simon Brown
+License: Expat
+
+Files: ./thirdparty/zlib/
+Copyright: 1995-2017, Jean-loup Gailly and Mark Adler
+License: Zlib
+
+
+
+License: Apache-2.0
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+License: BSD-2-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ .
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ .
+ Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution. Neither the name of the author
+ nor the names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License: BSD-3-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ .
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ .
+ 3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+License: CC-BY-3.0
+ Creative Commons Attribution 3.0 Unported
+ .
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
+ ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE
+ INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ ITS USE.
+ .
+ License
+ .
+ THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
+ COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
+ COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
+ AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+ .
+ BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
+ TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
+ BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
+ CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
+ CONDITIONS.
+ .
+ 1. Definitions
+ .
+ a. "Adaptation" means a work based upon the Work, or upon the Work and
+ other pre-existing works, such as a translation, adaptation, derivative
+ work, arrangement of music or other alterations of a literary or
+ artistic work, or phonogram or performance and includes cinematographic
+ adaptations or any other form in which the Work may be recast,
+ transformed, or adapted including in any form recognizably derived from
+ the original, except that a work that constitutes a Collection will not
+ be considered an Adaptation for the purpose of this License. For the
+ avoidance of doubt, where the Work is a musical work, performance or
+ phonogram, the synchronization of the Work in timed-relation with a
+ moving image ("synching") will be considered an Adaptation for the
+ purpose of this License.
+ .
+ b. "Collection" means a collection of literary or artistic works, such
+ as encyclopedias and anthologies, or performances, phonograms or
+ broadcasts, or other works or subject matter other than works listed in
+ Section 1(f) below, which, by reason of the selection and arrangement of
+ their contents, constitute intellectual creations, in which the Work is
+ included in its entirety in unmodified form along with one or more other
+ contributions, each constituting separate and independent works in
+ themselves, which together are assembled into a collective whole. A work
+ that constitutes a Collection will not be considered an Adaptation (as
+ defined above) for the purposes of this License.
+ .
+ c. "Distribute" means to make available to the public the original and
+ copies of the Work or Adaptation, as appropriate, through sale or other
+ transfer of ownership.
+ .
+ d. "Licensor" means the individual, individuals, entity or entities that
+ offer(s) the Work under the terms of this License.
+ .
+ e. "Original Author" means, in the case of a literary or artistic work,
+ the individual, individuals, entity or entities who created the Work or
+ if no individual or entity can be identified, the publisher; and in
+ addition (i) in the case of a performance the actors, singers,
+ musicians, dancers, and other persons who act, sing, deliver, declaim,
+ play in, interpret or otherwise perform literary or artistic works or
+ expressions of folklore; (ii) in the case of a phonogram the producer
+ being the person or legal entity who first fixes the sounds of a
+ performance or other sounds; and, (iii) in the case of broadcasts, the
+ organization that transmits the broadcast.
+ .
+ f. "Work" means the literary and/or artistic work offered under the
+ terms of this License including without limitation any production in the
+ literary, scientific and artistic domain, whatever may be the mode or
+ form of its expression including digital form, such as a book, pamphlet
+ and other writing; a lecture, address, sermon or other work of the same
+ nature; a dramatic or dramatico-musical work; a choreographic work or
+ entertainment in dumb show; a musical composition with or without words;
+ a cinematographic work to which are assimilated works expressed by a
+ process analogous to cinematography; a work of drawing, painting,
+ architecture, sculpture, engraving or lithography; a photographic work
+ to which are assimilated works expressed by a process analogous to
+ photography; a work of applied art; an illustration, map, plan, sketch
+ or three-dimensional work relative to geography, topography,
+ architecture or science; a performance; a broadcast; a phonogram; a
+ compilation of data to the extent it is protected as a copyrightable
+ work; or a work performed by a variety or circus performer to the extent
+ it is not otherwise considered a literary or artistic work.
+ .
+ g. "You" means an individual or entity exercising rights under this
+ License who has not previously violated the terms of this License with
+ respect to the Work, or who has received express permission from the
+ Licensor to exercise rights under this License despite a previous
+ violation.
+ .
+ h. "Publicly Perform" means to perform public recitations of the Work
+ and to communicate to the public those public recitations, by any means
+ or process, including by wire or wireless means or public digital
+ performances; to make available to the public Works in such a way that
+ members of the public may access these Works from a place and at a place
+ individually chosen by them; to perform the Work to the public by any
+ means or process and the communication to the public of the performances
+ of the Work, including by public digital performance; to broadcast and
+ rebroadcast the Work by any means including signs, sounds or images.
+ .
+ i. "Reproduce" means to make copies of the Work by any means including
+ without limitation by sound or visual recordings and the right of
+ fixation and reproducing fixations of the Work, including storage of a
+ protected performance or phonogram in digital form or other electronic
+ medium.
+ .
+ 2. Fair Dealing Rights. Nothing in this License is intended to reduce,
+ limit, or restrict any uses free from copyright or rights arising from
+ limitations or exceptions that are provided for in connection with the
+ copyright protection under copyright law or other applicable laws.
+ .
+ 3. License Grant. Subject to the terms and conditions of this License,
+ Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+ perpetual (for the duration of the applicable copyright) license to
+ exercise the rights in the Work as stated below:
+ .
+ a. to Reproduce the Work, to incorporate the Work into one or more
+ Collections, and to Reproduce the Work as incorporated in the
+ Collections;
+ .
+ b. to create and Reproduce Adaptations provided that any such
+ Adaptation, including any translation in any medium, takes reasonable
+ steps to clearly label, demarcate or otherwise identify that changes
+ were made to the original Work. For example, a translation could be
+ marked "The original work was translated from English to Spanish," or a
+ modification could indicate "The original work has been modified.";
+ .
+ c. to Distribute and Publicly Perform the Work including as incorporated
+ in Collections; and,
+ .
+ d. to Distribute and Publicly Perform Adaptations.
+ .
+ e. For the avoidance of doubt:
+ .
+ i. Non-waivable Compulsory License Schemes. In those jurisdictions in
+ which the right to collect royalties through any statutory or compulsory
+ licensing scheme cannot be waived, the Licensor reserves the exclusive
+ right to collect such royalties for any exercise by You of the rights
+ granted under this License;
+ .
+ ii. Waivable Compulsory License Schemes. In those jurisdictions in which
+ the right to collect royalties through any statutory or compulsory
+ licensing scheme can be waived, the Licensor waives the exclusive right
+ to collect such royalties for any exercise by You of the rights granted
+ under this License; and,
+ .
+ iii. Voluntary License Schemes. The Licensor waives the right to collect
+ royalties, whether individually or, in the event that the Licensor is a
+ member of a collecting society that administers voluntary licensing
+ schemes, via that society, from any exercise by You of the rights
+ granted under this License.
+ .
+ The above rights may be exercised in all media and formats whether now
+ known or hereafter devised. The above rights include the right to make
+ such modifications as are technically necessary to exercise the rights
+ in other media and formats. Subject to Section 8(f), all rights not
+ expressly granted by Licensor are hereby reserved.
+ .
+ 4. Restrictions. The license granted in Section 3 above is expressly
+ made subject to and limited by the following restrictions:
+ .
+ a. You may Distribute or Publicly Perform the Work only under the terms
+ of this License. You must include a copy of, or the Uniform Resource
+ Identifier (URI) for, this License with every copy of the Work You
+ Distribute or Publicly Perform. You may not offer or impose any terms on
+ the Work that restrict the terms of this License or the ability of the
+ recipient of the Work to exercise the rights granted to that recipient
+ under the terms of the License. You may not sublicense the Work. You
+ must keep intact all notices that refer to this License and to the
+ disclaimer of warranties with every copy of the Work You Distribute or
+ Publicly Perform. When You Distribute or Publicly Perform the Work, You
+ may not impose any effective technological measures on the Work that
+ restrict the ability of a recipient of the Work from You to exercise the
+ rights granted to that recipient under the terms of the License. This
+ Section 4(a) applies to the Work as incorporated in a Collection, but
+ this does not require the Collection apart from the Work itself to be
+ made subject to the terms of this License. If You create a Collection,
+ upon notice from any Licensor You must, to the extent practicable,
+ remove from the Collection any credit as required by Section 4(b), as
+ requested. If You create an Adaptation, upon notice from any Licensor
+ You must, to the extent practicable, remove from the Adaptation any
+ credit as required by Section 4(b), as requested.
+ .
+ b. If You Distribute, or Publicly Perform the Work or any Adaptations or
+ Collections, You must, unless a request has been made pursuant to
+ Section 4(a), keep intact all copyright notices for the Work and
+ provide, reasonable to the medium or means You are utilizing: (i) the
+ name of the Original Author (or pseudonym, if applicable) if supplied,
+ and/or if the Original Author and/or Licensor designate another party or
+ parties (e.g., a sponsor institute, publishing entity, journal) for
+ attribution ("Attribution Parties") in Licensor's copyright notice,
+ terms of service or by other reasonable means, the name of such party or
+ parties; (ii) the title of the Work if supplied; (iii) to the extent
+ reasonably practicable, the URI, if any, that Licensor specifies to be
+ associated with the Work, unless such URI does not refer to the
+ copyright notice or licensing information for the Work; and (iv) ,
+ consistent with Section 3(b), in the case of an Adaptation, a credit
+ identifying the use of the Work in the Adaptation (e.g., "French
+ translation of the Work by Original Author," or "Screenplay based on
+ original Work by Original Author"). The credit required by this Section
+ 4 (b) may be implemented in any reasonable manner; provided, however,
+ that in the case of a Adaptation or Collection, at a minimum such credit
+ will appear, if a credit for all contributing authors of the Adaptation
+ or Collection appears, then as part of these credits and in a manner at
+ least as prominent as the credits for the other contributing authors.
+ For the avoidance of doubt, You may only use the credit required by this
+ Section for the purpose of attribution in the manner set out above and,
+ by exercising Your rights under this License, You may not implicitly or
+ explicitly assert or imply any connection with, sponsorship or
+ endorsement by the Original Author, Licensor and/or Attribution Parties,
+ as appropriate, of You or Your use of the Work, without the separate,
+ express prior written permission of the Original Author, Licensor and/or
+ Attribution Parties.
+ .
+ c. Except as otherwise agreed in writing by the Licensor or as may be
+ otherwise permitted by applicable law, if You Reproduce, Distribute or
+ Publicly Perform the Work either by itself or as part of any Adaptations
+ or Collections, You must not distort, mutilate, modify or take other
+ derogatory action in relation to the Work which would be prejudicial to
+ the Original Author's honor or reputation. Licensor agrees that in those
+ jurisdictions (e.g. Japan), in which any exercise of the right granted
+ in Section 3(b) of this License (the right to make Adaptations) would be
+ deemed to be a distortion, mutilation, modification or other derogatory
+ action prejudicial to the Original Author's honor and reputation, the
+ Licensor will waive or not assert, as appropriate, this Section, to the
+ fullest extent permitted by the applicable national law, to enable You
+ to reasonably exercise Your right under Section 3(b) of this License
+ (right to make Adaptations) but not otherwise.
+ .
+ 5. Representations, Warranties and Disclaimer
+ .
+ UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
+ OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
+ KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+ INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+ FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
+ LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
+ WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+ .
+ 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
+ LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
+ ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
+ ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
+ BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ .
+ 7. Termination
+ .
+ a. This License and the rights granted hereunder will terminate
+ automatically upon any breach by You of the terms of this License.
+ Individuals or entities who have received Adaptations or Collections
+ from You under this License, however, will not have their licenses
+ terminated provided such individuals or entities remain in full
+ compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
+ survive any termination of this License.
+ .
+ b. Subject to the above terms and conditions, the license granted here
+ is perpetual (for the duration of the applicable copyright in the Work).
+ Notwithstanding the above, Licensor reserves the right to release the
+ Work under different license terms or to stop distributing the Work at
+ any time; provided, however that any such election will not serve to
+ withdraw this License (or any other license that has been, or is
+ required to be, granted under the terms of this License), and this
+ License will continue in full force and effect unless terminated as
+ stated above.
+ .
+ 8. Miscellaneous
+ .
+ a. Each time You Distribute or Publicly Perform the Work or a
+ Collection, the Licensor offers to the recipient a license to the Work
+ on the same terms and conditions as the license granted to You under
+ this License.
+ .
+ b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
+ offers to the recipient a license to the original Work on the same terms
+ and conditions as the license granted to You under this License.
+ .
+ c. If any provision of this License is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of
+ the remainder of the terms of this License, and without further action
+ by the parties to this agreement, such provision shall be reformed to
+ the minimum extent necessary to make such provision valid and
+ enforceable.
+ .
+ d. No term or provision of this License shall be deemed waived and no
+ breach consented to unless such waiver or consent shall be in writing
+ and signed by the party to be charged with such waiver or consent. This
+ License constitutes the entire agreement between the parties with
+ respect to the Work licensed here. There are no understandings,
+ agreements or representations with respect to the Work not specified
+ here. Licensor shall not be bound by any additional provisions that may
+ appear in any communication from You.
+ .
+ e. This License may not be modified without the mutual written agreement
+ of the Licensor and You.
+ .
+ f. The rights granted under, and the subject matter referenced, in this
+ License were drafted utilizing the terminology of the Berne Convention
+ for the Protection of Literary and Artistic Works (as amended on
+ September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
+ Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
+ the Universal Copyright Convention (as revised on July 24, 1971). These
+ rights and subject matter take effect in the relevant jurisdiction in
+ which the License terms are sought to be enforced according to the
+ corresponding provisions of the implementation of those treaty
+ provisions in the applicable national law. If the standard suite of
+ rights granted under applicable copyright law includes additional rights
+ not granted under this License, such additional rights are deemed to be
+ included in the License; this License is not intended to restrict the
+ license of any rights under applicable law.
+ .
+ Creative Commons Notice
+ .
+ Creative Commons is not a party to this License, and makes no warranty
+ whatsoever in connection with the Work. Creative Commons will not be
+ liable to You or any party on any legal theory for any damages
+ whatsoever, including without limitation any general, special,
+ incidental or consequential damages arising in connection to this
+ license. Notwithstanding the foregoing two (2) sentences, if Creative
+ Commons has expressly identified itself as the Licensor hereunder, it
+ shall have all rights and obligations of Licensor.
+ .
+ Except for the limited purpose of indicating to the public that the Work
+ is licensed under the CCPL, Creative Commons does not authorize the use
+ by either party of the trademark "Creative Commons" or any related
+ trademark or logo of Creative Commons without the prior written consent
+ of Creative Commons. Any permitted use will be in compliance with
+ Creative Commons' then-current trademark usage guidelines, as may be
+ published on its website or otherwise made available upon request from
+ time to time. For the avoidance of doubt, this trademark restriction
+ does not form part of this License.
+ .
+ Creative Commons may be contacted at http://creativecommons.org/.
+
+License: curl
+ All rights reserved.
+ .
+ Permission to use, copy, modify, and distribute this software for any purpose
+ with or without fee is hereby granted, provided that the above copyright
+ notice and this permission notice appear in all copies.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
+ NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+ OR OTHER DEALINGS IN THE SOFTWARE.
+ .
+ Except as contained in this notice, the name of a copyright holder shall not
+ be used in advertising or otherwise to promote the sale, use or other dealings
+ in this Software without prior written authorization of the copyright holder.
+
+License: Expat
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License: FTL
+ The FreeType Project LICENSE
+ ----------------------------
+ .
+ 2000-Feb-08
+ .
+ Copyright 1996-2000 by
+ David Turner, Robert Wilhelm, and Werner Lemberg
+ .
+ .
+ .
+ Introduction
+ ============
+ .
+ The FreeType Project is distributed in several archive packages;
+ some of them may contain, in addition to the FreeType font engine,
+ various tools and contributions which rely on, or relate to, the
+ FreeType Project.
+ .
+ This license applies to all files found in such packages, and
+ which do not fall under their own explicit license. The license
+ affects thus the FreeType font engine, the test programs,
+ documentation and makefiles, at the very least.
+ .
+ This license was inspired by the BSD, Artistic, and IJG
+ (Independent JPEG Group) licenses, which all encourage inclusion
+ and use of free software in commercial and freeware products
+ alike. As a consequence, its main points are that:
+ .
+ o We don't promise that this software works. However, we will be
+ interested in any kind of bug reports. (`as is' distribution)
+ .
+ o You can use this software for whatever you want, in parts or
+ full form, without having to pay us. (`royalty-free' usage)
+ .
+ o You may not pretend that you wrote this software. If you use
+ it, or only parts of it, in a program, you must acknowledge
+ somewhere in your documentation that you have used the
+ FreeType code. (`credits')
+ .
+ We specifically permit and encourage the inclusion of this
+ software, with or without modifications, in commercial products.
+ We disclaim all warranties covering The FreeType Project and
+ assume no liability related to The FreeType Project.
+ .
+ .
+ Legal Terms
+ ===========
+ .
+ 0. Definitions
+ --------------
+ .
+ Throughout this license, the terms `package', `FreeType Project',
+ and `FreeType archive' refer to the set of files originally
+ distributed by the authors (David Turner, Robert Wilhelm, and
+ Werner Lemberg) as the `FreeType Project', be they named as alpha,
+ beta or final release.
+ .
+ `You' refers to the licensee, or person using the project, where
+ `using' is a generic term including compiling the project's source
+ code as well as linking it to form a `program' or `executable'.
+ This program is referred to as `a program using the FreeType
+ engine'.
+ .
+ This license applies to all files distributed in the original
+ FreeType Project, including all source code, binaries and
+ documentation, unless otherwise stated in the file in its
+ original, unmodified form as distributed in the original archive.
+ If you are unsure whether or not a particular file is covered by
+ this license, you must contact us to verify this.
+ .
+ The FreeType Project is copyright (C) 1996-2000 by David Turner,
+ Robert Wilhelm, and Werner Lemberg. All rights reserved except as
+ specified below.
+ .
+ 1. No Warranty
+ --------------
+ .
+ THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
+ USE, OF THE FREETYPE PROJECT.
+ .
+ 2. Redistribution
+ -----------------
+ .
+ This license grants a worldwide, royalty-free, perpetual and
+ irrevocable right and license to use, execute, perform, compile,
+ display, copy, create derivative works of, distribute and
+ sublicense the FreeType Project (in both source and object code
+ forms) and derivative works thereof for any purpose; and to
+ authorize others to exercise some or all of the rights granted
+ herein, subject to the following conditions:
+ .
+ o Redistribution of source code must retain this license file
+ (`LICENSE.TXT') unaltered; any additions, deletions or changes
+ to the original files must be clearly indicated in
+ accompanying documentation. The copyright notices of the
+ unaltered, original files must be preserved in all copies of
+ source files.
+ .
+ o Redistribution in binary form must provide a disclaimer that
+ states that the software is based in part of the work of the
+ FreeType Team, in the distribution documentation. We also
+ encourage you to put an URL to the FreeType web page in your
+ documentation, though this isn't mandatory.
+ .
+ These conditions apply to any software derived from or based on
+ the FreeType Project, not just the unmodified files. If you use
+ our work, you must acknowledge us. However, no fee need be paid
+ to us.
+ .
+ 3. Advertising
+ --------------
+ .
+ Neither the FreeType authors and contributors nor you shall use
+ the name of the other for commercial, advertising, or promotional
+ purposes without specific prior written permission.
+ .
+ We suggest, but do not require, that you use one or more of the
+ following phrases to refer to this software in your documentation
+ or advertising materials: `FreeType Project', `FreeType Engine',
+ `FreeType library', or `FreeType Distribution'.
+ .
+ As you have not signed this license, you are not required to
+ accept it. However, as the FreeType Project is copyrighted
+ material, only this license, or another one contracted with the
+ authors, grants you the right to use, distribute, and modify it.
+ Therefore, by using, distributing, or modifying the FreeType
+ Project, you indicate that you understand and accept all the terms
+ of this license.
+ .
+ 4. Contacts
+ -----------
+ .
+ There are two mailing lists related to FreeType:
+ .
+ o freetype@freetype.org
+ .
+ Discusses general use and applications of FreeType, as well as
+ future and wanted additions to the library and distribution.
+ If you are looking for support, start in this list if you
+ haven't found anything to help you in the documentation.
+ .
+ o devel@freetype.org
+ .
+ Discusses bugs, as well as engine internals, design issues,
+ specific licenses, porting, etc.
+ .
+ o http://www.freetype.org
+ .
+ Holds the current FreeType web page, which will allow you to
+ download our latest development version and read online
+ documentation.
+ .
+ You can also contact us individually at:
+ .
+ David Turner <david.turner@freetype.org>
+ Robert Wilhelm <robert.wilhelm@freetype.org>
+ Werner Lemberg <werner.lemberg@freetype.org>
+
+License: ISC
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+License: OFL-1.1
+ PREAMBLE
+ The goals of the Open Font License (OFL) are to stimulate worldwide
+ development of collaborative font projects, to support the font creation
+ efforts of academic and linguistic communities, and to provide a free and
+ open framework in which fonts may be shared and improved in partnership
+ with others.
+ .
+ The OFL allows the licensed fonts to be used, studied, modified and
+ redistributed freely as long as they are not sold by themselves. The
+ fonts, including any derivative works, can be bundled, embedded,
+ redistributed and/or sold with any software provided that any reserved
+ names are not used by derivative works. The fonts and derivatives,
+ however, cannot be released under any other type of license. The
+ requirement for fonts to remain under this license does not apply
+ to any document created using the fonts or their derivatives.
+ .
+ DEFINITIONS
+ "Font Software" refers to the set of files released by the Copyright
+ Holder(s) under this license and clearly marked as such. This may
+ include source files, build scripts and documentation.
+ .
+ "Reserved Font Name" refers to any names specified as such after the
+ copyright statement(s).
+ .
+ "Original Version" refers to the collection of Font Software components as
+ distributed by the Copyright Holder(s).
+ .
+ "Modified Version" refers to any derivative made by adding to, deleting,
+ or substituting -- in part or in whole -- any of the components of the
+ Original Version, by changing formats or by porting the Font Software to a
+ new environment.
+ .
+ "Author" refers to any designer, engineer, programmer, technical
+ writer or other person who contributed to the Font Software.
+ .
+ PERMISSION & CONDITIONS
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
+ redistribute, and sell modified and unmodified copies of the Font
+ Software, subject to the following conditions:
+ .
+ 1) Neither the Font Software nor any of its individual components,
+ in Original or Modified Versions, may be sold by itself.
+ .
+ 2) Original or Modified Versions of the Font Software may be bundled,
+ redistributed and/or sold with any software, provided that each copy
+ contains the above copyright notice and this license. These can be
+ included either as stand-alone text files, human-readable headers or
+ in the appropriate machine-readable metadata fields within text or
+ binary files as long as those fields can be easily viewed by the user.
+ .
+ 3) No Modified Version of the Font Software may use the Reserved Font
+ Name(s) unless explicit written permission is granted by the corresponding
+ Copyright Holder. This restriction only applies to the primary font name as
+ presented to the users.
+ .
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+ Software shall not be used to promote, endorse or advertise any
+ Modified Version, except to acknowledge the contribution(s) of the
+ Copyright Holder(s) and the Author(s) or with their explicit written
+ permission.
+ .
+ 5) The Font Software, modified or unmodified, in part or in whole,
+ must be distributed entirely under this license, and must not be
+ distributed under any other license. The requirement for fonts to
+ remain under this license does not apply to any document created
+ using the Font Software.
+ .
+ TERMINATION
+ This license becomes null and void if any of the above conditions are
+ not met.
+ .
+ DISCLAIMER
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE.
+
+License: OpenSSL
+ LICENSE ISSUES
+ ==============
+ .
+ The OpenSSL toolkit stays under a double license, i.e. both the conditions of
+ the OpenSSL License and the original SSLeay license apply to the toolkit.
+ See below for the actual license texts.
+ .
+ OpenSSL License
+ ---------------
+ .
+ ====================================================================
+ Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.
+ .
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ .
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ .
+ 3. All advertising materials mentioning features or use of this
+ software must display the following acknowledgment:
+ "This product includes software developed by the OpenSSL Project
+ for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ .
+ 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ endorse or promote products derived from this software without
+ prior written permission. For written permission, please contact
+ openssl-core@openssl.org.
+ .
+ 5. Products derived from this software may not be called "OpenSSL"
+ nor may "OpenSSL" appear in their names without prior written
+ permission of the OpenSSL Project.
+ .
+ 6. Redistributions of any form whatsoever must retain the following
+ acknowledgment:
+ "This product includes software developed by the OpenSSL Project
+ for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ .
+ THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+ ====================================================================
+ .
+ This product includes cryptographic software written by Eric Young
+ (eay@cryptsoft.com). This product includes software written by Tim
+ Hudson (tjh@cryptsoft.com).
+ .
+ Original SSLeay License
+ -----------------------
+ .
+ Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ All rights reserved.
+ .
+ This package is an SSL implementation written
+ by Eric Young (eay@cryptsoft.com).
+ The implementation was written so as to conform with Netscapes SSL.
+ .
+ This library is free for commercial and non-commercial use as long as
+ the following conditions are aheared to. The following conditions
+ apply to all code found in this distribution, be it the RC4, RSA,
+ lhash, DES, etc., code; not just the SSL code. The SSL documentation
+ included with this distribution is covered by the same copyright terms
+ except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ .
+ Copyright remains Eric Young's, and as such any Copyright notices in
+ the code are not to be removed.
+ If this package is used in a product, Eric Young should be given attribution
+ as the author of the parts of the library used.
+ This can be in the form of a textual message at program startup or
+ in documentation (online or textual) provided with the package.
+ .
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ "This product includes cryptographic software written by
+ Eric Young (eay@cryptsoft.com)"
+ The word 'cryptographic' can be left out if the rouines from the library
+ being used are not cryptographic related :-).
+ 4. If you include any Windows specific code (or a derivative thereof) from
+ the apps directory (application code) you must include an acknowledgement:
+ "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ .
+ THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+ .
+ The licence and distribution terms for any publically available version or
+ derivative of this code cannot be changed. i.e. this code cannot simply be
+ copied and put under another distribution licence
+ [including the GNU Public Licence.]
+
+License: RSA-MD
+ License to copy and use this software is granted provided that it is
+ identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm"
+ in all material mentioning or referencing this software or this function.
+ .
+ License is also granted to make and use derivative works provided that such
+ works are identified as "derived from the RSA Data Security, Inc. MD5
+ Message-Digest Algorithm" in all material mentioning or referencing the
+ derived work.
+ .
+ RSA Data Security, Inc. makes no representations concerning either the
+ merchantability of this software or the suitability of this software for
+ any particular purpose. It is provided "as is" without express or implied
+ warranty of any kind.
+ .
+ These notices must be retained in any copies of any part of this
+ documentation and/or software.
+
+License: Zlib
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+ .
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+ .
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
diff --git a/LICENSE.md b/LICENSE.md
deleted file mode 100644
index 83dc84e041..0000000000
--- a/LICENSE.md
+++ /dev/null
@@ -1,28 +0,0 @@
- GODOT ENGINE
- http://www.godotengine.org
-
-************************************************************************
-
- Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.
- Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-************************************************************************
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000000..0b5b0c341f
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.
+Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+-- Godot Engine <https://godotengine.org>
diff --git a/LOGO_LICENSE.md b/LOGO_LICENSE.md
index 2858712f18..b357c49664 100644
--- a/LOGO_LICENSE.md
+++ b/LOGO_LICENSE.md
@@ -1,2 +1,3 @@
-Godot Logo (c) Andrea Calabró, distributed under the terms of the CC By License:
-https://creativecommons.org/licenses/by/3.0/legalcode \ No newline at end of file
+Godot Logo (C) Andrea Calabró
+Distributed under the terms of the Creative Commons Attribution License
+version 3.0 (CC-BY 3.0) <https://creativecommons.org/licenses/by/3.0/legalcode>.
diff --git a/README.md b/README.md
index 701982da11..0c4ab6498a 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![GODOT](/logo.png)](https://godotengine.org)
+[![Godot Engine logo](/logo.png)](https://godotengine.org)
## Godot Engine
diff --git a/core/SCsub b/core/SCsub
index 77c8288846..fd3f57dd7c 100644
--- a/core/SCsub
+++ b/core/SCsub
@@ -5,6 +5,7 @@ Import('env')
env.core_sources = []
+# Generate global defaults
gd_call = ""
gd_inc = ""
@@ -21,6 +22,8 @@ f = open("global_defaults.cpp", "wb")
f.write(gd_cpp)
f.close()
+
+# Generate AES256 script encryption key
import os
txt = "0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0"
if ("SCRIPT_AES256_ENCRYPTION_KEY" in os.environ):
@@ -49,20 +52,57 @@ f.write("#include \"global_config.h\"\nuint8_t script_encryption_key[32]={" + tx
f.close()
+# Add required thirdparty code. Header paths are hardcoded, we don't need to append
+# to the include path (saves a few chars on the compiler invocation for touchy MSVC...)
+thirdparty_dir = "#thirdparty/misc/"
+thirdparty_sources = [
+ # C sources
+ "base64.c",
+ "fastlz.c",
+ "sha256.c",
+ "smaz.c",
+
+ # C++ sources
+ "aes256.cpp",
+ "hq2x.cpp",
+ "md5.cpp",
+ "pcg.cpp",
+ "triangulator.cpp",
+]
+thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
+env.add_source_files(env.core_sources, thirdparty_sources)
+
+# Minizip library, can be unbundled in theory
+# However, our version has some custom modifications, so it won't compile with the system one
+thirdparty_minizip_dir = "#thirdparty/minizip/"
+thirdparty_minizip_sources = [
+ "ioapi.c",
+ "unzip.c",
+ "zip.c",
+]
+thirdparty_minizip_sources = [thirdparty_minizip_dir + file for file in thirdparty_minizip_sources]
+env.add_source_files(env.core_sources, thirdparty_minizip_sources)
+
+
+# Godot's own sources
env.add_source_files(env.core_sources, "*.cpp")
-Export('env')
-
+# Make binders
import make_binders
env.Command(['method_bind.inc', 'method_bind_ext.inc'], 'make_binders.py', make_binders.run)
+
+# Chain load SCsubs
SConscript('os/SCsub')
SConscript('math/SCsub')
SConscript('io/SCsub')
SConscript('bind/SCsub')
SConscript('helper/SCsub')
-lib = env.Library("core", env.core_sources)
+# Build it all as a library
+lib = env.Library("core", env.core_sources)
env.Prepend(LIBS=[lib])
+
+Export('env')
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp
index bd41e48a30..2752391901 100644
--- a/core/bind/core_bind.cpp
+++ b/core/bind/core_bind.cpp
@@ -28,14 +28,16 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "core_bind.h"
+
#include "core/global_config.h"
#include "geometry.h"
-#include "io/base64.h"
#include "io/file_access_encrypted.h"
#include "io/marshalls.h"
#include "os/keyboard.h"
#include "os/os.h"
+#include "thirdparty/misc/base64.h"
+
/**
* Time constants borrowed from loc_time.h
*/
@@ -503,7 +505,7 @@ int _OS::get_dynamic_memory_usage() const {
return OS::get_singleton()->get_dynamic_memory_usage();
}
-void _OS::set_icon(const Image &p_icon) {
+void _OS::set_icon(const Ref<Image> &p_icon) {
OS::get_singleton()->set_icon(p_icon);
}
diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h
index 222339bce1..e48b5c85ad 100644
--- a/core/bind/core_bind.h
+++ b/core/bind/core_bind.h
@@ -30,6 +30,7 @@
#ifndef CORE_BIND_H
#define CORE_BIND_H
+#include "image.h"
#include "io/resource_loader.h"
#include "io/resource_saver.h"
#include "os/dir_access.h"
@@ -226,7 +227,7 @@ public:
void set_use_file_access_save_and_swap(bool p_enable);
- void set_icon(const Image &p_icon);
+ void set_icon(const Ref<Image> &p_icon);
int get_exit_code() const;
void set_exit_code(int p_code);
diff --git a/core/class_db.cpp b/core/class_db.cpp
index 94a907a1f0..1fe02c8cd9 100644
--- a/core/class_db.cpp
+++ b/core/class_db.cpp
@@ -30,6 +30,7 @@
#include "class_db.h"
#include "os/mutex.h"
+#include "version.h"
#ifdef NO_THREADS
@@ -1195,7 +1196,7 @@ void ClassDB::get_extensions_for_type(const StringName &p_class, List<String> *p
while ((K = resource_base_extensions.next(K))) {
StringName cmp = resource_base_extensions[*K];
- if (is_parent_class(p_class, cmp))
+ if (is_parent_class(p_class, cmp) || is_parent_class(cmp, p_class))
p_extensions->push_back(*K);
}
}
diff --git a/core/compressed_translation.cpp b/core/compressed_translation.cpp
index d41534703c..9bdd960424 100644
--- a/core/compressed_translation.cpp
+++ b/core/compressed_translation.cpp
@@ -30,218 +30,11 @@
#include "compressed_translation.h"
#include "pair.h"
-#include <string.h>
-
-/////////// SMAZ /////////////
-
-/*
-Copyright (c) 2006-2009, Salvatore Sanfilippo
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- * Neither the name of Smaz nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* Our compression codebook, used for compression */
-static const char *Smaz_cb[241] = {
- "\002s,\266", "\003had\232\002leW", "\003on \216", "", "\001yS",
- "\002ma\255\002li\227", "\003or \260", "", "\002ll\230\003s t\277",
- "\004fromg\002mel", "", "\003its\332", "\001z\333", "\003ingF", "\001>\336",
- "\001 \000\003 (\002nc\344", "\002nd=\003 on\312",
- "\002ne\213\003hat\276\003re q", "", "\002ngT\003herz\004have\306\003s o\225",
- "", "\003ionk\003s a\254\002ly\352", "\003hisL\003 inN\003 be\252", "",
- "\003 fo\325\003 of \003 ha\311", "", "\002of\005",
- "\003 co\241\002no\267\003 ma\370", "", "", "\003 cl\356\003enta\003 an7",
- "\002ns\300\001\"e", "\003n t\217\002ntP\003s, \205",
- "\002pe\320\003 we\351\002om\223", "\002on\037", "", "\002y G", "\003 wa\271",
- "\003 re\321\002or*", "", "\002=\"\251\002ot\337", "\003forD\002ou[",
- "\003 toR", "\003 th\r", "\003 it\366",
- "\003but\261\002ra\202\003 wi\363\002</\361", "\003 wh\237", "\002 4",
- "\003nd ?", "\002re!", "", "\003ng c", "",
- "\003ly \307\003ass\323\001a\004\002rir", "", "", "", "\002se_", "\003of \"",
- "\003div\364\002ros\003ere\240", "", "\002ta\310\001bZ\002si\324", "",
- "\003and\a\002rs\335", "\002rt\362", "\002teE", "\003ati\316", "\002so\263",
- "\002th\021", "\002tiJ\001c\034\003allp", "\003ate\345", "\002ss\246",
- "\002stM", "", "\002><\346", "\002to\024", "\003arew", "\001d\030",
- "\002tr\303", "", "\001\n1\003 a \222", "\003f tv\002veo", "\002un\340", "",
- "\003e o\242", "\002a \243\002wa\326\001e\002", "\002ur\226\003e a\274",
- "\002us\244\003\n\r\n\247", "\002ut\304\003e c\373", "\002we\221", "", "",
- "\002wh\302", "\001f,", "", "", "", "\003d t\206", "", "", "\003th \343",
- "\001g;", "", "", "\001\r9\003e s\265", "\003e t\234", "", "\003to Y",
- "\003e\r\n\236", "\002d \036\001h\022", "", "\001,Q", "\002 a\031", "\002 b^",
- "\002\r\n\025\002 cI", "\002 d\245", "\002 e\253", "\002 fh\001i\b\002e \v",
- "", "\002 hU\001-\314", "\002 i8", "", "", "\002 l\315", "\002 m{",
- "\002f :\002 n\354", "\002 o\035", "\002 p}\001.n\003\r\n\r\250", "",
- "\002 r\275", "\002 s>", "\002 t\016", "", "\002g \235\005which+\003whi\367",
- "\002 w5", "\001/\305", "\003as \214", "\003at \207", "", "\003who\331", "",
- "\001l\026\002h \212", "", "\002, $", "", "\004withV", "", "", "", "\001m-", "",
- "", "\002ac\357", "\002ad\350", "\003TheH", "", "", "\004this\233\001n\t",
- "", "\002. y", "", "\002alX\003e, \365", "\003tio\215\002be\\",
- "\002an\032\003ver\347", "", "\004that0\003tha\313\001o\006", "\003was2",
- "\002arO", "\002as.", "\002at'\003the\001\004they\200\005there\322\005theird",
- "\002ce\210", "\004were]", "", "\002ch\231\002l \264\001p<", "", "",
- "\003one\256", "", "\003he \023\002dej", "\003ter\270", "\002cou", "",
- "\002by\177\002di\201\002eax", "", "\002ec\327", "\002edB", "\002ee\353", "",
- "", "\001r\f\002n )", "", "", "", "\002el\262", "", "\003in i\002en3", "",
- "\002o `\001s\n", "", "\002er\033", "\003is t\002es6", "", "\002ge\371",
- "\004.com\375", "\002fo\334\003our\330", "\003ch \301\001t\003", "\002hab", "",
- "\003men\374", "", "\002he\020", "", "", "\001u&", "\002hif", "",
- "\003not\204\002ic\203", "\003ed @\002id\355", "", "", "\002ho\273",
- "\002r K\001vm", "", "", "", "\003t t\257\002il\360", "\002im\342",
- "\003en \317\002in\017", "\002io\220", "\002s \027\001wA", "", "\003er |",
- "\003es ~\002is%", "\002it/", "", "\002iv\272", "",
- "\002t #\ahttp://C\001x\372", "\002la\211", "\001<\341", "\003, a\224"
-};
-
-/* Reverse compression codebook, used for decompression */
-static const char *Smaz_rcb[254] = {
- " ", "the", "e", "t", "a", "of", "o", "and", "i", "n", "s", "e ", "r", " th",
- " t", "in", "he", "th", "h", "he ", "to", "\r\n", "l", "s ", "d", " a", "an",
- "er", "c", " o", "d ", "on", " of", "re", "of ", "t ", ", ", "is", "u", "at",
- " ", "n ", "or", "which", "f", "m", "as", "it", "that", "\n", "was", "en",
- " ", " w", "es", " an", " i", "\r", "f ", "g", "p", "nd", " s", "nd ", "ed ",
- "w", "ed", "http://", "for", "te", "ing", "y ", "The", " c", "ti", "r ", "his",
- "st", " in", "ar", "nt", ",", " to", "y", "ng", " h", "with", "le", "al", "to ",
- "b", "ou", "be", "were", " b", "se", "o ", "ent", "ha", "ng ", "their", "\"",
- "hi", "from", " f", "in ", "de", "ion", "me", "v", ".", "ve", "all", "re ",
- "ri", "ro", "is ", "co", "f t", "are", "ea", ". ", "her", " m", "er ", " p",
- "es ", "by", "they", "di", "ra", "ic", "not", "s, ", "d t", "at ", "ce", "la",
- "h ", "ne", "as ", "tio", "on ", "n t", "io", "we", " a ", "om", ", a", "s o",
- "ur", "li", "ll", "ch", "had", "this", "e t", "g ", "e\r\n", " wh", "ere",
- " co", "e o", "a ", "us", " d", "ss", "\n\r\n", "\r\n\r", "=\"", " be", " e",
- "s a", "ma", "one", "t t", "or ", "but", "el", "so", "l ", "e s", "s,", "no",
- "ter", " wa", "iv", "ho", "e a", " r", "hat", "s t", "ns", "ch ", "wh", "tr",
- "ut", "/", "have", "ly ", "ta", " ha", " on", "tha", "-", " l", "ati", "en ",
- "pe", " re", "there", "ass", "si", " fo", "wa", "ec", "our", "who", "its", "z",
- "fo", "rs", ">", "ot", "un", "<", "im", "th ", "nc", "ate", "><", "ver", "ad",
- " we", "ly", "ee", " n", "id", " cl", "ac", "il", "</", "rt", " wi", "div",
- "e, ", " it", "whi", " ma", "ge", "x", "e c", "men", ".com"
-};
-static int smaz_compress(const char *in, int inlen, char *out, int outlen) {
- unsigned int h1, h2, h3 = 0;
- int verblen = 0, _outlen = outlen;
- char verb[256], *_out = out;
-
- while (inlen) {
- int j = 7, needed;
- char *flush = NULL;
- const char *slot;
-
- h1 = h2 = in[0] << 3;
- if (inlen > 1) h2 += in[1];
- if (inlen > 2) h3 = h2 ^ in[2];
- if (j > inlen) j = inlen;
-
- /* Try to lookup substrings into the hash table, starting from the
-* longer to the shorter substrings */
- for (; j > 0; j--) {
- switch (j) {
- case 1: slot = Smaz_cb[h1 % 241]; break;
- case 2: slot = Smaz_cb[h2 % 241]; break;
- default: slot = Smaz_cb[h3 % 241]; break;
- }
- while (slot[0]) {
- if (slot[0] == j && memcmp(slot + 1, in, j) == 0) {
- /* Match found in the hash table,
-* prepare a verbatim bytes flush if needed */
- if (verblen) {
- needed = (verblen == 1) ? 2 : 2 + verblen;
- flush = out;
- out += needed;
- outlen -= needed;
- }
- /* Emit the byte */
- if (outlen <= 0) return _outlen + 1;
- out[0] = slot[slot[0] + 1];
- out++;
- outlen--;
- inlen -= j;
- in += j;
- goto out;
- } else {
- slot += slot[0] + 2;
- }
- }
- }
- /* Match not found - add the byte to the verbatim buffer */
- verb[verblen] = in[0];
- verblen++;
- inlen--;
- in++;
- out:
- /* Prepare a flush if we reached the flush length limit, and there
-* is not already a pending flush operation. */
- if (!flush && (verblen == 256 || (verblen > 0 && inlen == 0))) {
- needed = (verblen == 1) ? 2 : 2 + verblen;
- flush = out;
- out += needed;
- outlen -= needed;
- if (outlen < 0) return _outlen + 1;
- }
- /* Perform a verbatim flush if needed */
- if (flush) {
- if (verblen == 1) {
- flush[0] = (signed char)254;
- flush[1] = verb[0];
- } else {
- flush[0] = (signed char)255;
- flush[1] = (signed char)(verblen - 1);
- memcpy(flush + 2, verb, verblen);
- }
- flush = NULL;
- verblen = 0;
- }
- }
- return out - _out;
-}
-
-static int smaz_decompress(const char *in, int inlen, char *out, int outlen) {
- unsigned char *c = (unsigned char *)in;
- char *_out = out;
- int _outlen = outlen;
-
- while (inlen) {
- if (*c == 254) {
- /* Verbatim byte */
- if (outlen < 1) return _outlen + 1;
- *out = *(c + 1);
- out++;
- outlen--;
- c += 2;
- inlen -= 2;
- } else if (*c == 255) {
- /* Verbatim string */
- int len = (*(c + 1)) + 1;
- if (outlen < len) return _outlen + 1;
- memcpy(out, c + 2, len);
- out += len;
- outlen -= len;
- c += 2 + len;
- inlen -= 2 + len;
- } else {
- /* Codebook entry */
- const char *s = Smaz_rcb[*c];
- int len = strlen(s);
-
- if (outlen < len) return _outlen + 1;
- memcpy(out, s, len);
- out += len;
- outlen -= len;
- c++;
- inlen--;
- }
- }
- return out - _out;
+extern "C" {
+#include "thirdparty/misc/smaz.h"
}
-/////////// END OF SMAZ /////////////
-
struct _PHashTranslationCmp {
int orig_len;
diff --git a/core/global_config.cpp b/core/global_config.cpp
index d37c67c84a..81b923f01e 100644
--- a/core/global_config.cpp
+++ b/core/global_config.cpp
@@ -242,7 +242,7 @@ Error GlobalConfig::setup(const String &p_path, const String &p_main_pack) {
if (FileAccessNetworkClient::get_singleton()) {
- if (_load_settings("res://godot.cfg") == OK || _load_settings_binary("res://godot.cfb") == OK) {
+ if (_load_settings("res://project.godot") == OK || _load_settings_binary("res://godot.cfb") == OK) {
_load_settings("res://override.cfg");
}
@@ -259,7 +259,7 @@ Error GlobalConfig::setup(const String &p_path, const String &p_main_pack) {
bool ok = _load_resource_pack(p_main_pack);
ERR_FAIL_COND_V(!ok, ERR_CANT_OPEN);
- if (_load_settings("res://godot.cfg") == OK || _load_settings_binary("res://godot.cfb") == OK) {
+ if (_load_settings("res://project.godot") == OK || _load_settings_binary("res://godot.cfb") == OK) {
//load override from location of the main pack
_load_settings(p_main_pack.get_base_dir().plus_file("override.cfg"));
}
@@ -272,7 +272,7 @@ Error GlobalConfig::setup(const String &p_path, const String &p_main_pack) {
if (_load_resource_pack(exec_path.get_basename() + ".pck")) {
- if (_load_settings("res://godot.cfg") == OK || _load_settings_binary("res://godot.cfb") == OK) {
+ if (_load_settings("res://project.godot") == OK || _load_settings_binary("res://godot.cfb") == OK) {
//load override from location of executable
_load_settings(exec_path.get_base_dir().plus_file("override.cfg"));
}
@@ -293,14 +293,14 @@ Error GlobalConfig::setup(const String &p_path, const String &p_main_pack) {
// data.pck and data.zip are deprecated and no longer supported, apologies.
// make sure this is loaded from the resource path
- if (_load_settings("res://godot.cfg") == OK || _load_settings_binary("res://godot.cfb") == OK) {
+ if (_load_settings("res://project.godot") == OK || _load_settings_binary("res://godot.cfb") == OK) {
_load_settings("res://override.cfg");
}
return OK;
}
- //Nothing was found, try to find a godot.cfg somewhere!
+ //Nothing was found, try to find a project.godot somewhere!
DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
ERR_FAIL_COND_V(!d, ERR_CANT_CREATE);
@@ -314,7 +314,7 @@ Error GlobalConfig::setup(const String &p_path, const String &p_main_pack) {
while (true) {
//try to load settings in ascending through dirs shape!
- if (_load_settings(current_dir + "/godot.cfg") == OK || _load_settings_binary(current_dir + "/godot.cfb") == OK) {
+ if (_load_settings(current_dir + "/project.godot") == OK || _load_settings_binary(current_dir + "/godot.cfb") == OK) {
_load_settings(current_dir + "/override.cfg");
candidate = current_dir;
@@ -474,7 +474,7 @@ void GlobalConfig::clear(const String &p_name) {
Error GlobalConfig::save() {
- return save_custom(get_resource_path() + "/godot.cfg");
+ return save_custom(get_resource_path() + "/project.godot");
}
Error GlobalConfig::_save_settings_binary(const String &p_file, const Map<String, List<String> > &props, const CustomMap &p_custom) {
@@ -483,7 +483,7 @@ Error GlobalConfig::_save_settings_binary(const String &p_file, const Map<String
FileAccess *file = FileAccess::open(p_file, FileAccess::WRITE, &err);
if (err != OK) {
- ERR_EXPLAIN("Coudln't save godot.cfb at " + p_file);
+ ERR_EXPLAIN("Couldn't save godot.cfb at " + p_file);
ERR_FAIL_COND_V(err, err)
}
@@ -548,7 +548,7 @@ Error GlobalConfig::_save_settings_text(const String &p_file, const Map<String,
FileAccess *file = FileAccess::open(p_file, FileAccess::WRITE, &err);
if (err) {
- ERR_EXPLAIN("Coudln't save godot.cfg - " + p_file);
+ ERR_EXPLAIN("Couldn't save project.godot - " + p_file);
ERR_FAIL_COND_V(err, err)
}
@@ -658,7 +658,7 @@ Error GlobalConfig::save_custom(const String &p_path, const CustomMap &p_custom,
props[category].push_back(name);
}
- if (p_path.ends_with(".cfg"))
+ if (p_path.ends_with(".godot"))
return _save_settings_text(p_path, props, p_custom);
else if (p_path.ends_with(".cfb"))
return _save_settings_binary(p_path, props, p_custom);
@@ -674,7 +674,7 @@ Error GlobalConfig::save_custom(const String &p_path, const CustomMap &p_custom,
Error err = file->open(dst_file,FileAccess::WRITE);
if (err) {
memdelete(file);
- ERR_EXPLAIN("Coudln't save godot.cfg");
+ ERR_EXPLAIN("Couldn't save project.godot");
ERR_FAIL_COND_V(err,err)
}
diff --git a/core/global_constants.cpp b/core/global_constants.cpp
index 9bc98c5ad7..18f34b5d37 100644
--- a/core/global_constants.cpp
+++ b/core/global_constants.cpp
@@ -506,22 +506,21 @@ static _GlobalConstant _global_constants[] = {
{ "TYPE_TRANSFORM2D", Variant::TRANSFORM2D },
{ "TYPE_PLANE", Variant::PLANE },
{ "TYPE_QUAT", Variant::QUAT }, // 10
- { "TYPE_RECT3", Variant::RECT3 }, //sorry naming convention fail :( not like it's used often
+ { "TYPE_RECT3", Variant::RECT3 },
{ "TYPE_BASIS", Variant::BASIS },
{ "TYPE_TRANSFORM", Variant::TRANSFORM },
{ "TYPE_COLOR", Variant::COLOR },
- { "TYPE_IMAGE", Variant::IMAGE }, // 15
- { "TYPE_NODE_PATH", Variant::NODE_PATH },
+ { "TYPE_NODE_PATH", Variant::NODE_PATH }, // 15
{ "TYPE_RID", Variant::_RID },
{ "TYPE_OBJECT", Variant::OBJECT },
{ "TYPE_INPUT_EVENT", Variant::INPUT_EVENT },
- { "TYPE_DICTIONARY", Variant::DICTIONARY }, // 20
- { "TYPE_ARRAY", Variant::ARRAY },
+ { "TYPE_DICTIONARY", Variant::DICTIONARY },
+ { "TYPE_ARRAY", Variant::ARRAY }, // 20
{ "TYPE_RAW_ARRAY", Variant::POOL_BYTE_ARRAY },
{ "TYPE_INT_ARRAY", Variant::POOL_INT_ARRAY },
{ "TYPE_REAL_ARRAY", Variant::POOL_REAL_ARRAY },
- { "TYPE_STRING_ARRAY", Variant::POOL_STRING_ARRAY }, // 25
- { "TYPE_VECTOR2_ARRAY", Variant::POOL_VECTOR2_ARRAY },
+ { "TYPE_STRING_ARRAY", Variant::POOL_STRING_ARRAY },
+ { "TYPE_VECTOR2_ARRAY", Variant::POOL_VECTOR2_ARRAY }, // 25
{ "TYPE_VECTOR3_ARRAY", Variant::POOL_VECTOR3_ARRAY },
{ "TYPE_COLOR_ARRAY", Variant::POOL_COLOR_ARRAY },
{ "TYPE_MAX", Variant::VARIANT_MAX },
diff --git a/core/image.cpp b/core/image.cpp
index 5fb7cfa812..85ca63be5e 100644
--- a/core/image.cpp
+++ b/core/image.cpp
@@ -32,9 +32,10 @@
#include "core/io/image_loader.h"
#include "core/os/copymem.h"
#include "hash_map.h"
-#include "hq2x.h"
#include "print_string.h"
+#include "thirdparty/misc/hq2x.h"
+
#include <stdio.h>
const char *Image::format_names[Image::FORMAT_MAX] = {
@@ -94,7 +95,7 @@ void Image::_get_pixelb(int p_x, int p_y, uint32_t p_pixelsize, const uint8_t *p
uint32_t ofs = (p_y * width + p_x) * p_pixelsize;
for (uint32_t i = 0; i < p_pixelsize; i++) {
- p_dst[ofs] = p_src[ofs + i];
+ p_dst[i] = p_src[ofs + i];
}
}
@@ -414,7 +415,7 @@ void Image::convert(Format p_new_format) {
//mipmaps=false;
- *this = new_img;
+ _copy_internals_from(new_img);
if (gen_mipmaps)
generate_mipmaps();
@@ -610,14 +611,6 @@ void Image::resize_to_po2(bool p_square) {
resize(w, h);
}
-Image Image::resized(int p_width, int p_height, int p_interpolation) {
-
- Image ret = *this;
- ret.resize(p_width, p_height, (Interpolation)p_interpolation);
-
- return ret;
-};
-
void Image::resize(int p_width, int p_height, Interpolation p_interpolation) {
if (!_can_modify(format)) {
@@ -680,7 +673,7 @@ void Image::resize(int p_width, int p_height, Interpolation p_interpolation) {
if (mipmaps > 0)
dst.generate_mipmaps();
- *this = dst;
+ _copy_internals_from(dst);
}
void Image::crop(int p_width, int p_height) {
@@ -727,7 +720,7 @@ void Image::crop(int p_width, int p_height) {
if (mipmaps > 0)
dst.generate_mipmaps();
- *this = dst;
+ _copy_internals_from(dst);
}
void Image::flip_y() {
@@ -1382,17 +1375,7 @@ Error Image::save_png(const String &p_path) {
if (save_png_func == NULL)
return ERR_UNAVAILABLE;
- return save_png_func(p_path, *this);
-}
-
-bool Image::operator==(const Image &p_image) const {
-
- if (data.size() == 0 && p_image.data.size() == 0)
- return true;
- PoolVector<uint8_t>::Read r = data.read();
- PoolVector<uint8_t>::Read pr = p_image.data.read();
-
- return r.ptr() == pr.ptr();
+ return save_png_func(p_path, Ref<Image>(this));
}
int Image::get_image_data_size(int p_width, int p_height, Format p_format, int p_mipmaps) {
@@ -1735,13 +1718,6 @@ bool Image::is_compressed() const {
return format >= FORMAT_RGB565;
}
-Image Image::decompressed() const {
-
- Image img = *this;
- img.decompress();
- return img;
-}
-
Error Image::decompress() {
if (format >= FORMAT_DXT1 && format <= FORMAT_ATI2)
@@ -1796,14 +1772,6 @@ Error Image::compress(CompressMode p_mode) {
return OK;
}
-Image Image::compressed(int p_mode) {
-
- Image ret = *this;
- ret.compress((Image::CompressMode)p_mode);
-
- return ret;
-}
-
Image::Image(const char **p_xpm) {
width = 0;
@@ -1874,21 +1842,21 @@ Rect2 Image::get_used_rect() const {
return Rect2(minx, miny, maxx - minx + 1, maxy - miny + 1);
}
-Image Image::get_rect(const Rect2 &p_area) const {
-
- Image img(p_area.size.x, p_area.size.y, mipmaps, format);
- img.blit_rect(*this, p_area, Point2(0, 0));
+Ref<Image> Image::get_rect(const Rect2 &p_area) const {
+ Ref<Image> img = memnew(Image(p_area.size.x, p_area.size.y, mipmaps, format));
+ img->blit_rect(Ref<Image>(this), p_area, Point2(0, 0));
return img;
}
-void Image::blit_rect(const Image &p_src, const Rect2 &p_src_rect, const Point2 &p_dest) {
+void Image::blit_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Point2 &p_dest) {
+ ERR_FAIL_COND(p_src.is_null());
int dsize = data.size();
- int srcdsize = p_src.data.size();
+ int srcdsize = p_src->data.size();
ERR_FAIL_COND(dsize == 0);
ERR_FAIL_COND(srcdsize == 0);
- ERR_FAIL_COND(format != p_src.format);
+ ERR_FAIL_COND(format != p_src->format);
Rect2i local_src_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest + p_src_rect.pos, p_src_rect.size));
@@ -1899,7 +1867,7 @@ void Image::blit_rect(const Image &p_src, const Rect2 &p_src_rect, const Point2
PoolVector<uint8_t>::Write wp = data.write();
uint8_t *dst_data_ptr = wp.ptr();
- PoolVector<uint8_t>::Read rp = p_src.data.read();
+ PoolVector<uint8_t>::Read rp = p_src->data.read();
const uint8_t *src_data_ptr = rp.ptr();
int pixel_size = get_format_pixel_size(format);
@@ -1914,7 +1882,7 @@ void Image::blit_rect(const Image &p_src, const Rect2 &p_src_rect, const Point2
int dst_x = local_src_rect.pos.x + j;
int dst_y = local_src_rect.pos.y + i;
- const uint8_t *src = &src_data_ptr[(src_y * p_src.width + src_x) * pixel_size];
+ const uint8_t *src = &src_data_ptr[(src_y * p_src->width + src_x) * pixel_size];
uint8_t *dst = &dst_data_ptr[(dst_y * width + dst_x) * pixel_size];
for (int k = 0; k < pixel_size; k++) {
@@ -1924,8 +1892,8 @@ void Image::blit_rect(const Image &p_src, const Rect2 &p_src_rect, const Point2
}
}
-Image (*Image::_png_mem_loader_func)(const uint8_t *, int) = NULL;
-Image (*Image::_jpg_mem_loader_func)(const uint8_t *, int) = NULL;
+Ref<Image> (*Image::_png_mem_loader_func)(const uint8_t *, int) = NULL;
+Ref<Image> (*Image::_jpg_mem_loader_func)(const uint8_t *, int) = NULL;
void (*Image::_image_compress_bc_func)(Image *) = NULL;
void (*Image::_image_compress_pvrtc2_func)(Image *) = NULL;
@@ -1937,10 +1905,157 @@ void (*Image::_image_decompress_bc)(Image *) = NULL;
void (*Image::_image_decompress_etc)(Image *) = NULL;
void (*Image::_image_decompress_etc2)(Image *) = NULL;
-PoolVector<uint8_t> (*Image::lossy_packer)(const Image &, float) = NULL;
-Image (*Image::lossy_unpacker)(const PoolVector<uint8_t> &) = NULL;
-PoolVector<uint8_t> (*Image::lossless_packer)(const Image &) = NULL;
-Image (*Image::lossless_unpacker)(const PoolVector<uint8_t> &) = NULL;
+PoolVector<uint8_t> (*Image::lossy_packer)(const Ref<Image> &, float) = NULL;
+Ref<Image> (*Image::lossy_unpacker)(const PoolVector<uint8_t> &) = NULL;
+PoolVector<uint8_t> (*Image::lossless_packer)(const Ref<Image> &) = NULL;
+Ref<Image> (*Image::lossless_unpacker)(const PoolVector<uint8_t> &) = NULL;
+
+void Image::_set_data(const Dictionary &p_data) {
+
+ ERR_FAIL_COND(!p_data.has("width"));
+ ERR_FAIL_COND(!p_data.has("height"));
+ ERR_FAIL_COND(!p_data.has("format"));
+ ERR_FAIL_COND(!p_data.has("mipmaps"));
+ ERR_FAIL_COND(!p_data.has("data"));
+
+ int dwidth = p_data["width"];
+ int dheight = p_data["height"];
+ String dformat = p_data["format"];
+ bool dmipmaps = p_data["mipmaps"];
+ PoolVector<uint8_t> ddata = p_data["data"];
+ Format ddformat = FORMAT_MAX;
+ for (int i = 0; i < FORMAT_MAX; i++) {
+ if (dformat == get_format_name(Format(i))) {
+ ddformat = Format(i);
+ break;
+ }
+ }
+
+ ERR_FAIL_COND(ddformat == FORMAT_MAX);
+
+ create(dwidth, dheight, dmipmaps, ddformat, ddata);
+}
+
+Dictionary Image::_get_data() const {
+
+ Dictionary d;
+ d["width"] = width;
+ d["height"] = height;
+ d["format"] = get_format_name(format);
+ d["mipmaps"] = mipmaps;
+ d["data"] = data;
+ return d;
+}
+
+void Image::_bind_methods() {
+
+ ClassDB::bind_method(D_METHOD("get_width"), &Image::get_width);
+ ClassDB::bind_method(D_METHOD("get_height"), &Image::get_height);
+ ClassDB::bind_method(D_METHOD("has_mipmaps"), &Image::has_mipmaps);
+ ClassDB::bind_method(D_METHOD("get_format"), &Image::get_format);
+ ClassDB::bind_method(D_METHOD("get_data"), &Image::get_data);
+
+ ClassDB::bind_method(D_METHOD("convert", "format"), &Image::convert);
+
+ ClassDB::bind_method(D_METHOD("get_mipmap_offset", "mipmap"), &Image::get_mipmap_offset);
+
+ ClassDB::bind_method(D_METHOD("resize_to_po2", "square"), &Image::resize_to_po2, DEFVAL("false"));
+ ClassDB::bind_method(D_METHOD("resize", "width", "height", "interpolation"), &Image::resize, DEFVAL(INTERPOLATE_BILINEAR));
+ ClassDB::bind_method(D_METHOD("shrink_x2"), &Image::shrink_x2);
+ ClassDB::bind_method(D_METHOD("expand_x2_hq2x"), &Image::expand_x2_hq2x);
+
+ ClassDB::bind_method(D_METHOD("crop", "width", "height"), &Image::crop);
+ ClassDB::bind_method(D_METHOD("flip_x"), &Image::flip_x);
+ ClassDB::bind_method(D_METHOD("flip_y"), &Image::flip_y);
+ ClassDB::bind_method(D_METHOD("generate_mipmaps"), &Image::generate_mipmaps);
+ ClassDB::bind_method(D_METHOD("clear_mipmaps"), &Image::clear_mipmaps);
+
+ ClassDB::bind_method(D_METHOD("create", "width", "height", "use_mipmaps", "format"), &Image::_create_empty);
+ ClassDB::bind_method(D_METHOD("create_from_data", "width", "height", "use_mipmaps", "format", "data"), &Image::_create_from_data);
+
+ ClassDB::bind_method(D_METHOD("is_empty"), &Image::empty);
+
+ ClassDB::bind_method(D_METHOD("load", "path"), &Image::load);
+ ClassDB::bind_method(D_METHOD("save_png", "path"), &Image::save_png);
+
+ ClassDB::bind_method(D_METHOD("detect_alpha"), &Image::detect_alpha);
+ ClassDB::bind_method(D_METHOD("is_invisible"), &Image::is_invisible);
+
+ ClassDB::bind_method(D_METHOD("compress", "mode"), &Image::compress);
+ ClassDB::bind_method(D_METHOD("decompress"), &Image::decompress);
+ ClassDB::bind_method(D_METHOD("is_compressed"), &Image::is_compressed);
+
+ ClassDB::bind_method(D_METHOD("fix_alpha_edges"), &Image::fix_alpha_edges);
+ ClassDB::bind_method(D_METHOD("premultiply_alpha"), &Image::premultiply_alpha);
+ ClassDB::bind_method(D_METHOD("srgb_to_linear"), &Image::srgb_to_linear);
+ ClassDB::bind_method(D_METHOD("normalmap_to_xy"), &Image::normalmap_to_xy);
+
+ ClassDB::bind_method(D_METHOD("blit_rect", "src:Image", "src_rect", "dst"), &Image::blit_rect);
+
+ ClassDB::bind_method(D_METHOD("get_used_rect"), &Image::get_used_rect);
+ ClassDB::bind_method(D_METHOD("get_rect:Image", "rect"), &Image::get_rect);
+
+ ClassDB::bind_method(D_METHOD("copy_from", "src:Image"), &Image::copy_internals_from);
+
+ ClassDB::bind_method(D_METHOD("_set_data", "data"), &Image::_set_data);
+ ClassDB::bind_method(D_METHOD("_get_data"), &Image::_get_data);
+
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "_set_data", "_get_data");
+
+ BIND_CONSTANT(FORMAT_L8); //luminance
+ BIND_CONSTANT(FORMAT_LA8); //luminance-alpha
+ BIND_CONSTANT(FORMAT_R8);
+ BIND_CONSTANT(FORMAT_RG8);
+ BIND_CONSTANT(FORMAT_RGB8);
+ BIND_CONSTANT(FORMAT_RGBA8);
+ BIND_CONSTANT(FORMAT_RGB565); //16 bit
+ BIND_CONSTANT(FORMAT_RGBA4444);
+ BIND_CONSTANT(FORMAT_RGBA5551);
+ BIND_CONSTANT(FORMAT_RF); //float
+ BIND_CONSTANT(FORMAT_RGF);
+ BIND_CONSTANT(FORMAT_RGBF);
+ BIND_CONSTANT(FORMAT_RGBAF);
+ BIND_CONSTANT(FORMAT_RH); //half float
+ BIND_CONSTANT(FORMAT_RGH);
+ BIND_CONSTANT(FORMAT_RGBH);
+ BIND_CONSTANT(FORMAT_RGBAH);
+ BIND_CONSTANT(FORMAT_DXT1); //s3tc bc1
+ BIND_CONSTANT(FORMAT_DXT3); //bc2
+ BIND_CONSTANT(FORMAT_DXT5); //bc3
+ BIND_CONSTANT(FORMAT_ATI1); //bc4
+ BIND_CONSTANT(FORMAT_ATI2); //bc5
+ BIND_CONSTANT(FORMAT_BPTC_RGBA); //btpc bc6h
+ BIND_CONSTANT(FORMAT_BPTC_RGBF); //float /
+ BIND_CONSTANT(FORMAT_BPTC_RGBFU); //unsigned float
+ BIND_CONSTANT(FORMAT_PVRTC2); //pvrtc
+ BIND_CONSTANT(FORMAT_PVRTC2A);
+ BIND_CONSTANT(FORMAT_PVRTC4);
+ BIND_CONSTANT(FORMAT_PVRTC4A);
+ BIND_CONSTANT(FORMAT_ETC); //etc1
+ BIND_CONSTANT(FORMAT_ETC2_R11); //etc2
+ BIND_CONSTANT(FORMAT_ETC2_R11S); //signed ); NOT srgb.
+ BIND_CONSTANT(FORMAT_ETC2_RG11);
+ BIND_CONSTANT(FORMAT_ETC2_RG11S);
+ BIND_CONSTANT(FORMAT_ETC2_RGB8);
+ BIND_CONSTANT(FORMAT_ETC2_RGBA8);
+ BIND_CONSTANT(FORMAT_ETC2_RGB8A1);
+ BIND_CONSTANT(FORMAT_MAX);
+
+ BIND_CONSTANT(INTERPOLATE_NEAREST);
+ BIND_CONSTANT(INTERPOLATE_BILINEAR);
+ BIND_CONSTANT(INTERPOLATE_CUBIC);
+
+ BIND_CONSTANT(ALPHA_NONE);
+ BIND_CONSTANT(ALPHA_BIT);
+ BIND_CONSTANT(ALPHA_BLEND);
+
+ BIND_CONSTANT(COMPRESS_16BIT);
+ BIND_CONSTANT(COMPRESS_S3TC);
+ BIND_CONSTANT(COMPRESS_PVRTC2);
+ BIND_CONSTANT(COMPRESS_PVRTC4);
+ BIND_CONSTANT(COMPRESS_ETC);
+ BIND_CONSTANT(COMPRESS_ETC2);
+}
void Image::set_compress_bc_func(void (*p_compress_func)(Image *)) {
@@ -2107,14 +2222,22 @@ Image::Image(const uint8_t *p_mem_png_jpg, int p_len) {
format = FORMAT_L8;
if (_png_mem_loader_func) {
- *this = _png_mem_loader_func(p_mem_png_jpg, p_len);
+ copy_internals_from(_png_mem_loader_func(p_mem_png_jpg, p_len));
}
if (empty() && _jpg_mem_loader_func) {
- *this = _jpg_mem_loader_func(p_mem_png_jpg, p_len);
+ copy_internals_from(_jpg_mem_loader_func(p_mem_png_jpg, p_len));
}
}
+Ref<Resource> Image::duplicate(bool p_subresources) const {
+
+ Ref<Image> copy;
+ copy.instance();
+ copy->_copy_internals_from(*this);
+ return copy;
+}
+
Image::Image() {
width = 0;
diff --git a/core/image.h b/core/image.h
index fc87ee8847..4decaa3436 100644
--- a/core/image.h
+++ b/core/image.h
@@ -33,6 +33,8 @@
#include "color.h"
#include "dvector.h"
#include "math_2d.h"
+#include "resource.h"
+
/**
* @author Juan Linietsky <reduzio@gmail.com>
*
@@ -43,9 +45,10 @@
class Image;
-typedef Error (*SavePNGFunc)(const String &p_path, Image &p_img);
+typedef Error (*SavePNGFunc)(const String &p_path, const Ref<Image> &p_img);
-class Image {
+class Image : public Resource {
+ GDCLASS(Image, Resource);
enum {
MAX_WIDTH = 16384, // force a limit somehow
@@ -108,8 +111,8 @@ public:
//some functions provided by something else
- static Image (*_png_mem_loader_func)(const uint8_t *p_png, int p_size);
- static Image (*_jpg_mem_loader_func)(const uint8_t *p_png, int p_size);
+ static Ref<Image> (*_png_mem_loader_func)(const uint8_t *p_png, int p_size);
+ static Ref<Image> (*_jpg_mem_loader_func)(const uint8_t *p_png, int p_size);
static void (*_image_compress_bc_func)(Image *);
static void (*_image_compress_pvrtc2_func)(Image *);
@@ -124,17 +127,36 @@ public:
Error _decompress_bc();
- static PoolVector<uint8_t> (*lossy_packer)(const Image &p_image, float p_quality);
- static Image (*lossy_unpacker)(const PoolVector<uint8_t> &p_buffer);
- static PoolVector<uint8_t> (*lossless_packer)(const Image &p_image);
- static Image (*lossless_unpacker)(const PoolVector<uint8_t> &p_buffer);
+ static PoolVector<uint8_t> (*lossy_packer)(const Ref<Image> &p_image, float p_quality);
+ static Ref<Image> (*lossy_unpacker)(const PoolVector<uint8_t> &p_buffer);
+ static PoolVector<uint8_t> (*lossless_packer)(const Ref<Image> &p_image);
+ static Ref<Image> (*lossless_unpacker)(const PoolVector<uint8_t> &p_buffer);
+
+protected:
+ static void _bind_methods();
private:
+ void _create_empty(int p_width, int p_height, bool p_use_mipmaps, Format p_format) {
+ create(p_width, p_height, p_use_mipmaps, p_format);
+ }
+
+ void _create_from_data(int p_width, int p_height, bool p_use_mipmaps, Format p_format, const PoolVector<uint8_t> &p_data) {
+ create(p_width, p_height, p_use_mipmaps, p_format, p_data);
+ }
+
Format format;
PoolVector<uint8_t> data;
int width, height;
bool mipmaps;
+ void _copy_internals_from(const Image &p_image) {
+ format = p_image.format;
+ width = p_image.width;
+ height = p_image.height;
+ mipmaps = p_image.mipmaps;
+ data = p_image.data;
+ }
+
_FORCE_INLINE_ void _get_mipmap_offset_and_size(int p_mipmap, int &r_offset, int &r_width, int &r_height) const; //get where the mipmap begins in data
static int _get_dst_image_size(int p_width, int p_height, Format p_format, int &r_mipmaps, int p_mipmaps = -1);
@@ -143,6 +165,9 @@ private:
_FORCE_INLINE_ void _put_pixelb(int p_x, int p_y, uint32_t p_pixelsize, uint8_t *p_dst, const uint8_t *p_src);
_FORCE_INLINE_ void _get_pixelb(int p_x, int p_y, uint32_t p_pixelsize, const uint8_t *p_src, uint8_t *p_dst);
+ void _set_data(const Dictionary &p_data);
+ Dictionary _get_data() const;
+
public:
int get_width() const; ///< Get image width
int get_height() const; ///< Get image height
@@ -154,14 +179,6 @@ public:
*/
void convert(Format p_new_format);
- Image converted(int p_new_format) {
- ERR_FAIL_INDEX_V(p_new_format, FORMAT_MAX, Image());
-
- Image ret = *this;
- ret.convert((Format)p_new_format);
- return ret;
- };
-
/**
* Get the current image format.
*/
@@ -178,7 +195,6 @@ public:
void resize_to_po2(bool p_square = false);
void resize(int p_width, int p_height, Interpolation p_interpolation = INTERPOLATE_BILINEAR);
- Image resized(int p_width, int p_height, int p_interpolation = INTERPOLATE_BILINEAR);
void shrink_x2();
void expand_x2_hq2x();
/**
@@ -242,8 +258,6 @@ public:
static int get_image_data_size(int p_width, int p_height, Format p_format, int p_mipmaps = 0);
static int get_image_required_mipmaps(int p_width, int p_height, Format p_format);
- bool operator==(const Image &p_image) const;
-
enum CompressMode {
COMPRESS_16BIT,
COMPRESS_S3TC,
@@ -254,9 +268,7 @@ public:
};
Error compress(CompressMode p_mode = COMPRESS_S3TC);
- Image compressed(int p_mode); /* from the Image::CompressMode enum */
Error decompress();
- Image decompressed() const;
bool is_compressed() const;
void fix_alpha_edges();
@@ -264,17 +276,34 @@ public:
void srgb_to_linear();
void normalmap_to_xy();
- void blit_rect(const Image &p_src, const Rect2 &p_src_rect, const Point2 &p_dest);
+ void blit_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Point2 &p_dest);
Rect2 get_used_rect() const;
- Image get_rect(const Rect2 &p_area) const;
+ Ref<Image> get_rect(const Rect2 &p_area) const;
static void set_compress_bc_func(void (*p_compress_func)(Image *));
static String get_format_name(Format p_format);
Image(const uint8_t *p_mem_png_jpg, int p_len = -1);
Image(const char **p_xpm);
+
+ virtual Ref<Resource> duplicate(bool p_subresources = false) const;
+
+ void copy_internals_from(const Ref<Image> &p_image) {
+ ERR_FAIL_COND(p_image.is_null());
+ format = p_image->format;
+ width = p_image->width;
+ height = p_image->height;
+ mipmaps = p_image->mipmaps;
+ data = p_image->data;
+ }
+
~Image();
};
+VARIANT_ENUM_CAST(Image::Format)
+VARIANT_ENUM_CAST(Image::Interpolation)
+VARIANT_ENUM_CAST(Image::CompressMode)
+VARIANT_ENUM_CAST(Image::AlphaMode)
+
#endif
diff --git a/core/io/SCsub b/core/io/SCsub
index 6789aa8bc6..4efc902717 100644
--- a/core/io/SCsub
+++ b/core/io/SCsub
@@ -3,7 +3,5 @@
Import('env')
env.add_source_files(env.core_sources, "*.cpp")
-env.add_source_files(env.core_sources, "*.c")
-# env.core_sources.append("io/fastlz.c")
Export('env')
diff --git a/core/io/compression.cpp b/core/io/compression.cpp
index c26bd7cdcd..662411a62e 100644
--- a/core/io/compression.cpp
+++ b/core/io/compression.cpp
@@ -28,12 +28,14 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "compression.h"
-#include "os/copymem.h"
-#include "zlib.h"
-#include "fastlz.h"
+#include "os/copymem.h"
#include "zip_io.h"
+#include "thirdparty/misc/fastlz.h"
+
+#include <zlib.h>
+
int Compression::compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size, Mode p_mode) {
switch (p_mode) {
diff --git a/core/io/file_access_encrypted.cpp b/core/io/file_access_encrypted.cpp
index 2625e5fe34..f2b33a01bb 100644
--- a/core/io/file_access_encrypted.cpp
+++ b/core/io/file_access_encrypted.cpp
@@ -28,15 +28,18 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "file_access_encrypted.h"
-#include "aes256.h"
-#include "md5.h"
+
+#include "core/variant.h"
#include "os/copymem.h"
#include "print_string.h"
-#define COMP_MAGIC 0x43454447
-#include "core/variant.h"
+#include "thirdparty/misc/aes256.h"
+#include "thirdparty/misc/md5.h"
+
#include <stdio.h>
+#define COMP_MAGIC 0x43454447
+
Error FileAccessEncrypted::open_and_parse(FileAccess *p_base, const Vector<uint8_t> &p_key, Mode p_mode) {
//print_line("open and parse!");
diff --git a/core/io/file_access_pack.cpp b/core/io/file_access_pack.cpp
index bb942b54d7..79aa39521f 100644
--- a/core/io/file_access_pack.cpp
+++ b/core/io/file_access_pack.cpp
@@ -440,13 +440,12 @@ Error DirAccessPack::change_dir(String p_dir) {
String DirAccessPack::get_current_dir() {
- String p;
PackedData::PackedDir *pd = current;
- while (pd->parent) {
+ String p = current->name;
- if (pd != current)
- p = "/" + p;
- p = p + pd->name;
+ while (pd->parent) {
+ pd = pd->parent;
+ p = pd->name + "/" + p;
}
return "res://" + p;
diff --git a/core/io/file_access_zip.h b/core/io/file_access_zip.h
index 8c3cd3ae67..c9cc2dac79 100644
--- a/core/io/file_access_zip.h
+++ b/core/io/file_access_zip.h
@@ -34,7 +34,9 @@
#include "core/io/file_access_pack.h"
#include "map.h"
-#include "unzip.h"
+
+#include "thirdparty/minizip/unzip.h"
+
#include <stdlib.h>
class ZipArchive : public PackSource {
diff --git a/core/io/image_loader.cpp b/core/io/image_loader.cpp
index 4864c18831..6ed20ac015 100644
--- a/core/io/image_loader.cpp
+++ b/core/io/image_loader.cpp
@@ -43,7 +43,8 @@ bool ImageFormatLoader::recognize(const String &p_extension) const {
return false;
}
-Error ImageLoader::load_image(String p_file, Image *p_image, FileAccess *p_custom) {
+Error ImageLoader::load_image(String p_file, Ref<Image> p_image, FileAccess *p_custom) {
+ ERR_FAIL_COND_V(p_image.is_null(), ERR_INVALID_PARAMETER);
FileAccess *f = p_custom;
if (!f) {
diff --git a/core/io/image_loader.h b/core/io/image_loader.h
index 37149dbe9d..7114cbf8ad 100644
--- a/core/io/image_loader.h
+++ b/core/io/image_loader.h
@@ -56,7 +56,7 @@ class ImageFormatLoader {
friend class ImageLoader;
protected:
- virtual Error load_image(Image *p_image, FileAccess *p_fileaccess) = 0;
+ virtual Error load_image(Ref<Image> p_image, FileAccess *p_fileaccess) = 0;
virtual void get_recognized_extensions(List<String> *p_extensions) const = 0;
bool recognize(const String &p_extension) const;
@@ -75,7 +75,7 @@ class ImageLoader {
protected:
public:
- static Error load_image(String p_file, Image *p_image, FileAccess *p_custom = NULL);
+ static Error load_image(String p_file, Ref<Image> p_image, FileAccess *p_custom = NULL);
static void get_recognized_extensions(List<String> *p_extensions);
static bool recognize(const String &p_extension);
diff --git a/core/io/ip.cpp b/core/io/ip.cpp
index bf139eeacb..6c463b983c 100644
--- a/core/io/ip.cpp
+++ b/core/io/ip.cpp
@@ -68,6 +68,7 @@ struct _IP_ResolverPrivate {
return IP::RESOLVER_INVALID_ID;
}
+ Mutex *mutex;
Semaphore *sem;
Thread *thread;
@@ -96,8 +97,10 @@ struct _IP_ResolverPrivate {
while (!ipr->thread_abort) {
ipr->sem->wait();
- GLOBAL_LOCK_FUNCTION;
+
+ ipr->mutex->lock();
ipr->resolve_queues();
+ ipr->mutex->unlock();
}
}
@@ -110,24 +113,30 @@ struct _IP_ResolverPrivate {
IP_Address IP::resolve_hostname(const String &p_hostname, IP::Type p_type) {
- GLOBAL_LOCK_FUNCTION;
+ resolver->mutex->lock();
String key = _IP_ResolverPrivate::get_cache_key(p_hostname, p_type);
- if (resolver->cache.has(key))
- return resolver->cache[key];
+ if (resolver->cache.has(key)) {
+ IP_Address res = resolver->cache[key];
+ resolver->mutex->unlock();
+ return res;
+ }
IP_Address res = _resolve_hostname(p_hostname, p_type);
resolver->cache[key] = res;
+ resolver->mutex->unlock();
return res;
}
+
IP::ResolverID IP::resolve_hostname_queue_item(const String &p_hostname, IP::Type p_type) {
- GLOBAL_LOCK_FUNCTION;
+ resolver->mutex->lock();
ResolverID id = resolver->find_empty_id();
if (id == RESOLVER_INVALID_ID) {
WARN_PRINT("Out of resolver queries");
+ resolver->mutex->unlock();
return id;
}
@@ -146,6 +155,7 @@ IP::ResolverID IP::resolve_hostname_queue_item(const String &p_hostname, IP::Typ
resolver->resolve_queues();
}
+ resolver->mutex->unlock();
return id;
}
@@ -153,35 +163,51 @@ IP::ResolverStatus IP::get_resolve_item_status(ResolverID p_id) const {
ERR_FAIL_INDEX_V(p_id, IP::RESOLVER_MAX_QUERIES, IP::RESOLVER_STATUS_NONE);
- GLOBAL_LOCK_FUNCTION;
- ERR_FAIL_COND_V(resolver->queue[p_id].status == IP::RESOLVER_STATUS_NONE, IP::RESOLVER_STATUS_NONE);
+ resolver->mutex->lock();
+ if (resolver->queue[p_id].status == IP::RESOLVER_STATUS_NONE) {
+ ERR_PRINT("Condition status == IP::RESOLVER_STATUS_NONE");
+ resolver->mutex->unlock();
+ return IP::RESOLVER_STATUS_NONE;
+ }
+ IP::ResolverStatus res = resolver->queue[p_id].status;
- return resolver->queue[p_id].status;
+ resolver->mutex->unlock();
+ return res;
}
+
IP_Address IP::get_resolve_item_address(ResolverID p_id) const {
ERR_FAIL_INDEX_V(p_id, IP::RESOLVER_MAX_QUERIES, IP_Address());
- GLOBAL_LOCK_FUNCTION;
+ resolver->mutex->lock();
if (resolver->queue[p_id].status != IP::RESOLVER_STATUS_DONE) {
- ERR_EXPLAIN("Resolve of '" + resolver->queue[p_id].hostname + "'' didn't complete yet.");
- ERR_FAIL_COND_V(resolver->queue[p_id].status != IP::RESOLVER_STATUS_DONE, IP_Address());
+ ERR_PRINTS("Resolve of '" + resolver->queue[p_id].hostname + "'' didn't complete yet.");
+ resolver->mutex->unlock();
+ return IP_Address();
}
- return resolver->queue[p_id].response;
+ IP_Address res = resolver->queue[p_id].response;
+
+ resolver->mutex->unlock();
+ return res;
}
+
void IP::erase_resolve_item(ResolverID p_id) {
ERR_FAIL_INDEX(p_id, IP::RESOLVER_MAX_QUERIES);
- GLOBAL_LOCK_FUNCTION;
+ resolver->mutex->lock();
resolver->queue[p_id].status = IP::RESOLVER_STATUS_NONE;
+
+ resolver->mutex->unlock();
}
void IP::clear_cache(const String &p_hostname) {
+ resolver->mutex->lock();
+
if (p_hostname.empty()) {
resolver->cache.clear();
} else {
@@ -190,7 +216,9 @@ void IP::clear_cache(const String &p_hostname) {
resolver->cache.erase(_IP_ResolverPrivate::get_cache_key(p_hostname, IP::TYPE_IPV6));
resolver->cache.erase(_IP_ResolverPrivate::get_cache_key(p_hostname, IP::TYPE_ANY));
}
-};
+
+ resolver->mutex->unlock();
+}
Array IP::_get_local_addresses() const {
@@ -249,12 +277,11 @@ IP::IP() {
singleton = this;
resolver = memnew(_IP_ResolverPrivate);
resolver->sem = NULL;
+ resolver->mutex = Mutex::create();
#ifndef NO_THREADS
- //resolver->sem = Semaphore::create();
-
- resolver->sem = NULL;
+ resolver->sem = Semaphore::create();
if (resolver->sem) {
resolver->thread_abort = false;
@@ -281,7 +308,9 @@ IP::~IP() {
memdelete(resolver->thread);
memdelete(resolver->sem);
}
- memdelete(resolver);
#endif
+
+ memdelete(resolver->mutex);
+ memdelete(resolver);
}
diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp
index 5e66b7f7f5..fd14011a81 100644
--- a/core/io/marshalls.cpp
+++ b/core/io/marshalls.cpp
@@ -276,38 +276,6 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
(*r_len) += 4 * 4;
} break;
- case Variant::IMAGE: {
-
- ERR_FAIL_COND_V(len < (int)5 * 4, ERR_INVALID_DATA);
- Image::Format fmt = (Image::Format)decode_uint32(&buf[0]);
- ERR_FAIL_INDEX_V(fmt, Image::FORMAT_MAX, ERR_INVALID_DATA);
- uint32_t mipmaps = decode_uint32(&buf[4]);
- uint32_t w = decode_uint32(&buf[8]);
- uint32_t h = decode_uint32(&buf[12]);
- uint32_t datalen = decode_uint32(&buf[16]);
-
- Image img;
- if (datalen > 0) {
- len -= 5 * 4;
- ERR_FAIL_COND_V(len < datalen, ERR_INVALID_DATA);
- PoolVector<uint8_t> data;
- data.resize(datalen);
- PoolVector<uint8_t>::Write wr = data.write();
- copymem(&wr[0], &buf[20], datalen);
- wr = PoolVector<uint8_t>::Write();
-
- img = Image(w, h, mipmaps, fmt, data);
- }
-
- r_variant = img;
- if (r_len) {
- if (datalen % 4)
- (*r_len) += 4 - datalen % 4;
-
- (*r_len) += 4 * 5 + datalen;
- }
-
- } break;
case Variant::NODE_PATH: {
ERR_FAIL_COND_V(len < 4, ERR_INVALID_DATA);
@@ -1078,30 +1046,6 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len) {
r_len += 4 * 4;
} break;
- case Variant::IMAGE: {
-
- Image image = p_variant;
- PoolVector<uint8_t> data = image.get_data();
-
- if (buf) {
-
- encode_uint32(image.get_format(), &buf[0]);
- encode_uint32(image.has_mipmaps(), &buf[4]);
- encode_uint32(image.get_width(), &buf[8]);
- encode_uint32(image.get_height(), &buf[12]);
- int ds = data.size();
- encode_uint32(ds, &buf[16]);
- PoolVector<uint8_t>::Read r = data.read();
- copymem(&buf[20], &r[0], ds);
- }
-
- int pad = 0;
- if (data.size() % 4)
- pad = 4 - data.size() % 4;
-
- r_len += data.size() + 5 * 4 + pad;
-
- } break;
/*case Variant::RESOURCE: {
ERR_EXPLAIN("Can't marshallize resources");
diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp
index fc18a44ed3..4ad3d261b2 100644
--- a/core/io/resource_format_binary.cpp
+++ b/core/io/resource_format_binary.cpp
@@ -49,12 +49,12 @@ enum {
VARIANT_VECTOR3 = 12,
VARIANT_PLANE = 13,
VARIANT_QUAT = 14,
- VARIANT_AABB = 15,
+ VARIANT_RECT3 = 15,
VARIANT_MATRIX3 = 16,
VARIANT_TRANSFORM = 17,
VARIANT_MATRIX32 = 18,
VARIANT_COLOR = 20,
- VARIANT_IMAGE = 21,
+ //VARIANT_IMAGE = 21, - no longer variant type
VARIANT_NODE_PATH = 22,
VARIANT_RID = 23,
VARIANT_OBJECT = 24,
@@ -71,11 +71,6 @@ enum {
VARIANT_INT64 = 40,
VARIANT_DOUBLE = 41,
- IMAGE_ENCODING_EMPTY = 0,
- IMAGE_ENCODING_RAW = 1,
- IMAGE_ENCODING_LOSSLESS = 2,
- IMAGE_ENCODING_LOSSY = 3,
-
OBJECT_EMPTY = 0,
OBJECT_EXTERNAL_RESOURCE = 1,
OBJECT_INTERNAL_RESOURCE = 2,
@@ -193,7 +188,7 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) {
r_v = v;
} break;
- case VARIANT_AABB: {
+ case VARIANT_RECT3: {
Rect3 v;
v.pos.x = f->get_real();
@@ -259,74 +254,7 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) {
r_v = v;
} break;
- case VARIANT_IMAGE: {
-
- uint32_t encoding = f->get_32();
- if (encoding == IMAGE_ENCODING_EMPTY) {
- r_v = Variant();
- break;
- } else if (encoding == IMAGE_ENCODING_RAW) {
- uint32_t width = f->get_32();
- uint32_t height = f->get_32();
- uint32_t mipmaps = f->get_32();
- uint32_t format = f->get_32();
- const uint32_t format_version_shift = 24;
- const uint32_t format_version_mask = format_version_shift - 1;
-
- uint32_t format_version = format >> format_version_shift;
-
- const uint32_t current_version = 0;
- if (format_version > current_version) {
-
- ERR_PRINT("Format version for encoded binary image is too new");
- return ERR_PARSE_ERROR;
- }
-
- Image::Format fmt = Image::Format(format & format_version_mask); //if format changes, we can add a compatibility bit on top
-
- uint32_t datalen = f->get_32();
- print_line("image format: " + String(Image::get_format_name(fmt)) + " datalen " + itos(datalen));
-
- PoolVector<uint8_t> imgdata;
- imgdata.resize(datalen);
- PoolVector<uint8_t>::Write w = imgdata.write();
- f->get_buffer(w.ptr(), datalen);
- _advance_padding(datalen);
- w = PoolVector<uint8_t>::Write();
-
-#ifdef TOOLS_ENABLED
- //compatibility
- int correct_size = Image::get_image_data_size(width, height, fmt, mipmaps ? -1 : 0);
- if (correct_size < datalen) {
- WARN_PRINT("Image data was too large, shrinking for compatibility")
- imgdata.resize(correct_size);
- }
-#endif
- r_v = Image(width, height, mipmaps, fmt, imgdata);
-
- } else {
- //compressed
- PoolVector<uint8_t> data;
- data.resize(f->get_32());
- PoolVector<uint8_t>::Write w = data.write();
- f->get_buffer(w.ptr(), data.size());
- w = PoolVector<uint8_t>::Write();
-
- Image img;
-
- if (encoding == IMAGE_ENCODING_LOSSY && Image::lossy_unpacker) {
-
- img = Image::lossy_unpacker(data);
- } else if (encoding == IMAGE_ENCODING_LOSSLESS && Image::lossless_unpacker) {
-
- img = Image::lossless_unpacker(data);
- }
- _advance_padding(data.size());
-
- r_v = img;
- }
- } break;
case VARIANT_NODE_PATH: {
Vector<StringName> names;
@@ -1404,7 +1332,7 @@ void ResourceFormatSaverBinaryInstance::write_variant(const Variant &p_property,
} break;
case Variant::RECT3: {
- f->store_32(VARIANT_AABB);
+ f->store_32(VARIANT_RECT3);
Rect3 val = p_property;
f->store_real(val.pos.x);
f->store_real(val.pos.y);
@@ -1469,67 +1397,7 @@ void ResourceFormatSaverBinaryInstance::write_variant(const Variant &p_property,
f->store_real(val.a);
} break;
- case Variant::IMAGE: {
-
- f->store_32(VARIANT_IMAGE);
- Image val = p_property;
- if (val.empty()) {
- f->store_32(IMAGE_ENCODING_EMPTY);
- break;
- }
-
- int encoding = IMAGE_ENCODING_RAW;
- float quality = 0.7;
-
- if (!val.is_compressed()) {
- //can only compress uncompressed stuff
-
- if (p_hint.hint == PROPERTY_HINT_IMAGE_COMPRESS_LOSSY && Image::lossy_packer) {
- encoding = IMAGE_ENCODING_LOSSY;
- float qs = p_hint.hint_string.to_double();
- if (qs != 0.0)
- quality = qs;
-
- } else if (p_hint.hint == PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS && Image::lossless_packer) {
- encoding = IMAGE_ENCODING_LOSSLESS;
- }
- }
-
- f->store_32(encoding); //raw encoding
-
- if (encoding == IMAGE_ENCODING_RAW) {
-
- f->store_32(val.get_width());
- f->store_32(val.get_height());
- f->store_32(val.has_mipmaps());
- f->store_32(val.get_format()); //if format changes we can add a compatibility version bit
- int dlen = val.get_data().size();
- f->store_32(dlen);
- PoolVector<uint8_t>::Read r = val.get_data().read();
- f->store_buffer(r.ptr(), dlen);
- _pad_buffer(dlen);
- } else {
-
- PoolVector<uint8_t> data;
- if (encoding == IMAGE_ENCODING_LOSSY) {
- data = Image::lossy_packer(val, quality);
-
- } else if (encoding == IMAGE_ENCODING_LOSSLESS) {
- data = Image::lossless_packer(val);
- }
-
- int ds = data.size();
- f->store_32(ds);
- if (ds > 0) {
- PoolVector<uint8_t>::Read r = data.read();
- f->store_buffer(r.ptr(), ds);
-
- _pad_buffer(ds);
- }
- }
-
- } break;
case Variant::NODE_PATH: {
f->store_32(VARIANT_NODE_PATH);
NodePath np = p_property;
diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp
index 3b43492bc5..234d71cb68 100644
--- a/core/io/resource_loader.cpp
+++ b/core/io/resource_loader.cpp
@@ -179,10 +179,10 @@ RES ResourceLoader::load(const String &p_path, const String &p_type_hint, bool p
print_line("load resource: " + local_path);
bool found = false;
+ // Try all loaders and pick the first match for the type hint
for (int i = 0; i < loader_count; i++) {
if (!loader[i]->recognize_path(local_path, p_type_hint)) {
- print_line("path not recognized");
continue;
}
found = true;
diff --git a/core/io/sha-README.md b/core/io/sha-README.md
deleted file mode 100644
index 27a73cffe7..0000000000
--- a/core/io/sha-README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-SHA256
-======
-
-SHA-256 implementation to compliment a portable byte-oriented AES-256
-implementation in C at http://www.literatecode.com/aes256
diff --git a/core/io/zip_io.h b/core/io/zip_io.h
index d5af042499..88e680c0e0 100644
--- a/core/io/zip_io.h
+++ b/core/io/zip_io.h
@@ -30,11 +30,12 @@
#ifndef ZIP_IO_H
#define ZIP_IO_H
-#include "io/unzip.h"
-#include "io/zip.h"
#include "os/copymem.h"
#include "os/file_access.h"
+#include "thirdparty/minizip/unzip.h"
+#include "thirdparty/minizip/zip.h"
+
static void *zipio_open(void *data, const char *p_fname, int mode) {
FileAccess *&f = *(FileAccess **)data;
diff --git a/core/math/math_2d.cpp b/core/math/math_2d.cpp
index 20b916ee3b..962a42acb9 100644
--- a/core/math/math_2d.cpp
+++ b/core/math/math_2d.cpp
@@ -63,7 +63,8 @@ Vector2 Vector2::normalized() const {
}
bool Vector2::is_normalized() const {
- return Math::isequal_approx(length(), (real_t)1.0);
+ // use length_squared() instead of length() to avoid sqrt(), makes it more stringent.
+ return Math::is_equal_approx(length_squared(), 1.0);
}
real_t Vector2::distance_to(const Vector2 &p_vector2) const {
@@ -281,7 +282,7 @@ Vector2 Vector2::cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, c
// slide returns the component of the vector along the given plane, specified by its normal vector.
Vector2 Vector2::slide(const Vector2 &p_n) const {
-#ifdef DEBUG_ENABLED
+#ifdef MATH_CHECKS
ERR_FAIL_COND_V(p_n.is_normalized() == false, Vector2());
#endif
return *this - p_n * this->dot(p_n);
@@ -292,7 +293,7 @@ Vector2 Vector2::bounce(const Vector2 &p_n) const {
}
Vector2 Vector2::reflect(const Vector2 &p_n) const {
-#ifdef DEBUG_ENABLED
+#ifdef MATH_CHECKS
ERR_FAIL_COND_V(p_n.is_normalized() == false, Vector2());
#endif
return 2.0 * p_n * this->dot(p_n) - *this;
@@ -439,7 +440,9 @@ Transform2D Transform2D::inverse() const {
void Transform2D::affine_invert() {
real_t det = basis_determinant();
+#ifdef MATH_CHECKS
ERR_FAIL_COND(det == 0);
+#endif
real_t idet = 1.0 / det;
SWAP(elements[0][0], elements[1][1]);
diff --git a/core/math/math_defs.h b/core/math/math_defs.h
index 1a5768e515..3d9eb63e11 100644
--- a/core/math/math_defs.h
+++ b/core/math/math_defs.h
@@ -35,6 +35,10 @@
#define CMP_NORMALIZE_TOLERANCE 0.000001
#define CMP_POINT_IN_PLANE_EPSILON 0.00001
+#ifdef DEBUG_ENABLED
+#define MATH_CHECKS
+#endif
+
#define USEC_TO_SEC(m_usec) ((m_usec) / 1000000.0)
/**
* "Real" is a type that will be translated to either floats or fixed depending
diff --git a/core/math/math_funcs.cpp b/core/math/math_funcs.cpp
index 6a46b9fbe3..9f5a9c193a 100644
--- a/core/math/math_funcs.cpp
+++ b/core/math/math_funcs.cpp
@@ -30,7 +30,7 @@
#include "math_funcs.h"
#include "core/os/os.h"
-pcg32_random_t Math::default_pcg = { 1, PCG_DEFAULT_INC_64 };
+pcg32_random_t Math::default_pcg = { 12047754176567800795ULL, PCG_DEFAULT_INC_64 };
#define PHI 0x9e3779b9
@@ -51,9 +51,7 @@ void Math::seed(uint64_t x) {
}
void Math::randomize() {
-
- OS::Time time = OS::get_singleton()->get_time();
- seed(OS::get_singleton()->get_ticks_usec() * (time.hour + 1) * (time.min + 1) * (time.sec + 1) * rand()); // TODO: can be simplified.
+ seed(OS::get_singleton()->get_ticks_usec() * default_pcg.state + PCG_DEFAULT_INC_64);
}
uint32_t Math::rand() {
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h
index 10426c9243..06ec77daae 100644
--- a/core/math/math_funcs.h
+++ b/core/math/math_funcs.h
@@ -31,9 +31,10 @@
#define MATH_FUNCS_H
#include "math_defs.h"
-#include "pcg.h"
#include "typedefs.h"
+#include "thirdparty/misc/pcg.h"
+
#include <float.h>
#include <math.h>
@@ -157,7 +158,7 @@ public:
static uint32_t larger_prime(uint32_t p_val);
- static void seed(uint64_t x = 0);
+ static void seed(uint64_t x);
static void randomize();
static uint32_t rand_from_seed(uint64_t *seed);
static uint32_t rand();
@@ -168,7 +169,7 @@ public:
static float random(float from, float to);
static real_t random(int from, int to) { return (real_t)random((real_t)from, (real_t)to); }
- static _ALWAYS_INLINE_ bool isequal_approx(real_t a, real_t b) {
+ static _ALWAYS_INLINE_ bool is_equal_approx(real_t a, real_t b) {
// TODO: Comparing floats for approximate-equality is non-trivial.
// Using epsilon should cover the typical cases in Godot (where a == b is used to compare two reals), such as matrix and vector comparison operators.
// A proper implementation in terms of ULPs should eventually replace the contents of this function.
diff --git a/core/math/matrix3.cpp b/core/math/matrix3.cpp
index ef368009d1..c733251c3c 100644
--- a/core/math/matrix3.cpp
+++ b/core/math/matrix3.cpp
@@ -62,8 +62,9 @@ void Basis::invert() {
real_t det = elements[0][0] * co[0] +
elements[0][1] * co[1] +
elements[0][2] * co[2];
-
+#ifdef MATH_CHECKS
ERR_FAIL_COND(det == 0);
+#endif
real_t s = 1.0 / det;
set(co[0] * s, cofac(0, 2, 2, 1) * s, cofac(0, 1, 1, 2) * s,
@@ -72,8 +73,9 @@ void Basis::invert() {
}
void Basis::orthonormalize() {
+#ifdef MATH_CHECKS
ERR_FAIL_COND(determinant() == 0);
-
+#endif
// Gram-Schmidt Process
Vector3 x = get_axis(0);
@@ -102,20 +104,20 @@ bool Basis::is_orthogonal() const {
Basis id;
Basis m = (*this) * transposed();
- return isequal_approx(id, m);
+ return is_equal_approx(id, m);
}
bool Basis::is_rotation() const {
- return Math::isequal_approx(determinant(), 1) && is_orthogonal();
+ return Math::is_equal_approx(determinant(), 1) && is_orthogonal();
}
bool Basis::is_symmetric() const {
- if (Math::abs(elements[0][1] - elements[1][0]) > CMP_EPSILON)
+ if (!Math::is_equal_approx(elements[0][1], elements[1][0]))
return false;
- if (Math::abs(elements[0][2] - elements[2][0]) > CMP_EPSILON)
+ if (!Math::is_equal_approx(elements[0][2], elements[2][0]))
return false;
- if (Math::abs(elements[1][2] - elements[2][1]) > CMP_EPSILON)
+ if (!Math::is_equal_approx(elements[1][2], elements[2][1]))
return false;
return true;
@@ -123,11 +125,11 @@ bool Basis::is_symmetric() const {
Basis Basis::diagonalize() {
- //NOTE: only implemented for symmetric matrices
- //with the Jacobi iterative method method
-
+//NOTE: only implemented for symmetric matrices
+//with the Jacobi iterative method method
+#ifdef MATH_CHECKS
ERR_FAIL_COND_V(!is_symmetric(), Basis());
-
+#endif
const int ite_max = 1024;
real_t off_matrix_norm_2 = elements[0][1] * elements[0][1] + elements[0][2] * elements[0][2] + elements[1][2] * elements[1][2];
@@ -160,7 +162,7 @@ Basis Basis::diagonalize() {
// Compute the rotation angle
real_t angle;
- if (Math::abs(elements[j][j] - elements[i][i]) < CMP_EPSILON) {
+ if (Math::is_equal_approx(elements[j][j], elements[i][i])) {
angle = Math_PI / 4;
} else {
angle = 0.5 * Math::atan(2 * elements[i][j] / (elements[j][j] - elements[i][i]));
@@ -226,11 +228,25 @@ Basis Basis::scaled(const Vector3 &p_scale) const {
}
Vector3 Basis::get_scale() const {
- // We are assuming M = R.S, and performing a polar decomposition to extract R and S.
- // FIXME: We eventually need a proper polar decomposition.
- // As a cheap workaround until then, to ensure that R is a proper rotation matrix with determinant +1
- // (such that it can be represented by a Quat or Euler angles), we absorb the sign flip into the scaling matrix.
- // As such, it works in conjunction with get_rotation().
+ // FIXME: We are assuming M = R.S (R is rotation and S is scaling), and use polar decomposition to extract R and S.
+ // A polar decomposition is M = O.P, where O is an orthogonal matrix (meaning rotation and reflection) and
+ // P is a positive semi-definite matrix (meaning it contains absolute values of scaling along its diagonal).
+ //
+ // Despite being different from what we want to achieve, we can nevertheless make use of polar decomposition
+ // here as follows. We can split O into a rotation and a reflection as O = R.Q, and obtain M = R.S where
+ // we defined S = Q.P. Now, R is a proper rotation matrix and S is a (signed) scaling matrix,
+ // which can involve negative scalings. However, there is a catch: unlike the polar decomposition of M = O.P,
+ // the decomposition of O into a rotation and reflection matrix as O = R.Q is not unique.
+ // Therefore, we are going to do this decomposition by sticking to a particular convention.
+ // This may lead to confusion for some users though.
+ //
+ // The convention we use here is to absorb the sign flip into the scaling matrix.
+ // The same convention is also used in other similar functions such as set_scale,
+ // get_rotation_axis_angle, get_rotation, set_rotation_axis_angle, set_rotation_euler, ...
+ //
+ // A proper way to get rid of this issue would be to store the scaling values (or at least their signs)
+ // as a part of Basis. However, if we go that path, we need to disable direct (write) access to the
+ // matrix elements.
real_t det_sign = determinant() > 0 ? 1 : -1;
return det_sign * Vector3(
Vector3(elements[0][0], elements[1][0], elements[2][0]).length(),
@@ -238,6 +254,17 @@ Vector3 Basis::get_scale() const {
Vector3(elements[0][2], elements[1][2], elements[2][2]).length());
}
+// Sets scaling while preserving rotation.
+// This requires some care when working with matrices with negative determinant,
+// since we're using a particular convention for "polar" decomposition in get_scale and get_rotation.
+// For details, see the explanation in get_scale.
+void Basis::set_scale(const Vector3 &p_scale) {
+ Vector3 e = get_euler();
+ Basis(); // reset to identity
+ scale(p_scale);
+ rotate(e);
+}
+
// Multiplies the matrix from left by the rotation matrix: M -> R.M
// Note that this does *not* rotate the matrix itself.
//
@@ -260,6 +287,7 @@ void Basis::rotate(const Vector3 &p_euler) {
*this = rotated(p_euler);
}
+// TODO: rename this to get_rotation_euler
Vector3 Basis::get_rotation() const {
// Assumes that the matrix can be decomposed into a proper rotation and scaling matrix as M = R.S,
// and returns the Euler angles corresponding to the rotation part, complementing get_scale().
@@ -274,6 +302,42 @@ Vector3 Basis::get_rotation() const {
return m.get_euler();
}
+void Basis::get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle) const {
+ // Assumes that the matrix can be decomposed into a proper rotation and scaling matrix as M = R.S,
+ // and returns the Euler angles corresponding to the rotation part, complementing get_scale().
+ // See the comment in get_scale() for further information.
+ Basis m = orthonormalized();
+ real_t det = m.determinant();
+ if (det < 0) {
+ // Ensure that the determinant is 1, such that result is a proper rotation matrix which can be represented by Euler angles.
+ m.scale(Vector3(-1, -1, -1));
+ }
+
+ m.get_axis_angle(p_axis, p_angle);
+}
+
+// Sets rotation while preserving scaling.
+// This requires some care when working with matrices with negative determinant,
+// since we're using a particular convention for "polar" decomposition in get_scale and get_rotation.
+// For details, see the explanation in get_scale.
+void Basis::set_rotation_euler(const Vector3 &p_euler) {
+ Vector3 s = get_scale();
+ Basis(); // reset to identity
+ scale(s);
+ rotate(p_euler);
+}
+
+// Sets rotation while preserving scaling.
+// This requires some care when working with matrices with negative determinant,
+// since we're using a particular convention for "polar" decomposition in get_scale and get_rotation.
+// For details, see the explanation in get_scale.
+void Basis::set_rotation_axis_angle(const Vector3 &p_axis, real_t p_angle) {
+ Vector3 s = get_scale();
+ Basis(); // reset to identity
+ scale(s);
+ rotate(p_axis, p_angle);
+}
+
// get_euler returns a vector containing the Euler angles in the format
// (a1,a2,a3), where a3 is the angle of the first rotation, and a1 is the last
// (following the convention they are commonly defined in the literature).
@@ -294,9 +358,9 @@ Vector3 Basis::get_euler() const {
// -cx*cz*sy+sx*sz cz*sx+cx*sy*sz cx*cy
Vector3 euler;
-
+#ifdef MATH_CHECKS
ERR_FAIL_COND_V(is_rotation() == false, euler);
-
+#endif
euler.y = Math::asin(elements[0][2]);
if (euler.y < Math_PI * 0.5) {
if (euler.y > -Math_PI * 0.5) {
@@ -340,11 +404,11 @@ void Basis::set_euler(const Vector3 &p_euler) {
*this = xmat * (ymat * zmat);
}
-bool Basis::isequal_approx(const Basis &a, const Basis &b) const {
+bool Basis::is_equal_approx(const Basis &a, const Basis &b) const {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
- if (Math::isequal_approx(a.elements[i][j], b.elements[i][j]) == false)
+ if (Math::is_equal_approx(a.elements[i][j], b.elements[i][j]) == false)
return false;
}
}
@@ -387,8 +451,9 @@ Basis::operator String() const {
}
Basis::operator Quat() const {
+#ifdef MATH_CHECKS
ERR_FAIL_COND_V(is_rotation() == false, Quat());
-
+#endif
real_t trace = elements[0][0] + elements[1][1] + elements[2][2];
real_t temp[4];
@@ -482,9 +547,10 @@ void Basis::set_orthogonal_index(int p_index) {
*this = _ortho_bases[p_index];
}
-void Basis::get_axis_and_angle(Vector3 &r_axis, real_t &r_angle) const {
+void Basis::get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
+#ifdef MATH_CHECKS
ERR_FAIL_COND(is_rotation() == false);
-
+#endif
real_t angle, x, y, z; // variables for result
real_t epsilon = 0.01; // margin to allow for rounding errors
real_t epsilon2 = 0.1; // margin to distinguish between 0 and 180 degrees
@@ -573,11 +639,11 @@ Basis::Basis(const Quat &p_quat) {
xz - wy, yz + wx, 1.0 - (xx + yy));
}
-Basis::Basis(const Vector3 &p_axis, real_t p_phi) {
- // Rotation matrix from axis and angle, see https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle
-
+void Basis::set_axis_angle(const Vector3 &p_axis, real_t p_phi) {
+// Rotation matrix from axis and angle, see https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_angle
+#ifdef MATH_CHECKS
ERR_FAIL_COND(p_axis.is_normalized() == false);
-
+#endif
Vector3 axis_sq(p_axis.x * p_axis.x, p_axis.y * p_axis.y, p_axis.z * p_axis.z);
real_t cosine = Math::cos(p_phi);
@@ -595,3 +661,7 @@ Basis::Basis(const Vector3 &p_axis, real_t p_phi) {
elements[2][1] = p_axis.y * p_axis.z * (1.0 - cosine) + p_axis.x * sine;
elements[2][2] = axis_sq.z + cosine * (1.0 - axis_sq.z);
}
+
+Basis::Basis(const Vector3 &p_axis, real_t p_phi) {
+ set_axis_angle(p_axis, p_phi);
+}
diff --git a/core/math/matrix3.h b/core/math/matrix3.h
index 08e963f56e..c3eeb1f705 100644
--- a/core/math/matrix3.h
+++ b/core/math/matrix3.h
@@ -77,15 +77,25 @@ public:
void rotate(const Vector3 &p_euler);
Basis rotated(const Vector3 &p_euler) const;
+
Vector3 get_rotation() const;
+ void get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle) const;
- void scale(const Vector3 &p_scale);
- Basis scaled(const Vector3 &p_scale) const;
- Vector3 get_scale() const;
+ void set_rotation_euler(const Vector3 &p_euler);
+ void set_rotation_axis_angle(const Vector3 &p_axis, real_t p_angle);
Vector3 get_euler() const;
void set_euler(const Vector3 &p_euler);
+ void get_axis_angle(Vector3 &r_axis, real_t &r_angle) const;
+ void set_axis_angle(const Vector3 &p_axis, real_t p_phi);
+
+ void scale(const Vector3 &p_scale);
+ Basis scaled(const Vector3 &p_scale) const;
+
+ Vector3 get_scale() const;
+ void set_scale(const Vector3 &p_scale);
+
// transposed dot products
_FORCE_INLINE_ real_t tdotx(const Vector3 &v) const {
return elements[0][0] * v[0] + elements[1][0] * v[1] + elements[2][0] * v[2];
@@ -97,7 +107,7 @@ public:
return elements[0][2] * v[0] + elements[1][2] * v[1] + elements[2][2] * v[2];
}
- bool isequal_approx(const Basis &a, const Basis &b) const;
+ bool is_equal_approx(const Basis &a, const Basis &b) const;
bool operator==(const Basis &p_matrix) const;
bool operator!=(const Basis &p_matrix) const;
@@ -121,8 +131,6 @@ public:
operator String() const;
- void get_axis_and_angle(Vector3 &r_axis, real_t &r_angle) const;
-
/* create / set */
_FORCE_INLINE_ void set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz) {
diff --git a/core/math/quat.cpp b/core/math/quat.cpp
index 9662542224..0bea97c2e8 100644
--- a/core/math/quat.cpp
+++ b/core/math/quat.cpp
@@ -92,6 +92,10 @@ Quat Quat::normalized() const {
return *this / length();
}
+bool Quat::is_normalized() const {
+ return Math::is_equal_approx(length(), 1.0);
+}
+
Quat Quat::inverse() const {
return Quat(-x, -y, -z, w);
}
diff --git a/core/math/quat.h b/core/math/quat.h
index 76b3cde2a3..f22275b457 100644
--- a/core/math/quat.h
+++ b/core/math/quat.h
@@ -48,6 +48,7 @@ public:
real_t length() const;
void normalize();
Quat normalized() const;
+ bool is_normalized() const;
Quat inverse() const;
_FORCE_INLINE_ real_t dot(const Quat &q) const;
void set_euler(const Vector3 &p_euler);
@@ -56,7 +57,7 @@ public:
Quat slerpni(const Quat &q, const real_t &t) const;
Quat cubic_slerp(const Quat &q, const Quat &prep, const Quat &postq, const real_t &t) const;
- _FORCE_INLINE_ void get_axis_and_angle(Vector3 &r_axis, real_t &r_angle) const {
+ _FORCE_INLINE_ void get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
r_angle = 2 * Math::acos(w);
r_axis.x = x / Math::sqrt(1 - w * w);
r_axis.y = y / Math::sqrt(1 - w * w);
diff --git a/core/math/vector3.h b/core/math/vector3.h
index a6bc20ccb2..5f4390fbd1 100644
--- a/core/math/vector3.h
+++ b/core/math/vector3.h
@@ -389,7 +389,8 @@ Vector3 Vector3::normalized() const {
}
bool Vector3::is_normalized() const {
- return Math::isequal_approx(length(), (real_t)1.0);
+ // use length_squared() instead of length() to avoid sqrt(), makes it more stringent.
+ return Math::is_equal_approx(length_squared(), 1.0);
}
Vector3 Vector3::inverse() const {
@@ -404,7 +405,7 @@ void Vector3::zero() {
// slide returns the component of the vector along the given plane, specified by its normal vector.
Vector3 Vector3::slide(const Vector3 &p_n) const {
-#ifdef DEBUG_ENABLED
+#ifdef MATH_CHECKS
ERR_FAIL_COND_V(p_n.is_normalized() == false, Vector3());
#endif
return *this - p_n * this->dot(p_n);
@@ -415,7 +416,7 @@ Vector3 Vector3::bounce(const Vector3 &p_n) const {
}
Vector3 Vector3::reflect(const Vector3 &p_n) const {
-#ifdef DEBUG_ENABLED
+#ifdef MATH_CHECKS
ERR_FAIL_COND_V(p_n.is_normalized() == false, Vector3());
#endif
return 2.0 * p_n * this->dot(p_n) - *this;
diff --git a/core/message_queue.cpp b/core/message_queue.cpp
index 14e8913d9f..fa1c8112cc 100644
--- a/core/message_queue.cpp
+++ b/core/message_queue.cpp
@@ -51,9 +51,10 @@ Error MessageQueue::push_call(ObjectID p_id, const StringName &p_method, const V
type = ObjectDB::get_instance(p_id)->get_class();
print_line("failed method: " + type + ":" + p_method + " target ID: " + itos(p_id));
statistics();
+ ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings");
+ ERR_FAIL_V(ERR_OUT_OF_MEMORY);
}
- ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY);
Message *msg = memnew_placement(&buffer[buffer_end], Message);
msg->args = p_argcount;
msg->instance_ID = p_id;
@@ -101,10 +102,10 @@ Error MessageQueue::push_set(ObjectID p_id, const StringName &p_prop, const Vari
type = ObjectDB::get_instance(p_id)->get_class();
print_line("failed set: " + type + ":" + p_prop + " target ID: " + itos(p_id));
statistics();
+ ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings");
+ ERR_FAIL_V(ERR_OUT_OF_MEMORY);
}
- ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY);
-
Message *msg = memnew_placement(&buffer[buffer_end], Message);
msg->args = 1;
msg->instance_ID = p_id;
@@ -134,9 +135,10 @@ Error MessageQueue::push_notification(ObjectID p_id, int p_notification) {
type = ObjectDB::get_instance(p_id)->get_class();
print_line("failed notification: " + itos(p_notification) + " target ID: " + itos(p_id));
statistics();
+ ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings");
+ ERR_FAIL_V(ERR_OUT_OF_MEMORY);
}
- ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY);
Message *msg = memnew_placement(&buffer[buffer_end], Message);
msg->type = TYPE_NOTIFICATION;
diff --git a/core/method_bind.h b/core/method_bind.h
index 749d8b4fda..5b8a458736 100644
--- a/core/method_bind.h
+++ b/core/method_bind.h
@@ -146,7 +146,7 @@ struct VariantCaster<const T &> {
// some helpers
VARIANT_ENUM_CAST(Vector3::Axis);
-VARIANT_ENUM_CAST(Image::Format);
+
VARIANT_ENUM_CAST(Error);
VARIANT_ENUM_CAST(wchar_t);
VARIANT_ENUM_CAST(Margin);
diff --git a/core/method_ptrcall.h b/core/method_ptrcall.h
index 8cb2903842..d3f6143638 100644
--- a/core/method_ptrcall.h
+++ b/core/method_ptrcall.h
@@ -103,7 +103,6 @@ MAKE_PTRARG(Rect3);
MAKE_PTRARG(Basis);
MAKE_PTRARG(Transform);
MAKE_PTRARG(Color);
-MAKE_PTRARG(Image);
MAKE_PTRARG(NodePath);
MAKE_PTRARG(RID);
MAKE_PTRARG(InputEvent);
diff --git a/core/os/file_access.cpp b/core/os/file_access.cpp
index f344525d1e..375121c0cc 100644
--- a/core/os/file_access.cpp
+++ b/core/os/file_access.cpp
@@ -28,13 +28,15 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "file_access.h"
+
#include "core/io/file_access_pack.h"
#include "core/io/marshalls.h"
#include "global_config.h"
-#include "io/md5.h"
-#include "io/sha256.h"
#include "os/os.h"
+#include "thirdparty/misc/md5.h"
+#include "thirdparty/misc/sha256.h"
+
FileAccess::CreateFunc FileAccess::create_func[ACCESS_MAX] = { 0, 0 };
FileAccess::FileCloseFailNotify FileAccess::close_fail_notify = NULL;
diff --git a/core/os/input_event.h b/core/os/input_event.h
index eb5c5685e5..93cceac27c 100644
--- a/core/os/input_event.h
+++ b/core/os/input_event.h
@@ -188,6 +188,7 @@ struct InputEventMouse {
struct InputEventMouseButton : public InputEventMouse {
+ double factor;
int button_index;
bool pressed; //otherwise released
bool doubleclick; //last even less than doubleclick time
@@ -272,7 +273,10 @@ struct InputEvent {
InputEvent xform_by(const Transform2D &p_xform) const;
bool operator==(const InputEvent &p_event) const;
operator String() const;
- InputEvent() { zeromem(this, sizeof(InputEvent)); }
+ InputEvent() {
+ zeromem(this, sizeof(InputEvent));
+ mouse_button.factor = 1;
+ }
};
#endif
diff --git a/core/os/os.cpp b/core/os/os.cpp
index ab03bb8016..8bee725813 100644
--- a/core/os/os.cpp
+++ b/core/os/os.cpp
@@ -389,7 +389,7 @@ void OS::_ensure_data_dir() {
memdelete(da);
}
-void OS::set_icon(const Image &p_icon) {
+void OS::set_icon(const Ref<Image> &p_icon) {
}
String OS::get_model_name() const {
@@ -507,7 +507,6 @@ OS::OS() {
_render_thread_mode = RENDER_THREAD_SAFE;
_allow_hidpi = true;
- Math::seed(1234567);
}
OS::~OS() {
diff --git a/core/os/os.h b/core/os/os.h
index ff2a24f40d..037ce436c1 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -31,6 +31,7 @@
#define OS_H
#include "engine.h"
+#include "image.h"
#include "list.h"
#include "os/main_loop.h"
#include "power.h"
@@ -357,7 +358,7 @@ public:
virtual void make_rendering_thread();
virtual void swap_buffers();
- virtual void set_icon(const Image &p_icon);
+ virtual void set_icon(const Ref<Image> &p_icon);
virtual int get_exit_code() const;
virtual void set_exit_code(int p_code);
diff --git a/core/packed_data_container.cpp b/core/packed_data_container.cpp
index addb0841f4..836bcb7287 100644
--- a/core/packed_data_container.cpp
+++ b/core/packed_data_container.cpp
@@ -237,7 +237,6 @@ uint32_t PackedDataContainer::_pack(const Variant &p_data, Vector<uint8_t> &tmpd
case Variant::RECT3:
case Variant::BASIS:
case Variant::TRANSFORM:
- case Variant::IMAGE:
case Variant::INPUT_EVENT:
case Variant::POOL_BYTE_ARRAY:
case Variant::POOL_INT_ARRAY:
diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp
index 4d12e42895..634751b0bb 100644
--- a/core/register_core_types.cpp
+++ b/core/register_core_types.cpp
@@ -108,6 +108,8 @@ void register_core_types() {
ClassDB::register_class<Reference>();
ClassDB::register_class<WeakRef>();
ClassDB::register_class<Resource>();
+ ClassDB::register_class<Image>();
+
ClassDB::register_class<FuncRef>();
ClassDB::register_virtual_class<StreamPeer>();
ClassDB::register_class<StreamPeerBuffer>();
diff --git a/core/resource.cpp b/core/resource.cpp
index aa070558f5..559d4c1201 100644
--- a/core/resource.cpp
+++ b/core/resource.cpp
@@ -185,7 +185,7 @@ Ref<Resource> Resource::duplicate_for_local_scene(Node *p_for_scene, Map<Ref<Res
return Ref<Resource>(r);
}
-Ref<Resource> Resource::duplicate(bool p_subresources) {
+Ref<Resource> Resource::duplicate(bool p_subresources) const {
List<PropertyInfo> plist;
get_property_list(&plist);
diff --git a/core/resource.h b/core/resource.h
index ab3404df8f..903edeff52 100644
--- a/core/resource.h
+++ b/core/resource.h
@@ -103,7 +103,7 @@ public:
void set_subindex(int p_sub_index);
int get_subindex() const;
- Ref<Resource> duplicate(bool p_subresources = false);
+ virtual Ref<Resource> duplicate(bool p_subresources = false) const;
Ref<Resource> duplicate_for_local_scene(Node *p_scene, Map<Ref<Resource>, Ref<Resource> > &remap_cache);
void set_local_to_scene(bool p_enable);
diff --git a/core/ring_buffer.h b/core/ring_buffer.h
index d5085e9560..8b32bb5e10 100644
--- a/core/ring_buffer.h
+++ b/core/ring_buffer.h
@@ -101,6 +101,32 @@ public:
return p_size;
};
+ int find(const T &t, int p_offset, int p_max_size) {
+
+ int left = data_left();
+ if ((p_offset + p_max_size) > left) {
+ p_max_size -= left - p_offset;
+ if (p_max_size <= 0)
+ return 0;
+ }
+ p_max_size = MIN(left, p_max_size);
+ int pos = read_pos;
+ inc(pos, p_offset);
+ int to_read = p_max_size;
+ while (to_read) {
+ int end = pos + to_read;
+ end = MIN(end, size());
+ int total = end - pos;
+ for (int i = 0; i < total; i++) {
+ if (data[pos + i] == t)
+ return i + (p_max_size - to_read);
+ };
+ to_read -= total;
+ pos = 0;
+ }
+ return -1;
+ }
+
inline int advance_read(int p_n) {
p_n = MIN(p_n, data_left());
inc(read_pos, p_n);
diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp
index bd0352b7a4..f230a4bc95 100644
--- a/core/script_debugger_remote.cpp
+++ b/core/script_debugger_remote.cpp
@@ -586,9 +586,7 @@ void ScriptDebuggerRemote::_send_object_id(ObjectID p_id) {
packet_peer_stream->put_var(E->get().hint);
packet_peer_stream->put_var(E->get().hint_string);
//only send information that can be sent..
- if (var.get_type() == Variant::IMAGE) {
- var = Image();
- }
+
if (var.get_type() >= Variant::DICTIONARY) {
var = Array(); //send none for now, may be to big
}
diff --git a/core/script_language.h b/core/script_language.h
index 905ac4eeda..115ab59dca 100644
--- a/core/script_language.h
+++ b/core/script_language.h
@@ -119,7 +119,7 @@ public:
virtual void get_script_method_list(List<MethodInfo> *p_list) const = 0;
virtual void get_script_property_list(List<PropertyInfo> *p_list) const = 0;
- virtual int get_member_line(const StringName &p_member) const { return 0; }
+ virtual int get_member_line(const StringName &p_member) const { return -1; }
Script() {}
};
@@ -199,8 +199,10 @@ public:
virtual bool validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path = "", List<String> *r_functions = NULL) const = 0;
virtual Script *create_script() const = 0;
virtual bool has_named_classes() const = 0;
+ virtual bool can_inherit_from_file() { return false; }
virtual int find_function(const String &p_function, const String &p_code) const = 0;
virtual String make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const = 0;
+ virtual Error open_in_external_editor(const Ref<Script> &p_script, int p_line, int p_col) { return ERR_UNAVAILABLE; }
virtual Error complete_code(const String &p_code, const String &p_base_path, Object *p_owner, List<String> *r_options, String &r_call_hint) { return ERR_UNAVAILABLE; }
diff --git a/core/translation.cpp b/core/translation.cpp
index 65dd083902..bd670167f9 100644
--- a/core/translation.cpp
+++ b/core/translation.cpp
@@ -1085,7 +1085,7 @@ void TranslationServer::setup() {
int idx = 0;
while (locale_list[idx]) {
if (idx > 0)
- options += ", ";
+ options += ",";
options += locale_list[idx];
idx++;
}
diff --git a/core/typedefs.h b/core/typedefs.h
index 335f576bce..40d9ea37b5 100644
--- a/core/typedefs.h
+++ b/core/typedefs.h
@@ -42,17 +42,6 @@
#define _MKSTR(m_x) _STR(m_x)
#endif
-/**
- * Version macros - it is necessary to include "version.h" for those to work.
- * Include it in the .cpp file, not the header.
- */
-#ifdef VERSION_PATCH
-#define VERSION_MKSTRING "" _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR) "." _MKSTR(VERSION_PATCH) "." _MKSTR(VERSION_STATUS) "." _MKSTR(VERSION_REVISION)
-#else
-#define VERSION_MKSTRING "" _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR) "." _MKSTR(VERSION_STATUS) "." _MKSTR(VERSION_REVISION)
-#endif // VERSION_PATCH
-#define VERSION_FULL_NAME "" _MKSTR(VERSION_NAME) " v" VERSION_MKSTRING
-
#ifndef _ALWAYS_INLINE_
#if defined(__GNUC__) && (__GNUC__ >= 4)
diff --git a/core/ustring.cpp b/core/ustring.cpp
index d2d4b6507f..7a5129962b 100644
--- a/core/ustring.cpp
+++ b/core/ustring.cpp
@@ -30,14 +30,15 @@
#include "ustring.h"
#include "color.h"
-#include "io/md5.h"
-#include "io/sha256.h"
#include "math_funcs.h"
#include "os/memory.h"
#include "print_string.h"
#include "ucaps.h"
#include "variant.h"
+#include "thirdparty/misc/md5.h"
+#include "thirdparty/misc/sha256.h"
+
#include <wchar.h>
#ifndef NO_USE_STDLIB
@@ -52,6 +53,8 @@
#define MAX_DIGITS 6
#define UPPERCASE(m_c) (((m_c) >= 'a' && (m_c) <= 'z') ? ((m_c) - ('a' - 'A')) : (m_c))
#define LOWERCASE(m_c) (((m_c) >= 'A' && (m_c) <= 'Z') ? ((m_c) + ('a' - 'A')) : (m_c))
+#define IS_DIGIT(m_d) ((m_d) >= '0' && (m_d) <= '9')
+#define IS_HEX_DIGIT(m_d) (((m_d) >= '0' && (m_d) <= '9') || ((m_d) >= 'a' && (m_d) <= 'f') || ((m_d) >= 'A' && (m_d) <= 'F'))
/** STRING **/
@@ -480,6 +483,56 @@ signed char String::casecmp_to(const String &p_str) const {
return 0; //should never reach anyway
}
+signed char String::naturalnocasecmp_to(const String &p_str) const {
+
+ const CharType *this_str = c_str();
+ const CharType *that_str = p_str.c_str();
+
+ if (this_str && that_str) {
+ while (*this_str) {
+
+ if (!*that_str)
+ return 1;
+ else if (IS_DIGIT(*this_str)) {
+
+ int64_t this_int, that_int;
+
+ if (!IS_DIGIT(*that_str))
+ return -1;
+
+ /* Compare the numbers */
+ this_int = to_int(this_str);
+ that_int = to_int(that_str);
+
+ if (this_int < that_int)
+ return -1;
+ else if (this_int > that_int)
+ return 1;
+
+ /* Skip */
+ while (IS_DIGIT(*this_str))
+ this_str++;
+ while (IS_DIGIT(*that_str))
+ that_str++;
+ } else if (IS_DIGIT(*that_str))
+ return 1;
+ else {
+ if (_find_upper(*this_str) < _find_upper(*that_str)) //more than
+ return -1;
+ else if (_find_upper(*this_str) > _find_upper(*that_str)) //less than
+ return 1;
+
+ this_str++;
+ that_str++;
+ }
+ }
+ if (*that_str)
+ return -1;
+ }
+
+ return 0;
+}
+
void String::erase(int p_pos, int p_chars) {
*this = left(p_pos) + substr(p_pos + p_chars, length() - ((p_pos + p_chars)));
@@ -513,14 +566,16 @@ String String::camelcase_to_underscore(bool lowercase) const {
for (size_t i = 1; i < this->size(); i++) {
bool is_upper = cstr[i] >= A && cstr[i] <= Z;
+ bool is_number = cstr[i] >= '0' && cstr[i] <= '9';
bool are_next_2_lower = false;
bool was_precedent_upper = cstr[i - 1] >= A && cstr[i - 1] <= Z;
+ bool was_precedent_number = cstr[i - 1] >= '0' && cstr[i - 1] <= '9';
if (i + 2 < this->size()) {
are_next_2_lower = cstr[i + 1] >= a && cstr[i + 1] <= z && cstr[i + 2] >= a && cstr[i + 2] <= z;
}
- bool should_split = ((is_upper && !was_precedent_upper) || (was_precedent_upper && is_upper && are_next_2_lower));
+ bool should_split = ((is_upper && !was_precedent_upper && !was_precedent_number) || (was_precedent_upper && is_upper && are_next_2_lower) || (is_number && !was_precedent_number));
if (should_split) {
new_string += this->substr(start_index, i - start_index) + "_";
start_index = i;
@@ -1695,9 +1750,6 @@ bool String::is_numeric() const {
return true; // TODO: Use the parser below for this instead
};
-#define IS_DIGIT(m_d) ((m_d) >= '0' && (m_d) <= '9')
-#define IS_HEX_DIGIT(m_d) (((m_d) >= '0' && (m_d) <= '9') || ((m_d) >= 'a' && (m_d) <= 'f') || ((m_d) >= 'A' && (m_d) <= 'F'))
-
template <class C>
static double built_in_strtod(const C *string, /* A decimal ASCII floating-point number,
* optionally preceded by white space. Must
diff --git a/core/ustring.h b/core/ustring.h
index 9ee3c2042c..d00bfa59b5 100644
--- a/core/ustring.h
+++ b/core/ustring.h
@@ -98,6 +98,7 @@ public:
signed char casecmp_to(const String &p_str) const;
signed char nocasecmp_to(const String &p_str) const;
+ signed char naturalnocasecmp_to(const String &p_str) const;
const CharType *c_str() const;
/* standard size stuff */
@@ -256,6 +257,14 @@ struct NoCaseComparator {
}
};
+struct NaturalNoCaseComparator {
+
+ bool operator()(const String &p_a, const String &p_b) const {
+
+ return p_a.naturalnocasecmp_to(p_b) < 0;
+ }
+};
+
/* end of namespace */
//tool translate
diff --git a/core/variant.cpp b/core/variant.cpp
index 67ce8af483..9c05dbaca0 100644
--- a/core/variant.cpp
+++ b/core/variant.cpp
@@ -120,11 +120,6 @@ String Variant::get_type_name(Variant::Type p_type) {
return "Color";
} break;
- case IMAGE: {
-
- return "Image";
-
- } break;
case _RID: {
return "RID";
@@ -249,7 +244,6 @@ bool Variant::can_convert(Variant::Type p_type_from, Variant::Type p_type_to) {
static const Type invalid[] = {
OBJECT,
- IMAGE,
NIL
};
@@ -791,11 +785,6 @@ bool Variant::is_zero() const {
return *reinterpret_cast<const Color *>(_data._mem) == Color();
} break;
- case IMAGE: {
-
- return _data._image->empty();
-
- } break;
case _RID: {
return *reinterpret_cast<const RID *>(_data._mem) == RID();
@@ -1016,11 +1005,6 @@ void Variant::reference(const Variant &p_variant) {
memnew_placement(_data._mem, Color(*reinterpret_cast<const Color *>(p_variant._data._mem)));
} break;
- case IMAGE: {
-
- _data._image = memnew(Image(*p_variant._data._image));
-
- } break;
case _RID: {
memnew_placement(_data._mem, RID(*reinterpret_cast<const RID *>(p_variant._data._mem)));
@@ -1141,11 +1125,6 @@ void Variant::clear() {
} break;
// misc types
- case IMAGE: {
-
- memdelete(_data._image);
-
- } break;
case NODE_PATH: {
reinterpret_cast<NodePath *>(_data._mem)->~NodePath();
@@ -1760,13 +1739,6 @@ Variant::operator Color() const {
else
return Color();
}
-Variant::operator Image() const {
-
- if (type == IMAGE)
- return *_data._image;
- else
- return Image();
-}
Variant::operator NodePath() const {
@@ -2306,11 +2278,6 @@ Variant::Variant(const Color &p_color) {
type = COLOR;
memnew_placement(_data._mem, Color(p_color));
}
-Variant::Variant(const Image &p_image) {
-
- type = IMAGE;
- _data._image = memnew(Image(p_image));
-}
Variant::Variant(const NodePath &p_node_path) {
@@ -2711,11 +2678,6 @@ uint32_t Variant::hash() const {
return hash_djb2_one_float(reinterpret_cast<const Color *>(_data._mem)->a, hash);
} break;
- case IMAGE: {
-
- return 0;
-
- } break;
case _RID: {
return hash_djb2_one_64(reinterpret_cast<const RID *>(_data._mem)->get_id());
diff --git a/core/variant.h b/core/variant.h
index e1a2b89a07..76097dfbdd 100644
--- a/core/variant.h
+++ b/core/variant.h
@@ -39,7 +39,6 @@
#include "dictionary.h"
#include "dvector.h"
#include "face3.h"
-#include "image.h"
#include "io/ip_address.h"
#include "math_2d.h"
#include "matrix3.h"
@@ -92,26 +91,25 @@ public:
TRANSFORM2D,
PLANE,
QUAT, // 10
- RECT3, //sorry naming convention fail :( not like it's used often
+ RECT3,
BASIS,
TRANSFORM,
// misc types
COLOR,
- IMAGE, // 15
- NODE_PATH,
+ NODE_PATH, // 15
_RID,
OBJECT,
INPUT_EVENT,
- DICTIONARY, // 20
- ARRAY,
+ DICTIONARY,
+ ARRAY, // 20
// arrays
POOL_BYTE_ARRAY,
POOL_INT_ARRAY,
POOL_REAL_ARRAY,
- POOL_STRING_ARRAY, // 25
- POOL_VECTOR2_ARRAY,
+ POOL_STRING_ARRAY,
+ POOL_VECTOR2_ARRAY, // 25
POOL_VECTOR3_ARRAY,
POOL_COLOR_ARRAY,
@@ -146,7 +144,6 @@ private:
Transform *_transform;
RefPtr *_resource;
InputEvent *_input_event;
- Image *_image;
void *_ptr; //generic pointer
uint8_t _mem[sizeof(ObjData) > (sizeof(real_t) * 4) ? sizeof(ObjData) : (sizeof(real_t) * 4)];
} _data;
@@ -207,7 +204,6 @@ public:
operator Transform2D() const;
operator Color() const;
- operator Image() const;
operator NodePath() const;
operator RefPtr() const;
operator RID() const;
@@ -276,7 +272,6 @@ public:
Variant(const Transform2D &p_transform);
Variant(const Transform &p_transform);
Variant(const Color &p_color);
- Variant(const Image &p_image);
Variant(const NodePath &p_path);
Variant(const RefPtr &p_resource);
Variant(const RID &p_rid);
diff --git a/core/variant_call.cpp b/core/variant_call.cpp
index e87dfd2768..8bc9f085ad 100644
--- a/core/variant_call.cpp
+++ b/core/variant_call.cpp
@@ -37,9 +37,6 @@
typedef void (*VariantFunc)(Variant &r_ret, Variant &p_self, const Variant **p_args);
typedef void (*VariantConstructFunc)(Variant &r_ret, const Variant **p_args);
-VARIANT_ENUM_CAST(Image::CompressMode);
-//VARIANT_ENUM_CAST(Image::Format);
-
struct _VariantCall {
static void Vector3_dot(Variant &r_ret, Variant &p_self, const Variant **p_args) {
@@ -328,6 +325,7 @@ struct _VariantCall {
VCALL_LOCALMEM0R(Vector2, normalized);
VCALL_LOCALMEM0R(Vector2, length);
VCALL_LOCALMEM0R(Vector2, length_squared);
+ VCALL_LOCALMEM0R(Vector2, is_normalized);
VCALL_LOCALMEM1R(Vector2, distance_to);
VCALL_LOCALMEM1R(Vector2, distance_squared_to);
VCALL_LOCALMEM1R(Vector2, angle_to);
@@ -362,6 +360,7 @@ struct _VariantCall {
VCALL_LOCALMEM0R(Vector3, max_axis);
VCALL_LOCALMEM0R(Vector3, length);
VCALL_LOCALMEM0R(Vector3, length_squared);
+ VCALL_LOCALMEM0R(Vector3, is_normalized);
VCALL_LOCALMEM0R(Vector3, normalized);
VCALL_LOCALMEM0R(Vector3, inverse);
VCALL_LOCALMEM1R(Vector3, snapped);
@@ -418,6 +417,7 @@ struct _VariantCall {
VCALL_LOCALMEM0R(Quat, length);
VCALL_LOCALMEM0R(Quat, length_squared);
VCALL_LOCALMEM0R(Quat, normalized);
+ VCALL_LOCALMEM0R(Quat, is_normalized);
VCALL_LOCALMEM0R(Quat, inverse);
VCALL_LOCALMEM1R(Quat, dot);
VCALL_LOCALMEM1R(Quat, xform);
@@ -611,22 +611,6 @@ struct _VariantCall {
#define VCALL_PTR5R(m_type, m_method) \
static void _call_##m_type##_##m_method(Variant &r_ret, Variant &p_self, const Variant **p_args) { r_ret = reinterpret_cast<m_type *>(p_self._data._ptr)->m_method(*p_args[0], *p_args[1], *p_args[2], *p_args[3], *p_args[4]); }
- VCALL_PTR0R(Image, get_format);
- VCALL_PTR0R(Image, get_width);
- VCALL_PTR0R(Image, get_height);
- VCALL_PTR0R(Image, empty);
- VCALL_PTR0R(Image, get_used_rect);
- VCALL_PTR1R(Image, load);
- VCALL_PTR1R(Image, save_png);
- VCALL_PTR1R(Image, get_rect);
- VCALL_PTR1R(Image, compressed);
- VCALL_PTR0R(Image, decompressed);
- VCALL_PTR3R(Image, resized);
- VCALL_PTR0R(Image, get_data);
- VCALL_PTR3(Image, blit_rect);
- VCALL_PTR1R(Image, converted);
- VCALL_PTR0(Image, fix_alpha_edges);
-
VCALL_PTR0R(Rect3, get_area);
VCALL_PTR0R(Rect3, has_no_area);
VCALL_PTR0R(Rect3, has_no_surface);
@@ -704,6 +688,9 @@ struct _VariantCall {
VCALL_PTR1R(Basis, scaled);
VCALL_PTR0R(Basis, get_scale);
VCALL_PTR0R(Basis, get_euler);
+ VCALL_PTR1(Basis, set_scale);
+ VCALL_PTR1(Basis, set_rotation_euler);
+ VCALL_PTR2(Basis, set_rotation_axis_angle);
VCALL_PTR1R(Basis, tdotx);
VCALL_PTR1R(Basis, tdoty);
VCALL_PTR1R(Basis, tdotz);
@@ -875,6 +862,11 @@ struct _VariantCall {
r_ret = Basis(p_args[0]->operator Vector3(), p_args[1]->operator real_t());
}
+ static void Basis_init3(Variant &r_ret, const Variant **p_args) {
+
+ r_ret = Basis(p_args[0]->operator Vector3());
+ }
+
static void Transform_init1(Variant &r_ret, const Variant **p_args) {
Transform t;
@@ -890,11 +882,6 @@ struct _VariantCall {
r_ret = Transform(p_args[0]->operator Basis(), p_args[1]->operator Vector3());
}
- static void Image_init1(Variant &r_ret, const Variant **p_args) {
-
- r_ret = Image(*p_args[0], *p_args[1], *p_args[2], Image::Format(p_args[3]->operator int()));
- }
-
static void add_constructor(VariantConstructFunc p_func, const Variant::Type p_type,
const String &p_name1 = "", const Variant::Type p_type1 = Variant::NIL,
const String &p_name2 = "", const Variant::Type p_type2 = Variant::NIL,
@@ -1045,7 +1032,6 @@ Variant Variant::construct(const Variant::Type p_type, const Variant **p_args, i
// misc types
case COLOR: return Color();
- case IMAGE: return Image();
case NODE_PATH:
return NodePath(); // 15
case _RID: return RID();
@@ -1127,7 +1113,6 @@ Variant Variant::construct(const Variant::Type p_type, const Variant **p_args, i
// misc types
case COLOR: return p_args[0]->type == Variant::STRING ? Color::html(*p_args[0]) : Color::hex(*p_args[0]);
- case IMAGE: return (Image(*p_args[0]));
case NODE_PATH:
return (NodePath(p_args[0]->operator NodePath())); // 15
case _RID: return (RID(*p_args[0]));
@@ -1429,6 +1414,7 @@ void register_variant_methods() {
ADDFUNC0(VECTOR2, REAL, Vector2, length, varray());
ADDFUNC0(VECTOR2, REAL, Vector2, angle, varray());
ADDFUNC0(VECTOR2, REAL, Vector2, length_squared, varray());
+ ADDFUNC0(VECTOR2, BOOL, Vector2, is_normalized, varray());
ADDFUNC1(VECTOR2, REAL, Vector2, distance_to, VECTOR2, "to", varray());
ADDFUNC1(VECTOR2, REAL, Vector2, distance_squared_to, VECTOR2, "to", varray());
ADDFUNC1(VECTOR2, REAL, Vector2, angle_to, VECTOR2, "to", varray());
@@ -1462,6 +1448,7 @@ void register_variant_methods() {
ADDFUNC0(VECTOR3, INT, Vector3, max_axis, varray());
ADDFUNC0(VECTOR3, REAL, Vector3, length, varray());
ADDFUNC0(VECTOR3, REAL, Vector3, length_squared, varray());
+ ADDFUNC0(VECTOR3, BOOL, Vector3, is_normalized, varray());
ADDFUNC0(VECTOR3, VECTOR3, Vector3, normalized, varray());
ADDFUNC0(VECTOR3, VECTOR3, Vector3, inverse, varray());
ADDFUNC1(VECTOR3, VECTOR3, Vector3, snapped, REAL, "by", varray());
@@ -1497,6 +1484,7 @@ void register_variant_methods() {
ADDFUNC0(QUAT, REAL, Quat, length, varray());
ADDFUNC0(QUAT, REAL, Quat, length_squared, varray());
ADDFUNC0(QUAT, QUAT, Quat, normalized, varray());
+ ADDFUNC0(QUAT, BOOL, Quat, is_normalized, varray());
ADDFUNC0(QUAT, QUAT, Quat, inverse, varray());
ADDFUNC1(QUAT, REAL, Quat, dot, QUAT, "b", varray());
ADDFUNC1(QUAT, VECTOR3, Quat, xform, VECTOR3, "v", varray());
@@ -1513,22 +1501,6 @@ void register_variant_methods() {
ADDFUNC1(COLOR, COLOR, Color, blend, COLOR, "over", varray());
ADDFUNC1(COLOR, STRING, Color, to_html, BOOL, "with_alpha", varray(true));
- ADDFUNC0(IMAGE, INT, Image, get_format, varray());
- ADDFUNC0(IMAGE, INT, Image, get_width, varray());
- ADDFUNC0(IMAGE, INT, Image, get_height, varray());
- ADDFUNC0(IMAGE, BOOL, Image, empty, varray());
- ADDFUNC1(IMAGE, INT, Image, load, STRING, "path", varray(0));
- ADDFUNC1(IMAGE, INT, Image, save_png, STRING, "path", varray(0));
- ADDFUNC0(IMAGE, RECT2, Image, get_used_rect, varray(0));
- ADDFUNC1(IMAGE, IMAGE, Image, get_rect, RECT2, "area", varray(0));
- ADDFUNC1(IMAGE, IMAGE, Image, compressed, INT, "format", varray(0));
- ADDFUNC0(IMAGE, IMAGE, Image, decompressed, varray(0));
- ADDFUNC3(IMAGE, IMAGE, Image, resized, INT, "x", INT, "y", INT, "interpolation", varray(((int)Image::INTERPOLATE_BILINEAR)));
- ADDFUNC0(IMAGE, POOL_BYTE_ARRAY, Image, get_data, varray());
- ADDFUNC3(IMAGE, NIL, Image, blit_rect, IMAGE, "src", RECT2, "src_rect", VECTOR2, "dest", varray(0));
- ADDFUNC1(IMAGE, IMAGE, Image, converted, INT, "format", varray(0));
- ADDFUNC0(IMAGE, NIL, Image, fix_alpha_edges, varray());
-
ADDFUNC0(_RID, INT, RID, get_id, varray());
ADDFUNC0(NODE_PATH, BOOL, NodePath, is_absolute, varray());
@@ -1692,6 +1664,9 @@ void register_variant_methods() {
ADDFUNC0(BASIS, REAL, Basis, determinant, varray());
ADDFUNC2(BASIS, BASIS, Basis, rotated, VECTOR3, "axis", REAL, "phi", varray());
ADDFUNC1(BASIS, BASIS, Basis, scaled, VECTOR3, "scale", varray());
+ ADDFUNC1(BASIS, NIL, Basis, set_scale, VECTOR3, "scale", varray());
+ ADDFUNC1(BASIS, NIL, Basis, set_rotation_euler, VECTOR3, "euler", varray());
+ ADDFUNC2(BASIS, NIL, Basis, set_rotation_axis_angle, VECTOR3, "axis", REAL, "angle", varray());
ADDFUNC0(BASIS, VECTOR3, Basis, get_scale, varray());
ADDFUNC0(BASIS, VECTOR3, Basis, get_euler, varray());
ADDFUNC1(BASIS, REAL, Basis, tdotx, VECTOR3, "with", varray());
@@ -1749,12 +1724,11 @@ void register_variant_methods() {
_VariantCall::add_constructor(_VariantCall::Basis_init1, Variant::BASIS, "x_axis", Variant::VECTOR3, "y_axis", Variant::VECTOR3, "z_axis", Variant::VECTOR3);
_VariantCall::add_constructor(_VariantCall::Basis_init2, Variant::BASIS, "axis", Variant::VECTOR3, "phi", Variant::REAL);
+ _VariantCall::add_constructor(_VariantCall::Basis_init3, Variant::BASIS, "euler", Variant::VECTOR3);
_VariantCall::add_constructor(_VariantCall::Transform_init1, Variant::TRANSFORM, "x_axis", Variant::VECTOR3, "y_axis", Variant::VECTOR3, "z_axis", Variant::VECTOR3, "origin", Variant::VECTOR3);
_VariantCall::add_constructor(_VariantCall::Transform_init2, Variant::TRANSFORM, "basis", Variant::BASIS, "origin", Variant::VECTOR3);
- _VariantCall::add_constructor(_VariantCall::Image_init1, Variant::IMAGE, "width", Variant::INT, "height", Variant::INT, "mipmaps", Variant::BOOL, "format", Variant::INT);
-
/* REGISTER CONSTANTS */
_VariantCall::add_constant(Variant::VECTOR3, "AXIS_X", Vector3::AXIS_X);
@@ -1770,56 +1744,6 @@ void register_variant_methods() {
_VariantCall::add_constant(Variant::INPUT_EVENT, "SCREEN_TOUCH", InputEvent::SCREEN_TOUCH);
_VariantCall::add_constant(Variant::INPUT_EVENT, "SCREEN_DRAG", InputEvent::SCREEN_DRAG);
_VariantCall::add_constant(Variant::INPUT_EVENT, "ACTION", InputEvent::ACTION);
-
- _VariantCall::add_constant(Variant::IMAGE, "COMPRESS_16BIT", Image::COMPRESS_16BIT);
- _VariantCall::add_constant(Variant::IMAGE, "COMPRESS_S3TC", Image::COMPRESS_S3TC);
- _VariantCall::add_constant(Variant::IMAGE, "COMPRESS_PVRTC2", Image::COMPRESS_PVRTC2);
- _VariantCall::add_constant(Variant::IMAGE, "COMPRESS_PVRTC4", Image::COMPRESS_PVRTC4);
- _VariantCall::add_constant(Variant::IMAGE, "COMPRESS_ETC", Image::COMPRESS_ETC);
- _VariantCall::add_constant(Variant::IMAGE, "COMPRESS_ETC2", Image::COMPRESS_ETC2);
-
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_L8", Image::FORMAT_L8);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_LA8", Image::FORMAT_LA8);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_R8", Image::FORMAT_R8);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RG8", Image::FORMAT_RG8);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGB8", Image::FORMAT_RGB8);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGBA8", Image::FORMAT_RGBA8);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGB565", Image::FORMAT_RGB565);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGBA4444", Image::FORMAT_RGBA4444);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGBA5551", Image::FORMAT_DXT1);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RF", Image::FORMAT_RF);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGF", Image::FORMAT_RGF);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGBF", Image::FORMAT_RGBF);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGBAF", Image::FORMAT_RGBAF);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RH", Image::FORMAT_RH);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGH", Image::FORMAT_RGH);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGBH", Image::FORMAT_RGBH);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_RGBAH", Image::FORMAT_RGBAH);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_DXT1", Image::FORMAT_DXT1);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_DXT3", Image::FORMAT_DXT3);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_DXT5", Image::FORMAT_DXT5);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ATI1", Image::FORMAT_ATI1);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ATI2", Image::FORMAT_ATI2);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_BPTC_RGBA", Image::FORMAT_BPTC_RGBA);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_BPTC_RGBF", Image::FORMAT_BPTC_RGBF);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_BPTC_RGBFU", Image::FORMAT_BPTC_RGBFU);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_PVRTC2", Image::FORMAT_PVRTC2);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_PVRTC2A", Image::FORMAT_PVRTC2A);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_PVRTC4", Image::FORMAT_PVRTC4);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_PVRTC4A", Image::FORMAT_PVRTC4A);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ETC", Image::FORMAT_ETC);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ETC2_R11", Image::FORMAT_ETC2_R11);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ETC2_R11S", Image::FORMAT_ETC2_R11S);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ETC2_RG11", Image::FORMAT_ETC2_RG11);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ETC2_RG11S", Image::FORMAT_ETC2_RG11S);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ETC2_RGB8", Image::FORMAT_ETC2_RGB8);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ETC2_RGBA8", Image::FORMAT_ETC2_RGBA8);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_ETC2_RGB8A1", Image::FORMAT_ETC2_RGB8A1);
- _VariantCall::add_constant(Variant::IMAGE, "FORMAT_MAX", Image::FORMAT_MAX);
-
- _VariantCall::add_constant(Variant::IMAGE, "INTERPOLATE_NEAREST", Image::INTERPOLATE_NEAREST);
- _VariantCall::add_constant(Variant::IMAGE, "INTERPOLATE_BILINEAR", Image::INTERPOLATE_BILINEAR);
- _VariantCall::add_constant(Variant::IMAGE, "INTERPOLATE_CUBIC", Image::INTERPOLATE_CUBIC);
}
void unregister_variant_methods() {
diff --git a/core/variant_op.cpp b/core/variant_op.cpp
index e8274d10af..8bae6a168b 100644
--- a/core/variant_op.cpp
+++ b/core/variant_op.cpp
@@ -58,7 +58,6 @@ bool Variant::booleanize(bool &r_valid) const {
case BASIS:
case TRANSFORM:
case COLOR:
- case IMAGE: r_valid = false; return false;
case _RID: return (*reinterpret_cast<const RID *>(_data._mem)).is_valid();
case OBJECT: return _get_obj().obj;
case NODE_PATH: return (*reinterpret_cast<const NodePath *>(_data._mem)) != NodePath();
@@ -283,7 +282,6 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
DEFAULT_OP_PTRREF(==, TRANSFORM, _transform);
DEFAULT_OP_LOCALMEM(==, COLOR, Color);
- DEFAULT_OP_PTRREF(==, IMAGE, _image);
DEFAULT_OP_STR(==, NODE_PATH, NodePath);
DEFAULT_OP_LOCALMEM(==, _RID, RID);
case OBJECT: {
@@ -372,7 +370,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
DEFAULT_OP_FAIL(TRANSFORM);
DEFAULT_OP_FAIL(COLOR);
- DEFAULT_OP_FAIL(IMAGE);
+
DEFAULT_OP_FAIL(NODE_PATH);
DEFAULT_OP_LOCALMEM(<, _RID, RID);
case OBJECT: {
@@ -437,7 +435,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
DEFAULT_OP_FAIL(TRANSFORM);
DEFAULT_OP_FAIL(COLOR);
- DEFAULT_OP_FAIL(IMAGE);
+
DEFAULT_OP_FAIL(NODE_PATH);
DEFAULT_OP_LOCALMEM(<=, _RID, RID);
case OBJECT: {
@@ -500,7 +498,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
DEFAULT_OP_FAIL(TRANSFORM);
DEFAULT_OP_FAIL(COLOR);
- DEFAULT_OP_FAIL(IMAGE);
+
DEFAULT_OP_FAIL(NODE_PATH);
DEFAULT_OP_FAIL(_RID);
DEFAULT_OP_FAIL(OBJECT);
@@ -557,7 +555,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
DEFAULT_OP_FAIL(TRANSFORM);
DEFAULT_OP_FAIL(COLOR);
- DEFAULT_OP_FAIL(IMAGE);
+
DEFAULT_OP_FAIL(NODE_PATH);
DEFAULT_OP_FAIL(_RID);
DEFAULT_OP_FAIL(OBJECT);
@@ -654,7 +652,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
return;
} break;
DEFAULT_OP_FAIL(COLOR);
- DEFAULT_OP_FAIL(IMAGE);
+
DEFAULT_OP_FAIL(NODE_PATH);
DEFAULT_OP_FAIL(_RID);
DEFAULT_OP_FAIL(OBJECT);
@@ -727,7 +725,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
DEFAULT_OP_FAIL(TRANSFORM);
DEFAULT_OP_FAIL(COLOR);
- DEFAULT_OP_FAIL(IMAGE);
+
DEFAULT_OP_FAIL(NODE_PATH);
DEFAULT_OP_FAIL(_RID);
DEFAULT_OP_FAIL(OBJECT);
@@ -769,7 +767,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
DEFAULT_OP_LOCALMEM_POS(VECTOR2, Vector2);
DEFAULT_OP_FAIL(COLOR);
- DEFAULT_OP_FAIL(IMAGE);
+
DEFAULT_OP_FAIL(NODE_PATH);
DEFAULT_OP_FAIL(_RID);
DEFAULT_OP_FAIL(OBJECT);
@@ -809,7 +807,7 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
DEFAULT_OP_FAIL(TRANSFORM);
DEFAULT_OP_FAIL(COLOR);
- DEFAULT_OP_FAIL(IMAGE);
+
DEFAULT_OP_FAIL(NODE_PATH);
DEFAULT_OP_FAIL(_RID);
DEFAULT_OP_FAIL(OBJECT);
@@ -1305,7 +1303,7 @@ void Variant::set(const Variant &p_index, const Variant &p_value, bool *r_valid)
}
}
- } break;
+ } break; // 10
case RECT3: {
if (p_value.type != Variant::VECTOR3)
@@ -1330,7 +1328,7 @@ void Variant::set(const Variant &p_index, const Variant &p_value, bool *r_valid)
return;
}
}
- } break; //sorry naming convention fail :( not like it's used often // 10
+ } break;
case BASIS: {
if (p_value.type != Variant::VECTOR3)
@@ -1480,8 +1478,6 @@ void Variant::set(const Variant &p_index, const Variant &p_value, bool *r_valid)
}
} break;
- case IMAGE: {
- } break;
case NODE_PATH: {
} break; // 15
case _RID: {
@@ -1900,13 +1896,13 @@ void Variant::set(const Variant &p_index, const Variant &p_value, bool *r_valid)
dic->operator[](p_index) = p_value;
valid = true; //always valid, i guess? should this really be ok?
return;
- } break; // 20
- DEFAULT_OP_ARRAY_CMD(ARRAY, Array, ;, (*arr)[index] = p_value; return )
+ } break;
+ DEFAULT_OP_ARRAY_CMD(ARRAY, Array, ;, (*arr)[index] = p_value; return ) // 20
DEFAULT_OP_DVECTOR_SET(POOL_BYTE_ARRAY, uint8_t, p_value.type != Variant::REAL && p_value.type != Variant::INT)
DEFAULT_OP_DVECTOR_SET(POOL_INT_ARRAY, int, p_value.type != Variant::REAL && p_value.type != Variant::INT)
DEFAULT_OP_DVECTOR_SET(POOL_REAL_ARRAY, real_t, p_value.type != Variant::REAL && p_value.type != Variant::INT)
- DEFAULT_OP_DVECTOR_SET(POOL_STRING_ARRAY, String, p_value.type != Variant::STRING) // 25
- DEFAULT_OP_DVECTOR_SET(POOL_VECTOR2_ARRAY, Vector2, p_value.type != Variant::VECTOR2)
+ DEFAULT_OP_DVECTOR_SET(POOL_STRING_ARRAY, String, p_value.type != Variant::STRING)
+ DEFAULT_OP_DVECTOR_SET(POOL_VECTOR2_ARRAY, Vector2, p_value.type != Variant::VECTOR2) // 25
DEFAULT_OP_DVECTOR_SET(POOL_VECTOR3_ARRAY, Vector3, p_value.type != Variant::VECTOR3)
DEFAULT_OP_DVECTOR_SET(POOL_COLOR_ARRAY, Color, p_value.type != Variant::COLOR)
default: return;
@@ -2107,7 +2103,7 @@ Variant Variant::get(const Variant &p_index, bool *r_valid) const {
}
}
- } break;
+ } break; // 10
case RECT3: {
if (p_index.get_type() == Variant::STRING) {
@@ -2126,7 +2122,7 @@ Variant Variant::get(const Variant &p_index, bool *r_valid) const {
return v->size + v->pos;
}
}
- } break; //sorry naming convention fail :( not like it's used often // 10
+ } break;
case BASIS: {
if (p_index.get_type() == Variant::INT || p_index.get_type() == Variant::REAL) {
@@ -2239,8 +2235,6 @@ Variant Variant::get(const Variant &p_index, bool *r_valid) const {
}
} break;
- case IMAGE: {
- } break;
case NODE_PATH: {
} break; // 15
case _RID: {
@@ -2504,13 +2498,13 @@ Variant Variant::get(const Variant &p_index, bool *r_valid) const {
valid = true;
return *res;
}
- } break; // 20
- DEFAULT_OP_ARRAY_CMD(ARRAY, const Array, ;, return (*arr)[index])
+ } break;
+ DEFAULT_OP_ARRAY_CMD(ARRAY, const Array, ;, return (*arr)[index]) // 20
DEFAULT_OP_DVECTOR_GET(POOL_BYTE_ARRAY, uint8_t)
DEFAULT_OP_DVECTOR_GET(POOL_INT_ARRAY, int)
DEFAULT_OP_DVECTOR_GET(POOL_REAL_ARRAY, real_t)
DEFAULT_OP_DVECTOR_GET(POOL_STRING_ARRAY, String)
- DEFAULT_OP_DVECTOR_GET(POOL_VECTOR2_ARRAY, Vector2)
+ DEFAULT_OP_DVECTOR_GET(POOL_VECTOR2_ARRAY, Vector2) // 25
DEFAULT_OP_DVECTOR_GET(POOL_VECTOR3_ARRAY, Vector3)
DEFAULT_OP_DVECTOR_GET(POOL_COLOR_ARRAY, Color)
default: return Variant();
@@ -2774,12 +2768,12 @@ void Variant::get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::REAL, "z"));
p_list->push_back(PropertyInfo(Variant::REAL, "w"));
- } break;
+ } break; // 10
case RECT3: {
p_list->push_back(PropertyInfo(Variant::VECTOR3, "pos"));
p_list->push_back(PropertyInfo(Variant::VECTOR3, "size"));
p_list->push_back(PropertyInfo(Variant::VECTOR3, "end"));
- } break; //sorry naming convention fail :( not like it's used often // 10
+ } break;
case BASIS: {
p_list->push_back(PropertyInfo(Variant::VECTOR3, "x"));
@@ -2807,8 +2801,6 @@ void Variant::get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::INT, "a8"));
} break;
- case IMAGE: {
- } break;
case NODE_PATH: {
} break; // 15
case _RID: {
@@ -2929,12 +2921,13 @@ void Variant::get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::STRING, E->get()));
}
}
- } break; // 20
- case ARRAY:
+ } break;
+ case ARRAY: // 20
case POOL_BYTE_ARRAY:
case POOL_INT_ARRAY:
case POOL_REAL_ARRAY:
case POOL_STRING_ARRAY:
+ case POOL_VECTOR2_ARRAY: // 25
case POOL_VECTOR3_ARRAY:
case POOL_COLOR_ARRAY: {
@@ -3631,10 +3624,6 @@ void Variant::interpolate(const Variant &a, const Variant &b, float c, Variant &
r_dst = reinterpret_cast<const Color *>(a._data._mem)->linear_interpolate(*reinterpret_cast<const Color *>(b._data._mem), c);
}
return;
- case IMAGE: {
- r_dst = a;
- }
- return;
case NODE_PATH: {
r_dst = a;
}
diff --git a/core/variant_parser.cpp b/core/variant_parser.cpp
index 5e12b230be..798a830dd0 100644
--- a/core/variant_parser.cpp
+++ b/core/variant_parser.cpp
@@ -409,7 +409,7 @@ Error VariantParser::_parse_enginecfg(Stream *p_stream, Vector<String> &strings,
Token token;
get_token(p_stream, token, line, r_err_str);
if (token.type != TK_PARENTHESIS_OPEN) {
- r_err_str = "Expected '(' in old-style godot.cfg construct";
+ r_err_str = "Expected '(' in old-style project.godot construct";
return ERR_PARSE_ERROR;
}
@@ -420,7 +420,7 @@ Error VariantParser::_parse_enginecfg(Stream *p_stream, Vector<String> &strings,
CharType c = p_stream->get_char();
if (p_stream->is_eof()) {
- r_err_str = "Unexpected EOF while parsing old-style godot.cfg construct";
+ r_err_str = "Unexpected EOF while parsing old-style project.godot construct";
return ERR_PARSE_ERROR;
}
@@ -504,39 +504,7 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
return OK;
} else if (token.type == TK_IDENTIFIER) {
- /*
- VECTOR2, // 5
- RECT2,
- VECTOR3,
- MATRIX32,
- PLANE,
- QUAT, // 10
- _AABB, //sorry naming convention fail :( not like it's used often
- MATRIX3,
- TRANSFORM,
- // misc types
- COLOR,
- IMAGE, // 15
- NODE_PATH,
- _RID,
- OBJECT,
- INPUT_EVENT,
- DICTIONARY, // 20
- ARRAY,
-
- // arrays
- RAW_ARRAY,
- INT_ARRAY,
- REAL_ARRAY,
- STRING_ARRAY, // 25
- VECTOR2_ARRAY,
- VECTOR3_ARRAY,
- COLOR_ARRAY,
-
- VARIANT_MAX
-
-*/
String id = token.value;
if (id == "true")
value = true;
@@ -681,126 +649,6 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
value = Color(args[0], args[1], args[2], args[3]);
return OK;
- } else if (id == "Image") {
-
- //:|
-
- get_token(p_stream, token, line, r_err_str);
- if (token.type != TK_PARENTHESIS_OPEN) {
- r_err_str = "Expected '('";
- return ERR_PARSE_ERROR;
- }
-
- get_token(p_stream, token, line, r_err_str);
- if (token.type == TK_PARENTHESIS_CLOSE) {
- value = Image(); // just an Image()
- return OK;
- } else if (token.type != TK_NUMBER) {
- r_err_str = "Expected number (width)";
- return ERR_PARSE_ERROR;
- }
-
- get_token(p_stream, token, line, r_err_str);
-
- int width = token.value;
- if (token.type != TK_COMMA) {
- r_err_str = "Expected ','";
- return ERR_PARSE_ERROR;
- }
-
- get_token(p_stream, token, line, r_err_str);
- if (token.type != TK_NUMBER) {
- r_err_str = "Expected number (height)";
- return ERR_PARSE_ERROR;
- }
-
- int height = token.value;
-
- get_token(p_stream, token, line, r_err_str);
- if (token.type != TK_COMMA) {
- r_err_str = "Expected ','";
- return ERR_PARSE_ERROR;
- }
-
- get_token(p_stream, token, line, r_err_str);
-
- bool has_mipmaps = false;
-
- if (token.type == TK_NUMBER) {
- has_mipmaps = bool(token.value);
- } else if (token.type == TK_IDENTIFIER && String(token.value) == "true") {
- has_mipmaps = true;
- } else if (token.type == TK_IDENTIFIER && String(token.value) == "false") {
- has_mipmaps = false;
- } else {
- r_err_str = "Expected number/true/false (mipmaps)";
- return ERR_PARSE_ERROR;
- }
-
- int mipmaps = token.value;
-
- get_token(p_stream, token, line, r_err_str);
- if (token.type != TK_COMMA) {
- r_err_str = "Expected ','";
- return ERR_PARSE_ERROR;
- }
-
- get_token(p_stream, token, line, r_err_str);
- if (token.type != TK_IDENTIFIER) {
- r_err_str = "Expected identifier (format)";
- return ERR_PARSE_ERROR;
- }
-
- String sformat = token.value;
-
- Image::Format format = Image::FORMAT_MAX;
-
- for (int i = 0; i < Image::FORMAT_MAX; i++) {
- if (Image::get_format_name(Image::Format(i)) == sformat) {
- format = Image::Format(i);
- }
- }
-
- if (format == Image::FORMAT_MAX) {
- r_err_str = "Unknown image format: " + String(sformat);
- return ERR_PARSE_ERROR;
- }
-
- int len = Image::get_image_data_size(width, height, format, mipmaps);
-
- PoolVector<uint8_t> buffer;
- buffer.resize(len);
-
- if (buffer.size() != len) {
- r_err_str = "Couldn't allocate image buffer of size: " + itos(len);
- }
-
- {
- PoolVector<uint8_t>::Write w = buffer.write();
-
- for (int i = 0; i < len; i++) {
- get_token(p_stream, token, line, r_err_str);
- if (token.type != TK_COMMA) {
- r_err_str = "Expected ','";
- return ERR_PARSE_ERROR;
- }
-
- get_token(p_stream, token, line, r_err_str);
- if (token.type != TK_NUMBER) {
- r_err_str = "Expected number";
- return ERR_PARSE_ERROR;
- }
-
- w[i] = int(token.value);
- }
- }
-
- Image img(width, height, mipmaps, format, buffer);
-
- value = img;
-
- return OK;
-
} else if (id == "NodePath") {
get_token(p_stream, token, line, r_err_str);
@@ -1273,7 +1121,7 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
value = arr;
return OK;
- } else if (id == "key") { // compatibility with godot.cfg
+ } else if (id == "key") { // compatibility with project.godot
Vector<String> params;
Error err = _parse_enginecfg(p_stream, params, line, r_err_str);
@@ -1309,7 +1157,7 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
value = ie;
return OK;
- } else if (id == "mbutton") { // compatibility with godot.cfg
+ } else if (id == "mbutton") { // compatibility with project.godot
Vector<String> params;
Error err = _parse_enginecfg(p_stream, params, line, r_err_str);
@@ -1324,7 +1172,7 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
value = ie;
return OK;
- } else if (id == "jbutton") { // compatibility with godot.cfg
+ } else if (id == "jbutton") { // compatibility with project.godot
Vector<String> params;
Error err = _parse_enginecfg(p_stream, params, line, r_err_str);
@@ -1339,7 +1187,7 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
value = ie;
return OK;
- } else if (id == "jaxis") { // compatibility with godot.cfg
+ } else if (id == "jaxis") { // compatibility with project.godot
Vector<String> params;
Error err = _parse_enginecfg(p_stream, params, line, r_err_str);
@@ -1357,68 +1205,12 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
value = ie;
return OK;
- } else if (id == "img") { // compatibility with godot.cfg
-
- Token token; // FIXME: no need for this declaration? the first argument in line 509 is a Token& token.
- get_token(p_stream, token, line, r_err_str);
- if (token.type != TK_PARENTHESIS_OPEN) {
- r_err_str = "Expected '(' in old-style godot.cfg construct";
- return ERR_PARSE_ERROR;
- }
-
- while (true) {
- CharType c = p_stream->get_char();
- if (p_stream->is_eof()) {
- r_err_str = "Unexpected EOF in old style godot.cfg img()";
- return ERR_PARSE_ERROR;
- }
- if (c == ')')
- break;
- }
-
- value = Image();
-
- return OK;
} else {
r_err_str = "Unexpected identifier: '" + id + "'.";
return ERR_PARSE_ERROR;
}
- /*
- VECTOR2, // 5
- RECT2,
- VECTOR3,
- MATRIX32,
- PLANE,
- QUAT, // 10
- _AABB, //sorry naming convention fail :( not like it's used often
- MATRIX3,
- TRANSFORM,
-
- // misc types
- COLOR,
- IMAGE, // 15
- NODE_PATH,
- _RID,
- OBJECT,
- INPUT_EVENT,
- DICTIONARY, // 20
- ARRAY,
-
- // arrays
- RAW_ARRAY,
- INT_ARRAY,
- REAL_ARRAY,
- STRING_ARRAY, // 25
- VECTOR2_ARRAY,
- VECTOR3_ARRAY,
- COLOR_ARRAY,
-
- VARIANT_MAX
-
- */
-
return OK;
} else if (token.type == TK_NUMBER) {
@@ -1886,39 +1678,6 @@ Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_str
p_store_string_func(p_store_string_ud, "Color( " + rtosfix(c.r) + ", " + rtosfix(c.g) + ", " + rtosfix(c.b) + ", " + rtosfix(c.a) + " )");
} break;
- case Variant::IMAGE: {
-
- Image img = p_variant;
-
- if (img.empty()) {
- p_store_string_func(p_store_string_ud, "Image()");
- break;
- }
-
- String imgstr = "Image( ";
- imgstr += itos(img.get_width());
- imgstr += ", " + itos(img.get_height());
- imgstr += ", " + String(img.has_mipmaps() ? "true" : "false");
- imgstr += ", " + Image::get_format_name(img.get_format());
-
- String s;
-
- PoolVector<uint8_t> data = img.get_data();
- int len = data.size();
- PoolVector<uint8_t>::Read r = data.read();
- const uint8_t *ptr = r.ptr();
- for (int i = 0; i < len; i++) {
-
- if (i > 0)
- s += ", ";
- s += itos(ptr[i]);
- }
-
- imgstr += ", ";
- p_store_string_func(p_store_string_ud, imgstr);
- p_store_string_func(p_store_string_ud, s);
- p_store_string_func(p_store_string_ud, " )");
- } break;
case Variant::NODE_PATH: {
String str = p_variant;
diff --git a/scene/resources/baked_light.h b/core/version.h
index 8d25c9caa2..80e50e51b9 100644
--- a/scene/resources/baked_light.h
+++ b/core/version.h
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* baked_light.h */
+/* version.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -27,10 +27,11 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#ifndef BAKED_LIGHT_H
-#define BAKED_LIGHT_H
+#include "version_generated.h"
-#include "resource.h"
-#include "scene/resources/texture.h"
-
-#endif // BAKED_LIGHT_H
+#ifdef VERSION_PATCH
+#define VERSION_MKSTRING "" _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR) "." _MKSTR(VERSION_PATCH) "." _MKSTR(VERSION_STATUS) "." _MKSTR(VERSION_REVISION)
+#else
+#define VERSION_MKSTRING "" _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR) "." _MKSTR(VERSION_STATUS) "." _MKSTR(VERSION_REVISION)
+#endif // VERSION_PATCH
+#define VERSION_FULL_NAME "" _MKSTR(VERSION_NAME) " v" VERSION_MKSTRING
diff --git a/doc/Makefile b/doc/Makefile
index d59c77063b..4914c657d2 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -8,25 +8,11 @@ TOOLSDIR = $(BASEDIR)/tools
clean:
rm -rf $(OUTPUTDIR)
-doku:
- rm -rf $(OUTPUTDIR)/doku
- mkdir -p $(OUTPUTDIR)/doku
- pushd $(OUTPUTDIR)/doku
- python2 $(TOOLSDIR)/makedoku.py $(CLASSES)
- popd
-
doxygen:
rm -rf $(OUTPUTDIR)/doxygen
mkdir -p $(OUTPUTDIR)/doxygen
doxygen Doxyfile
-html:
- rm -rf $(OUTPUTDIR)/html
- mkdir -p $(OUTPUTDIR)/html
- pushd $(OUTPUTDIR)/html
- python2 $(TOOLSDIR)/makehtml.py -multipage $(CLASSES)
- popd
-
markdown:
rm -rf $(OUTPUTDIR)/markdown
mkdir -p $(OUTPUTDIR)/markdown
@@ -40,8 +26,3 @@ rst:
pushd $(OUTPUTDIR)/rst
python2 $(TOOLSDIR)/makerst.py $(CLASSES)
popd
-
-textile:
- rm -rf $(OUTPUTDIR)/textile
- mkdir -p $(OUTPUTDIR)/textile
- python3 $(TOOLSDIR)/makedocs.py --input $(CLASSES) --output $(OUTPUTDIR)/textile
diff --git a/doc/base/classes.xml b/doc/base/classes.xml
index 7f9bb4a972..af0a494a84 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -6868,6 +6868,15 @@
<method name="Basis">
<return type="Basis">
</return>
+ <argument index="0" name="euler" type="Vector3">
+ </argument>
+ <description>
+ Create a rotation matrix (in the XYZ convention: first Z, then Y, and X last) from the specified Euler angles, given in the vector format as (third,second,first).
+ </description>
+ </method>
+ <method name="Basis">
+ <return type="Basis">
+ </return>
<argument index="0" name="x_axis" type="Vector3">
</argument>
<argument index="1" name="y_axis" type="Vector3">
@@ -6889,8 +6898,7 @@
<return type="Vector3">
</return>
<description>
- Return Euler angles (in the XYZ convention: first Z, then Y, and X last) from the matrix. Returned vector contains the rotation angles in the format (third,second,first).
- This function only works if the matrix represents a proper rotation.
+ Assuming that the matrix is a proper rotation matrix (orthonormal matrix with determinant +1), return Euler angles (in the XYZ convention: first Z, then Y, and X last). Returned vector contains the rotation angles in the format (third,second,first).
</description>
</method>
<method name="get_orthogonal_index">
@@ -6929,7 +6937,27 @@
<argument index="1" name="phi" type="float">
</argument>
<description>
- Introduce an additional rotation around the given axis by phi. Only relevant when the matrix is being used as a part of [Transform]. The axis must be a normalized vector.
+ Introduce an additional rotation around the given axis by phi (radians). Only relevant when the matrix is being used as a part of [Transform]. The axis must be a normalized vector.
+ </description>
+ </method>
+ <method name="set_rotation_euler">
+ <return type="Basis">
+ </return>
+ <argument index="0" name="euler" type="Vector3">
+ </argument>
+ <description>
+ Changes only the rotation part of the [Basis] to a rotation corresponding to given Euler angles, while preserving the scaling part (as determined by get_scale).
+ </description>
+ </method>
+ <method name="set_rotation_axis_angle">
+ <return type="Basis">
+ </return>
+ <argument index="0" name="axis" type="Vector3">
+ </argument>
+ <argument index="1" name="phi" type="float">
+ </argument>
+ <description>
+ Changes only the rotation part of the [Basis] to a rotation around given axis by phi, while preserving the scaling part (as determined by get_scale).
</description>
</method>
<method name="scaled">
@@ -6941,6 +6969,15 @@
Introduce an additional scaling specified by the given 3D scaling factor. Only relevant when the matrix is being used as a part of [Transform].
</description>
</method>
+ <method name="set_scale">
+ <return type="Basis">
+ </return>
+ <argument index="0" name="scale" type="Vector3">
+ </argument>
+ <description>
+ Changes only the scaling part of the Basis to the specified scaling, while preserving the rotation part (as determined by get_rotation).
+ </description>
+ </method>
<method name="tdotx">
<return type="float">
</return>
@@ -8333,7 +8370,7 @@
<argument index="0" name="state" type="Variant">
</argument>
<description>
- Set the transform state of this CanvasItem. For [Node2D], this is an [Array] with (in order) a [Vector2] for position, a float for rotation and another [Vector2] for scale. For [Control] this is a [Rect2] with the position and size.
+ Set the transform state of this CanvasItem. For [Node2D], this is an [Array] with (in order) a [Vector2] for position, a float for rotation (radians) and another [Vector2] for scale. For [Control] this is a [Rect2] with the position and size.
</description>
</method>
<method name="get_canvas" qualifiers="const">
@@ -8708,14 +8745,14 @@
<return type="float">
</return>
<description>
- Return the base rotation for this layer (helper).
+ Return the base rotation for this layer in radians (helper).
</description>
</method>
<method name="get_rotationd" qualifiers="const">
<return type="float">
</return>
<description>
- Get rotation of the layer in degree.
+ Return the base rotation for this layer in degrees.
</description>
</method>
<method name="get_scale" qualifiers="const">
@@ -8763,14 +8800,14 @@
<argument index="0" name="radians" type="float">
</argument>
<description>
- Set the base rotation for this layer (helper).
+ Set the base rotation for this layer in radians (helper).
</description>
</method>
<method name="set_rotationd">
<argument index="0" name="degrees" type="float">
</argument>
<description>
- Set rotation of the layer in degree.
+ Set the base rotation for this layer in degrees (helper).
</description>
</method>
<method name="set_scale">
@@ -10865,12 +10902,14 @@
<return type="float">
</return>
<description>
+ Return the rotation (in radians)
</description>
</method>
<method name="get_rotation_deg" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the rotation (in degrees)
</description>
</method>
<method name="get_scale" qualifiers="const">
@@ -11185,12 +11224,14 @@
<argument index="0" name="radians" type="float">
</argument>
<description>
+ Set the rotation (in radians).
</description>
</method>
<method name="set_rotation_deg">
<argument index="0" name="degrees" type="float">
</argument>
<description>
+ Set the rotation (in degrees).
</description>
</method>
<method name="set_scale">
@@ -15392,6 +15433,10 @@
<method name="is_valid" qualifiers="const">
<return type="bool">
</return>
+ <argument index="0" name="extended_check" type="bool" default="false">
+ If true, also check if the associated script and object still exists.
+ The extended check is done in debug mode as part of [method GDFunctionState.resume], but you can use this if you know you may be trying to resume without knowing for sure the object and/or script have survived up to that point.
+ </argument>
<description>
Check whether the function call may be resumed. This is not the case if the function state was already resumed.
</description>
@@ -16414,7 +16459,7 @@
Contains global variables accessible from everywhere.
</brief_description>
<description>
- Contains global variables accessible from everywhere. Use the normal [Object] API, such as "Globals.get(variable)", "Globals.set(variable,value)" or "Globals.has(variable)" to access them. Variables stored in godot.cfg are also loaded into globals, making this object very useful for reading custom game configuration options.
+ Contains global variables accessible from everywhere. Use the normal [Object] API, such as "Globals.get(variable)", "Globals.set(variable,value)" or "Globals.has(variable)" to access them. Variables stored in project.godot are also loaded into globals, making this object very useful for reading custom game configuration options.
</description>
<methods>
<method name="add_property_info">
@@ -25812,7 +25857,7 @@
<argument index="0" name="radians" type="float">
</argument>
<description>
- Apply a 'radians' rotation to the 2D node, starting from its current rotation.
+ Apply a rotation (in radians) to the 2D node, starting from its current rotation.
</description>
</method>
<method name="scale">
@@ -26223,7 +26268,7 @@
<return type="String">
</return>
<description>
- Return the name of the host OS. Possible values are: "Android", "BlackBerry 10", "Flash", "Haiku", "iOS", "HTML5", "OSX", "Server", "Windows", "UWP", "X11"
+ Return the name of the host OS. Possible values are: "Android", "Haiku", "iOS", "HTML5", "OSX", "Server", "Windows", "UWP", "X11".
</description>
</method>
<method name="get_power_percent_left">
@@ -27143,7 +27188,7 @@
Persisting connections are saved when the object is serialized to file.
</constant>
<constant name="CONNECT_ONESHOT" value="4">
- One short connections disconnect themselves after emission.
+ One shot connections disconnect themselves after emission.
</constant>
</constants>
</class>
@@ -35144,6 +35189,13 @@
Returns a copy of the quaternion, normalized to unit length.
</description>
</method>
+ <method name="is_normalized">
+ <return type="bool">
+ </return>
+ <description>
+ Returns whether the quaternion is normalized or not.
+ </description>
+ </method>
<method name="slerp">
<return type="Quat">
</return>
@@ -36730,7 +36782,7 @@
<return type="int">
</return>
<description>
- Poll the load. If OK is returned, this means poll will have to be called again. If ERR_EOF is returned, them the load has finished and the resource can be obtained by calling [method get_resource].
+ Poll the load. If OK is returned, this means poll will have to be called again. If ERR_FILE_EOF is returned, them the load has finished and the resource can be obtained by calling [method get_resource].
</description>
</method>
<method name="wait">
@@ -39597,12 +39649,14 @@
<return type="Vector3">
</return>
<description>
+ Return the rotation (in radians).
</description>
</method>
<method name="get_rotation_deg" qualifiers="const">
<return type="Vector3">
</return>
<description>
+ Return the rotation (in degrees).
</description>
</method>
<method name="get_scale" qualifiers="const">
@@ -39771,12 +39825,14 @@
<argument index="0" name="rotation_rad" type="Vector3">
</argument>
<description>
+ Set the rotation (in radians).
</description>
</method>
<method name="set_rotation_deg">
<argument index="0" name="rotation_deg" type="Vector3">
</argument>
<description>
+ Set the rotation (in degrees).
</description>
</method>
<method name="set_scale">
@@ -43034,43 +43090,58 @@
Helper tool to create geometry.
</brief_description>
<description>
- Helper tool to create geometry.
+ The [SurfaceTool] is used to construct a [Mesh] by specifying vertex attributes individually. It can be used to construct a [Mesh] from script. All properties except index need to be added before a call to [method add_vertex]. For example adding vertex colors and UVs looks like
+ [codeblock]
+ var st = SurfaceTool.new()
+ st.begin(Mesh.PRIMITIVE_TRIANGLES)
+ st.add_color(Color(1, 0, 0))
+ st.add_uv(Vector2(0, 0))
+ st.add_vertex(Vector3(0, 0, 0))
+ [/codeblock]
+ The [SurfaceTool] now contains one vertex of a triangle which has a UV coordinate and a specified [Color]. If another vertex were added without calls to [method add_uv] or [method add_color] then the last values would be used.
+ It is very important that vertex attributes are passed [b]before[/b] the call to [method add_vertex], failure to do this will result in an error when committing the vertex information to a mesh.
</description>
<methods>
<method name="add_bones">
<argument index="0" name="bones" type="PoolIntArray">
</argument>
<description>
+ Add an array of bones for the next Vertex to use.
</description>
</method>
<method name="add_color">
<argument index="0" name="color" type="Color">
</argument>
<description>
+ Specify a [Color] for the next Vertex to use.
</description>
</method>
<method name="add_index">
<argument index="0" name="index" type="int">
</argument>
<description>
+ Adds an index to index array if you are using indexed Vertices. Does not need to be called before adding Vertex.
</description>
</method>
<method name="add_normal">
<argument index="0" name="normal" type="Vector3">
</argument>
<description>
+ Specify a normal for the next Vertex to use.
</description>
</method>
<method name="add_smooth_group">
<argument index="0" name="smooth" type="bool">
</argument>
<description>
+ Specify whether current Vertex (if using only Vertex arrays) or current index (if also using index arrays) should utilize smooth normals for normal calculation.
</description>
</method>
<method name="add_tangent">
<argument index="0" name="tangent" type="Plane">
</argument>
<description>
+ Specify a Tangent for the next Vertex to use.
</description>
</method>
<method name="add_triangle_fan">
@@ -43087,40 +43158,47 @@
<argument index="5" name="tangents" type="Array" default="Array()">
</argument>
<description>
+ Insert a triangle fan made of array data into [Mesh] being constructed.
</description>
</method>
<method name="add_uv">
<argument index="0" name="uv" type="Vector2">
</argument>
<description>
+ Specify UV Coordinate for next Vertex to use.
</description>
</method>
<method name="add_uv2">
<argument index="0" name="uv2" type="Vector2">
</argument>
<description>
+ Specify an optional second set of UV coordinates for next Vertex to use.
</description>
</method>
<method name="add_vertex">
<argument index="0" name="vertex" type="Vector3">
</argument>
<description>
+ Specify position of current Vertex. Should be called after specifying other vertex properties (e.g. Color, UV).
</description>
</method>
<method name="add_weights">
<argument index="0" name="weights" type="PoolRealArray">
</argument>
<description>
+ Specify weight value for next Vertex to use.
</description>
</method>
<method name="begin">
<argument index="0" name="primitive" type="int">
</argument>
<description>
+ Called before adding any Vertices. Takes the primitive type as an argument (e.g. Mesh.PRIMITIVE_TRIANGLES).
</description>
</method>
<method name="clear">
<description>
+ Clear all information passed into the surface tool so far.
</description>
</method>
<method name="commit">
@@ -43129,24 +43207,29 @@
<argument index="0" name="existing" type="Mesh" default="NULL">
</argument>
<description>
+ Returns a constructed [Mesh] from current information passed in. If an existing [Mesh] is passed in as an argument, will add an extra surface to the existing [Mesh].
</description>
</method>
<method name="deindex">
<description>
+ Removes index array by expanding Vertex array.
</description>
</method>
<method name="generate_normals">
<description>
+ Generates normals from Vertices so you do not have to do it manually.
</description>
</method>
<method name="index">
<description>
+ Shrinks Vertex array by creating an index array. Avoids reusing Vertices.
</description>
</method>
<method name="set_material">
<argument index="0" name="material" type="Material">
</argument>
<description>
+ Sets [Material] to be used by the [Mesh] you are constructing.
</description>
</method>
</methods>
@@ -46106,6 +46189,7 @@
<return type="float">
</return>
<description>
+ Return the rotation (in radians).
</description>
</method>
<method name="get_scale">
@@ -48039,6 +48123,13 @@ do_property].
Returns a normalized vector to unit length.
</description>
</method>
+ <method name="is_normalized">
+ <return type="bool">
+ </return>
+ <description>
+ Returns whether the vector is normalized or not.
+ </description>
+ </method>
<method name="reflect">
<return type="Vector2">
</return>
@@ -48263,6 +48354,13 @@ do_property].
Return a copy of the normalized vector to unit length. This is the same as v / v.length().
</description>
</method>
+ <method name="is_normalized">
+ <return type="bool">
+ </return>
+ <description>
+ Returns whether the vector is normalized or not.
+ </description>
+ </method>
<method name="outer">
<return type="Basis">
</return>
@@ -48386,6 +48484,7 @@ do_property].
<return type="float">
</return>
<description>
+ Return the steering angle (in radians).
</description>
</method>
<method name="set_brake">
@@ -48416,6 +48515,7 @@ do_property].
<argument index="0" name="steering" type="float">
</argument>
<description>
+ Set the steering angle (in radians).
</description>
</method>
</methods>
@@ -51900,20 +52000,24 @@ do_property].
</class>
<class name="WorldEnvironment" inherits="Spatial" category="Core">
<brief_description>
+ Sets environment properties for the entire scene
</brief_description>
<description>
+ The [WorldEnvironment] node can be added to a scene in order to set default [Environment] variables for the scene. The [WorldEnvironment] can be overridden by an [Environment] node set on the current [Camera]. Additionally, only one [WorldEnvironment] may be instanced in a given scene at a time. The [WorldEnvironment] allows the user to specify default lighting parameters (e.g. ambient lighting), various post-processing effects (e.g. SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, skybox).
</description>
<methods>
<method name="get_environment" qualifiers="const">
<return type="Environment">
</return>
<description>
+ Return the [Environment] currently bound.
</description>
</method>
<method name="set_environment">
<argument index="0" name="env" type="Environment">
</argument>
<description>
+ Set the currently bound [Environment] to the one specified.
</description>
</method>
</methods>
@@ -52238,3 +52342,4 @@ do_property].
</constants>
</class>
</doc>
+
diff --git a/doc/tools/doc_status.py b/doc/tools/doc_status.py
index 1386e91ce1..1386e91ce1 100755..100644
--- a/doc/tools/doc_status.py
+++ b/doc/tools/doc_status.py
diff --git a/doc/tools/locales/es/LC_MESSAGES/makedocs.mo b/doc/tools/locales/es/LC_MESSAGES/makedocs.mo
deleted file mode 100644
index 8d7ea2689e..0000000000
--- a/doc/tools/locales/es/LC_MESSAGES/makedocs.mo
+++ /dev/null
Binary files differ
diff --git a/doc/tools/locales/es/LC_MESSAGES/makedocs.po b/doc/tools/locales/es/LC_MESSAGES/makedocs.po
deleted file mode 100644
index 82115dd897..0000000000
--- a/doc/tools/locales/es/LC_MESSAGES/makedocs.po
+++ /dev/null
@@ -1,142 +0,0 @@
-# Translations template for PROJECT.
-# Copyright (C) 2015 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: makedocs\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2015-10-07 11:47-0600\n"
-"PO-Revision-Date: 2015-10-07 13:10-0600\n"
-"Last-Translator: Jorge Araya Navarro <elcorreo@deshackra.com>\n"
-"Language-Team: \n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.0\n"
-"X-Generator: Poedit 1.8.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: makedocs.py:74
-msgid ""
-"\"<code>{gclass}</code>(Go to page of class {gclass})\":/class_{lkclass}"
-msgstr ""
-"\"<code>{gclass}</code>(Ir a la pagina de la clase {gclass})\":/"
-"class_{lkclass}"
-
-#: makedocs.py:76
-msgid ""
-"\"<code>{gclass}.{method}</code>(Go to page {gclass}, section {method})\":/"
-"class_{lkclass}#{lkmethod}"
-msgstr ""
-"\"<code>{gclass}.{method}</code>(Ir a la pagina {gclass}, sección "
-"{method})\":/class_{lkclass}#{lkmethod}"
-
-#: makedocs.py:79
-msgid "\"<code>{method}</code>(Jump to method {method})\":#{lkmethod}"
-msgstr "\"<code>{method}</code>(Saltar al método {method})\":#{lkmethod}"
-
-#: makedocs.py:81
-msgid " \"{rtype}(Go to page of class {rtype})\":/class_{link} "
-msgstr " \"{rtype}(Ir a la pagina de la clase {rtype})\":/class_{link} "
-
-#: makedocs.py:82
-msgid ""
-"\"*{funcname}*(Jump to description for node {funcname})\":#{link} <b>(</b> "
-msgstr ""
-"\"*{funcname}*(Saltar a la descripción para el nodo {funcname})\":#{link} "
-"<b>(</b> "
-
-#: makedocs.py:87
-msgid "h4. Inherits: "
-msgstr "h4. Hereda de: "
-
-#: makedocs.py:232
-msgid "<doc>'s version attribute missing"
-msgstr "El atributo version de <doc> no existe"
-
-#: makedocs.py:246
-msgid "|_. Index symbol |_. Class name |_. Index symbol |_. Class name |\n"
-msgstr ""
-"|_. Ãndice de símbolo |_. Nombre de la clase |_. Ãndice de símbolo |_. "
-"Nombre de la clase |\n"
-
-#: makedocs.py:305
-msgid ""
-"h4. Category: {}\n"
-"\n"
-msgstr ""
-"h4. Categoría: {}\n"
-"\n"
-
-#: makedocs.py:310
-msgid ""
-"h2. Brief Description\n"
-"\n"
-msgstr ""
-"h2. Descripción breve\n"
-"\n"
-
-#: makedocs.py:312
-msgid ""
-"\"read more\":#more\n"
-"\n"
-msgstr ""
-"\"Leer más\":#more\n"
-"\n"
-
-#: makedocs.py:317
-msgid ""
-"\n"
-"h3. Member Functions\n"
-"\n"
-msgstr ""
-"\n"
-"h3. Funciones miembro\n"
-"\n"
-
-#: makedocs.py:323
-msgid ""
-"\n"
-"h3. Signals\n"
-"\n"
-msgstr ""
-"\n"
-"h3. Señales\n"
-"\n"
-
-#: makedocs.py:331
-msgid ""
-"\n"
-"h3. Numeric Constants\n"
-"\n"
-msgstr ""
-"\n"
-"h3. Constantes numéricas\n"
-"\n"
-
-#: makedocs.py:347
-msgid ""
-"\n"
-"h3(#more). Description\n"
-"\n"
-msgstr ""
-"\n"
-"h3(#more). Descripción\n"
-"\n"
-
-#: makedocs.py:351
-msgid "_Nothing here, yet..._\n"
-msgstr "_Aún nada por aquí..._\n"
-
-#: makedocs.py:355
-msgid ""
-"\n"
-"h3. Member Function Description\n"
-"\n"
-msgstr ""
-"\n"
-"h3. Descripción de las funciones miembro\n"
-"\n"
diff --git a/doc/tools/main.css b/doc/tools/main.css
deleted file mode 100644
index 5eb3df2159..0000000000
--- a/doc/tools/main.css
+++ /dev/null
@@ -1,146 +0,0 @@
-BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV, SPAN {
- font-family: Arial, Geneva, Helvetica, sans-serif;
-}
-
-a {
-
- text-decoration: none;
-
-}
-
-a:hover {
-
- text-decoration: underline;
-}
-
-td.top_table {
-
- padding: 5px;
-}
-
-div.method_doc {
-
- padding-bottom: 30px;
-}
-
-div.method_description {
- margin-left: 30px;
-}
-
-list.inh_class_list {
- margin-left: 30px;
-
-}
-
-div.inh_class_list {
- margin-left: 30px;
-
-}
-
-div.method_doc div.method {
-
- font-size: 12pt;
- font-weight: bold;
-}
-
-span.funcdecl {
-
- color: #202060;
-}
-
-span.funcdef {
-
- color: #202060;
-}
-
-
-span.qualifier {
-
- font-weight: bold;
-}
-
-
-span.symbol {
-
- /*font-weight: bold;*/
- color: #471870;
-}
-
-
-span.datatype {
-
- color: #6a1533;
-}
-
-tr.category_title {
-
- background-color: #333333;
-}
-a.category_title {
- font-weight: bold;
- color: #FFFFFF;
-}
-
-div.method_list {
-
- margin-left: 30px;
-}
-
-div.constant_list {
-
- margin-left: 30px;
-}
-
-div.member_list {
-
- margin-left: 30px;
-}
-
-div.description {
-
- margin-left: 30px;
-}
-
-div.class_description {
-
- margin-left: 30px;
-}
-
-div.method_list li div {
-
- display: inline;
-}
-
-div.member_list li div.member {
-
- display: inline;
-}
-
-div.constant_list li div.constant {
-
- display: inline;
-}
-
-span.member_description {
-
- font-style: italic;
- color: grey;
-}
-
-span.constant_description {
-
- font-style: italic;
- color: grey;
-}
-
-span.identifier {
-
- font-weight: bold;
-}
-
-
-table.class_table td {
-
- vertical-align: top;
-}
-
diff --git a/doc/tools/makedocs.pot b/doc/tools/makedocs.pot
deleted file mode 100644
index be3220f686..0000000000
--- a/doc/tools/makedocs.pot
+++ /dev/null
@@ -1,108 +0,0 @@
-# Translations template for PROJECT.
-# Copyright (C) 2015 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: makedocs 0.1\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2015-10-07 11:47-0600\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.0\n"
-"X-Generator: Poedit 1.8.4\n"
-
-#: makedocs.py:74
-msgid "\"<code>{gclass}</code>(Go to page of class {gclass})\":/class_{lkclass}"
-msgstr ""
-
-#: makedocs.py:76
-msgid "\"<code>{gclass}.{method}</code>(Go to page {gclass}, section {method})\":/class_{lkclass}#{lkmethod}"
-msgstr ""
-
-#: makedocs.py:79
-msgid "\"<code>{method}</code>(Jump to method {method})\":#{lkmethod}"
-msgstr ""
-
-#: makedocs.py:81
-msgid " \"{rtype}(Go to page of class {rtype})\":/class_{link} "
-msgstr ""
-
-#: makedocs.py:82
-msgid "\"*{funcname}*(Jump to description for node {funcname})\":#{link} <b>(</b> "
-msgstr ""
-
-#: makedocs.py:87
-msgid "h4. Inherits: "
-msgstr ""
-
-#: makedocs.py:232
-msgid "<doc>'s version attribute missing"
-msgstr ""
-
-#: makedocs.py:246
-msgid "|_. Index symbol |_. Class name |_. Index symbol |_. Class name |\n"
-msgstr ""
-
-#: makedocs.py:305
-msgid ""
-"h4. Category: {}\n"
-"\n"
-msgstr ""
-
-#: makedocs.py:310
-msgid ""
-"h2. Brief Description\n"
-"\n"
-msgstr ""
-
-#: makedocs.py:312
-msgid ""
-"\"read more\":#more\n"
-"\n"
-msgstr ""
-
-#: makedocs.py:317
-msgid ""
-"\n"
-"h3. Member Functions\n"
-"\n"
-msgstr ""
-
-#: makedocs.py:323
-msgid ""
-"\n"
-"h3. Signals\n"
-"\n"
-msgstr ""
-
-#: makedocs.py:331
-msgid ""
-"\n"
-"h3. Numeric Constants\n"
-"\n"
-msgstr ""
-
-#: makedocs.py:347
-msgid ""
-"\n"
-"h3(#more). Description\n"
-"\n"
-msgstr ""
-
-#: makedocs.py:351
-msgid "_Nothing here, yet..._\n"
-msgstr ""
-
-#: makedocs.py:355
-msgid ""
-"\n"
-"h3. Member Function Description\n"
-"\n"
-msgstr ""
diff --git a/doc/tools/makedocs.py b/doc/tools/makedocs.py
deleted file mode 100644
index 9e0430bfbf..0000000000
--- a/doc/tools/makedocs.py
+++ /dev/null
@@ -1,383 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-#
-# makedocs.py: Generate documentation for Open Project Wiki
-# Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.
-# Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
-# Contributor: Jorge Araya Navarro <elcorreo@deshackra.com>
-#
-
-# IMPORTANT NOTICE:
-# If you are going to modify anything from this file, please be sure to follow
-# the Style Guide for Python Code or often called "PEP8". To do this
-# automagically just install autopep8:
-#
-# $ sudo pip3 install autopep8
-#
-# and run:
-#
-# $ autopep8 makedocs.py
-#
-# Before committing your changes. Also be sure to delete any trailing
-# whitespace you may left.
-#
-# TODO:
-# * Refactor code.
-# * Adapt this script for generating content in other markup formats like
-# reStructuredText, Markdown, DokuWiki, etc.
-#
-# Also check other TODO entries in this script for more information on what is
-# left to do.
-import argparse
-import gettext
-import logging
-import re
-from itertools import zip_longest
-from os import path, listdir
-from xml.etree import ElementTree
-
-
-# add an option to change the verbosity
-logging.basicConfig(level=logging.INFO)
-
-
-def getxmlfloc():
- """ Returns the supposed location of the XML file
- """
- filepath = path.dirname(path.abspath(__file__))
- return path.join(filepath, "class_list.xml")
-
-
-def langavailable():
- """ Return a list of languages available for translation
- """
- filepath = path.join(
- path.dirname(path.abspath(__file__)), "locales")
- files = listdir(filepath)
- choices = [x for x in files]
- choices.insert(0, "none")
- return choices
-
-
-desc = "Generates documentation from a XML file to different markup languages"
-
-parser = argparse.ArgumentParser(description=desc)
-parser.add_argument("--input", dest="xmlfp", default=getxmlfloc(),
- help="Input XML file, default: {}".format(getxmlfloc()))
-parser.add_argument("--output-dir", dest="outputdir", required=True,
- help="Output directory for generated files")
-parser.add_argument("--language", choices=langavailable(), default="none",
- help=("Choose the language of translation"
- " for the output files. Default is English (none). "
- "Note: This is NOT for the documentation itself!"))
-# TODO: add an option for outputting different markup formats
-
-args = parser.parse_args()
-# Let's check if the file and output directory exists
-if not path.isfile(args.xmlfp):
- logging.critical("File not found: {}".format(args.xmlfp))
- exit(1)
-elif not path.isdir(args.outputdir):
- logging.critical("Path does not exist: {}".format(args.outputdir))
- exit(1)
-
-_ = gettext.gettext
-if args.language != "none":
- lang = gettext.translation(domain="makedocs",
- localedir="locales",
- languages=[args.language])
- lang.install()
-
- _ = lang.gettext
-
-# Strings
-C_LINK = _("\"<code>{gclass}</code>(Go to page of class"
- " {gclass})\":/class_{lkclass}")
-MC_LINK = _("\"<code>{gclass}.{method}</code>(Go "
- "to page {gclass}, section {method})\""
- ":/class_{lkclass}#{lkmethod}")
-TM_JUMP = _("\"<code>{method}</code>(Jump to method"
- " {method})\":#{lkmethod}")
-GTC_LINK = _(" \"{rtype}(Go to page of class {rtype})\":/class_{link} ")
-DFN_JUMP = _("\"*{funcname}*(Jump to description for"
- " node {funcname})\":#{link} <b>(</b> ")
-M_ARG_DEFAULT = C_LINK + " {name}={default}"
-M_ARG = C_LINK + " {name}"
-
-OPENPROJ_INH = _("h4. Inherits: ") + C_LINK + "\n\n"
-
-
-def tb(string):
- """ Return a byte representation of a string
- """
- return bytes(string, "UTF-8")
-
-
-def sortkey(c):
- """ Symbols are first, letters second
- """
- if "_" == c.attrib["name"][0]:
- return "A"
- else:
- return c.attrib["name"]
-
-
-def toOP(text):
- """ Convert commands in text to Open Project commands
- """
- # TODO: Make this capture content between [command] ... [/command]
- groups = re.finditer((r'\[html (?P<command>/?\w+/?)(\]| |=)?(\]| |=)?(?P<a'
- 'rg>\w+)?(\]| |=)?(?P<value>"[^"]+")?/?\]'), text)
- alignstr = ""
- for group in groups:
- gd = group.groupdict()
- if gd["command"] == "br/":
- text = text.replace(group.group(0), "\n\n", 1)
- elif gd["command"] == "div":
- if gd["value"] == '"center"':
- alignstr = ("{display:block; margin-left:auto;"
- " margin-right:auto;}")
- elif gd["value"] == '"left"':
- alignstr = "<"
- elif gd["value"] == '"right"':
- alignstr = ">"
- text = text.replace(group.group(0), "\n\n", 1)
- elif gd["command"] == "/div":
- alignstr = ""
- text = text.replace(group.group(0), "\n\n", 1)
- elif gd["command"] == "img":
- text = text.replace(group.group(0), "!{align}{src}!".format(
- align=alignstr, src=gd["value"].strip('"')), 1)
- elif gd["command"] == "b" or gd["command"] == "/b":
- text = text.replace(group.group(0), "*", 1)
- elif gd["command"] == "i" or gd["command"] == "/i":
- text = text.replace(group.group(0), "_", 1)
- elif gd["command"] == "u" or gd["command"] == "/u":
- text = text.replace(group.group(0), "+", 1)
- # Process other non-html commands
- groups = re.finditer((r'\[method ((?P<class>[aA0-zZ9_]+)(?:\.))'
- r'?(?P<method>[aA0-zZ9_]+)\]'), text)
- for group in groups:
- gd = group.groupdict()
- if gd["class"]:
- replacewith = (MC_LINK.format(gclass=gd["class"],
- method=gd["method"],
- lkclass=gd["class"].lower(),
- lkmethod=gd["method"].lower()))
- else:
- # The method is located in the same wiki page
- replacewith = (TM_JUMP.format(method=gd["method"],
- lkmethod=gd["method"].lower()))
-
- text = text.replace(group.group(0), replacewith, 1)
- # Finally, [Classes] are around brackets, make them direct links
- groups = re.finditer(r'\[(?P<class>[az0-AZ0_]+)\]', text)
- for group in groups:
- gd = group.groupdict()
- replacewith = (C_LINK.
- format(gclass=gd["class"],
- lkclass=gd["class"].lower()))
- text = text.replace(group.group(0), replacewith, 1)
-
- return text + "\n\n"
-
-
-def mkfn(node, is_signal=False):
- """ Return a string containing a unsorted item for a function
- """
- finalstr = ""
- name = node.attrib["name"]
- rtype = node.find("return")
- if rtype:
- rtype = rtype.attrib["type"]
- else:
- rtype = "void"
- # write the return type and the function name first
- finalstr += "* "
- # return type
- if not is_signal:
- if rtype != "void":
- finalstr += GTC_LINK.format(
- rtype=rtype,
- link=rtype.lower())
- else:
- finalstr += " void "
-
- # function name
- if not is_signal:
- finalstr += DFN_JUMP.format(
- funcname=name,
- link=name.lower())
- else:
- # Signals have no description
- finalstr += "*{funcname}* <b>(</b>".format(funcname=name)
- # loop for the arguments of the function, if any
- args = []
- for arg in sorted(
- node.iter(tag="argument"),
- key=lambda a: int(a.attrib["index"])):
-
- ntype = arg.attrib["type"]
- nname = arg.attrib["name"]
-
- if "default" in arg.attrib:
- args.insert(-1, M_ARG_DEFAULT.format(
- gclass=ntype,
- lkclass=ntype.lower(),
- name=nname,
- default=arg.attrib["default"]))
- else:
- # No default value present
- args.insert(-1, M_ARG.format(gclass=ntype,
- lkclass=ntype.lower(), name=nname))
- # join the arguments together
- finalstr += ", ".join(args)
- # and, close the function with a )
- finalstr += " <b>)</b>"
- # write the qualifier, if any
- if "qualifiers" in node.attrib:
- qualifier = node.attrib["qualifiers"]
- finalstr += " " + qualifier
-
- finalstr += "\n"
-
- return finalstr
-
-# Let's begin
-tree = ElementTree.parse(args.xmlfp)
-root = tree.getroot()
-
-# Check version attribute exists in <doc>
-if "version" not in root.attrib:
- logging.critical(_("<doc>'s version attribute missing"))
- exit(1)
-
-version = root.attrib["version"]
-classes = sorted(root, key=sortkey)
-# first column is always longer, second column of classes should be shorter
-zclasses = zip_longest(classes[:int(len(classes) / 2 + 1)],
- classes[int(len(classes) / 2 + 1):],
- fillvalue="")
-
-# We write the class_list file and also each class file at once
-with open(path.join(args.outputdir, "class_list.txt"), "wb") as fcl:
- # Write header of table
- fcl.write(tb("|^.\n"))
- fcl.write(tb(_("|_. Index symbol |_. Class name "
- "|_. Index symbol |_. Class name |\n")))
- fcl.write(tb("|-.\n"))
-
- indexletterl = ""
- indexletterr = ""
- for gdclassl, gdclassr in zclasses:
- # write a row #
- # write the index symbol column, left
- if indexletterl != gdclassl.attrib["name"][0]:
- indexletterl = gdclassl.attrib["name"][0]
- fcl.write(tb("| *{}* |".format(indexletterl.upper())))
- else:
- # empty cell
- fcl.write(tb("| |"))
- # write the class name column, left
- fcl.write(tb(C_LINK.format(
- gclass=gdclassl.attrib["name"],
- lkclass=gdclassl.attrib["name"].lower())))
-
- # write the index symbol column, right
- if isinstance(gdclassr, ElementTree.Element):
- if indexletterr != gdclassr.attrib["name"][0]:
- indexletterr = gdclassr.attrib["name"][0]
- fcl.write(tb("| *{}* |".format(indexletterr.upper())))
- else:
- # empty cell
- fcl.write(tb("| |"))
- # We are dealing with an empty string
- else:
- # two empty cell
- fcl.write(tb("| | |\n"))
- # We won't get the name of the class since there is no ElementTree
- # object for the right side of the tuple, so we iterate the next
- # tuple instead
- continue
-
- # write the class name column (if any), right
- fcl.write(tb(C_LINK.format(
- gclass=gdclassl.attrib["name"],
- lkclass=gdclassl.attrib["name"].lower()) + "|\n"))
-
- # row written #
- # now, let's write each class page for each class
- for gdclass in [gdclassl, gdclassr]:
- if not isinstance(gdclass, ElementTree.Element):
- continue
-
- classname = gdclass.attrib["name"]
- with open(path.join(args.outputdir, "{}.txt".format(
- classname.lower())), "wb") as clsf:
- # First level header with the name of the class
- clsf.write(tb("h1. {}\n\n".format(classname)))
- # lay the attributes
- if "inherits" in gdclass.attrib:
- inh = gdclass.attrib["inherits"].strip()
- clsf.write(tb(OPENPROJ_INH.format(gclass=inh,
- lkclass=inh.lower())))
- if "category" in gdclass.attrib:
- clsf.write(tb(_("h4. Category: {}\n\n").
- format(gdclass.attrib["category"].strip())))
- # lay child nodes
- briefd = gdclass.find("brief_description")
- if briefd.text.strip():
- clsf.write(tb(_("h2. Brief Description\n\n")))
- clsf.write(tb(toOP(briefd.text.strip()) +
- _("\"read more\":#more\n\n")))
-
- # Write the list of member functions of this class
- methods = gdclass.find("methods")
- if methods and len(methods) > 0:
- clsf.write(tb(_("\nh3. Member Functions\n\n")))
- for method in methods.iter(tag='method'):
- clsf.write(tb(mkfn(method)))
-
- signals = gdclass.find("signals")
- if signals and len(signals) > 0:
- clsf.write(tb(_("\nh3. Signals\n\n")))
- for signal in signals.iter(tag='signal'):
- clsf.write(tb(mkfn(signal, True)))
- # TODO: <members> tag is necessary to process? it does not
- # exists in class_list.xml file.
-
- consts = gdclass.find("constants")
- if consts and len(consts) > 0:
- clsf.write(tb(_("\nh3. Numeric Constants\n\n")))
- for const in sorted(consts, key=lambda k:
- k.attrib["name"]):
- if const.text.strip():
- clsf.write(tb("* *{name}* = *{value}* - {desc}\n".
- format(
- name=const.attrib["name"],
- value=const.attrib["value"],
- desc=const.text.strip())))
- else:
- # Constant have no description
- clsf.write(tb("* *{name}* = *{value}*\n".
- format(
- name=const.attrib["name"],
- value=const.attrib["value"])))
- descrip = gdclass.find("description")
- clsf.write(tb(_("\nh3(#more). Description\n\n")))
- if descrip.text:
- clsf.write(tb(descrip.text.strip() + "\n"))
- else:
- clsf.write(tb(_("_Nothing here, yet..._\n")))
-
- # and finally, the description for each method
- if methods and len(methods) > 0:
- clsf.write(tb(_("\nh3. Member Function Description\n\n")))
- for method in methods.iter(tag='method'):
- clsf.write(tb("h4(#{n}). {name}\n\n".format(
- n=method.attrib["name"].lower(),
- name=method.attrib["name"])))
- clsf.write(tb(mkfn(method) + "\n"))
- clsf.write(tb(toOP(method.find(
- "description").text.strip())))
diff --git a/doc/tools/makedoku.py b/doc/tools/makedoku.py
deleted file mode 100644
index ad3bfd791d..0000000000
--- a/doc/tools/makedoku.py
+++ /dev/null
@@ -1,499 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import sys
-import xml.etree.ElementTree as ET
-
-input_list = []
-
-
-for arg in sys.argv[1:]:
- input_list.append(arg)
-
-if len(input_list) < 1:
- print("usage: makedoku.py <classes.xml>")
- sys.exit(0)
-
-
-def validate_tag(elem, tag):
- if (elem.tag != tag):
- print("Tag mismatch, expected '" + tag + "', got " + elem.tag)
- sys.exit(255)
-
-
-class_names = []
-classes = {}
-
-
-def make_class_list(class_list, columns):
-
- f = open("class_list.txt", "wb")
- prev = 0
- col_max = len(class_list) / columns + 1
- print("col max is ", col_max)
- col_count = 0
- row_count = 0
- last_initial = ""
- fit_columns = []
-
- for n in range(0, columns):
- fit_columns += [[]]
-
- indexers = []
- last_initial = ""
-
- idx = 0
- for n in class_list:
- col = idx / col_max
- if (col >= columns):
- col = columns - 1
- fit_columns[col] += [n]
- idx += 1
- if (n[:1] != last_initial):
- indexers += [n]
- last_initial = n[:1]
-
- row_max = 0
-
- for n in range(0, columns):
- if (len(fit_columns[n]) > row_max):
- row_max = len(fit_columns[n])
-
- for r in range(0, row_max):
- s = "|"
- for c in range(0, columns):
- if (r >= len(fit_columns[c])):
- continue
-
- classname = fit_columns[c][r]
- initial = classname[0]
- if (classname in indexers):
- s += "**" + initial + "**|"
- else:
- s += " |"
-
- s += "[[" + classname.lower() + "|" + classname + "]]|"
-
- s += "\n"
- f.write(s)
-
-
-def dokuize_text(txt):
-
- return txt
-
-
-def dokuize_text(text):
- pos = 0
- while(True):
- pos = text.find("[", pos)
- if (pos == -1):
- break
-
- endq_pos = text.find("]", pos + 1)
- if (endq_pos == -1):
- break
-
- pre_text = text[:pos]
- post_text = text[endq_pos + 1:]
- tag_text = text[pos + 1:endq_pos]
-
- if (tag_text in class_names):
- tag_text = "[[" + tag_text.lower() + "|" + tag_text + "]]"
- else: # command
- cmd = tag_text
- space_pos = tag_text.find(" ")
- if (cmd.find("html") == 0):
- cmd = tag_text[:space_pos]
- param = tag_text[space_pos + 1:]
- tag_text = "<" + param + ">"
- elif(cmd.find("method") == 0):
- cmd = tag_text[:space_pos]
- param = tag_text[space_pos + 1:]
-
- if (param.find(".") != -1):
- class_param, method_param = param.split(".")
- tag_text = "[[" + class_param.lower() + "#" + method_param + "|" + class_param + '.' + method_param + "]]"
- else:
- tag_text = "[[#" + param + "|" + param + "]]"
- elif (cmd.find("image=") == 0):
- tag_text = "{{" + cmd[6:] + "}}"
- elif (cmd.find("url=") == 0):
- tag_text = "[[" + cmd[4:] + "|"
- elif (cmd == "/url"):
- tag_text = "]]>"
- elif (cmd == "center"):
- tag_text = ""
- elif (cmd == "/center"):
- tag_text = ""
- elif (cmd == "br"):
- tag_text = "\\\\\n"
- elif (cmd == "i" or cmd == "/i"):
- tag_text = "//"
- elif (cmd == "b" or cmd == "/b"):
- tag_text = "**"
- elif (cmd == "u" or cmd == "/u"):
- tag_text = "__"
- else:
- tag_text = "[" + tag_text + "]"
-
- text = pre_text + tag_text + post_text
- pos = len(pre_text) + len(tag_text)
-
- #tnode = ET.SubElement(parent,"div")
- # tnode.text=text
- return text
-
-
-def make_type(t):
- global class_names
- if (t in class_names):
- return "[[" + t.lower() + "|" + t + "]]"
- return t
-
-
-def make_method(f, name, m, declare, event=False):
-
- s = " * "
- ret_type = "void"
- args = list(m)
- mdata = {}
- mdata["argidx"] = []
- for a in args:
- if (a.tag == "return"):
- idx = -1
- elif (a.tag == "argument"):
- idx = int(a.attrib["index"])
- else:
- continue
-
- mdata["argidx"].append(idx)
- mdata[idx] = a
-
- if (not event):
- if (-1 in mdata["argidx"]):
- s += make_type(mdata[-1].attrib["type"])
- else:
- s += "void"
- s += " "
-
- if (declare):
-
- # span.attrib["class"]="funcdecl"
- # a=ET.SubElement(span,"a")
- # a.attrib["name"]=name+"_"+m.attrib["name"]
- # a.text=name+"::"+m.attrib["name"]
- s += "**" + m.attrib["name"] + "**"
- else:
- s += "[[#" + m.attrib["name"] + "|" + m.attrib["name"] + "]]"
-
- s += "**(**"
- argfound = False
- for a in mdata["argidx"]:
- arg = mdata[a]
- if (a < 0):
- continue
- if (a > 0):
- s += ", "
- else:
- s += " "
-
- s += make_type(arg.attrib["type"])
- if ("name" in arg.attrib):
- s += " " + arg.attrib["name"]
- else:
- s += " arg" + str(a)
-
- if ("default" in arg.attrib):
- s += "=" + arg.attrib["default"]
-
- argfound = True
-
- if (argfound):
- s += " "
- s += "**)**"
-
- if ("qualifiers" in m.attrib):
- s += " " + m.attrib["qualifiers"]
-
- f.write(s + "\n")
-
-
-def make_doku_class(node):
-
- name = node.attrib["name"]
-
- f = open(name.lower() + ".txt", "wb")
-
- f.write("====== " + name + " ======\n")
-
- if ("inherits" in node.attrib):
- inh = node.attrib["inherits"].strip()
- f.write("**Inherits:** [[" + inh.lower() + "|" + inh + "]]\\\\\n")
- if ("category" in node.attrib):
- f.write("**Category:** " + node.attrib["category"].strip() + "\\\\\n")
-
- briefd = node.find("brief_description")
- if (briefd != None):
- f.write("===== Brief Description ======\n")
- f.write(dokuize_text(briefd.text.strip()) + "\n")
-
- methods = node.find("methods")
-
- if(methods != None and len(list(methods)) > 0):
- f.write("===== Member Functions ======\n")
- for m in list(methods):
- make_method(f, node.attrib["name"], m, False)
-
- events = node.find("signals")
- if(events != None and len(list(events)) > 0):
- f.write("===== Signals ======\n")
- for m in list(events):
- make_method(f, node.attrib["name"], m, True, True)
-
- members = node.find("members")
-
- if(members != None and len(list(members)) > 0):
- f.write("===== Member Variables ======\n")
-
- for c in list(members):
- s = " * "
- s += make_type(c.attrib["type"]) + " "
- s += "**" + c.attrib["name"] + "**"
- if (c.text.strip() != ""):
- s += " - " + c.text.strip()
- f.write(s + "\n")
-
- constants = node.find("constants")
- if(constants != None and len(list(constants)) > 0):
- f.write("===== Numeric Constants ======\n")
- for c in list(constants):
- s = " * "
- s += "**" + c.attrib["name"] + "**"
- if ("value" in c.attrib):
- s += " = **" + c.attrib["value"] + "**"
- if (c.text.strip() != ""):
- s += " - " + c.text.strip()
- f.write(s + "\n")
-
- descr = node.find("description")
- if (descr != None and descr.text.strip() != ""):
- f.write("===== Description ======\n")
- f.write(dokuize_text(descr.text.strip()) + "\n")
-
- methods = node.find("methods")
-
- if(methods != None and len(list(methods)) > 0):
- f.write("===== Member Function Description ======\n")
- for m in list(methods):
-
- d = m.find("description")
- if (d == None or d.text.strip() == ""):
- continue
- f.write("== " + m.attrib["name"] + " ==\n")
- make_method(f, node.attrib["name"], m, False)
- f.write("\\\\\n")
- f.write(dokuize_text(d.text.strip()))
- f.write("\n")
-
- """
- div=ET.Element("div")
- div.attrib["class"]="class";
-
- a=ET.SubElement(div,"a")
- a.attrib["name"]=node.attrib["name"]
-
- h3=ET.SubElement(a,"h3")
- h3.attrib["class"]="title class_title"
- h3.text=node.attrib["name"]
-
- briefd = node.find("brief_description")
- if (briefd!=None):
- div2=ET.SubElement(div,"div")
- div2.attrib["class"]="description class_description"
- div2.text=briefd.text
-
- if ("inherits" in node.attrib):
- ET.SubElement(div,"br")
-
- div2=ET.SubElement(div,"div")
- div2.attrib["class"]="inheritance";
-
- span=ET.SubElement(div2,"span")
- span.text="Inherits: "
-
- make_type(node.attrib["inherits"],div2)
-
- if ("category" in node.attrib):
- ET.SubElement(div,"br")
-
- div3=ET.SubElement(div,"div")
- div3.attrib["class"]="category";
-
- span=ET.SubElement(div3,"span")
- span.attrib["class"]="category"
- span.text="Category: "
-
- a = ET.SubElement(div3,"a")
- a.attrib["class"]="category_ref"
- a.text=node.attrib["category"]
- catname=a.text
- if (catname.rfind("/")!=-1):
- catname=catname[catname.rfind("/"):]
- catname="CATEGORY_"+catname
-
- if (single_page):
- a.attrib["href"]="#"+catname
- else:
- a.attrib["href"]="category.html#"+catname
-
-
- methods = node.find("methods")
-
- if(methods!=None and len(list(methods))>0):
-
- h4=ET.SubElement(div,"h4")
- h4.text="Public Methods:"
-
- method_table=ET.SubElement(div,"table")
- method_table.attrib["class"]="method_list";
-
- for m in list(methods):
-# li = ET.SubElement(div2, "li")
- method_table.append( make_method_def(node.attrib["name"],m,False) )
-
- events = node.find("signals")
-
- if(events!=None and len(list(events))>0):
- h4=ET.SubElement(div,"h4")
- h4.text="Events:"
-
- event_table=ET.SubElement(div,"table")
- event_table.attrib["class"]="method_list";
-
- for m in list(events):
-# li = ET.SubElement(div2, "li")
- event_table.append( make_method_def(node.attrib["name"],m,False,True) )
-
-
- members = node.find("members")
- if(members!=None and len(list(members))>0):
-
- h4=ET.SubElement(div,"h4")
- h4.text="Public Variables:"
- div2=ET.SubElement(div,"div")
- div2.attrib["class"]="member_list";
-
- for c in list(members):
-
- li = ET.SubElement(div2, "li")
- div3=ET.SubElement(li,"div")
- div3.attrib["class"]="member";
- make_type(c.attrib["type"],div3)
- span=ET.SubElement(div3,"span")
- span.attrib["class"]="identifier member_name"
- span.text=" "+c.attrib["name"]+" "
- span=ET.SubElement(div3,"span")
- span.attrib["class"]="member_description"
- span.text=c.text
-
-
- constants = node.find("constants")
- if(constants!=None and len(list(constants))>0):
-
- h4=ET.SubElement(div,"h4")
- h4.text="Constants:"
- div2=ET.SubElement(div,"div")
- div2.attrib["class"]="constant_list";
-
- for c in list(constants):
- li = ET.SubElement(div2, "li")
- div3=ET.SubElement(li,"div")
- div3.attrib["class"]="constant";
-
- span=ET.SubElement(div3,"span")
- span.attrib["class"]="identifier constant_name"
- span.text=c.attrib["name"]+" "
- if ("value" in c.attrib):
- span=ET.SubElement(div3,"span")
- span.attrib["class"]="symbol"
- span.text="= "
- span=ET.SubElement(div3,"span")
- span.attrib["class"]="constant_value"
- span.text=c.attrib["value"]+" "
- span=ET.SubElement(div3,"span")
- span.attrib["class"]="constant_description"
- span.text=c.text
-
-# ET.SubElement(div,"br")
-
-
- descr=node.find("description")
- if (descr!=None and descr.text.strip()!=""):
-
- h4=ET.SubElement(div,"h4")
- h4.text="Description:"
-
- make_text_def(node.attrib["name"],div,descr.text)
-# div2=ET.SubElement(div,"div")
-# div2.attrib["class"]="description";
-# div2.text=descr.text
-
-
-
- if(methods!=None or events!=None):
-
- h4=ET.SubElement(div,"h4")
- h4.text="Method Documentation:"
- iter_list = []
- if (methods!=None):
- iter_list+=list(methods)
- if (events!=None):
- iter_list+=list(events)
-
- for m in iter_list:
-
- descr=m.find("description")
-
- if (descr==None or descr.text.strip()==""):
- continue;
-
- div2=ET.SubElement(div,"div")
- div2.attrib["class"]="method_doc";
-
-
- div2.append( make_method_def(node.attrib["name"],m,True) )
- #anchor = ET.SubElement(div2, "a")
- #anchor.attrib["name"] =
- make_text_def(node.attrib["name"],div2,descr.text)
- #div3=ET.SubElement(div2,"div")
- #div3.attrib["class"]="description";
- #div3.text=descr.text
-
-
- return div
-"""
-for file in input_list:
- tree = ET.parse(file)
- doc = tree.getroot()
-
- if ("version" not in doc.attrib):
- print("Version missing from 'doc'")
- sys.exit(255)
-
- version = doc.attrib["version"]
-
- for c in list(doc):
- if (c.attrib["name"] in class_names):
- continue
- class_names.append(c.attrib["name"])
- classes[c.attrib["name"]] = c
-
-
-class_names.sort()
-
-make_class_list(class_names, 4)
-
-for cn in class_names:
- c = classes[cn]
- make_doku_class(c)
diff --git a/doc/tools/makehtml.py b/doc/tools/makehtml.py
deleted file mode 100644
index 3ecb8220cb..0000000000
--- a/doc/tools/makehtml.py
+++ /dev/null
@@ -1,689 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-import sys
-import xml.etree.ElementTree as ET
-from xml.sax.saxutils import escape, unescape
-
-html_escape_table = {
- '"': "&quot;",
- "'": "&apos;"
-}
-
-html_unescape_table = {v: k for k, v in html_escape_table.items()}
-
-
-def html_escape(text):
- return escape(text, html_escape_table)
-
-
-def html_unescape(text):
- return unescape(text, html_unescape_table)
-
-input_list = []
-
-single_page = True
-
-for arg in sys.argv[1:]:
- if arg[:1] == "-":
- if arg[1:] == "multipage":
- single_page = False
- if arg[1:] == "singlepage":
- single_page = True
- else:
- input_list.append(arg)
-
-if len(input_list) < 1:
- print("usage: makehtml.py <classes.xml>")
- sys.exit(0)
-
-
-def validate_tag(elem, tag):
- if (elem.tag != tag):
- print("Tag mismatch, expected '" + tag + "', got " + elem.tag)
- sys.exit(255)
-
-
-def make_html_bottom(body):
- # make_html_top(body,True)
- ET.SubElement(body, "hr")
- copyright = ET.SubElement(body, "span")
- copyright.text = "Copyright 2008-2010 Codenix SRL"
-
-
-def make_html_top(body, bottom=False):
-
- if (bottom):
- ET.SubElement(body, "hr")
-
- table = ET.SubElement(body, "table")
- table.attrib["class"] = "top_table"
- tr = ET.SubElement(table, "tr")
- td = ET.SubElement(tr, "td")
- td.attrib["class"] = "top_table"
-
- img = ET.SubElement(td, "image")
- img.attrib["src"] = "images/logo.png"
- td = ET.SubElement(tr, "td")
- td.attrib["class"] = "top_table"
- a = ET.SubElement(td, "a")
- a.attrib["href"] = "index.html"
- a.text = "Index"
- td = ET.SubElement(tr, "td")
- td.attrib["class"] = "top_table"
- a = ET.SubElement(td, "a")
- a.attrib["href"] = "alphabetical.html"
- a.text = "Classes"
- td = ET.SubElement(tr, "td")
- td.attrib["class"] = "top_table"
- a = ET.SubElement(td, "a")
- a.attrib["href"] = "category.html"
- a.text = "Categories"
- td = ET.SubElement(tr, "td")
- a = ET.SubElement(td, "a")
- a.attrib["href"] = "inheritance.html"
- a.text = "Inheritance"
- if (not bottom):
- ET.SubElement(body, "hr")
-
-
-def make_html_class_list(class_list, columns):
-
- div = ET.Element("div")
- div.attrib["class"] = "ClassList"
-
- h1 = ET.SubElement(div, "h2")
- h1.text = "Alphabetical Class List"
-
- table = ET.SubElement(div, "table")
- table.attrib["class"] = "class_table"
- table.attrib["width"] = "100%"
- prev = 0
-
- col_max = len(class_list) / columns + 1
- print("col max is ", col_max)
- col_count = 0
- row_count = 0
- last_initial = ""
- fit_columns = []
-
- for n in range(0, columns):
- fit_columns += [[]]
-
- indexers = []
- last_initial = ""
-
- idx = 0
- for n in class_list:
- col = int(idx / col_max)
- if (col >= columns):
- col = columns - 1
- fit_columns[col] += [n]
- idx += 1
- if (n[:1] != last_initial):
- indexers += [n]
- last_initial = n[:1]
-
- row_max = 0
-
- for n in range(0, columns):
- if (len(fit_columns[n]) > row_max):
- row_max = len(fit_columns[n])
-
- for r in range(0, row_max):
- tr = ET.SubElement(table, "tr")
- for c in range(0, columns):
- tdi = ET.SubElement(tr, "td")
- tdi.attrib["align"] = "right"
- td = ET.SubElement(tr, "td")
- if (r >= len(fit_columns[c])):
- continue
-
- classname = fit_columns[c][r]
- print(classname)
- if (classname in indexers):
-
- span = ET.SubElement(tdi, "span")
- span.attrib["class"] = "class_index_letter"
- span.text = classname[:1].upper()
-
- if (single_page):
- link = "#" + classname
- else:
- link = classname + ".html"
-
- a = ET.SubElement(td, "a")
- a.attrib["href"] = link
- a.text = classname
-
- if (not single_page):
- cat_class_list = ET.Element("html")
- csscc = ET.SubElement(cat_class_list, "link")
- csscc.attrib["href"] = "main.css"
- csscc.attrib["rel"] = "stylesheet"
- csscc.attrib["type"] = "text/css"
- bodycc = ET.SubElement(cat_class_list, "body")
- make_html_top(bodycc)
-
- cat_class_parent = bodycc
- else:
- cat_class_parent = div
-
- h1 = ET.SubElement(cat_class_parent, "h2")
- h1.text = "Class List By Category"
-
- class_cat_table = {}
- class_cat_list = []
-
- for c in class_list:
- clss = classes[c]
- if ("category" in clss.attrib):
- class_cat = clss.attrib["category"]
- else:
- class_cat = "Core"
- if (class_cat.find("/") != -1):
- class_cat = class_cat[class_cat.rfind("/") + 1:]
- if (not class_cat in class_cat_list):
- class_cat_list.append(class_cat)
- class_cat_table[class_cat] = []
- class_cat_table[class_cat].append(c)
-
- class_cat_list.sort()
-
- ct = ET.SubElement(cat_class_parent, "table")
- for cl in class_cat_list:
- l = class_cat_table[cl]
- l.sort()
- tr = ET.SubElement(ct, "tr")
- tr.attrib["class"] = "category_title"
- td = ET.SubElement(ct, "td")
- td.attrib["class"] = "category_title"
-
- a = ET.SubElement(td, "a")
- a.attrib["class"] = "category_title"
- a.text = cl
- a.attrib["name"] = "CATEGORY_" + cl
-
- td = ET.SubElement(ct, "td")
- td.attrib["class"] = "category_title"
-
- for clt in l:
- tr = ET.SubElement(ct, "tr")
- td = ET.SubElement(ct, "td")
- make_type(clt, td)
- clss = classes[clt]
- bd = clss.find("brief_description")
- bdtext = ""
- if (bd != None):
- bdtext = bd.text
- td = ET.SubElement(ct, "td")
- td.text = bdtext
-
- if (not single_page):
- make_html_bottom(bodycc)
- catet_out = ET.ElementTree(cat_class_list)
- catet_out.write("category.html")
-
- if (not single_page):
- inh_class_list = ET.Element("html")
- cssic = ET.SubElement(inh_class_list, "link")
- cssic.attrib["href"] = "main.css"
- cssic.attrib["rel"] = "stylesheet"
- cssic.attrib["type"] = "text/css"
- bodyic = ET.SubElement(inh_class_list, "body")
- make_html_top(bodyic)
- inh_class_parent = bodyic
- else:
- inh_class_parent = div
-
- h1 = ET.SubElement(inh_class_parent, "h2")
- h1.text = "Class List By Inheritance"
-
- itemlist = ET.SubElement(inh_class_parent, "list")
-
- class_inh_table = {}
-
- def add_class(clss):
- if (clss.attrib["name"] in class_inh_table):
- return # already added
- parent_list = None
-
- if ("inherits" in clss.attrib):
- inhc = clss.attrib["inherits"]
- if (not (inhc in class_inh_table)):
- add_class(classes[inhc])
-
- parent_list = class_inh_table[inhc].find("div")
- if (parent_list == None):
- parent_div = ET.SubElement(class_inh_table[inhc], "div")
- parent_list = ET.SubElement(parent_div, "list")
- parent_div.attrib["class"] = "inh_class_list"
- else:
- parent_list = parent_list.find("list")
-
- else:
- parent_list = itemlist
-
- item = ET.SubElement(parent_list, "li")
-# item.attrib["class"]="inh_class_list"
- class_inh_table[clss.attrib["name"]] = item
- make_type(clss.attrib["name"], item)
-
- for c in class_list:
- add_class(classes[c])
-
- if (not single_page):
- make_html_bottom(bodyic)
- catet_out = ET.ElementTree(inh_class_list)
- catet_out.write("inheritance.html")
-
- # h1=ET.SubElement(div,"h2")
- #h1.text="Class List By Inheritance"
-
- return div
-
-
-def make_type(p_type, p_parent):
- if (p_type == "RefPtr"):
- p_type = "Resource"
-
- if (p_type in class_names):
- a = ET.SubElement(p_parent, "a")
- a.attrib["class"] = "datatype_existing"
- a.text = p_type + " "
- if (single_page):
- a.attrib["href"] = "#" + p_type
- else:
- a.attrib["href"] = p_type + ".html"
- else:
- span = ET.SubElement(p_parent, "span")
- span.attrib["class"] = "datatype"
- span.text = p_type + " "
-
-
-def make_text_def(class_name, parent, text):
- text = html_escape(text)
- pos = 0
- while(True):
- pos = text.find("[", pos)
- if (pos == -1):
- break
-
- endq_pos = text.find("]", pos + 1)
- if (endq_pos == -1):
- break
-
- pre_text = text[:pos]
- post_text = text[endq_pos + 1:]
- tag_text = text[pos + 1:endq_pos]
-
- if (tag_text in class_names):
- if (single_page):
- tag_text = '<a href="#' + tag_text + '">' + tag_text + '</a>'
- else:
- tag_text = '<a href="' + tag_text + '.html">' + tag_text + '</a>'
- else: # command
- cmd = tag_text
- space_pos = tag_text.find(" ")
- if (cmd.find("html") == 0):
- cmd = tag_text[:space_pos]
- param = tag_text[space_pos + 1:]
- tag_text = "<" + param + ">"
- elif(cmd.find("method") == 0):
- cmd = tag_text[:space_pos]
- param = tag_text[space_pos + 1:]
-
- if (not single_page and param.find(".") != -1):
- class_param, method_param = param.split(".")
- tag_text = tag_text = '<a href="' + class_param + '.html#' + class_param + "_" + method_param + '">' + class_param + '.' + method_param + '()</a>'
- else:
- tag_text = tag_text = '<a href="#' + class_name + "_" + param + '">' + class_name + '.' + param + '()</a>'
- elif (cmd.find("image=") == 0):
- print("found image: " + cmd)
- tag_text = "<img src=" + cmd[6:] + "/>"
- elif (cmd.find("url=") == 0):
- tag_text = "<a href=" + cmd[4:] + ">"
- elif (cmd == "/url"):
- tag_text = "</a>"
- elif (cmd == "center"):
- tag_text = "<div align=\"center\">"
- elif (cmd == "/center"):
- tag_text = "</div>"
- elif (cmd == "br"):
- tag_text = "<br/>"
- elif (cmd == "i" or cmd == "/i" or cmd == "b" or cmd == "/b" or cmd == "u" or cmd == "/u"):
- tag_text = "<" + tag_text + ">" # html direct mapping
- else:
- tag_text = "[" + tag_text + "]"
-
- text = pre_text + tag_text + post_text
- pos = len(pre_text) + len(tag_text)
-
- #tnode = ET.SubElement(parent,"div")
- # tnode.text=text
- text = "<div class=\"description\">" + text + "</div>"
- try:
- tnode = ET.XML(text)
- parent.append(tnode)
- except:
- print("Error parsing description text: '" + text + "'")
- sys.exit(255)
-
- return tnode
-
-
-def make_method_def(name, m, declare, event=False):
-
- mdata = {}
-
- if (not declare):
- div = ET.Element("tr")
- div.attrib["class"] = "method"
- ret_parent = ET.SubElement(div, "td")
- ret_parent.attrib["align"] = "right"
- func_parent = ET.SubElement(div, "td")
- else:
- div = ET.Element("div")
- div.attrib["class"] = "method"
- ret_parent = div
- func_parent = div
-
- mdata["argidx"] = []
- mdata["name"] = m.attrib["name"]
- qualifiers = ""
- if ("qualifiers" in m.attrib):
- qualifiers = m.attrib["qualifiers"]
-
- args = list(m)
- for a in args:
- if (a.tag == "return"):
- idx = -1
- elif (a.tag == "argument"):
- idx = int(a.attrib["index"])
- else:
- continue
-
- mdata["argidx"].append(idx)
- mdata[idx] = a
-
- if (not event):
- if (-1 in mdata["argidx"]):
- make_type(mdata[-1].attrib["type"], ret_parent)
- mdata["argidx"].remove(-1)
- else:
- make_type("void", ret_parent)
-
- span = ET.SubElement(func_parent, "span")
- if (declare):
- span.attrib["class"] = "funcdecl"
- a = ET.SubElement(span, "a")
- a.attrib["name"] = name + "_" + m.attrib["name"]
- a.text = name + "::" + m.attrib["name"]
- else:
- span.attrib["class"] = "identifier funcdef"
- a = ET.SubElement(span, "a")
- a.attrib["href"] = "#" + name + "_" + m.attrib["name"]
- a.text = m.attrib["name"]
-
- span = ET.SubElement(func_parent, "span")
- span.attrib["class"] = "symbol"
- span.text = " ("
-
- for a in mdata["argidx"]:
- arg = mdata[a]
- if (a > 0):
- span = ET.SubElement(func_parent, "span")
- span.text = ", "
- else:
- span = ET.SubElement(func_parent, "span")
- span.text = " "
-
- make_type(arg.attrib["type"], func_parent)
-
- span = ET.SubElement(func_parent, "span")
- span.text = arg.attrib["name"]
- if ("default" in arg.attrib):
- span.text = span.text + "=" + arg.attrib["default"]
-
- span = ET.SubElement(func_parent, "span")
- span.attrib["class"] = "symbol"
- if (len(mdata["argidx"])):
- span.text = " )"
- else:
- span.text = ")"
-
- if (qualifiers):
- span = ET.SubElement(func_parent, "span")
- span.attrib["class"] = "qualifier"
- span.text = " " + qualifiers
-
- return div
-
-
-def make_html_class(node):
-
- div = ET.Element("div")
- div.attrib["class"] = "class"
-
- a = ET.SubElement(div, "a")
- a.attrib["name"] = node.attrib["name"]
-
- h3 = ET.SubElement(a, "h3")
- h3.attrib["class"] = "title class_title"
- h3.text = node.attrib["name"]
-
- briefd = node.find("brief_description")
- if (briefd != None):
- div2 = ET.SubElement(div, "div")
- div2.attrib["class"] = "description class_description"
- div2.text = briefd.text
-
- if ("inherits" in node.attrib):
- ET.SubElement(div, "br")
-
- div2 = ET.SubElement(div, "div")
- div2.attrib["class"] = "inheritance"
-
- span = ET.SubElement(div2, "span")
- span.text = "Inherits: "
-
- make_type(node.attrib["inherits"], div2)
-
- if ("category" in node.attrib):
- ET.SubElement(div, "br")
-
- div3 = ET.SubElement(div, "div")
- div3.attrib["class"] = "category"
-
- span = ET.SubElement(div3, "span")
- span.attrib["class"] = "category"
- span.text = "Category: "
-
- a = ET.SubElement(div3, "a")
- a.attrib["class"] = "category_ref"
- a.text = node.attrib["category"]
- catname = a.text
- if (catname.rfind("/") != -1):
- catname = catname[catname.rfind("/"):]
- catname = "CATEGORY_" + catname
-
- if (single_page):
- a.attrib["href"] = "#" + catname
- else:
- a.attrib["href"] = "category.html#" + catname
-
- methods = node.find("methods")
-
- if(methods != None and len(list(methods)) > 0):
-
- h4 = ET.SubElement(div, "h4")
- h4.text = "Public Methods:"
-
- method_table = ET.SubElement(div, "table")
- method_table.attrib["class"] = "method_list"
-
- for m in list(methods):
- #li = ET.SubElement(div2, "li")
- method_table.append(make_method_def(node.attrib["name"], m, False))
-
- events = node.find("signals")
-
- if(events != None and len(list(events)) > 0):
- h4 = ET.SubElement(div, "h4")
- h4.text = "Events:"
-
- event_table = ET.SubElement(div, "table")
- event_table.attrib["class"] = "method_list"
-
- for m in list(events):
- #li = ET.SubElement(div2, "li")
- event_table.append(make_method_def(node.attrib["name"], m, False, True))
-
- members = node.find("members")
- if(members != None and len(list(members)) > 0):
-
- h4 = ET.SubElement(div, "h4")
- h4.text = "Public Variables:"
- div2 = ET.SubElement(div, "div")
- div2.attrib["class"] = "member_list"
-
- for c in list(members):
-
- li = ET.SubElement(div2, "li")
- div3 = ET.SubElement(li, "div")
- div3.attrib["class"] = "member"
- make_type(c.attrib["type"], div3)
- span = ET.SubElement(div3, "span")
- span.attrib["class"] = "identifier member_name"
- span.text = " " + c.attrib["name"] + " "
- span = ET.SubElement(div3, "span")
- span.attrib["class"] = "member_description"
- span.text = c.text
-
- constants = node.find("constants")
- if(constants != None and len(list(constants)) > 0):
-
- h4 = ET.SubElement(div, "h4")
- h4.text = "Constants:"
- div2 = ET.SubElement(div, "div")
- div2.attrib["class"] = "constant_list"
-
- for c in list(constants):
- li = ET.SubElement(div2, "li")
- div3 = ET.SubElement(li, "div")
- div3.attrib["class"] = "constant"
-
- span = ET.SubElement(div3, "span")
- span.attrib["class"] = "identifier constant_name"
- span.text = c.attrib["name"] + " "
- if ("value" in c.attrib):
- span = ET.SubElement(div3, "span")
- span.attrib["class"] = "symbol"
- span.text = "= "
- span = ET.SubElement(div3, "span")
- span.attrib["class"] = "constant_value"
- span.text = c.attrib["value"] + " "
- span = ET.SubElement(div3, "span")
- span.attrib["class"] = "constant_description"
- span.text = c.text
-
-# ET.SubElement(div,"br")
-
- descr = node.find("description")
- if (descr != None and descr.text.strip() != ""):
- h4 = ET.SubElement(div, "h4")
- h4.text = "Description:"
-
- make_text_def(node.attrib["name"], div, descr.text)
-# div2=ET.SubElement(div,"div")
-# div2.attrib["class"]="description";
-# div2.text=descr.text
-
- if(methods != None or events != None):
-
- h4 = ET.SubElement(div, "h4")
- h4.text = "Method Documentation:"
- iter_list = []
- if (methods != None):
- iter_list += list(methods)
- if (events != None):
- iter_list += list(events)
-
- for m in iter_list:
-
- descr = m.find("description")
-
- if (descr == None or descr.text.strip() == ""):
- continue
-
- div2 = ET.SubElement(div, "div")
- div2.attrib["class"] = "method_doc"
-
- div2.append(make_method_def(node.attrib["name"], m, True))
- #anchor = ET.SubElement(div2, "a")
- # anchor.attrib["name"] =
- make_text_def(node.attrib["name"], div2, descr.text)
- # div3=ET.SubElement(div2,"div")
- # div3.attrib["class"]="description";
- # div3.text=descr.text
-
- return div
-
-class_names = []
-classes = {}
-
-for file in input_list:
- tree = ET.parse(file)
- doc = tree.getroot()
-
- if ("version" not in doc.attrib):
- print("Version missing from 'doc'")
- sys.exit(255)
-
- version = doc.attrib["version"]
-
- for c in list(doc):
- if (c.attrib["name"] in class_names):
- continue
- class_names.append(c.attrib["name"])
- classes[c.attrib["name"]] = c
-
-html = ET.Element("html")
-css = ET.SubElement(html, "link")
-css.attrib["href"] = "main.css"
-css.attrib["rel"] = "stylesheet"
-css.attrib["type"] = "text/css"
-
-body = ET.SubElement(html, "body")
-if (not single_page):
- make_html_top(body)
-
-
-class_names.sort()
-
-body.append(make_html_class_list(class_names, 5))
-
-for cn in class_names:
- c = classes[cn]
- if (single_page):
- body.append(make_html_class(c))
- else:
- html2 = ET.Element("html")
- css = ET.SubElement(html2, "link")
- css.attrib["href"] = "main.css"
- css.attrib["rel"] = "stylesheet"
- css.attrib["type"] = "text/css"
- body2 = ET.SubElement(html2, "body")
- make_html_top(body2)
- body2.append(make_html_class(c))
- make_html_bottom(body2)
- et_out = ET.ElementTree(html2)
- et_out.write(c.attrib["name"] + ".html")
-
-
-et_out = ET.ElementTree(html)
-if (single_page):
- et_out.write("singlepage.html")
-else:
- make_html_bottom(body)
- et_out.write("alphabetical.html")
diff --git a/drivers/convex_decomp/SCsub b/drivers/convex_decomp/SCsub
index ee39fd2631..f017e55120 100644
--- a/drivers/convex_decomp/SCsub
+++ b/drivers/convex_decomp/SCsub
@@ -4,4 +4,13 @@ Import('env')
env.add_source_files(env.drivers_sources, "*.cpp")
+# Thirdparty dependencies
+thirdparty_dir = "#thirdparty/b2d_convexdecomp/"
+thirdparty_sources = [
+ "b2Polygon.cpp",
+ "b2Triangle.cpp",
+]
+thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
+env.add_source_files(env.drivers_sources, thirdparty_sources)
+
Export('env')
diff --git a/drivers/convex_decomp/b2d_decompose.cpp b/drivers/convex_decomp/b2d_decompose.cpp
index f918b66c31..d9011b8eab 100644
--- a/drivers/convex_decomp/b2d_decompose.cpp
+++ b/drivers/convex_decomp/b2d_decompose.cpp
@@ -28,7 +28,8 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "b2d_decompose.h"
-#include "b2Polygon.h"
+
+#include "thirdparty/b2d_convexdecomp/b2Polygon.h"
namespace b2ConvexDecomp {
diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp
index 60282fb3fa..3c543365f0 100644
--- a/drivers/gles2/rasterizer_gles2.cpp
+++ b/drivers/gles2/rasterizer_gles2.cpp
@@ -342,12 +342,12 @@ void RasterizerGLES2::_draw_primitive(int p_points, const Vector3 *p_vertices, c
/* TEXTURE API */
-Image RasterizerGLES2::_get_gl_image_and_format(const Image &p_image, Image::Format p_format, uint32_t p_flags, GLenum &r_gl_format, GLenum &r_gl_internal_format, int &r_gl_components, bool &r_has_alpha_cache, bool &r_compressed) {
+Ref<Image> RasterizerGLES2::_get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, GLenum &r_gl_format, GLenum &r_gl_internal_format, int &r_gl_components, bool &r_has_alpha_cache, bool &r_compressed) {
r_has_alpha_cache = false;
r_compressed = false;
r_gl_format = 0;
- Image image = p_image;
+ Ref<Image> image = p_image;
switch (p_format) {
diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp
index 4214ee5a6d..aa4150cbe4 100644
--- a/drivers/gles3/rasterizer_gles3.cpp
+++ b/drivers/gles3/rasterizer_gles3.cpp
@@ -72,7 +72,7 @@ RasterizerScene *RasterizerGLES3::get_scene() {
#define _EXT_DEBUG_SEVERITY_LOW_ARB 0x9148
#define _EXT_DEBUG_OUTPUT 0x92E0
-#ifdef WINDOWS_ENABLED
+#if (defined WINDOWS_ENABLED) && !(defined UWP_ENABLED)
#define GLAPIENTRY APIENTRY
#else
#define GLAPIENTRY
@@ -271,9 +271,9 @@ void RasterizerGLES3::clear_render_target(const Color &p_color) {
storage->frame.clear_request_color = p_color;
}
-void RasterizerGLES3::set_boot_image(const Image &p_image, const Color &p_color, bool p_scale) {
+void RasterizerGLES3::set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) {
- if (p_image.empty())
+ if (p_image.is_null() || p_image->empty())
return;
begin_frame();
@@ -290,10 +290,10 @@ void RasterizerGLES3::set_boot_image(const Image &p_image, const Color &p_color,
canvas->canvas_begin();
RID texture = storage->texture_create();
- storage->texture_allocate(texture, p_image.get_width(), p_image.get_height(), p_image.get_format(), VS::TEXTURE_FLAG_FILTER);
+ storage->texture_allocate(texture, p_image->get_width(), p_image->get_height(), p_image->get_format(), VS::TEXTURE_FLAG_FILTER);
storage->texture_set_data(texture, p_image);
- Rect2 imgrect(0, 0, p_image.get_width(), p_image.get_height());
+ Rect2 imgrect(0, 0, p_image->get_width(), p_image->get_height());
Rect2 screenrect;
if (p_scale) {
diff --git a/drivers/gles3/rasterizer_gles3.h b/drivers/gles3/rasterizer_gles3.h
index 12014cd814..ce18d6b6c1 100644
--- a/drivers/gles3/rasterizer_gles3.h
+++ b/drivers/gles3/rasterizer_gles3.h
@@ -48,7 +48,7 @@ public:
virtual RasterizerCanvas *get_canvas();
virtual RasterizerScene *get_scene();
- virtual void set_boot_image(const Image &p_image, const Color &p_color, bool p_scale);
+ virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale);
virtual void initialize();
virtual void begin_frame();
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index 9cb44349bf..a7996b09d3 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -125,14 +125,13 @@ void RasterizerSceneGLES3::shadow_atlas_set_size(RID p_atlas, int p_size) {
if (p_size == shadow_atlas->size)
return;
+ // erasing atlas
if (shadow_atlas->fbo) {
glDeleteTextures(1, &shadow_atlas->depth);
glDeleteFramebuffers(1, &shadow_atlas->fbo);
shadow_atlas->depth = 0;
shadow_atlas->fbo = 0;
-
- print_line("erasing atlas");
}
for (int i = 0; i < 4; i++) {
//clear subdivisions
@@ -4678,7 +4677,7 @@ void RasterizerSceneGLES3::initialize() {
const int ubo_light_size = 160;
state.ubo_light_size = ubo_light_size;
state.max_ubo_lights = MIN(RenderList::MAX_LIGHTS, max_ubo_size / ubo_light_size);
- print_line("max ubo light: " + itos(state.max_ubo_lights));
+ print_line("GLES3: max ubo light: " + itos(state.max_ubo_lights));
state.spot_array_tmp = (uint8_t *)memalloc(ubo_light_size * state.max_ubo_lights);
state.omni_array_tmp = (uint8_t *)memalloc(ubo_light_size * state.max_ubo_lights);
@@ -4704,7 +4703,7 @@ void RasterizerSceneGLES3::initialize() {
state.scene_shader.add_custom_define("#define MAX_FORWARD_LIGHTS " + itos(state.max_forward_lights_per_object) + "\n");
state.max_ubo_reflections = MIN(RenderList::MAX_REFLECTIONS, max_ubo_size / sizeof(ReflectionProbeDataUBO));
- print_line("max ubo reflections: " + itos(state.max_ubo_reflections) + " ubo size: " + itos(sizeof(ReflectionProbeDataUBO)));
+ print_line("GLES3: max ubo reflections: " + itos(state.max_ubo_reflections) + ", ubo size: " + itos(sizeof(ReflectionProbeDataUBO)));
state.reflection_array_tmp = (uint8_t *)memalloc(sizeof(ReflectionProbeDataUBO) * state.max_ubo_reflections);
diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp
index 9316b025eb..7db2f23d47 100644
--- a/drivers/gles3/rasterizer_storage_gles3.cpp
+++ b/drivers/gles3/rasterizer_storage_gles3.cpp
@@ -101,11 +101,11 @@
GLuint RasterizerStorageGLES3::system_fbo = 0;
-Image RasterizerStorageGLES3::_get_gl_image_and_format(const Image &p_image, Image::Format p_format, uint32_t p_flags, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool &srgb) {
+Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool &srgb) {
r_compressed = false;
r_gl_format = 0;
- Image image = p_image;
+ Ref<Image> image = p_image;
srgb = false;
bool need_decompress = false;
@@ -245,7 +245,7 @@ Image RasterizerStorageGLES3::_get_gl_image_and_format(const Image &p_image, Ima
if (config.s3tc_supported) {
- r_gl_internal_format = (config.srgb_decode_supported || p_flags & VS::TEXTURE_FLAG_CONVERT_TO_LINEAR) ? _EXT_COMPRESSED_SRGB_S3TC_DXT1_NV : _EXT_COMPRESSED_RGBA_S3TC_DXT1_EXT;
+ r_gl_internal_format = (config.srgb_decode_supported || p_flags & VS::TEXTURE_FLAG_CONVERT_TO_LINEAR) ? _EXT_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV : _EXT_COMPRESSED_RGBA_S3TC_DXT1_EXT;
r_gl_format = GL_RGBA;
r_gl_type = GL_UNSIGNED_BYTE;
r_compressed = true;
@@ -538,16 +538,17 @@ Image RasterizerStorageGLES3::_get_gl_image_and_format(const Image &p_image, Ima
} break;
default: {
- ERR_FAIL_V(Image());
+ ERR_FAIL_V(Ref<Image>());
}
}
if (need_decompress) {
- if (!image.empty()) {
- image.decompress();
- ERR_FAIL_COND_V(image.is_compressed(), image);
- image.convert(Image::FORMAT_RGBA8);
+ if (!image.is_null()) {
+ image = image->duplicate();
+ image->decompress();
+ ERR_FAIL_COND_V(image->is_compressed(), image);
+ image->convert(Image::FORMAT_RGBA8);
}
r_gl_format = GL_RGBA;
@@ -607,7 +608,7 @@ void RasterizerStorageGLES3::texture_allocate(RID p_texture, int p_width, int p_
texture->stored_cube_sides = 0;
texture->target = (p_flags & VS::TEXTURE_FLAG_CUBEMAP) ? GL_TEXTURE_CUBE_MAP : GL_TEXTURE_2D;
- _get_gl_image_and_format(Image(), texture->format, texture->flags, format, internal_format, type, compressed, srgb);
+ _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, format, internal_format, type, compressed, srgb);
texture->alloc_width = texture->width;
texture->alloc_height = texture->height;
@@ -631,15 +632,15 @@ void RasterizerStorageGLES3::texture_allocate(RID p_texture, int p_width, int p_
texture->active = true;
}
-void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Image &p_image, VS::CubeMapSide p_cube_side) {
+void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Ref<Image> &p_image, VS::CubeMapSide p_cube_side) {
Texture *texture = texture_owner.get(p_texture);
ERR_FAIL_COND(!texture);
ERR_FAIL_COND(!texture->active);
ERR_FAIL_COND(texture->render_target);
- ERR_FAIL_COND(texture->format != p_image.get_format());
- ERR_FAIL_COND(p_image.empty());
+ ERR_FAIL_COND(texture->format != p_image->get_format());
+ ERR_FAIL_COND(p_image.is_null());
GLenum type;
GLenum format;
@@ -651,31 +652,31 @@ void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Image &p_imag
texture->images[p_cube_side] = p_image;
}
- Image img = _get_gl_image_and_format(p_image, p_image.get_format(), texture->flags, format, internal_format, type, compressed, srgb);
+ Ref<Image> img = _get_gl_image_and_format(p_image, p_image->get_format(), texture->flags, format, internal_format, type, compressed, srgb);
- if (config.shrink_textures_x2 && (p_image.has_mipmaps() || !p_image.is_compressed()) && !(texture->flags & VS::TEXTURE_FLAG_USED_FOR_STREAMING)) {
+ if (config.shrink_textures_x2 && (p_image->has_mipmaps() || !p_image->is_compressed()) && !(texture->flags & VS::TEXTURE_FLAG_USED_FOR_STREAMING)) {
texture->alloc_height = MAX(1, texture->alloc_height / 2);
texture->alloc_width = MAX(1, texture->alloc_width / 2);
- if (texture->alloc_width == img.get_width() / 2 && texture->alloc_height == img.get_height() / 2) {
+ if (texture->alloc_width == img->get_width() / 2 && texture->alloc_height == img->get_height() / 2) {
- img.shrink_x2();
- } else if (img.get_format() <= Image::FORMAT_RGB565) {
+ img->shrink_x2();
+ } else if (img->get_format() <= Image::FORMAT_RGB565) {
- img.resize(texture->alloc_width, texture->alloc_height, Image::INTERPOLATE_BILINEAR);
+ img->resize(texture->alloc_width, texture->alloc_height, Image::INTERPOLATE_BILINEAR);
}
};
GLenum blit_target = (texture->target == GL_TEXTURE_CUBE_MAP) ? _cube_side_enum[p_cube_side] : GL_TEXTURE_2D;
- texture->data_size = img.get_data().size();
- PoolVector<uint8_t>::Read read = img.get_data().read();
+ texture->data_size = img->get_data().size();
+ PoolVector<uint8_t>::Read read = img->get_data().read();
glActiveTexture(GL_TEXTURE0);
glBindTexture(texture->target, texture->tex_id);
- texture->ignore_mipmaps = compressed && !img.has_mipmaps();
+ texture->ignore_mipmaps = compressed && !img->has_mipmaps();
if (texture->flags & VS::TEXTURE_FLAG_MIPMAPS && !texture->ignore_mipmaps)
glTexParameteri(texture->target, GL_TEXTURE_MIN_FILTER, config.use_fast_texture_filter ? GL_LINEAR_MIPMAP_NEAREST : GL_LINEAR_MIPMAP_LINEAR);
@@ -761,16 +762,16 @@ void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Image &p_imag
}
}
- int mipmaps = (texture->flags & VS::TEXTURE_FLAG_MIPMAPS && img.has_mipmaps()) ? img.get_mipmap_count() + 1 : 1;
+ int mipmaps = (texture->flags & VS::TEXTURE_FLAG_MIPMAPS && img->has_mipmaps()) ? img->get_mipmap_count() + 1 : 1;
- int w = img.get_width();
- int h = img.get_height();
+ int w = img->get_width();
+ int h = img->get_height();
int tsize = 0;
for (int i = 0; i < mipmaps; i++) {
int size, ofs;
- img.get_mipmap_offset_and_size(i, ofs, size);
+ img->get_mipmap_offset_and_size(i, ofs, size);
//print_line("mipmap: "+itos(i)+" size: "+itos(size)+" w: "+itos(mm_w)+", h: "+itos(mm_h));
@@ -813,19 +814,18 @@ void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Image &p_imag
//texture_set_flags(p_texture,texture->flags);
}
-Image RasterizerStorageGLES3::texture_get_data(RID p_texture, VS::CubeMapSide p_cube_side) const {
+Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, VS::CubeMapSide p_cube_side) const {
Texture *texture = texture_owner.get(p_texture);
- ERR_FAIL_COND_V(!texture, Image());
- ERR_FAIL_COND_V(!texture->active, Image());
- ERR_FAIL_COND_V(texture->data_size == 0, Image());
- ERR_FAIL_COND_V(texture->render_target, Image());
+ ERR_FAIL_COND_V(!texture, Ref<Image>());
+ ERR_FAIL_COND_V(!texture->active, Ref<Image>());
+ ERR_FAIL_COND_V(texture->data_size == 0, Ref<Image>());
+ ERR_FAIL_COND_V(texture->render_target, Ref<Image>());
- if (!texture->images[p_cube_side].empty()) {
+ if (!texture->images[p_cube_side].is_null()) {
return texture->images[p_cube_side];
}
- print_line("GETTING FROM GL ");
#ifdef GLES_OVER_GL
@@ -842,7 +842,7 @@ Image RasterizerStorageGLES3::texture_get_data(RID p_texture, VS::CubeMapSide p_
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
- print_line("GET FORMAT: " + Image::get_format_name(texture->format) + " mipmaps: " + itos(texture->mipmaps));
+ //print_line("GET FORMAT: " + Image::get_format_name(texture->format) + " mipmaps: " + itos(texture->mipmaps));
for (int i = 0; i < texture->mipmaps; i++) {
@@ -868,13 +868,13 @@ Image RasterizerStorageGLES3::texture_get_data(RID p_texture, VS::CubeMapSide p_
data.resize(data_size);
- Image img(texture->alloc_width, texture->alloc_height, texture->mipmaps > 1 ? true : false, texture->format, data);
+ Image *img = memnew(Image(texture->alloc_width, texture->alloc_height, texture->mipmaps > 1 ? true : false, texture->format, data));
- return img;
+ return Ref<Image>(img);
#else
ERR_EXPLAIN("Sorry, It's not posible to obtain images back in OpenGL ES");
- return Image();
+ return Ref<Image>();
#endif
}
@@ -4777,7 +4777,6 @@ RID RasterizerStorageGLES3::gi_probe_dynamic_data_create(int p_width, int p_heig
min_size = 4;
}
- print_line("dyndata create");
while (true) {
if (gipd->compression == GI_PROBE_S3TC) {
@@ -6270,7 +6269,6 @@ bool RasterizerStorageGLES3::free(RID p_rid) {
// delete the texture
GIProbeData *gi_probe_data = gi_probe_data_owner.get(p_rid);
- print_line("dyndata delete");
glDeleteTextures(1, &gi_probe_data->tex_id);
gi_probe_owner.free(p_rid);
memdelete(gi_probe_data);
@@ -6333,9 +6331,8 @@ void RasterizerStorageGLES3::initialize() {
{
int max_extensions = 0;
- print_line("getting extensions");
glGetIntegerv(GL_NUM_EXTENSIONS, &max_extensions);
- print_line("total " + itos(max_extensions));
+ print_line("GLES3: max extensions: " + itos(max_extensions));
for (int i = 0; i < max_extensions; i++) {
const GLubyte *s = glGetStringi(GL_EXTENSIONS, i);
if (!s)
diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h
index bb4a7e23a1..c700b7cb1c 100644
--- a/drivers/gles3/rasterizer_storage_gles3.h
+++ b/drivers/gles3/rasterizer_storage_gles3.h
@@ -240,7 +240,7 @@ public:
RenderTarget *render_target;
- Image images[6];
+ Ref<Image> images[6];
VisualServer::TextureDetectCallback detect_3d;
void *detect_3d_ud;
@@ -280,12 +280,12 @@ public:
mutable RID_Owner<Texture> texture_owner;
- Image _get_gl_image_and_format(const Image &p_image, Image::Format p_format, uint32_t p_flags, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_type, bool &r_compressed, bool &srgb);
+ Ref<Image> _get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_type, bool &r_compressed, bool &srgb);
virtual RID texture_create();
virtual void texture_allocate(RID p_texture, int p_width, int p_height, Image::Format p_format, uint32_t p_flags = VS::TEXTURE_FLAGS_DEFAULT);
- virtual void texture_set_data(RID p_texture, const Image &p_image, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT);
- virtual Image texture_get_data(RID p_texture, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) const;
+ virtual void texture_set_data(RID p_texture, const Ref<Image> &p_image, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT);
+ virtual Ref<Image> texture_get_data(RID p_texture, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) const;
virtual void texture_set_flags(RID p_texture, uint32_t p_flags);
virtual uint32_t texture_get_flags(RID p_texture) const;
virtual Image::Format texture_get_format(RID p_texture) const;
diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp
index 6aeb3af2cd..89b056df84 100644
--- a/drivers/gles3/shader_compiler_gles3.cpp
+++ b/drivers/gles3/shader_compiler_gles3.cpp
@@ -410,7 +410,6 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener
if (fnode->name == "vertex") {
- print_line("vertex uses functions: " + itos(pnode->functions[i].uses_function.size()));
_dump_function_deps(pnode, fnode->name, function_code, r_gen_code.vertex_global, added_vtx);
r_gen_code.vertex = function_code["vertex"];
}
diff --git a/drivers/gles3/shaders/particles.glsl b/drivers/gles3/shaders/particles.glsl
index f789be24cf..fa12dd7408 100644
--- a/drivers/gles3/shaders/particles.glsl
+++ b/drivers/gles3/shaders/particles.glsl
@@ -101,7 +101,7 @@ void main() {
restart_phase*= (1.0-explosiveness);
bool restart=false;
- bool active = velocity_active.a > 0.5;
+ bool shader_active = velocity_active.a > 0.5;
if (system_phase > prev_system_phase) {
if (prev_system_phase < restart_phase && system_phase >= restart_phase) {
@@ -134,7 +134,7 @@ void main() {
uint particle_number = current_cycle * uint(total_particles) + uint(gl_VertexID);
if (restart) {
- active=emitting;
+ shader_active=emitting;
}
mat4 xform;
@@ -148,7 +148,7 @@ void main() {
out_velocity_active=vec4(0.0);
out_custom=vec4(0.0);
if (!restart)
- active=false;
+ shader_active=false;
xform = mat4(
vec4(1.0,0.0,0.0,0.0),
@@ -163,7 +163,7 @@ void main() {
xform = transpose(mat4(xform_1,xform_2,xform_3,vec4(vec3(0.0),1.0)));
}
- if (active) {
+ if (shader_active) {
//execute shader
{
@@ -178,7 +178,7 @@ VERTEX_SHADER_CODE
for(int i=0;i<attractor_count;i++) {
vec3 rel_vec = xform[3].xyz - attractors[i].pos;
- float dist = rel_vec.length();
+ float dist = length(rel_vec);
if (attractors[i].radius < dist)
continue;
if (attractors[i].eat_radius>0 && attractors[i].eat_radius > dist) {
@@ -215,7 +215,7 @@ VERTEX_SHADER_CODE
xform = transpose(xform);
- out_velocity_active.a = mix(0.0,1.0,active);
+ out_velocity_active.a = mix(0.0,1.0,shader_active);
out_xform_1 = xform[0];
out_xform_2 = xform[1];
diff --git a/drivers/png/image_loader_png.cpp b/drivers/png/image_loader_png.cpp
index c9677bed11..fe2372e3af 100644
--- a/drivers/png/image_loader_png.cpp
+++ b/drivers/png/image_loader_png.cpp
@@ -68,7 +68,7 @@ static void _png_warn_function(png_structp, png_const_charp text) {
typedef void(PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp));
-Error ImageLoaderPNG::_load_image(void *rf_up, png_rw_ptr p_func, Image *p_image) {
+Error ImageLoaderPNG::_load_image(void *rf_up, png_rw_ptr p_func, Ref<Image> p_image) {
png_structp png;
png_infop info;
@@ -201,7 +201,7 @@ Error ImageLoaderPNG::_load_image(void *rf_up, png_rw_ptr p_func, Image *p_image
return OK;
}
-Error ImageLoaderPNG::load_image(Image *p_image, FileAccess *f) {
+Error ImageLoaderPNG::load_image(Ref<Image> p_image, FileAccess *f) {
Error err = _load_image(f, _read_png_data, p_image);
f->close();
@@ -238,25 +238,26 @@ static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t p_len
}
}
-static Image _load_mem_png(const uint8_t *p_png, int p_size) {
+static Ref<Image> _load_mem_png(const uint8_t *p_png, int p_size) {
PNGReadStatus prs;
prs.image = p_png;
prs.offset = 0;
prs.size = p_size;
- Image img;
- Error err = ImageLoaderPNG::_load_image(&prs, user_read_data, &img);
- ERR_FAIL_COND_V(err, Image());
+ Ref<Image> img;
+ img.instance();
+ Error err = ImageLoaderPNG::_load_image(&prs, user_read_data, img);
+ ERR_FAIL_COND_V(err, Ref<Image>());
return img;
}
-static Image _lossless_unpack_png(const PoolVector<uint8_t> &p_data) {
+static Ref<Image> _lossless_unpack_png(const PoolVector<uint8_t> &p_data) {
int len = p_data.size();
PoolVector<uint8_t>::Read r = p_data.read();
- ERR_FAIL_COND_V(r[0] != 'P' || r[1] != 'N' || r[2] != 'G' || r[3] != ' ', Image());
+ ERR_FAIL_COND_V(r[0] != 'P' || r[1] != 'N' || r[2] != 'G' || r[3] != ' ', Ref<Image>());
return _load_mem_png(&r[4], len - 4);
}
@@ -271,13 +272,14 @@ static void _write_png_data(png_structp png_ptr, png_bytep data, png_size_t p_le
//print_line("png write: "+itos(p_length));
}
-static PoolVector<uint8_t> _lossless_pack_png(const Image &p_image) {
+static PoolVector<uint8_t> _lossless_pack_png(const Ref<Image> &p_image) {
- Image img = p_image;
- if (img.is_compressed())
- img.decompress();
+ Ref<Image> img = p_image->duplicate();
- ERR_FAIL_COND_V(img.is_compressed(), PoolVector<uint8_t>());
+ if (img->is_compressed())
+ img->decompress();
+
+ ERR_FAIL_COND_V(img->is_compressed(), PoolVector<uint8_t>());
png_structp png_ptr;
png_infop info_ptr;
@@ -311,7 +313,7 @@ static PoolVector<uint8_t> _lossless_pack_png(const Image &p_image) {
int pngf = 0;
int cs = 0;
- switch (img.get_format()) {
+ switch (img->get_format()) {
case Image::FORMAT_L8: {
@@ -335,22 +337,22 @@ static PoolVector<uint8_t> _lossless_pack_png(const Image &p_image) {
} break;
default: {
- if (img.detect_alpha()) {
+ if (img->detect_alpha()) {
- img.convert(Image::FORMAT_RGBA8);
+ img->convert(Image::FORMAT_RGBA8);
pngf = PNG_COLOR_TYPE_RGB_ALPHA;
cs = 4;
} else {
- img.convert(Image::FORMAT_RGB8);
+ img->convert(Image::FORMAT_RGB8);
pngf = PNG_COLOR_TYPE_RGB;
cs = 3;
}
}
}
- int w = img.get_width();
- int h = img.get_height();
+ int w = img->get_width();
+ int h = img->get_height();
png_set_IHDR(png_ptr, info_ptr, w, h,
8, pngf, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
@@ -362,7 +364,7 @@ static PoolVector<uint8_t> _lossless_pack_png(const Image &p_image) {
ERR_FAIL_V(PoolVector<uint8_t>());
}
- PoolVector<uint8_t>::Read r = img.get_data().read();
+ PoolVector<uint8_t>::Read r = img->get_data().read();
row_pointers = (png_bytep *)memalloc(sizeof(png_bytep) * h);
for (int i = 0; i < h; i++) {
diff --git a/drivers/png/image_loader_png.h b/drivers/png/image_loader_png.h
index 78e4252e26..f94b8bce6e 100644
--- a/drivers/png/image_loader_png.h
+++ b/drivers/png/image_loader_png.h
@@ -42,8 +42,8 @@ class ImageLoaderPNG : public ImageFormatLoader {
static void _read_png_data(png_structp png_ptr, png_bytep data, png_size_t p_length);
public:
- static Error _load_image(void *rf_up, png_rw_ptr p_func, Image *p_image);
- virtual Error load_image(Image *p_image, FileAccess *f);
+ static Error _load_image(void *rf_up, png_rw_ptr p_func, Ref<Image> p_image);
+ virtual Error load_image(Ref<Image> p_image, FileAccess *f);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
ImageLoaderPNG();
};
diff --git a/drivers/png/resource_saver_png.cpp b/drivers/png/resource_saver_png.cpp
index b754ef97b4..1700603489 100644
--- a/drivers/png/resource_saver_png.cpp
+++ b/drivers/png/resource_saver_png.cpp
@@ -50,7 +50,7 @@ Error ResourceSaverPNG::save(const String &p_path, const RES &p_resource, uint32
ERR_EXPLAIN("Can't save empty texture as PNG");
ERR_FAIL_COND_V(!texture->get_width() || !texture->get_height(), ERR_INVALID_PARAMETER);
- Image img = texture->get_data();
+ Ref<Image> img = texture->get_data();
Error err = save_image(p_path, img);
@@ -95,12 +95,14 @@ Error ResourceSaverPNG::save(const String &p_path, const RES &p_resource, uint32
return err;
};
-Error ResourceSaverPNG::save_image(const String &p_path, Image &p_img) {
+Error ResourceSaverPNG::save_image(const String &p_path, const Ref<Image> &p_img) {
- if (p_img.is_compressed())
- p_img.decompress();
+ Ref<Image> img = p_img->duplicate();
- ERR_FAIL_COND_V(p_img.is_compressed(), ERR_INVALID_PARAMETER);
+ if (img->is_compressed())
+ img->decompress();
+
+ ERR_FAIL_COND_V(img->is_compressed(), ERR_INVALID_PARAMETER);
png_structp png_ptr;
png_infop info_ptr;
@@ -135,7 +137,7 @@ Error ResourceSaverPNG::save_image(const String &p_path, Image &p_img) {
int pngf = 0;
int cs = 0;
- switch (p_img.get_format()) {
+ switch (img->get_format()) {
case Image::FORMAT_L8: {
@@ -159,22 +161,22 @@ Error ResourceSaverPNG::save_image(const String &p_path, Image &p_img) {
} break;
default: {
- if (p_img.detect_alpha()) {
+ if (img->detect_alpha()) {
- p_img.convert(Image::FORMAT_RGBA8);
+ img->convert(Image::FORMAT_RGBA8);
pngf = PNG_COLOR_TYPE_RGB_ALPHA;
cs = 4;
} else {
- p_img.convert(Image::FORMAT_RGB8);
+ img->convert(Image::FORMAT_RGB8);
pngf = PNG_COLOR_TYPE_RGB;
cs = 3;
}
}
}
- int w = p_img.get_width();
- int h = p_img.get_height();
+ int w = img->get_width();
+ int h = img->get_height();
png_set_IHDR(png_ptr, info_ptr, w, h,
8, pngf, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
@@ -187,7 +189,7 @@ Error ResourceSaverPNG::save_image(const String &p_path, Image &p_img) {
ERR_FAIL_V(ERR_CANT_OPEN);
}
- PoolVector<uint8_t>::Read r = p_img.get_data().read();
+ PoolVector<uint8_t>::Read r = img->get_data().read();
row_pointers = (png_bytep *)memalloc(sizeof(png_bytep) * h);
for (int i = 0; i < h; i++) {
diff --git a/drivers/png/resource_saver_png.h b/drivers/png/resource_saver_png.h
index c25a01c1f6..31ec35c192 100644
--- a/drivers/png/resource_saver_png.h
+++ b/drivers/png/resource_saver_png.h
@@ -30,11 +30,12 @@
#ifndef RESOURCE_SAVER_PNG_H
#define RESOURCE_SAVER_PNG_H
+#include "image.h"
#include "io/resource_saver.h"
class ResourceSaverPNG : public ResourceFormatSaver {
public:
- static Error save_image(const String &p_path, Image &p_img);
+ static Error save_image(const String &p_path, const Ref<Image> &p_img);
virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0);
virtual bool recognize(const RES &p_resource) const;
diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.cpp b/drivers/pulseaudio/audio_driver_pulseaudio.cpp
index 9aaf5c129b..45827ee4f7 100644
--- a/drivers/pulseaudio/audio_driver_pulseaudio.cpp
+++ b/drivers/pulseaudio/audio_driver_pulseaudio.cpp
@@ -102,7 +102,6 @@ float AudioDriverPulseAudio::get_latency() {
void AudioDriverPulseAudio::thread_func(void *p_udata) {
- print_line("thread");
AudioDriverPulseAudio *ad = (AudioDriverPulseAudio *)p_udata;
while (!ad->exit_thread) {
diff --git a/drivers/unix/ip_unix.cpp b/drivers/unix/ip_unix.cpp
index 1becf3accb..30d2377a04 100644
--- a/drivers/unix/ip_unix.cpp
+++ b/drivers/unix/ip_unix.cpp
@@ -77,7 +77,7 @@ static IP_Address _sockaddr2ip(struct sockaddr *p_addr) {
if (p_addr->sa_family == AF_INET) {
struct sockaddr_in *addr = (struct sockaddr_in *)p_addr;
ip.set_ipv4((uint8_t *)&(addr->sin_addr));
- } else {
+ } else if (p_addr->sa_family == AF_INET6) {
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)p_addr;
ip.set_ipv6(addr6->sin6_addr.s6_addr);
};
@@ -180,15 +180,16 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
SOCKADDR_IN *ipv4 = reinterpret_cast<SOCKADDR_IN *>(address->Address.lpSockaddr);
ip.set_ipv4((uint8_t *)&(ipv4->sin_addr));
- } else { // ipv6
+ r_addresses->push_back(ip);
+
+ } else if (address->Address.lpSockaddr->sa_family == AF_INET6) { // ipv6
SOCKADDR_IN6 *ipv6 = reinterpret_cast<SOCKADDR_IN6 *>(address->Address.lpSockaddr);
ip.set_ipv6(ipv6->sin6_addr.s6_addr);
+ r_addresses->push_back(ip);
};
- r_addresses->push_back(ip);
-
address = address->Next;
};
adapter = adapter->Next;
@@ -205,6 +206,7 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
struct ifaddrs *ifAddrStruct = NULL;
struct ifaddrs *ifa = NULL;
+ int family;
getifaddrs(&ifAddrStruct);
@@ -212,6 +214,11 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
if (!ifa->ifa_addr)
continue;
+ family = ifa->ifa_addr->sa_family;
+
+ if (family != AF_INET && family != AF_INET6)
+ continue;
+
IP_Address ip = _sockaddr2ip(ifa->ifa_addr);
r_addresses->push_back(ip);
}
diff --git a/drivers/unix/packet_peer_udp_posix.cpp b/drivers/unix/packet_peer_udp_posix.cpp
index 5dbccd4b63..74ceb3946a 100644
--- a/drivers/unix/packet_peer_udp_posix.cpp
+++ b/drivers/unix/packet_peer_udp_posix.cpp
@@ -216,6 +216,8 @@ Error PacketPeerUDPPosix::_poll(bool p_wait) {
len = sizeof(struct sockaddr_storage);
++queue_count;
+ if (p_wait)
+ break;
};
// TODO: Should ECONNRESET be handled here?
diff --git a/drivers/unix/socket_helpers.h b/drivers/unix/socket_helpers.h
index 8e54afcdba..5fa727a9b9 100644
--- a/drivers/unix/socket_helpers.h
+++ b/drivers/unix/socket_helpers.h
@@ -100,13 +100,21 @@ static size_t _set_listen_sockaddr(struct sockaddr_storage *p_addr, int p_port,
};
};
-static int _socket_create(IP::Type p_type, int type, int protocol) {
+static int _socket_create(IP::Type &p_type, int type, int protocol) {
ERR_FAIL_COND_V(p_type > IP::TYPE_ANY || p_type < IP::TYPE_NONE, ERR_INVALID_PARAMETER);
int family = p_type == IP::TYPE_IPV4 ? AF_INET : AF_INET6;
int sockfd = socket(family, type, protocol);
+ if (sockfd == -1 && p_type == IP::TYPE_ANY) {
+ // Careful here, changing the referenced parameter so the caller knows that we are using an IPv4 socket
+ // in place of a dual stack one, and further calls to _set_sock_addr will work as expected.
+ p_type = IP::TYPE_IPV4;
+ family = AF_INET;
+ sockfd = socket(family, type, protocol);
+ }
+
ERR_FAIL_COND_V(sockfd == -1, -1);
if (family == AF_INET6) {
diff --git a/drivers/xaudio2/audio_driver_xaudio2.h b/drivers/xaudio2/audio_driver_xaudio2.h
index 8d240de02e..7c1d31b57c 100644
--- a/drivers/xaudio2/audio_driver_xaudio2.h
+++ b/drivers/xaudio2/audio_driver_xaudio2.h
@@ -34,7 +34,6 @@
#include "core/os/thread.h"
#include "servers/audio_server.h"
-#include <mmreg.h>
#include <mmsystem.h>
#include <windows.h>
#include <wrl/client.h>
diff --git a/editor/animation_editor.cpp b/editor/animation_editor.cpp
index 447f57a73f..1e6562fcf2 100644
--- a/editor/animation_editor.cpp
+++ b/editor/animation_editor.cpp
@@ -1035,7 +1035,7 @@ void AnimationKeyEditor::_track_pos_draw() {
//draw position
int pixel = (timeline_pos - h_scroll->get_value()) * zoom_scale;
pixel += name_limit;
- track_pos->draw_line(ofs + Point2(pixel, 0), ofs + Point2(pixel, size.height), Color(1, 0.3, 0.3, 0.8));
+ track_pos->draw_line(ofs + Point2(pixel, 0), ofs + Point2(pixel, size.height), get_color("animation_editor_track_pos", "Editor"));
}
}
@@ -1089,9 +1089,8 @@ void AnimationKeyEditor::_track_editor_draw() {
int sep = get_constant("vseparation", "Tree");
int hsep = get_constant("hseparation", "Tree");
Color color = get_color("font_color", "Tree");
- Color sepcolor = get_color("guide_color", "Tree");
- Color timecolor = get_color("prop_subsection", "Editor");
- timecolor = Color::html("ff4a414f");
+ Color sepcolor = get_color("guide_color", "Editor");
+ Color timecolor = get_color("animation_editor_time", "Editor");
Color hover_color = Color(1, 1, 1, 0.05);
Color select_color = Color(1, 1, 1, 0.1);
Color invalid_path_color = Color(1, 0.6, 0.4, 0.5);
@@ -1155,8 +1154,9 @@ void AnimationKeyEditor::_track_editor_draw() {
int settings_limit = size.width - right_separator_ofs;
int name_limit = settings_limit * name_column_ratio;
- te->draw_line(ofs + Point2(name_limit, 0), ofs + Point2(name_limit, size.height), color);
- te->draw_line(ofs + Point2(settings_limit, 0), ofs + Point2(settings_limit, size.height), color);
+ Color line_color = get_color("animation_editor_line", "Editor");
+ te->draw_line(ofs + Point2(name_limit, 0), ofs + Point2(name_limit, size.height), line_color);
+ te->draw_line(ofs + Point2(settings_limit, 0), ofs + Point2(settings_limit, size.height), line_color);
te->draw_texture(hsize_icon, ofs + Point2(name_limit - hsize_icon->get_width() - hsep, (h - hsize_icon->get_height()) / 2));
te->draw_line(ofs + Point2(0, h), ofs + Point2(size.width, h), color);
@@ -1483,7 +1483,7 @@ void AnimationKeyEditor::_track_editor_draw() {
switch (click.click) {
case ClickOver::CLICK_SELECT_KEYS: {
- te->draw_rect(Rect2(click.at, click.to - click.at), Color(0.7, 0.7, 1.0, 0.5));
+ te->draw_rect(Rect2(click.at, click.to - click.at), get_color("animation_editor_selection_rect", "Editor"));
} break;
case ClickOver::CLICK_MOVE_KEYS: {
@@ -1871,21 +1871,35 @@ void AnimationKeyEditor::_track_editor_gui_input(const InputEvent &p_input) {
if (mb.button_index == BUTTON_WHEEL_UP && mb.pressed) {
if (mb.mod.command) {
+
zoom->set_value(zoom->get_value() + zoom->get_step());
} else {
- v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 8);
+
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * mb.factor / 8);
}
}
if (mb.button_index == BUTTON_WHEEL_DOWN && mb.pressed) {
if (mb.mod.command) {
+
zoom->set_value(zoom->get_value() - zoom->get_step());
} else {
- v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 8);
+
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * mb.factor / 8);
}
}
+ if (mb.button_index == BUTTON_WHEEL_RIGHT && mb.pressed) {
+
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() * mb.factor / 8);
+ }
+
+ if (mb.button_index == BUTTON_WHEEL_LEFT && mb.pressed) {
+
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * mb.factor / 8);
+ }
+
if (mb.button_index == BUTTON_RIGHT && mb.pressed) {
Point2 mpos = Point2(mb.x, mb.y) - ofs;
@@ -3753,6 +3767,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
//add_child(menu);
zoomicon = memnew(TextureRect);
+ zoomicon->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED);
hb->add_child(zoomicon);
zoomicon->set_tooltip(TTR("Animation zoom."));
diff --git a/editor/asset_library_editor_plugin.cpp b/editor/asset_library_editor_plugin.cpp
index ca99541bbd..fcb92e13b4 100644
--- a/editor/asset_library_editor_plugin.cpp
+++ b/editor/asset_library_editor_plugin.cpp
@@ -144,7 +144,7 @@ EditorAssetLibraryItem::EditorAssetLibraryItem() {
rating_hb->add_child(stars[i]);
}
price = memnew(Label);
- price->set_text("Free");
+ price->set_text(TTR("Free"));
vb->add_child(price);
set_custom_minimum_size(Size2(250, 100));
@@ -226,12 +226,12 @@ void EditorAssetLibraryItemDescription::configure(const String &p_title, int p_a
sha256 = p_sha256_hash;
item->configure(p_title, p_asset_id, p_category, p_category_id, p_author, p_author_id, p_rating, p_cost);
description->clear();
- description->add_text("Version: " + p_version_string + "\n");
- description->add_text("Contents: ");
+ description->add_text(TTR("Version:") + " " + p_version_string + "\n");
+ description->add_text(TTR("Contents:") + " ");
description->push_meta(p_browse_url);
- description->add_text("View Files");
+ description->add_text(TTR("View Files"));
description->pop();
- description->add_text("\nDescription:\n\n");
+ description->add_text("\n" + TTR("Description:") + "\n\n");
description->append_bbcode(p_description);
set_title(p_title);
}
@@ -280,7 +280,6 @@ EditorAssetLibraryItemDescription::EditorAssetLibraryItemDescription() {
description = memnew(RichTextLabel);
description->connect("meta_clicked", this, "_link_click");
- //desc_vbox->add_child(description);
desc_bg->add_child(description);
desc_bg->add_style_override("panel", get_stylebox("normal", "TextEdit"));
@@ -301,8 +300,8 @@ EditorAssetLibraryItemDescription::EditorAssetLibraryItemDescription() {
preview_hb->set_v_size_flags(SIZE_EXPAND_FILL);
previews->add_child(preview_hb);
- get_ok()->set_text("Install");
- get_cancel()->set_text("Close");
+ get_ok()->set_text(TTR("Install"));
+ get_cancel()->set_text(TTR("Close"));
}
///////////////////////////////////////////////////////////////////////////////////
@@ -314,48 +313,49 @@ void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int
switch (p_status) {
case HTTPRequest::RESULT_CANT_RESOLVE: {
- error_text = ("Can't resolve hostname: " + host);
- status->set_text("Can't resolve.");
+ error_text = TTR("Can't resolve hostname:") + " " + host;
+ status->set_text(TTR("Can't resolve."));
} break;
case HTTPRequest::RESULT_BODY_SIZE_LIMIT_EXCEEDED:
case HTTPRequest::RESULT_CONNECTION_ERROR:
case HTTPRequest::RESULT_CHUNKED_BODY_SIZE_MISMATCH: {
- error_text = ("Connection error, please try again.");
- status->set_text("Can't connect.");
+ error_text = TTR("Connection error, please try again.");
+ status->set_text(TTR("Can't connect."));
} break;
case HTTPRequest::RESULT_SSL_HANDSHAKE_ERROR:
case HTTPRequest::RESULT_CANT_CONNECT: {
- error_text = ("Can't connect to host: " + host);
- status->set_text("Can't connect.");
+ error_text = TTR("Can't connect to host:") + " " + host;
+ status->set_text(TTR("Can't connect."));
} break;
case HTTPRequest::RESULT_NO_RESPONSE: {
- error_text = ("No response from host: " + host);
- status->set_text("No response.");
+ error_text = TTR("No response from host:") + " " + host;
+ status->set_text(TTR("No response."));
} break;
case HTTPRequest::RESULT_REQUEST_FAILED: {
- error_text = ("Request failed, return code: " + itos(p_code));
- status->set_text("Req. Failed.");
+ error_text = TTR("Request failed, return code:") + " " + itos(p_code);
+ status->set_text(TTR("Req. Failed."));
} break;
case HTTPRequest::RESULT_REDIRECT_LIMIT_REACHED: {
- error_text = ("Request failed, too many redirects");
- status->set_text("Redirect Loop.");
+ error_text = TTR("Request failed, too many redirects");
+ status->set_text(TTR("Redirect Loop."));
} break;
default: {
if (p_code != 200) {
- error_text = ("Request failed, return code: " + itos(p_code));
- status->set_text("Failed: " + itos(p_code));
+ error_text = TTR("Request failed, return code:") + " " + itos(p_code);
+ status->set_text(TTR("Failed:") + " " + itos(p_code));
} else if (sha256 != "") {
String download_sha256 = FileAccess::get_sha256(download->get_download_file());
if (sha256 != download_sha256) {
- error_text = "Bad download hash, assuming file has been tampered with.\nExpected: " + sha256 + "\nGot: " + download_sha256;
- status->set_text("Failed sha256 hash check");
+ error_text = TTR("Bad download hash, assuming file has been tampered with.") + "\n";
+ error_text += TTR("Expected:") + " " + sha256 + "\n" + TTR("Got:") + " " + download_sha256;
+ status->set_text(TTR("Failed sha256 hash check"));
}
}
} break;
}
if (error_text != String()) {
- download_error->set_text("Asset Download Error:\n" + error_text);
+ download_error->set_text(TTR("Asset Download Error:") + "\n" + error_text);
download_error->popup_centered_minsize();
return;
}
@@ -368,7 +368,7 @@ void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int
progress->set_value(download->get_downloaded_bytes());
- status->set_text("Success! (" + String::humanize_size(download->get_downloaded_bytes()) + ")");
+ status->set_text(TTR("Success!") + " (" + String::humanize_size(download->get_downloaded_bytes()) + ")");
set_process(false);
}
@@ -396,19 +396,19 @@ void EditorAssetLibraryItemDownload::_notification(int p_what) {
int cstatus = download->get_http_client_status();
if (cstatus == HTTPClient::STATUS_BODY)
- status->set_text("Fetching: " + String::humanize_size(download->get_downloaded_bytes()));
+ status->set_text(TTR("Fetching:") + " " + String::humanize_size(download->get_downloaded_bytes()));
if (cstatus != prev_status) {
switch (cstatus) {
case HTTPClient::STATUS_RESOLVING: {
- status->set_text("Resolving..");
+ status->set_text(TTR("Resolving.."));
} break;
case HTTPClient::STATUS_CONNECTING: {
- status->set_text("Connecting..");
+ status->set_text(TTR("Connecting.."));
} break;
case HTTPClient::STATUS_REQUESTING: {
- status->set_text("Requesting..");
+ status->set_text(TTR("Requesting.."));
} break;
default: {}
}
@@ -442,7 +442,7 @@ void EditorAssetLibraryItemDownload::_make_request() {
Error err = download->request(host);
if (err != OK) {
- status->set_text("Error making request");
+ status->set_text(TTR("Error making request"));
} else {
set_process(true);
}
@@ -483,7 +483,7 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() {
vb->add_spacer();
- status = memnew(Label("Idle"));
+ status = memnew(Label(TTR("Idle")));
vb->add_child(status);
status->add_color_override("font_color", Color(0.5, 0.5, 0.5));
progress = memnew(ProgressBar);
@@ -494,12 +494,12 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() {
hb2->add_spacer();
install = memnew(Button);
- install->set_text("Install");
+ install->set_text(TTR("Install"));
install->set_disabled(true);
install->connect("pressed", this, "_install");
retry = memnew(Button);
- retry->set_text("Retry");
+ retry->set_text(TTR("Retry"));
retry->connect("pressed", this, "_make_request");
hb2->add_child(retry);
@@ -512,7 +512,7 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() {
download_error = memnew(AcceptDialog);
add_child(download_error);
- download_error->set_title("Download Error");
+ download_error->set_title(TTR("Download Error"));
asset_installer = memnew(EditorAssetInstaller);
add_child(asset_installer);
@@ -585,7 +585,7 @@ void EditorAssetLibrary::_install_asset() {
if (d && d->get_asset_id() == description->get_asset_id()) {
if (EditorNode::get_singleton() != NULL)
- EditorNode::get_singleton()->show_warning("Download for this asset is already in progress!");
+ EditorNode::get_singleton()->show_warning(TTR("Download for this asset is already in progress!"));
return;
}
}
@@ -683,17 +683,18 @@ void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PoolByt
int len = image_data.size();
PoolByteArray::Read r = image_data.read();
- Image image(r.ptr(), len);
- if (!image.empty()) {
+ Ref<Image> image = Ref<Image>(memnew(Image(r.ptr(), len)));
+
+ if (!image->empty()) {
float max_height = 10000;
switch (image_queue[p_queue_id].image_type) {
case IMAGE_QUEUE_ICON: max_height = 80; break;
case IMAGE_QUEUE_THUMBNAIL: max_height = 80; break;
case IMAGE_QUEUE_SCREENSHOT: max_height = 345; break;
}
- float scale_ratio = max_height / image.get_height();
+ float scale_ratio = max_height / image->get_height();
if (scale_ratio < 1) {
- image.resize(image.get_width() * scale_ratio, image.get_height() * scale_ratio, Image::INTERPOLATE_CUBIC);
+ image->resize(image->get_width() * scale_ratio, image->get_height() * scale_ratio, Image::INTERPOLATE_CUBIC);
}
Ref<ImageTexture> tex;
@@ -902,7 +903,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int
if (p_page != 0) {
LinkButton *first = memnew(LinkButton);
- first->set_text("first");
+ first->set_text(TTR("first"));
first->add_color_override("font_color", gray);
first->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER);
first->connect("pressed", this, "_search", varray(0));
@@ -911,7 +912,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int
if (p_page > 0) {
LinkButton *prev = memnew(LinkButton);
- prev->set_text("prev");
+ prev->set_text(TTR("prev"));
prev->add_color_override("font_color", gray);
prev->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER);
prev->connect("pressed", this, "_search", varray(p_page - 1));
@@ -939,7 +940,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int
if (p_page < p_page_count - 1) {
LinkButton *next = memnew(LinkButton);
- next->set_text("next");
+ next->set_text(TTR("next"));
next->add_color_override("font_color", gray);
next->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER);
next->connect("pressed", this, "_search", varray(p_page + 1));
@@ -949,7 +950,7 @@ HBoxContainer *EditorAssetLibrary::_make_pages(int p_page, int p_page_count, int
if (p_page != p_page_count - 1) {
LinkButton *last = memnew(LinkButton);
- last->set_text("last");
+ last->set_text(TTR("last"));
last->add_color_override("font_color", gray);
last->set_underline_mode(LinkButton::UNDERLINE_MODE_ON_HOVER);
hbc->add_child(last);
@@ -992,30 +993,30 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const
switch (p_status) {
case HTTPRequest::RESULT_CANT_RESOLVE: {
- error_label->set_text("Can't resolve hostname: " + host);
+ error_label->set_text(TTR("Can't resolve hostname:") + " " + host);
} break;
case HTTPRequest::RESULT_BODY_SIZE_LIMIT_EXCEEDED:
case HTTPRequest::RESULT_CONNECTION_ERROR:
case HTTPRequest::RESULT_CHUNKED_BODY_SIZE_MISMATCH: {
- error_label->set_text("Connection error, please try again.");
+ error_label->set_text(TTR("Connection error, please try again."));
} break;
case HTTPRequest::RESULT_SSL_HANDSHAKE_ERROR:
case HTTPRequest::RESULT_CANT_CONNECT: {
- error_label->set_text("Can't connect to host: " + host);
+ error_label->set_text(TTR("Can't connect to host:") + " " + host);
} break;
case HTTPRequest::RESULT_NO_RESPONSE: {
- error_label->set_text("No response from host: " + host);
+ error_label->set_text(TTR("No response from host:") + " " + host);
} break;
case HTTPRequest::RESULT_REQUEST_FAILED: {
- error_label->set_text("Request failed, return code: " + itos(p_code));
+ error_label->set_text(TTR("Request failed, return code:") + " " + itos(p_code));
} break;
case HTTPRequest::RESULT_REDIRECT_LIMIT_REACHED: {
- error_label->set_text("Request failed, too many redirects");
+ error_label->set_text(TTR("Request failed, too many redirects"));
} break;
default: {
if (p_code != 200) {
- error_label->set_text("Request failed, return code: " + itos(p_code));
+ error_label->set_text(TTR("Request failed, return code:") + " " + itos(p_code));
} else {
error_abort = false;
@@ -1048,7 +1049,7 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const
case REQUESTING_CONFIG: {
categories->clear();
- categories->add_item("All");
+ categories->add_item(TTR("All"));
categories->set_item_metadata(0, 0);
if (d.has("categories")) {
Array clist = d["categories"];
@@ -1283,7 +1284,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) {
search_hb->add_child(filter);
filter->set_h_size_flags(SIZE_EXPAND_FILL);
filter->connect("text_entered", this, "_search");
- search = memnew(Button("Search"));
+ search = memnew(Button(TTR("Search")));
search->connect("pressed", this, "_search");
search_hb->add_child(search);
@@ -1291,12 +1292,12 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) {
search_hb->add_child(memnew(VSeparator));
Button *open_asset = memnew(Button);
- open_asset->set_text("Import");
+ open_asset->set_text(TTR("Import"));
search_hb->add_child(open_asset);
open_asset->connect("pressed", this, "_asset_open");
Button *plugins = memnew(Button);
- plugins->set_text("Plugins");
+ plugins->set_text(TTR("Plugins"));
search_hb->add_child(plugins);
plugins->connect("pressed", this, "_manage_plugins");
@@ -1342,9 +1343,9 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) {
search_hb2->add_child(memnew(Label(TTR("Site:") + " ")));
repository = memnew(OptionButton);
- repository->add_item("Godot");
+ repository->add_item("godotengine.org");
repository->set_item_metadata(0, "https://godotengine.org/asset-library/api");
- repository->add_item("Localhost"); // TODO: Maybe remove?
+ repository->add_item("localhost"); // TODO: Maybe remove?
repository->set_item_metadata(1, "http://127.0.0.1/asset-library/api");
repository->connect("item_selected", this, "_repository_changed");
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index 20525dd028..a84d65de0e 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -1071,7 +1071,8 @@ void CodeTextEditor::update_editor_settings() {
text_editor->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/completion/auto_brace_complete"));
text_editor->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/cursor/scroll_past_end_of_file"));
- text_editor->set_tab_size(EditorSettings::get_singleton()->get("text_editor/indent/tab_size"));
+ text_editor->set_indent_using_spaces(EditorSettings::get_singleton()->get("text_editor/indent/type"));
+ text_editor->set_indent_size(EditorSettings::get_singleton()->get("text_editor/indent/size"));
text_editor->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/indent/draw_tabs"));
text_editor->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_line_numbers"));
text_editor->set_line_numbers_zero_padded(EditorSettings::get_singleton()->get("text_editor/line_numbers/line_numbers_zero_padded"));
diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp
index 9c6624d9e5..e623d00cc9 100644
--- a/editor/connections_dialog.cpp
+++ b/editor/connections_dialog.cpp
@@ -239,7 +239,6 @@ void ConnectDialog::_add_bind() {
case Variant::BASIS: value = Basis(); break;
case Variant::TRANSFORM: value = Transform(); break;
case Variant::COLOR: value = Color(); break;
- case Variant::IMAGE: value = Image(); break;
default: { ERR_FAIL(); } break;
}
@@ -327,7 +326,6 @@ ConnectDialog::ConnectDialog() {
type_list->add_item("Transform", Variant::TRANSFORM);
//type_list->add_separator();
type_list->add_item("Color", Variant::COLOR);
- type_list->add_item("Image", Variant::IMAGE);
type_list->select(0);
Button *add_bind = memnew(Button);
@@ -767,7 +765,7 @@ void ConnectionsDock::_something_activated() {
Ref<Script> script = c.target->get_script();
- if (script.is_valid() && ScriptEditor::get_singleton()->script_go_to_method(script, c.method)) {
+ if (script.is_valid() && ScriptEditor::get_singleton()->script_goto_method(script, c.method)) {
editor->call("_editor_select", EditorNode::EDITOR_SCRIPT);
}
}
diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp
index dc28fc9020..7c9dae1e3f 100644
--- a/editor/create_dialog.cpp
+++ b/editor/create_dialog.cpp
@@ -622,6 +622,7 @@ CreateDialog::CreateDialog() {
search_box->set_h_size_flags(SIZE_EXPAND_FILL);
search_hb->add_child(search_box);
favorite = memnew(Button);
+ favorite->set_flat(true);
favorite->set_toggle_mode(true);
search_hb->add_child(favorite);
favorite->connect("pressed", this, "_favorite_toggled");
diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp
index af95f8d919..75d8721756 100644
--- a/editor/doc/doc_data.cpp
+++ b/editor/doc/doc_data.cpp
@@ -295,8 +295,8 @@ void DocData::generate(bool p_basic_types) {
case Variant::REAL:
//keep it
break;
- case Variant::STRING: // 15
- case Variant::NODE_PATH: // 15
+ case Variant::STRING:
+ case Variant::NODE_PATH:
default_arg_text = "\"" + default_arg_text + "\"";
break;
case Variant::TRANSFORM:
@@ -307,19 +307,19 @@ void DocData::generate(bool p_basic_types) {
default_arg_text = Variant::get_type_name(default_arg.get_type()) + "(" + default_arg_text + ")";
break;
- case Variant::RECT3: //sorry naming convention fail :( not like it's used often // 10
+ case Variant::RECT3:
case Variant::COLOR:
case Variant::PLANE:
case Variant::POOL_BYTE_ARRAY:
case Variant::POOL_INT_ARRAY:
case Variant::POOL_REAL_ARRAY:
- case Variant::POOL_STRING_ARRAY: //25
+ case Variant::POOL_STRING_ARRAY:
case Variant::POOL_VECTOR2_ARRAY:
case Variant::POOL_VECTOR3_ARRAY:
case Variant::POOL_COLOR_ARRAY:
default_arg_text = Variant::get_type_name(default_arg.get_type()) + "(" + default_arg_text + ")";
break;
- case Variant::VECTOR2: // 5
+ case Variant::VECTOR2:
case Variant::RECT2:
case Variant::VECTOR3:
case Variant::QUAT:
@@ -332,14 +332,10 @@ void DocData::generate(bool p_basic_types) {
break;
}
case Variant::INPUT_EVENT:
- case Variant::DICTIONARY: // 20
+ case Variant::DICTIONARY:
case Variant::ARRAY:
case Variant::_RID:
- case Variant::IMAGE:
- //case Variant::RESOURCE:
- default_arg_text = Variant::get_type_name(default_arg.get_type()) + "()";
- break;
default: {}
}
diff --git a/editor/doc/doc_dump.cpp b/editor/doc/doc_dump.cpp
index bda4d80f4d..10cd29b814 100644
--- a/editor/doc/doc_dump.cpp
+++ b/editor/doc/doc_dump.cpp
@@ -165,8 +165,8 @@ void DocDump::dump(const String &p_file) {
case Variant::REAL:
//keep it
break;
- case Variant::STRING: // 15
- case Variant::NODE_PATH: // 15
+ case Variant::STRING:
+ case Variant::NODE_PATH:
default_arg_text = "\"" + default_arg_text + "\"";
break;
case Variant::TRANSFORM:
@@ -177,32 +177,28 @@ void DocDump::dump(const String &p_file) {
default_arg_text = Variant::get_type_name(default_arg.get_type()) + "(" + default_arg_text + ")";
break;
- case Variant::VECTOR2: // 5
+ case Variant::VECTOR2:
case Variant::RECT2:
case Variant::VECTOR3:
case Variant::PLANE:
case Variant::QUAT:
- case Variant::RECT3: //sorry naming convention fail :( not like it's used often // 10
+ case Variant::RECT3:
case Variant::BASIS:
case Variant::COLOR:
case Variant::POOL_BYTE_ARRAY:
case Variant::POOL_INT_ARRAY:
case Variant::POOL_REAL_ARRAY:
- case Variant::POOL_STRING_ARRAY: //25
+ case Variant::POOL_STRING_ARRAY:
case Variant::POOL_VECTOR3_ARRAY:
case Variant::POOL_COLOR_ARRAY:
default_arg_text = Variant::get_type_name(default_arg.get_type()) + "(" + default_arg_text + ")";
break;
case Variant::OBJECT:
case Variant::INPUT_EVENT:
- case Variant::DICTIONARY: // 20
+ case Variant::DICTIONARY:
case Variant::ARRAY:
case Variant::_RID:
- case Variant::IMAGE:
- //case Variant::RESOURCE:
- default_arg_text = Variant::get_type_name(default_arg.get_type()) + "()";
- break;
default: {}
}
diff --git a/editor/editor_asset_installer.cpp b/editor/editor_asset_installer.cpp
index 5a54f9b46f..e3ed9fe1af 100644
--- a/editor/editor_asset_installer.cpp
+++ b/editor/editor_asset_installer.cpp
@@ -184,6 +184,7 @@ void EditorAssetInstaller::open(const String &p_path, int p_depth) {
dir_map[path] = ti;
ti->set_text(0, path.get_file() + "/");
ti->set_icon(0, get_icon("folder", "FileDialog"));
+ ti->set_metadata(0, String());
} else {
String file = path.get_file();
String extension = file.get_extension().to_lower();
@@ -305,6 +306,7 @@ void EditorAssetInstaller::ok_pressed() {
if (EditorNode::get_singleton() != NULL)
EditorNode::get_singleton()->show_warning("Package Installed Successfully!", "Success!");
}
+ EditorFileSystem::get_singleton()->scan_changes();
}
void EditorAssetInstaller::_bind_methods() {
diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp
index 6ef32a6afd..1129a7d633 100644
--- a/editor/editor_audio_buses.cpp
+++ b/editor/editor_audio_buses.cpp
@@ -45,6 +45,10 @@ void EditorAudioBus::_notification(int p_what) {
vu_r->set_progress_texture(get_icon("BusVuFull", "EditorIcons"));
scale->set_texture(get_icon("BusVuDb", "EditorIcons"));
+ solo->set_icon(get_icon("AudioBusSolo", "EditorIcons"));
+ mute->set_icon(get_icon("AudioBusMute", "EditorIcons"));
+ bypass->set_icon(get_icon("AudioBusBypass", "EditorIcons"));
+
disabled_vu = get_icon("BusVuFrozen", "EditorIcons");
prev_active = true;
@@ -627,23 +631,23 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses) {
vb->add_child(hbc);
hbc->add_spacer();
solo = memnew(ToolButton);
- solo->set_text("S");
+ solo->set_tooltip(TTR("Toggle Solo"));
solo->set_toggle_mode(true);
- solo->set_modulate(Color(0.8, 1.2, 0.8));
+ // solo->set_modulate(Color(0.8, 1.2, 0.8));
solo->set_focus_mode(FOCUS_NONE);
solo->connect("pressed", this, "_solo_toggled");
hbc->add_child(solo);
mute = memnew(ToolButton);
- mute->set_text("M");
+ mute->connect("pressed", this, "_mute_toggled");
mute->set_toggle_mode(true);
- mute->set_modulate(Color(1.2, 0.8, 0.8));
+ // mute->set_modulate(Color(1.2, 0.8, 0.8));
mute->set_focus_mode(FOCUS_NONE);
- mute->connect("pressed", this, "_mute_toggled");
+ mute->set_tooltip(TTR("Toggle Mute"));
hbc->add_child(mute);
bypass = memnew(ToolButton);
- bypass->set_text("B");
+ bypass->set_tooltip(TTR("Toggle Bypass"));
bypass->set_toggle_mode(true);
- bypass->set_modulate(Color(1.1, 1.1, 0.8));
+ // bypass->set_modulate(Color(1.1, 1.1, 0.8));
bypass->set_focus_mode(FOCUS_NONE);
bypass->connect("pressed", this, "_bypass_toggled");
hbc->add_child(bypass);
@@ -763,7 +767,7 @@ void EditorAudioBuses::_update_buses() {
EditorAudioBus *audio_bus = memnew(EditorAudioBus(this));
if (i == 0) {
- audio_bus->set_self_modulate(Color(1, 0.9, 0.9));
+ audio_bus->set_self_modulate(Color(0.7, 0.7, 0.7));
}
bus_hb->add_child(audio_bus);
audio_bus->connect("delete_request", this, "_delete_bus", varray(audio_bus), CONNECT_DEFERRED);
diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp
index 7dc5db4c7d..cb1b958cca 100644
--- a/editor/editor_export.cpp
+++ b/editor/editor_export.cpp
@@ -28,13 +28,13 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "editor_export.h"
+
#include "editor/editor_file_system.h"
#include "editor/plugins/script_editor_plugin.h"
#include "editor_node.h"
#include "editor_settings.h"
#include "global_config.h"
#include "io/config_file.h"
-#include "io/md5.h"
#include "io/resource_loader.h"
#include "io/resource_saver.h"
#include "io/zip_io.h"
@@ -43,6 +43,8 @@
#include "script_language.h"
#include "version.h"
+#include "thirdparty/misc/md5.h"
+
static int _get_pad(int p_alignment, int p_n) {
int rest = p_n % p_alignment;
@@ -208,7 +210,7 @@ EditorExportPreset::EditorExportPreset() {
void EditorExportPlatform::gen_debug_flags(Vector<String> &r_flags, int p_flags) {
- String host = EditorSettings::get_singleton()->get("network/debug_host");
+ String host = EditorSettings::get_singleton()->get("network/debug/remote_host");
if (p_flags & DEBUG_FLAG_REMOTE_DEBUG_LOCALHOST)
host = "localhost";
@@ -319,7 +321,7 @@ Error EditorExportPlatform::_save_zip_file(void *p_userdata, const String &p_pat
return OK;
}
-String EditorExportPlatform::find_export_template(String template_file_name) const {
+String EditorExportPlatform::find_export_template(String template_file_name, String *err) const {
String base_name = itos(VERSION_MAJOR) + "." + itos(VERSION_MINOR) + "-" + _MKSTR(VERSION_STATUS) + "/" + template_file_name;
String user_file = EditorSettings::get_singleton()->get_settings_path() + "/templates/" + base_name;
@@ -340,9 +342,20 @@ String EditorExportPlatform::find_export_template(String template_file_name) con
return system_file;
}
}
- print_line("none,sorry");
- return String(); //not found
+ // Not found
+ if (err) {
+ *err += "No export template found at \"" + user_file + "\"";
+ if (has_system_path)
+ *err += "\n or \"" + system_file + "\".";
+ else
+ *err += ".";
+ }
+ return String(); // not found
+}
+
+bool EditorExportPlatform::exists_export_template(String template_file_name, String *err) const {
+ return find_export_template(template_file_name, err) != "";
}
Ref<EditorExportPreset> EditorExportPlatform::create_preset() {
@@ -607,7 +620,7 @@ Error EditorExportPlatform::save_zip(const Ref<EditorExportPreset> &p_preset, co
void EditorExportPlatform::gen_export_flags(Vector<String> &r_flags, int p_flags) {
- String host = EditorSettings::get_singleton()->get("network/debug_host");
+ String host = EditorSettings::get_singleton()->get("network/debug/remote_host");
if (p_flags & DEBUG_FLAG_REMOTE_DEBUG_LOCALHOST)
host = "localhost";
@@ -923,19 +936,47 @@ Ref<Texture> EditorExportPlatformPC::get_logo() const {
bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const {
- r_missing_templates = false;
+ String err;
+ bool valid = true;
+
+ if (use64 && (!exists_export_template(debug_file_64, &err) || !exists_export_template(release_file_64, &err))) {
+ valid = false;
+ }
- if (find_export_template(release_file_32) == String()) {
- r_missing_templates = true;
- } else if (find_export_template(debug_file_32) == String()) {
- r_missing_templates = true;
- } else if (find_export_template(release_file_64) == String()) {
- r_missing_templates = true;
- } else if (find_export_template(debug_file_64) == String()) {
- r_missing_templates = true;
+ if (!use64 && (!exists_export_template(debug_file_32, &err) || !exists_export_template(release_file_32, &err))) {
+ valid = false;
}
- return !r_missing_templates;
+ String custom_debug_binary = p_preset->get("custom_template/debug");
+ String custom_release_binary = p_preset->get("custom_template/release");
+
+ if (custom_debug_binary == "" && custom_release_binary == "") {
+ if (!err.empty())
+ r_error = err;
+ return valid;
+ }
+
+ bool dvalid = true;
+ bool rvalid = true;
+
+ if (!FileAccess::exists(custom_debug_binary)) {
+ dvalid = false;
+ err = "Custom debug binary not found.\n";
+ }
+
+ if (!FileAccess::exists(custom_release_binary)) {
+ rvalid = false;
+ err += "Custom release binary not found.\n";
+ }
+
+ if (dvalid || rvalid)
+ valid = true;
+ else
+ valid = false;
+
+ if (!err.empty())
+ r_error = err;
+ return valid;
}
String EditorExportPlatformPC::get_binary_extension() const {
@@ -1379,8 +1420,8 @@ Vector<StringName> EditorExportPlatform::get_dependencies(bool p_bundles) const
Set<StringName> exported;
- if (FileAccess::exists("res://godot.cfg"))
- exported.insert("res://godot.cfg");
+ if (FileAccess::exists("res://project.godot"))
+ exported.insert("res://project.godot");
if (EditorImportExport::get_singleton()->get_export_filter()!=EditorImportExport::EXPORT_SELECTED) {
@@ -1495,40 +1536,6 @@ Vector<StringName> EditorExportPlatform::get_dependencies(bool p_bundles) const
}
-String EditorExportPlatform::find_export_template(String template_file_name, String *err) const {
- String user_file = EditorSettings::get_singleton()->get_settings_path()
- +"/templates/"+template_file_name;
- String system_file=OS::get_singleton()->get_installed_templates_path();
- bool has_system_path=(system_file!="");
- system_file+=template_file_name;
-
- // Prefer user file
- if (FileAccess::exists(user_file)) {
- return user_file;
- }
-
- // Now check system file
- if (has_system_path) {
- if (FileAccess::exists(system_file)) {
- return system_file;
- }
- }
-
- // Not found
- if (err) {
- *err+="No export template found at \""+user_file+"\"";
- if (has_system_path)
- *err+="\n or \""+system_file+"\".";
- else
- *err+=".";
- }
- return "";
-}
-
-bool EditorExportPlatform::exists_export_template(String template_file_name, String *err) const {
- return find_export_template(template_file_name,err)!="";
-}
-
///////////////////////////////////////
@@ -1976,7 +1983,7 @@ Error EditorExportPlatform::export_project_files(EditorExportSaveFunction p_func
}
- StringName engine_cfg="res://godot.cfg";
+ StringName engine_cfg="res://project.godot";
StringName boot_splash;
{
String splash=GlobalConfig::get_singleton()->get("application/boot_splash"); //avoid splash from being converted
@@ -2030,7 +2037,7 @@ Error EditorExportPlatform::export_project_files(EditorExportSaveFunction p_func
{
- //make binary godot.cfg config
+ //make binary project.godot config
Map<String,Variant> custom;
@@ -2101,7 +2108,7 @@ static int _get_pad(int p_alignment, int p_n) {
void EditorExportPlatform::gen_export_flags(Vector<String> &r_flags, int p_flags) {
- String host = EditorSettings::get_singleton()->get("network/debug_host");
+ String host = EditorSettings::get_singleton()->get("network/debug/remote_host");
if (p_flags&EXPORT_REMOTE_DEBUG_LOCALHOST)
host="localhost";
@@ -2428,50 +2435,6 @@ void EditorExportPlatformPC::set_binary_extension(const String& p_extension) {
binary_extension=p_extension;
}
-bool EditorExportPlatformPC::can_export(String *r_error) const {
-
- String err;
- bool valid=true;
-
- if (use64 && (!exists_export_template(debug_binary64) || !exists_export_template(release_binary64))) {
- valid=false;
- err="No 64 bits export templates found.\nDownload and install export templates.\n";
- }
-
- if (!use64 && (!exists_export_template(debug_binary32) || !exists_export_template(release_binary32))) {
- valid=false;
- err="No 32 bits export templates found.\nDownload and install export templates.\n";
- }
-
- if(custom_debug_binary=="" && custom_release_binary=="") {
- if (r_error) *r_error=err;
- return valid;
- }
-
- bool dvalid = true;
- bool rvalid = true;
-
- if(!FileAccess::exists(custom_debug_binary)) {
- dvalid = false;
- err = "Custom debug binary not found.\n";
- }
-
- if(!FileAccess::exists(custom_release_binary)) {
- rvalid = false;
- err = "Custom release binary not found.\n";
- }
-
- if (dvalid || rvalid)
- valid = true;
- else
- valid = false;
-
- if (r_error)
- *r_error=err;
- return valid;
-}
-
-
EditorExportPlatformPC::EditorExportPlatformPC() {
export_mode=EXPORT_PACK;
diff --git a/editor/editor_export.h b/editor/editor_export.h
index a78762ad80..740f05174b 100644
--- a/editor/editor_export.h
+++ b/editor/editor_export.h
@@ -154,7 +154,8 @@ private:
protected:
virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) = 0;
- String find_export_template(String template_file_name) const;
+ bool exists_export_template(String template_file_name, String *err) const;
+ String find_export_template(String template_file_name, String *err = NULL) const;
void gen_export_flags(Vector<String> &r_flags, int p_flags);
public:
@@ -258,6 +259,8 @@ class EditorExportPlatformPC : public EditorExportPlatform {
String debug_file_32;
String debug_file_64;
+ bool use64;
+
public:
virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features);
diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp
index 1f97aba221..c47e3fc0de 100644
--- a/editor/editor_file_dialog.cpp
+++ b/editor/editor_file_dialog.cpp
@@ -488,8 +488,9 @@ void EditorFileDialog::update_file_list() {
if (!has_icon("ResizedFolder", "EditorIcons")) {
Ref<ImageTexture> folder = get_icon("FolderBig", "EditorIcons");
- Image img = folder->get_data();
- img.resize(thumbnail_size, thumbnail_size);
+ Ref<Image> img = folder->get_data();
+ img = img->duplicate();
+ img->resize(thumbnail_size, thumbnail_size);
Ref<ImageTexture> resized_folder = Ref<ImageTexture>(memnew(ImageTexture));
resized_folder->create_from_image(img, 0);
Theme::get_default()->set_icon("ResizedFolder", "EditorIcons", resized_folder);
@@ -499,8 +500,9 @@ void EditorFileDialog::update_file_list() {
if (!has_icon("ResizedFile", "EditorIcons")) {
Ref<ImageTexture> file = get_icon("FileBig", "EditorIcons");
- Image img = file->get_data();
- img.resize(thumbnail_size, thumbnail_size);
+ Ref<Image> img = file->get_data();
+ img = img->duplicate();
+ img->resize(thumbnail_size, thumbnail_size);
Ref<ImageTexture> resized_file = Ref<ImageTexture>(memnew(ImageTexture));
resized_file->create_from_image(img, 0);
Theme::get_default()->set_icon("ResizedFile", "EditorIcons", resized_file);
@@ -552,8 +554,8 @@ void EditorFileDialog::update_file_list() {
dirs.push_back("..");
}
- dirs.sort_custom<NoCaseComparator>();
- files.sort_custom<NoCaseComparator>();
+ dirs.sort_custom<NaturalNoCaseComparator>();
+ files.sort_custom<NaturalNoCaseComparator>();
while (!dirs.empty()) {
const String &dir_name = dirs.front()->get();
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp
index 2612a2af16..64a9d5df82 100644
--- a/editor/editor_file_system.cpp
+++ b/editor/editor_file_system.cpp
@@ -509,7 +509,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess
if (f.begins_with(".")) //ignore hidden and . / ..
continue;
- if (FileAccess::exists(cd.plus_file(f).plus_file("godot.cfg"))) // skip if another project inside this
+ if (FileAccess::exists(cd.plus_file(f).plus_file("project.godot"))) // skip if another project inside this
continue;
dirs.push_back(f);
@@ -522,8 +522,8 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess
da->list_dir_end();
- dirs.sort();
- files.sort();
+ dirs.sort_custom<NaturalNoCaseComparator>();
+ files.sort_custom<NaturalNoCaseComparator>();
int total = dirs.size() + files.size();
int idx = 0;
@@ -688,7 +688,7 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const
int idx = p_dir->find_dir_index(f);
if (idx == -1) {
- if (FileAccess::exists(cd.plus_file(f).plus_file("godot.cfg"))) // skip if another project inside this
+ if (FileAccess::exists(cd.plus_file(f).plus_file("project.godot"))) // skip if another project inside this
continue;
EditorFileSystemDirectory *efd = memnew(EditorFileSystemDirectory);
diff --git a/editor/editor_name_dialog.cpp b/editor/editor_name_dialog.cpp
index 972857fd88..29d5dda658 100644
--- a/editor/editor_name_dialog.cpp
+++ b/editor/editor_name_dialog.cpp
@@ -79,9 +79,11 @@ void EditorNameDialog::_bind_methods() {
}
EditorNameDialog::EditorNameDialog() {
+ makevb = memnew(VBoxContainer);
+ add_child(makevb);
name = memnew(LineEdit);
- add_child(name);
- move_child(name, get_label()->get_index() + 1);
+ makevb->add_child(name);
+ makevb->move_child(name, get_label()->get_index() + 1);
name->set_margin(MARGIN_TOP, 5);
name->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_BEGIN, 5);
name->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 5);
diff --git a/editor/editor_name_dialog.h b/editor/editor_name_dialog.h
index a98db4ffe6..eeeee34d7e 100644
--- a/editor/editor_name_dialog.h
+++ b/editor/editor_name_dialog.h
@@ -38,6 +38,7 @@ class EditorNameDialog : public ConfirmationDialog {
GDCLASS(EditorNameDialog, ConfirmationDialog);
+ VBoxContainer *makevb;
LineEdit *name;
void _line_gui_input(const InputEvent &p_event);
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index cc7ee44902..a9014ad97b 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -360,6 +360,7 @@ void EditorNode::_notification(int p_what) {
if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/always_show_close_button_in_scene_tabs", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY));
+ property_editor->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/capitalize_properties", true)));
}
}
@@ -435,7 +436,7 @@ void EditorNode::_sources_changed(bool p_exist) {
if (defer_load_scene != "") {
- print_line("loading scene DEFERED");
+ print_line("loading scene DEFERRED");
load_scene(defer_load_scene);
defer_load_scene = "";
}
@@ -1650,7 +1651,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) {
current_option = -1;
//accept->get_cancel()->hide();
- pick_main_scene->set_text(TTR("No main scene has ever been defined, select one?\nYou can change it later in later in \"Project Settings\" under the 'application' category."));
+ pick_main_scene->set_text(TTR("No main scene has ever been defined, select one?\nYou can change it later in \"Project Settings\" under the 'application' category."));
pick_main_scene->popup_centered_minsize();
return;
}
@@ -2688,6 +2689,14 @@ void EditorNode::_editor_select(int p_which) {
editor_plugin_screen = new_editor;
editor_plugin_screen->make_visible(true);
editor_plugin_screen->selected_notify();
+
+ if (EditorSettings::get_singleton()->get("interface/separate_distraction_mode")) {
+ if (p_which == EDITOR_SCRIPT) {
+ set_distraction_free_mode(script_distraction);
+ } else {
+ set_distraction_free_mode(scene_distraction);
+ }
+ }
}
void EditorNode::add_editor_plugin(EditorPlugin *p_editor) {
@@ -2697,7 +2706,7 @@ void EditorNode::add_editor_plugin(EditorPlugin *p_editor) {
ToolButton *tb = memnew(ToolButton);
tb->set_toggle_mode(true);
tb->connect("pressed", singleton, "_editor_select", varray(singleton->main_editor_buttons.size()));
- tb->set_text(p_editor->get_name());
+ tb->set_icon(singleton->gui_base->get_icon(p_editor->get_name(), "EditorIcons"));
singleton->main_editor_buttons.push_back(tb);
singleton->main_editor_button_vb->add_child(tb);
singleton->editor_table.push_back(p_editor);
@@ -3557,7 +3566,7 @@ bool EditorNode::is_scene_in_use(const String &p_path) {
void EditorNode::register_editor_types() {
ClassDB::register_class<EditorPlugin>();
- // ClassDB::register_class<EditorImportPlugin>();
+ ClassDB::register_class<EditorImportPlugin>();
// ClassDB::register_class<EditorExportPlugin>();
// ClassDB::register_class<EditorScenePostImport>();
ClassDB::register_class<EditorScript>();
@@ -4381,7 +4390,25 @@ bool EditorNode::get_docks_visible() const {
void EditorNode::_toggle_distraction_free_mode() {
- set_distraction_free_mode(distraction_free->is_pressed());
+ if (EditorSettings::get_singleton()->get("interface/separate_distraction_mode")) {
+ int screen = -1;
+ for (int i = 0; i < editor_table.size(); i++) {
+ if (editor_plugin_screen == editor_table[i]) {
+ screen = i;
+ break;
+ }
+ }
+
+ if (screen == EDITOR_SCRIPT) {
+ script_distraction = !script_distraction;
+ set_distraction_free_mode(script_distraction);
+ } else {
+ scene_distraction = !scene_distraction;
+ set_distraction_free_mode(scene_distraction);
+ }
+ } else {
+ set_distraction_free_mode(distraction_free->is_pressed());
+ }
}
void EditorNode::set_distraction_free_mode(bool p_enter) {
@@ -4436,8 +4463,9 @@ Variant EditorNode::drag_resource(const Ref<Resource> &p_res, Control *p_from) {
{
//todo make proper previews
Ref<ImageTexture> pic = gui_base->get_icon("FileBig", "EditorIcons");
- Image img = pic->get_data();
- img.resize(48, 48); //meh
+ Ref<Image> img = pic->get_data();
+ img = img->duplicate();
+ img->resize(48, 48); //meh
Ref<ImageTexture> resized_pic = Ref<ImageTexture>(memnew(ImageTexture));
resized_pic->create_from_image(img);
preview = resized_pic;
@@ -4805,6 +4833,9 @@ EditorNode::EditorNode() {
_initializing_addons = false;
docks_visible = true;
+ scene_distraction = false;
+ script_distraction = false;
+
FileAccess::set_backup_save(true);
TranslationServer::get_singleton()->set_enabled(false);
@@ -5048,13 +5079,11 @@ EditorNode::EditorNode() {
dock_select_rect_over = -1;
dock_popup_selected = -1;
//dock_select_popoup->set_(Size2(20,20));
-
for (int i = 0; i < DOCK_SLOT_MAX; i++) {
dock_slot[i]->set_custom_minimum_size(Size2(230, 220) * EDSCALE);
dock_slot[i]->set_v_size_flags(Control::SIZE_EXPAND_FILL);
dock_slot[i]->set_popup(dock_select_popoup);
dock_slot[i]->connect("pre_popup_pressed", this, "_dock_pre_popup", varray(i));
-
//dock_slot[i]->set_tab_align(TabContainer::ALIGN_LEFT);
}
@@ -5080,19 +5109,22 @@ EditorNode::EditorNode() {
*/
scene_tabs = memnew(Tabs);
scene_tabs->add_tab("unsaved");
- scene_tabs->set_tab_align(Tabs::ALIGN_CENTER);
+ scene_tabs->set_tab_align(Tabs::ALIGN_LEFT);
scene_tabs->set_tab_close_display_policy((bool(EDITOR_DEF("interface/always_show_close_button_in_scene_tabs", false)) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY));
scene_tabs->connect("tab_changed", this, "_scene_tab_changed");
scene_tabs->connect("right_button_pressed", this, "_scene_tab_script_edited");
scene_tabs->connect("tab_close", this, "_scene_tab_closed");
+ // MarginContainer *st_mc = memnew( MarginContainer );
+ // st_mc->add_child(scene_tabs);
srt->add_child(scene_tabs);
scene_root_parent = memnew(PanelContainer);
scene_root_parent->set_custom_minimum_size(Size2(0, 80) * EDSCALE);
+ scene_root_parent->add_style_override("panel", gui_base->get_stylebox("EditorPanel", "EditorStyles"));
- //Ref<StyleBox> sp = scene_root_parent->get_stylebox("panel","TabContainer");
- //scene_root_parent->add_style_override("panel",sp);
+ // Ref<StyleBox> sp = scene_root_parent->get_stylebox("panel_full","PanelContainer");
+ // scene_root_parent->add_style_override("panel",sp);
/*scene_root_parent->set_anchor( MARGIN_RIGHT, Control::ANCHOR_END );
scene_root_parent->set_anchor( MARGIN_BOTTOM, Control::ANCHOR_END );
@@ -5115,13 +5147,14 @@ EditorNode::EditorNode() {
viewport = memnew(VBoxContainer);
viewport->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+ viewport->add_constant_override("separation", 0);
/*for(int i=0;i<4;i++) {
viewport->set_margin(Margin(i),sp->get_margin(Margin(i)));
}*/
scene_root_parent->add_child(viewport);
PanelContainer *top_region = memnew(PanelContainer);
- top_region->add_style_override("panel", gui_base->get_stylebox("hover", "Button"));
+ top_region->add_style_override("panel", memnew(StyleBoxEmpty));
HBoxContainer *left_menu_hb = memnew(HBoxContainer);
top_region->add_child(left_menu_hb);
menu_hb->add_child(top_region);
@@ -5204,7 +5237,7 @@ EditorNode::EditorNode() {
}
PanelContainer *editor_region = memnew(PanelContainer);
- editor_region->add_style_override("panel", gui_base->get_stylebox("hover", "Button"));
+ editor_region->add_style_override("panel", memnew(StyleBoxEmpty));
main_editor_button_vb = memnew(HBoxContainer);
editor_region->add_child(main_editor_button_vb);
menu_hb->add_child(editor_region);
@@ -5271,6 +5304,8 @@ EditorNode::EditorNode() {
//s1->set_size(Point2(10,15));
play_cc = memnew(CenterContainer);
+ // play_cc->add_style_override("bg",gui_base->get_stylebox("panel","PanelContainer"));
+
play_cc->set_mouse_filter(Control::MOUSE_FILTER_IGNORE);
gui_base->add_child(play_cc);
play_cc->set_area_as_parent_rect();
@@ -5278,7 +5313,7 @@ EditorNode::EditorNode() {
play_cc->set_margin(MARGIN_TOP, 5);
top_region = memnew(PanelContainer);
- top_region->add_style_override("panel", gui_base->get_stylebox("hover", "Button"));
+ top_region->add_style_override("panel", gui_base->get_stylebox("panel", "ButtonGroup"));
play_cc->add_child(top_region);
HBoxContainer *play_hb = memnew(HBoxContainer);
@@ -5398,7 +5433,9 @@ EditorNode::EditorNode() {
}
PanelContainer *vu_cont = memnew(PanelContainer);
- vu_cont->add_style_override("panel", gui_base->get_stylebox("hover", "Button"));
+ vu_cont->add_style_override("panel", memnew(StyleBoxEmpty));
+
+ // CenterContainer *vu_cont = memnew( CenterContainer );
menu_hb->add_child(vu_cont);
audio_vu = memnew(TextureProgress);
@@ -5419,7 +5456,7 @@ EditorNode::EditorNode() {
}
top_region = memnew(PanelContainer);
- top_region->add_style_override("panel", gui_base->get_stylebox("hover", "Button"));
+ top_region->add_style_override("panel", memnew(StyleBoxEmpty));
HBoxContainer *right_menu_hb = memnew(HBoxContainer);
top_region->add_child(right_menu_hb);
menu_hb->add_child(top_region);
@@ -5585,7 +5622,7 @@ EditorNode::EditorNode() {
search_button = memnew(ToolButton);
search_button->set_toggle_mode(true);
search_button->set_pressed(false);
- search_button->set_icon(gui_base->get_icon("Zoom", "EditorIcons"));
+ search_button->set_icon(gui_base->get_icon("Search", "EditorIcons"));
prop_editor_hb->add_child(search_button);
search_button->connect("toggled", this, "_toggle_search_bar");
@@ -5621,6 +5658,7 @@ EditorNode::EditorNode() {
property_editor->set_show_categories(true);
property_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL);
property_editor->set_use_doc_hints(true);
+ property_editor->set_enable_capitalize_paths(bool(EDITOR_DEF("interface/capitalize_properties", true)));
property_editor->hide_top_label();
property_editor->register_text_enter(search_box);
@@ -5674,7 +5712,7 @@ EditorNode::EditorNode() {
_update_layouts_menu();
bottom_panel = memnew(PanelContainer);
- bottom_panel->add_style_override("panel", gui_base->get_stylebox("panelf", "Panel"));
+ bottom_panel->add_style_override("panel", gui_base->get_stylebox("EditorPanel", "EditorStyles"));
center_split->add_child(bottom_panel);
center_split->set_dragger_visibility(SplitContainer::DRAGGER_HIDDEN);
@@ -6051,7 +6089,10 @@ EditorNode::EditorNode() {
{
_initializing_addons = true;
- Vector<String> addons = GlobalConfig::get_singleton()->get("editor_plugins/enabled");
+ Vector<String> addons;
+ if (GlobalConfig::get_singleton()->has("editor_plugins/enabled")) {
+ addons = GlobalConfig::get_singleton()->get("editor_plugins/enabled");
+ }
for (int i = 0; i < addons.size(); i++) {
set_addon_plugin_enabled(addons[i], true);
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 7de713eae9..fc107bb505 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -357,6 +357,9 @@ private:
bool docks_visible;
ToolButton *distraction_free;
+ bool scene_distraction;
+ bool script_distraction;
+
String _tmp_import_path;
EditorExport *editor_export;
diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp
index 405784a7e2..5e5b31aac9 100644
--- a/editor/editor_plugin.cpp
+++ b/editor/editor_plugin.cpp
@@ -276,6 +276,11 @@ bool EditorPlugin::get_remove_list(List<Node *> *p_list) {
void EditorPlugin::restore_global_state() {}
void EditorPlugin::save_global_state() {}
+void EditorPlugin::add_import_plugin(const Ref<EditorImportPlugin> &p_importer) {
+ ResourceFormatImporter::get_singleton()->add_importer(p_importer);
+ EditorFileSystem::get_singleton()->scan_changes();
+}
+
void EditorPlugin::set_window_layout(Ref<ConfigFile> p_layout) {
if (get_script_instance() && get_script_instance()->has_method("set_window_layout")) {
@@ -360,7 +365,7 @@ void EditorPlugin::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_editor_settings:EditorSettings"), &EditorPlugin::get_editor_settings);
ClassDB::bind_method(D_METHOD("queue_save_layout"), &EditorPlugin::queue_save_layout);
ClassDB::bind_method(D_METHOD("edit_resource"), &EditorPlugin::edit_resource);
-
+ ClassDB::bind_method(D_METHOD("add_import_plugin"), &EditorPlugin::add_import_plugin);
ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "forward_canvas_gui_input", PropertyInfo(Variant::TRANSFORM2D, "canvas_xform"), PropertyInfo(Variant::INPUT_EVENT, "event")));
ClassDB::add_virtual_method(get_class_static(), MethodInfo("forward_draw_over_canvas", PropertyInfo(Variant::TRANSFORM2D, "canvas_xform"), PropertyInfo(Variant::OBJECT, "canvas:Control")));
ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "forward_spatial_gui_input", PropertyInfo(Variant::OBJECT, "camera", PROPERTY_HINT_RESOURCE_TYPE, "Camera"), PropertyInfo(Variant::INPUT_EVENT, "event")));
diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h
index 5df1f63fbe..5f4b47caee 100644
--- a/editor/editor_plugin.h
+++ b/editor/editor_plugin.h
@@ -30,6 +30,7 @@
#ifndef EDITOR_PLUGIN_H
#define EDITOR_PLUGIN_H
+#include "editor/import/editor_import_plugin.h"
#include "io/config_file.h"
#include "scene/gui/tool_button.h"
#include "scene/main/node.h"
@@ -146,6 +147,8 @@ public:
virtual void restore_global_state();
virtual void save_global_state();
+ void add_import_plugin(const Ref<EditorImportPlugin> &p_importer);
+
EditorPlugin();
virtual ~EditorPlugin();
};
diff --git a/editor/editor_profiler.cpp b/editor/editor_profiler.cpp
index 8f4312111a..9d12ad687e 100644
--- a/editor/editor_profiler.cpp
+++ b/editor/editor_profiler.cpp
@@ -344,14 +344,16 @@ void EditorProfiler::_update_plot() {
wr = PoolVector<uint8_t>::Write();
- Image img(w, h, 0, Image::FORMAT_RGBA8, graph_image);
+ Ref<Image> img;
+ img.instance();
+ img->create(w, h, 0, Image::FORMAT_RGBA8, graph_image);
if (reset_texture) {
if (graph_texture.is_null()) {
graph_texture.instance();
}
- graph_texture->create(img.get_width(), img.get_height(), img.get_format(), Texture::FLAG_VIDEO_SURFACE);
+ graph_texture->create(img->get_width(), img->get_height(), img->get_format(), Texture::FLAG_VIDEO_SURFACE);
}
graph_texture->set_data(img);
diff --git a/editor/editor_run.cpp b/editor/editor_run.cpp
index d36b8cece5..e0ebe985cd 100644
--- a/editor/editor_run.cpp
+++ b/editor/editor_run.cpp
@@ -41,6 +41,7 @@ Error EditorRun::run(const String &p_scene, const String p_custom_args, const Li
List<String> args;
String resource_path = GlobalConfig::get_singleton()->get_resource_path();
+ String remote_host = EditorSettings::get_singleton()->get("network/debug/remote_host");
if (resource_path != "") {
args.push_back("-path");
@@ -49,7 +50,7 @@ Error EditorRun::run(const String &p_scene, const String p_custom_args, const Li
if (true) {
args.push_back("-rdebug");
- args.push_back("localhost:" + String::num(GLOBAL_GET("network/debug/remote_port")));
+ args.push_back(remote_host + ":" + String::num(GLOBAL_GET("network/debug/remote_port")));
}
args.push_back("-epid");
diff --git a/editor/editor_run_native.cpp b/editor/editor_run_native.cpp
index 5a519a1dbd..4a767621ef 100644
--- a/editor/editor_run_native.cpp
+++ b/editor/editor_run_native.cpp
@@ -43,11 +43,12 @@ void EditorRunNative::_notification(int p_what) {
continue;
Ref<ImageTexture> icon = eep->get_logo();
if (!icon.is_null()) {
- Image im = icon->get_data();
- im.clear_mipmaps();
- if (!im.empty()) {
+ Ref<Image> im = icon->get_data();
+ im = im->duplicate();
+ im->clear_mipmaps();
+ if (!im->empty()) {
- im.resize(16, 16);
+ im->resize(16, 16);
Ref<ImageTexture> small_icon;
small_icon.instance();
small_icon->create_from_image(im, 0);
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index f1daf05432..0a46acddb2 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -407,13 +407,12 @@ void EditorSettings::setup_network() {
IP::get_singleton()->get_local_addresses(&local_ip);
String lip;
String hint;
- String current = get("network/debug_host");
+ String current = has("network/debug/remote_host") ? get("network/debug/remote_host") : "";
+ int port = has("network/debug/remote_port") ? (int)get("network/debug/remote_port") : 6007;
for (List<IP_Address>::Element *E = local_ip.front(); E; E = E->next()) {
String ip = E->get();
- if (ip == "127.0.0.1")
- continue;
if (lip == "")
lip = ip;
@@ -424,8 +423,11 @@ void EditorSettings::setup_network() {
hint += ip;
}
- set("network/debug_host", lip);
- add_property_hint(PropertyInfo(Variant::STRING, "network/debug_host", PROPERTY_HINT_ENUM, hint));
+ set("network/debug/remote_host", lip);
+ add_property_hint(PropertyInfo(Variant::STRING, "network/debug/remote_host", PROPERTY_HINT_ENUM, hint));
+
+ set("network/debug/remote_port", port);
+ add_property_hint(PropertyInfo(Variant::INT, "network/debug/remote_port", PROPERTY_HINT_RANGE, "1,65535,1"));
}
void EditorSettings::save() {
@@ -509,6 +511,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("interface/dim_transition_time", 0.08f);
hints["interface/dim_transition_time"] = PropertyInfo(Variant::REAL, "interface/dim_transition_time", PROPERTY_HINT_RANGE, "0,1,0.001", PROPERTY_USAGE_DEFAULT);
+ set("interface/separate_distraction_mode", false);
+
set("filesystem/directories/autoscan_project_path", "");
hints["filesystem/directories/autoscan_project_path"] = PropertyInfo(Variant::STRING, "filesystem/directories/autoscan_project_path", PROPERTY_HINT_GLOBAL_DIR);
set("filesystem/directories/default_project_path", "");
@@ -529,8 +533,11 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("text_editor/highlighting/highlight_all_occurrences", true);
set("text_editor/cursor/scroll_past_end_of_file", false);
- set("text_editor/indent/tab_size", 4);
- hints["text_editor/indent/tab_size"] = PropertyInfo(Variant::INT, "text_editor/indent/tab_size", PROPERTY_HINT_RANGE, "1, 64, 1"); // size of 0 crashes.
+ set("text_editor/indent/type", 0);
+ hints["text_editor/indent/type"] = PropertyInfo(Variant::INT, "text_editor/indent/type", PROPERTY_HINT_ENUM, "Tabs,Spaces");
+ set("text_editor/indent/size", 4);
+ hints["text_editor/indent/size"] = PropertyInfo(Variant::INT, "text_editor/indent/size", PROPERTY_HINT_RANGE, "1, 64, 1"); // size of 0 crashes.
+ set("text_editor/indent/convert_indent_on_save", false);
set("text_editor/indent/draw_tabs", true);
set("text_editor/line_numbers/show_line_numbers", true);
@@ -554,6 +561,9 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
hints["text_editor/theme/font"] = PropertyInfo(Variant::STRING, "text_editor/theme/font", PROPERTY_HINT_GLOBAL_FILE, "*.fnt");
set("text_editor/completion/auto_brace_complete", false);
set("text_editor/files/restore_scripts_on_load", true);
+ set("text_editor/completion/complete_file_paths", true);
+ set("text_editor/files/maximum_recent_files", 20);
+ hints["text_editor/files/maximum_recent_files"] = PropertyInfo(Variant::INT, "text_editor/files/maximum_recent_files", PROPERTY_HINT_RANGE, "1, 200, 0");
//set("docks/scene_tree/display_old_action_buttons",false);
set("docks/scene_tree/start_create_dialog_fully_expanded", false);
@@ -562,7 +572,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("editors/grid_map/pick_distance", 5000.0);
- set("editors/3d/grid_color", Color(0, 1, 0, 0.2));
+ set("editors/3d/grid_color", Color(1, 1, 1, 0.2));
hints["editors/3d/grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/grid_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
set("editors/3d/default_fov", 45.0);
@@ -583,16 +593,19 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("editors/3d/emulate_3_button_mouse", false);
set("editors/3d/warped_mouse_panning", true);
+ set("editors/3d/freelook_base_speed", 1);
+ set("editors/3d/freelook_modifier_speed_factor", 5.0);
+
set("editors/2d/bone_width", 5);
set("editors/2d/bone_color1", Color(1.0, 1.0, 1.0, 0.9));
set("editors/2d/bone_color2", Color(0.75, 0.75, 0.75, 0.9));
set("editors/2d/bone_selected_color", Color(0.9, 0.45, 0.45, 0.9));
set("editors/2d/bone_ik_color", Color(0.9, 0.9, 0.45, 0.9));
-
set("editors/2d/keep_margins_when_changing_anchors", false);
-
set("editors/2d/warped_mouse_panning", true);
+ set("editors/poly_editor/point_grab_radius", 8);
+
set("run/window_placement/rect", 0);
hints["run/window_placement/rect"] = PropertyInfo(Variant::INT, "run/window_placement/rect", PROPERTY_HINT_ENUM, "Default,Centered,Custom Position,Force Maximized,Force Full Screen");
String screen_hints = TTR("Default (Same as Editor)");
diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp
index 3b5dbf7fc7..1457f6b421 100644
--- a/editor/editor_themes.cpp
+++ b/editor/editor_themes.cpp
@@ -49,11 +49,85 @@ Ref<Theme> create_editor_theme() {
}
focus_sbt->set_draw_center(false);
theme->set_stylebox("EditorFocus", "EditorStyles", focus_sbt);
- theme->set_color("prop_category", "Editor", Color::hex(0x3f3a44ff));
- theme->set_color("prop_section", "Editor", Color::hex(0x35313aff));
- theme->set_color("prop_subsection", "Editor", Color::hex(0x312e37ff));
- theme->set_color("fg_selected", "Editor", Color::html("ffbd8e8e"));
- theme->set_color("fg_error", "Editor", Color::html("ffbd8e8e"));
+
+ Ref<StyleBoxFlat> style_panel(memnew(StyleBoxFlat));
+ style_panel->set_bg_color(Color::html("#36424e"));
+ style_panel->set_default_margin(MARGIN_LEFT, 1);
+ style_panel->set_default_margin(MARGIN_RIGHT, 1);
+ style_panel->set_default_margin(MARGIN_BOTTOM, 1);
+ style_panel->set_default_margin(MARGIN_TOP, 4 * EDSCALE);
+ theme->set_stylebox("panel", "TabContainer", style_panel);
+ theme->set_stylebox("EditorPanel", "EditorStyles", style_panel);
+
+ Ref<StyleBoxFlat> style_bg(memnew(StyleBoxFlat));
+ style_bg->set_bg_color(Color::html("#2b353f"));
+ style_bg->set_default_margin(MARGIN_LEFT, 0);
+ style_bg->set_default_margin(MARGIN_RIGHT, 0);
+ style_bg->set_default_margin(MARGIN_BOTTOM, 0);
+ style_bg->set_default_margin(MARGIN_TOP, 0);
+ theme->set_stylebox("bg", "Tree", style_bg);
+ theme->set_stylebox("bg", "ItemList", style_bg);
+ theme->set_stylebox("EditorBG", "EditorStyles", style_bg);
+
+ Ref<StyleBox> style_tree_btn = theme->get_stylebox("button_pressed", "Tree");
+ style_tree_btn->set_default_margin(MARGIN_LEFT, 3 * EDSCALE);
+ style_tree_btn->set_default_margin(MARGIN_RIGHT, 3 * EDSCALE);
+ theme->set_stylebox("button_pressed", "Tree", style_tree_btn);
+
+ Ref<StyleBoxFlat> style_tab(memnew(StyleBoxFlat));
+ style_tab->set_default_margin(MARGIN_LEFT, 15 * EDSCALE);
+ style_tab->set_default_margin(MARGIN_RIGHT, 15 * EDSCALE);
+ style_tab->set_default_margin(MARGIN_BOTTOM, 5 * EDSCALE);
+ style_tab->set_default_margin(MARGIN_TOP, 5 * EDSCALE);
+
+ Ref<StyleBoxFlat> style_tab_fg = style_tab->duplicate();
+ style_tab_fg->set_bg_color(Color::html("#36424e"));
+
+ Ref<StyleBoxFlat> style_tab_bg = style_tab->duplicate();
+ style_tab_bg->set_draw_center(false);
+
+ theme->set_stylebox("tab_fg", "TabContainer", style_tab_fg);
+ theme->set_stylebox("tab_bg", "TabContainer", style_tab_bg);
+ theme->set_stylebox("tab_fg", "Tabs", style_tab_fg);
+ theme->set_stylebox("tab_bg", "Tabs", style_tab_bg);
+
+ Ref<StyleBoxFlat> style_panel_debugger(memnew(StyleBoxFlat));
+ style_panel_debugger->set_bg_color(Color::html("#3e4c5a"));
+ style_panel_debugger->set_default_margin(MARGIN_LEFT, 0);
+ style_panel_debugger->set_default_margin(MARGIN_RIGHT, 0);
+ style_panel_debugger->set_default_margin(MARGIN_BOTTOM, 0);
+ style_panel_debugger->set_default_margin(MARGIN_TOP, 4 * EDSCALE);
+ theme->set_stylebox("EditorPanelDebugger", "EditorStyles", style_panel_debugger);
+
+ Ref<StyleBoxFlat> style_tab_fg_debugger = style_tab->duplicate();
+ style_tab_fg_debugger->set_bg_color(Color::html("#3e4c5a"));
+ style_tab_fg_debugger->set_default_margin(MARGIN_LEFT, 10 * EDSCALE);
+ style_tab_fg_debugger->set_default_margin(MARGIN_RIGHT, 10 * EDSCALE);
+ Ref<StyleBoxFlat> style_tab_bg_debugger = style_tab->duplicate();
+ style_tab_bg_debugger->set_draw_center(false);
+ style_tab_bg_debugger->set_default_margin(MARGIN_LEFT, 10 * EDSCALE);
+ style_tab_bg_debugger->set_default_margin(MARGIN_RIGHT, 10 * EDSCALE);
+
+ theme->set_stylebox("EditorTabFGDebugger", "EditorStyles", style_tab_fg_debugger);
+ theme->set_stylebox("EditorTabBGDebugger", "EditorStyles", style_tab_bg_debugger);
+
+ Ref<StyleBoxFlat> style_textedit_normal(memnew(StyleBoxFlat));
+ style_textedit_normal->set_bg_color(Color::html("#29343d"));
+ style_textedit_normal->set_default_margin(MARGIN_LEFT, 0);
+ style_textedit_normal->set_default_margin(MARGIN_RIGHT, 0);
+ style_textedit_normal->set_default_margin(MARGIN_BOTTOM, 0);
+ style_textedit_normal->set_default_margin(MARGIN_TOP, 0);
+ theme->set_stylebox("normal", "TextEdit", style_textedit_normal);
+
+ theme->set_constant("separation", "HSplitContainer", 8 * EDSCALE);
+ theme->set_constant("separation", "VSplitContainer", 8 * EDSCALE);
+ theme->set_constant("side_margin", "TabContainer", 0);
+
+ // theme->set_color("prop_category","Editor",Color::hex(0x3f3a44ff));
+ // theme->set_color("prop_section","Editor",Color::hex(0x35313aff));
+ // theme->set_color("prop_subsection","Editor",Color::hex(0x312e37ff));
+ // theme->set_color("fg_selected","Editor",Color::html("ffbd8e8e"));
+ // theme->set_color("fg_error","Editor",Color::html("ffbd8e8e"));
return theme;
}
diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp
index 83ada90144..e6f15d1712 100644
--- a/editor/export_template_manager.cpp
+++ b/editor/export_template_manager.cpp
@@ -1,11 +1,40 @@
+/*************************************************************************/
+/* export_template_manager.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
#include "export_template_manager.h"
+
#include "editor_node.h"
#include "editor_scale.h"
+#include "io/zip_io.h"
#include "os/dir_access.h"
#include "version.h"
-#include "io/zip_io.h"
-
void ExportTemplateManager::_update_template_list() {
while (current_hb->get_child_count()) {
diff --git a/editor/export_template_manager.h b/editor/export_template_manager.h
index c3834ec643..480c73e123 100644
--- a/editor/export_template_manager.h
+++ b/editor/export_template_manager.h
@@ -1,3 +1,32 @@
+/*************************************************************************/
+/* export_template_manager.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
#ifndef EXPORT_TEMPLATE_MANAGER_H
#define EXPORT_TEMPLATE_MANAGER_H
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index 9d10117418..71e43216b3 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -150,10 +150,11 @@ void FileSystemDock::_notification(int p_what) {
}
button_display_mode->connect("pressed", this, "_change_file_display");
//file_options->set_icon( get_icon("Tools","EditorIcons"));
+
files->connect("item_activated", this, "_select_file");
button_hist_next->connect("pressed", this, "_fw_history");
button_hist_prev->connect("pressed", this, "_bw_history");
- search_icon->set_texture(get_icon("Zoom", "EditorIcons"));
+ search_icon->set_texture(get_icon("Search", "EditorIcons"));
button_hist_next->set_icon(get_icon("Forward", "EditorIcons"));
button_hist_prev->set_icon(get_icon("Back", "EditorIcons"));
@@ -415,8 +416,9 @@ void FileSystemDock::_update_files(bool p_keep_selection) {
if (!has_icon("ResizedFolder", "EditorIcons")) {
Ref<ImageTexture> folder = get_icon("FolderBig", "EditorIcons");
- Image img = folder->get_data();
- img.resize(thumbnail_size, thumbnail_size);
+ Ref<Image> img = folder->get_data();
+ img = img->duplicate();
+ img->resize(thumbnail_size, thumbnail_size);
Ref<ImageTexture> resized_folder = Ref<ImageTexture>(memnew(ImageTexture));
resized_folder->create_from_image(img, 0);
Theme::get_default()->set_icon("ResizedFolder", "EditorIcons", resized_folder);
@@ -426,8 +428,8 @@ void FileSystemDock::_update_files(bool p_keep_selection) {
if (!has_icon("ResizedFile", "EditorIcons")) {
Ref<ImageTexture> file = get_icon("FileBig", "EditorIcons");
- Image img = file->get_data();
- img.resize(thumbnail_size, thumbnail_size);
+ Ref<Image> img = file->get_data();
+ img->resize(thumbnail_size, thumbnail_size);
Ref<ImageTexture> resized_file = Ref<ImageTexture>(memnew(ImageTexture));
resized_file->create_from_image(img, 0);
Theme::get_default()->set_icon("ResizedFile", "EditorIcons", resized_file);
@@ -1064,6 +1066,11 @@ void FileSystemDock::_folder_option(int p_option) {
child = child->get_next();
}
break;
+ case FOLDER_SHOW_IN_EXPLORER:
+ String path = item->get_metadata(tree->get_selected_column());
+ String dir = GlobalConfig::get_singleton()->globalize_path(path);
+ OS::get_singleton()->shell_open(String("file://") + dir);
+ return;
}
}
@@ -1102,6 +1109,9 @@ void FileSystemDock::_dir_rmb_pressed(const Vector2 &p_pos) {
folder_options->add_item(TTR("Expand all"), FOLDER_EXPAND_ALL);
folder_options->add_item(TTR("Collapse all"), FOLDER_COLLAPSE_ALL);
+ folder_options->add_separator();
+ folder_options->add_item(TTR("Show In File Manager"), FOLDER_SHOW_IN_EXPLORER);
+
folder_options->set_position(tree->get_global_position() + p_pos);
folder_options->popup();
}
@@ -1659,8 +1669,6 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
button_reload->set_tooltip(TTR("Re-Scan Filesystem"));
button_reload->hide();
- //toolbar_hbc->add_spacer();
-
button_favorite = memnew(Button);
button_favorite->set_flat(true);
button_favorite->set_toggle_mode(true);
@@ -1715,6 +1723,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
tree->connect("item_rmb_selected", this, "_dir_rmb_pressed");
files = memnew(ItemList);
+ files->add_style_override("bg", editor->get_gui_base()->get_stylebox("EditorBG", "EditorStyles"));
files->set_v_size_flags(SIZE_EXPAND_FILL);
files->set_select_mode(ItemList::SELECT_MULTI);
files->set_drag_forwarding(this);
@@ -1728,6 +1737,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
file_list_vb->set_v_size_flags(SIZE_EXPAND_FILL);
path_hb = memnew(HBoxContainer);
+ path_hb->add_child(memnew(Control));
file_list_vb->add_child(path_hb);
button_back = memnew(ToolButton);
diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h
index 2b85cfa96d..77898aa6c2 100644
--- a/editor/filesystem_dock.h
+++ b/editor/filesystem_dock.h
@@ -76,7 +76,8 @@ private:
enum FolderMenu {
FOLDER_EXPAND_ALL,
- FOLDER_COLLAPSE_ALL
+ FOLDER_COLLAPSE_ALL,
+ FOLDER_SHOW_IN_EXPLORER
};
VBoxContainer *scanning_vb;
diff --git a/editor/icons/2x/icon_2_d.png b/editor/icons/2x/icon_2_d.png
new file mode 100644
index 0000000000..9b2ed64665
--- /dev/null
+++ b/editor/icons/2x/icon_2_d.png
Binary files differ
diff --git a/editor/icons/2x/icon_3_d.png b/editor/icons/2x/icon_3_d.png
new file mode 100644
index 0000000000..218c246870
--- /dev/null
+++ b/editor/icons/2x/icon_3_d.png
Binary files differ
diff --git a/editor/icons/2x/icon_animation_player.png b/editor/icons/2x/icon_animation_player.png
index 4a3209ab70..1a9373938b 100644
--- a/editor/icons/2x/icon_animation_player.png
+++ b/editor/icons/2x/icon_animation_player.png
Binary files differ
diff --git a/editor/icons/2x/icon_animation_tree.png b/editor/icons/2x/icon_animation_tree.png
index a213ab6e5e..a1dd4f137f 100644
--- a/editor/icons/2x/icon_animation_tree.png
+++ b/editor/icons/2x/icon_animation_tree.png
Binary files differ
diff --git a/editor/icons/2x/icon_animation_tree_player.png b/editor/icons/2x/icon_animation_tree_player.png
index a213ab6e5e..a1dd4f137f 100644
--- a/editor/icons/2x/icon_animation_tree_player.png
+++ b/editor/icons/2x/icon_animation_tree_player.png
Binary files differ
diff --git a/editor/icons/2x/icon_arrow_left.png b/editor/icons/2x/icon_arrow_left.png
index bc3995f70b..64bb9c81c0 100644
--- a/editor/icons/2x/icon_arrow_left.png
+++ b/editor/icons/2x/icon_arrow_left.png
Binary files differ
diff --git a/editor/icons/2x/icon_arrow_right.png b/editor/icons/2x/icon_arrow_right.png
index 045b390e0d..c3d6e66482 100644
--- a/editor/icons/2x/icon_arrow_right.png
+++ b/editor/icons/2x/icon_arrow_right.png
Binary files differ
diff --git a/editor/icons/2x/icon_arrow_up.png b/editor/icons/2x/icon_arrow_up.png
index 524ab934e2..008ef633ba 100644
--- a/editor/icons/2x/icon_arrow_up.png
+++ b/editor/icons/2x/icon_arrow_up.png
Binary files differ
diff --git a/editor/icons/2x/icon_asset_lib.png b/editor/icons/2x/icon_asset_lib.png
new file mode 100644
index 0000000000..22c31fb2d5
--- /dev/null
+++ b/editor/icons/2x/icon_asset_lib.png
Binary files differ
diff --git a/editor/icons/2x/icon_audio_bus_bypass.png b/editor/icons/2x/icon_audio_bus_bypass.png
new file mode 100644
index 0000000000..b44c40fb35
--- /dev/null
+++ b/editor/icons/2x/icon_audio_bus_bypass.png
Binary files differ
diff --git a/editor/icons/2x/icon_audio_bus_layout.png b/editor/icons/2x/icon_audio_bus_layout.png
new file mode 100644
index 0000000000..d6a5cba5c1
--- /dev/null
+++ b/editor/icons/2x/icon_audio_bus_layout.png
Binary files differ
diff --git a/editor/icons/2x/icon_audio_bus_mute.png b/editor/icons/2x/icon_audio_bus_mute.png
new file mode 100644
index 0000000000..4b334682f0
--- /dev/null
+++ b/editor/icons/2x/icon_audio_bus_mute.png
Binary files differ
diff --git a/editor/icons/2x/icon_audio_bus_solo.png b/editor/icons/2x/icon_audio_bus_solo.png
new file mode 100644
index 0000000000..b09a15351a
--- /dev/null
+++ b/editor/icons/2x/icon_audio_bus_solo.png
Binary files differ
diff --git a/editor/icons/2x/icon_audio_effect_amplify.png b/editor/icons/2x/icon_audio_effect_amplify.png
new file mode 100644
index 0000000000..868bc6ddde
--- /dev/null
+++ b/editor/icons/2x/icon_audio_effect_amplify.png
Binary files differ
diff --git a/editor/icons/2x/icon_audio_player.png b/editor/icons/2x/icon_audio_player.png
new file mode 100644
index 0000000000..799b93cc5d
--- /dev/null
+++ b/editor/icons/2x/icon_audio_player.png
Binary files differ
diff --git a/editor/icons/2x/icon_back.png b/editor/icons/2x/icon_back.png
index 648c440928..b3c9b302b4 100644
--- a/editor/icons/2x/icon_back.png
+++ b/editor/icons/2x/icon_back.png
Binary files differ
diff --git a/editor/icons/2x/icon_baked_light.png b/editor/icons/2x/icon_baked_light.png
index 3c1cba5586..9b13ed8ff1 100644
--- a/editor/icons/2x/icon_baked_light.png
+++ b/editor/icons/2x/icon_baked_light.png
Binary files differ
diff --git a/editor/icons/2x/icon_bool.png b/editor/icons/2x/icon_bool.png
index 47103538bd..e2383809d8 100644
--- a/editor/icons/2x/icon_bool.png
+++ b/editor/icons/2x/icon_bool.png
Binary files differ
diff --git a/editor/icons/2x/icon_bus_vu_db.png b/editor/icons/2x/icon_bus_vu_db.png
new file mode 100644
index 0000000000..8856b026f0
--- /dev/null
+++ b/editor/icons/2x/icon_bus_vu_db.png
Binary files differ
diff --git a/editor/icons/2x/icon_bus_vu_empty.png b/editor/icons/2x/icon_bus_vu_empty.png
new file mode 100644
index 0000000000..dfa1536fb4
--- /dev/null
+++ b/editor/icons/2x/icon_bus_vu_empty.png
Binary files differ
diff --git a/editor/icons/2x/icon_bus_vu_frozen.png b/editor/icons/2x/icon_bus_vu_frozen.png
new file mode 100644
index 0000000000..367322b21c
--- /dev/null
+++ b/editor/icons/2x/icon_bus_vu_frozen.png
Binary files differ
diff --git a/editor/icons/2x/icon_bus_vu_full.png b/editor/icons/2x/icon_bus_vu_full.png
new file mode 100644
index 0000000000..2c2f0bca06
--- /dev/null
+++ b/editor/icons/2x/icon_bus_vu_full.png
Binary files differ
diff --git a/editor/icons/2x/icon_copy_node_path.png b/editor/icons/2x/icon_copy_node_path.png
index 056748d20b..29180d017c 100644
--- a/editor/icons/2x/icon_copy_node_path.png
+++ b/editor/icons/2x/icon_copy_node_path.png
Binary files differ
diff --git a/editor/icons/2x/icon_curve_texture.png b/editor/icons/2x/icon_curve_texture.png
new file mode 100644
index 0000000000..ccdebe89f5
--- /dev/null
+++ b/editor/icons/2x/icon_curve_texture.png
Binary files differ
diff --git a/editor/icons/2x/icon_debug.png b/editor/icons/2x/icon_debug.png
new file mode 100644
index 0000000000..9c581f340f
--- /dev/null
+++ b/editor/icons/2x/icon_debug.png
Binary files differ
diff --git a/editor/icons/2x/icon_edit_resource.png b/editor/icons/2x/icon_edit_resource.png
index 5ba9b36b0a..f0c7570160 100644
--- a/editor/icons/2x/icon_edit_resource.png
+++ b/editor/icons/2x/icon_edit_resource.png
Binary files differ
diff --git a/editor/icons/2x/icon_error.png b/editor/icons/2x/icon_error.png
index a6d79ab41b..c915da1d27 100644
--- a/editor/icons/2x/icon_error.png
+++ b/editor/icons/2x/icon_error.png
Binary files differ
diff --git a/editor/icons/2x/icon_file.png b/editor/icons/2x/icon_file.png
index 683f1141fd..a10fe2cc60 100644
--- a/editor/icons/2x/icon_file.png
+++ b/editor/icons/2x/icon_file.png
Binary files differ
diff --git a/editor/icons/2x/icon_forward.png b/editor/icons/2x/icon_forward.png
index 11fd444a04..6029449354 100644
--- a/editor/icons/2x/icon_forward.png
+++ b/editor/icons/2x/icon_forward.png
Binary files differ
diff --git a/editor/icons/2x/icon_g_d_native_script.png b/editor/icons/2x/icon_g_d_native_script.png
new file mode 100644
index 0000000000..31cc130867
--- /dev/null
+++ b/editor/icons/2x/icon_g_d_native_script.png
Binary files differ
diff --git a/editor/icons/2x/icon_godot.png b/editor/icons/2x/icon_godot.png
deleted file mode 100644
index 94d87e23cc..0000000000
--- a/editor/icons/2x/icon_godot.png
+++ /dev/null
Binary files differ
diff --git a/editor/icons/2x/icon_godot_docs.png b/editor/icons/2x/icon_godot_docs.png
new file mode 100644
index 0000000000..be30f092ef
--- /dev/null
+++ b/editor/icons/2x/icon_godot_docs.png
Binary files differ
diff --git a/editor/icons/2x/icon_gradient_texture.png b/editor/icons/2x/icon_gradient_texture.png
new file mode 100644
index 0000000000..d002c8534c
--- /dev/null
+++ b/editor/icons/2x/icon_gradient_texture.png
Binary files differ
diff --git a/editor/icons/2x/icon_graph_scalars_to_vec.png b/editor/icons/2x/icon_graph_scalars_to_vec.png
index 266c84e5ae..7363a47db3 100644
--- a/editor/icons/2x/icon_graph_scalars_to_vec.png
+++ b/editor/icons/2x/icon_graph_scalars_to_vec.png
Binary files differ
diff --git a/editor/icons/2x/icon_graph_vec_to_scalars.png b/editor/icons/2x/icon_graph_vec_to_scalars.png
index 1b8254b3c6..6d16ea72fe 100644
--- a/editor/icons/2x/icon_graph_vec_to_scalars.png
+++ b/editor/icons/2x/icon_graph_vec_to_scalars.png
Binary files differ
diff --git a/editor/icons/2x/icon_graph_vecs_to_xform.png b/editor/icons/2x/icon_graph_vecs_to_xform.png
index a9ed5052be..0f2ad7a83a 100644
--- a/editor/icons/2x/icon_graph_vecs_to_xform.png
+++ b/editor/icons/2x/icon_graph_vecs_to_xform.png
Binary files differ
diff --git a/editor/icons/2x/icon_graph_xform_to_vecs.png b/editor/icons/2x/icon_graph_xform_to_vecs.png
index 22125df573..d274ad99a6 100644
--- a/editor/icons/2x/icon_graph_xform_to_vecs.png
+++ b/editor/icons/2x/icon_graph_xform_to_vecs.png
Binary files differ
diff --git a/editor/icons/2x/icon_key_hover.png b/editor/icons/2x/icon_key_hover.png
index c9894ad8bf..5dd96e8dca 100644
--- a/editor/icons/2x/icon_key_hover.png
+++ b/editor/icons/2x/icon_key_hover.png
Binary files differ
diff --git a/editor/icons/2x/icon_key_selected.png b/editor/icons/2x/icon_key_selected.png
index 243dacb604..7fc9ffdeb4 100644
--- a/editor/icons/2x/icon_key_selected.png
+++ b/editor/icons/2x/icon_key_selected.png
Binary files differ
diff --git a/editor/icons/2x/icon_key_value.png b/editor/icons/2x/icon_key_value.png
index 3863403706..94921e2446 100644
--- a/editor/icons/2x/icon_key_value.png
+++ b/editor/icons/2x/icon_key_value.png
Binary files differ
diff --git a/editor/icons/2x/icon_key_xform.png b/editor/icons/2x/icon_key_xform.png
index 70c49b5b5f..5749aac8f4 100644
--- a/editor/icons/2x/icon_key_xform.png
+++ b/editor/icons/2x/icon_key_xform.png
Binary files differ
diff --git a/editor/icons/2x/icon_line_2d.png b/editor/icons/2x/icon_line_2d.png
index 27299a2b69..66e5bbc5ba 100644
--- a/editor/icons/2x/icon_line_2d.png
+++ b/editor/icons/2x/icon_line_2d.png
Binary files differ
diff --git a/editor/icons/2x/icon_load.png b/editor/icons/2x/icon_load.png
index 759381d636..2e797c448b 100644
--- a/editor/icons/2x/icon_load.png
+++ b/editor/icons/2x/icon_load.png
Binary files differ
diff --git a/editor/icons/2x/icon_mini_basis.png b/editor/icons/2x/icon_mini_basis.png
new file mode 100644
index 0000000000..276b48d722
--- /dev/null
+++ b/editor/icons/2x/icon_mini_basis.png
Binary files differ
diff --git a/editor/icons/2x/icon_mini_matrix3.png b/editor/icons/2x/icon_mini_matrix3.png
index 93783177e1..276b48d722 100644
--- a/editor/icons/2x/icon_mini_matrix3.png
+++ b/editor/icons/2x/icon_mini_matrix3.png
Binary files differ
diff --git a/editor/icons/2x/icon_mini_transform2D.png b/editor/icons/2x/icon_mini_transform2D.png
new file mode 100644
index 0000000000..4237eced18
--- /dev/null
+++ b/editor/icons/2x/icon_mini_transform2D.png
Binary files differ
diff --git a/editor/icons/2x/icon_mirror_x.png b/editor/icons/2x/icon_mirror_x.png
index 3b096dce88..b5a8867a16 100644
--- a/editor/icons/2x/icon_mirror_x.png
+++ b/editor/icons/2x/icon_mirror_x.png
Binary files differ
diff --git a/editor/icons/2x/icon_mirror_y.png b/editor/icons/2x/icon_mirror_y.png
index 4c89b167b5..4a0483eb70 100644
--- a/editor/icons/2x/icon_mirror_y.png
+++ b/editor/icons/2x/icon_mirror_y.png
Binary files differ
diff --git a/editor/icons/2x/icon_move_down.png b/editor/icons/2x/icon_move_down.png
index 97bbeea631..2a17aab204 100644
--- a/editor/icons/2x/icon_move_down.png
+++ b/editor/icons/2x/icon_move_down.png
Binary files differ
diff --git a/editor/icons/2x/icon_move_up.png b/editor/icons/2x/icon_move_up.png
index f8f31baeb1..d8d7f5a207 100644
--- a/editor/icons/2x/icon_move_up.png
+++ b/editor/icons/2x/icon_move_up.png
Binary files differ
diff --git a/editor/icons/2x/icon_new.png b/editor/icons/2x/icon_new.png
index 683f1141fd..a10fe2cc60 100644
--- a/editor/icons/2x/icon_new.png
+++ b/editor/icons/2x/icon_new.png
Binary files differ
diff --git a/editor/icons/2x/icon_particles_material.png b/editor/icons/2x/icon_particles_material.png
new file mode 100644
index 0000000000..26ce8f6809
--- /dev/null
+++ b/editor/icons/2x/icon_particles_material.png
Binary files differ
diff --git a/editor/icons/2x/icon_search.png b/editor/icons/2x/icon_search.png
new file mode 100644
index 0000000000..0c4a6a8c84
--- /dev/null
+++ b/editor/icons/2x/icon_search.png
Binary files differ
diff --git a/editor/icons/2x/icon_spatial_material.png b/editor/icons/2x/icon_spatial_material.png
new file mode 100644
index 0000000000..68f6cf8dac
--- /dev/null
+++ b/editor/icons/2x/icon_spatial_material.png
Binary files differ
diff --git a/editor/icons/2x/icon_stream_texture.png b/editor/icons/2x/icon_stream_texture.png
new file mode 100644
index 0000000000..85cc3e7206
--- /dev/null
+++ b/editor/icons/2x/icon_stream_texture.png
Binary files differ
diff --git a/editor/icons/2x/icon_tabs.png b/editor/icons/2x/icon_tabs.png
index 6c317010c8..af61bc5ab1 100644
--- a/editor/icons/2x/icon_tabs.png
+++ b/editor/icons/2x/icon_tabs.png
Binary files differ
diff --git a/editor/icons/2x/icon_texture.png b/editor/icons/2x/icon_texture.png
deleted file mode 100644
index ad5d04dfee..0000000000
--- a/editor/icons/2x/icon_texture.png
+++ /dev/null
Binary files differ
diff --git a/editor/icons/2x/icon_tween.png b/editor/icons/2x/icon_tween.png
index a13d955eb0..1f020a0e79 100644
--- a/editor/icons/2x/icon_tween.png
+++ b/editor/icons/2x/icon_tween.png
Binary files differ
diff --git a/editor/icons/2x/icon_warning.png b/editor/icons/2x/icon_warning.png
index 5d807065e7..e953c02ce3 100644
--- a/editor/icons/2x/icon_warning.png
+++ b/editor/icons/2x/icon_warning.png
Binary files differ
diff --git a/editor/icons/2x/icon_zoom.png b/editor/icons/2x/icon_zoom.png
index 0c4a6a8c84..0de25b4db7 100644
--- a/editor/icons/2x/icon_zoom.png
+++ b/editor/icons/2x/icon_zoom.png
Binary files differ
diff --git a/editor/icons/SCsub b/editor/icons/SCsub
index 3fc8e5461f..20a381cc78 100644
--- a/editor/icons/SCsub
+++ b/editor/icons/SCsub
@@ -62,9 +62,9 @@ def make_editor_icons_action(target, source, env):
s.write("static Ref<ImageTexture> make_icon(const uint8_t* p_png,const uint8_t* p_hidpi_png) {\n")
s.write("\tRef<ImageTexture> texture( memnew( ImageTexture ) );\n")
s.write("\tbool use_hidpi_image=(editor_get_scale()>1.0&&p_hidpi_png);\n")
- s.write("\tImage img(use_hidpi_image?p_hidpi_png:p_png);\n")
- s.write("\tif (editor_get_scale()>1.0 && !p_hidpi_png) { img.convert(Image::FORMAT_RGBA8); img.expand_x2_hq2x(); use_hidpi_image=true;}\n")
- s.write("\timg.resize(img.get_width()*EDSCALE/(use_hidpi_image?2:1),img.get_height()*EDSCALE/(use_hidpi_image?2:1));\n")
+ s.write("\tRef<Image> img = memnew(Image(use_hidpi_image?p_hidpi_png:p_png));\n")
+ s.write("\tif (editor_get_scale()>1.0 && !p_hidpi_png) { img->convert(Image::FORMAT_RGBA8); img->expand_x2_hq2x(); use_hidpi_image=true;}\n")
+ s.write("\timg->resize(img->get_width()*EDSCALE/(use_hidpi_image?2:1),img->get_height()*EDSCALE/(use_hidpi_image?2:1));\n")
s.write("\ttexture->create_from_image( img,ImageTexture::FLAG_FILTER );\n")
s.write("\treturn texture;\n")
s.write("}\n\n")
diff --git a/editor/icons/icon_2_d.png b/editor/icons/icon_2_d.png
new file mode 100644
index 0000000000..d8a77ee1c2
--- /dev/null
+++ b/editor/icons/icon_2_d.png
Binary files differ
diff --git a/editor/icons/icon_3_d.png b/editor/icons/icon_3_d.png
new file mode 100644
index 0000000000..e1daf1077b
--- /dev/null
+++ b/editor/icons/icon_3_d.png
Binary files differ
diff --git a/editor/icons/icon_animation_player.png b/editor/icons/icon_animation_player.png
index 8a6f446e4e..474ec2e647 100644
--- a/editor/icons/icon_animation_player.png
+++ b/editor/icons/icon_animation_player.png
Binary files differ
diff --git a/editor/icons/icon_animation_tree.png b/editor/icons/icon_animation_tree.png
index 684edb876b..7a29f4d841 100644
--- a/editor/icons/icon_animation_tree.png
+++ b/editor/icons/icon_animation_tree.png
Binary files differ
diff --git a/editor/icons/icon_animation_tree_player.png b/editor/icons/icon_animation_tree_player.png
index 684edb876b..7a29f4d841 100644
--- a/editor/icons/icon_animation_tree_player.png
+++ b/editor/icons/icon_animation_tree_player.png
Binary files differ
diff --git a/editor/icons/icon_arrow_left.png b/editor/icons/icon_arrow_left.png
index 1e0d38b4b6..ad382516c2 100644
--- a/editor/icons/icon_arrow_left.png
+++ b/editor/icons/icon_arrow_left.png
Binary files differ
diff --git a/editor/icons/icon_arrow_right.png b/editor/icons/icon_arrow_right.png
index 09907755e1..6260d44fac 100644
--- a/editor/icons/icon_arrow_right.png
+++ b/editor/icons/icon_arrow_right.png
Binary files differ
diff --git a/editor/icons/icon_arrow_up.png b/editor/icons/icon_arrow_up.png
index f7ec666f69..2f02f48e18 100644
--- a/editor/icons/icon_arrow_up.png
+++ b/editor/icons/icon_arrow_up.png
Binary files differ
diff --git a/editor/icons/icon_asset_lib.png b/editor/icons/icon_asset_lib.png
new file mode 100644
index 0000000000..70d708a58c
--- /dev/null
+++ b/editor/icons/icon_asset_lib.png
Binary files differ
diff --git a/editor/icons/icon_audio_bus_bypass.png b/editor/icons/icon_audio_bus_bypass.png
new file mode 100644
index 0000000000..95a3a0177a
--- /dev/null
+++ b/editor/icons/icon_audio_bus_bypass.png
Binary files differ
diff --git a/editor/icons/icon_audio_bus_layout.png b/editor/icons/icon_audio_bus_layout.png
new file mode 100644
index 0000000000..bfa5e2c933
--- /dev/null
+++ b/editor/icons/icon_audio_bus_layout.png
Binary files differ
diff --git a/editor/icons/icon_audio_bus_mute.png b/editor/icons/icon_audio_bus_mute.png
new file mode 100644
index 0000000000..b074d848e0
--- /dev/null
+++ b/editor/icons/icon_audio_bus_mute.png
Binary files differ
diff --git a/editor/icons/icon_audio_bus_solo.png b/editor/icons/icon_audio_bus_solo.png
new file mode 100644
index 0000000000..085269f231
--- /dev/null
+++ b/editor/icons/icon_audio_bus_solo.png
Binary files differ
diff --git a/editor/icons/icon_audio_effect_amplify.png b/editor/icons/icon_audio_effect_amplify.png
index 9af3227d40..6588b90372 100644
--- a/editor/icons/icon_audio_effect_amplify.png
+++ b/editor/icons/icon_audio_effect_amplify.png
Binary files differ
diff --git a/editor/icons/icon_audio_player.png b/editor/icons/icon_audio_player.png
new file mode 100644
index 0000000000..c3e6d6cafa
--- /dev/null
+++ b/editor/icons/icon_audio_player.png
Binary files differ
diff --git a/editor/icons/icon_back.png b/editor/icons/icon_back.png
index 52fbc8117a..8497d2cf4b 100644
--- a/editor/icons/icon_back.png
+++ b/editor/icons/icon_back.png
Binary files differ
diff --git a/editor/icons/icon_baked_light.png b/editor/icons/icon_baked_light.png
index 3b7fce5c9f..c667b542c1 100644
--- a/editor/icons/icon_baked_light.png
+++ b/editor/icons/icon_baked_light.png
Binary files differ
diff --git a/editor/icons/icon_bool.png b/editor/icons/icon_bool.png
index 822b5dd688..c680bc195a 100644
--- a/editor/icons/icon_bool.png
+++ b/editor/icons/icon_bool.png
Binary files differ
diff --git a/editor/icons/icon_bus_vu_db.png b/editor/icons/icon_bus_vu_db.png
index 52507cae52..2c51a2e559 100644
--- a/editor/icons/icon_bus_vu_db.png
+++ b/editor/icons/icon_bus_vu_db.png
Binary files differ
diff --git a/editor/icons/icon_bus_vu_empty.png b/editor/icons/icon_bus_vu_empty.png
index 6fc3143a55..32d886b1a2 100644
--- a/editor/icons/icon_bus_vu_empty.png
+++ b/editor/icons/icon_bus_vu_empty.png
Binary files differ
diff --git a/editor/icons/icon_bus_vu_frozen.png b/editor/icons/icon_bus_vu_frozen.png
index cf128afa91..1a6ca6e767 100644
--- a/editor/icons/icon_bus_vu_frozen.png
+++ b/editor/icons/icon_bus_vu_frozen.png
Binary files differ
diff --git a/editor/icons/icon_bus_vu_full.png b/editor/icons/icon_bus_vu_full.png
index 9e3d7a93e3..b47deea254 100644
--- a/editor/icons/icon_bus_vu_full.png
+++ b/editor/icons/icon_bus_vu_full.png
Binary files differ
diff --git a/editor/icons/icon_copy_node_path.png b/editor/icons/icon_copy_node_path.png
index d777f132d8..877bb81d81 100644
--- a/editor/icons/icon_copy_node_path.png
+++ b/editor/icons/icon_copy_node_path.png
Binary files differ
diff --git a/editor/icons/icon_curve_texture.png b/editor/icons/icon_curve_texture.png
new file mode 100644
index 0000000000..bc5c7f6bf1
--- /dev/null
+++ b/editor/icons/icon_curve_texture.png
Binary files differ
diff --git a/editor/icons/icon_debug.png b/editor/icons/icon_debug.png
index 03b98aa9e4..a4a4591e12 100644
--- a/editor/icons/icon_debug.png
+++ b/editor/icons/icon_debug.png
Binary files differ
diff --git a/editor/icons/icon_default_project_icon.png b/editor/icons/icon_default_project_icon.png
index e87a49bd28..4c31fe5cb2 100644
--- a/editor/icons/icon_default_project_icon.png
+++ b/editor/icons/icon_default_project_icon.png
Binary files differ
diff --git a/editor/icons/icon_edit_resource.png b/editor/icons/icon_edit_resource.png
index 9f064fea3f..fca57f3e7e 100644
--- a/editor/icons/icon_edit_resource.png
+++ b/editor/icons/icon_edit_resource.png
Binary files differ
diff --git a/editor/icons/icon_error.png b/editor/icons/icon_error.png
index 7a9bed43aa..8a9130f70b 100644
--- a/editor/icons/icon_error.png
+++ b/editor/icons/icon_error.png
Binary files differ
diff --git a/editor/icons/icon_file.png b/editor/icons/icon_file.png
index 69c6c90dc7..b012e1f214 100644
--- a/editor/icons/icon_file.png
+++ b/editor/icons/icon_file.png
Binary files differ
diff --git a/editor/icons/icon_forward.png b/editor/icons/icon_forward.png
index 412ffa89d3..529964f49d 100644
--- a/editor/icons/icon_forward.png
+++ b/editor/icons/icon_forward.png
Binary files differ
diff --git a/editor/icons/icon_g_d_native_script.png b/editor/icons/icon_g_d_native_script.png
new file mode 100644
index 0000000000..ea4fe06704
--- /dev/null
+++ b/editor/icons/icon_g_d_native_script.png
Binary files differ
diff --git a/editor/icons/icon_godot.png b/editor/icons/icon_godot.png
deleted file mode 100644
index 0b72e6ecc7..0000000000
--- a/editor/icons/icon_godot.png
+++ /dev/null
Binary files differ
diff --git a/editor/icons/icon_godot_docs.png b/editor/icons/icon_godot_docs.png
new file mode 100644
index 0000000000..554280c5b4
--- /dev/null
+++ b/editor/icons/icon_godot_docs.png
Binary files differ
diff --git a/editor/icons/icon_gradient_texture.png b/editor/icons/icon_gradient_texture.png
new file mode 100644
index 0000000000..fedbf038a3
--- /dev/null
+++ b/editor/icons/icon_gradient_texture.png
Binary files differ
diff --git a/editor/icons/icon_graph_scalars_to_vec.png b/editor/icons/icon_graph_scalars_to_vec.png
index 231a25a02a..b8893e78ca 100644
--- a/editor/icons/icon_graph_scalars_to_vec.png
+++ b/editor/icons/icon_graph_scalars_to_vec.png
Binary files differ
diff --git a/editor/icons/icon_graph_vec_to_scalars.png b/editor/icons/icon_graph_vec_to_scalars.png
index 33f9fdf9bd..b0f2a9c4ae 100644
--- a/editor/icons/icon_graph_vec_to_scalars.png
+++ b/editor/icons/icon_graph_vec_to_scalars.png
Binary files differ
diff --git a/editor/icons/icon_graph_vecs_to_xform.png b/editor/icons/icon_graph_vecs_to_xform.png
index 82c32525dc..b5217badcf 100644
--- a/editor/icons/icon_graph_vecs_to_xform.png
+++ b/editor/icons/icon_graph_vecs_to_xform.png
Binary files differ
diff --git a/editor/icons/icon_graph_xform_to_vecs.png b/editor/icons/icon_graph_xform_to_vecs.png
index 3d59c7957d..9e2909969f 100644
--- a/editor/icons/icon_graph_xform_to_vecs.png
+++ b/editor/icons/icon_graph_xform_to_vecs.png
Binary files differ
diff --git a/editor/icons/icon_key_hover.png b/editor/icons/icon_key_hover.png
index 7ab405bb07..c8e59f0e87 100644
--- a/editor/icons/icon_key_hover.png
+++ b/editor/icons/icon_key_hover.png
Binary files differ
diff --git a/editor/icons/icon_key_selected.png b/editor/icons/icon_key_selected.png
index 1838dc95aa..e5f802db1c 100644
--- a/editor/icons/icon_key_selected.png
+++ b/editor/icons/icon_key_selected.png
Binary files differ
diff --git a/editor/icons/icon_key_value.png b/editor/icons/icon_key_value.png
index 5c0b25a264..1fa007f9e2 100644
--- a/editor/icons/icon_key_value.png
+++ b/editor/icons/icon_key_value.png
Binary files differ
diff --git a/editor/icons/icon_key_xform.png b/editor/icons/icon_key_xform.png
index 1171bd80db..bd87611d7a 100644
--- a/editor/icons/icon_key_xform.png
+++ b/editor/icons/icon_key_xform.png
Binary files differ
diff --git a/editor/icons/icon_line_2d.png b/editor/icons/icon_line_2d.png
index 4ebf46af04..8d2b176335 100644
--- a/editor/icons/icon_line_2d.png
+++ b/editor/icons/icon_line_2d.png
Binary files differ
diff --git a/editor/icons/icon_load.png b/editor/icons/icon_load.png
index 81835efa25..cc05e98ebb 100644
--- a/editor/icons/icon_load.png
+++ b/editor/icons/icon_load.png
Binary files differ
diff --git a/editor/icons/icon_logo.png b/editor/icons/icon_logo.png
index 9bbd7dc619..aed94cb87a 100644
--- a/editor/icons/icon_logo.png
+++ b/editor/icons/icon_logo.png
Binary files differ
diff --git a/editor/icons/icon_logo_small.png b/editor/icons/icon_logo_small.png
index 9c7c7fe365..809cf18541 100644
--- a/editor/icons/icon_logo_small.png
+++ b/editor/icons/icon_logo_small.png
Binary files differ
diff --git a/editor/icons/icon_mini_basis.png b/editor/icons/icon_mini_basis.png
new file mode 100644
index 0000000000..7a4ac9b137
--- /dev/null
+++ b/editor/icons/icon_mini_basis.png
Binary files differ
diff --git a/editor/icons/icon_mini_matrix3.png b/editor/icons/icon_mini_matrix3.png
index dd59d093cc..7a4ac9b137 100644
--- a/editor/icons/icon_mini_matrix3.png
+++ b/editor/icons/icon_mini_matrix3.png
Binary files differ
diff --git a/editor/icons/icon_mini_transform2D.png b/editor/icons/icon_mini_transform2D.png
new file mode 100644
index 0000000000..f4e1211bd7
--- /dev/null
+++ b/editor/icons/icon_mini_transform2D.png
Binary files differ
diff --git a/editor/icons/icon_mirror_x.png b/editor/icons/icon_mirror_x.png
index 7be48946b4..f2c9074b89 100644
--- a/editor/icons/icon_mirror_x.png
+++ b/editor/icons/icon_mirror_x.png
Binary files differ
diff --git a/editor/icons/icon_mirror_y.png b/editor/icons/icon_mirror_y.png
index ba924f7ae7..655f52d481 100644
--- a/editor/icons/icon_mirror_y.png
+++ b/editor/icons/icon_mirror_y.png
Binary files differ
diff --git a/editor/icons/icon_move_down.png b/editor/icons/icon_move_down.png
index 3934310964..7bb964675d 100644
--- a/editor/icons/icon_move_down.png
+++ b/editor/icons/icon_move_down.png
Binary files differ
diff --git a/editor/icons/icon_move_up.png b/editor/icons/icon_move_up.png
index 684013dc40..92614b8799 100644
--- a/editor/icons/icon_move_up.png
+++ b/editor/icons/icon_move_up.png
Binary files differ
diff --git a/editor/icons/icon_new.png b/editor/icons/icon_new.png
index 69c6c90dc7..b012e1f214 100644
--- a/editor/icons/icon_new.png
+++ b/editor/icons/icon_new.png
Binary files differ
diff --git a/editor/icons/icon_particles_material.png b/editor/icons/icon_particles_material.png
new file mode 100644
index 0000000000..3b5c5644b2
--- /dev/null
+++ b/editor/icons/icon_particles_material.png
Binary files differ
diff --git a/editor/icons/icon_search.png b/editor/icons/icon_search.png
new file mode 100644
index 0000000000..f3748803cf
--- /dev/null
+++ b/editor/icons/icon_search.png
Binary files differ
diff --git a/editor/icons/icon_spatial_material.png b/editor/icons/icon_spatial_material.png
new file mode 100644
index 0000000000..7608fc9036
--- /dev/null
+++ b/editor/icons/icon_spatial_material.png
Binary files differ
diff --git a/editor/icons/icon_stream_texture.png b/editor/icons/icon_stream_texture.png
new file mode 100644
index 0000000000..1858a299d7
--- /dev/null
+++ b/editor/icons/icon_stream_texture.png
Binary files differ
diff --git a/editor/icons/icon_tabs.png b/editor/icons/icon_tabs.png
index bef0f60660..c17ab6fa1b 100644
--- a/editor/icons/icon_tabs.png
+++ b/editor/icons/icon_tabs.png
Binary files differ
diff --git a/editor/icons/icon_texture.png b/editor/icons/icon_texture.png
deleted file mode 100644
index 7c4493395e..0000000000
--- a/editor/icons/icon_texture.png
+++ /dev/null
Binary files differ
diff --git a/editor/icons/icon_tween.png b/editor/icons/icon_tween.png
index 36717c0922..3181e2cf63 100644
--- a/editor/icons/icon_tween.png
+++ b/editor/icons/icon_tween.png
Binary files differ
diff --git a/editor/icons/icon_warning.png b/editor/icons/icon_warning.png
index 451beba820..45b52542da 100644
--- a/editor/icons/icon_warning.png
+++ b/editor/icons/icon_warning.png
Binary files differ
diff --git a/editor/icons/icon_zoom.png b/editor/icons/icon_zoom.png
index f3748803cf..e95cf2bd78 100644
--- a/editor/icons/icon_zoom.png
+++ b/editor/icons/icon_zoom.png
Binary files differ
diff --git a/editor/icons/source/icon_2_d.svg b/editor/icons/source/icon_2_d.svg
new file mode 100644
index 0000000000..54c93a45aa
--- /dev/null
+++ b/editor/icons/source/icon_2_d.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_2_d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="1.7654173"
+ inkscape:cy="7.2653991"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1040.3622 2,-2 2,2"
+ id="path4485"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4,1039.3622 v 9 h 9"
+ id="path4487"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path4489"
+ d="m 12,1046.3622 2,2 -2,2"
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_3_d.svg b/editor/icons/source/icon_3_d.svg
new file mode 100644
index 0000000000..3147d14dc1
--- /dev/null
+++ b/editor/icons/source/icon_3_d.svg
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_3_d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="7.1007207"
+ inkscape:cy="6.155123"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2.0050708,1040.3622 2,-2 2,2"
+ id="path4485"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4.0050708,1039.3622 v 9 h 9.0000002"
+ id="path4487"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path4489"
+ d="m 12.005071,1046.3622 2,2 -2,2"
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4.0050708,1048.3622 8.0000002,-8"
+ id="path4496"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path4498"
+ d="m 10.176644,1039.3622 h 2.828427 v 2.8284"
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_animation_player.svg b/editor/icons/source/icon_animation_player.svg
index add4d5ac42..e6500ea249 100644
--- a/editor/icons/source/icon_animation_player.svg
+++ b/editor/icons/source/icon_animation_player.svg
@@ -14,11 +14,11 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animation_player.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- sodipodi:docname="icon_animation_player (copy).svg">
+ sodipodi:docname="icon_animation_player.svg">
<defs
id="defs4" />
<sodipodi:namedview
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="31.999998"
- inkscape:cx="8.7610995"
- inkscape:cy="9.3751685"
+ inkscape:cx="3.1985991"
+ inkscape:cy="7.9689184"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -69,7 +69,7 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="opacity:1;fill:#e1cb50;fill-opacity:0.98431373;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ style="opacity:1;fill:#fbe87a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 1,1037.3622 0,14 1.1666666,0 0,-2 1.8333334,0 0,2 8,0 0,-2 2,0 0,2 1,0 0,-14 -1,0 0,2 -2,0 0,-2 -8,0 0,2 -1.8333334,0 0,-2 z m 1.1666666,4 1.8333334,0 0,2 -1.8333334,0 z m 9.8333334,0 2,0 0,2 -2,0 z m -9.8333334,4 1.8333334,0 0,2 -1.8333334,0 z m 9.8333334,0 2,0 0,2 -2,0 z"
id="rect4136"
inkscape:connector-curvature="0"
diff --git a/editor/icons/source/icon_animation_tree_player.svg b/editor/icons/source/icon_animation_tree_player.svg
index ab81cb226a..1c5c41e5f2 100644
--- a/editor/icons/source/icon_animation_tree_player.svg
+++ b/editor/icons/source/icon_animation_tree_player.svg
@@ -14,11 +14,11 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animation_tree_player.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- sodipodi:docname="icon_animation_tree_player (copy).svg">
+ sodipodi:docname="icon_animation_tree_player.svg">
<defs
id="defs4" />
<sodipodi:namedview
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="45.254831"
- inkscape:cx="9.7184474"
- inkscape:cy="8.2407739"
+ inkscape:zoom="22.627416"
+ inkscape:cx="-0.31764706"
+ inkscape:cy="5.3536612"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -69,8 +69,8 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="opacity:1;fill:#e1cb50;fill-opacity:0.98431373;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="M 1 1 L 1 15 L 2.1660156 15 L 2.1660156 13 L 4 13 L 4 15 L 12 15 L 12 13 L 14 13 L 14 15 L 15 15 L 15 1 L 14 1 L 14 3 L 12 3 L 12 1 L 4 1 L 4 3 L 2.1660156 3 L 2.1660156 1 L 1 1 z M 2.1660156 5 L 4 5 L 4 7 L 2.1660156 7 L 2.1660156 5 z M 8 5 A 1 1 0 0 1 9 6 A 1 1 0 0 1 8.8339844 6.5507812 L 10.060547 9.0039062 A 1 1 0 0 1 11 10 A 1 1 0 0 1 10 11 A 1 1 0 0 1 9 10 A 1 1 0 0 1 9.1660156 9.4492188 L 8 7.1171875 L 6.8339844 9.4492188 A 1 1 0 0 1 7 10 A 1 1 0 0 1 6 11 A 1 1 0 0 1 5 10 A 1 1 0 0 1 5.9414062 9.0019531 L 7.1660156 6.5507812 A 1 1 0 0 1 7 6 A 1 1 0 0 1 8 5 z M 12 5 L 14 5 L 14 7 L 12 7 L 12 5 z M 2.1660156 9 L 4 9 L 4 11 L 2.1660156 11 L 2.1660156 9 z M 12 9 L 14 9 L 14 11 L 12 11 L 12 9 z "
+ style="opacity:1;fill:#fbe87a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 15 L 2.1660156 15 L 2.1660156 13 L 4 13 L 4 15 L 12 15 L 12 13 L 14 13 L 14 15 L 15 15 L 15 1 L 14 1 L 14 3 L 12 3 L 12 1 L 4 1 L 4 3 L 2.1660156 3 L 2.1660156 1 L 1 1 z M 5.984375 2.9863281 A 1.0001 1.0001 0 0 1 7 4 L 7 6.3828125 L 9.5527344 5.1054688 A 1.0001 1.0001 0 0 1 10.003906 4.9941406 A 1.0001 1.0001 0 0 1 10.447266 6.8945312 L 7 8.6171875 L 7 12 A 1.0001 1.0001 0 1 1 5 12 L 5 7.9921875 L 5 4 A 1.0001 1.0001 0 0 1 5.984375 2.9863281 z M 2.1660156 5 L 4 5 L 4 7 L 2.1660156 7 L 2.1660156 5 z M 12 5 L 14 5 L 14 7 L 12 7 L 12 5 z M 2.1660156 9 L 4 9 L 4 11 L 2.1660156 11 L 2.1660156 9 z M 12 9 L 14 9 L 14 11 L 12 11 L 12 9 z "
transform="translate(0,1036.3622)"
id="rect4136" />
</g>
diff --git a/editor/icons/source/icon_arrow_left.svg b/editor/icons/source/icon_arrow_left.svg
index 75a9ef0d68..a9be19b6d4 100644
--- a/editor/icons/source/icon_arrow_left.svg
+++ b/editor/icons/source/icon_arrow_left.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="-0.2534386"
- inkscape:cy="9.1352698"
+ inkscape:cx="7.4636822"
+ inkscape:cy="9.1396144"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -69,9 +69,16 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 6 4 L 3.5 6 L 1 8 L 3.5 10 L 6 12 L 6 9 L 15 9 L 15 7 L 6 7 L 6 4 z "
- transform="translate(0,1036.3622)"
- id="rect4352" />
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 8,1048.3622 -4,-4 4,-4"
+ id="path814"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 4,1044.3622 h 7"
+ id="path816"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
</g>
</svg>
diff --git a/editor/icons/source/icon_arrow_right.svg b/editor/icons/source/icon_arrow_right.svg
index a7600699f7..f6cbe3bc19 100644
--- a/editor/icons/source/icon_arrow_right.svg
+++ b/editor/icons/source/icon_arrow_right.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="0.9028114"
- inkscape:cy="9.2602698"
+ inkscape:cx="7.0981428"
+ inkscape:cy="9.8315212"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -69,10 +69,16 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 10,1048.3622 5,-4 -5,-4 0,3 -9,0 0,2 9,0 z"
- id="rect4352"
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 8.0142425,1048.3622 3.9999995,-4 -3.9999995,-4"
+ id="path814"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="M 12.014242,1044.3622 H 5.0142425"
+ id="path816"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
</g>
</svg>
diff --git a/editor/icons/source/icon_arrow_up.svg b/editor/icons/source/icon_arrow_up.svg
index c1839cd69e..b24a167b8e 100644
--- a/editor/icons/source/icon_arrow_up.svg
+++ b/editor/icons/source/icon_arrow_up.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="6.7465614"
- inkscape:cy="9.3227698"
+ inkscape:cx="7.0981428"
+ inkscape:cy="9.8315212"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -69,9 +69,9 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 12,1042.3622 -2,-2.5 -2,-2.5 -2,2.5 -2,2.5 3,0 0,9 2,0 0,-9 3,0 z"
- id="rect4352"
+ 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:#e0e0e0;fill-opacity:0.99607843;fill-rule:nonzero;stroke:none;stroke-width:2;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 2.9875012,1044.3838 a 1.0001,1.0001 0 0 0 1.7167968,0.6972 l 2.2929688,-2.2929 v 4.5859 a 1.0001,1.0001 0 1 0 2,0 v -4.5859 l 2.2929692,2.2929 a 1.0001,1.0001 0 1 0 1.414062,-1.414 l -3.9140624,-3.9141 a 1.0001,1.0001 0 0 0 -1.5859376,0 1.0001,1.0001 0 0 0 -0.00391,0.01 l -3.9101562,3.9102 a 1.0001,1.0001 0 0 0 -0.3027344,0.7168 z"
+ id="path814"
inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_asset_lib.svg b/editor/icons/source/icon_asset_lib.svg
new file mode 100644
index 0000000000..db9fcda6d4
--- /dev/null
+++ b/editor/icons/source/icon_asset_lib.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_asset_lib.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="8.3739682"
+ inkscape:cy="8.9121875"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1.87082875;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 8 1 A 3 3 0 0 0 5 4 L 5 6 L 1 6 L 1 10 L 1 13 C 1 14.10801 1.8919904 15 3 15 L 13 15 C 14.10801 15 15 14.10801 15 13 L 15 10 L 15 6 L 11 6 L 11 4 A 3 3 0 0 0 8 1 z M 8 2 A 2 2 0 0 0 7.84375 2.0078125 A 2.0000174 2.0000174 0 0 1 8 2 z M 8.15625 2.0078125 A 2.0000174 2.0000174 0 0 1 8.296875 2.0234375 A 2 2 0 0 0 8.15625 2.0078125 z M 7.703125 2.0234375 A 2 2 0 0 0 7.640625 2.0332031 A 2.0000174 2.0000174 0 0 1 7.703125 2.0234375 z M 8.359375 2.0332031 A 2.0000174 2.0000174 0 0 1 8.4648438 2.0566406 A 2 2 0 0 0 8.359375 2.0332031 z M 7.5351562 2.0566406 A 2 2 0 0 0 7.4296875 2.0839844 A 2.0000174 2.0000174 0 0 1 7.5351562 2.0566406 z M 8.5703125 2.0839844 A 2.0000174 2.0000174 0 0 1 8.6621094 2.1152344 A 2 2 0 0 0 8.5703125 2.0839844 z M 7.3378906 2.1152344 A 2 2 0 0 0 7.2558594 2.1464844 A 2.0000174 2.0000174 0 0 1 7.3378906 2.1152344 z M 8.7441406 2.1464844 A 2.0000174 2.0000174 0 0 1 8.8496094 2.1914062 A 2 2 0 0 0 8.7441406 2.1464844 z M 7.1503906 2.1914062 A 2 2 0 0 0 7.0722656 2.2304688 A 2.0000174 2.0000174 0 0 1 7.1503906 2.1914062 z M 8.9277344 2.2304688 A 2.0000174 2.0000174 0 0 1 9.0195312 2.28125 A 2 2 0 0 0 8.9277344 2.2304688 z M 6.9804688 2.28125 A 2 2 0 0 0 6.8886719 2.3378906 A 2.0000174 2.0000174 0 0 1 6.9804688 2.28125 z M 6.8320312 2.3789062 A 2 2 0 0 0 6.7304688 2.4550781 A 2.0000174 2.0000174 0 0 1 6.8320312 2.3789062 z M 9.2695312 2.4550781 A 2.0000174 2.0000174 0 0 1 9.3378906 2.515625 A 2 2 0 0 0 9.2695312 2.4550781 z M 6.6621094 2.515625 A 2 2 0 0 0 6.5859375 2.5859375 A 2.0000174 2.0000174 0 0 1 6.6621094 2.515625 z M 9.4140625 2.5859375 A 2.0000174 2.0000174 0 0 1 9.484375 2.6621094 A 2 2 0 0 0 9.4140625 2.5859375 z M 6.515625 2.6621094 A 2 2 0 0 0 6.4550781 2.7304688 A 2.0000174 2.0000174 0 0 1 6.515625 2.6621094 z M 9.5449219 2.7304688 A 2.0000174 2.0000174 0 0 1 9.6210938 2.8320312 A 2 2 0 0 0 9.5449219 2.7304688 z M 9.6621094 2.8886719 A 2.0000174 2.0000174 0 0 1 9.71875 2.9804688 A 2 2 0 0 0 9.6621094 2.8886719 z M 6.28125 2.9804688 A 2 2 0 0 0 6.2304688 3.0722656 A 2.0000174 2.0000174 0 0 1 6.28125 2.9804688 z M 8 3 A 1 1 0 0 1 9 4 L 9 6 L 7 6 L 7 4 A 1 1 0 0 1 8 3 z M 9.7695312 3.0722656 A 2.0000174 2.0000174 0 0 1 9.8085938 3.1503906 A 2 2 0 0 0 9.7695312 3.0722656 z M 6.1914062 3.1503906 A 2 2 0 0 0 6.1464844 3.2558594 A 2.0000174 2.0000174 0 0 1 6.1914062 3.1503906 z M 9.8535156 3.2558594 A 2.0000174 2.0000174 0 0 1 9.8847656 3.3378906 A 2 2 0 0 0 9.8535156 3.2558594 z M 6.1152344 3.3378906 A 2 2 0 0 0 6.0839844 3.4296875 A 2.0000174 2.0000174 0 0 1 6.1152344 3.3378906 z M 9.9160156 3.4296875 A 2.0000174 2.0000174 0 0 1 9.9433594 3.5351562 A 2 2 0 0 0 9.9160156 3.4296875 z M 6.0566406 3.5351562 A 2 2 0 0 0 6.0332031 3.640625 A 2.0000174 2.0000174 0 0 1 6.0566406 3.5351562 z M 9.9667969 3.640625 A 2.0000174 2.0000174 0 0 1 9.9765625 3.703125 A 2 2 0 0 0 9.9667969 3.640625 z M 6.0234375 3.703125 A 2 2 0 0 0 6.0078125 3.84375 A 2.0000174 2.0000174 0 0 1 6.0234375 3.703125 z M 9.9921875 3.84375 A 2.0000174 2.0000174 0 0 1 10 4 A 2 2 0 0 0 9.9921875 3.84375 z "
+ transform="translate(0,1036.3622)"
+ id="rect4503" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_audio_bus_bypass.svg b/editor/icons/source/icon_audio_bus_bypass.svg
new file mode 100644
index 0000000000..fe517d9ff7
--- /dev/null
+++ b/editor/icons/source/icon_audio_bus_bypass.svg
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_audio_bus_bypass.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-75">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-3"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-5">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-6"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-2"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-9"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-3">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-6"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-0">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-62"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-61"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-8"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-7">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-9"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-75-2">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-3-0"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-5-2">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-6-3"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-2-7"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-9-5"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-1-9">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-2-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7-2">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5-8"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3-9">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5-7"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6-3"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2-6"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="13.750219"
+ inkscape:cy="8.7492163"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <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:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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 6.9707031 2 C 6.7159676 2.01 6.4735547 2.1112156 6.2929688 2.2910156 L 3.5859375 4.9980469 L 2 4.9980469 C 1.4477381 4.9981469 1.0000552 5.4457469 1 5.9980469 L 1 9.9980469 C 1.0000552 10.550347 1.4477381 10.997947 2 10.998047 L 3.5859375 10.998047 L 6.2929688 13.705078 C 6.9229867 14.334678 7.9997118 13.888747 8 12.998047 L 8 2.9980469 C 7.9990576 2.4349469 7.5335846 1.9836 6.9707031 2 z M 10.984375 4.9863281 A 1.0001 1.0001 0 0 0 10 6 L 10 10 A 1.0001 1.0001 0 1 0 12 10 L 12 6 A 1.0001 1.0001 0 0 0 10.984375 4.9863281 z M 13.984375 4.9863281 A 1.0001 1.0001 0 0 0 13 6 L 13 10 A 1.0001 1.0001 0 1 0 15 10 L 15 6 A 1.0001 1.0001 0 0 0 13.984375 4.9863281 z "
+ transform="translate(0,1036.3622)"
+ id="path4158" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_audio_bus_layout.svg b/editor/icons/source/icon_audio_bus_layout.svg
new file mode 100644
index 0000000000..66dc37ecfc
--- /dev/null
+++ b/editor/icons/source/icon_audio_bus_layout.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_audio_bus_layout.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient959-5">
+ <stop
+ id="stop957-3"
+ offset="0"
+ style="stop-color:#ff8484;stop-opacity:1" />
+ <stop
+ style="stop-color:#e1dc7a;stop-opacity:1"
+ offset="0.5"
+ id="stop955-5" />
+ <stop
+ id="stop953-6"
+ offset="1"
+ style="stop-color:#84ffb1;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient959-5"
+ id="linearGradient4542"
+ gradientUnits="userSpaceOnUse"
+ x1="8"
+ y1="1"
+ x2="8"
+ y2="15" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="4.4869184"
+ inkscape:cy="8.3575292"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:url(#linearGradient4542);fill-opacity:1.0;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="M 3 1 C 1.8919904 1 1 1.8919904 1 3 L 1 13 C 1 14.10801 1.8919904 15 3 15 L 5 15 C 6.1080096 15 7 14.10801 7 13 L 7 3 C 7 1.8919904 6.1080096 1 5 1 L 3 1 z M 11 1 C 9.8919889 1 9 1.8919889 9 3 L 9 13 C 9 14.108011 9.8919889 15 11 15 L 13 15 C 14.108011 15 15 14.108011 15 13 L 15 3 C 15 1.8919889 14.108011 1 13 1 L 11 1 z M 3 2 L 5 2 C 5.5540096 2 6 2.4459904 6 3 L 6 13 C 6 13.55401 5.5540096 14 5 14 L 3 14 C 2.4459904 14 2 13.55401 2 13 L 2 3 C 2 2.4459904 2.4459904 2 3 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4505" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_audio_bus_mute.svg b/editor/icons/source/icon_audio_bus_mute.svg
new file mode 100644
index 0000000000..55a776dd97
--- /dev/null
+++ b/editor/icons/source/icon_audio_bus_mute.svg
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_audio_bus_mute.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-75">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-3"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-5">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-6"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-2"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-9"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-3">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-6"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-0">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-62"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-61"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-8"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-7">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-9"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-75-2">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-3-0"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-5-2">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-6-3"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-2-7"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-9-5"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-1-9">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-2-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7-2">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5-8"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3-9">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5-7"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6-3"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2-6"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="11.636432"
+ inkscape:cy="7.916113"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <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:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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 6.9707031,1038.3625 c -0.2547355,0.01 -0.4971483,0.1112 -0.6777343,0.291 l -2.7070313,2.707 H 2 c -0.5522619,10e-5 -0.9999448,0.4477 -1,1 v 4 c 5.52e-5,0.5523 0.4477381,0.9999 1,1 h 1.5859375 l 2.7070313,2.7071 c 0.630018,0.6296 1.706743,0.1836 1.7070312,-0.7071 v -10 c -9.424e-4,-0.5631 -0.4664154,-1.0144 -1.0292969,-0.998 z"
+ id="path4158"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <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:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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"
+ d="M 10.990234 4.9902344 A 1.0001 1.0001 0 0 0 10.292969 6.7070312 L 11.585938 8 L 10.292969 9.2929688 A 1.0001 1.0001 0 1 0 11.707031 10.707031 L 13 9.4140625 L 14.292969 10.707031 A 1.0001 1.0001 0 1 0 15.707031 9.2929688 L 14.414062 8 L 15.707031 6.7070312 A 1.0001 1.0001 0 0 0 14.980469 4.9921875 A 1.0001 1.0001 0 0 0 14.292969 5.2929688 L 13 6.5859375 L 11.707031 5.2929688 A 1.0001 1.0001 0 0 0 10.990234 4.9902344 z "
+ transform="translate(0,1036.3622)"
+ id="path1075" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_audio_bus_solo.svg b/editor/icons/source/icon_audio_bus_solo.svg
new file mode 100644
index 0000000000..fd06442da1
--- /dev/null
+++ b/editor/icons/source/icon_audio_bus_solo.svg
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_audio_bus_solo.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-75">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-3"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-5">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-6"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-2"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-9"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-3">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-6"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-0">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-62"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-61"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-8"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-7">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-9"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-75-2">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-3-0"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-5-2">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-6-3"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-2-7"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-9-5"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-1-9">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-2-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7-2">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5-8"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3-9">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5-7"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6-3"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2-6"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="9.3895072"
+ inkscape:cy="10.039347"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <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:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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 6.9707031,1038.3625 c -0.2547355,0.01 -0.4971483,0.1112 -0.6777343,0.291 l -2.7070313,2.707 H 2 c -0.5522619,10e-5 -0.9999448,0.4477 -1,1 v 4 c 5.52e-5,0.5523 0.4477381,0.9999 1,1 h 1.5859375 l 2.7070313,2.7071 c 0.630018,0.6296 1.706743,0.1836 1.7070312,-0.7071 v -10 c -9.424e-4,-0.5631 -0.4664154,-1.0144 -1.0292969,-0.998 z"
+ id="path4158"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 15,1040.3622 a 3,3 0 0 0 -3,3 v 2 a 1.0000174,1.0000174 0 0 1 -1,1 v 2 a 3,3 0 0 0 3,-3 v -2 a 1.0000174,1.0000174 0 0 1 1,-1 z"
+ id="path4534"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4208"
+ width="1"
+ height="2"
+ x="10"
+ y="1046.3622" />
+ <rect
+ y="1040.3622"
+ x="15"
+ height="2"
+ width="1"
+ id="rect4210"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_audio_effect_amplify.svg b/editor/icons/source/icon_audio_effect_amplify.svg
new file mode 100644
index 0000000000..3c75d71791
--- /dev/null
+++ b/editor/icons/source/icon_audio_effect_amplify.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_audio_effect_amplify.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient959-5"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#ff8484;stop-opacity:1"
+ offset="0"
+ id="stop957-3" />
+ <stop
+ id="stop955-5"
+ offset="0.5"
+ style="stop-color:#e1dc7a;stop-opacity:1" />
+ <stop
+ style="stop-color:#84ffb1;stop-opacity:1"
+ offset="1"
+ id="stop953-6" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient959-5"
+ id="linearGradient4521"
+ x1="9"
+ y1="1037.3622"
+ x2="9"
+ y2="1051.3622"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1036.3622)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="11.634663"
+ inkscape:cy="5.7749201"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:url(#linearGradient4521);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 15,1 1,8 H 15 Z M 2,10 v 1 h 2 v -1 z m 2,1 v 1 H 2 V 11 H 1 v 4 h 1 v -2 h 2 v 2 h 1 v -4 z m 2,-1 v 1 4 h 1 v -4 h 1 v 4 h 1 v -4 h 1 v -1 z m 4,1 v 4 h 1 v -4 z m 2,-1 v 5 h 1 v -2 h 2 v -3 z m 1,1 h 1 v 1 h -1 z"
+ transform="translate(0,1036.3622)"
+ id="path4513"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccc" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_audio_player.svg b/editor/icons/source/icon_audio_player.svg
new file mode 100644
index 0000000000..2d9c5f4e6c
--- /dev/null
+++ b/editor/icons/source/icon_audio_player.svg
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_audio_player.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient959-5"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#ff8484;stop-opacity:1"
+ offset="0"
+ id="stop957-3" />
+ <stop
+ id="stop955-5"
+ offset="0.5"
+ style="stop-color:#e1dc7a;stop-opacity:1" />
+ <stop
+ style="stop-color:#84ffb1;stop-opacity:1"
+ offset="1"
+ id="stop953-6" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient959-5"
+ id="linearGradient4552"
+ x1="8"
+ y1="1"
+ x2="8"
+ y2="15"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313709"
+ inkscape:cx="14.998333"
+ inkscape:cy="3.5679216"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <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:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.97227669;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 10.023235,1044.3625 c -0.5613918,-0.013 -1.0235345,0.4264 -1.0234377,0.9724 v 5.0542 c 6.911e-4,0.7482 0.8336124,1.2154 1.4999997,0.8414 l 4,-2.5262 c 0.666937,-0.3743 0.666937,-1.3104 0,-1.6847 l -4,-2.5261 c -0.145049,-0.082 -0.308928,-0.1269 -0.476562,-0.131 z"
+ id="path4507"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <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:url(#linearGradient4552);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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 11.970703 1.0019531 A 1.0001 1.0001 0 0 0 11.724609 1.0390625 L 4.7246094 3.0390625 A 1.0001 1.0001 0 0 0 4 4 L 4 9.5507812 A 2.5 2.4999914 0 0 0 3.5 9.5 A 2.5 2.4999914 0 0 0 1 12 A 2.5 2.4999914 0 0 0 3.5 14.5 A 2.5 2.4999914 0 0 0 5.9960938 12.087891 A 1.0001 1.0001 0 0 0 6 12 L 6 4.7558594 L 11 3.328125 L 11 6.5 L 13 5.5 L 13 2 A 1.0001 1.0001 0 0 0 11.970703 1.0019531 z "
+ transform="translate(0,1036.3622)"
+ id="path4514" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_back.svg b/editor/icons/source/icon_back.svg
index 597a1c3068..dfaf25de01 100644
--- a/editor/icons/source/icon_back.svg
+++ b/editor/icons/source/icon_back.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="4.4850647"
- inkscape:cy="8.9717887"
+ inkscape:cx="8.1867174"
+ inkscape:cy="8.4650528"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -60,7 +60,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -70,10 +70,9 @@
id="layer1"
transform="translate(0,-1036.3622)">
<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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;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:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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 5.9707031,1037.3633 c -0.3235485,0.01 -0.622658,0.1743 -0.8027343,0.4433 l -4,6 c -0.22390586,0.3359 -0.22390586,0.7735 0,1.1094 l 4,6 C 5.716941,1051.7388 6.999645,1051.3504 7,1050.3613 l 0,-12 c -9.424e-4,-0.5631 -0.4664154,-1.0144 -1.0292969,-0.998 z"
- id="path4159"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 6,1038.3622 -4,6 4,6"
+ id="path814"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_baked_light.svg b/editor/icons/source/icon_baked_light.svg
index 98dc3135f6..e4d435254d 100644
--- a/editor/icons/source/icon_baked_light.svg
+++ b/editor/icons/source/icon_baked_light.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,7 +29,7 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.627417"
- inkscape:cx="6.1801151"
+ inkscape:cx="-2.7913022"
inkscape:cy="10.551189"
inkscape:document-units="px"
inkscape:current-layer="layer1"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -70,7 +70,7 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="opacity:1;fill:#e0e0e0;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"
+ style="opacity:1;fill:#fc9c9c;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"
d="M 2 1 L 2 3 L 14 3 L 14 1 L 2 1 z M 1 4 L 1 13 A 2 2.0000174 0 0 0 3 15 L 13 15 A 2 2.0000174 0 0 0 15 13 L 15 4 L 1 4 z M 3 5 L 4 5 L 4 6 L 3 6 L 3 5 z M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 z M 9 5 L 10 5 L 10 6 L 9 6 L 9 5 z M 12 5 L 13 5 L 13 6 L 12 6 L 12 5 z M 3 7 L 13 7 L 13 13 L 3 13 L 3 7 z M 6 8 L 6 9 L 10 9 L 10 8 L 6 8 z "
transform="translate(0,1036.3622)"
id="rect4155" />
diff --git a/editor/icons/source/icon_bool.svg b/editor/icons/source/icon_bool.svg
index e471871adf..9f429376fd 100644
--- a/editor/icons/source/icon_bool.svg
+++ b/editor/icons/source/icon_bool.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bool.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="16"
- inkscape:cx="-0.0405559"
- inkscape:cy="11.453214"
+ inkscape:zoom="32"
+ inkscape:cx="3.5294581"
+ inkscape:cy="7.990409"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -68,10 +68,68 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
- <path
- style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="M 3 1 L 3 3 L 4 3 L 4 13 L 3 13 L 3 15 L 11 15 L 11 13 L 6 13 L 6 3 L 9 3 L 9 1 L 3 1 z M 9 3 L 9 8 L 11 8 L 11 3 L 9 3 z M 11 8 L 11 13 L 13 13 L 13 8 L 11 8 z "
- transform="translate(0,1036.3622)"
- id="rect4140" />
+ <g
+ transform="translate(0,-2.0001)"
+ id="layer1-5"
+ inkscape:label="Layer 1"
+ style="fill:#cf68ea;fill-opacity:1">
+ <rect
+ transform="scale(-1,1)"
+ y="1044.3622"
+ x="-2"
+ height="5.9999666"
+ width="2"
+ id="rect4364"
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(-1,1)"
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4368"
+ width="1"
+ height="2.0000174"
+ x="-2"
+ y="1044.3622" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4370"
+ d="m 2,1044.3623 a 3,3 0 0 1 3,3 H 3 a 1.0000174,1.0000174 0 0 0 -1,-1 z"
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4374"
+ width="2"
+ height="5"
+ x="13"
+ y="-1047.3622"
+ transform="scale(1,-1)" />
+ <path
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3623 a 3,3 0 0 0 3,-3 H 3 a 1.0000174,1.0000174 0 0 1 -1,1 z"
+ id="path4378"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4384"
+ width="2"
+ height="3.9999492"
+ x="-2"
+ y="1042.3622"
+ transform="scale(-1,1)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4392"
+ d="m 16,1050.3623 a 3,3 0 0 1 -3,-3 h 2 a 1.0000174,1.0000174 0 0 0 1,1 z"
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4148"
+ d="m 7,1044.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,2 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z"
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4174"
+ d="m 11,1044.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,2 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z"
+ style="fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
</g>
</svg>
diff --git a/editor/icons/source/icon_bus_vu_db.svg b/editor/icons/source/icon_bus_vu_db.svg
new file mode 100644
index 0000000000..813990bb42
--- /dev/null
+++ b/editor/icons/source/icon_bus_vu_db.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="128"
+ viewBox="0 0 32 128"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_vu_empty.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bus_vu_db.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient959-5"
+ id="linearGradient4736"
+ x1="16"
+ y1="0"
+ x2="16"
+ y2="128"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient959-5">
+ <stop
+ id="stop957-3"
+ offset="0"
+ style="stop-color:#ff8484;stop-opacity:1" />
+ <stop
+ style="stop-color:#e1dc7a;stop-opacity:1"
+ offset="0.5"
+ id="stop955-5" />
+ <stop
+ id="stop953-6"
+ offset="1"
+ style="stop-color:#84ffb1;stop-opacity:1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4"
+ inkscape:cx="21.367149"
+ inkscape:cy="54.069367"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-midpoints="false"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-924.3622)">
+ <path
+ style="fill:url(#linearGradient4736);fill-opacity:1;stroke:none;stroke-width:2.68328929;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.49019608"
+ d="M 1.5 0 C 0.66899518 0 0 0.66899518 0 1.5 C 0 2.3310048 0.66899518 3 1.5 3 L 3.5 3 C 4.3310048 3 5 2.3310048 5 1.5 C 5 0.66899518 4.3310048 0 3.5 0 L 1.5 0 z M 1.5 7 C 0.669 7 0 7.669 0 8.5 C 0 9.331 0.669 10 1.5 10 C 2.331 10 3 9.331 3 8.5 C 3 7.669 2.331 7 1.5 7 z M 24 10.75 C 22.5 10.75 21 12.05555 21 14 A 1.0001 1.0001 0 1 0 23 14 C 23 12.94444 23.5 12.75 24 12.75 C 24.5 12.75 25 12.94444 25 14 C 25 14.59157 24.641069 15.156041 23.808594 15.863281 C 22.976118 16.570521 21.747003 17.315092 20.451172 18.164062 A 1.0001 1.0001 0 0 0 21 20 L 26 20 A 1.0001 1.0001 0 1 0 26 18 L 24.214844 18 C 24.498598 17.79333 24.845909 17.605569 25.103516 17.386719 C 26.133676 16.511529 27 15.40842 27 14 C 27 12.05555 25.5 10.75 24 10.75 z M 16.970703 11.001953 A 1.0001 1.0001 0 0 0 16.552734 11.105469 L 14.552734 12.105469 A 1.0001163 1.0001163 0 0 0 15.447266 13.894531 L 16 13.619141 L 16 19 A 1.0001 1.0001 0 1 0 18 19 L 18 12 A 1.0001 1.0001 0 0 0 16.970703 11.001953 z M 1.5 14 C 0.66899518 14 0 14.668995 0 15.5 C 0 16.331005 0.66899518 17 1.5 17 L 3.5 17 C 4.3310048 17 5 16.331005 5 15.5 C 5 14.668995 4.3310048 14 3.5 14 L 1.5 14 z M 1.5 21 C 0.669 21 0 21.669 0 22.5 C 0 23.331 0.669 24 1.5 24 C 2.331 24 3 23.331 3 22.5 C 3 21.669 2.331 21 1.5 21 z M 23 24 C 22.446 24 22 24.446 22 25 L 22 26 L 22 28 L 21.070312 28 A 1.0001 1.0001 0 0 0 21 28 C 19.929806 28 18.937441 28.57318 18.402344 29.5 C 17.867247 30.42681 17.867247 31.57318 18.402344 32.5 C 18.937441 33.42681 19.929806 34 21 34 L 23 34 C 23.554 34 24 33.554 24 33 L 24 25 C 24 24.446 23.554 24 23 24 z M 27 24 C 26.446 24 26 24.446 26 25 L 26 33 C 26 33.554 26.446 34 27 34 L 29 34 C 30.070194 34 31.062559 33.42681 31.597656 32.5 C 32.132753 31.57318 32.132753 30.42681 31.597656 29.5 C 31.492619 29.31807 31.365922 29.153017 31.228516 29 C 31.366318 28.846693 31.49237 28.682361 31.597656 28.5 C 32.132753 27.57318 32.132753 26.42681 31.597656 25.5 C 31.062559 24.57318 30.070194 24 29 24 L 27 24 z M 13 25 C 11.355297 25 10 26.3553 10 28 L 10 31 C 10 32.6447 11.355297 34 13 34 C 14.644703 34 16 32.6447 16 31 L 16 28 C 16 26.3553 14.644703 25 13 25 z M 28 26 L 29 26 C 29.358869 26 29.6858 26.18921 29.865234 26.5 C 30.044669 26.81079 30.044669 27.18921 29.865234 27.5 C 29.6858 27.81079 29.358869 28 29 28 L 28.929688 28 L 28 28 L 28 26 z M 13 27 C 13.571297 27 14 27.4287 14 28 L 14 31 C 14 31.5713 13.571297 32 13 32 C 12.428703 32 12 31.5713 12 31 L 12 28 C 12 27.4287 12.428703 27 13 27 z M 1.5 28 C 0.66899518 28 0 28.668995 0 29.5 C 0 30.331005 0.66899518 31 1.5 31 L 3.5 31 C 4.3310048 31 5 30.331005 5 29.5 C 5 28.668995 4.3310048 28 3.5 28 L 1.5 28 z M 21 30 L 22 30 L 22 32 L 21.070312 32 A 1.0001 1.0001 0 0 0 21 32 C 20.641131 32 20.3142 31.81079 20.134766 31.5 C 19.955331 31.18921 19.955331 30.81079 20.134766 30.5 C 20.3142 30.18921 20.641131 30 21 30 z M 28 30 L 29 30 C 29.358869 30 29.6858 30.18921 29.865234 30.5 C 30.044669 30.81079 30.044669 31.18921 29.865234 31.5 C 29.6858 31.81079 29.358869 32 29 32 L 28 32 L 28 30 z M 1.5 35 C 0.669 35 0 35.669 0 36.5 C 0 37.331 0.669 38 1.5 38 C 2.331 38 3 37.331 3 36.5 C 3 35.669 2.331 35 1.5 35 z M 24 37.75 C 22.5 37.75 21 39.05555 21 41 A 1.0001 1.0001 0 1 0 23 41 C 23 39.94444 23.5 39.75 24 39.75 C 24.5 39.75 25 39.94444 25 41 C 25 41.59157 24.641069 42.156041 23.808594 42.863281 C 22.976118 43.570521 21.747003 44.315092 20.451172 45.164062 A 1.0001 1.0001 0 0 0 21 47 L 26 47 A 1.0001 1.0001 0 1 0 26 45 L 24.214844 45 C 24.498598 44.79333 24.845909 44.605569 25.103516 44.386719 C 26.133676 43.511529 27 42.40842 27 41 C 27 39.05555 25.5 37.75 24 37.75 z M 16.970703 38.001953 A 1.0001 1.0001 0 0 0 16.552734 38.105469 L 14.552734 39.105469 A 1.0001163 1.0001163 0 0 0 15.447266 40.894531 L 16 40.619141 L 16 46 A 1.0001 1.0001 0 1 0 18 46 L 18 39 A 1.0001 1.0001 0 0 0 16.970703 38.001953 z M 1.5 42 C 0.66899518 42 0 42.668995 0 43.5 C 0 44.331005 0.66899518 45 1.5 45 L 3.5 45 C 4.3310048 45 5 44.331005 5 43.5 C 5 42.668995 4.3310048 42 3.5 42 L 1.5 42 z M 9 43 L 9 45 L 12 45 L 12 43 L 9 43 z M 2 49 C 1.169 49 0.5 49.669 0.5 50.5 C 0.5 51.331 1.169 52 2 52 C 2.831 52 3.5 51.331 3.5 50.5 C 3.5 49.669 2.831 49 2 49 z M 17.986328 52.75 C 16.486328 52.75 14.986328 54.05555 14.986328 56 A 1.0001 1.0001 0 1 0 16.986328 56 C 16.986328 54.94444 17.486328 54.75 17.986328 54.75 C 18.486328 54.75 18.986328 54.94444 18.986328 56 C 18.986328 56.59157 18.627397 57.156041 17.794922 57.863281 C 16.962447 58.570521 15.733331 59.315092 14.4375 60.164062 A 1.0001 1.0001 0 0 0 14.986328 62 L 19.986328 62 A 1.0001 1.0001 0 1 0 19.986328 60 L 18.199219 60 C 18.483315 59.79311 18.83195 59.605809 19.089844 59.386719 C 20.120004 58.511529 20.986328 57.40842 20.986328 56 C 20.986328 54.05555 19.486328 52.75 17.986328 52.75 z M 25.033203 52.988281 A 1.0001 1.0001 0 0 0 24.142578 53.486328 L 21.142578 58.486328 A 1.0001 1.0001 0 0 0 22 60 L 25 60 L 25 61 A 1.0001 1.0001 0 1 0 27 61 L 27 59 A 1.0001 1.0001 0 0 0 26 58 L 23.767578 58 L 25.857422 54.515625 A 1.0001 1.0001 0 0 0 25.033203 52.988281 z M 1.5 56 C 0.66899518 56 0 56.668995 0 57.5 C 0 58.331005 0.66899518 59 1.5 59 L 3.5 59 C 4.3310048 59 5 58.331005 5 57.5 C 5 56.668995 4.3310048 56 3.5 56 L 1.5 56 z M 9 58 L 9 60 L 12 60 L 12 58 L 9 58 z M 1.5 63 C 0.669 63 0 63.669 0 64.5 C 0 65.331 0.669 66 1.5 66 C 2.331 66 3 65.331 3 64.5 C 3 63.669 2.331 63 1.5 63 z M 26.046875 67.996094 A 1.0001 1.0001 0 0 0 25.683594 68.052734 C 25.683594 68.052734 24.700104 68.385829 23.792969 69.292969 C 22.885834 70.200139 22 71.75 22 74 A 1.0001 1.0001 0 0 0 22.021484 74.214844 C 22.135372 75.759296 23.42866 77 25 77 C 26.64501 77 28 75.64497 28 74 C 28 72.35499 26.64501 71 25 71 C 24.984666 71 24.970361 71.003672 24.955078 71.003906 C 25.03908 70.902917 25.122032 70.79203 25.207031 70.707031 C 25.799896 70.114161 26.316406 69.949219 26.316406 69.949219 A 1.0001 1.0001 0 0 0 26.046875 67.996094 z M 16.986328 68.001953 C 15.94567 68.009427 14.945809 68.560643 14.402344 69.501953 A 1.0001607 1.0001607 0 0 0 16.134766 70.501953 C 16.380733 70.075953 16.87953 69.892287 17.341797 70.060547 C 17.804064 70.228797 18.069795 70.689368 17.984375 71.173828 C 17.898952 71.658288 17.491934 72.001953 17 72.001953 A 1.0001 1.0001 0 0 0 16.916016 72.003906 A 1.0001 1.0001 0 0 0 16.751953 72.029297 A 1.0001 1.0001 0 0 0 16.722656 72.037109 A 1.0001 1.0001 0 0 0 16.634766 72.064453 A 1.0001 1.0001 0 0 0 16.574219 72.091797 A 1.0001 1.0001 0 0 0 16.527344 72.113281 A 1.0001 1.0001 0 0 0 16.486328 72.136719 A 1.0001 1.0001 0 0 0 16.453125 72.15625 A 1.0001 1.0001 0 0 0 16.3125 72.263672 A 1.0001 1.0001 0 0 0 16.287109 72.287109 A 1.0001 1.0001 0 0 0 16.269531 72.306641 A 1.0001 1.0001 0 0 0 16.21875 72.359375 A 1.0001 1.0001 0 0 0 16.1875 72.400391 A 1.0001 1.0001 0 0 0 16.162109 72.435547 A 1.0001 1.0001 0 0 0 16.142578 72.466797 A 1.0001 1.0001 0 0 0 16.064453 72.611328 A 1.0001 1.0001 0 0 0 16.041016 72.677734 A 1.0001 1.0001 0 0 0 16.033203 72.695312 A 1.0001 1.0001 0 0 0 15.996094 72.861328 A 1.0001 1.0001 0 0 0 15.990234 72.912109 A 1.0001 1.0001 0 0 0 15.990234 72.927734 A 1.0001 1.0001 0 0 0 15.986328 73 A 1.0001 1.0001 0 0 0 15.990234 73.074219 A 1.0001 1.0001 0 0 0 15.990234 73.089844 A 1.0001 1.0001 0 0 0 15.996094 73.140625 A 1.0001 1.0001 0 0 0 16.033203 73.304688 A 1.0001 1.0001 0 0 0 16.041016 73.324219 A 1.0001 1.0001 0 0 0 16.064453 73.390625 A 1.0001 1.0001 0 0 0 16.070312 73.404297 A 1.0001 1.0001 0 0 0 16.101562 73.466797 A 1.0001 1.0001 0 0 0 16.142578 73.535156 A 1.0001 1.0001 0 0 0 16.162109 73.566406 A 1.0001 1.0001 0 0 0 16.1875 73.601562 A 1.0001 1.0001 0 0 0 16.21875 73.642578 A 1.0001 1.0001 0 0 0 16.269531 73.695312 A 1.0001 1.0001 0 0 0 16.287109 73.714844 A 1.0001 1.0001 0 0 0 16.3125 73.738281 A 1.0001 1.0001 0 0 0 16.4375 73.835938 A 1.0001 1.0001 0 0 0 16.515625 73.882812 A 1.0001 1.0001 0 0 0 16.521484 73.886719 A 1.0001 1.0001 0 0 0 16.59375 73.919922 A 1.0001 1.0001 0 0 0 16.615234 73.929688 A 1.0001 1.0001 0 0 0 16.679688 73.953125 A 1.0001 1.0001 0 0 0 16.720703 73.964844 A 1.0001 1.0001 0 0 0 16.751953 73.972656 A 1.0001 1.0001 0 0 0 16.919922 73.998047 A 1.0001 1.0001 0 0 0 17 74.001953 C 17.491934 74.001953 17.898952 74.343665 17.984375 74.828125 C 18.069795 75.312585 17.804064 75.773206 17.341797 75.941406 C 16.87953 76.109706 16.380733 75.92637 16.134766 75.5 A 1.0001607 1.0001607 0 0 0 14.402344 76.5 C 15.126964 77.7551 16.66355 78.316013 18.025391 77.820312 C 19.387231 77.324714 20.206736 75.907669 19.955078 74.480469 C 19.854803 73.911777 19.590188 73.406592 19.222656 73 C 19.589698 72.593206 19.854887 72.089699 19.955078 71.521484 C 20.206736 70.094264 19.387231 68.677311 18.025391 68.181641 C 17.68493 68.057723 17.333214 67.999462 16.986328 68.001953 z M 1.5 70 C 0.66899518 70 0 70.668995 0 71.5 C 0 72.331005 0.66899518 73 1.5 73 L 3.5 73 C 4.3310048 73 5 72.331005 5 71.5 C 5 70.668995 4.3310048 70 3.5 70 L 1.5 70 z M 9 72 L 9 74 L 12 74 L 12 72 L 9 72 z M 25 73 C 25.564129 73 26 73.43587 26 74 C 26 74.56413 25.564129 75 25 75 C 24.435871 75 24 74.56413 24 74 C 24 73.43587 24.435871 73 25 73 z M 1.5 77 C 0.669 77 0 77.669 0 78.5 C 0 79.331 0.669 80 1.5 80 C 2.331 80 3 79.331 3 78.5 C 3 77.669 2.331 77 1.5 77 z M 18.033203 80.988281 A 1.0001 1.0001 0 0 0 17.142578 81.486328 L 14.142578 86.486328 A 1.0001 1.0001 0 0 0 15 88 L 18 88 L 18 89 A 1.0001 1.0001 0 1 0 20 89 L 20 87 A 1.0001 1.0001 0 0 0 19 86 L 16.767578 86 L 18.857422 82.515625 A 1.0001 1.0001 0 0 0 18.033203 80.988281 z M 25 81 C 23.35499 81 22 82.355 22 84 C 22 84.768995 22.303687 85.466552 22.787109 86 C 22.304287 86.533316 22 87.231542 22 88 C 22 89.645 23.35499 91 25 91 C 26.64501 91 28 89.645 28 88 C 28 87.231542 27.695713 86.533316 27.212891 86 C 27.696313 85.466552 28 84.768995 28 84 C 28 82.355 26.64501 81 25 81 z M 25 83 C 25.564129 83 26 83.4359 26 84 C 26 84.5642 25.564129 85 25 85 C 24.435871 85 24 84.5642 24 84 C 24 83.4359 24.435871 83 25 83 z M 1.5 84 C 0.66899518 84 0 84.668995 0 85.5 C 0 86.331005 0.66899518 87 1.5 87 L 3.5 87 C 4.3310048 87 5 86.331005 5 85.5 C 5 84.668995 4.3310048 84 3.5 84 L 1.5 84 z M 9 86 L 9 88 L 12 88 L 12 86 L 9 86 z M 25 87 C 25.564129 87 26 87.4359 26 88 C 26 88.5642 25.564129 89 25 89 C 24.435871 89 24 88.5642 24 88 C 24 87.4359 24.435871 87 25 87 z M 1.5 91 C 0.669 91 0 91.669 0 92.5 C 0 93.331 0.669 94 1.5 94 C 2.331 94 3 93.331 3 92.5 C 3 91.669 2.331 91 1.5 91 z M 17.947266 94.982422 A 1.0001 1.0001 0 0 0 17.683594 95.037109 C 17.683594 95.037109 16.700104 95.372197 15.792969 96.279297 C 14.885834 97.186097 14 98.736326 14 100.98633 A 1.0001 1.0001 0 0 0 14.021484 101.20117 C 14.135372 102.74565 15.42866 103.98633 17 103.98633 C 18.64501 103.98633 20 102.63133 20 100.98633 C 20 99.341226 18.64501 97.986328 17 97.986328 C 16.984666 97.986328 16.970361 97.99 16.955078 97.990234 C 17.03908 97.889241 17.122032 97.778363 17.207031 97.693359 C 17.799896 97.100459 18.316406 96.935547 18.316406 96.935547 A 1.0001 1.0001 0 0 0 18.046875 94.982422 A 1.0001 1.0001 0 0 0 17.947266 94.982422 z M 25 95 C 23.355297 95 22 96.3553 22 98 L 22 101 C 22 102.6447 23.355297 104 25 104 C 26.644703 104 28 102.6447 28 101 L 28 98 C 28 96.3553 26.644703 95 25 95 z M 25 97 C 25.571297 97 26 97.4287 26 98 L 26 101 C 26 101.5713 25.571297 102 25 102 C 24.428703 102 24 101.5713 24 101 L 24 98 C 24 97.4287 24.428703 97 25 97 z M 1.5 98 C 0.66899518 98 0 98.668995 0 99.5 C 0 100.331 0.66899518 101 1.5 101 L 3.5 101 C 4.3310048 101 5 100.331 5 99.5 C 5 98.668995 4.3310048 98 3.5 98 L 1.5 98 z M 17 99.986328 C 17.564129 99.986328 18 100.42213 18 100.98633 C 18 101.55043 17.564129 101.98633 17 101.98633 C 16.435871 101.98633 16 101.55043 16 100.98633 C 16 100.42213 16.435871 99.986328 17 99.986328 z M 9 100 L 9 102 L 12 102 L 12 100 L 9 100 z M 1.5 105 C 0.669 105 0 105.669 0 106.5 C 0 107.331 0.669 108 1.5 108 C 2.331 108 3 107.331 3 106.5 C 3 105.669 2.331 105 1.5 105 z M 24 108.75 C 22.5 108.75 21 110.0556 21 112 A 1.0001 1.0001 0 1 0 23 112 C 23 110.9445 23.5 110.75 24 110.75 C 24.5 110.75 25 110.9445 25 112 C 25 112.5916 24.641069 113.15608 23.808594 113.86328 C 22.976118 114.57048 21.747004 115.31506 20.451172 116.16406 A 1.0001 1.0001 0 0 0 21 118 L 26 118 A 1.0001 1.0001 0 1 0 26 116 L 24.214844 116 C 24.498598 115.7934 24.845909 115.60562 25.103516 115.38672 C 26.133676 114.51162 27 113.4085 27 112 C 27 110.0556 25.5 108.75 24 108.75 z M 14 109 A 1.0001 1.0001 0 1 0 14 111 L 17.382812 111 L 14.105469 117.55273 A 1.0001181 1.0001181 0 0 0 15.894531 118.44727 L 19.894531 110.44727 A 1.0001 1.0001 0 0 0 19 109 L 14 109 z M 1.5 112 C 0.66899518 112 0 112.669 0 113.5 C 0 114.331 0.66899518 115 1.5 115 L 3.5 115 C 4.3310048 115 5 114.331 5 113.5 C 5 112.669 4.3310048 112 3.5 112 L 1.5 112 z M 9 114 L 9 116 L 12 116 L 12 114 L 9 114 z M 1.5 119 C 0.669 119 0 119.669 0 120.5 C 0 121.331 0.669 122 1.5 122 C 2.331 122 3 121.331 3 120.5 C 3 119.669 2.331 119 1.5 119 z "
+ transform="translate(0,924.3622)"
+ id="rect4527" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_bus_vu_empty.svg b/editor/icons/source/icon_bus_vu_empty.svg
new file mode 100644
index 0000000000..0755a2695b
--- /dev/null
+++ b/editor/icons/source/icon_bus_vu_empty.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="128"
+ viewBox="0 0 16 128"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_vu_empty.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bus_vu_empty.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient959"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#ff8484;stop-opacity:1"
+ offset="0"
+ id="stop957" />
+ <stop
+ id="stop955"
+ offset="0.5"
+ style="stop-color:#e1dc7a;stop-opacity:1" />
+ <stop
+ style="stop-color:#84ffb1;stop-opacity:1"
+ offset="1"
+ id="stop953" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient959"
+ id="linearGradient951"
+ x1="8"
+ y1="2"
+ x2="8"
+ y2="126"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568543"
+ inkscape:cx="37.883117"
+ inkscape:cy="58.698878"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-924.3622)">
+ <path
+ style="fill:url(#linearGradient951);fill-opacity:1;stroke:none;stroke-width:1.28571427;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 2 C 2.4459952 2 2 2.4459952 2 3 C 2 3.5540048 2.4459952 4 3 4 L 13 4 C 13.554005 4 14 3.5540048 14 3 C 14 2.4459952 13.554005 2 13 2 L 3 2 z M 3 5 C 2.4459952 5 2 5.4459952 2 6 C 2 6.5540048 2.4459952 7 3 7 L 13 7 C 13.554005 7 14 6.5540048 14 6 C 14 5.4459952 13.554005 5 13 5 L 3 5 z M 3 8 C 2.4459952 8 2 8.4459952 2 9 C 2 9.5540048 2.4459952 10 3 10 L 13 10 C 13.554005 10 14 9.5540048 14 9 C 14 8.4459952 13.554005 8 13 8 L 3 8 z M 3 11 C 2.4459952 11 2 11.445995 2 12 C 2 12.554005 2.4459952 13 3 13 L 13 13 C 13.554005 13 14 12.554005 14 12 C 14 11.445995 13.554005 11 13 11 L 3 11 z M 3 14 C 2.4459952 14 2 14.445995 2 15 C 2 15.554005 2.4459952 16 3 16 L 13 16 C 13.554005 16 14 15.554005 14 15 C 14 14.445995 13.554005 14 13 14 L 3 14 z M 3 17 C 2.4459952 17 2 17.445995 2 18 C 2 18.554005 2.4459952 19 3 19 L 13 19 C 13.554005 19 14 18.554005 14 18 C 14 17.445995 13.554005 17 13 17 L 3 17 z M 3 20 C 2.4459952 20 2 20.445995 2 21 C 2 21.554005 2.4459952 22 3 22 L 13 22 C 13.554005 22 14 21.554005 14 21 C 14 20.445995 13.554005 20 13 20 L 3 20 z M 3 23 C 2.4459952 23 2 23.445995 2 24 C 2 24.554005 2.4459952 25 3 25 L 13 25 C 13.554005 25 14 24.554005 14 24 C 14 23.445995 13.554005 23 13 23 L 3 23 z M 3 26 C 2.4459952 26 2 26.445995 2 27 C 2 27.554005 2.4459952 28 3 28 L 13 28 C 13.554005 28 14 27.554005 14 27 C 14 26.445995 13.554005 26 13 26 L 3 26 z M 3 31 C 2.4459952 31 2 31.445995 2 32 C 2 32.554005 2.4459952 33 3 33 L 13 33 C 13.554005 33 14 32.554005 14 32 C 14 31.445995 13.554005 31 13 31 L 3 31 z M 3 34 C 2.4459952 34 2 34.445995 2 35 C 2 35.554005 2.4459952 36 3 36 L 13 36 C 13.554005 36 14 35.554005 14 35 C 14 34.445995 13.554005 34 13 34 L 3 34 z M 3 37 C 2.4459952 37 2 37.445995 2 38 C 2 38.554005 2.4459952 39 3 39 L 13 39 C 13.554005 39 14 38.554005 14 38 C 14 37.445995 13.554005 37 13 37 L 3 37 z M 3 40 C 2.4459952 40 2 40.445995 2 41 C 2 41.554005 2.4459952 42 3 42 L 13 42 C 13.554005 42 14 41.554005 14 41 C 14 40.445995 13.554005 40 13 40 L 3 40 z M 3 43 C 2.4459952 43 2 43.445995 2 44 C 2 44.554005 2.4459952 45 3 45 L 13 45 C 13.554005 45 14 44.554005 14 44 C 14 43.445995 13.554005 43 13 43 L 3 43 z M 3 46 C 2.4459952 46 2 46.445995 2 47 C 2 47.554005 2.4459952 48 3 48 L 13 48 C 13.554005 48 14 47.554005 14 47 C 14 46.445995 13.554005 46 13 46 L 3 46 z M 3 49 C 2.4459952 49 2 49.445995 2 50 C 2 50.554005 2.4459952 51 3 51 L 13 51 C 13.554005 51 14 50.554005 14 50 C 14 49.445995 13.554005 49 13 49 L 3 49 z M 3 52 C 2.4459952 52 2 52.445995 2 53 C 2 53.554005 2.4459952 54 3 54 L 13 54 C 13.554005 54 14 53.554005 14 53 C 14 52.445995 13.554005 52 13 52 L 3 52 z M 3 55 C 2.4459952 55 2 55.445995 2 56 C 2 56.554005 2.4459952 57 3 57 L 13 57 C 13.554005 57 14 56.554005 14 56 C 14 55.445995 13.554005 55 13 55 L 3 55 z M 3 58 C 2.4459952 58 2 58.445995 2 59 C 2 59.554005 2.4459952 60 3 60 L 13 60 C 13.554005 60 14 59.554005 14 59 C 14 58.445995 13.554005 58 13 58 L 3 58 z M 3 61 C 2.4459952 61 2 61.445995 2 62 C 2 62.554005 2.4459952 63 3 63 L 13 63 C 13.554005 63 14 62.554005 14 62 C 14 61.445995 13.554005 61 13 61 L 3 61 z M 3 64 C 2.4459952 64 2 64.445995 2 65 C 2 65.554005 2.4459952 66 3 66 L 13 66 C 13.554005 66 14 65.554005 14 65 C 14 64.445995 13.554005 64 13 64 L 3 64 z M 3 67 C 2.4459952 67 2 67.445995 2 68 C 2 68.554005 2.4459952 69 3 69 L 13 69 C 13.554005 69 14 68.554005 14 68 C 14 67.445995 13.554005 67 13 67 L 3 67 z M 3 70 C 2.4459952 70 2 70.445995 2 71 C 2 71.554005 2.4459952 72 3 72 L 13 72 C 13.554005 72 14 71.554005 14 71 C 14 70.445995 13.554005 70 13 70 L 3 70 z M 3 73 C 2.4459952 73 2 73.445995 2 74 C 2 74.554005 2.4459952 75 3 75 L 13 75 C 13.554005 75 14 74.554005 14 74 C 14 73.445995 13.554005 73 13 73 L 3 73 z M 3 76 C 2.4459952 76 2 76.445995 2 77 C 2 77.554005 2.4459952 78 3 78 L 13 78 C 13.554005 78 14 77.554005 14 77 C 14 76.445995 13.554005 76 13 76 L 3 76 z M 3 79 C 2.4459952 79 2 79.445995 2 80 C 2 80.554005 2.4459952 81 3 81 L 13 81 C 13.554005 81 14 80.554005 14 80 C 14 79.445995 13.554005 79 13 79 L 3 79 z M 3 82 C 2.4459952 82 2 82.445995 2 83 C 2 83.554005 2.4459952 84 3 84 L 13 84 C 13.554005 84 14 83.554005 14 83 C 14 82.445995 13.554005 82 13 82 L 3 82 z M 3 85 C 2.4459952 85 2 85.445995 2 86 C 2 86.554005 2.4459952 87 3 87 L 13 87 C 13.554005 87 14 86.554005 14 86 C 14 85.445995 13.554005 85 13 85 L 3 85 z M 3 88 C 2.4459952 88 2 88.445995 2 89 C 2 89.554005 2.4459952 90 3 90 L 13 90 C 13.554005 90 14 89.554005 14 89 C 14 88.445995 13.554005 88 13 88 L 3 88 z M 3 91 C 2.4459952 91 2 91.445995 2 92 C 2 92.554005 2.4459952 93 3 93 L 13 93 C 13.554005 93 14 92.554005 14 92 C 14 91.445995 13.554005 91 13 91 L 3 91 z M 3 94 C 2.4459952 94 2 94.445995 2 95 C 2 95.554005 2.4459952 96 3 96 L 13 96 C 13.554005 96 14 95.554005 14 95 C 14 94.445995 13.554005 94 13 94 L 3 94 z M 3 97 C 2.4459952 97 2 97.445995 2 98 C 2 98.554005 2.4459952 99 3 99 L 13 99 C 13.554005 99 14 98.554005 14 98 C 14 97.445995 13.554005 97 13 97 L 3 97 z M 3 100 C 2.4459952 100 2 100.446 2 101 C 2 101.554 2.4459952 102 3 102 L 13 102 C 13.554005 102 14 101.554 14 101 C 14 100.446 13.554005 100 13 100 L 3 100 z M 3 103 C 2.4459952 103 2 103.446 2 104 C 2 104.554 2.4459952 105 3 105 L 13 105 C 13.554005 105 14 104.554 14 104 C 14 103.446 13.554005 103 13 103 L 3 103 z M 3 106 C 2.4459952 106 2 106.446 2 107 C 2 107.554 2.4459952 108 3 108 L 13 108 C 13.554005 108 14 107.554 14 107 C 14 106.446 13.554005 106 13 106 L 3 106 z M 3 109 C 2.4459952 109 2 109.446 2 110 C 2 110.554 2.4459952 111 3 111 L 13 111 C 13.554005 111 14 110.554 14 110 C 14 109.446 13.554005 109 13 109 L 3 109 z M 3 112 C 2.4459952 112 2 112.446 2 113 C 2 113.554 2.4459952 114 3 114 L 13 114 C 13.554005 114 14 113.554 14 113 C 14 112.446 13.554005 112 13 112 L 3 112 z M 3 115 C 2.4459952 115 2 115.446 2 116 C 2 116.554 2.4459952 117 3 117 L 13 117 C 13.554005 117 14 116.554 14 116 C 14 115.446 13.554005 115 13 115 L 3 115 z M 3 118 C 2.4459952 118 2 118.446 2 119 C 2 119.554 2.4459952 120 3 120 L 13 120 C 13.554005 120 14 119.554 14 119 C 14 118.446 13.554005 118 13 118 L 3 118 z M 3 121 C 2.4459952 121 2 121.446 2 122 C 2 122.554 2.4459952 123 3 123 L 13 123 C 13.554005 123 14 122.554 14 122 C 14 121.446 13.554005 121 13 121 L 3 121 z M 3 124 C 2.4459952 124 2 124.446 2 125 C 2 125.554 2.4459952 126 3 126 L 13 126 C 13.554005 126 14 125.554 14 125 C 14 124.446 13.554005 124 13 124 L 3 124 z "
+ transform="translate(0,924.3622)"
+ id="rect852" />
+ <path
+ id="path1006"
+ transform="translate(0,924.3622)"
+ d="M 3 2 C 2.4459952 2 2 2.4459952 2 3 C 2 3.5540048 2.4459952 4 3 4 L 13 4 C 13.554005 4 14 3.5540048 14 3 C 14 2.4459952 13.554005 2 13 2 L 3 2 z M 3 5 C 2.4459952 5 2 5.4459952 2 6 C 2 6.5540048 2.4459952 7 3 7 L 13 7 C 13.554005 7 14 6.5540048 14 6 C 14 5.4459952 13.554005 5 13 5 L 3 5 z M 3 8 C 2.4459952 8 2 8.4459952 2 9 C 2 9.5540048 2.4459952 10 3 10 L 13 10 C 13.554005 10 14 9.5540048 14 9 C 14 8.4459952 13.554005 8 13 8 L 3 8 z M 3 11 C 2.4459952 11 2 11.445995 2 12 C 2 12.554005 2.4459952 13 3 13 L 13 13 C 13.554005 13 14 12.554005 14 12 C 14 11.445995 13.554005 11 13 11 L 3 11 z M 3 14 C 2.4459952 14 2 14.445995 2 15 C 2 15.554005 2.4459952 16 3 16 L 13 16 C 13.554005 16 14 15.554005 14 15 C 14 14.445995 13.554005 14 13 14 L 3 14 z M 3 17 C 2.4459952 17 2 17.445995 2 18 C 2 18.554005 2.4459952 19 3 19 L 13 19 C 13.554005 19 14 18.554005 14 18 C 14 17.445995 13.554005 17 13 17 L 3 17 z M 3 20 C 2.4459952 20 2 20.445995 2 21 C 2 21.554005 2.4459952 22 3 22 L 13 22 C 13.554005 22 14 21.554005 14 21 C 14 20.445995 13.554005 20 13 20 L 3 20 z M 3 23 C 2.4459952 23 2 23.445995 2 24 C 2 24.554005 2.4459952 25 3 25 L 13 25 C 13.554005 25 14 24.554005 14 24 C 14 23.445995 13.554005 23 13 23 L 3 23 z M 3 26 C 2.4459952 26 2 26.445995 2 27 C 2 27.554005 2.4459952 28 3 28 L 13 28 C 13.554005 28 14 27.554005 14 27 C 14 26.445995 13.554005 26 13 26 L 3 26 z M 3 31 C 2.4459952 31 2 31.445995 2 32 C 2 32.554005 2.4459952 33 3 33 L 13 33 C 13.554005 33 14 32.554005 14 32 C 14 31.445995 13.554005 31 13 31 L 3 31 z M 3 34 C 2.4459952 34 2 34.445995 2 35 C 2 35.554005 2.4459952 36 3 36 L 13 36 C 13.554005 36 14 35.554005 14 35 C 14 34.445995 13.554005 34 13 34 L 3 34 z M 3 37 C 2.4459952 37 2 37.445995 2 38 C 2 38.554005 2.4459952 39 3 39 L 13 39 C 13.554005 39 14 38.554005 14 38 C 14 37.445995 13.554005 37 13 37 L 3 37 z M 3 40 C 2.4459952 40 2 40.445995 2 41 C 2 41.554005 2.4459952 42 3 42 L 13 42 C 13.554005 42 14 41.554005 14 41 C 14 40.445995 13.554005 40 13 40 L 3 40 z M 3 43 C 2.4459952 43 2 43.445995 2 44 C 2 44.554005 2.4459952 45 3 45 L 13 45 C 13.554005 45 14 44.554005 14 44 C 14 43.445995 13.554005 43 13 43 L 3 43 z M 3 46 C 2.4459952 46 2 46.445995 2 47 C 2 47.554005 2.4459952 48 3 48 L 13 48 C 13.554005 48 14 47.554005 14 47 C 14 46.445995 13.554005 46 13 46 L 3 46 z M 3 49 C 2.4459952 49 2 49.445995 2 50 C 2 50.554005 2.4459952 51 3 51 L 13 51 C 13.554005 51 14 50.554005 14 50 C 14 49.445995 13.554005 49 13 49 L 3 49 z M 3 52 C 2.4459952 52 2 52.445995 2 53 C 2 53.554005 2.4459952 54 3 54 L 13 54 C 13.554005 54 14 53.554005 14 53 C 14 52.445995 13.554005 52 13 52 L 3 52 z M 3 55 C 2.4459952 55 2 55.445995 2 56 C 2 56.554005 2.4459952 57 3 57 L 13 57 C 13.554005 57 14 56.554005 14 56 C 14 55.445995 13.554005 55 13 55 L 3 55 z M 3 58 C 2.4459952 58 2 58.445995 2 59 C 2 59.554005 2.4459952 60 3 60 L 13 60 C 13.554005 60 14 59.554005 14 59 C 14 58.445995 13.554005 58 13 58 L 3 58 z M 3 61 C 2.4459952 61 2 61.445995 2 62 C 2 62.554005 2.4459952 63 3 63 L 13 63 C 13.554005 63 14 62.554005 14 62 C 14 61.445995 13.554005 61 13 61 L 3 61 z M 3 64 C 2.4459952 64 2 64.445995 2 65 C 2 65.554005 2.4459952 66 3 66 L 13 66 C 13.554005 66 14 65.554005 14 65 C 14 64.445995 13.554005 64 13 64 L 3 64 z M 3 67 C 2.4459952 67 2 67.445995 2 68 C 2 68.554005 2.4459952 69 3 69 L 13 69 C 13.554005 69 14 68.554005 14 68 C 14 67.445995 13.554005 67 13 67 L 3 67 z M 3 70 C 2.4459952 70 2 70.445995 2 71 C 2 71.554005 2.4459952 72 3 72 L 13 72 C 13.554005 72 14 71.554005 14 71 C 14 70.445995 13.554005 70 13 70 L 3 70 z M 3 73 C 2.4459952 73 2 73.445995 2 74 C 2 74.554005 2.4459952 75 3 75 L 13 75 C 13.554005 75 14 74.554005 14 74 C 14 73.445995 13.554005 73 13 73 L 3 73 z M 3 76 C 2.4459952 76 2 76.445995 2 77 C 2 77.554005 2.4459952 78 3 78 L 13 78 C 13.554005 78 14 77.554005 14 77 C 14 76.445995 13.554005 76 13 76 L 3 76 z M 3 79 C 2.4459952 79 2 79.445995 2 80 C 2 80.554005 2.4459952 81 3 81 L 13 81 C 13.554005 81 14 80.554005 14 80 C 14 79.445995 13.554005 79 13 79 L 3 79 z M 3 82 C 2.4459952 82 2 82.445995 2 83 C 2 83.554005 2.4459952 84 3 84 L 13 84 C 13.554005 84 14 83.554005 14 83 C 14 82.445995 13.554005 82 13 82 L 3 82 z M 3 85 C 2.4459952 85 2 85.445995 2 86 C 2 86.554005 2.4459952 87 3 87 L 13 87 C 13.554005 87 14 86.554005 14 86 C 14 85.445995 13.554005 85 13 85 L 3 85 z M 3 88 C 2.4459952 88 2 88.445995 2 89 C 2 89.554005 2.4459952 90 3 90 L 13 90 C 13.554005 90 14 89.554005 14 89 C 14 88.445995 13.554005 88 13 88 L 3 88 z M 3 91 C 2.4459952 91 2 91.445995 2 92 C 2 92.554005 2.4459952 93 3 93 L 13 93 C 13.554005 93 14 92.554005 14 92 C 14 91.445995 13.554005 91 13 91 L 3 91 z M 3 94 C 2.4459952 94 2 94.445995 2 95 C 2 95.554005 2.4459952 96 3 96 L 13 96 C 13.554005 96 14 95.554005 14 95 C 14 94.445995 13.554005 94 13 94 L 3 94 z M 3 97 C 2.4459952 97 2 97.445995 2 98 C 2 98.554005 2.4459952 99 3 99 L 13 99 C 13.554005 99 14 98.554005 14 98 C 14 97.445995 13.554005 97 13 97 L 3 97 z M 3 100 C 2.4459952 100 2 100.446 2 101 C 2 101.554 2.4459952 102 3 102 L 13 102 C 13.554005 102 14 101.554 14 101 C 14 100.446 13.554005 100 13 100 L 3 100 z M 3 103 C 2.4459952 103 2 103.446 2 104 C 2 104.554 2.4459952 105 3 105 L 13 105 C 13.554005 105 14 104.554 14 104 C 14 103.446 13.554005 103 13 103 L 3 103 z M 3 106 C 2.4459952 106 2 106.446 2 107 C 2 107.554 2.4459952 108 3 108 L 13 108 C 13.554005 108 14 107.554 14 107 C 14 106.446 13.554005 106 13 106 L 3 106 z M 3 109 C 2.4459952 109 2 109.446 2 110 C 2 110.554 2.4459952 111 3 111 L 13 111 C 13.554005 111 14 110.554 14 110 C 14 109.446 13.554005 109 13 109 L 3 109 z M 3 112 C 2.4459952 112 2 112.446 2 113 C 2 113.554 2.4459952 114 3 114 L 13 114 C 13.554005 114 14 113.554 14 113 C 14 112.446 13.554005 112 13 112 L 3 112 z M 3 115 C 2.4459952 115 2 115.446 2 116 C 2 116.554 2.4459952 117 3 117 L 13 117 C 13.554005 117 14 116.554 14 116 C 14 115.446 13.554005 115 13 115 L 3 115 z M 3 118 C 2.4459952 118 2 118.446 2 119 C 2 119.554 2.4459952 120 3 120 L 13 120 C 13.554005 120 14 119.554 14 119 C 14 118.446 13.554005 118 13 118 L 3 118 z M 3 121 C 2.4459952 121 2 121.446 2 122 C 2 122.554 2.4459952 123 3 123 L 13 123 C 13.554005 123 14 122.554 14 122 C 14 121.446 13.554005 121 13 121 L 3 121 z M 3 124 C 2.4459952 124 2 124.446 2 125 C 2 125.554 2.4459952 126 3 126 L 13 126 C 13.554005 126 14 125.554 14 125 C 14 124.446 13.554005 124 13 124 L 3 124 z "
+ style="fill:#000000;fill-opacity:0.23529412;stroke:none;stroke-width:1.28571427;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_bus_vu_frozen.svg b/editor/icons/source/icon_bus_vu_frozen.svg
new file mode 100644
index 0000000000..0324076402
--- /dev/null
+++ b/editor/icons/source/icon_bus_vu_frozen.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="128"
+ viewBox="0 0 16 128"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_vu_empty.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bus_vu_frozen.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient959"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#62aeff;stop-opacity:1"
+ offset="0"
+ id="stop957" />
+ <stop
+ id="stop955"
+ offset="0.5"
+ style="stop-color:#75d1e6;stop-opacity:1" />
+ <stop
+ style="stop-color:#84ffee;stop-opacity:1"
+ offset="1"
+ id="stop953" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient959"
+ id="linearGradient951"
+ x1="8"
+ y1="2"
+ x2="8"
+ y2="126"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568543"
+ inkscape:cx="9.4951314"
+ inkscape:cy="71.853257"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-924.3622)">
+ <path
+ style="fill:url(#linearGradient951);fill-opacity:1;stroke:none;stroke-width:1.28571427;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 2 C 2.4459952 2 2 2.4459952 2 3 C 2 3.5540048 2.4459952 4 3 4 L 13 4 C 13.554005 4 14 3.5540048 14 3 C 14 2.4459952 13.554005 2 13 2 L 3 2 z M 3 5 C 2.4459952 5 2 5.4459952 2 6 C 2 6.5540048 2.4459952 7 3 7 L 13 7 C 13.554005 7 14 6.5540048 14 6 C 14 5.4459952 13.554005 5 13 5 L 3 5 z M 3 8 C 2.4459952 8 2 8.4459952 2 9 C 2 9.5540048 2.4459952 10 3 10 L 13 10 C 13.554005 10 14 9.5540048 14 9 C 14 8.4459952 13.554005 8 13 8 L 3 8 z M 3 11 C 2.4459952 11 2 11.445995 2 12 C 2 12.554005 2.4459952 13 3 13 L 13 13 C 13.554005 13 14 12.554005 14 12 C 14 11.445995 13.554005 11 13 11 L 3 11 z M 3 14 C 2.4459952 14 2 14.445995 2 15 C 2 15.554005 2.4459952 16 3 16 L 13 16 C 13.554005 16 14 15.554005 14 15 C 14 14.445995 13.554005 14 13 14 L 3 14 z M 3 17 C 2.4459952 17 2 17.445995 2 18 C 2 18.554005 2.4459952 19 3 19 L 13 19 C 13.554005 19 14 18.554005 14 18 C 14 17.445995 13.554005 17 13 17 L 3 17 z M 3 20 C 2.4459952 20 2 20.445995 2 21 C 2 21.554005 2.4459952 22 3 22 L 13 22 C 13.554005 22 14 21.554005 14 21 C 14 20.445995 13.554005 20 13 20 L 3 20 z M 3 23 C 2.4459952 23 2 23.445995 2 24 C 2 24.554005 2.4459952 25 3 25 L 13 25 C 13.554005 25 14 24.554005 14 24 C 14 23.445995 13.554005 23 13 23 L 3 23 z M 3 26 C 2.4459952 26 2 26.445995 2 27 C 2 27.554005 2.4459952 28 3 28 L 13 28 C 13.554005 28 14 27.554005 14 27 C 14 26.445995 13.554005 26 13 26 L 3 26 z M 3 31 C 2.4459952 31 2 31.445995 2 32 C 2 32.554005 2.4459952 33 3 33 L 13 33 C 13.554005 33 14 32.554005 14 32 C 14 31.445995 13.554005 31 13 31 L 3 31 z M 3 34 C 2.4459952 34 2 34.445995 2 35 C 2 35.554005 2.4459952 36 3 36 L 13 36 C 13.554005 36 14 35.554005 14 35 C 14 34.445995 13.554005 34 13 34 L 3 34 z M 3 37 C 2.4459952 37 2 37.445995 2 38 C 2 38.554005 2.4459952 39 3 39 L 13 39 C 13.554005 39 14 38.554005 14 38 C 14 37.445995 13.554005 37 13 37 L 3 37 z M 3 40 C 2.4459952 40 2 40.445995 2 41 C 2 41.554005 2.4459952 42 3 42 L 13 42 C 13.554005 42 14 41.554005 14 41 C 14 40.445995 13.554005 40 13 40 L 3 40 z M 3 43 C 2.4459952 43 2 43.445995 2 44 C 2 44.554005 2.4459952 45 3 45 L 13 45 C 13.554005 45 14 44.554005 14 44 C 14 43.445995 13.554005 43 13 43 L 3 43 z M 3 46 C 2.4459952 46 2 46.445995 2 47 C 2 47.554005 2.4459952 48 3 48 L 13 48 C 13.554005 48 14 47.554005 14 47 C 14 46.445995 13.554005 46 13 46 L 3 46 z M 3 49 C 2.4459952 49 2 49.445995 2 50 C 2 50.554005 2.4459952 51 3 51 L 13 51 C 13.554005 51 14 50.554005 14 50 C 14 49.445995 13.554005 49 13 49 L 3 49 z M 3 52 C 2.4459952 52 2 52.445995 2 53 C 2 53.554005 2.4459952 54 3 54 L 13 54 C 13.554005 54 14 53.554005 14 53 C 14 52.445995 13.554005 52 13 52 L 3 52 z M 3 55 C 2.4459952 55 2 55.445995 2 56 C 2 56.554005 2.4459952 57 3 57 L 13 57 C 13.554005 57 14 56.554005 14 56 C 14 55.445995 13.554005 55 13 55 L 3 55 z M 3 58 C 2.4459952 58 2 58.445995 2 59 C 2 59.554005 2.4459952 60 3 60 L 13 60 C 13.554005 60 14 59.554005 14 59 C 14 58.445995 13.554005 58 13 58 L 3 58 z M 3 61 C 2.4459952 61 2 61.445995 2 62 C 2 62.554005 2.4459952 63 3 63 L 13 63 C 13.554005 63 14 62.554005 14 62 C 14 61.445995 13.554005 61 13 61 L 3 61 z M 3 64 C 2.4459952 64 2 64.445995 2 65 C 2 65.554005 2.4459952 66 3 66 L 13 66 C 13.554005 66 14 65.554005 14 65 C 14 64.445995 13.554005 64 13 64 L 3 64 z M 3 67 C 2.4459952 67 2 67.445995 2 68 C 2 68.554005 2.4459952 69 3 69 L 13 69 C 13.554005 69 14 68.554005 14 68 C 14 67.445995 13.554005 67 13 67 L 3 67 z M 3 70 C 2.4459952 70 2 70.445995 2 71 C 2 71.554005 2.4459952 72 3 72 L 13 72 C 13.554005 72 14 71.554005 14 71 C 14 70.445995 13.554005 70 13 70 L 3 70 z M 3 73 C 2.4459952 73 2 73.445995 2 74 C 2 74.554005 2.4459952 75 3 75 L 13 75 C 13.554005 75 14 74.554005 14 74 C 14 73.445995 13.554005 73 13 73 L 3 73 z M 3 76 C 2.4459952 76 2 76.445995 2 77 C 2 77.554005 2.4459952 78 3 78 L 13 78 C 13.554005 78 14 77.554005 14 77 C 14 76.445995 13.554005 76 13 76 L 3 76 z M 3 79 C 2.4459952 79 2 79.445995 2 80 C 2 80.554005 2.4459952 81 3 81 L 13 81 C 13.554005 81 14 80.554005 14 80 C 14 79.445995 13.554005 79 13 79 L 3 79 z M 3 82 C 2.4459952 82 2 82.445995 2 83 C 2 83.554005 2.4459952 84 3 84 L 13 84 C 13.554005 84 14 83.554005 14 83 C 14 82.445995 13.554005 82 13 82 L 3 82 z M 3 85 C 2.4459952 85 2 85.445995 2 86 C 2 86.554005 2.4459952 87 3 87 L 13 87 C 13.554005 87 14 86.554005 14 86 C 14 85.445995 13.554005 85 13 85 L 3 85 z M 3 88 C 2.4459952 88 2 88.445995 2 89 C 2 89.554005 2.4459952 90 3 90 L 13 90 C 13.554005 90 14 89.554005 14 89 C 14 88.445995 13.554005 88 13 88 L 3 88 z M 3 91 C 2.4459952 91 2 91.445995 2 92 C 2 92.554005 2.4459952 93 3 93 L 13 93 C 13.554005 93 14 92.554005 14 92 C 14 91.445995 13.554005 91 13 91 L 3 91 z M 3 94 C 2.4459952 94 2 94.445995 2 95 C 2 95.554005 2.4459952 96 3 96 L 13 96 C 13.554005 96 14 95.554005 14 95 C 14 94.445995 13.554005 94 13 94 L 3 94 z M 3 97 C 2.4459952 97 2 97.445995 2 98 C 2 98.554005 2.4459952 99 3 99 L 13 99 C 13.554005 99 14 98.554005 14 98 C 14 97.445995 13.554005 97 13 97 L 3 97 z M 3 100 C 2.4459952 100 2 100.446 2 101 C 2 101.554 2.4459952 102 3 102 L 13 102 C 13.554005 102 14 101.554 14 101 C 14 100.446 13.554005 100 13 100 L 3 100 z M 3 103 C 2.4459952 103 2 103.446 2 104 C 2 104.554 2.4459952 105 3 105 L 13 105 C 13.554005 105 14 104.554 14 104 C 14 103.446 13.554005 103 13 103 L 3 103 z M 3 106 C 2.4459952 106 2 106.446 2 107 C 2 107.554 2.4459952 108 3 108 L 13 108 C 13.554005 108 14 107.554 14 107 C 14 106.446 13.554005 106 13 106 L 3 106 z M 3 109 C 2.4459952 109 2 109.446 2 110 C 2 110.554 2.4459952 111 3 111 L 13 111 C 13.554005 111 14 110.554 14 110 C 14 109.446 13.554005 109 13 109 L 3 109 z M 3 112 C 2.4459952 112 2 112.446 2 113 C 2 113.554 2.4459952 114 3 114 L 13 114 C 13.554005 114 14 113.554 14 113 C 14 112.446 13.554005 112 13 112 L 3 112 z M 3 115 C 2.4459952 115 2 115.446 2 116 C 2 116.554 2.4459952 117 3 117 L 13 117 C 13.554005 117 14 116.554 14 116 C 14 115.446 13.554005 115 13 115 L 3 115 z M 3 118 C 2.4459952 118 2 118.446 2 119 C 2 119.554 2.4459952 120 3 120 L 13 120 C 13.554005 120 14 119.554 14 119 C 14 118.446 13.554005 118 13 118 L 3 118 z M 3 121 C 2.4459952 121 2 121.446 2 122 C 2 122.554 2.4459952 123 3 123 L 13 123 C 13.554005 123 14 122.554 14 122 C 14 121.446 13.554005 121 13 121 L 3 121 z M 3 124 C 2.4459952 124 2 124.446 2 125 C 2 125.554 2.4459952 126 3 126 L 13 126 C 13.554005 126 14 125.554 14 125 C 14 124.446 13.554005 124 13 124 L 3 124 z "
+ id="rect852"
+ transform="translate(0,924.3622)" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_bus_vu_full.svg b/editor/icons/source/icon_bus_vu_full.svg
new file mode 100644
index 0000000000..7f2fd22560
--- /dev/null
+++ b/editor/icons/source/icon_bus_vu_full.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="128"
+ viewBox="0 0 16 128"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_vu_empty.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bus_vu_full.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient959"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#ff8484;stop-opacity:1"
+ offset="0"
+ id="stop957" />
+ <stop
+ id="stop955"
+ offset="0.5"
+ style="stop-color:#e1dc7a;stop-opacity:1" />
+ <stop
+ style="stop-color:#84ffb1;stop-opacity:1"
+ offset="1"
+ id="stop953" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient959"
+ id="linearGradient951"
+ x1="8"
+ y1="2"
+ x2="8"
+ y2="126"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568543"
+ inkscape:cx="1.8206711"
+ inkscape:cy="73.901674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-924.3622)">
+ <path
+ style="fill:url(#linearGradient951);fill-opacity:1;stroke:none;stroke-width:1.28571427;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 2 C 2.4459952 2 2 2.4459952 2 3 C 2 3.5540048 2.4459952 4 3 4 L 13 4 C 13.554005 4 14 3.5540048 14 3 C 14 2.4459952 13.554005 2 13 2 L 3 2 z M 3 5 C 2.4459952 5 2 5.4459952 2 6 C 2 6.5540048 2.4459952 7 3 7 L 13 7 C 13.554005 7 14 6.5540048 14 6 C 14 5.4459952 13.554005 5 13 5 L 3 5 z M 3 8 C 2.4459952 8 2 8.4459952 2 9 C 2 9.5540048 2.4459952 10 3 10 L 13 10 C 13.554005 10 14 9.5540048 14 9 C 14 8.4459952 13.554005 8 13 8 L 3 8 z M 3 11 C 2.4459952 11 2 11.445995 2 12 C 2 12.554005 2.4459952 13 3 13 L 13 13 C 13.554005 13 14 12.554005 14 12 C 14 11.445995 13.554005 11 13 11 L 3 11 z M 3 14 C 2.4459952 14 2 14.445995 2 15 C 2 15.554005 2.4459952 16 3 16 L 13 16 C 13.554005 16 14 15.554005 14 15 C 14 14.445995 13.554005 14 13 14 L 3 14 z M 3 17 C 2.4459952 17 2 17.445995 2 18 C 2 18.554005 2.4459952 19 3 19 L 13 19 C 13.554005 19 14 18.554005 14 18 C 14 17.445995 13.554005 17 13 17 L 3 17 z M 3 20 C 2.4459952 20 2 20.445995 2 21 C 2 21.554005 2.4459952 22 3 22 L 13 22 C 13.554005 22 14 21.554005 14 21 C 14 20.445995 13.554005 20 13 20 L 3 20 z M 3 23 C 2.4459952 23 2 23.445995 2 24 C 2 24.554005 2.4459952 25 3 25 L 13 25 C 13.554005 25 14 24.554005 14 24 C 14 23.445995 13.554005 23 13 23 L 3 23 z M 3 26 C 2.4459952 26 2 26.445995 2 27 C 2 27.554005 2.4459952 28 3 28 L 13 28 C 13.554005 28 14 27.554005 14 27 C 14 26.445995 13.554005 26 13 26 L 3 26 z M 3 31 C 2.4459952 31 2 31.445995 2 32 C 2 32.554005 2.4459952 33 3 33 L 13 33 C 13.554005 33 14 32.554005 14 32 C 14 31.445995 13.554005 31 13 31 L 3 31 z M 3 34 C 2.4459952 34 2 34.445995 2 35 C 2 35.554005 2.4459952 36 3 36 L 13 36 C 13.554005 36 14 35.554005 14 35 C 14 34.445995 13.554005 34 13 34 L 3 34 z M 3 37 C 2.4459952 37 2 37.445995 2 38 C 2 38.554005 2.4459952 39 3 39 L 13 39 C 13.554005 39 14 38.554005 14 38 C 14 37.445995 13.554005 37 13 37 L 3 37 z M 3 40 C 2.4459952 40 2 40.445995 2 41 C 2 41.554005 2.4459952 42 3 42 L 13 42 C 13.554005 42 14 41.554005 14 41 C 14 40.445995 13.554005 40 13 40 L 3 40 z M 3 43 C 2.4459952 43 2 43.445995 2 44 C 2 44.554005 2.4459952 45 3 45 L 13 45 C 13.554005 45 14 44.554005 14 44 C 14 43.445995 13.554005 43 13 43 L 3 43 z M 3 46 C 2.4459952 46 2 46.445995 2 47 C 2 47.554005 2.4459952 48 3 48 L 13 48 C 13.554005 48 14 47.554005 14 47 C 14 46.445995 13.554005 46 13 46 L 3 46 z M 3 49 C 2.4459952 49 2 49.445995 2 50 C 2 50.554005 2.4459952 51 3 51 L 13 51 C 13.554005 51 14 50.554005 14 50 C 14 49.445995 13.554005 49 13 49 L 3 49 z M 3 52 C 2.4459952 52 2 52.445995 2 53 C 2 53.554005 2.4459952 54 3 54 L 13 54 C 13.554005 54 14 53.554005 14 53 C 14 52.445995 13.554005 52 13 52 L 3 52 z M 3 55 C 2.4459952 55 2 55.445995 2 56 C 2 56.554005 2.4459952 57 3 57 L 13 57 C 13.554005 57 14 56.554005 14 56 C 14 55.445995 13.554005 55 13 55 L 3 55 z M 3 58 C 2.4459952 58 2 58.445995 2 59 C 2 59.554005 2.4459952 60 3 60 L 13 60 C 13.554005 60 14 59.554005 14 59 C 14 58.445995 13.554005 58 13 58 L 3 58 z M 3 61 C 2.4459952 61 2 61.445995 2 62 C 2 62.554005 2.4459952 63 3 63 L 13 63 C 13.554005 63 14 62.554005 14 62 C 14 61.445995 13.554005 61 13 61 L 3 61 z M 3 64 C 2.4459952 64 2 64.445995 2 65 C 2 65.554005 2.4459952 66 3 66 L 13 66 C 13.554005 66 14 65.554005 14 65 C 14 64.445995 13.554005 64 13 64 L 3 64 z M 3 67 C 2.4459952 67 2 67.445995 2 68 C 2 68.554005 2.4459952 69 3 69 L 13 69 C 13.554005 69 14 68.554005 14 68 C 14 67.445995 13.554005 67 13 67 L 3 67 z M 3 70 C 2.4459952 70 2 70.445995 2 71 C 2 71.554005 2.4459952 72 3 72 L 13 72 C 13.554005 72 14 71.554005 14 71 C 14 70.445995 13.554005 70 13 70 L 3 70 z M 3 73 C 2.4459952 73 2 73.445995 2 74 C 2 74.554005 2.4459952 75 3 75 L 13 75 C 13.554005 75 14 74.554005 14 74 C 14 73.445995 13.554005 73 13 73 L 3 73 z M 3 76 C 2.4459952 76 2 76.445995 2 77 C 2 77.554005 2.4459952 78 3 78 L 13 78 C 13.554005 78 14 77.554005 14 77 C 14 76.445995 13.554005 76 13 76 L 3 76 z M 3 79 C 2.4459952 79 2 79.445995 2 80 C 2 80.554005 2.4459952 81 3 81 L 13 81 C 13.554005 81 14 80.554005 14 80 C 14 79.445995 13.554005 79 13 79 L 3 79 z M 3 82 C 2.4459952 82 2 82.445995 2 83 C 2 83.554005 2.4459952 84 3 84 L 13 84 C 13.554005 84 14 83.554005 14 83 C 14 82.445995 13.554005 82 13 82 L 3 82 z M 3 85 C 2.4459952 85 2 85.445995 2 86 C 2 86.554005 2.4459952 87 3 87 L 13 87 C 13.554005 87 14 86.554005 14 86 C 14 85.445995 13.554005 85 13 85 L 3 85 z M 3 88 C 2.4459952 88 2 88.445995 2 89 C 2 89.554005 2.4459952 90 3 90 L 13 90 C 13.554005 90 14 89.554005 14 89 C 14 88.445995 13.554005 88 13 88 L 3 88 z M 3 91 C 2.4459952 91 2 91.445995 2 92 C 2 92.554005 2.4459952 93 3 93 L 13 93 C 13.554005 93 14 92.554005 14 92 C 14 91.445995 13.554005 91 13 91 L 3 91 z M 3 94 C 2.4459952 94 2 94.445995 2 95 C 2 95.554005 2.4459952 96 3 96 L 13 96 C 13.554005 96 14 95.554005 14 95 C 14 94.445995 13.554005 94 13 94 L 3 94 z M 3 97 C 2.4459952 97 2 97.445995 2 98 C 2 98.554005 2.4459952 99 3 99 L 13 99 C 13.554005 99 14 98.554005 14 98 C 14 97.445995 13.554005 97 13 97 L 3 97 z M 3 100 C 2.4459952 100 2 100.446 2 101 C 2 101.554 2.4459952 102 3 102 L 13 102 C 13.554005 102 14 101.554 14 101 C 14 100.446 13.554005 100 13 100 L 3 100 z M 3 103 C 2.4459952 103 2 103.446 2 104 C 2 104.554 2.4459952 105 3 105 L 13 105 C 13.554005 105 14 104.554 14 104 C 14 103.446 13.554005 103 13 103 L 3 103 z M 3 106 C 2.4459952 106 2 106.446 2 107 C 2 107.554 2.4459952 108 3 108 L 13 108 C 13.554005 108 14 107.554 14 107 C 14 106.446 13.554005 106 13 106 L 3 106 z M 3 109 C 2.4459952 109 2 109.446 2 110 C 2 110.554 2.4459952 111 3 111 L 13 111 C 13.554005 111 14 110.554 14 110 C 14 109.446 13.554005 109 13 109 L 3 109 z M 3 112 C 2.4459952 112 2 112.446 2 113 C 2 113.554 2.4459952 114 3 114 L 13 114 C 13.554005 114 14 113.554 14 113 C 14 112.446 13.554005 112 13 112 L 3 112 z M 3 115 C 2.4459952 115 2 115.446 2 116 C 2 116.554 2.4459952 117 3 117 L 13 117 C 13.554005 117 14 116.554 14 116 C 14 115.446 13.554005 115 13 115 L 3 115 z M 3 118 C 2.4459952 118 2 118.446 2 119 C 2 119.554 2.4459952 120 3 120 L 13 120 C 13.554005 120 14 119.554 14 119 C 14 118.446 13.554005 118 13 118 L 3 118 z M 3 121 C 2.4459952 121 2 121.446 2 122 C 2 122.554 2.4459952 123 3 123 L 13 123 C 13.554005 123 14 122.554 14 122 C 14 121.446 13.554005 121 13 121 L 3 121 z M 3 124 C 2.4459952 124 2 124.446 2 125 C 2 125.554 2.4459952 126 3 126 L 13 126 C 13.554005 126 14 125.554 14 125 C 14 124.446 13.554005 124 13 124 L 3 124 z "
+ transform="translate(0,924.3622)"
+ id="rect852" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_copy_node_path.svg b/editor/icons/source/icon_copy_node_path.svg
index 9f33c5e54d..abc93eb003 100644
--- a/editor/icons/source/icon_copy_node_path.svg
+++ b/editor/icons/source/icon_copy_node_path.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/godotengine/godot/tools/editor/icons/con_script_create.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -39,8 +39,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="21.189633"
- inkscape:cx="12.640765"
- inkscape:cy="9.6848443"
+ inkscape:cx="-1.3283302"
+ inkscape:cy="8.1746718"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -52,8 +52,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -73,7 +73,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -90,7 +90,7 @@
ry="1.0000174"
rx="1" />
<path
- style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.78431374;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 2 1 C 1.4477381 1.0001 1.0000552 1.4477 1 2 L 1 14 C 1.0000552 14.5523 1.4477381 14.9999 2 15 L 14 15 C 14.552262 14.9999 14.999945 14.5523 15 14 L 15 6 L 10 1 L 2 1 z M 3 3 L 9 3 L 9 6 C 9 6.554 9.4459905 7 10 7 L 13 7 L 13 13 L 3 13 L 3 3 z M 6 8 L 4 12 L 6 12 L 8 8 L 6 8 z M 10 8 L 8 12 L 10 12 L 12 8 L 10 8 z "
transform="translate(0,1036.3622)"
id="rect4178" />
diff --git a/editor/icons/source/icon_curve_texture.svg b/editor/icons/source/icon_curve_texture.svg
new file mode 100644
index 0000000000..b1cb456608
--- /dev/null
+++ b/editor/icons/source/icon_curve_texture.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_texture.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.2803314"
+ inkscape:cy="6.7903753"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 2 1 C 1.4477153 1 1 1.4477153 1 2 L 1 11.160156 C 1.3218501 11.050492 1.6599997 10.996335 2 11 C 2.3311746 11 2.665754 10.992098 3 10.986328 L 3 3 L 13 3 L 13 4.1347656 C 13.290071 4.0308316 13.594421 3.9722014 13.902344 3.9609375 C 14.275493 3.9481411 14.647753 4.0051061 15 4.1289062 L 15 2 C 15 1.4477153 14.552285 1 14 1 L 2 1 z M 9 5 L 9 6 L 8 6 L 8 7 L 6 7 L 6 8 L 5 8 L 5 9 L 4 9 L 4 10 L 6 10 L 8 10 L 8.390625 10 C 9.5025431 9.4332285 10.358388 8.54624 11 6.5273438 L 11 6 L 10 6 L 10 5 L 9 5 z M 13.966797 5.9882812 A 1.0001 1.0001 0 0 0 13.039062 6.7265625 C 12.111631 9.9725625 10.403509 11.409059 8.3867188 12.193359 C 6.369928 12.977659 4 13 2 13 A 1.0001 1.0001 0 1 0 2 15 C 4 15 6.6300719 15.023994 9.1132812 14.058594 C 11.596491 13.092894 13.888369 11.029391 14.960938 7.2753906 A 1.0001 1.0001 0 0 0 13.966797 5.9882812 z "
+ transform="translate(0,1036.3622)"
+ id="rect4156" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_debug.svg b/editor/icons/source/icon_debug.svg
new file mode 100644
index 0000000000..1b3e748668
--- /dev/null
+++ b/editor/icons/source/icon_debug.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_debug.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.8380296"
+ inkscape:cy="8.0475262"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <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:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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"
+ d="M 3 3.9863281 A 1.0001 1.0001 0 0 0 2.015625 5.1816406 C 2.2178415 6.2802406 2.7057331 7.1756813 3.390625 7.8007812 C 3.6768866 8.0620519 3.9944862 8.2637767 4.3242188 8.4375 A 4 4 0 0 0 4.1289062 9 L 2 9 A 1.0001 1.0001 0 1 0 2 11 L 4.1328125 11 A 4 4 0 0 0 4.3652344 11.658203 C 4.2801416 11.696657 4.2143084 11.719391 4.1210938 11.765625 C 3.5374123 12.055025 2.8673634 12.538772 2.2089844 13.388672 A 1.0003084 1.0003084 0 1 0 3.7910156 14.613281 C 4.2919543 13.966681 4.6296764 13.745141 5.0097656 13.556641 C 5.205099 13.459768 5.4352695 13.372568 5.6953125 13.263672 A 4 4 0 0 0 8 14 A 4 4 0 0 0 10.332031 13.244141 C 11.496007 13.78538 11.98739 14.238118 12.128906 14.490234 A 1.0001 1.0001 0 1 0 13.871094 13.511719 C 13.471096 12.799229 12.778174 12.20655 11.644531 11.634766 A 4 4 0 0 0 11.869141 11 L 14 11 A 1.0001 1.0001 0 1 0 14 9 L 11.867188 9 A 4 4 0 0 0 11.685547 8.4550781 C 12.182886 8.1889169 12.596375 7.860606 12.908203 7.4804688 C 13.491193 6.7697687 13.74859 5.9803156 13.957031 5.2910156 A 1.0001 1.0001 0 0 0 12.982422 3.9882812 A 1.0001 1.0001 0 0 0 12.042969 4.7109375 C 11.850379 5.3477375 11.656068 5.8559906 11.363281 6.2128906 C 11.080302 6.5578365 10.697905 6.8305531 9.8867188 7 L 6.1503906 7 C 5.5504757 6.8482606 5.0764053 6.630863 4.7382812 6.3222656 C 4.3835001 5.9984656 4.1227361 5.5721125 3.984375 4.8203125 A 1.0001 1.0001 0 0 0 3 3.9863281 z M 8.046875 4 A 2 2 0 0 0 7 4.2675781 A 2 2 0 0 0 6 6 L 10 6 A 2 2 0 0 0 9 4.2675781 A 2 2 0 0 0 8.046875 4 z "
+ id="path4507"
+ transform="translate(0,1036.3622)" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
+ id="path4548"
+ sodipodi:type="arc"
+ sodipodi:cx="8"
+ sodipodi:cy="-1041.3622"
+ sodipodi:rx="4"
+ sodipodi:ry="4"
+ sodipodi:start="0.78539816"
+ sodipodi:end="2.3561945"
+ d="M 10.828427,-1038.5338 A 4,4 0 0 1 8,-1037.3622 a 4,4 0 0 1 -2.8284272,-1.1716"
+ transform="scale(1,-1)"
+ sodipodi:open="true" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_edit_resource.svg b/editor/icons/source/icon_edit_resource.svg
index 1950988ca2..7f6516eb58 100644
--- a/editor/icons/source/icon_edit_resource.svg
+++ b/editor/icons/source/icon_edit_resource.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 8"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="63.999997"
- inkscape:cx="1.8775976"
- inkscape:cy="5.2018914"
+ inkscape:cx="2.7141614"
+ inkscape:cy="4.341677"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -73,9 +73,9 @@
id="layer1"
transform="translate(0,-1044.3622)">
<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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;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:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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 1.9472656,1044.3555 a 1.0001,1.0001 0 0 0 -0.546875,1.8066 l 2.9335938,2.2012 -2.9335938,2.1992 a 1.0001,1.0001 0 1 0 1.1992188,1.5996 l 4,-3 a 1.0001,1.0001 0 0 0 0,-1.5996 l -4,-3 a 1.0001,1.0001 0 0 0 -0.6523438,-0.207 z"
- id="path4137"
- 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:#e0e0e0;fill-opacity:0.78431373;fill-rule:nonzero;stroke:none;stroke-width:2;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 3.9902344 -0.009765625 A 1.0001 1.0001 0 0 0 3.2929688 1.7070312 L 4.5859375 3 L 1 3 L 1 5 L 4.5859375 5 L 3.2929688 6.2929688 A 1.0001 1.0001 0 1 0 4.7070312 7.7070312 L 7.7070312 4.7070312 A 1.0001 1.0001 0 0 0 7.7070312 3.2929688 L 4.7070312 0.29296875 A 1.0001 1.0001 0 0 0 3.9902344 -0.009765625 z "
+ transform="translate(0,1044.3622)"
+ id="path814" />
</g>
</svg>
diff --git a/editor/icons/source/icon_error.svg b/editor/icons/source/icon_error.svg
index a0b04a98cb..013f1c7ba9 100644
--- a/editor/icons/source/icon_error.svg
+++ b/editor/icons/source/icon_error.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 8"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="22.627416"
- inkscape:cx="5.542036"
- inkscape:cy="14.568715"
+ inkscape:zoom="45.254832"
+ inkscape:cx="0.9455546"
+ inkscape:cy="4.9546755"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -76,6 +76,6 @@
height="8"
x="2.220446e-16"
y="1044.3622"
- ry="1.0000174" />
+ ry="4" />
</g>
</svg>
diff --git a/editor/icons/source/icon_forward.svg b/editor/icons/source/icon_forward.svg
index f6cb351cc1..392e2bda8e 100644
--- a/editor/icons/source/icon_forward.svg
+++ b/editor/icons/source/icon_forward.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,7 +29,7 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="4.4850647"
+ inkscape:cx="-1.8586853"
inkscape:cy="8.9717887"
inkscape:document-units="px"
inkscape:current-layer="layer1"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -60,7 +60,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -70,10 +70,9 @@
id="layer1"
transform="translate(0,-1036.3622)">
<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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;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:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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 2.0293363,1037.3633 c 0.3235485,0.01 0.622658,0.1743 0.8027343,0.4433 l 4,6 c 0.2239059,0.3359 0.2239059,0.7735 0,1.1094 l -4,6 c -0.5489722,0.8228 -1.8316762,0.4344 -1.8320312,-0.5547 l 0,-12 c 9.424e-4,-0.5631 0.4664154,-1.0144 1.0292969,-0.998 z"
- id="path4159"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1038.3622 4,6 -4,6"
+ id="path814"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_g_d_native_script.svg b/editor/icons/source/icon_g_d_native_script.svg
new file mode 100644
index 0000000000..33a8e52a5d
--- /dev/null
+++ b/editor/icons/source/icon_g_d_native_script.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_g_d_script.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_g_d_native.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="6.4177687"
+ inkscape:cy="8.8552476"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 6.4355469 3.2578125 A 5.0000172 5.0000172 0 0 0 5.7460938 3.5371094 L 3.7578125 2.34375 L 2.34375 3.7578125 L 3.5390625 5.7519531 A 5.0000172 5.0000172 0 0 0 3.2539062 6.4375 L 1 7 L 4 7 L 4 8 L 4 9 L 6 9 L 6 8.0488281 A 2.0000174 2.0000174 0 0 1 6 8 A 2.0000174 2.0000174 0 0 1 8 6 A 2.0000174 2.0000174 0 0 1 10 8 L 10 9 L 15 9 L 15 7 L 12.742188 6.4355469 A 5.0000172 5.0000172 0 0 0 12.462891 5.7480469 L 13.65625 3.7578125 L 12.242188 2.34375 L 10.248047 3.5390625 A 5.0000172 5.0000172 0 0 0 9.5625 3.2539062 L 9 1 L 7 1 z M 1 8 L 1 12 L 1 16 L 3 16 A 3 3 0 0 0 6 13 A 3 3 0 0 0 3 10 L 3 8 L 1 8 z M 7 8 L 7 10 L 9 10 L 9 8 L 7 8 z M 10 10 L 10 16 L 12 16 L 12 12 A 1.0000174 1.0000174 0 0 1 13 13 L 13 16 L 15 16 L 15 13 A 3 3 0 0 0 12 10 L 10 10 z M 3 12 A 1.0000174 1.0000174 0 0 1 4 13 A 1.0000174 1.0000174 0 0 1 3 14 L 3 12 z M 7 12 L 7 16 L 9 16 L 9 12 L 7 12 z "
+ transform="translate(0,1036.3622)"
+ id="path4176" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_godot.svg b/editor/icons/source/icon_godot.svg
deleted file mode 100644
index 419f23125b..0000000000
--- a/editor/icons/source/icon_godot.svg
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="16"
- height="16"
- viewBox="0 0 16 16"
- id="svg2"
- version="1.1"
- inkscape:version="0.91 r13725"
- inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- sodipodi:docname="icon_godot.svg">
- <defs
- id="defs4" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="32"
- inkscape:cx="9.8470361"
- inkscape:cy="9.8599985"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- units="px"
- inkscape:snap-bbox="true"
- inkscape:bbox-paths="true"
- inkscape:bbox-nodes="true"
- inkscape:snap-bbox-edge-midpoints="true"
- inkscape:snap-bbox-midpoints="true"
- inkscape:snap-object-midpoints="true"
- inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1">
- <inkscape:grid
- type="xygrid"
- id="grid3336" />
- </sodipodi:namedview>
- <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 />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-1036.3622)">
- <g
- transform="matrix(0.01724138,0,0,0.01724138,-0.82758647,1035.0456)"
- id="layer1-5"
- inkscape:label="Layer 1">
- <g
- transform="matrix(1.0688992,0,0,1.1334985,-45.061194,-81.689066)"
- id="g4149">
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:none"
- d="m 116.99388,715.36604 43.13957,-74.51381 75.99672,-171.42666 271.088,-13.63746 282.06373,14.1696 138.45065,255.56931 -25.0756,66.96734 -376.12685,53.39482 -367.70391,-40.32222 z"
- id="path3239"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccc" />
- <g
- id="g3412"
- transform="matrix(12.995388,0,0,-12.995388,898.37246,704.73082)">
- <path
- inkscape:connector-curvature="0"
- d="m 0,0 0,-3.942 c 0,-0.39 -0.25,-0.734 -0.621,-0.852 L -6.835,-6.8 c -0.273,-0.091 -0.57,-0.042 -0.8,0.128 -0.232,0.168 -0.37,0.437 -0.37,0.721 l 0,4.305 -5.818,-1.108 0,-4.381 c 0,-0.447 -0.332,-0.824 -0.775,-0.885 l -8.41,-1.152 c -0.039,-0.003 -0.081,-0.008 -0.121,-0.008 -0.214,0 -0.424,0.078 -0.588,0.22 -0.195,0.172 -0.306,0.416 -0.306,0.676 l 0,4.638 -4.341,-0.018 0,-10e-4 -0.318,10e-4 -0.319,-10e-4 0,10e-4 -4.34,0.018 0,-4.638 c 0,-0.26 -0.112,-0.504 -0.307,-0.676 -0.164,-0.142 -0.374,-0.22 -0.587,-0.22 -0.041,0 -0.082,0.005 -0.123,0.008 l -8.41,1.152 c -0.442,0.061 -0.774,0.438 -0.774,0.885 l 0,4.381 -5.819,1.108 0,-4.305 c 0,-0.284 -0.137,-0.553 -0.368,-0.721 -0.232,-0.17 -0.529,-0.219 -0.802,-0.128 l -6.215,2.006 c -0.369,0.118 -0.619,0.462 -0.619,0.852 l 0,3.942 -3.837,1.29 c -0.19,-0.811 -0.295,-1.642 -0.295,-2.481 0,-10.301 14.512,-18.252 32.448,-18.309 l 0.022,0 0.023,0 c 17.936,0.057 32.448,8.008 32.448,18.309 0,0.766 -0.088,1.521 -0.247,2.266 L 0,0 Z"
- style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path3414" />
- </g>
- <g
- id="g3416"
- transform="matrix(12.995388,0,0,-12.995388,140.10982,467.34929)">
- <path
- inkscape:connector-curvature="0"
- d="m 0,0 0,-16.047 2.163,-0.729 c 0.364,-0.122 0.61,-0.462 0.61,-0.847 l 0,-3.936 4.426,-1.428 0,4.154 c 0,0.27 0.118,0.52 0.323,0.689 0.206,0.172 0.474,0.241 0.739,0.192 l 7.608,-1.452 c 0.422,-0.079 0.728,-0.448 0.728,-0.877 l 0,-4.338 6.62,-0.904 0,4.509 c 0,0.241 0.096,0.467 0.264,0.635 0.167,0.166 0.394,0.259 0.633,0.259 l 0.002,0 5.551,-0.022 5.549,0.022 c 0.245,-10e-4 0.468,-0.093 0.635,-0.259 0.169,-0.168 0.264,-0.394 0.264,-0.635 l 0,-4.509 6.621,0.904 0,4.338 c 0,0.429 0.304,0.798 0.726,0.877 l 7.609,1.452 c 0.262,0.049 0.533,-0.02 0.738,-0.192 0.205,-0.169 0.325,-0.419 0.325,-0.689 l 0,-4.154 4.425,1.428 0,3.936 c 0,0.385 0.245,0.725 0.609,0.847 l 1.475,0.497 0,16.279 0.04,0 c 1.437,1.834 2.767,3.767 4.042,5.828 -1.694,2.883 -3.768,5.459 -5.986,7.846 -2.057,-1.035 -4.055,-2.208 -5.942,-3.456 -0.944,0.938 -2.008,1.706 -3.052,2.509 -1.027,0.824 -2.183,1.428 -3.281,2.132 0.327,2.433 0.489,4.828 0.554,7.327 -2.831,1.424 -5.85,2.369 -8.903,3.047 -1.219,-2.048 -2.334,-4.267 -3.304,-6.436 -1.152,0.192 -2.309,0.264 -3.467,0.277 l 0,0.002 c -0.008,0 -0.015,-0.002 -0.022,-0.002 -0.008,0 -0.015,0.002 -0.022,0.002 l 0,-0.002 c -1.16,-0.013 -2.316,-0.085 -3.468,-0.277 -0.97,2.169 -2.084,4.388 -3.305,6.436 C 19.475,24.555 16.456,23.61 13.626,22.186 13.69,19.687 13.852,17.292 14.18,14.859 13.081,14.155 11.925,13.551 10.898,12.727 9.855,11.924 8.79,11.156 7.846,10.218 5.958,11.466 3.961,12.639 1.904,13.674 -0.314,11.287 -2.388,8.711 -4.082,5.828 -2.807,3.767 -1.477,1.834 -0.04,0 L 0,0 Z"
- style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path3418" />
- </g>
- <g
- id="g3420"
- transform="matrix(12.995388,0,0,-12.995388,411.4457,567.42812)">
- <path
- inkscape:connector-curvature="0"
- d="m 0,0 c 0,-3.611 -2.926,-6.537 -6.537,-6.537 -3.608,0 -6.535,2.926 -6.535,6.537 0,3.609 2.927,6.533 6.535,6.533 C -2.926,6.533 0,3.609 0,0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path3422" />
- </g>
- <g
- id="g3424"
- transform="matrix(12.995388,0,0,-12.995388,391.00655,572.46636)">
- <path
- inkscape:connector-curvature="0"
- d="m 0,0 c 0,-2.396 -1.941,-4.337 -4.339,-4.337 -2.396,0 -4.339,1.941 -4.339,4.337 0,2.396 1.943,4.339 4.339,4.339 C -1.941,4.339 0,2.396 0,0"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path3426" />
- </g>
- <g
- id="g3428"
- transform="matrix(12.995388,0,0,-12.995388,526.30933,660.10985)">
- <path
- inkscape:connector-curvature="0"
- d="m 0,0 c -1.162,0 -2.104,0.856 -2.104,1.912 l 0,6.018 c 0,1.054 0.942,1.912 2.104,1.912 1.162,0 2.106,-0.858 2.106,-1.912 l 0,-6.018 C 2.106,0.856 1.162,0 0,0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path3430" />
- </g>
- <g
- id="g3432"
- transform="matrix(12.995388,0,0,-12.995388,641.18731,567.42812)">
- <path
- inkscape:connector-curvature="0"
- d="m 0,0 c 0,-3.611 2.926,-6.537 6.537,-6.537 3.609,0 6.535,2.926 6.535,6.537 0,3.609 -2.926,6.533 -6.535,6.533 C 2.926,6.533 0,3.609 0,0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path3434" />
- </g>
- <g
- id="g3436"
- transform="matrix(12.995388,0,0,-12.995388,661.63165,572.46636)">
- <path
- inkscape:connector-curvature="0"
- d="m 0,0 c 0,-2.396 1.941,-4.337 4.336,-4.337 2.398,0 4.339,1.941 4.339,4.337 0,2.396 -1.941,4.339 -4.339,4.339 C 1.941,4.339 0,2.396 0,0"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path3438" />
- </g>
- </g>
- </g>
- <path
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44162436"
- d="m 4,1041.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,1 a 2.0000174,2.0000174 0 0 1 2,2 2.0000174,2.0000174 0 0 1 -2,2 2.0000174,2.0000174 0 0 1 -2,-2 2.0000174,2.0000174 0 0 1 2,-2 z"
- id="path4151"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- id="path4156"
- d="m 12,1041.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,1 a 2.0000174,2.0000174 0 0 1 2,2 2.0000174,2.0000174 0 0 1 -2,2 2.0000174,2.0000174 0 0 1 -2,-2 2.0000174,2.0000174 0 0 1 2,-2 z"
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44162436" />
- <rect
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44162436"
- id="rect4160"
- width="4"
- height="1"
- x="6"
- y="1043.3622"
- ry="0" />
- </g>
-</svg>
diff --git a/editor/icons/source/icon_godot_docs.svg b/editor/icons/source/icon_godot_docs.svg
new file mode 100644
index 0000000000..77aa92b31f
--- /dev/null
+++ b/editor/icons/source/icon_godot_docs.svg
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 15 15"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_godot_docs.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="-14.305844"
+ inkscape:cy="5.1981046"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ originx="0"
+ originy="0"
+ spacingx="1"
+ spacingy="1" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1037.3622)">
+ <g
+ id="g78"
+ transform="matrix(0.06307836,0,0,-0.06307664,13.671143,1047.293)"
+ style="stroke-width:19.8168869">
+ <path
+ d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:19.8168869"
+ id="path80"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g82-3"
+ transform="matrix(0.06307836,0,0,-0.06307664,1.3279404,1043.5689)"
+ style="stroke-width:19.8168869">
+ <path
+ d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 h 0.134 c 4.795,6.12 9.232,12.569 13.487,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.368,12.569 -4.928,6.12 -0.134,0 Z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:19.8168869"
+ id="path84-6"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g86-7"
+ transform="matrix(0.06307836,0,0,-0.06307664,11.62285,1047.9836)"
+ style="stroke-width:19.8168869">
+ <path
+ d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:19.8168869"
+ id="path88-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g90-3"
+ transform="matrix(0.06307836,0,0,-0.06307664,5.6393685,1045.0806)"
+ style="stroke-width:19.8168869">
+ <path
+ d="m 0,0 c 0,-12.052 -9.765,-21.815 -21.813,-21.815 -12.042,0 -21.81,9.763 -21.81,21.815 0,12.044 9.768,21.802 21.81,21.802 C -9.765,21.802 0,12.044 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:19.8168869"
+ id="path92-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g94-6"
+ transform="matrix(0.06307836,0,0,-0.06307664,5.3082938,1045.1623)"
+ style="stroke-width:19.8168869">
+ <path
+ d="m 0,0 c 0,-7.994 -6.479,-14.473 -14.479,-14.473 -7.996,0 -14.479,6.479 -14.479,14.473 0,7.994 6.483,14.479 14.479,14.479 C -6.479,14.479 0,7.994 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:19.8168869"
+ id="path96-2"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g98-9"
+ transform="matrix(0.06307836,0,0,-0.06307664,7.4998997,1046.5818)"
+ style="stroke-width:19.8168869">
+ <path
+ d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:19.8168869"
+ id="path100-1"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g102-2"
+ transform="matrix(0.06307836,0,0,-0.06307664,9.3606615,1045.0806)"
+ style="stroke-width:19.8168869">
+ <path
+ d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:19.8168869"
+ id="path104-7"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g106-0"
+ transform="matrix(0.06307836,0,0,-0.06307664,9.6918191,1045.1623)"
+ style="stroke-width:19.8168869">
+ <path
+ d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:19.8168869"
+ id="path108-9"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4392"
+ d="m 4.3227149,1042.5597 a 2.5297459,2.5296773 0 0 0 -2.5297461,2.5297 2.5297459,2.5296773 0 0 0 2.5297461,2.5297 2.5297459,2.5296773 0 0 0 2.5297463,-2.5297 2.5297459,2.5296773 0 0 0 -2.5297463,-2.5297 z m 0,0.5084 a 2.0213759,2.021321 0 0 1 2.0213758,2.0213 2.0213759,2.021321 0 0 1 -2.0213758,2.0213 2.0213759,2.021321 0 0 1 -2.0213757,-2.0213 2.0213759,2.021321 0 0 1 2.0213757,-2.0213 z"
+ style="opacity:1;fill:#414042;fill-opacity:1;stroke:none;stroke-width:1.94780529;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4200);enable-background:new" />
+ <path
+ style="opacity:1;fill:#414042;fill-opacity:1;stroke:none;stroke-width:1.94780529;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4200);enable-background:new"
+ d="m 10.679126,1042.5597 a 2.5297459,2.5296773 0 0 0 -2.5297472,2.5297 2.5297459,2.5296773 0 0 0 2.5297472,2.5297 2.5297459,2.5296773 0 0 0 2.529744,-2.5297 2.5297459,2.5296773 0 0 0 -2.529744,-2.5297 z m 0,0.5084 a 2.0213759,2.021321 0 0 1 2.021373,2.0213 2.0213759,2.021321 0 0 1 -2.021373,2.0213 2.0213759,2.021321 0 0 1 -2.0213767,-2.0213 2.0213759,2.021321 0 0 1 2.0213767,-2.0213 z"
+ id="path4403"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#414042;fill-opacity:1;stroke:none;stroke-width:5.625;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44162436"
+ id="rect4160"
+ width="2.3136585"
+ height="0.53352129"
+ x="6.3440895"
+ y="1043.9767" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_texture.svg b/editor/icons/source/icon_gradient_texture.svg
index 39e88e592b..efc48bb778 100644
--- a/editor/icons/source/icon_texture.svg
+++ b/editor/icons/source/icon_gradient_texture.svg
@@ -7,6 +7,7 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
@@ -14,13 +15,35 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- sodipodi:docname="icon_image_texture.svg">
+ sodipodi:docname="icon_gradient_texture.svg">
<defs
- id="defs4" />
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient848">
+ <stop
+ style="stop-color:#e0e0e0;stop-opacity:1;"
+ offset="0"
+ id="stop844" />
+ <stop
+ style="stop-color:#e0e0e0;stop-opacity:0;"
+ offset="1"
+ id="stop846" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient848"
+ id="linearGradient850"
+ x1="10"
+ y1="1"
+ x2="10"
+ y2="15"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
@@ -29,7 +52,7 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="9.9365814"
+ inkscape:cx="3.5928314"
inkscape:cy="6.4466253"
inkscape:document-units="px"
inkscape:current-layer="layer1"
@@ -42,8 +65,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -73,7 +96,7 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ style="opacity:1;fill:url(#linearGradient850);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
d="M 2 1 A 1 1 0 0 0 1 2 L 1 14 A 1 1 0 0 0 2 15 L 14 15 A 1 1 0 0 0 15 14 L 15 2 A 1 1 0 0 0 14 1 L 2 1 z M 3 3 L 13 3 L 13 11 L 3 11 L 3 3 z "
transform="translate(0,1036.3622)"
id="rect4156" />
diff --git a/editor/icons/source/icon_graph_scalars_to_vec.svg b/editor/icons/source/icon_graph_scalars_to_vec.svg
index 0f2994a606..d951a41832 100644
--- a/editor/icons/source/icon_graph_scalars_to_vec.svg
+++ b/editor/icons/source/icon_graph_scalars_to_vec.svg
@@ -7,6 +7,7 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="14"
@@ -14,13 +15,35 @@
viewBox="0 0 14 14"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:docname="icon_graph_scalars_to_vec.svg">
<defs
- id="defs4" />
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient834">
+ <stop
+ id="stop832"
+ offset="0"
+ style="stop-color:#cf68ea;stop-opacity:1" />
+ <stop
+ id="stop830"
+ offset="1"
+ style="stop-color:#b8ea68;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient834"
+ id="linearGradient836"
+ x1="1"
+ y1="7"
+ x2="13.014242"
+ y2="7"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
@@ -29,8 +52,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="4.4222736"
- inkscape:cy="8.4198974"
+ inkscape:cx="6.5785236"
+ inkscape:cy="9.2011474"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +65,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -63,7 +86,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -73,22 +96,9 @@
id="layer1"
transform="translate(0,-1038.3622)">
<path
- style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 7,1045.3622 5,0"
- id="path4154"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 2,1040.3622 5,0 0,10 -5,0"
- id="path4155"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 7,1045.3622 -5,0"
- id="path4157"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
+ 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:url(#linearGradient836);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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"
+ d="M 1.9902344 0.99023438 A 1.0001 1.0001 0 0 0 1.2929688 2.7070312 L 4.5859375 6 L 2 6 A 1.0001 1.0001 0 1 0 2 8 L 4.5859375 8 L 1.2929688 11.292969 A 1.0001 1.0001 0 1 0 2.7070312 12.707031 L 7.4140625 8 L 12 8 A 1.0001 1.0001 0 1 0 12 6 L 7.4140625 6 L 2.7070312 1.2929688 A 1.0001 1.0001 0 0 0 1.9902344 0.99023438 z "
+ transform="translate(0,1038.3622)"
+ id="path4154" />
</g>
</svg>
diff --git a/editor/icons/source/icon_graph_vec_to_scalars.svg b/editor/icons/source/icon_graph_vec_to_scalars.svg
index fb58db9d78..8bddf89b2d 100644
--- a/editor/icons/source/icon_graph_vec_to_scalars.svg
+++ b/editor/icons/source/icon_graph_vec_to_scalars.svg
@@ -7,6 +7,7 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="14"
@@ -14,13 +15,36 @@
viewBox="0 0 14 14"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:docname="icon_graph_vec_to_scalars.svg">
<defs
- id="defs4" />
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient834">
+ <stop
+ id="stop832"
+ offset="0"
+ style="stop-color:#cf68ea;stop-opacity:1" />
+ <stop
+ id="stop830"
+ offset="1"
+ style="stop-color:#b8ea68;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient834"
+ id="linearGradient836"
+ x1="1"
+ y1="7"
+ x2="13.014242"
+ y2="7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,13.999754,1038.3622)" />
+ </defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
@@ -29,8 +53,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="4.4222736"
- inkscape:cy="8.4198974"
+ inkscape:cx="6.5785236"
+ inkscape:cy="9.2011474"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +66,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -73,22 +97,9 @@
id="layer1"
transform="translate(0,-1038.3622)">
<path
- style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 7,1045.3622 -5,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:url(#linearGradient836);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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"
+ d="m 12.00952,1039.3524 a 1.0001,1.0001 0 0 1 0.697265,1.7168 l -3.2929685,3.293 h 2.5859375 a 1.0001,1.0001 0 1 1 0,2 H 9.4138165 l 3.2929685,3.293 a 1.0001,1.0001 0 1 1 -1.414062,1.414 l -4.7070315,-4.707 H 1.999754 a 1.0001,1.0001 0 1 1 0,-2 h 4.5859375 l 4.7070315,-4.707 a 1.0001,1.0001 0 0 1 0.716797,-0.3028 z"
id="path4154"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 12,1040.3622 -5,0 0,10 5,0"
- id="path4155"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 7,1045.3622 5,0"
- id="path4157"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_graph_vecs_to_xform.svg b/editor/icons/source/icon_graph_vecs_to_xform.svg
index f8ba3eb4b8..1321766117 100644
--- a/editor/icons/source/icon_graph_vecs_to_xform.svg
+++ b/editor/icons/source/icon_graph_vecs_to_xform.svg
@@ -7,6 +7,7 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="14"
@@ -14,13 +15,36 @@
viewBox="0 0 14 14"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:docname="icon_graph_vecs_to_xform.svg">
<defs
- id="defs4" />
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient834">
+ <stop
+ style="stop-color:#b8ea68;stop-opacity:1;"
+ offset="0"
+ id="stop830" />
+ <stop
+ style="stop-color:#ea686c;stop-opacity:1"
+ offset="1"
+ id="stop832" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient834"
+ id="linearGradient836"
+ x1="1"
+ y1="7"
+ x2="13.014242"
+ y2="7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(7.4681641e-4,1038.3622)" />
+ </defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
@@ -29,8 +53,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="2.8910236"
- inkscape:cy="10.294897"
+ inkscape:cx="3.3597736"
+ inkscape:cy="10.326147"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +66,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -73,14 +97,9 @@
id="layer1"
transform="translate(0,-1038.3622)">
<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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;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:#ea686c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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"
- d="m 7,1044.3613 a 1.0001,1.0001 0 1 0 0,2 l 5,0 a 1.0001,1.0001 0 1 0 0,-2 l -5,0 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:url(#linearGradient836);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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"
+ d="m 1.9909808,1039.3524 a 1.0001,1.0001 0 0 0 -0.697265,1.7168 l 3.2929683,3.293 H 2.0007468 a 1.0001,1.0001 0 1 0 0,2 h 2.5859373 l -3.2929683,3.293 a 1.0001,1.0001 0 1 0 1.414062,1.414 l 4.7070313,-4.707 h 4.5859379 a 1.0001,1.0001 0 1 0 0,-2 H 7.4148091 l -4.7070313,-4.707 a 1.0001,1.0001 0 0 0 -0.716797,-0.3028 z"
id="path4154"
inkscape:connector-curvature="0" />
- <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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;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:#b8ea68;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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 2 1 A 1.0001 1.0001 0 1 0 2 3 L 6 3 L 6 6 L 2 6 A 1.0001 1.0001 0 1 0 2 8 L 6 8 L 6 11 L 2 11 A 1.0001 1.0001 0 1 0 2 13 L 7 13 A 1.0001 1.0001 0 0 0 8 12 L 8 7.1679688 A 1.0001 1.0001 0 0 0 8 6.8398438 L 8 2 A 1.0001 1.0001 0 0 0 7 1 L 2 1 z "
- transform="translate(0,1038.3622)"
- id="path4155" />
</g>
</svg>
diff --git a/editor/icons/source/icon_graph_xform_to_vecs.svg b/editor/icons/source/icon_graph_xform_to_vecs.svg
index cc113e72fd..45754c8a44 100644
--- a/editor/icons/source/icon_graph_xform_to_vecs.svg
+++ b/editor/icons/source/icon_graph_xform_to_vecs.svg
@@ -7,6 +7,7 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="14"
@@ -14,13 +15,36 @@
viewBox="0 0 14 14"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:docname="icon_graph_xform_to_vecs.svg">
<defs
- id="defs4" />
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient834">
+ <stop
+ style="stop-color:#b8ea68;stop-opacity:1;"
+ offset="0"
+ id="stop830" />
+ <stop
+ style="stop-color:#ea686c;stop-opacity:1"
+ offset="1"
+ id="stop832" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient834"
+ id="linearGradient836"
+ x1="1"
+ y1="7"
+ x2="13.014242"
+ y2="7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,13.999754,1038.3622)" />
+ </defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
@@ -29,8 +53,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="-2.5152264"
- inkscape:cy="10.232397"
+ inkscape:cx="3.3597736"
+ inkscape:cy="10.326147"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +66,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -73,14 +97,9 @@
id="layer1"
transform="translate(0,-1038.3622)">
<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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;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:#ea686c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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"
- d="m 7,1044.3613 a 1.0001,1.0001 0 1 1 0,2 l -5,0 a 1.0001,1.0001 0 1 1 0,-2 l 5,0 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:url(#linearGradient836);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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"
+ d="m 12.00952,1039.3524 a 1.0001,1.0001 0 0 1 0.697265,1.7168 l -3.2929683,3.293 h 2.5859373 a 1.0001,1.0001 0 1 1 0,2 H 9.4138167 l 3.2929683,3.293 a 1.0001,1.0001 0 1 1 -1.414062,1.414 l -4.7070313,-4.707 H 1.999754 a 1.0001,1.0001 0 1 1 0,-2 h 4.5859377 l 4.7070313,-4.707 a 1.0001,1.0001 0 0 1 0.716797,-0.3028 z"
id="path4154"
inkscape:connector-curvature="0" />
- <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;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;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;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:#b8ea68;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;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 12,1039.3622 a 1.0001,1.0001 0 1 1 0,2 l -4,0 0,3 4,0 a 1.0001,1.0001 0 1 1 0,2 l -4,0 0,3 4,0 a 1.0001,1.0001 0 1 1 0,2 l -5,0 a 1.0001,1.0001 0 0 1 -1,-1 l 0,-4.832 a 1.0001,1.0001 0 0 1 0,-0.3282 l 0,-4.8398 a 1.0001,1.0001 0 0 1 1,-1 l 5,0 z"
- id="path4155"
- inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_key_hover.svg b/editor/icons/source/icon_key_hover.svg
index c3f34a781b..10caa81968 100644
--- a/editor/icons/source/icon_key_hover.svg
+++ b/editor/icons/source/icon_key_hover.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 8"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="43.417341"
- inkscape:cx="0.40602789"
- inkscape:cy="4.9542089"
+ inkscape:zoom="61.401392"
+ inkscape:cx="1.5457638"
+ inkscape:cy="2.7778126"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -68,10 +68,14 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1044.3622)">
- <path
- style="opacity:1;fill:#8fdeef;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"
- d="M 4 0 A 4 3.9999914 0 0 0 0 4 A 4 3.9999914 0 0 0 4 8 A 4 3.9999914 0 0 0 8 4 A 4 3.9999914 0 0 0 4 0 z "
- transform="translate(0,1044.3622)"
- id="path4137" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.76284212;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect814"
+ width="6.1027369"
+ height="6.1027369"
+ x="-741.52698"
+ y="741.08105"
+ ry="0.76285541"
+ transform="rotate(-45)" />
</g>
</svg>
diff --git a/editor/icons/source/icon_key_selected.svg b/editor/icons/source/icon_key_selected.svg
index c3f01dbec8..62180cca5b 100644
--- a/editor/icons/source/icon_key_selected.svg
+++ b/editor/icons/source/icon_key_selected.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 8"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="43.417341"
- inkscape:cx="3.4232555"
- inkscape:cy="4.5626603"
+ inkscape:cx="-0.88377936"
+ inkscape:cy="3.8025953"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -68,10 +68,14 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1044.3622)">
- <path
- style="opacity:1;fill:#e7e7e7;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"
- d="M 4 0 A 4 3.9999914 0 0 0 0 4 A 4 3.9999914 0 0 0 4 8 A 4 3.9999914 0 0 0 8 4 A 4 3.9999914 0 0 0 4 0 z "
- transform="translate(0,1044.3622)"
- id="path4137" />
+ <rect
+ style="fill:#84c2ff;fill-opacity:1;stroke:none;stroke-width:0.76284212;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect814"
+ width="6.1027369"
+ height="6.1027369"
+ x="-741.52698"
+ y="741.08112"
+ ry="0.76285541"
+ transform="rotate(-45)" />
</g>
</svg>
diff --git a/editor/icons/source/icon_key_value.svg b/editor/icons/source/icon_key_value.svg
index 5e6333e54b..21780cc695 100644
--- a/editor/icons/source/icon_key_value.svg
+++ b/editor/icons/source/icon_key_value.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 8"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="43.417341"
- inkscape:cx="3.2850619"
- inkscape:cy="5.046338"
+ inkscape:cx="3.6075137"
+ inkscape:cy="3.8486599"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -68,10 +68,14 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1044.3622)">
- <path
- style="opacity:1;fill:#3da9bf;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"
- d="M 4 0 A 4 3.9999914 0 0 0 0 4 A 4 3.9999914 0 0 0 4 8 A 4 3.9999914 0 0 0 8 4 A 4 3.9999914 0 0 0 4 0 z "
- transform="translate(0,1044.3622)"
- id="path4137" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:0.76284212;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect814"
+ width="6.1027369"
+ height="6.1027369"
+ x="-741.52698"
+ y="741.08105"
+ ry="0.76285541"
+ transform="rotate(-45)" />
</g>
</svg>
diff --git a/editor/icons/source/icon_key_xform.svg b/editor/icons/source/icon_key_xform.svg
index 06a282f705..37de107284 100644
--- a/editor/icons/source/icon_key_xform.svg
+++ b/editor/icons/source/icon_key_xform.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 8"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="43.417341"
- inkscape:cx="3.2850619"
- inkscape:cy="5.046338"
+ inkscape:cx="4.6209337"
+ inkscape:cy="3.8256276"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -68,10 +68,14 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1044.3622)">
- <path
- style="opacity:1;fill:#bf523c;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"
- d="M 4 0 A 4 3.9999914 0 0 0 0 4 A 4 3.9999914 0 0 0 4 8 A 4 3.9999914 0 0 0 8 4 A 4 3.9999914 0 0 0 4 0 z "
- transform="translate(0,1044.3622)"
- id="path4137" />
+ <rect
+ style="fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:0.76284212;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect814"
+ width="6.1027369"
+ height="6.1027369"
+ x="-741.52698"
+ y="741.08112"
+ ry="0.76285541"
+ transform="rotate(-45)" />
</g>
</svg>
diff --git a/editor/icons/source/icon_mini_basis.svg b/editor/icons/source/icon_mini_basis.svg
new file mode 100644
index 0000000000..a9d3be82ea
--- /dev/null
+++ b/editor/icons/source/icon_mini_basis.svg
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_basis.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="13.930099"
+ inkscape:cy="4.8789967"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4364"
+ width="2"
+ height="5.9999666"
+ x="-2"
+ y="1044.3621"
+ transform="scale(-1,1)" />
+ <rect
+ y="1044.3621"
+ x="-2"
+ height="2.0000174"
+ width="1"
+ id="rect4368"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <path
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1044.3622 a 3,3 0 0 1 3,3 H 3 a 1.0000174,1.0000174 0 0 0 -1,-1 z"
+ id="path4370"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4378"
+ d="m 2,1050.3622 a 3,3 0 0 0 3,-3 H 3 a 1.0000174,1.0000174 0 0 1 -1,1 z"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(-1,1)"
+ y="1042.3621"
+ x="-2"
+ height="3.9999492"
+ width="2"
+ id="rect4384"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:1.41422868;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect857"
+ width="2"
+ height="2.0000174"
+ x="-9"
+ y="1044.3622"
+ transform="scale(-1,1)" />
+ <path
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path859"
+ sodipodi:type="arc"
+ sodipodi:cx="7"
+ sodipodi:cy="1046.3622"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ sodipodi:start="1.5707963"
+ sodipodi:end="4.712389"
+ sodipodi:open="true"
+ d="m 7.0000001,1048.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1" />
+ <path
+ d="m -6.9999999,1050.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1"
+ sodipodi:open="true"
+ sodipodi:end="4.712389"
+ sodipodi:start="1.5707963"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="1048.3622"
+ sodipodi:cx="-7"
+ sodipodi:type="arc"
+ id="path861"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ transform="scale(-1,1)"
+ y="1048.3622"
+ x="-7"
+ height="2.0000174"
+ width="2"
+ id="rect863"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:1.41422868;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#eef39f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4412"
+ width="2"
+ height="3.9999492"
+ x="10"
+ y="1046.3622" />
+ <rect
+ y="1042.3622"
+ x="10"
+ height="1.9999928"
+ width="2"
+ id="rect4432"
+ style="fill:#eef39f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(-1,1)"
+ y="1044.3622"
+ x="-16"
+ height="2.0000174"
+ width="2"
+ id="rect902"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:1.41422868;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="m 14,1048.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1"
+ sodipodi:open="true"
+ sodipodi:end="4.712389"
+ sodipodi:start="1.5707963"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="1046.3622"
+ sodipodi:cx="14"
+ sodipodi:type="arc"
+ id="path904"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="scale(-1,1)"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path906"
+ sodipodi:type="arc"
+ sodipodi:cx="-14"
+ sodipodi:cy="1048.3622"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ sodipodi:start="1.5707963"
+ sodipodi:end="4.712389"
+ sodipodi:open="true"
+ d="m -14,1050.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1" />
+ <rect
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:1.41422868;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect908"
+ width="2"
+ height="2.0000174"
+ x="-14"
+ y="1048.3622"
+ transform="scale(-1,1)" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_mini_matrix3.svg b/editor/icons/source/icon_mini_matrix3.svg
index 592230d13c..27adb40b17 100644
--- a/editor/icons/source/icon_mini_matrix3.svg
+++ b/editor/icons/source/icon_mini_matrix3.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 12"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="32.000001"
- inkscape:cx="4.071303"
- inkscape:cy="4.582959"
+ inkscape:zoom="22.627418"
+ inkscape:cx="13.930099"
+ inkscape:cy="4.8789967"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -70,71 +70,135 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1040.3622)">
+ <rect
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4364"
+ width="2"
+ height="5.9999666"
+ x="-2"
+ y="1044.3621"
+ transform="scale(-1,1)" />
+ <rect
+ y="1044.3621"
+ x="-2"
+ height="2.0000174"
+ width="1"
+ id="rect4368"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
<path
style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 12.00042,1044.3622 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0.226563,-2.5 l -2.824219,0 z"
- id="path4753"
+ d="m 2,1044.3622 a 3,3 0 0 1 3,3 H 3 a 1.0000174,1.0000174 0 0 0 -1,-1 z"
+ id="path4370"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
- id="path4757"
- d="m 12.00042,1046.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z"
+ id="path4378"
+ d="m 2,1050.3622 a 3,3 0 0 0 3,-3 H 3 a 1.0000174,1.0000174 0 0 1 -1,1 z"
style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 3,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
- id="path4771"
- inkscape:connector-curvature="0" />
<rect
- y="-1050.3622"
- x="4"
- height="3"
+ transform="scale(-1,1)"
+ y="1042.3621"
+ x="-2"
+ height="3.9999492"
width="2"
- id="rect4773"
- style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- transform="scale(1,-1)" />
+ id="rect4384"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
- style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4775"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:1.41422868;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect857"
+ width="2"
+ height="2.0000174"
+ x="-9"
+ y="1044.3622"
+ transform="scale(-1,1)" />
+ <path
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path859"
+ sodipodi:type="arc"
+ sodipodi:cx="7"
+ sodipodi:cy="1046.3622"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ sodipodi:start="1.5707963"
+ sodipodi:end="4.712389"
+ sodipodi:open="true"
+ d="m 7.0000001,1048.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1" />
+ <path
+ d="m -6.9999999,1050.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1"
+ sodipodi:open="true"
+ sodipodi:end="4.712389"
+ sodipodi:start="1.5707963"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="1048.3622"
+ sodipodi:cx="-7"
+ sodipodi:type="arc"
+ id="path861"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ transform="scale(-1,1)"
+ y="1048.3622"
+ x="-7"
+ height="2.0000174"
width="2"
- height="5.9999828"
- x="1"
- y="-1050.3622"
- transform="scale(1,-1)" />
+ id="rect863"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:1.41422868;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
- transform="scale(1,-1)"
- y="-1050.3622"
- x="4"
- height="5.9999828"
+ style="fill:#eef39f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4412"
width="2"
- id="rect4777"
- style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path4779"
- d="m 6,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
- style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ height="3.9999492"
+ x="10"
+ y="1046.3622" />
<rect
- style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4781"
+ y="1042.3622"
+ x="10"
+ height="1.9999928"
width="2"
- height="3.0000002"
- x="7"
- y="-1050.3622"
- transform="scale(1,-1)" />
+ id="rect4432"
+ style="fill:#eef39f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
- style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4783"
- width="4.0004196"
- height="2"
- x="11"
- y="1043.3622" />
+ transform="scale(-1,1)"
+ y="1044.3622"
+ x="-16"
+ height="2.0000174"
+ width="2"
+ id="rect902"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:1.41422868;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="m 14,1048.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1"
+ sodipodi:open="true"
+ sodipodi:end="4.712389"
+ sodipodi:start="1.5707963"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="1046.3622"
+ sodipodi:cx="14"
+ sodipodi:type="arc"
+ id="path904"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="scale(-1,1)"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path906"
+ sodipodi:type="arc"
+ sodipodi:cx="-14"
+ sodipodi:cy="1048.3622"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ sodipodi:start="1.5707963"
+ sodipodi:end="4.712389"
+ sodipodi:open="true"
+ d="m -14,1050.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1" />
<rect
- y="1050.3622"
- x="11"
- height="2"
- width="1"
- id="rect4173"
- style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:1.41422868;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect908"
+ width="2"
+ height="2.0000174"
+ x="-14"
+ y="1048.3622"
+ transform="scale(-1,1)" />
</g>
</svg>
diff --git a/editor/icons/source/icon_mini_matrix32.svg b/editor/icons/source/icon_mini_transform2D.svg
index 5159ea0b87..e8e38f1256 100644
--- a/editor/icons/source/icon_mini_matrix32.svg
+++ b/editor/icons/source/icon_mini_transform2D.svg
@@ -14,11 +14,11 @@
viewBox="0 0 16 12"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
- sodipodi:docname="icon_mini_matrix32.svg">
+ sodipodi:docname="icon_mini_transform2D.svg">
<defs
id="defs4" />
<sodipodi:namedview
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="32.000001"
- inkscape:cx="1.5471383"
- inkscape:cy="5.978497"
+ inkscape:zoom="22.627418"
+ inkscape:cx="6.4108823"
+ inkscape:cy="5.363647"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -61,7 +61,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -70,76 +70,48 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1040.3622)">
- <path
- style="fill:#ddf4aa;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 8 2 L 8 4 L 9 4 L 10 4 A 1 1 0 0 1 9 5 L 9 7 A 1 1 0 0 1 10 8 A 1 1 0 0 1 9 9 L 8 9 L 8 11 L 9 11 A 3 3 0 0 0 11.597656 9.5 A 3 3 0 0 0 11.597656 6.5 A 3 3 0 0 0 11.232422 5.9980469 A 3 3 0 0 0 11.597656 5.5 A 3 3 0 0 0 11.994141 4 L 12 4 L 12 2 L 9 2 L 8 2 z "
- transform="translate(0,1040.3622)"
- id="path4753" />
<rect
y="1048.3622"
- x="11"
+ x="5"
height="2"
width="5"
id="rect4763"
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ style="fill:#ddf4aa;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:open="true"
- d="m 13,1050.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1"
+ d="m 7.0000001,1050.3622 a 2,2 0 0 1 -1.7320509,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.7320508,-1"
sodipodi:end="4.712389"
sodipodi:start="1.5707963"
sodipodi:ry="2"
sodipodi:rx="2"
sodipodi:cy="1048.3622"
- sodipodi:cx="13"
+ sodipodi:cx="7"
sodipodi:type="arc"
id="path4765"
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ style="fill:#ddf4aa;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4767"
- d="m 13,1042.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z"
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 2,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
- id="path4771"
- inkscape:connector-curvature="0" />
+ d="m 7,1042.3622 v 2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 v 2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 A 3,3 0 0 0 7,1042.3622 Z"
+ style="fill:#ddf4aa;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
- y="-1050.3622"
- x="3"
- height="3"
- width="2"
- id="rect4773"
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- transform="scale(1,-1)" />
- <rect
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4775"
- width="2"
- height="5.9999828"
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:1.85164022;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect823"
+ width="6"
+ height="2"
x="0"
- y="-1050.3622"
- transform="scale(1,-1)" />
+ y="1042.3622" />
<rect
- transform="scale(1,-1)"
- y="-1050.3622"
- x="3"
- height="5.9999828"
+ y="1043.3622"
+ x="2"
+ height="7.0000172"
width="2"
- id="rect4777"
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ id="rect825"
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2.00000238;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
- inkscape:connector-curvature="0"
- id="path4779"
- d="m 5,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4781"
- width="2"
- height="3.0000002"
- x="6"
- y="-1050.3622"
- transform="scale(1,-1)" />
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2.1380899;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 10 2 L 10 10 L 12 10 A 4 4 0 0 0 15.464844 8 A 4 4 0 0 0 15.464844 4 A 4 4 0 0 0 12 2 L 10 2 z M 12 4 A 2.0000174 2.0000174 0 0 1 13.732422 5 A 2.0000174 2.0000174 0 0 1 13.732422 7 A 2.0000174 2.0000174 0 0 1 12 8 L 12 4 z "
+ transform="translate(0,1040.3622)"
+ id="rect827" />
</g>
</svg>
diff --git a/editor/icons/source/icon_mirror_x.svg b/editor/icons/source/icon_mirror_x.svg
index f24a630770..ca28fec4f8 100644
--- a/editor/icons/source/icon_mirror_x.svg
+++ b/editor/icons/source/icon_mirror_x.svg
@@ -14,11 +14,11 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_move.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- sodipodi:docname="icon_h_size.svg">
+ sodipodi:docname="icon_mirror_x.svg">
<defs
id="defs4" />
<sodipodi:namedview
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="7.1680801"
- inkscape:cy="7.9718121"
+ inkscape:cx="2.7305801"
+ inkscape:cy="8.1905621"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -69,11 +69,21 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 4,7 0,-2 -3,3 3,3 0,-2 8,0 0,2 3,-3 -3,-3 0,2 z"
- transform="translate(0,1036.3622)"
- id="rect4140"
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 4,1042.3622 -2,2 2,2"
+ id="path816"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccc" />
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 2,1044.3622 H 13"
+ id="path818"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path820"
+ d="m 12,1042.3622 2,2 -2,2"
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ sodipodi:nodetypes="ccc" />
</g>
</svg>
diff --git a/editor/icons/source/icon_mirror_y.svg b/editor/icons/source/icon_mirror_y.svg
index bb913b84af..922caf6efc 100644
--- a/editor/icons/source/icon_mirror_y.svg
+++ b/editor/icons/source/icon_mirror_y.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_move.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="1.7618301"
- inkscape:cy="7.9093121"
+ inkscape:cx="2.7305801"
+ inkscape:cy="8.1905621"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -69,10 +69,9 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 7,1048.3622 -2,0 3,3 3,-3 -2,0 0,-8 2,0 -3,-3 -3,3 2,0 z"
- id="rect4140"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccc" />
+ 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:#e0e0e0;fill-opacity:0.99607843;fill-rule:nonzero;stroke:none;stroke-width:2;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 11.012128,1048.3548 a 1.0001,1.0001 0 0 0 -1.7167967,-0.6973 l -0.2929688,0.293 v -7.1719 l 0.2929688,0.293 a 1.0001,1.0001 0 0 0 1.7148437,-0.7266 1.0001,1.0001 0 0 0 -0.300781,-0.6875 l -2.0000003,-2 a 1.0001,1.0001 0 0 0 -1.4140624,0 l -1.9999998,2 a 1.0001,1.0001 0 1 0 1.4140622,1.4141 l 0.2929688,-0.293 v 7.1719 l -0.2929688,-0.293 a 1.0001,1.0001 0 1 0 -1.4140622,1.4141 l 1.9999998,2 a 1.0001,1.0001 0 0 0 1.4140624,0 l 2.0000003,-2 a 1.0001,1.0001 0 0 0 0.302734,-0.7168 z"
+ id="path816"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_move_down.svg b/editor/icons/source/icon_move_down.svg
index e83a69ad50..911def98b8 100644
--- a/editor/icons/source/icon_move_down.svg
+++ b/editor/icons/source/icon_move_down.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="22.627417"
- inkscape:cx="4.2997855"
- inkscape:cy="8.3620593"
+ inkscape:zoom="32"
+ inkscape:cx="-0.21847599"
+ inkscape:cy="8.1503711"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -62,7 +62,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -72,9 +72,14 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
- d="m 8,1051.3622 -6,-7 4,0 0,-7 4,0 0,7 4,0 -6,7 z"
- id="path4135"
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 4,1045.348 4,5 4,-5"
+ id="path814"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 8,1038.348 v 11"
+ id="path816"
inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_move_up.svg b/editor/icons/source/icon_move_up.svg
index 8f671a0d72..4e24791efb 100644
--- a/editor/icons/source/icon_move_up.svg
+++ b/editor/icons/source/icon_move_up.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="22.627417"
- inkscape:cx="4.2997855"
- inkscape:cy="8.3620593"
+ inkscape:zoom="32"
+ inkscape:cx="5.8620142"
+ inkscape:cy="9.0057643"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -62,7 +62,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -72,9 +72,14 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
- d="M 8 1 L 2 8 L 6 8 L 6 15 L 10 15 L 10 8 L 14 8 L 8 1 z "
- transform="translate(0,1036.3622)"
- id="path4135" />
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.99607843;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 4,1043.3622 4,-5 4,5"
+ id="path814"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.99607843;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 8,1050.3622 v -11"
+ id="path816"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_new.svg b/editor/icons/source/icon_new.svg
index a37ba1be3f..d59dd3513a 100644
--- a/editor/icons/source/icon_new.svg
+++ b/editor/icons/source/icon_new.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_new.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="16"
- inkscape:cx="0.22745062"
- inkscape:cy="11.330333"
+ inkscape:zoom="22.627417"
+ inkscape:cx="20.922744"
+ inkscape:cy="2.4022924"
inkscape:document-units="px"
inkscape:current-layer="layer1-8"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -76,11 +76,17 @@
inkscape:label="Layer 1"
transform="translate(0,-1.6949463e-5)">
<path
- sodipodi:nodetypes="ccccccccccc"
- inkscape:connector-curvature="0"
+ style="opacity:1;fill:#e0e0e0;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"
+ d="m 2,1 v 14 h 8 V 14 H 8 v -4 h 2 V 8 h 4 V 6 H 9 V 1 Z m 8,0 v 4 h 4 z"
+ transform="translate(0,1036.3622)"
id="rect4158"
- d="m 2,1037.3622 0,14 12,0 0,-9 -5,0 0,-5 z m 8,0 0,4 4,0 z"
- style="opacity:1;fill:#e0e0e0;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" />
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <path
+ style="fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 11,1045.3622 v 2 H 9 v 2 h 2 v 2 h 2 v -2 h 2 v -2 h -2 v -2 z"
+ id="rect4485"
+ inkscape:connector-curvature="0" />
</g>
</g>
</svg>
diff --git a/editor/icons/source/icon_particles_shader.svg b/editor/icons/source/icon_particles_material.svg
index b4c2ef7ccd..b4c2ef7ccd 100644
--- a/editor/icons/source/icon_particles_shader.svg
+++ b/editor/icons/source/icon_particles_material.svg
diff --git a/editor/icons/source/icon_search.svg b/editor/icons/source/icon_search.svg
new file mode 100644
index 0000000000..bcd2ecca46
--- /dev/null
+++ b/editor/icons/source/icon_search.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_zoom.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_search.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.8093316"
+ inkscape:cy="11.467722"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 6,1037.3622 a 5,5 0 0 0 -5,5 5,5 0 0 0 5,5 5,5 0 0 0 5,-5 5,5 0 0 0 -5,-5 z m 0,2 a 3,3 0 0 1 3,3 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 z"
+ id="path4135"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4140"
+ width="2"
+ height="7.0000172"
+ x="-733.81873"
+ y="745.30402"
+ inkscape:transform-center-y="5.3032921"
+ transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
+ inkscape:transform-center-x="-5.3033134" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_spatial_shader.svg b/editor/icons/source/icon_spatial_material.svg
index 329354b716..329354b716 100644
--- a/editor/icons/source/icon_spatial_shader.svg
+++ b/editor/icons/source/icon_spatial_material.svg
diff --git a/editor/icons/source/icon_stream_texture.svg b/editor/icons/source/icon_stream_texture.svg
new file mode 100644
index 0000000000..6ec701adff
--- /dev/null
+++ b/editor/icons/source/icon_stream_texture.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_stream_texture.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="11.200084"
+ inkscape:cy="6.7708068"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 2 1 A 1 1 0 0 0 1 2 L 1 14 A 1 1 0 0 0 2 15 L 8 15 L 8 13 L 10 13 L 10 11 L 8 11 L 3 11 L 3 3 L 8 3 L 8 1 L 2 1 z M 8 3 L 8 5 L 10 5 L 10 3 L 8 3 z M 10 3 L 12 3 L 12 1 L 10 1 L 10 3 z M 12 3 L 12 5 L 14 5 L 14 3 L 12 3 z M 12 5 L 10 5 L 10 7 L 12 7 L 12 5 z M 12 7 L 12 9 L 14 9 L 14 7 L 12 7 z M 12 9 L 10 9 L 10 11 L 12 11 L 12 9 z M 12 11 L 12 13 L 14 13 L 14 11 L 12 11 z M 12 13 L 10 13 L 10 15 L 12 15 L 12 13 z M 10 9 L 10 7 L 8 7 L 8 6 L 7 6 L 7 7 L 6 7 L 6 8 L 5 8 L 5 9 L 4 9 L 4 10 L 6 10 L 8 10 L 8 9 L 10 9 z "
+ transform="translate(0,1036.3622)"
+ id="rect4156" />
+ </g>
+</svg>
diff --git a/editor/icons/source/icon_tabs.svg b/editor/icons/source/icon_tabs.svg
index 79ed1e5910..c09a042033 100644
--- a/editor/icons/source/icon_tabs.svg
+++ b/editor/icons/source/icon_tabs.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="22.627417"
- inkscape:cx="11.687421"
- inkscape:cy="9.3335226"
+ inkscape:zoom="32"
+ inkscape:cx="6.9623805"
+ inkscape:cy="8.3399158"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -71,73 +71,10 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
- <rect
- style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect4156"
- width="1"
- height="9.0000172"
- x="1"
- y="1040.3622" />
- <rect
- y="-8"
- x="1039.3622"
- height="6"
- width="1"
- id="rect4159"
- style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- transform="matrix(0,1,-1,0,0,0)" />
- <rect
- y="1040.3622"
- x="7"
- height="3.0000174"
- width="1"
- id="rect4161"
- style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
- style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4163"
- sodipodi:type="arc"
- sodipodi:cx="2"
- sodipodi:cy="1040.3622"
- sodipodi:rx="1"
- sodipodi:ry="1"
- sodipodi:start="1.5707963"
- sodipodi:end="0"
- d="m 2,1041.3622 a 1,1 0 0 1 -0.9238795,-0.6173 1,1 0 0 1 0.2167727,-1.0898 1,1 0 0 1 1.0897902,-0.2168 A 1,1 0 0 1 3,1040.3622 l -1,0 z" />
- <rect
- style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect4167"
- width="1"
- height="9.0000172"
- x="14"
- y="1040.3622" />
- <rect
- transform="matrix(0,1,-1,0,0,0)"
- style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect4169"
- width="1"
- height="6"
- x="1039.3622"
- y="-14" />
- <path
- transform="scale(-1,1)"
- style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4171"
- sodipodi:type="arc"
- sodipodi:cx="-14"
- sodipodi:cy="1040.3622"
- sodipodi:rx="1"
- sodipodi:ry="1"
- sodipodi:start="1.5707963"
- sodipodi:end="0"
- d="m -14,1041.3622 a 1,1 0 0 1 -0.92388,-0.6173 1,1 0 0 1 0.216773,-1.0898 1,1 0 0 1 1.08979,-0.2168 1,1 0 0 1 0.617317,0.9239 l -1,0 z" />
- <rect
- transform="matrix(0,1,-1,0,0,0)"
- style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect4173"
- width="1"
- height="13"
- x="1042.3622"
- y="-15" />
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 5 4 C 3.8919904 4 3.1821539 4.9071 3 6 L 2 12 L 1 12 L 1 14 L 5 14 L 11 14 L 15 14 L 15 12 L 13 12 L 12 6 C 11.817843 4.9071 11.108009 4 10 4 L 5 4 z "
+ transform="translate(0,1036.3622)"
+ id="rect821" />
</g>
</svg>
diff --git a/editor/icons/source/icon_tween.svg b/editor/icons/source/icon_tween.svg
index 5cb5cad227..7857c5f187 100644
--- a/editor/icons/source/icon_tween.svg
+++ b/editor/icons/source/icon_tween.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tween.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32"
- inkscape:cx="6.0670176"
- inkscape:cy="10.041334"
+ inkscape:cx="4.9605895"
+ inkscape:cy="8.5201258"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -71,28 +71,25 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 9,1050.3622 -7,0 0,-7"
+ 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:#fbe87a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;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"
+ d="m 1,1043.3613 v 8 h 8 v -2 H 3 v -6 z"
id="path4138"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc" />
+ inkscape:connector-curvature="0" />
<path
- sodipodi:nodetypes="ccc"
- 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:#fbe87a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;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"
+ d="m 7,1037.3613 v 2 h 6 v 6 h 2 v -8 z"
id="path4140"
- d="m 7,1038.3622 7,0 0,7"
- style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path4142"
d="m 6.0000002,1041.3622 4.9999998,0 0,5 z"
- style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ style="opacity:1;fill:#fbe87a;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<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:#fbe87a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;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"
+ d="m 8.2929688,1042.6543 -7,7 1.4140624,1.4141 7,-7 z"
id="path4144"
- d="m 2,1050.3622 7,-7"
- style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- sodipodi:nodetypes="cc" />
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/editor/icons/source/icon_warning.svg b/editor/icons/source/icon_warning.svg
index 4d39141a58..d886fbdaed 100644
--- a/editor/icons/source/icon_warning.svg
+++ b/editor/icons/source/icon_warning.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 8"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -29,7 +29,7 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="45.254832"
- inkscape:cx="2.2320862"
+ inkscape:cx="-2.2536226"
inkscape:cy="6.41947"
inkscape:document-units="px"
inkscape:current-layer="layer1"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -76,6 +76,6 @@
height="8"
x="0"
y="1044.3622"
- ry="1" />
+ ry="4" />
</g>
</svg>
diff --git a/editor/icons/source/icon_zoom.svg b/editor/icons/source/icon_zoom.svg
index 811036b370..de94ed9614 100644
--- a/editor/icons/source/icon_zoom.svg
+++ b/editor/icons/source/icon_zoom.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_zoom.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="22.627417"
- inkscape:cx="3.7772222"
- inkscape:cy="11.922647"
+ inkscape:zoom="32"
+ inkscape:cx="9.872627"
+ inkscape:cy="8.8162049"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -59,7 +59,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -70,18 +70,8 @@
transform="translate(0,-1036.3622)">
<path
style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 6,1037.3622 a 5,5 0 0 0 -5,5 5,5 0 0 0 5,5 5,5 0 0 0 5,-5 5,5 0 0 0 -5,-5 z m 0,2 a 3,3 0 0 1 3,3 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 z"
- id="path4135"
- inkscape:connector-curvature="0" />
- <rect
- style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect4140"
- width="2"
- height="7.0000172"
- x="-733.81873"
- y="745.30402"
- inkscape:transform-center-y="5.3032921"
- transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
- inkscape:transform-center-x="-5.3033134" />
+ d="M 6 1 A 5 5 0 0 0 1 6 A 5 5 0 0 0 6 11 A 5 5 0 0 0 8.7519531 10.166016 L 13.070312 14.484375 L 14.484375 13.070312 L 10.166016 8.7519531 A 5 5 0 0 0 10.576172 8 L 10 8 L 10 6 L 9 6 A 3 3 0 0 1 6 9 A 3 3 0 0 1 3 6 A 3 3 0 0 1 6 3 A 3 3 0 0 1 8 3.7675781 L 8 2 L 8.9902344 2 A 5 5 0 0 0 6 1 z M 11 1 L 11 3 L 9 3 L 9 5 L 11 5 L 11 7 L 13 7 L 13 5 L 15 5 L 15 3 L 13 3 L 13 1 L 11 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4135" />
</g>
</svg>
diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp
index dcbc509865..2cefcdbc4a 100644
--- a/editor/import/editor_import_collada.cpp
+++ b/editor/import/editor_import_collada.cpp
@@ -1863,7 +1863,7 @@ void ColladaImport::create_animations(bool p_make_tracks_in_all_bones, bool p_im
node = node_name_map[at.target];
} else {
- print_line("Coudlnt find node: " + at.target);
+ print_line("Couldnt find node: " + at.target);
continue;
}
} else {
diff --git a/editor/import/editor_import_plugin.cpp b/editor/import/editor_import_plugin.cpp
new file mode 100644
index 0000000000..6dee5da538
--- /dev/null
+++ b/editor/import/editor_import_plugin.cpp
@@ -0,0 +1,152 @@
+/*************************************************************************/
+/* editor_import_plugin.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+#include "editor_import_plugin.h"
+#include "core/script_language.h"
+
+EditorImportPlugin::EditorImportPlugin() {
+}
+
+String EditorImportPlugin::get_importer_name() const {
+ ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_importer_name")), "");
+ return get_script_instance()->call("get_importer_name");
+}
+
+String EditorImportPlugin::get_visible_name() const {
+ ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_visible_name")), "");
+ return get_script_instance()->call("get_visible_name");
+}
+
+void EditorImportPlugin::get_recognized_extensions(List<String> *p_extensions) const {
+ ERR_FAIL_COND(!(get_script_instance() && get_script_instance()->has_method("get_recognized_extensions")));
+ Array extensions = get_script_instance()->call("get_recognized_extensions");
+ for (int i = 0; i < extensions.size(); i++) {
+ p_extensions->push_back(extensions[i]);
+ }
+}
+
+String EditorImportPlugin::get_preset_name(int p_idx) const {
+ ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_preset_name")), "");
+ return get_script_instance()->call("get_preset_name", p_idx);
+}
+
+int EditorImportPlugin::get_preset_count() {
+ ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_preset_count")), 0);
+ return get_script_instance()->call("get_preset_count");
+}
+
+String EditorImportPlugin::get_save_extension() const {
+ ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_save_extension")), "");
+ return get_script_instance()->call("get_save_extension");
+}
+
+String EditorImportPlugin::get_resource_type() const {
+ ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_resource_type")), "");
+ return get_script_instance()->call("get_resource_type");
+}
+
+void EditorImportPlugin::get_import_options(List<ResourceImporter::ImportOption> *r_options, int p_preset) const {
+
+ ERR_FAIL_COND(!(get_script_instance() && get_script_instance()->has_method("get_import_options")));
+ Array needed;
+ needed.push_back("name");
+ needed.push_back("default_value");
+ Array options = get_script_instance()->call("get_import_options", p_preset);
+ for (int i = 0; i < options.size(); i++) {
+ Dictionary d = options[i];
+ ERR_FAIL_COND(!d.has_all(needed));
+ String name = d["name"];
+ Variant default_value = d["default_value"];
+
+ PropertyHint hint = PROPERTY_HINT_NONE;
+ if (d.has("property_hint")) {
+ hint = (PropertyHint)d["property_hint"].operator int64_t();
+ }
+
+ String hint_string;
+ if (d.has("hint_string")) {
+ hint_string = d["hint_string"];
+ }
+
+ uint32_t usage = PROPERTY_USAGE_DEFAULT;
+ if (d.has("usage")) {
+ usage = d["usage"];
+ }
+
+ ImportOption option(PropertyInfo(default_value.get_type(), name, hint, hint_string, usage), default_value);
+ r_options->push_back(option);
+ }
+}
+
+bool EditorImportPlugin::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+ ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("get_option_visibility")), true);
+ Dictionary d;
+ Map<StringName, Variant>::Element *E = p_options.front();
+ while (E) {
+ d[E->key()] = E->get();
+ E = E->next();
+ }
+ return get_script_instance()->call("get_option_visibility", p_option, d);
+}
+
+Error EditorImportPlugin::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files) {
+
+ ERR_FAIL_COND_V(!(get_script_instance() && get_script_instance()->has_method("import")), ERR_UNAVAILABLE);
+ Dictionary options;
+ Array platform_variants, gen_files;
+
+ Map<StringName, Variant>::Element *E = p_options.front();
+ while (E) {
+ options[E->key()] = E->get();
+ E = E->next();
+ }
+ Error err = (Error)get_script_instance()->call("import", p_source_file, p_save_path, options, platform_variants, gen_files).operator int64_t();
+
+ for (int i = 0; i < platform_variants.size(); i++) {
+ r_platform_variants->push_back(platform_variants[i]);
+ }
+ for (int i = 0; i < gen_files.size(); i++) {
+ r_gen_files->push_back(gen_files[i]);
+ }
+ return err;
+}
+
+void EditorImportPlugin::_bind_methods() {
+
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_importer_name"));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_visible_name"));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::INT, "get_preset_count"));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_preset_name", PropertyInfo(Variant::INT, "preset")));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::ARRAY, "get_recognized_extensions"));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::ARRAY, "get_import_options", PropertyInfo(Variant::INT, "preset")));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_save_extension"));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::STRING, "get_resource_type"));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::BOOL, "get_option_visibility", PropertyInfo(Variant::STRING, "option"), PropertyInfo(Variant::DICTIONARY, "options")));
+ ClassDB::add_virtual_method(get_class_static(), MethodInfo(Variant::INT, "import", PropertyInfo(Variant::STRING, "source_file"), PropertyInfo(Variant::STRING, "save_path"), PropertyInfo(Variant::DICTIONARY, "options"), PropertyInfo(Variant::ARRAY, "r_platform_variants"), PropertyInfo(Variant::ARRAY, "r_gen_files")));
+}
diff --git a/platform/bb10/payment_service.h b/editor/import/editor_import_plugin.h
index 64dc982ab2..3c16b79713 100644
--- a/platform/bb10/payment_service.h
+++ b/editor/import/editor_import_plugin.h
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* payment_service.h */
+/* editor_import_plugin.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -27,38 +27,28 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#ifdef PAYMENT_SERVICE_ENABLED
+#ifndef EDITOR_IMPORT_PLUGIN_H
+#define EDITOR_IMPORT_PLUGIN_H
-#ifndef PAYMENT_SERVICE_H
-#define PAYMENT_SERVICE_H
-
-#include <bps/bps.h>
-#include <bps/event.h>
-#include <bps/paymentservice.h>
-
-#include "core/object.h"
-
-class PaymentService : public Object {
-
- GDCLASS(PaymentService, Object);
+#include "io/resource_import.h"
+class EditorImportPlugin : public ResourceImporter {
+ GDCLASS(EditorImportPlugin, Reference)
+protected:
static void _bind_methods();
- List<Variant> pending_events;
-
public:
- Error request_product_info(Variant p_params);
- Error purchase(Variant p_params);
-
- int get_pending_event_count();
- Variant pop_pending_event();
-
- bool handle_event(bps_event_t *p_event);
-
- PaymentService();
- ~PaymentService();
+ EditorImportPlugin();
+ virtual String get_importer_name() const;
+ virtual String get_visible_name() const;
+ virtual void get_recognized_extensions(List<String> *p_extensions) const;
+ virtual String get_preset_name(int p_idx) const;
+ virtual int get_preset_count();
+ virtual String get_save_extension() const;
+ virtual String get_resource_type() const;
+ virtual void get_import_options(List<ImportOption> *r_options, int p_preset) const;
+ virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const;
+ virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files);
};
-#endif
-
-#endif
+#endif //EDITOR_IMPORT_PLUGIN_H
diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp
index 19fd1208b9..21c2ae6eb3 100644
--- a/editor/import/resource_importer_obj.cpp
+++ b/editor/import/resource_importer_obj.cpp
@@ -168,18 +168,23 @@ Error ResourceImporterOBJ::import(const String &p_source_file, const String &p_s
if (face[idx].size() == 3) {
int norm = face[idx][2].to_int() - 1;
+ if (norm < 0)
+ norm += normals.size() + 1;
ERR_FAIL_INDEX_V(norm, normals.size(), ERR_PARSE_ERROR);
surf_tool->add_normal(normals[norm]);
}
if (face[idx].size() >= 2 && face[idx][1] != String()) {
-
int uv = face[idx][1].to_int() - 1;
+ if (uv < 0)
+ uv += uvs.size() + 1;
ERR_FAIL_INDEX_V(uv, uvs.size(), ERR_PARSE_ERROR);
surf_tool->add_uv(uvs[uv]);
}
int vtx = face[idx][0].to_int() - 1;
+ if (vtx < 0)
+ vtx += vertices.size() + 1;
ERR_FAIL_INDEX_V(vtx, vertices.size(), ERR_PARSE_ERROR);
Vector3 vertex = vertices[vtx];
diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp
index f0dcc4a298..c115f0014a 100644
--- a/editor/import/resource_importer_texture.cpp
+++ b/editor/import/resource_importer_texture.cpp
@@ -181,7 +181,7 @@ void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options,
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "detect_3d"), p_preset == PRESET_DETECT));
}
-void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb) {
+void ResourceImporterTexture::_save_stex(const Ref<Image> &p_image, const String &p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb) {
FileAccess *f = FileAccess::open(p_to_path, FileAccess::WRITE);
f->store_8('G');
@@ -189,8 +189,8 @@ void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_t
f->store_8('S');
f->store_8('T'); //godot streamable texture
- f->store_32(p_image.get_width());
- f->store_32(p_image.get_height());
+ f->store_32(p_image->get_width());
+ f->store_32(p_image->get_height());
f->store_32(p_texture_flags);
uint32_t format = 0;
@@ -207,14 +207,14 @@ void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_t
switch (p_compress_mode) {
case COMPRESS_LOSSLESS: {
- Image image = p_image;
+ Ref<Image> image = p_image->duplicate();
if (p_mipmaps) {
- image.generate_mipmaps();
+ image->generate_mipmaps();
} else {
- image.clear_mipmaps();
+ image->clear_mipmaps();
}
- int mmc = image.get_mipmap_count() + 1;
+ int mmc = image->get_mipmap_count() + 1;
format |= StreamTexture::FORMAT_BIT_LOSSLESS;
f->store_32(format);
@@ -223,7 +223,7 @@ void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_t
for (int i = 0; i < mmc; i++) {
if (i > 0) {
- image.shrink_x2();
+ image->shrink_x2();
}
PoolVector<uint8_t> data = Image::lossless_packer(image);
@@ -236,14 +236,14 @@ void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_t
} break;
case COMPRESS_LOSSY: {
- Image image = p_image;
+ Ref<Image> image = p_image->duplicate();
if (p_mipmaps) {
- image.generate_mipmaps();
+ image->generate_mipmaps();
} else {
- image.clear_mipmaps();
+ image->clear_mipmaps();
}
- int mmc = image.get_mipmap_count() + 1;
+ int mmc = image->get_mipmap_count() + 1;
format |= StreamTexture::FORMAT_BIT_LOSSY;
f->store_32(format);
@@ -252,7 +252,7 @@ void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_t
for (int i = 0; i < mmc; i++) {
if (i > 0) {
- image.shrink_x2();
+ image->shrink_x2();
}
PoolVector<uint8_t> data = Image::lossy_packer(image, p_lossy_quality);
@@ -265,15 +265,15 @@ void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_t
} break;
case COMPRESS_VIDEO_RAM: {
- Image image = p_image;
- image.generate_mipmaps();
- image.compress(p_vram_compression);
+ Ref<Image> image = p_image->duplicate();
+ image->generate_mipmaps();
+ image->compress(p_vram_compression);
- format |= image.get_format();
+ format |= image->get_format();
f->store_32(format);
- PoolVector<uint8_t> data = image.get_data();
+ PoolVector<uint8_t> data = image->get_data();
int dl = data.size();
PoolVector<uint8_t>::Read r = data.read();
f->store_buffer(r.ptr(), dl);
@@ -281,17 +281,17 @@ void ResourceImporterTexture::_save_stex(const Image &p_image, const String &p_t
} break;
case COMPRESS_UNCOMPRESSED: {
- Image image = p_image;
+ Ref<Image> image = p_image->duplicate();
if (p_mipmaps) {
- image.generate_mipmaps();
+ image->generate_mipmaps();
} else {
- image.clear_mipmaps();
+ image->clear_mipmaps();
}
- format |= image.get_format();
+ format |= image->get_format();
f->store_32(format);
- PoolVector<uint8_t> data = image.get_data();
+ PoolVector<uint8_t> data = image->get_data();
int dl = data.size();
PoolVector<uint8_t>::Read r = data.read();
@@ -317,8 +317,9 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String
bool stream = p_options["stream"];
int size_limit = p_options["size_limit"];
- Image image;
- Error err = ImageLoader::load_image(p_source_file, &image);
+ Ref<Image> image;
+ image.instance();
+ Error err = ImageLoader::load_image(p_source_file, image);
if (err != OK)
return err;
@@ -336,28 +337,28 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String
if (srgb == 1)
tex_flags |= Texture::FLAG_CONVERT_TO_LINEAR;
- if (size_limit > 0 && (image.get_width() > size_limit || image.get_height() > size_limit)) {
+ if (size_limit > 0 && (image->get_width() > size_limit || image->get_height() > size_limit)) {
//limit size
- if (image.get_width() >= image.get_height()) {
+ if (image->get_width() >= image->get_height()) {
int new_width = size_limit;
- int new_height = image.get_height() * new_width / image.get_width();
+ int new_height = image->get_height() * new_width / image->get_width();
- image.resize(new_width, new_height, Image::INTERPOLATE_CUBIC);
+ image->resize(new_width, new_height, Image::INTERPOLATE_CUBIC);
} else {
int new_height = size_limit;
- int new_width = image.get_width() * new_height / image.get_height();
+ int new_width = image->get_width() * new_height / image->get_height();
- image.resize(new_width, new_height, Image::INTERPOLATE_CUBIC);
+ image->resize(new_width, new_height, Image::INTERPOLATE_CUBIC);
}
}
if (fix_alpha_border) {
- image.fix_alpha_edges();
+ image->fix_alpha_edges();
}
if (premult_alpha) {
- image.premultiply_alpha();
+ image->premultiply_alpha();
}
bool detect_3d = p_options["detect_3d"];
diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h
index 196eb48469..e782fc2978 100644
--- a/editor/import/resource_importer_texture.h
+++ b/editor/import/resource_importer_texture.h
@@ -30,7 +30,9 @@
#ifndef RESOURCEIMPORTTEXTURE_H
#define RESOURCEIMPORTTEXTURE_H
+#include "image.h"
#include "io/resource_import.h"
+
class StreamTexture;
class ResourceImporterTexture : public ResourceImporter {
@@ -78,7 +80,7 @@ public:
virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const;
virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const;
- void _save_stex(const Image &p_image, const String &p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb);
+ void _save_stex(const Ref<Image> &p_image, const String &p_to_path, int p_compress_mode, float p_lossy_quality, Image::CompressMode p_vram_compression, bool p_mipmaps, int p_texture_flags, bool p_streamable, bool p_detect_3d, bool p_detect_srgb);
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = NULL);
diff --git a/editor/io_plugins/editor_scene_import_plugin.cpp b/editor/io_plugins/editor_scene_import_plugin.cpp
index cd6acbb374..fed02b0e72 100644
--- a/editor/io_plugins/editor_scene_import_plugin.cpp
+++ b/editor/io_plugins/editor_scene_import_plugin.cpp
@@ -1093,7 +1093,7 @@ const EditorSceneImportDialog::FlagInfo EditorSceneImportDialog::scene_flag_name
{EditorSceneImportPlugin::SCENE_FLAG_MERGE_KEEP_EXTRA_ANIM_TRACKS,("Merge"),"Keep user-added Animation tracks.",true},
{EditorSceneImportPlugin::SCENE_FLAG_DETECT_ALPHA,("Materials"),"Set Alpha in Materials (-alpha)",true},
{EditorSceneImportPlugin::SCENE_FLAG_DETECT_VCOLOR,("Materials"),"Set Vert. Color in Materials (-vcol)",true},
- {EditorSceneImportPlugin::SCENE_FLAG_CREATE_COLLISIONS,("Create"),"Create Collisions and/or Rigid Bodies (-col,-colonly,-rigid)",true},
+ {EditorSceneImportPlugin::SCENE_FLAG_CREATE_COLLISIONS,("Create"),"Create Collisions and/or Rigid Bodies (-col,-colonly,-rigid,-rigidonly)",true},
{EditorSceneImportPlugin::SCENE_FLAG_CREATE_PORTALS,("Create"),"Create Portals (-portal)",true},
{EditorSceneImportPlugin::SCENE_FLAG_CREATE_ROOMS,("Create"),"Create Rooms (-room)",true},
{EditorSceneImportPlugin::SCENE_FLAG_SIMPLIFY_ROOMS,("Create"),"Simplify Rooms",false},
@@ -1714,12 +1714,14 @@ Node* EditorSceneImportPlugin::_fix_node(Node *p_node,Node *p_root,Map<Ref<Mesh>
//mi->set_baked_light_texture_id(layer);
}
- if (p_flags&SCENE_FLAG_CREATE_COLLISIONS && _teststr(name,"colonly")) {
+ bool is_rigid = _teststr(name, "rigidonly");
+
+ if (p_flags & SCENE_FLAG_CREATE_COLLISIONS && (_teststr(name, "colonly") || is_rigid)) {
if (isroot)
return p_node;
-
- if (p_node->cast_to<MeshInstance>()) {
+
+ if (p_node->cast_to<MeshInstance>() && !is_rigid) {
MeshInstance *mi = p_node->cast_to<MeshInstance>();
Node * col = mi->create_trimesh_collision_node();
ERR_FAIL_COND_V(!col,NULL);
@@ -1739,10 +1741,16 @@ Node* EditorSceneImportPlugin::_fix_node(Node *p_node,Node *p_root,Map<Ref<Mesh>
} else if (p_node->has_meta("empty_draw_type")) {
String empty_draw_type = String(p_node->get_meta("empty_draw_type"));
print_line(empty_draw_type);
- StaticBody *sb = memnew( StaticBody);
- sb->set_name(_fixstr(name,"colonly"));
- sb->cast_to<Spatial>()->set_transform(p_node->cast_to<Spatial>()->get_transform());
- p_node->replace_by(sb);
+ PhysicsBody *pb;
+ if (is_rigid) {
+ pb = memnew(RigidBody);
+ pb->set_name(_fixstr(name, "rigidonly"));
+ } else {
+ pb = memnew(StaticBody);
+ pb->set_name(_fixstr(name, "colonly"));
+ }
+ pb->cast_to<Spatial>()->set_transform(p_node->cast_to<Spatial>()->get_transform());
+ p_node->replace_by(pb);
memdelete(p_node);
CollisionShape *colshape = memnew( CollisionShape);
if (empty_draw_type == "CUBE") {
@@ -1755,7 +1763,7 @@ Node* EditorSceneImportPlugin::_fix_node(Node *p_node,Node *p_root,Map<Ref<Mesh>
rayShape->set_length(1);
colshape->set_shape(rayShape);
colshape->set_name("RayShape");
- sb->cast_to<Spatial>()->rotate_x(Math_PI / 2);
+ pb->cast_to<Spatial>()->rotate_x(Math_PI / 2);
} else if (empty_draw_type == "IMAGE") {
PlaneShape *planeShape = memnew( PlaneShape);
colshape->set_shape(planeShape);
@@ -1766,8 +1774,8 @@ Node* EditorSceneImportPlugin::_fix_node(Node *p_node,Node *p_root,Map<Ref<Mesh>
colshape->set_shape(sphereShape);
colshape->set_name("SphereShape");
}
- sb->add_child(colshape);
- colshape->set_owner(sb->get_owner());
+ pb->add_child(colshape);
+ colshape->set_owner(pb->get_owner());
}
} else if (p_flags&SCENE_FLAG_CREATE_COLLISIONS && _teststr(name,"rigid") && p_node->cast_to<MeshInstance>()) {
diff --git a/editor/io_plugins/editor_texture_import_plugin.cpp b/editor/io_plugins/editor_texture_import_plugin.cpp
index a2f0ecaf7b..d9b4a95045 100644
--- a/editor/io_plugins/editor_texture_import_plugin.cpp
+++ b/editor/io_plugins/editor_texture_import_plugin.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "editor_texture_import_plugin.h"
+
#if 0
#include "editor/editor_node.h"
#include "editor/editor_settings.h"
@@ -35,13 +36,14 @@
#include "global_config.h"
#include "io/image_loader.h"
#include "io/marshalls.h"
-#include "io/md5.h"
#include "io/resource_saver.h"
#include "scene/gui/button_group.h"
#include "scene/gui/check_button.h"
#include "scene/gui/margin_container.h"
#include "scene/io/resource_format_image.h"
+#include "thirdparty/misc/md5.h"
+
static const char *flag_names[]={
("Streaming Format"),
("Fix Border Alpha"),
@@ -678,7 +680,7 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
};
- mode_check[i]=memnew(CheckBox);
+ mode_check[i]=memnew( CheckBox );
bg->add_child(mode_check[i]);
mode_check[i]->set_text(mode_name[i]);
mode_check[i]->connect("pressed",this,"_mode_changed",varray(i));
diff --git a/editor/io_plugins/editor_translation_import_plugin.cpp b/editor/io_plugins/editor_translation_import_plugin.cpp
index 8fba33f787..caa0659046 100644
--- a/editor/io_plugins/editor_translation_import_plugin.cpp
+++ b/editor/io_plugins/editor_translation_import_plugin.cpp
@@ -347,7 +347,7 @@ public:
add_to_project = memnew( CheckButton);
add_to_project->set_pressed(true);
- add_to_project->set_text(TTR("Add to Project (godot.cfg)"));
+ add_to_project->set_text(TTR("Add to Project (project.godot)"));
tcomp->add_child(add_to_project);
file_select = memnew(EditorFileDialog);
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index 0be7b202a8..b4398427f8 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -118,16 +118,7 @@ void AnimationPlayerEditor::_notification(int p_what) {
blend_editor.next->connect("item_selected", this, "_blend_editor_next_changed");
- nodename->set_icon(get_icon("AnimationPlayer", "EditorIcons"));
-
- /*
- anim_editor_load->set_normal_texture( get_icon("AnimGet","EditorIcons"));
- anim_editor_store->set_normal_texture( get_icon("AnimSet","EditorIcons"));
- anim_editor_load->set_pressed_texture( get_icon("AnimGet","EditorIcons"));
- anim_editor_store->set_pressed_texture( get_icon("AnimSet","EditorIcons"));
- anim_editor_load->set_hover_texture( get_icon("AnimGetHl","EditorIcons"));
- anim_editor_store->set_hover_texture( get_icon("AnimSetHl","EditorIcons"));
-*/
+ // nodename->set_icon(get_icon("AnimationPlayer", "EditorIcons"));
get_tree()->connect("node_removed", this, "_node_removed");
}
@@ -793,7 +784,7 @@ void AnimationPlayerEditor::_update_player() {
if (player)
nodename->set_text(player->get_name());
else
- nodename->set_text("<empty>");
+ nodename->set_text(TTR("No player selected"));
add_anim->set_disabled(player == NULL);
load_anim->set_disabled(player == NULL);
@@ -1367,9 +1358,14 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
//tool_anim->get_popup()->add_item("Edit Anim Resource",TOOL_PASTE_ANIM);
hb->add_child(tool_anim);
- nodename = memnew(Button);
+ hb->add_child(memnew(VSeparator));
+ nodename_icon = memnew(TextureRect);
+ nodename_icon->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED);
+ hb->add_child(nodename_icon);
+ nodename = memnew(Label);
hb->add_child(nodename);
pin = memnew(ToolButton);
+ pin->set_tooltip(TTR("Keep this animation selected?"));
pin->set_toggle_mode(true);
hb->add_child(pin);
diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h
index a042da14df..d80f9dccf2 100644
--- a/editor/plugins/animation_player_editor_plugin.h
+++ b/editor/plugins/animation_player_editor_plugin.h
@@ -85,7 +85,8 @@ class AnimationPlayerEditor : public VBoxContainer {
Button *remove_anim;
MenuButton *tool_anim;
ToolButton *pin;
- Button *nodename;
+ Label *nodename;
+ TextureRect *nodename_icon;
SpinBox *frame;
LineEdit *scale;
LineEdit *name;
diff --git a/editor/plugins/baked_light_baker.h b/editor/plugins/baked_light_baker.h
index 5f32e236c0..123812fc07 100644
--- a/editor/plugins/baked_light_baker.h
+++ b/editor/plugins/baked_light_baker.h
@@ -31,7 +31,7 @@
#define BAKED_LIGHT_BAKER_H
#include "os/thread.h"
-#include "scene/3d/baked_light_instance.h"
+
#include "scene/3d/light.h"
#include "scene/3d/mesh_instance.h"
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index 1a533dce32..27be6ea8f0 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -1049,7 +1049,7 @@ void CanvasItemEditor::_viewport_gui_input(const InputEvent &p_event) {
return;
float prev_zoom = zoom;
- zoom = zoom * 0.95;
+ zoom = zoom * (1 - (0.05 * b.factor));
{
Point2 ofs(b.x, b.y);
ofs = ofs / prev_zoom - ofs / zoom;
@@ -1067,7 +1067,7 @@ void CanvasItemEditor::_viewport_gui_input(const InputEvent &p_event) {
return;
float prev_zoom = zoom;
- zoom = zoom * (1.0 / 0.95);
+ zoom = zoom * ((0.95 + (0.05 * b.factor)) / 0.95);
{
Point2 ofs(b.x, b.y);
ofs = ofs / prev_zoom - ofs / zoom;
@@ -3123,6 +3123,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
editor_selection->connect("selection_changed", this, "update");
hb = memnew(HBoxContainer);
+ hb->add_style_override("bg", editor->get_gui_base()->get_stylebox("panel", "PanelContainer"));
add_child(hb);
hb->set_area_as_parent_rect();
@@ -3299,6 +3300,8 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
animation_hb->hide();
key_loc_button = memnew(Button("loc"));
+ key_loc_button = memnew(Button("loc"));
+ key_loc_button->set_flat(true);
key_loc_button->set_toggle_mode(true);
key_loc_button->set_pressed(true);
key_loc_button->set_focus_mode(FOCUS_NONE);
@@ -3307,6 +3310,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
key_loc_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_POS));
animation_hb->add_child(key_loc_button);
key_rot_button = memnew(Button("rot"));
+ key_rot_button->set_flat(true);
key_rot_button->set_toggle_mode(true);
key_rot_button->set_pressed(true);
key_rot_button->set_focus_mode(FOCUS_NONE);
@@ -3315,13 +3319,14 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
key_rot_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_ROT));
animation_hb->add_child(key_rot_button);
key_scale_button = memnew(Button("scl"));
+ key_scale_button->set_flat(true);
key_scale_button->set_toggle_mode(true);
key_scale_button->set_focus_mode(FOCUS_NONE);
key_scale_button->add_color_override("font_color", Color(1, 0.6, 0.6));
key_scale_button->add_color_override("font_color_pressed", Color(0.6, 1, 0.6));
key_scale_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_SCALE));
animation_hb->add_child(key_scale_button);
- key_insert_button = memnew(Button);
+ key_insert_button = memnew(ToolButton);
key_insert_button->set_focus_mode(FOCUS_NONE);
key_insert_button->connect("pressed", this, "_popup_callback", varray(ANIM_INSERT_KEY));
key_insert_button->set_tooltip(TTR("Insert Keys"));
diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp
index 52edc75bc0..f3ad5c0fd1 100644
--- a/editor/plugins/curve_editor_plugin.cpp
+++ b/editor/plugins/curve_editor_plugin.cpp
@@ -1,8 +1,38 @@
+/*************************************************************************/
+/* curve_editor_plugin.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
#include "curve_editor_plugin.h"
#include "canvas_item_editor_plugin.h"
#include "os/keyboard.h"
#include "spatial_editor_plugin.h"
+
void CurveTextureEdit::_gui_input(const InputEvent &p_event) {
if (p_event.type == InputEvent::KEY && p_event.key.pressed && p_event.key.scancode == KEY_DELETE && grabbed != -1) {
diff --git a/editor/plugins/curve_editor_plugin.h b/editor/plugins/curve_editor_plugin.h
index e98cec2727..ebe05539aa 100644
--- a/editor/plugins/curve_editor_plugin.h
+++ b/editor/plugins/curve_editor_plugin.h
@@ -1,3 +1,32 @@
+/*************************************************************************/
+/* curve_editor_plugin.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
#ifndef CURVE_EDITOR_PLUGIN_H
#define CURVE_EDITOR_PLUGIN_H
diff --git a/editor/plugins/gradient_texture_editor_plugin.cpp b/editor/plugins/gradient_texture_editor_plugin.cpp
index 9551fe19fa..005633a10e 100644
--- a/editor/plugins/gradient_texture_editor_plugin.cpp
+++ b/editor/plugins/gradient_texture_editor_plugin.cpp
@@ -1,10 +1,39 @@
+/*************************************************************************/
+/* gradient_texture_editor_plugin.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
#include "gradient_texture_editor_plugin.h"
#include "canvas_item_editor_plugin.h"
-#include "spatial_editor_plugin.h"
-
#include "os/keyboard.h"
#include "scene/resources/default_theme/theme_data.h"
+#include "spatial_editor_plugin.h"
+
#define POINT_WIDTH 8
GradientTextureEdit::GradientTextureEdit() {
@@ -19,7 +48,8 @@ GradientTextureEdit::GradientTextureEdit() {
add_child(popup);
checker = Ref<ImageTexture>(memnew(ImageTexture));
- checker->create_from_image(Image(checker_bg_png), ImageTexture::FLAG_REPEAT);
+ Ref<Image> checker_bg = memnew(Image(checker_bg_png));
+ checker->create_from_image(checker_bg, ImageTexture::FLAG_REPEAT);
}
int GradientTextureEdit::_get_point_from_pos(int x) {
diff --git a/editor/plugins/gradient_texture_editor_plugin.h b/editor/plugins/gradient_texture_editor_plugin.h
index 5af828f17c..cb2f6b4061 100644
--- a/editor/plugins/gradient_texture_editor_plugin.h
+++ b/editor/plugins/gradient_texture_editor_plugin.h
@@ -1,3 +1,32 @@
+/*************************************************************************/
+/* gradient_texture_editor_plugin.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
#ifndef GRADIENT_TEXTURE_EDITOR_PLUGIN_H
#define GRADIENT_TEXTURE_EDITOR_PLUGIN_H
diff --git a/editor/plugins/line_2d_editor_plugin.cpp b/editor/plugins/line_2d_editor_plugin.cpp
index 69e329eb1a..4df0d2605a 100644
--- a/editor/plugins/line_2d_editor_plugin.cpp
+++ b/editor/plugins/line_2d_editor_plugin.cpp
@@ -62,7 +62,7 @@ Vector2 Line2DEditor::mouse_to_local_pos(Vector2 gpoint, bool alt) {
int Line2DEditor::get_point_index_at(Vector2 gpos) {
ERR_FAIL_COND_V(node == 0, -1);
- real_t grab_treshold = EDITOR_DEF("poly_editor/point_grab_radius", 8);
+ real_t grab_treshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8);
Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform();
for (int i = 0; i < node->get_point_count(); ++i) {
diff --git a/editor/plugins/particles_2d_editor_plugin.cpp b/editor/plugins/particles_2d_editor_plugin.cpp
index 35743ce0b3..c6c85d8be2 100644
--- a/editor/plugins/particles_2d_editor_plugin.cpp
+++ b/editor/plugins/particles_2d_editor_plugin.cpp
@@ -64,17 +64,18 @@ void Particles2DEditorPlugin::_file_selected(const String &p_file) {
int epc = epoints->get_value();
- Image img;
- Error err = ImageLoader::load_image(p_file, &img);
+ Ref<Image> img;
+ img.instance();
+ Error err = ImageLoader::load_image(p_file, img);
ERR_EXPLAIN(TTR("Error loading image:") + " " + p_file);
ERR_FAIL_COND(err != OK);
- img.convert(Image::FORMAT_LA8);
- ERR_FAIL_COND(img.get_format() != Image::FORMAT_LA8);
- Size2i s = Size2(img.get_width(), img.get_height());
+ img->convert(Image::FORMAT_LA8);
+ ERR_FAIL_COND(img->get_format() != Image::FORMAT_LA8);
+ Size2i s = Size2(img->get_width(), img->get_height());
ERR_FAIL_COND(s.width == 0 || s.height == 0);
- PoolVector<uint8_t> data = img.get_data();
+ PoolVector<uint8_t> data = img->get_data();
PoolVector<uint8_t>::Read r = data.read();
Vector<Point2i> valid_positions;
@@ -98,7 +99,7 @@ void Particles2DEditorPlugin::_file_selected(const String &p_file) {
epoints.resize(epc);
PoolVector<Point2>::Write w = epoints.write();
- Size2 extents = Size2(img.get_width() * 0.5, img.get_height() * 0.5);
+ Size2 extents = Size2(img->get_width() * 0.5, img->get_height() * 0.5);
for (int i = 0; i < epc; i++) {
diff --git a/editor/plugins/particles_editor_plugin.cpp b/editor/plugins/particles_editor_plugin.cpp
index 4c84e831c1..dc2da80b06 100644
--- a/editor/plugins/particles_editor_plugin.cpp
+++ b/editor/plugins/particles_editor_plugin.cpp
@@ -329,7 +329,7 @@ void ParticlesEditor::_generate_emission_points() {
copymem(iw.ptr(), r.ptr(), point_count * sizeof(float) * 3);
}
- Image image(w, h, false, Image::FORMAT_RGBF, point_img);
+ Ref<Image> image = memnew(Image(w, h, false, Image::FORMAT_RGBF, point_img));
Ref<ImageTexture> tex;
tex.instance();
@@ -354,7 +354,7 @@ void ParticlesEditor::_generate_emission_points() {
copymem(iw.ptr(), r.ptr(), point_count * sizeof(float) * 3);
}
- Image image2(w, h, false, Image::FORMAT_RGBF, point_img2);
+ Ref<Image> image2 = memnew(Image(w, h, false, Image::FORMAT_RGBF, point_img2));
Ref<ImageTexture> tex2;
tex2.instance();
diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp
index e84e782580..896a26c8e8 100644
--- a/editor/plugins/polygon_2d_editor_plugin.cpp
+++ b/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -522,10 +522,10 @@ void Polygon2DEditor::_uv_input(const InputEvent &p_input) {
} else if (mb.button_index == BUTTON_WHEEL_UP && mb.pressed) {
- uv_zoom->set_value(uv_zoom->get_value() / 0.9);
+ uv_zoom->set_value(uv_zoom->get_value() / (1 - (0.1 * mb.factor)));
} else if (mb.button_index == BUTTON_WHEEL_DOWN && mb.pressed) {
- uv_zoom->set_value(uv_zoom->get_value() * 0.9);
+ uv_zoom->set_value(uv_zoom->get_value() * (1 - (0.1 * mb.factor)));
}
} else if (p_input.type == InputEvent::MOUSE_MOTION) {
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp
index 8ce0f51211..48e61a0967 100644
--- a/editor/plugins/script_editor_plugin.cpp
+++ b/editor/plugins/script_editor_plugin.cpp
@@ -411,6 +411,80 @@ void ScriptEditor::_go_to_tab(int p_idx) {
_update_selected_editor_menu();
}
+void ScriptEditor::_add_recent_script(String p_path) {
+
+ if (p_path.empty()) {
+ return;
+ }
+
+ // remove if already stored
+ int already_recent = previous_scripts.find(p_path);
+ if (already_recent >= 0) {
+ previous_scripts.remove(already_recent);
+ }
+
+ // add to list
+ previous_scripts.insert(0, p_path);
+
+ _update_recent_scripts();
+}
+
+void ScriptEditor::_update_recent_scripts() {
+
+ // make sure we don't exceed max size
+ const int max_history = EDITOR_DEF("text_editor/files/maximum_recent_files", 20);
+ if (previous_scripts.size() > max_history) {
+ previous_scripts.resize(max_history);
+ }
+
+ recent_scripts->clear();
+
+ recent_scripts->add_shortcut(ED_SHORTCUT("script_editor/open_recent", TTR("Open Recent"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_T));
+ recent_scripts->add_separator();
+
+ const int max_shown = 8;
+ for (int i = 0; i < previous_scripts.size() && i <= max_shown; i++) {
+ String path = previous_scripts.get(i);
+ // just show script name and last dir
+ recent_scripts->add_item(path.get_slice("/", path.get_slice_count("/") - 2) + "/" + path.get_file());
+ }
+
+ recent_scripts->add_separator();
+ recent_scripts->add_shortcut(ED_SHORTCUT("script_editor/clear_recent", TTR("Clear Recent Files")));
+}
+
+void ScriptEditor::_open_recent_script(int p_idx) {
+
+ // clear button
+ if (p_idx == recent_scripts->get_item_count() - 1) {
+ previous_scripts.clear();
+ _update_recent_scripts();
+ return;
+ }
+
+ // take two for the open recent button
+ if (p_idx > 0) {
+ p_idx -= 2;
+ }
+
+ if (p_idx < previous_scripts.size() && p_idx >= 0) {
+
+ String path = previous_scripts.get(p_idx);
+ // if its not on disk its a help file or deleted
+ if (FileAccess::exists(path)) {
+ Ref<Script> script = ResourceLoader::load(path);
+ if (script.is_valid()) {
+ edit(script, true);
+ }
+ // if it's a path then its most likely a delted file not help
+ } else if (!path.is_resource_file()) {
+ _help_class_open(path);
+ }
+ previous_scripts.remove(p_idx);
+ _update_recent_scripts();
+ }
+}
+
void ScriptEditor::_close_tab(int p_idx, bool p_save) {
int selected = p_idx;
@@ -420,12 +494,16 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save) {
Node *tselected = tab_container->get_child(selected);
ScriptEditorBase *current = tab_container->get_child(selected)->cast_to<ScriptEditorBase>();
if (current) {
+ _add_recent_script(current->get_edited_script()->get_path());
if (p_save) {
apply_scripts();
}
if (current->get_edit_menu()) {
memdelete(current->get_edit_menu());
}
+ } else {
+ EditorHelp *help = tab_container->get_child(selected)->cast_to<EditorHelp>();
+ _add_recent_script(help->get_class());
}
//remove from history
@@ -530,6 +608,15 @@ void ScriptEditor::_resave_scripts(const String &p_str) {
if (trim_trailing_whitespace_on_save) {
se->trim_trailing_whitespace();
}
+
+ if (convert_indent_on_save) {
+ if (use_space_indentation) {
+ se->convert_indent_to_spaces();
+ } else {
+ se->convert_indent_to_tabs();
+ }
+ }
+
editor->save_resource(script);
se->tag_saved_version();
}
@@ -795,12 +882,28 @@ void ScriptEditor::_menu_option(int p_option) {
if (trim_trailing_whitespace_on_save)
current->trim_trailing_whitespace();
+
+ if (convert_indent_on_save) {
+ if (use_space_indentation) {
+ current->convert_indent_to_spaces();
+ } else {
+ current->convert_indent_to_tabs();
+ }
+ }
editor->save_resource(current->get_edited_script());
} break;
case FILE_SAVE_AS: {
current->trim_trailing_whitespace();
+
+ if (convert_indent_on_save) {
+ if (use_space_indentation) {
+ current->convert_indent_to_spaces();
+ } else {
+ current->convert_indent_to_tabs();
+ }
+ }
editor->push_item(current->get_edited_script()->cast_to<Object>());
editor->save_resource_as(current->get_edited_script());
@@ -878,28 +981,29 @@ void ScriptEditor::_menu_option(int p_option) {
}
}
}
- }
+ } else {
- EditorHelp *help = tab_container->get_current_tab_control()->cast_to<EditorHelp>();
- if (help) {
+ EditorHelp *help = tab_container->get_current_tab_control()->cast_to<EditorHelp>();
+ if (help) {
- switch (p_option) {
+ switch (p_option) {
- case HELP_SEARCH_FIND: {
- help->popup_search();
- } break;
- case HELP_SEARCH_FIND_NEXT: {
- help->search_again();
- } break;
- case FILE_CLOSE: {
- _close_current_tab();
- } break;
- case CLOSE_DOCS: {
- _close_docs_tab();
- } break;
- case CLOSE_ALL: {
- _close_all_tabs();
- } break;
+ case HELP_SEARCH_FIND: {
+ help->popup_search();
+ } break;
+ case HELP_SEARCH_FIND_NEXT: {
+ help->search_again();
+ } break;
+ case FILE_CLOSE: {
+ _close_current_tab();
+ } break;
+ case CLOSE_DOCS: {
+ _close_docs_tab();
+ } break;
+ case CLOSE_ALL: {
+ _close_all_tabs();
+ } break;
+ }
}
}
}
@@ -933,7 +1037,7 @@ void ScriptEditor::_notification(int p_what) {
EditorSettings::get_singleton()->connect("settings_changed", this, "_editor_settings_changed");
help_search->set_icon(get_icon("Help", "EditorIcons"));
- site_search->set_icon(get_icon("Godot", "EditorIcons"));
+ site_search->set_icon(get_icon("GodotDocs", "EditorIcons"));
class_search->set_icon(get_icon("ClassList", "EditorIcons"));
script_forward->set_icon(get_icon("Forward", "EditorIcons"));
@@ -1270,7 +1374,8 @@ void ScriptEditor::_update_script_colors() {
int non_zero_hist_size = (hist_size == 0) ? 1 : hist_size;
float v = Math::ease((edit_pass - pass) / float(non_zero_hist_size), 0.4);
- script_list->set_item_custom_bg_color(i, hot_color.linear_interpolate(cold_color, v));
+ //script_list->set_item_custom_bg_color(i, hot_color.linear_interpolate(cold_color, v));
+ script_list->set_item_custom_font_color(i, hot_color.linear_interpolate(cold_color, v));
}
}
}
@@ -1380,10 +1485,10 @@ void ScriptEditor::_update_script_names() {
_update_script_colors();
}
-void ScriptEditor::edit(const Ref<Script> &p_script, bool p_grab_focus) {
+bool ScriptEditor::edit(const Ref<Script> &p_script, int p_line, int p_col, bool p_grab_focus) {
if (p_script.is_null())
- return;
+ return false;
// refuse to open built-in if scene is not loaded
@@ -1391,22 +1496,46 @@ void ScriptEditor::edit(const Ref<Script> &p_script, bool p_grab_focus) {
bool open_dominant = EditorSettings::get_singleton()->get("text_editor/files/open_dominant_script_on_scene_change");
+ Error err = p_script->get_language()->open_in_external_editor(p_script, p_line >= 0 ? p_line : 0, p_col);
+ if (err == OK)
+ return false;
+ if (err != ERR_UNAVAILABLE)
+ WARN_PRINT("Couldn't open in custom external text editor");
+
if (p_script->get_path().is_resource_file() && bool(EditorSettings::get_singleton()->get("text_editor/external/use_external_editor"))) {
String path = EditorSettings::get_singleton()->get("text_editor/external/exec_path");
String flags = EditorSettings::get_singleton()->get("text_editor/external/exec_flags");
+
+ Dictionary keys;
+ keys["project"] = GlobalConfig::get_singleton()->get_resource_path();
+ keys["file"] = GlobalConfig::get_singleton()->globalize_path(p_script->get_path());
+ keys["line"] = p_line >= 0 ? p_line : 0;
+ keys["col"] = p_col;
+
+ flags = flags.format(keys).strip_edges().replace("\\\\", "\\");
+
List<String> args;
- flags = flags.strip_edges();
- if (flags != String()) {
- Vector<String> flagss = flags.split(" ", false);
- for (int i = 0; i < flagss.size(); i++)
- args.push_back(flagss[i]);
+
+ if (flags.size()) {
+ int from = 0, to = 0;
+ bool inside_quotes = false;
+ for (int i = 0; i < flags.size(); i++) {
+ if (flags[i] == '"' && (!i || flags[i - 1] != '\\')) {
+ inside_quotes = !inside_quotes;
+ } else if (flags[i] == '\0' || (!inside_quotes && flags[i] == ' ')) {
+ args.push_back(flags.substr(from, to));
+ from = i + 1;
+ to = 0;
+ } else {
+ to++;
+ }
+ }
}
- args.push_back(GlobalConfig::get_singleton()->globalize_path(p_script->get_path()));
Error err = OS::get_singleton()->execute(path, args, false);
if (err == OK)
- return;
+ return false;
WARN_PRINT("Couldn't open external text editor, using internal");
}
@@ -1425,8 +1554,11 @@ void ScriptEditor::edit(const Ref<Script> &p_script, bool p_grab_focus) {
}
if (is_visible_in_tree())
se->ensure_focus();
+
+ if (p_line >= 0)
+ se->goto_line(p_line - 1);
}
- return;
+ return true;
}
}
@@ -1439,7 +1571,7 @@ void ScriptEditor::edit(const Ref<Script> &p_script, bool p_grab_focus) {
if (se)
break;
}
- ERR_FAIL_COND(!se);
+ ERR_FAIL_COND_V(!se, false);
tab_container->add_child(se);
se->set_edited_script(p_script);
@@ -1466,6 +1598,11 @@ void ScriptEditor::edit(const Ref<Script> &p_script, bool p_grab_focus) {
_test_script_times_on_disk(p_script);
_update_modified_scripts_for_external_editor(p_script);
+
+ if (p_line >= 0)
+ se->goto_line(p_line - 1);
+
+ return true;
}
void ScriptEditor::save_all_scripts() {
@@ -1476,13 +1613,21 @@ void ScriptEditor::save_all_scripts() {
if (!se)
continue;
- if (!se->is_unsaved())
- continue;
+ if (convert_indent_on_save) {
+ if (use_space_indentation) {
+ se->convert_indent_to_spaces();
+ } else {
+ se->convert_indent_to_tabs();
+ }
+ }
if (trim_trailing_whitespace_on_save) {
se->trim_trailing_whitespace();
}
+ if (!se->is_unsaved())
+ continue;
+
Ref<Script> script = se->get_edited_script();
if (script.is_valid())
se->apply_code();
@@ -1582,6 +1727,9 @@ void ScriptEditor::_save_layout() {
void ScriptEditor::_editor_settings_changed() {
trim_trailing_whitespace_on_save = EditorSettings::get_singleton()->get("text_editor/files/trim_trailing_whitespace_on_save");
+ convert_indent_on_save = EditorSettings::get_singleton()->get("text_editor/indent/convert_indent_on_save");
+ use_space_indentation = EditorSettings::get_singleton()->get("text_editor/indent/type");
+
float autosave_time = EditorSettings::get_singleton()->get("text_editor/files/autosave_interval_secs");
if (autosave_time > 0) {
autosave_timer->set_wait_time(autosave_time);
@@ -1863,20 +2011,14 @@ void ScriptEditor::set_scene_root_script(Ref<Script> p_script) {
}
}
-bool ScriptEditor::script_go_to_method(Ref<Script> p_script, const String &p_method) {
+bool ScriptEditor::script_goto_method(Ref<Script> p_script, const String &p_method) {
- for (int i = 0; i < tab_container->get_child_count(); i++) {
- ScriptEditorBase *current = tab_container->get_child(i)->cast_to<ScriptEditorBase>();
+ int line = p_script->get_member_line(p_method);
- if (current && current->get_edited_script() == p_script) {
- if (current->goto_method(p_method)) {
- edit(p_script);
- return true;
- }
- break;
- }
- }
- return false;
+ if (line == -1)
+ return false;
+
+ return edit(p_script, line, 0);
}
void ScriptEditor::set_live_auto_reload_running_scripts(bool p_enabled) {
@@ -1914,6 +2056,7 @@ void ScriptEditor::_bind_methods() {
ClassDB::bind_method("_close_discard_current_tab", &ScriptEditor::_close_discard_current_tab);
ClassDB::bind_method("_close_docs_tab", &ScriptEditor::_close_docs_tab);
ClassDB::bind_method("_close_all_tabs", &ScriptEditor::_close_all_tabs);
+ ClassDB::bind_method("_open_recent_script", &ScriptEditor::_open_recent_script);
ClassDB::bind_method("_editor_play", &ScriptEditor::_editor_play);
ClassDB::bind_method("_editor_pause", &ScriptEditor::_editor_pause);
ClassDB::bind_method("_editor_stop", &ScriptEditor::_editor_stop);
@@ -1969,6 +2112,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
script_split->set_split_offset(140);
tab_container = memnew(TabContainer);
+ tab_container->add_style_override("panel", p_editor->get_gui_base()->get_stylebox("EditorBG", "EditorStyles"));
tab_container->set_tabs_visible(false);
script_split->add_child(tab_container);
@@ -1983,6 +2127,14 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
file_menu->set_text(TTR("File"));
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New")), FILE_NEW);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/open", TTR("Open")), FILE_OPEN);
+ file_menu->get_popup()->add_submenu_item(TTR("Open Recent"), "RecentScripts", FILE_OPEN_RECENT);
+
+ recent_scripts = memnew(PopupMenu);
+ recent_scripts->set_name("RecentScripts");
+ file_menu->get_popup()->add_child(recent_scripts);
+ recent_scripts->connect("id_pressed", this, "_open_recent_script");
+ _update_recent_scripts();
+
file_menu->get_popup()->add_separator();
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save", TTR("Save"), KEY_MASK_ALT | KEY_MASK_CMD | KEY_S), FILE_SAVE);
file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_as", TTR("Save As..")), FILE_SAVE_AS);
@@ -2160,6 +2312,8 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
edit_pass = 0;
trim_trailing_whitespace_on_save = false;
+ convert_indent_on_save = false;
+ use_space_indentation = false;
ScriptServer::edit_request_func = _open_script_request;
}
@@ -2277,8 +2431,8 @@ ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) {
EDITOR_DEF("text_editor/open_scripts/script_temperature_enabled", true);
EDITOR_DEF("text_editor/open_scripts/highlight_current_script", true);
EDITOR_DEF("text_editor/open_scripts/script_temperature_history_size", 15);
- EDITOR_DEF("text_editor/open_scripts/script_temperature_hot_color", Color(1, 0, 0, 0.3));
- EDITOR_DEF("text_editor/open_scripts/script_temperature_cold_color", Color(0, 0, 1, 0.3));
+ EDITOR_DEF("text_editor/open_scripts/script_temperature_hot_color", Color::html("ff5446"));
+ EDITOR_DEF("text_editor/open_scripts/script_temperature_cold_color", Color::html("647b93"));
EDITOR_DEF("text_editor/open_scripts/current_script_background_color", Color(0.81, 0.81, 0.14, 0.63));
EDITOR_DEF("text_editor/open_scripts/group_help_pages", true);
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "text_editor/open_scripts/sort_scripts_by", PROPERTY_HINT_ENUM, "Name,Path"));
@@ -2287,6 +2441,9 @@ ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) {
EDITOR_DEF("text_editor/open_scripts/list_script_names_as", 0);
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "text_editor/external/exec_path", PROPERTY_HINT_GLOBAL_FILE));
EDITOR_DEF("text_editor/external/exec_flags", "");
+
+ ED_SHORTCUT("script_editor/open_recent", TTR("Open Recent"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_T);
+ ED_SHORTCUT("script_editor/clear_recent", TTR("Clear Recent Files"));
}
ScriptEditorPlugin::~ScriptEditorPlugin() {
diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h
index 51d9bd3fc8..983847ddaf 100644
--- a/editor/plugins/script_editor_plugin.h
+++ b/editor/plugins/script_editor_plugin.h
@@ -91,11 +91,12 @@ public:
virtual void set_edit_state(const Variant &p_state) = 0;
virtual void goto_line(int p_line, bool p_with_error = false) = 0;
virtual void trim_trailing_whitespace() = 0;
+ virtual void convert_indent_to_spaces() = 0;
+ virtual void convert_indent_to_tabs() = 0;
virtual void ensure_focus() = 0;
virtual void tag_saved_version() = 0;
virtual void reload(bool p_soft) = 0;
virtual void get_breakpoints(List<int> *p_breakpoints) = 0;
- virtual bool goto_method(const String &p_method) = 0;
virtual void add_callback(const String &p_function, PoolStringArray p_args) = 0;
virtual void update_settings() = 0;
virtual void set_debugger_active(bool p_active) = 0;
@@ -119,6 +120,7 @@ class ScriptEditor : public VBoxContainer {
enum {
FILE_NEW,
FILE_OPEN,
+ FILE_OPEN_RECENT,
FILE_SAVE,
FILE_SAVE_AS,
FILE_SAVE_ALL,
@@ -168,6 +170,8 @@ class ScriptEditor : public VBoxContainer {
Timer *autosave_timer;
uint64_t idle;
+ PopupMenu *recent_scripts;
+
Button *help_search;
Button *site_search;
Button *class_search;
@@ -206,6 +210,8 @@ class ScriptEditor : public VBoxContainer {
Vector<ScriptHistory> history;
int history_pos;
+ Vector<String> previous_scripts;
+
EditorHelpIndex *help_index;
void _tab_changed(int p_which);
@@ -223,6 +229,10 @@ class ScriptEditor : public VBoxContainer {
bool _test_script_times_on_disk(Ref<Script> p_for_script = Ref<Script>());
+ void _add_recent_script(String p_path);
+ void _update_recent_scripts();
+ void _open_recent_script(int p_idx);
+
void _close_tab(int p_idx, bool p_save = true);
void _close_current_tab();
@@ -252,6 +262,8 @@ class ScriptEditor : public VBoxContainer {
void _res_saved_callback(const Ref<Resource> &p_res);
bool trim_trailing_whitespace_on_save;
+ bool use_space_indentation;
+ bool convert_indent_on_save;
void _trim_trailing_whitespace(TextEdit *tx);
@@ -312,7 +324,9 @@ public:
void apply_scripts() const;
void ensure_select_current();
- void edit(const Ref<Script> &p_script, bool p_grab_focus = true);
+
+ _FORCE_INLINE_ bool edit(const Ref<Script> &p_script, bool p_grab_focus = true) { return edit(p_script, -1, 0, p_grab_focus); }
+ bool edit(const Ref<Script> &p_script, int p_line, int p_col, bool p_grab_focus = true);
Dictionary get_state() const;
void set_state(const Dictionary &p_state);
@@ -329,7 +343,7 @@ public:
void set_scene_root_script(Ref<Script> p_script);
- bool script_go_to_method(Ref<Script> p_script, const String &p_method);
+ bool script_goto_method(Ref<Script> p_script, const String &p_method);
virtual void edited_scene_changed();
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index f020e36247..3bb1c7852b 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -69,26 +69,6 @@ Ref<Script> ScriptTextEditor::get_edited_script() const {
return script;
}
-bool ScriptTextEditor::goto_method(const String &p_method) {
-
- Vector<String> functions = get_functions();
-
- String method_search = p_method + ":";
-
- for (int i = 0; i < functions.size(); i++) {
- String function = functions[i];
-
- if (function.begins_with(method_search)) {
-
- int line = function.get_slice(":", 1).to_int();
- goto_line(line - 1);
- return true;
- }
- }
-
- return false;
-}
-
void ScriptTextEditor::_load_theme_settings() {
TextEdit *text_edit = code_editor->get_text_edit();
@@ -260,6 +240,48 @@ Variant ScriptTextEditor::get_edit_state() {
return state;
}
+void ScriptTextEditor::_convert_case(CaseStyle p_case) {
+ TextEdit *te = code_editor->get_text_edit();
+ Ref<Script> scr = get_edited_script();
+ if (scr.is_null()) {
+ return;
+ }
+
+ if (te->is_selection_active()) {
+ te->begin_complex_operation();
+
+ int begin = te->get_selection_from_line();
+ int end = te->get_selection_to_line();
+ int begin_col = te->get_selection_from_column();
+ int end_col = te->get_selection_to_column();
+
+ for (int i = begin; i <= end; i++) {
+ String new_line = te->get_line(i);
+
+ switch (p_case) {
+ case UPPER: {
+ new_line = new_line.to_upper();
+ } break;
+ case LOWER: {
+ new_line = new_line.to_lower();
+ } break;
+ case CAPITALIZE: {
+ new_line = new_line.capitalize();
+ } break;
+ }
+
+ if (i == begin) {
+ new_line = te->get_line(i).left(begin_col) + new_line.right(begin_col);
+ }
+ if (i == end) {
+ new_line = new_line.left(end_col) + te->get_line(i).right(end_col);
+ }
+ te->set_line(i, new_line);
+ }
+ te->end_complex_operation();
+ }
+}
+
void ScriptTextEditor::trim_trailing_whitespace() {
TextEdit *tx = code_editor->get_text_edit();
@@ -290,13 +312,116 @@ void ScriptTextEditor::trim_trailing_whitespace() {
}
}
+void ScriptTextEditor::convert_indent_to_spaces() {
+ TextEdit *tx = code_editor->get_text_edit();
+ Ref<Script> scr = get_edited_script();
+
+ if (scr.is_null()) {
+ return;
+ }
+
+ int indent_size = EditorSettings::get_singleton()->get("text_editor/indent/size");
+ String indent = "";
+
+ for (int i = 0; i < indent_size; i++) {
+ indent += " ";
+ }
+
+ int cursor_line = tx->cursor_get_line();
+ int cursor_column = tx->cursor_get_column();
+
+ bool changed_indentation = false;
+ for (int i = 0; i < tx->get_line_count(); i++) {
+ String line = tx->get_line(i);
+
+ if (line.length() <= 0) {
+ continue;
+ }
+
+ int j = 0;
+ while (j < line.length() && (line[j] == ' ' || line[j] == '\t')) {
+ if (line[j] == '\t') {
+ if (!changed_indentation) {
+ tx->begin_complex_operation();
+ changed_indentation = true;
+ }
+ if (cursor_line == i && cursor_column > j) {
+ cursor_column += indent_size - 1;
+ }
+ line = line.left(j) + indent + line.right(j + 1);
+ }
+ j++;
+ }
+ tx->set_line(i, line);
+ }
+ if (changed_indentation) {
+ tx->cursor_set_column(cursor_column);
+ tx->end_complex_operation();
+ tx->update();
+ }
+}
+
+void ScriptTextEditor::convert_indent_to_tabs() {
+ TextEdit *tx = code_editor->get_text_edit();
+ Ref<Script> scr = get_edited_script();
+
+ if (scr.is_null()) {
+ return;
+ }
+
+ int indent_size = EditorSettings::get_singleton()->get("text_editor/indent/size");
+ indent_size -= 1;
+
+ int cursor_line = tx->cursor_get_line();
+ int cursor_column = tx->cursor_get_column();
+
+ bool changed_indentation = false;
+ for (int i = 0; i < tx->get_line_count(); i++) {
+ String line = tx->get_line(i);
+
+ if (line.length() <= 0) {
+ continue;
+ }
+
+ int j = 0;
+ int space_count = -1;
+ while (j < line.length() && (line[j] == ' ' || line[j] == '\t')) {
+ if (line[j] != '\t') {
+ space_count++;
+
+ if (space_count == indent_size) {
+ if (!changed_indentation) {
+ tx->begin_complex_operation();
+ changed_indentation = true;
+ }
+ if (cursor_line == i && cursor_column > j) {
+ cursor_column -= indent_size;
+ }
+ line = line.left(j - indent_size) + "\t" + line.right(j + 1);
+ j = 0;
+ space_count = -1;
+ }
+ } else {
+ space_count = -1;
+ }
+ j++;
+ }
+ tx->set_line(i, line);
+ }
+ if (changed_indentation) {
+ tx->cursor_set_column(cursor_column);
+ tx->end_complex_operation();
+ tx->update();
+ }
+}
+
void ScriptTextEditor::tag_saved_version() {
code_editor->get_text_edit()->tag_saved_version();
}
void ScriptTextEditor::goto_line(int p_line, bool p_with_error) {
- code_editor->get_text_edit()->cursor_set_line(p_line);
+ code_editor->get_text_edit()->call_deferred("cursor_set_line", p_line);
}
void ScriptTextEditor::ensure_focus() {
@@ -827,10 +952,24 @@ void ScriptTextEditor::_edit_option(int p_op) {
case EDIT_TRIM_TRAILING_WHITESAPCE: {
trim_trailing_whitespace();
} break;
+ case EDIT_CONVERT_INDENT_TO_SPACES: {
+ convert_indent_to_spaces();
+ } break;
+ case EDIT_CONVERT_INDENT_TO_TABS: {
+ convert_indent_to_tabs();
+ } break;
case EDIT_PICK_COLOR: {
color_panel->popup();
} break;
-
+ case EDIT_TO_UPPERCASE: {
+ _convert_case(UPPER);
+ } break;
+ case EDIT_TO_LOWERCASE: {
+ _convert_case(LOWER);
+ } break;
+ case EDIT_CAPITALIZE: {
+ _convert_case(CAPITALIZE);
+ } break;
case SEARCH_FIND: {
code_editor->get_find_replace_bar()->popup_search();
@@ -1183,6 +1322,7 @@ ScriptTextEditor::ScriptTextEditor() {
code_editor = memnew(CodeTextEditor);
add_child(code_editor);
+ code_editor->add_constant_override("separation", 0);
code_editor->set_area_as_parent_rect();
code_editor->connect("validate_script", this, "_validate_script");
code_editor->connect("load_theme_settings", this, "_load_theme_settings");
@@ -1237,6 +1377,8 @@ ScriptTextEditor::ScriptTextEditor() {
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/complete_symbol"), EDIT_COMPLETE);
#endif
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/trim_trailing_whitespace"), EDIT_TRIM_TRAILING_WHITESAPCE);
+ edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_indent_to_spaces"), EDIT_CONVERT_INDENT_TO_SPACES);
+ edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/convert_indent_to_tabs"), EDIT_CONVERT_INDENT_TO_TABS);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/auto_indent"), EDIT_AUTO_INDENT);
edit_menu->get_popup()->connect("id_pressed", this, "_edit_option");
edit_menu->get_popup()->add_separator();
@@ -1244,6 +1386,15 @@ ScriptTextEditor::ScriptTextEditor() {
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/remove_all_breakpoints"), DEBUG_REMOVE_ALL_BREAKPOINTS);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_next_breakpoint"), DEBUG_GOTO_NEXT_BREAKPOINT);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/goto_previous_breakpoint"), DEBUG_GOTO_PREV_BREAKPOINT);
+ edit_menu->get_popup()->add_separator();
+ PopupMenu *convert_case = memnew(PopupMenu);
+ convert_case->set_name("convert_case");
+ edit_menu->get_popup()->add_child(convert_case);
+ edit_menu->get_popup()->add_submenu_item(TTR("Convert Case"), "convert_case");
+ convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_uppercase", TTR("Uppercase")), EDIT_TO_UPPERCASE);
+ convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/convert_to_lowercase", TTR("Lowercase")), EDIT_TO_LOWERCASE);
+ convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/capitalize", TTR("Capitalize")), EDIT_CAPITALIZE);
+ convert_case->connect("id_pressed", this, "_edit_option");
search_menu = memnew(MenuButton);
edit_hb->add_child(search_menu);
@@ -1305,6 +1456,8 @@ void ScriptTextEditor::register_editor() {
ED_SHORTCUT("script_text_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CMD | KEY_SPACE);
#endif
ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CTRL | KEY_MASK_ALT | KEY_T);
+ ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent To Spaces"), KEY_MASK_CTRL | KEY_MASK_SHIFT | KEY_Y);
+ ED_SHORTCUT("script_text_editor/convert_indent_to_tabs", TTR("Convert Indent To Tabs"), KEY_MASK_CTRL | KEY_MASK_SHIFT | KEY_X);
ED_SHORTCUT("script_text_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD | KEY_I);
ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9);
@@ -1312,6 +1465,10 @@ void ScriptTextEditor::register_editor() {
ED_SHORTCUT("script_text_editor/goto_next_breakpoint", TTR("Goto Next Breakpoint"), KEY_MASK_CTRL | KEY_PERIOD);
ED_SHORTCUT("script_text_editor/goto_previous_breakpoint", TTR("Goto Previous Breakpoint"), KEY_MASK_CTRL | KEY_COMMA);
+ ED_SHORTCUT("script_text_editor/convert_to_uppercase", TTR("Convert To Uppercase"), KEY_MASK_SHIFT | KEY_F4);
+ ED_SHORTCUT("script_text_editor/convert_to_lowercase", TTR("Convert To Lowercase"), KEY_MASK_SHIFT | KEY_F3);
+ ED_SHORTCUT("script_text_editor/capitalize", TTR("Capitalize"), KEY_MASK_SHIFT | KEY_F2);
+
ED_SHORTCUT("script_text_editor/find", TTR("Find.."), KEY_MASK_CMD | KEY_F);
ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_F3);
ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT | KEY_F3);
diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h
index 0649e39ab7..77bce59f2e 100644
--- a/editor/plugins/script_text_editor.h
+++ b/editor/plugins/script_text_editor.h
@@ -67,6 +67,8 @@ class ScriptTextEditor : public ScriptEditorBase {
EDIT_COMPLETE,
EDIT_AUTO_INDENT,
EDIT_TRIM_TRAILING_WHITESAPCE,
+ EDIT_CONVERT_INDENT_TO_SPACES,
+ EDIT_CONVERT_INDENT_TO_TABS,
EDIT_TOGGLE_COMMENT,
EDIT_MOVE_LINE_UP,
EDIT_MOVE_LINE_DOWN,
@@ -74,6 +76,9 @@ class ScriptTextEditor : public ScriptEditorBase {
EDIT_INDENT_LEFT,
EDIT_CLONE_DOWN,
EDIT_PICK_COLOR,
+ EDIT_TO_UPPERCASE,
+ EDIT_TO_LOWERCASE,
+ EDIT_CAPITALIZE,
SEARCH_FIND,
SEARCH_FIND_NEXT,
SEARCH_FIND_PREV,
@@ -107,6 +112,13 @@ protected:
void _goto_line(int p_line) { goto_line(p_line); }
void _lookup_symbol(const String &p_symbol, int p_row, int p_column);
+ enum CaseStyle {
+ UPPER,
+ LOWER,
+ CAPITALIZE,
+ };
+ void _convert_case(CaseStyle p_case);
+
Variant get_drag_data_fw(const Point2 &p_point, Control *p_from);
bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
@@ -125,6 +137,8 @@ public:
virtual void set_edit_state(const Variant &p_state);
virtual void ensure_focus();
virtual void trim_trailing_whitespace();
+ virtual void convert_indent_to_spaces();
+ virtual void convert_indent_to_tabs();
virtual void tag_saved_version();
virtual void goto_line(int p_line, bool p_with_error = false);
@@ -134,7 +148,6 @@ public:
virtual void add_callback(const String &p_function, PoolStringArray p_args);
virtual void update_settings();
- virtual bool goto_method(const String &p_method);
virtual void set_tooltip_request_func(String p_method, Object *p_obj);
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index b693913e45..8ae7d55bdd 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -370,7 +370,8 @@ void ShaderEditor::_editor_settings_changed() {
shader_editor->get_text_edit()->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/completion/auto_brace_complete"));
shader_editor->get_text_edit()->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/cursor/scroll_past_end_of_file"));
- shader_editor->get_text_edit()->set_tab_size(EditorSettings::get_singleton()->get("text_editor/indent/tab_size"));
+ shader_editor->get_text_edit()->set_indent_size(EditorSettings::get_singleton()->get("text_editor/indent/size"));
+ shader_editor->get_text_edit()->set_indent_using_spaces(EditorSettings::get_singleton()->get("text_editor/indent/type"));
shader_editor->get_text_edit()->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/indent/draw_tabs"));
shader_editor->get_text_edit()->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_line_numbers"));
shader_editor->get_text_edit()->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/highlighting/syntax_highlighting"));
diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp
index d73349f773..0bd4d7d6d2 100644
--- a/editor/plugins/spatial_editor_plugin.cpp
+++ b/editor/plugins/spatial_editor_plugin.cpp
@@ -51,6 +51,12 @@
//#define GIZMO_SCALE_DEFAULT 0.28
#define GIZMO_SCALE_DEFAULT 0.15
+#define ZOOM_MIN_DISTANCE 0.001
+#define ZOOM_MULTIPLIER 1.08
+#define ZOOM_INDICATOR_DELAY_S 1.5
+
+#define FREELOOK_MIN_SPEED 0.1
+
void SpatialEditorViewport::_update_camera() {
if (orthogonal) {
//camera->set_orthogonal(size.width*cursor.distance,get_znear(),get_zfar());
@@ -58,20 +64,26 @@ void SpatialEditorViewport::_update_camera() {
} else
camera->set_perspective(get_fov(), get_znear(), get_zfar());
+ Transform camera_transform = to_camera_transform(cursor);
+
+ if (camera->get_global_transform() != camera_transform) {
+ camera->set_global_transform(camera_transform);
+ update_transform_gizmo_view();
+ }
+}
+
+Transform SpatialEditorViewport::to_camera_transform(const Cursor &p_cursor) const {
Transform camera_transform;
- camera_transform.translate(cursor.pos);
- camera_transform.basis.rotate(Vector3(1, 0, 0), -cursor.x_rot);
- camera_transform.basis.rotate(Vector3(0, 1, 0), -cursor.y_rot);
+ camera_transform.translate(p_cursor.pos);
+ camera_transform.basis.rotate(Vector3(1, 0, 0), -p_cursor.x_rot);
+ camera_transform.basis.rotate(Vector3(0, 1, 0), -p_cursor.y_rot);
if (orthogonal)
camera_transform.translate(0, 0, 4096);
else
- camera_transform.translate(0, 0, cursor.distance);
+ camera_transform.translate(0, 0, p_cursor.distance);
- if (camera->get_global_transform() != camera_transform) {
- camera->set_global_transform(camera_transform);
- update_transform_gizmo_view();
- }
+ return camera_transform;
}
String SpatialEditorGizmo::get_handle_name(int p_idx) const {
@@ -669,8 +681,7 @@ void SpatialEditorViewport::_list_select(InputEventMouseButton b) {
selection_menu->add_item(spat->get_name());
selection_menu->set_item_icon(i, icon);
selection_menu->set_item_metadata(i, node_path);
- selection_menu->set_item_tooltip(i, String(spat->get_name()) +
- "\nType: " + spat->get_class() + "\nPath: " + node_path);
+ selection_menu->set_item_tooltip(i, String(spat->get_name()) + "\nType: " + spat->get_class() + "\nPath: " + node_path);
}
selection_menu->set_global_position(Vector2(b.global_x, b.global_y));
@@ -704,19 +715,13 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
switch (b.button_index) {
case BUTTON_WHEEL_UP: {
-
- cursor.distance /= 1.08;
- if (cursor.distance < 0.001)
- cursor.distance = 0.001;
-
+ scale_cursor_distance(is_freelook_active() ? ZOOM_MULTIPLIER : 1.0 / ZOOM_MULTIPLIER);
} break;
- case BUTTON_WHEEL_DOWN: {
-
- if (cursor.distance < 0.001)
- cursor.distance = 0.001;
- cursor.distance *= 1.08;
+ case BUTTON_WHEEL_DOWN: {
+ scale_cursor_distance(is_freelook_active() ? 1.0 / ZOOM_MULTIPLIER : ZOOM_MULTIPLIER);
} break;
+
case BUTTON_RIGHT: {
NavigationScheme nav_scheme = (NavigationScheme)EditorSettings::get_singleton()->get("editors/3d/navigation_scheme").operator int();
@@ -729,76 +734,6 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
if (_edit.mode == TRANSFORM_NONE && b.pressed) {
- Plane cursor_plane(cursor.cursor_pos, _get_camera_normal());
-
- Vector3 ray_origin = _get_ray_pos(Vector2(b.x, b.y));
- Vector3 ray_dir = _get_ray(Vector2(b.x, b.y));
-
- //gizmo modify
-
- if (b.mod.control) {
-
- Vector<ObjectID> instances = VisualServer::get_singleton()->instances_cull_ray(ray_origin, ray_dir, get_tree()->get_root()->get_world()->get_scenario());
-
- Plane p(ray_origin, _get_camera_normal());
-
- float min_d = 1e10;
- bool found = false;
-
- for (int i = 0; i < instances.size(); i++) {
-
- Object *obj = ObjectDB::get_instance(instances[i]);
-
- if (!obj)
- continue;
-
- VisualInstance *vi = obj->cast_to<VisualInstance>();
- if (!vi)
- continue;
-
- //optimize by checking AABB (although should pre sort by distance)
- Rect3 aabb = vi->get_global_transform().xform(vi->get_aabb());
- if (p.distance_to(aabb.get_support(-ray_dir)) > min_d)
- continue;
-
- PoolVector<Face3> faces = vi->get_faces(VisualInstance::FACES_SOLID);
- int c = faces.size();
- if (c > 0) {
- PoolVector<Face3>::Read r = faces.read();
-
- for (int j = 0; j < c; j++) {
-
- Vector3 inters;
- if (r[j].intersects_ray(ray_origin, ray_dir, &inters)) {
-
- float d = p.distance_to(inters);
- if (d < 0)
- continue;
-
- if (d < min_d) {
- min_d = d;
- found = true;
- }
- }
- }
- }
- }
-
- if (found) {
-
- //cursor.cursor_pos=ray_origin+ray_dir*min_d;
- //VisualServer::get_singleton()->instance_set_transform(cursor_instance,Transform(Matrix3(),cursor.cursor_pos));
- }
-
- } else {
- Vector3 new_pos;
- if (cursor_plane.intersects_ray(ray_origin, ray_dir, &new_pos)) {
-
- //cursor.cursor_pos=new_pos;
- //VisualServer::get_singleton()->instance_set_transform(cursor_instance,Transform(Matrix3(),cursor.cursor_pos));
- }
- }
-
if (b.mod.alt) {
if (nav_scheme == NAVIGATION_MAYA)
@@ -832,6 +767,9 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
//VisualServer::get_singleton()->poly_clear(indicators);
set_message(TTR("Transform Aborted."), 3);
}
+
+ freelook_active = b.pressed;
+
} break;
case BUTTON_MIDDLE: {
@@ -1043,6 +981,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
surface->update();
}
+
} break;
}
} break;
@@ -1090,7 +1029,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
String n = _edit.gizmo->get_handle_name(_edit.gizmo_handle);
set_message(n + ": " + String(v));
- } else if (m.button_mask & 1) {
+ } else if (m.button_mask & BUTTON_MASK_LEFT) {
if (nav_scheme == NAVIGATION_MAYA && m.mod.alt) {
nav_mode = NAVIGATION_ORBIT;
@@ -1340,13 +1279,15 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
}
}
- } else if (m.button_mask & 2) {
+ } else if (m.button_mask & BUTTON_MASK_RIGHT) {
if (nav_scheme == NAVIGATION_MAYA && m.mod.alt) {
nav_mode = NAVIGATION_ZOOM;
+ } else {
+ nav_mode = NAVIGATION_LOOK;
}
- } else if (m.button_mask & 4) {
+ } else if (m.button_mask & BUTTON_MASK_MIDDLE) {
if (nav_scheme == NAVIGATION_GODOT) {
@@ -1402,12 +1343,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
if (nav_scheme == NAVIGATION_MAYA && m.mod.shift)
pan_speed *= pan_speed_modifier;
- Point2i relative;
- if (bool(EditorSettings::get_singleton()->get("editors/3d/warped_mouse_panning"))) {
- relative = Input::get_singleton()->warp_mouse_motion(m, surface->get_global_rect());
- } else {
- relative = Point2i(m.relative_x, m.relative_y);
- }
+ Point2i relative = _get_warped_mouse_motion(m);
Transform camera_transform;
@@ -1430,21 +1366,22 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
NavigationZoomStyle zoom_style = (NavigationZoomStyle)EditorSettings::get_singleton()->get("editors/3d/zoom_style").operator int();
if (zoom_style == NAVIGATION_ZOOM_HORIZONTAL) {
if (m.relative_x > 0)
- cursor.distance *= 1 - m.relative_x * zoom_speed;
+ scale_cursor_distance(1 - m.relative_x * zoom_speed);
else if (m.relative_x < 0)
- cursor.distance /= 1 + m.relative_x * zoom_speed;
+ scale_cursor_distance(1.0 / (1 + m.relative_x * zoom_speed));
} else {
if (m.relative_y > 0)
- cursor.distance *= 1 + m.relative_y * zoom_speed;
+ scale_cursor_distance(1 + m.relative_y * zoom_speed);
else if (m.relative_y < 0)
- cursor.distance /= 1 - m.relative_y * zoom_speed;
+ scale_cursor_distance(1.0 / (1 - m.relative_y * zoom_speed));
}
} break;
case NAVIGATION_ORBIT: {
- cursor.x_rot += m.relative_y / 80.0;
- cursor.y_rot += m.relative_x / 80.0;
+ Point2i relative = _get_warped_mouse_motion(m);
+ cursor.x_rot += relative.y / 80.0;
+ cursor.y_rot += relative.x / 80.0;
if (cursor.x_rot > Math_PI / 2.0)
cursor.x_rot = Math_PI / 2.0;
if (cursor.x_rot < -Math_PI / 2.0)
@@ -1453,6 +1390,30 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
_update_name();
} break;
+ case NAVIGATION_LOOK: {
+ // Freelook only works properly in perspective.
+ // It technically works too in ortho, but it's awful for a user due to fov being near zero
+ if (!orthogonal) {
+ Point2i relative = _get_warped_mouse_motion(m);
+ cursor.x_rot += relative.y / 120.0;
+ cursor.y_rot += relative.x / 120.0;
+ if (cursor.x_rot > Math_PI / 2.0)
+ cursor.x_rot = Math_PI / 2.0;
+ if (cursor.x_rot < -Math_PI / 2.0)
+ cursor.x_rot = -Math_PI / 2.0;
+
+ // Look is like Orbit, except the cursor translates, not the camera
+ Transform camera_transform = to_camera_transform(cursor);
+ Vector3 pos = camera_transform.xform(Vector3(0, 0, 0));
+ Vector3 diff = camera->get_translation() - pos;
+ cursor.pos += diff;
+
+ name = "";
+ _update_name();
+ }
+
+ } break;
+
default: {}
}
} break;
@@ -1543,6 +1504,104 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
}
}
+void SpatialEditorViewport::scale_cursor_distance(real_t scale) {
+
+ // Prevents zero distance which would short-circuit any scaling
+ if (cursor.distance < ZOOM_MIN_DISTANCE)
+ cursor.distance = ZOOM_MIN_DISTANCE;
+
+ real_t prev_distance = cursor.distance;
+ cursor.distance *= scale;
+
+ if (cursor.distance < ZOOM_MIN_DISTANCE)
+ cursor.distance = ZOOM_MIN_DISTANCE;
+
+ if (is_freelook_active()) {
+ // In freelook mode, cursor reference is reversed so it needs to be adjusted
+ Vector3 forward = camera->get_transform().basis.xform(Vector3(0, 0, -1));
+ cursor.pos += (cursor.distance - prev_distance) * forward;
+ }
+
+ zoom_indicator_delay = ZOOM_INDICATOR_DELAY_S;
+ surface->update();
+}
+
+Point2i SpatialEditorViewport::_get_warped_mouse_motion(const InputEventMouseMotion &p_ev_mouse_motion) const {
+ Point2i relative;
+ if (bool(EditorSettings::get_singleton()->get("editors/3d/warped_mouse_panning"))) {
+ relative = Input::get_singleton()->warp_mouse_motion(p_ev_mouse_motion, surface->get_global_rect());
+ } else {
+ relative = Point2i(p_ev_mouse_motion.relative_x, p_ev_mouse_motion.relative_y);
+ }
+ return relative;
+}
+
+void SpatialEditorViewport::_update_freelook(real_t delta) {
+
+ if (!is_freelook_active())
+ return;
+
+ Vector3 forward = camera->get_transform().basis.xform(Vector3(0, 0, -1));
+ Vector3 right = camera->get_transform().basis.xform(Vector3(1, 0, 0));
+ Vector3 up = camera->get_transform().basis.xform(Vector3(0, 1, 0));
+
+ int key_left = ED_SHORTCUT("spatial_editor/freelook_left", TTR("Freelook Left"), KEY_A)->get_shortcut().key.scancode;
+ int key_right = ED_SHORTCUT("spatial_editor/freelook_right", TTR("Freelook Right"), KEY_D)->get_shortcut().key.scancode;
+ int key_forward = ED_SHORTCUT("spatial_editor/freelook_forward", TTR("Freelook Forward"), KEY_W)->get_shortcut().key.scancode;
+ int key_backwards = ED_SHORTCUT("spatial_editor/freelook_backwards", TTR("Freelook Backwards"), KEY_S)->get_shortcut().key.scancode;
+ int key_up = ED_SHORTCUT("spatial_editor/freelook_up", TTR("Freelook Up"), KEY_Q)->get_shortcut().key.scancode;
+ int key_down = ED_SHORTCUT("spatial_editor/freelook_down", TTR("Freelook Down"), KEY_E)->get_shortcut().key.scancode;
+ int key_speed_modifier = ED_SHORTCUT("spatial_editor/freelook_speed_modifier", TTR("Freelook Speed Modifier"), KEY_SHIFT)->get_shortcut().key.scancode;
+
+ Vector3 velocity;
+ bool pressed = false;
+ bool speed_modifier = false;
+
+ const Input &input = *Input::get_singleton();
+
+ if (input.is_key_pressed(key_left)) {
+ velocity -= right;
+ pressed = true;
+ }
+ if (input.is_key_pressed(key_right)) {
+ velocity += right;
+ pressed = true;
+ }
+ if (input.is_key_pressed(key_forward)) {
+ velocity += forward;
+ pressed = true;
+ }
+ if (input.is_key_pressed(key_backwards)) {
+ velocity -= forward;
+ pressed = true;
+ }
+ if (input.is_key_pressed(key_up)) {
+ velocity += up;
+ pressed = true;
+ }
+ if (input.is_key_pressed(key_down)) {
+ velocity -= up;
+ pressed = true;
+ }
+ if (input.is_key_pressed(key_speed_modifier)) {
+ speed_modifier = true;
+ }
+
+ if (pressed) {
+ const EditorSettings &s = *EditorSettings::get_singleton();
+ const real_t base_speed = s.get("editors/3d/freelook_base_speed");
+ const real_t modifier_speed_factor = s.get("editors/3d/freelook_modifier_speed_factor");
+
+ real_t speed = base_speed * cursor.distance;
+ if (speed_modifier)
+ speed *= modifier_speed_factor;
+
+ velocity.normalize();
+
+ cursor.pos += velocity * (speed * delta);
+ }
+}
+
void SpatialEditorViewport::set_message(String p_message, float p_time) {
message = p_message;
@@ -1579,6 +1638,17 @@ void SpatialEditorViewport::_notification(int p_what) {
}
*/
+ real_t delta = get_tree()->get_idle_process_time();
+
+ if (zoom_indicator_delay > 0) {
+ zoom_indicator_delay -= delta;
+ if (zoom_indicator_delay <= 0) {
+ surface->update();
+ }
+ }
+
+ _update_freelook(delta);
+
_update_camera();
Map<Node *, Object *> &selection = editor_selection->get_selection();
@@ -1674,6 +1744,23 @@ void SpatialEditorViewport::_notification(int p_what) {
}
}
+// TODO That should be part of the drawing API...
+static void stroke_rect(CanvasItem *ci, Rect2 rect, Color color, real_t width = 1.0) {
+
+ // a---b
+ // | |
+ // c---d
+ Vector2 a(rect.pos);
+ Vector2 b(rect.pos.x + rect.size.x, rect.pos.y);
+ Vector2 c(rect.pos.x, rect.pos.y + rect.size.y);
+ Vector2 d(rect.pos + rect.size);
+
+ ci->draw_line(a, b, color, width);
+ ci->draw_line(b, d, color, width);
+ ci->draw_line(d, c, color, width);
+ ci->draw_line(c, a, color, width);
+}
+
void SpatialEditorViewport::_draw() {
if (surface->has_focus()) {
@@ -1730,10 +1817,37 @@ void SpatialEditorViewport::_draw() {
draw_rect = Rect2(Vector2(), s).clip(draw_rect);
- surface->draw_line(draw_rect.pos, draw_rect.pos + Vector2(draw_rect.size.x, 0), Color(0.6, 0.6, 0.1, 0.5), 2.0);
- surface->draw_line(draw_rect.pos + Vector2(draw_rect.size.x, 0), draw_rect.pos + draw_rect.size, Color(0.6, 0.6, 0.1, 0.5), 2.0);
- surface->draw_line(draw_rect.pos + draw_rect.size, draw_rect.pos + Vector2(0, draw_rect.size.y), Color(0.6, 0.6, 0.1, 0.5), 2.0);
- surface->draw_line(draw_rect.pos, draw_rect.pos + Vector2(0, draw_rect.size.y), Color(0.6, 0.6, 0.1, 0.5), 2.0);
+ stroke_rect(surface, draw_rect, Color(0.6, 0.6, 0.1, 0.5), 2.0);
+
+ } else {
+
+ if (zoom_indicator_delay > 0.0) {
+ // Show indicative zoom factor
+
+ real_t min_distance = ZOOM_MIN_DISTANCE; // TODO Why not pick znear to limit zoom?
+ real_t max_distance = camera->get_zfar();
+ real_t scale_length = (max_distance - min_distance);
+
+ if (Math::abs(scale_length) > CMP_EPSILON) {
+ real_t logscale_t = 1.0 - Math::log(1 + cursor.distance - min_distance) / Math::log(1 + scale_length);
+
+ // There is no real maximum distance so that factor can become negative,
+ // Let's make it look asymptotic instead (will decrease slower and slower).
+ if (logscale_t < 0.25)
+ logscale_t = 0.25 * Math::exp(4.0 * logscale_t - 1.0);
+
+ Vector2 surface_size = surface->get_size();
+ real_t h = surface_size.y / 2.0;
+ real_t y = (surface_size.y - h) / 2.0;
+
+ Rect2 r(10, y, 6, h);
+ real_t sy = r.size.y * logscale_t;
+
+ surface->draw_rect(r, Color(1, 1, 1, 0.2));
+ surface->draw_rect(Rect2(r.pos.x, r.pos.y + r.size.y - sy, r.size.x, sy), Color(1, 1, 1, 0.6));
+ stroke_rect(surface, r.grow(1), Color(0, 0, 0, 0.7));
+ }
+ }
}
}
@@ -2143,6 +2257,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
clicked_includes_current = false;
orthogonal = false;
message_time = 0;
+ zoom_indicator_delay = 0.0;
spatial_editor = p_spatial_editor;
ViewportContainer *c = memnew(ViewportContainer);
@@ -2205,6 +2320,8 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
preview = NULL;
gizmo_scale = 1.0;
+ freelook_active = false;
+
selection_menu = memnew(PopupMenu);
add_child(selection_menu);
selection_menu->set_custom_minimum_size(Vector2(100, 0));
@@ -2278,7 +2395,7 @@ void SpatialEditor::update_transform_gizmo() {
gizmo.transform.origin = pcenter;
gizmo.transform.basis = gizmo_basis;
- for (int i = 0; i < 4; i++) {
+ for (int i = 0; i < VIEWPORTS_COUNT; i++) {
viewports[i]->update_transform_gizmo_view();
}
}
@@ -2434,7 +2551,7 @@ void SpatialEditor::set_state(const Dictionary &p_state) {
Array vp = d["viewports"];
ERR_FAIL_COND(vp.size() > 4);
- for (int i = 0; i < 4; i++) {
+ for (int i = 0; i < VIEWPORTS_COUNT; i++) {
viewports[i]->set_state(vp[i]);
}
}
@@ -2726,7 +2843,7 @@ void SpatialEditor::_menu_item_pressed(int p_option) {
} break;
case MENU_VIEW_USE_3_VIEWPORTS: {
- for (int i = 1; i < 4; i++) {
+ for (int i = 1; i < VIEWPORTS_COUNT; i++) {
if (i == 1)
viewports[i]->hide();
@@ -2752,7 +2869,7 @@ void SpatialEditor::_menu_item_pressed(int p_option) {
} break;
case MENU_VIEW_USE_3_VIEWPORTS_ALT: {
- for (int i = 1; i < 4; i++) {
+ for (int i = 1; i < VIEWPORTS_COUNT; i++) {
if (i == 1)
viewports[i]->hide();
@@ -2778,7 +2895,7 @@ void SpatialEditor::_menu_item_pressed(int p_option) {
} break;
case MENU_VIEW_USE_4_VIEWPORTS: {
- for (int i = 1; i < 4; i++) {
+ for (int i = 1; i < VIEWPORTS_COUNT; i++) {
viewports[i]->show();
}
@@ -3149,34 +3266,12 @@ void SpatialEditor::_finish_indicators() {
VisualServer::get_singleton()->free(cursor_mesh);
}
-void SpatialEditor::_instance_scene() {
-#if 0
- EditorNode *en = get_scene()->get_root_node()->cast_to<EditorNode>();
- ERR_FAIL_COND(!en);
- String path = en->get_filesystem_dock()->get_selected_path();
- if (path=="") {
- set_message(TTR("No scene selected to instance!"));
- return;
- }
-
- undo_redo->create_action(TTR("Instance at Cursor"));
-
- Node* scene = en->request_instance_scene(path);
-
- if (!scene) {
- set_message(TTR("Could not instance scene!"));
- undo_redo->commit_action(); //bleh
- return;
- }
-
- Spatial *s = scene->cast_to<Spatial>();
- if (s) {
-
- undo_redo->add_do_method(s,"set_global_transform",Transform(Matrix3(),cursor.cursor_pos));
+bool SpatialEditor::is_any_freelook_active() const {
+ for (unsigned int i = 0; i < VIEWPORTS_COUNT; ++i) {
+ if (viewports[i]->is_freelook_active())
+ return true;
}
-
- undo_redo->commit_action();
-#endif
+ return false;
}
void SpatialEditor::_unhandled_key_input(InputEvent p_event) {
@@ -3203,19 +3298,27 @@ void SpatialEditor::_unhandled_key_input(InputEvent p_event) {
case InputEvent::KEY: {
- const InputEventKey &k = p_event.key;
+ // Note: need to check is_echo because first person movement keys might still be held
+ if (!is_any_freelook_active() && !p_event.is_echo()) {
- if (!k.pressed)
- break;
+ const InputEventKey &k = p_event.key;
+
+ if (!k.pressed)
+ break;
+
+ if (ED_IS_SHORTCUT("spatial_editor/tool_select", p_event))
+ _menu_item_pressed(MENU_TOOL_SELECT);
+
+ else if (ED_IS_SHORTCUT("spatial_editor/tool_move", p_event))
+ _menu_item_pressed(MENU_TOOL_MOVE);
- switch (k.scancode) {
+ else if (ED_IS_SHORTCUT("spatial_editor/tool_rotate", p_event))
+ _menu_item_pressed(MENU_TOOL_ROTATE);
- case KEY_Q: _menu_item_pressed(MENU_TOOL_SELECT); break;
- case KEY_W: _menu_item_pressed(MENU_TOOL_MOVE); break;
- case KEY_E: _menu_item_pressed(MENU_TOOL_ROTATE); break;
- case KEY_R: _menu_item_pressed(MENU_TOOL_SCALE); break;
+ else if (ED_IS_SHORTCUT("spatial_editor/tool_scale", p_event))
+ _menu_item_pressed(MENU_TOOL_SCALE);
- case KEY_Z: {
+ else if (ED_IS_SHORTCUT("spatial_editor/display_wireframe", p_event)) {
if (k.mod.shift || k.mod.control || k.mod.command)
break;
@@ -3224,10 +3327,7 @@ void SpatialEditor::_unhandled_key_input(InputEvent p_event) {
} else {
_menu_item_pressed(MENU_VIEW_DISPLAY_WIREFRAME);
}
- } break;
-
-#if 0
-#endif
+ }
}
} break;
@@ -3242,8 +3342,6 @@ void SpatialEditor::_notification(int p_what) {
tool_button[SpatialEditor::TOOL_MODE_ROTATE]->set_icon(get_icon("ToolRotate", "EditorIcons"));
tool_button[SpatialEditor::TOOL_MODE_SCALE]->set_icon(get_icon("ToolScale", "EditorIcons"));
tool_button[SpatialEditor::TOOL_MODE_LIST_SELECT]->set_icon(get_icon("ListSelect", "EditorIcons"));
- instance_button->set_icon(get_icon("SpatialAdd", "EditorIcons"));
- instance_button->hide();
view_menu->get_popup()->set_item_icon(view_menu->get_popup()->get_item_index(MENU_VIEW_USE_1_VIEWPORT), get_icon("Panels1", "EditorIcons"));
view_menu->get_popup()->set_item_icon(view_menu->get_popup()->get_item_index(MENU_VIEW_USE_2_VIEWPORTS), get_icon("Panels2", "EditorIcons"));
@@ -3344,7 +3442,7 @@ void SpatialEditor::_toggle_maximize_view(Object *p_viewport) {
if (!maximized) {
- for (int i = 0; i < 4; i++) {
+ for (int i = 0; i < VIEWPORTS_COUNT; i++) {
if (i == index)
viewports[i]->set_area_as_parent_rect();
else
@@ -3352,7 +3450,7 @@ void SpatialEditor::_toggle_maximize_view(Object *p_viewport) {
}
} else {
- for (int i = 0; i < 4; i++)
+ for (int i = 0; i < VIEWPORTS_COUNT; i++)
viewports[i]->show();
if (view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(MENU_VIEW_USE_1_VIEWPORT)))
@@ -3383,7 +3481,6 @@ void SpatialEditor::_bind_methods() {
ClassDB::bind_method("_node_removed", &SpatialEditor::_node_removed);
ClassDB::bind_method("_menu_item_pressed", &SpatialEditor::_menu_item_pressed);
ClassDB::bind_method("_xform_dialog_action", &SpatialEditor::_xform_dialog_action);
- ClassDB::bind_method("_instance_scene", &SpatialEditor::_instance_scene);
ClassDB::bind_method("_get_editor_data", &SpatialEditor::_get_editor_data);
ClassDB::bind_method("_request_gizmo", &SpatialEditor::_request_gizmo);
ClassDB::bind_method("_default_light_angle_input", &SpatialEditor::_default_light_angle_input);
@@ -3399,7 +3496,7 @@ void SpatialEditor::clear() {
settings_znear->set_value(EDITOR_DEF("editors/3d/default_z_near", 0.1));
settings_zfar->set_value(EDITOR_DEF("editors/3d/default_z_far", 1500.0));
- for (int i = 0; i < 4; i++) {
+ for (int i = 0; i < VIEWPORTS_COUNT; i++) {
viewports[i]->reset();
}
@@ -3415,7 +3512,7 @@ void SpatialEditor::clear() {
}
}
- for (int i = 0; i < 4; i++) {
+ for (int i = 0; i < VIEWPORTS_COUNT; i++) {
viewports[i]->view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(SpatialEditorViewport::VIEW_AUDIO_LISTENER), i == 0);
viewports[i]->viewport->set_as_audio_listener(i == 0);
@@ -3520,12 +3617,6 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
tool_button[TOOL_MODE_SCALE]->connect("pressed", this, "_menu_item_pressed", button_binds);
tool_button[TOOL_MODE_SCALE]->set_tooltip(TTR("Scale Mode (R)"));
- instance_button = memnew(Button);
- hbc_menu->add_child(instance_button);
- instance_button->set_flat(true);
- instance_button->connect("pressed", this, "_instance_scene");
- instance_button->hide();
-
VSeparator *vs = memnew(VSeparator);
hbc_menu->add_child(vs);
@@ -3553,6 +3644,13 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
ED_SHORTCUT("spatial_editor/focus_selection", TTR("Focus Selection"), KEY_F);
ED_SHORTCUT("spatial_editor/align_selection_with_view", TTR("Align Selection With View"), KEY_MASK_ALT + KEY_MASK_CMD + KEY_F);
+ ED_SHORTCUT("spatial_editor/tool_select", TTR("Tool Select"), KEY_Q);
+ ED_SHORTCUT("spatial_editor/tool_move", TTR("Tool Move"), KEY_W);
+ ED_SHORTCUT("spatial_editor/tool_rotate", TTR("Tool Rotate"), KEY_E);
+ ED_SHORTCUT("spatial_editor/tool_scale", TTR("Tool Scale"), KEY_R);
+
+ ED_SHORTCUT("spatial_editor/display_wireframe", TTR("Display Wireframe"), KEY_Z);
+
PopupMenu *p;
transform_menu = memnew(MenuButton);
@@ -3618,7 +3716,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
viewport_base = memnew(Control);
shader_split->add_child(viewport_base);
viewport_base->set_v_size_flags(SIZE_EXPAND_FILL);
- for (int i = 0; i < 4; i++) {
+ for (int i = 0; i < VIEWPORTS_COUNT; i++) {
viewports[i] = memnew(SpatialEditorViewport(this, editor, i));
viewports[i]->connect("toggle_maximize_view", this, "_toggle_maximize_view");
diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h
index 4302927426..3e46724efc 100644
--- a/editor/plugins/spatial_editor_plugin.h
+++ b/editor/plugins/spatial_editor_plugin.h
@@ -114,6 +114,8 @@ private:
bool orthogonal;
float gizmo_scale;
+ bool freelook_active;
+
struct _RayResult {
Spatial *item;
@@ -168,7 +170,8 @@ private:
NAVIGATION_NONE,
NAVIGATION_PAN,
NAVIGATION_ZOOM,
- NAVIGATION_ORBIT
+ NAVIGATION_ORBIT,
+ NAVIGATION_LOOK
};
enum TransformMode {
TRANSFORM_NONE,
@@ -203,8 +206,6 @@ private:
struct Cursor {
- Vector3 cursor_pos;
-
Vector3 pos;
float x_rot, y_rot, distance;
bool region_select;
@@ -217,6 +218,10 @@ private:
}
} cursor;
+ void scale_cursor_distance(real_t scale);
+
+ real_t zoom_indicator_delay;
+
RID move_gizmo_instance[3], rotate_gizmo_instance[3];
String last_message;
@@ -227,10 +232,12 @@ private:
//
void _update_camera();
+ Transform to_camera_transform(const Cursor &p_cursor) const;
void _draw();
void _smouseenter();
void _sinput(const InputEvent &p_ie);
+ void _update_freelook(real_t delta);
SpatialEditor *spatial_editor;
Camera *previewing;
@@ -243,6 +250,7 @@ private:
void _selection_result_pressed(int);
void _selection_menu_hide();
void _list_select(InputEventMouseButton b);
+ Point2i _get_warped_mouse_motion(const InputEventMouseMotion &p_ev_mouse_motion) const;
protected:
void _notification(int p_what);
@@ -255,6 +263,7 @@ public:
void set_state(const Dictionary &p_state);
Dictionary get_state() const;
void reset();
+ bool is_freelook_active() const { return freelook_active; }
void focus_selection();
@@ -295,11 +304,13 @@ public:
};
private:
+ static const unsigned int VIEWPORTS_COUNT = 4;
+
EditorNode *editor;
EditorSelection *editor_selection;
Control *viewport_base;
- SpatialEditorViewport *viewports[4];
+ SpatialEditorViewport *viewports[VIEWPORTS_COUNT];
VSplitContainer *shader_split;
HSplitContainer *palette_split;
@@ -385,7 +396,6 @@ private:
};
Button *tool_button[TOOL_MAX];
- Button *instance_button;
MenuButton *transform_menu;
MenuButton *view_menu;
@@ -418,7 +428,7 @@ private:
ViewportContainer *settings_light_base;
Viewport *settings_light_vp;
ColorPickerButton *settings_ambient_color;
- Image settings_light_dir_image;
+ Ref<Image> settings_light_dir_image;
void _xform_dialog_action();
void _menu_item_pressed(int p_option);
@@ -456,6 +466,8 @@ private:
void _update_default_light_angle();
void _default_light_angle_input(const InputEvent &p_event);
+ bool is_any_freelook_active() const;
+
protected:
void _notification(int p_what);
//void _gui_input(InputEvent p_event);
diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp
index 4c49b467d8..89995edf05 100644
--- a/editor/plugins/texture_region_editor_plugin.cpp
+++ b/editor/plugins/texture_region_editor_plugin.cpp
@@ -678,12 +678,13 @@ void TextureRegionEditor::_edit_region() {
}
autoslice_cache.clear();
- Image i;
- if (i.load(texture->get_path()) == OK) {
+ Ref<Image> i;
+ i.instance();
+ if (i->load(texture->get_path()) == OK) {
BitMap bm;
bm.create_from_image_alpha(i);
- for (int y = 0; y < i.get_height(); y++) {
- for (int x = 0; x < i.get_width(); x++) {
+ for (int y = 0; y < i->get_height(); y++) {
+ for (int x = 0; x < i->get_width(); x++) {
if (bm.get_bit(Point2(x, y))) {
bool found = false;
for (List<Rect2>::Element *E = autoslice_cache.front(); E; E = E->next()) {
diff --git a/editor/project_export.cpp b/editor/project_export.cpp
index 90db23d236..40ffb8e246 100644
--- a/editor/project_export.cpp
+++ b/editor/project_export.cpp
@@ -229,6 +229,8 @@ void ProjectExportDialog::_edit_preset(int p_index) {
}
if (needs_templates)
export_templates_error->show();
+ else
+ export_templates_error->hide();
export_button->set_disabled(true);
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index 7e9dc5f4f1..2d3b3a2200 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -92,18 +92,18 @@ private:
if (mode != MODE_IMPORT) {
- if (d->file_exists("godot.cfg")) {
+ if (d->file_exists("project.godot")) {
- error->set_text(TTR("Invalid project path, godot.cfg must not exist."));
+ error->set_text(TTR("Invalid project path, project.godot must not exist."));
memdelete(d);
return "";
}
} else {
- if (valid_path != "" && !d->file_exists("godot.cfg")) {
+ if (valid_path != "" && !d->file_exists("project.godot")) {
- error->set_text(TTR("Invalid project path, godot.cfg must exist."));
+ error->set_text(TTR("Invalid project path, project.godot must exist."));
memdelete(d);
return "";
}
@@ -136,7 +136,7 @@ private:
String p = p_path;
if (mode == MODE_IMPORT) {
- if (p.ends_with("godot.cfg")) {
+ if (p.ends_with("project.godot")) {
p = p.get_base_dir();
}
@@ -162,7 +162,7 @@ private:
fdialog->set_mode(FileDialog::MODE_OPEN_FILE);
fdialog->clear_filters();
- fdialog->add_filter("godot.cfg ; " _MKSTR(VERSION_NAME) " Project");
+ fdialog->add_filter("project.godot ; " _MKSTR(VERSION_NAME) " Project");
} else {
fdialog->set_mode(FileDialog::MODE_OPEN_DIR);
}
@@ -186,9 +186,9 @@ private:
} else {
if (mode == MODE_NEW) {
- FileAccess *f = FileAccess::open(dir.plus_file("/godot.cfg"), FileAccess::WRITE);
+ FileAccess *f = FileAccess::open(dir.plus_file("/project.godot"), FileAccess::WRITE);
if (!f) {
- error->set_text(TTR("Couldn't create godot.cfg in project path."));
+ error->set_text(TTR("Couldn't create project.godot in project path."));
} else {
f->store_line("; Engine configuration file.");
@@ -741,7 +741,7 @@ void ProjectManager::_load_recent_projects() {
continue;
String project = _name.get_slice("/", 1);
- String conf = path.plus_file("godot.cfg");
+ String conf = path.plus_file("project.godot");
bool favorite = (_name.begins_with("favorite_projects/")) ? true : false;
uint64_t last_modified = 0;
@@ -806,11 +806,12 @@ void ProjectManager::_load_recent_projects() {
if (cf->has_section_key("application", "icon")) {
String appicon = cf->get_value("application", "icon");
if (appicon != "") {
- Image img;
- Error err = img.load(appicon.replace_first("res://", path + "/"));
+ Ref<Image> img;
+ img.instance();
+ Error err = img->load(appicon.replace_first("res://", path + "/"));
if (err == OK) {
- img.resize(64, 64);
+ img->resize(64, 64);
Ref<ImageTexture> it = memnew(ImageTexture);
it->create_from_image(img);
icon = it;
@@ -1006,7 +1007,7 @@ void ProjectManager::_scan_dir(DirAccess *da, float pos, float total, List<Strin
while (n != String()) {
if (da->current_is_dir() && !n.begins_with(".")) {
subdirs.push_front(n);
- } else if (n == "godot.cfg") {
+ } else if (n == "project.godot") {
r_projects->push_back(da->get_current_dir());
}
n = da->get_next();
@@ -1117,7 +1118,7 @@ void ProjectManager::_files_dropped(PoolStringArray p_files, int p_screen) {
dir->list_dir_begin();
String file = dir->get_next();
while (confirm && file != String()) {
- if (!dir->current_is_dir() && file.ends_with("godot.cfg")) {
+ if (!dir->current_is_dir() && file.ends_with("project.godot")) {
confirm = false;
}
file = dir->get_next();
@@ -1191,7 +1192,7 @@ ProjectManager::ProjectManager() {
}
}
- FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("filesytem/file_dialog/show_hidden_files"));
+ FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("filesystem/file_dialog/show_hidden_files"));
set_area_as_parent_rect();
set_theme(create_editor_theme());
@@ -1324,7 +1325,7 @@ ProjectManager::ProjectManager() {
if (StreamPeerSSL::is_available()) {
asset_library = memnew(EditorAssetLibrary(true));
- asset_library->set_name("Templates");
+ asset_library->set_name(TTR("Templates"));
tabs->add_child(asset_library);
asset_library->connect("install_asset", this, "_install_project");
} else {
diff --git a/editor/project_settings.cpp b/editor/project_settings.cpp
index a45ea26086..152e72ca44 100644
--- a/editor/project_settings.cpp
+++ b/editor/project_settings.cpp
@@ -78,7 +78,7 @@ void ProjectSettings::_notification(int p_what) {
case NOTIFICATION_ENTER_TREE: {
globals_editor->edit(GlobalConfig::get_singleton());
- search_button->set_icon(get_icon("Zoom", "EditorIcons"));
+ search_button->set_icon(get_icon("Search", "EditorIcons"));
clear_button->set_icon(get_icon("Close", "EditorIcons"));
translation_list->connect("button_pressed", this, "_translation_delete");
@@ -481,9 +481,9 @@ void ProjectSettings::_update_actions() {
TreeItem *item = input_editor->create_item(root);
//item->set_cell_mode(0,TreeItem::CELL_MODE_CHECK);
item->set_text(0, name);
- item->add_button(0, get_icon("Add", "EditorIcons"), 1);
+ item->add_button(0, get_icon("Add", "EditorIcons"), 1, false, TTR("Add Event"));
if (!GlobalConfig::get_singleton()->get_input_presets().find(pi.name)) {
- item->add_button(0, get_icon("Remove", "EditorIcons"), 2);
+ item->add_button(0, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove"));
item->set_editable(0, true);
}
item->set_custom_bg_color(0, get_color("prop_subsection", "Editor"));
@@ -553,7 +553,7 @@ void ProjectSettings::_update_actions() {
action->set_icon(0, get_icon("JoyAxis", "EditorIcons"));
} break;
}
- action->add_button(0, get_icon("Remove", "EditorIcons"), 2);
+ action->add_button(0, get_icon("Remove", "EditorIcons"), 2, false, TTR("Remove"));
action->set_metadata(0, i);
action->set_meta("__input", ie);
}
@@ -1012,7 +1012,7 @@ void ProjectSettings::_update_translations() {
t->set_text(0, translations[i].replace_first("res://", ""));
t->set_tooltip(0, translations[i]);
t->set_metadata(0, i);
- t->add_button(0, get_icon("Del", "EditorIcons"), 0);
+ t->add_button(0, get_icon("Del", "EditorIcons"), 0, false, TTR("Remove"));
}
}
@@ -1058,7 +1058,7 @@ void ProjectSettings::_update_translations() {
t->set_text(0, keys[i].replace_first("res://", ""));
t->set_tooltip(0, keys[i]);
t->set_metadata(0, keys[i]);
- t->add_button(0, get_icon("Del", "EditorIcons"), 0);
+ t->add_button(0, get_icon("Del", "EditorIcons"), 0, false, TTR("Remove"));
if (keys[i] == remap_selected) {
t->select(0);
translation_res_option_add_button->set_disabled(false);
@@ -1076,7 +1076,7 @@ void ProjectSettings::_update_translations() {
t2->set_text(0, path.replace_first("res://", ""));
t2->set_tooltip(0, path);
t2->set_metadata(0, j);
- t2->add_button(0, get_icon("Del", "EditorIcons"), 0);
+ t2->add_button(0, get_icon("Del", "EditorIcons"), 0, false, TTR("Remove"));
t2->set_cell_mode(1, TreeItem::CELL_MODE_RANGE);
t2->set_text(1, langnames);
t2->set_editable(1, true);
@@ -1168,7 +1168,7 @@ void ProjectSettings::_bind_methods() {
ProjectSettings::ProjectSettings(EditorData *p_data) {
singleton = this;
- set_title(TTR("Project Settings (godot.cfg)"));
+ set_title(TTR("Project Settings (project.godot)"));
set_resizable(true);
undo_redo = &p_data->get_undo_redo();
data = p_data;
@@ -1264,7 +1264,6 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
//globals_editor->hide_top_label();
globals_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL);
globals_editor->get_property_editor()->register_text_enter(search_box);
- globals_editor->get_property_editor()->set_capitalize_paths(false);
globals_editor->get_property_editor()->get_scene_tree()->connect("cell_selected", this, "_item_selected");
globals_editor->get_property_editor()->connect("property_toggled", this, "_item_checked", varray(), CONNECT_DEFERRED);
globals_editor->get_property_editor()->connect("property_edited", this, "_settings_prop_edited");
diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp
index 1cc58f6dcf..1bd00f3d1e 100644
--- a/editor/property_editor.cpp
+++ b/editor/property_editor.cpp
@@ -116,7 +116,6 @@ void CustomPropertyEditor::_menu_option(int p_which) {
Set<String> valid_extensions;
for (List<String>::Element *E = extensions.front(); E; E = E->next()) {
- print_line("found: " + E->get());
valid_extensions.insert(E->get());
}
@@ -324,7 +323,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
c->show();
checks20gc->set_size(checks20gc->get_minimum_size());
- set_size(checks20gc->get_position() + checks20gc->get_size() + Vector2(4, 4) * EDSCALE);
+ set_size(checks20gc->get_position() + checks20gc->get_size() + c->get_size() + Vector2(4, 4) * EDSCALE);
} break;
case Variant::INT:
@@ -862,15 +861,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
*/
} break;
- case Variant::IMAGE: {
- List<String> names;
- names.push_back(TTR("New"));
- names.push_back(TTR("Load"));
- names.push_back(TTR("Clear"));
- config_action_buttons(names);
-
- } break;
case Variant::NODE_PATH: {
List<String> names;
@@ -1062,16 +1053,6 @@ void CustomPropertyEditor::_file_selected(String p_file) {
emit_signal("variant_changed");
hide();
} break;
- case Variant::IMAGE: {
-
- Image image;
- Error err = ImageLoader::load_image(p_file, &image);
- ERR_EXPLAIN(TTR("Couldn't load image"));
- ERR_FAIL_COND(err);
- v = image;
- emit_signal("variant_changed");
- hide();
- } break;
default: {}
}
}
@@ -1388,36 +1369,7 @@ void CustomPropertyEditor::_action_pressed(int p_which) {
}
} break;
- case Variant::IMAGE: {
-
- if (p_which == 0) {
- //new image too difficult
- ERR_PRINT("New Image Unimplemented");
-
- } else if (p_which == 1) {
-
- file->set_access(EditorFileDialog::ACCESS_RESOURCES);
- file->set_mode(EditorFileDialog::MODE_OPEN_FILE);
- List<String> extensions;
- ImageLoader::get_recognized_extensions(&extensions);
-
- file->clear_filters();
-
- for (List<String>::Element *E = extensions.front(); E; E = E->next()) {
-
- file->add_filter("*." + E->get() + " ; " + E->get().to_upper());
- }
-
- file->popup_centered_ratio();
-
- } else if (p_which == 2) {
- v = Image();
- emit_signal("variant_changed");
- hide();
- }
-
- } break;
default: {};
}
}
@@ -1757,9 +1709,7 @@ void CustomPropertyEditor::_modified(String p_string) {
emit_signal("variant_changed");
*/
} break;
- case Variant::IMAGE: {
- } break;
case Variant::NODE_PATH: {
v = NodePath(value_editor[0]->get_text());
@@ -2358,15 +2308,6 @@ void PropertyEditor::set_item_text(TreeItem *p_item, int p_type, const String &p
//p_item->set_text(1,obj->get(p_name));
} break;
- case Variant::IMAGE: {
-
- Image img = obj->get(p_name);
- if (img.empty())
- p_item->set_text(1, "[Image (empty)]");
- else
- p_item->set_text(1, "[Image " + itos(img.get_width()) + "x" + itos(img.get_height()) + "-" + String(Image::get_format_name(img.get_format())) + "]");
-
- } break;
case Variant::NODE_PATH: {
p_item->set_text(1, obj->get(p_name));
@@ -2431,7 +2372,9 @@ void PropertyEditor::set_item_text(TreeItem *p_item, int p_type, const String &p
}
}
- if (!res->is_class("Texture")) {
+ if (res->is_class("Script")) {
+ p_item->set_text(1, res->get_path().get_file());
+ } else if (!res->is_class("Texture")) {
//texture already previews via itself
EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res, this, "_resource_preview_done", p_item->get_instance_ID());
}
@@ -2768,10 +2711,7 @@ TreeItem *PropertyEditor::get_parent_node(String p_path, HashMap<String, TreeIte
item = tree->create_item(parent);
String name = (p_path.find("/") != -1) ? p_path.right(p_path.find_last("/") + 1) : p_path;
- if (capitalize_paths)
- item->set_text(0, name.capitalize());
- else
- item->set_text(0, name);
+ item->set_text(0, capitalize_paths ? name.capitalize() : name);
item->set_tooltip(0, p_path);
if (item->get_parent() != root) {
item->set_icon(0, get_icon("Folder", "EditorIcons"));
@@ -3404,6 +3344,13 @@ void PropertyEditor::update_tree() {
item->set_icon(0, get_icon("ArrayData", "EditorIcons"));
} break;
+ case Variant::DICTIONARY: {
+
+ item->set_cell_mode(1, TreeItem::CELL_MODE_STRING);
+ item->set_editable(1, false);
+ item->set_text(1, obj->get(p.name).operator String());
+
+ } break;
case Variant::POOL_INT_ARRAY: {
@@ -3583,19 +3530,7 @@ void PropertyEditor::update_tree() {
item->set_icon(0, get_icon("Color", "EditorIcons"));
} break;
- case Variant::IMAGE: {
-
- item->set_cell_mode(1, TreeItem::CELL_MODE_CUSTOM);
- item->set_editable(1, !read_only);
- Image img = obj->get(p.name);
- if (img.empty())
- item->set_text(1, "[Image (empty)]");
- else
- item->set_text(1, "[Image " + itos(img.get_width()) + "x" + itos(img.get_height()) + "-" + String(Image::get_format_name(img.get_format())) + "]");
- if (show_type_icons)
- item->set_icon(0, get_icon("Image", "EditorIcons"));
- } break;
case Variant::NODE_PATH: {
item->set_cell_mode(1, TreeItem::CELL_MODE_STRING);
@@ -3649,7 +3584,9 @@ void PropertyEditor::update_tree() {
} else if (res.is_valid()) {
item->set_tooltip(1, res->get_name() + " (" + res->get_class() + ")");
}
- if (!res->is_class("Texture")) {
+ if (res->is_class("Script")) {
+ item->set_text(1, res->get_path().get_file());
+ } else if (!res->is_class("Texture")) {
//texture already previews via itself
EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res, this, "_resource_preview_done", item->get_instance_ID());
}
@@ -3915,9 +3852,7 @@ void PropertyEditor::_item_edited() {
case Variant::COLOR: {
//_edit_set(name,item->get_custom_bg_color(0));
} break;
- case Variant::IMAGE: {
- } break;
case Variant::NODE_PATH: {
_edit_set(name, NodePath(item->get_text(1)), refresh_all);
@@ -4295,9 +4230,15 @@ String PropertyEditor::get_selected_path() const {
return "";
}
-void PropertyEditor::set_capitalize_paths(bool p_capitalize) {
+bool PropertyEditor::is_capitalize_paths_enabled() const {
+
+ return capitalize_paths;
+}
+
+void PropertyEditor::set_enable_capitalize_paths(bool p_capitalize) {
capitalize_paths = p_capitalize;
+ update_tree_pending = true;
}
void PropertyEditor::set_autoclear(bool p_enable) {
diff --git a/editor/property_editor.h b/editor/property_editor.h
index 3b68e80ac3..b88ba38e19 100644
--- a/editor/property_editor.h
+++ b/editor/property_editor.h
@@ -272,7 +272,8 @@ public:
custom_editor->set_read_only(p_read_only);
}
- void set_capitalize_paths(bool p_capitalize);
+ bool is_capitalize_paths_enabled() const;
+ void set_enable_capitalize_paths(bool p_capitalize);
void set_autoclear(bool p_enable);
void set_show_categories(bool p_show);
diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp
index 565d25e0e5..752965c806 100644
--- a/editor/property_selector.cpp
+++ b/editor/property_selector.cpp
@@ -136,7 +136,6 @@ void PropertySelector::_update_search() {
Control::get_icon("MiniMatrix3", "EditorIcons"),
Control::get_icon("MiniTransform", "EditorIcons"),
Control::get_icon("MiniColor", "EditorIcons"),
- Control::get_icon("MiniImage", "EditorIcons"),
Control::get_icon("MiniPath", "EditorIcons"),
Control::get_icon("MiniRid", "EditorIcons"),
Control::get_icon("MiniObject", "EditorIcons"),
diff --git a/editor/pvrtc_compress.cpp b/editor/pvrtc_compress.cpp
index 6edcd60188..ef875bbead 100644
--- a/editor/pvrtc_compress.cpp
+++ b/editor/pvrtc_compress.cpp
@@ -89,7 +89,7 @@ static void _compress_image(Image::CompressMode p_mode, Image *p_image) {
args.push_back("-m");
Ref<ImageTexture> t = memnew(ImageTexture);
- t->create_from_image(*p_image, 0);
+ t->create_from_image(Ref<Image>(p_image), 0);
ResourceSaver::save(src_img, t);
Error err = OS::get_singleton()->execute(ttpath, args, true);
@@ -101,7 +101,7 @@ static void _compress_image(Image::CompressMode p_mode, Image *p_image) {
ERR_EXPLAIN(TTR("Can't load back converted image using PVRTC tool:") + " " + dst_img);
ERR_FAIL_COND(t.is_null());
- *p_image = t->get_data();
+ p_image->copy_internals_from(t->get_data());
}
static void _compress_pvrtc2(Image *p_image) {
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 69b8723431..835243e401 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -362,8 +362,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
else {
String path = selected->get_filename();
script_create_dialog->config(selected->get_class(), path);
- script_create_dialog->popup_centered(Size2(300, 290));
- //script_create_dialog->popup_centered_minsize();
+ script_create_dialog->popup_centered();
}
} break;
@@ -683,6 +682,8 @@ void SceneTreeDock::_notification(int p_what) {
filter_icon->set_texture(get_icon("Zoom", "EditorIcons"));
+ filter_icon->set_texture(get_icon("Search", "EditorIcons"));
+
EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", this, "_selection_changed");
} break;
@@ -1791,6 +1792,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel
VBoxContainer *vbc = this;
HBoxContainer *filter_hbc = memnew(HBoxContainer);
+ filter_hbc->add_constant_override("separate", 0);
ToolButton *tb;
ED_SHORTCUT("scene_tree/add_child_node", TTR("Add Child Node"), KEY_MASK_CMD | KEY_A);
diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp
index 8fd0d13b32..2945abbd8c 100644
--- a/editor/scene_tree_editor.cpp
+++ b/editor/scene_tree_editor.cpp
@@ -337,27 +337,27 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
String warning = p_node->get_configuration_warning();
if (warning != String()) {
- item->add_button(0, get_icon("NodeWarning", "EditorIcons"), BUTTON_WARNING);
+ item->add_button(0, get_icon("NodeWarning", "EditorIcons"), BUTTON_WARNING, false, TTR("Node configuration warning:") + "\n" + p_node->get_configuration_warning());
}
bool has_connections = p_node->has_persistent_signal_connections();
bool has_groups = p_node->has_persistent_groups();
if (has_connections && has_groups) {
- item->add_button(0, get_icon("ConnectionAndGroups", "EditorIcons"), BUTTON_SIGNALS);
+ item->add_button(0, get_icon("ConnectionAndGroups", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connection(s) and group(s)\nClick to show signals dock."));
} else if (has_connections) {
- item->add_button(0, get_icon("Connect", "EditorIcons"), BUTTON_SIGNALS);
+ item->add_button(0, get_icon("Connect", "EditorIcons"), BUTTON_SIGNALS, false, TTR("Node has connections.\nClick to show signals dock."));
} else if (has_groups) {
- item->add_button(0, get_icon("Groups", "EditorIcons"), BUTTON_GROUPS);
+ item->add_button(0, get_icon("Groups", "EditorIcons"), BUTTON_GROUPS, false, TTR("Node is in group(s).\nClick to show groups dock."));
}
}
if (p_node == get_scene_node() && p_node->get_scene_inherited_state().is_valid()) {
- item->add_button(0, get_icon("InstanceOptions", "EditorIcons"), BUTTON_SUBSCENE);
+ item->add_button(0, get_icon("InstanceOptions", "EditorIcons"), BUTTON_SUBSCENE, false, TTR("Subscene options"));
item->set_tooltip(0, TTR("Inherits:") + " " + p_node->get_scene_inherited_state()->get_path() + "\n" + TTR("Type:") + " " + p_node->get_class());
} else if (p_node != get_scene_node() && p_node->get_filename() != "" && can_open_instance) {
- item->add_button(0, get_icon("InstanceOptions", "EditorIcons"), BUTTON_SUBSCENE);
+ item->add_button(0, get_icon("InstanceOptions", "EditorIcons"), BUTTON_SUBSCENE, false, TTR("Subscene options"));
item->set_tooltip(0, TTR("Instance:") + " " + p_node->get_filename() + "\n" + TTR("Type:") + " " + p_node->get_class());
} else {
item->set_tooltip(0, String(p_node->get_name()) + "\n" + TTR("Type:") + " " + p_node->get_class());
@@ -370,24 +370,24 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
if (!p_node->get_script().is_null()) {
- item->add_button(0, get_icon("Script", "EditorIcons"), BUTTON_SCRIPT);
+ item->add_button(0, get_icon("Script", "EditorIcons"), BUTTON_SCRIPT, false, TTR("Open script"));
}
if (p_node->is_class("CanvasItem")) {
bool is_locked = p_node->has_meta("_edit_lock_"); //_edit_group_
if (is_locked)
- item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK);
+ item->add_button(0, get_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock"));
bool is_grouped = p_node->has_meta("_edit_group_");
if (is_grouped)
- item->add_button(0, get_icon("Group", "EditorIcons"), BUTTON_GROUP);
+ item->add_button(0, get_icon("Group", "EditorIcons"), BUTTON_GROUP, false, TTR("Children are not selectable.\nClick to make selectable"));
bool v = p_node->call("is_visible");
if (v)
- item->add_button(0, get_icon("Visible", "EditorIcons"), BUTTON_VISIBILITY);
+ item->add_button(0, get_icon("Visible", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility"));
else
- item->add_button(0, get_icon("Hidden", "EditorIcons"), BUTTON_VISIBILITY);
+ item->add_button(0, get_icon("Hidden", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility"));
if (!p_node->is_connected("visibility_changed", this, "_node_visibility_changed"))
p_node->connect("visibility_changed", this, "_node_visibility_changed", varray(p_node));
@@ -397,9 +397,9 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
bool v = p_node->call("is_visible");
if (v)
- item->add_button(0, get_icon("Visible", "EditorIcons"), BUTTON_VISIBILITY);
+ item->add_button(0, get_icon("Visible", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility"));
else
- item->add_button(0, get_icon("Hidden", "EditorIcons"), BUTTON_VISIBILITY);
+ item->add_button(0, get_icon("Hidden", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility"));
if (!p_node->is_connected("visibility_changed", this, "_node_visibility_changed"))
p_node->connect("visibility_changed", this, "_node_visibility_changed", varray(p_node));
diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp
index 7808cae0cd..1e86d8db4b 100644
--- a/editor/script_create_dialog.cpp
+++ b/editor/script_create_dialog.cpp
@@ -29,12 +29,23 @@
/*************************************************************************/
#include "script_create_dialog.h"
+#include "editor/editor_scale.h"
#include "editor_file_system.h"
#include "global_config.h"
#include "io/resource_saver.h"
#include "os/file_access.h"
#include "script_language.h"
+void ScriptCreateDialog::_notification(int p_what) {
+
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ path_button->set_icon(get_icon("Folder", "EditorIcons"));
+ parent_browse_button->set_icon(get_icon("Folder", "EditorIcons"));
+ }
+ }
+}
+
void ScriptCreateDialog::config(const String &p_base_name, const String &p_base_path) {
class_name->set_text("");
@@ -46,6 +57,8 @@ void ScriptCreateDialog::config(const String &p_base_name, const String &p_base_
initial_bp = "";
file_path->set_text("");
}
+ _lang_changed(current_language);
+ _parent_name_changed(parent_name->get_text());
_class_name_changed("");
_path_changed(file_path->get_text());
}
@@ -55,6 +68,8 @@ bool ScriptCreateDialog::_validate(const String &p_string) {
if (p_string.length() == 0)
return false;
+ String path_chars = "\"res://";
+ bool is_val_path = ScriptServer::get_language(language_menu->get_selected())->can_inherit_from_file();
for (int i = 0; i < p_string.length(); i++) {
if (i == 0) {
@@ -62,7 +77,17 @@ bool ScriptCreateDialog::_validate(const String &p_string) {
return false; // no start with number plz
}
- bool valid_char = (p_string[i] >= '0' && p_string[i] <= '9') || (p_string[i] >= 'a' && p_string[i] <= 'z') || (p_string[i] >= 'A' && p_string[i] <= 'Z') || p_string[i] == '_';
+ if (i == p_string.length() - 1 && is_val_path)
+ return p_string[i] == '\"';
+
+ if (is_val_path && i < path_chars.length()) {
+ if (p_string[i] != path_chars[i])
+ is_val_path = false;
+ else
+ continue;
+ }
+
+ bool valid_char = (p_string[i] >= '0' && p_string[i] <= '9') || (p_string[i] >= 'a' && p_string[i] <= 'z') || (p_string[i] >= 'A' && p_string[i] <= 'Z') || p_string[i] == '_' || (is_val_path && (p_string[i] == '/' || p_string[i] == '.'));
if (!valid_char)
return false;
@@ -73,54 +98,40 @@ bool ScriptCreateDialog::_validate(const String &p_string) {
void ScriptCreateDialog::_class_name_changed(const String &p_name) {
- if (!_validate(parent_name->get_text())) {
- error_label->set_text(TTR("Invalid parent class name"));
- error_label->add_color_override("font_color", Color(1, 0.4, 0.0, 0.8));
- } else if (class_name->is_editable()) {
- if (class_name->get_text() == "") {
- error_label->set_text(TTR("Valid chars:") + " a-z A-Z 0-9 _");
- error_label->add_color_override("font_color", Color(1, 1, 1, 0.6));
- } else if (!_validate(class_name->get_text())) {
- error_label->set_text(TTR("Invalid class name"));
- error_label->add_color_override("font_color", Color(1, 0.2, 0.2, 0.8));
- } else {
- error_label->set_text(TTR("Valid name"));
- error_label->add_color_override("font_color", Color(0, 1.0, 0.8, 0.8));
- }
+ if (_validate(class_name->get_text())) {
+ is_class_name_valid = true;
} else {
+ is_class_name_valid = false;
+ }
+ _update_dialog();
+}
- error_label->set_text(TTR("N/A"));
- error_label->add_color_override("font_color", Color(0, 1.0, 0.8, 0.8));
+void ScriptCreateDialog::_parent_name_changed(const String &p_parent) {
+
+ if (_validate(parent_name->get_text())) {
+ is_parent_name_valid = true;
+ } else {
+ is_parent_name_valid = false;
}
+ _update_dialog();
}
void ScriptCreateDialog::ok_pressed() {
- if (create_new) {
+ if (is_new_script_created) {
_create_new();
} else {
_load_exist();
}
- create_new = true;
- _update_controls();
+ is_new_script_created = true;
+ _update_dialog();
}
void ScriptCreateDialog::_create_new() {
- if (class_name->is_editable() && !_validate(class_name->get_text())) {
- alert->set_text(TTR("Class name is invalid!"));
- alert->popup_centered_minsize();
- return;
- }
- if (!_validate(parent_name->get_text())) {
- alert->set_text(TTR("Parent class name is invalid!"));
- alert->popup_centered_minsize();
- return;
- }
-
String cname;
- if (class_name->is_editable())
+ if (has_named_classes)
cname = class_name->get_text();
Ref<Script> scr = ScriptServer::get_language(language_menu->get_selected())->get_template(cname, parent_name->get_text());
@@ -131,18 +142,13 @@ void ScriptCreateDialog::_create_new() {
if (cname != "")
scr->set_name(cname);
- if (!internal->is_pressed()) {
+ if (!is_built_in) {
String lpath = GlobalConfig::get_singleton()->localize_path(file_path->get_text());
scr->set_path(lpath);
- if (!path_valid) {
- alert->set_text(TTR("Invalid path!"));
- alert->popup_centered_minsize();
- return;
- }
Error err = ResourceSaver::save(lpath, scr, ResourceSaver::FLAG_CHANGE_PATH);
if (err != OK) {
- alert->set_text(TTR("Could not create script in filesystem."));
- alert->popup_centered_minsize();
+ alert->set_text(TTR("Error - Could not create script in filesystem."));
+ alert->popup_centered();
return;
}
}
@@ -156,9 +162,9 @@ void ScriptCreateDialog::_load_exist() {
String path = file_path->get_text();
RES p_script = ResourceLoader::load(path, "Script");
if (p_script.is_null()) {
- alert->get_ok()->set_text(TTR("Ugh"));
+ alert->get_ok()->set_text(TTR("OK"));
alert->set_text(vformat(TTR("Error loading script from %s"), path));
- alert->popup_centered_minsize();
+ alert->popup_centered();
return;
}
@@ -170,52 +176,64 @@ void ScriptCreateDialog::_lang_changed(int l) {
l = language_menu->get_selected();
if (ScriptServer::get_language(l)->has_named_classes()) {
- class_name->set_editable(true);
+ has_named_classes = true;
} else {
- class_name->set_editable(false);
+ has_named_classes = false;
+ }
+
+ if (ScriptServer::get_language(l)->can_inherit_from_file()) {
+ can_inherit_from_file = true;
+ } else {
+ can_inherit_from_file = false;
}
String selected_ext = "." + ScriptServer::get_language(l)->get_extension();
String path = file_path->get_text();
String extension = "";
- if (path.find(".") >= 0) {
- extension = path.get_extension();
- }
-
- if (extension.length() == 0) {
- // add extension if none
- path += selected_ext;
- _path_changed(path);
- } else {
- // change extension by selected language
- List<String> extensions;
- // get all possible extensions for script
- for (int l = 0; l < language_menu->get_item_count(); l++) {
- ScriptServer::get_language(l)->get_recognized_extensions(&extensions);
+ if (path != "") {
+ if (path.find(".") >= 0) {
+ extension = path.get_extension();
}
- for (List<String>::Element *E = extensions.front(); E; E = E->next()) {
- if (E->get().nocasecmp_to(extension) == 0) {
- path = path.get_basename() + selected_ext;
- _path_changed(path);
- break;
+ if (extension.length() == 0) {
+ // add extension if none
+ path += selected_ext;
+ _path_changed(path);
+ } else {
+ // change extension by selected language
+ List<String> extensions;
+ // get all possible extensions for script
+ for (int l = 0; l < language_menu->get_item_count(); l++) {
+ ScriptServer::get_language(l)->get_recognized_extensions(&extensions);
+ }
+
+ for (List<String>::Element *E = extensions.front(); E; E = E->next()) {
+ if (E->get().nocasecmp_to(extension) == 0) {
+ path = path.get_basename() + selected_ext;
+ _path_changed(path);
+ break;
+ }
}
}
+ file_path->set_text(path);
}
- file_path->set_text(path);
- _class_name_changed(class_name->get_text());
+
+ _update_dialog();
}
void ScriptCreateDialog::_built_in_pressed() {
if (internal->is_pressed()) {
- path_vb->hide();
+ is_built_in = true;
} else {
- path_vb->show();
+ is_built_in = false;
}
+ _update_dialog();
}
-void ScriptCreateDialog::_browse_path() {
+void ScriptCreateDialog::_browse_path(bool browse_parent) {
+
+ is_browsing_parent = browse_parent;
file_browse->set_mode(EditorFileDialog::MODE_SAVE_FILE);
file_browse->set_disable_overwrite_warning(true);
@@ -238,46 +256,56 @@ void ScriptCreateDialog::_browse_path() {
void ScriptCreateDialog::_file_selected(const String &p_file) {
String p = GlobalConfig::get_singleton()->localize_path(p_file);
- file_path->set_text(p);
- _path_changed(p);
+ if (is_browsing_parent) {
+ parent_name->set_text("\"" + p + "\"");
+ _class_name_changed("\"" + p + "\"");
+ } else {
+ file_path->set_text(p);
+ _path_changed(p);
+ }
}
void ScriptCreateDialog::_path_changed(const String &p_path) {
- path_valid = false;
+ is_path_valid = false;
+ is_new_script_created = true;
String p = p_path;
if (p == "") {
-
- path_error_label->set_text(TTR("Path is empty"));
- path_error_label->add_color_override("font_color", Color(1, 0.4, 0.0, 0.8));
+ _msg_path_valid(false, TTR("Path is empty"));
+ _update_dialog();
return;
}
p = GlobalConfig::get_singleton()->localize_path(p);
if (!p.begins_with("res://")) {
-
- path_error_label->set_text(TTR("Path is not local"));
- path_error_label->add_color_override("font_color", Color(1, 0.4, 0.0, 0.8));
+ _msg_path_valid(false, TTR("Path is not local"));
+ _update_dialog();
return;
}
if (p.find("/") || p.find("\\")) {
DirAccess *d = DirAccess::create(DirAccess::ACCESS_RESOURCES);
-
if (d->change_dir(p.get_base_dir()) != OK) {
-
- path_error_label->set_text(TTR("Invalid base path"));
- path_error_label->add_color_override("font_color", Color(1, 0.4, 0.0, 0.8));
+ _msg_path_valid(false, TTR("Invalid base path"));
memdelete(d);
+ _update_dialog();
return;
}
memdelete(d);
}
- FileAccess *f = FileAccess::create(FileAccess::ACCESS_RESOURCES);
- create_new = !f->file_exists(p);
+ /* Does file already exist */
+
+ DirAccess *f = DirAccess::create(DirAccess::ACCESS_RESOURCES);
+ if (f->file_exists(p) && !(f->current_is_dir())) {
+ is_new_script_created = false;
+ is_path_valid = true;
+ }
memdelete(f);
+ _update_dialog();
+
+ /* Check file extension */
String extension = p.get_extension();
List<String> extensions;
@@ -288,45 +316,156 @@ void ScriptCreateDialog::_path_changed(const String &p_path) {
}
bool found = false;
+ bool match = false;
int index = 0;
for (List<String>::Element *E = extensions.front(); E; E = E->next()) {
if (E->get().nocasecmp_to(extension) == 0) {
- language_menu->select(index); // change Language option by extension
+ //FIXME (?) - changing language this way doesn't update controls, needs rework
+ //language_menu->select(index); // change Language option by extension
found = true;
+ if (E->get() == ScriptServer::get_language(language_menu->get_selected())->get_extension()) {
+ match = true;
+ }
break;
}
index++;
}
if (!found) {
- path_error_label->set_text(TTR("Invalid extension"));
- path_error_label->add_color_override("font_color", Color(1, 0.4, 0.0, 0.8));
+ _msg_path_valid(false, TTR("Invalid extension"));
+ _update_dialog();
return;
}
- _update_controls();
+ if (!match) {
+ _msg_path_valid(false, TTR("Wrong extension chosen"));
+ _update_dialog();
+ return;
+ }
+
+ /* All checks passed */
+
+ is_path_valid = true;
+ _update_dialog();
+}
+
+void ScriptCreateDialog::_msg_script_valid(bool valid, const String &p_msg) {
+
+ error_label->set_text(TTR(p_msg));
+ if (valid) {
+ error_label->add_color_override("font_color", Color(0, 1.0, 0.8, 0.8));
+ } else {
+ error_label->add_color_override("font_color", Color(1, 0.2, 0.2, 0.8));
+ }
+}
- path_error_label->add_color_override("font_color", Color(0, 1.0, 0.8, 0.8));
+void ScriptCreateDialog::_msg_path_valid(bool valid, const String &p_msg) {
- path_valid = true;
+ path_error_label->set_text(TTR(p_msg));
+ if (valid) {
+ path_error_label->add_color_override("font_color", Color(0, 1.0, 0.8, 0.8));
+ } else {
+ path_error_label->add_color_override("font_color", Color(1, 0.4, 0.0, 0.8));
+ }
}
-void ScriptCreateDialog::_update_controls() {
+void ScriptCreateDialog::_update_dialog() {
+
+ bool script_ok = true;
+
+ /* "Add Script Dialog" gui logic and script checks */
- if (create_new) {
- path_error_label->set_text(TTR("Create new script"));
+ // Is Script Valid (order from top to bottom)
+ get_ok()->set_disabled(true);
+ if (!is_built_in) {
+ if (!is_path_valid) {
+ _msg_script_valid(false, TTR("Invalid Path"));
+ script_ok = false;
+ }
+ }
+ if (has_named_classes && (!is_class_name_valid)) {
+ _msg_script_valid(false, TTR("Invalid class name"));
+ script_ok = false;
+ }
+ if (!is_parent_name_valid) {
+ _msg_script_valid(false, TTR("Invalid inherited parent name or path"));
+ script_ok = false;
+ }
+ if (script_ok) {
+ _msg_script_valid(true, TTR("Script valid"));
+ get_ok()->set_disabled(false);
+ }
+
+ /* Does script have named classes */
+
+ if (has_named_classes) {
+ if (is_new_script_created) {
+ class_name->set_editable(true);
+ class_name->set_placeholder(TTR("Allowed: a-z, A-Z, 0-9 and _"));
+ class_name->set_placeholder_alpha(0.3);
+ } else {
+ class_name->set_editable(false);
+ }
+ } else {
+ class_name->set_editable(false);
+ class_name->set_placeholder(TTR("N/A"));
+ class_name->set_placeholder_alpha(1);
+ }
+
+ /* Can script inherit from a file */
+
+ if (can_inherit_from_file) {
+ parent_browse_button->set_disabled(false);
+ } else {
+ parent_browse_button->set_disabled(true);
+ }
+
+ /* Is script Built-in */
+
+ if (is_built_in) {
+ file_path->set_editable(false);
+ path_button->set_disabled(true);
+ re_check_path = true;
+ } else {
+ file_path->set_editable(true);
+ path_button->set_disabled(false);
+ if (re_check_path) {
+ re_check_path = false;
+ _path_changed(file_path->get_text());
+ }
+ }
+
+ /* Is Script created or loaded from existing file */
+
+ if (is_new_script_created) {
+ // New Script Created
get_ok()->set_text(TTR("Create"));
+ parent_name->set_editable(true);
+ parent_browse_button->set_disabled(false);
+ internal->set_disabled(false);
+ if (is_built_in) {
+ _msg_path_valid(true, TTR("Built-in script (into scene file)"));
+ } else {
+ if (script_ok) {
+ _msg_path_valid(true, TTR("Create new script file"));
+ }
+ }
} else {
- path_error_label->set_text(TTR("Load existing script"));
+ // Script Loaded
get_ok()->set_text(TTR("Load"));
+ parent_name->set_editable(false);
+ parent_browse_button->set_disabled(true);
+ internal->set_disabled(true);
+ if (script_ok) {
+ _msg_path_valid(true, TTR("Load existing script file"));
+ }
}
- parent_name->set_editable(create_new);
- internal->set_disabled(!create_new);
}
void ScriptCreateDialog::_bind_methods() {
ClassDB::bind_method("_class_name_changed", &ScriptCreateDialog::_class_name_changed);
+ ClassDB::bind_method("_parent_name_changed", &ScriptCreateDialog::_parent_name_changed);
ClassDB::bind_method("_lang_changed", &ScriptCreateDialog::_lang_changed);
ClassDB::bind_method("_built_in_pressed", &ScriptCreateDialog::_built_in_pressed);
ClassDB::bind_method("_browse_path", &ScriptCreateDialog::_browse_path);
@@ -337,28 +476,100 @@ void ScriptCreateDialog::_bind_methods() {
ScriptCreateDialog::ScriptCreateDialog() {
- /* SNAP DIALOG */
+ editor_settings = EditorSettings::get_singleton();
+ GridContainer *gc = memnew(GridContainer);
VBoxContainer *vb = memnew(VBoxContainer);
- add_child(vb);
- //set_child_rect(vb);
+ HBoxContainer *hb = memnew(HBoxContainer);
+ Label *l = memnew(Label);
+ Control *empty = memnew(Control);
+ Control *empty_h = memnew(Control);
+ Control *empty_v = memnew(Control);
+ PanelContainer *pc = memnew(PanelContainer);
- class_name = memnew(LineEdit);
- VBoxContainer *vb2 = memnew(VBoxContainer);
- vb2->add_child(class_name);
- class_name->connect("text_changed", this, "_class_name_changed");
- error_label = memnew(Label);
- error_label->set_text("valid chars: a-z A-Z 0-9 _");
- error_label->set_align(Label::ALIGN_CENTER);
- vb2->add_child(error_label);
- vb->add_margin_child(TTR("Class Name:"), vb2);
+ /* DIALOG */
- parent_name = memnew(LineEdit);
- vb->add_margin_child(TTR("Inherits:"), parent_name);
- parent_name->connect("text_changed", this, "_class_name_changed");
+ /* Main Controls */
+
+ gc = memnew(GridContainer);
+ gc->set_columns(2);
+
+ /* Error Stylebox Background */
+
+ StyleBoxFlat *sb = memnew(StyleBoxFlat);
+ sb->set_bg_color(Color(0, 0, 0, 0.05));
+ sb->set_light_color(Color(1, 1, 1, 0.05));
+ sb->set_dark_color(Color(1, 1, 1, 0.05));
+ sb->set_border_blend(false);
+ sb->set_border_size(1);
+ sb->set_default_margin(MARGIN_TOP, 10.0 * EDSCALE);
+ sb->set_default_margin(MARGIN_BOTTOM, 10.0 * EDSCALE);
+ sb->set_default_margin(MARGIN_LEFT, 10.0 * EDSCALE);
+ sb->set_default_margin(MARGIN_RIGHT, 10.0 * EDSCALE);
+
+ /* Error Messages Field */
+
+ vb = memnew(VBoxContainer);
+
+ hb = memnew(HBoxContainer);
+ l = memnew(Label);
+ l->set_text(" - ");
+ hb->add_child(l);
+ error_label = memnew(Label);
+ error_label->set_text(TTR("Error!"));
+ error_label->set_align(Label::ALIGN_LEFT);
+ hb->add_child(error_label);
+ vb->add_child(hb);
+
+ hb = memnew(HBoxContainer);
+ l = memnew(Label);
+ l->set_text(" - ");
+ hb->add_child(l);
+ path_error_label = memnew(Label);
+ path_error_label->set_text(TTR("Error!"));
+ path_error_label->set_align(Label::ALIGN_LEFT);
+ hb->add_child(path_error_label);
+ vb->add_child(hb);
+
+ pc = memnew(PanelContainer);
+ pc->set_h_size_flags(Control::SIZE_FILL);
+ pc->add_style_override("panel", sb);
+ pc->add_child(vb);
+
+ /* Margins */
+
+ empty_h = memnew(Control);
+ empty_h->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ empty_h->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+ empty_h->set_custom_minimum_size(Size2(0, 10 * EDSCALE));
+ empty_v = memnew(Control);
+ empty_v->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ empty_v->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+ empty_v->set_custom_minimum_size(Size2(10, 0 * EDSCALE));
+
+ vb = memnew(VBoxContainer);
+ vb->add_child(empty_h->duplicate());
+ vb->add_child(gc);
+ vb->add_child(empty_h->duplicate());
+ vb->add_child(pc);
+ vb->add_child(empty_h->duplicate());
+ hb = memnew(HBoxContainer);
+ hb->add_child(empty_v->duplicate());
+ hb->add_child(vb);
+ hb->add_child(empty_v->duplicate());
+
+ add_child(hb);
+
+ /* Language */
language_menu = memnew(OptionButton);
- vb->add_margin_child(TTR("Language"), language_menu);
+ language_menu->set_custom_minimum_size(Size2(250, 0) * EDSCALE);
+ language_menu->set_h_size_flags(SIZE_EXPAND_FILL);
+ l = memnew(Label);
+ l->set_text(TTR("Language"));
+ l->set_align(Label::ALIGN_RIGHT);
+ gc->add_child(l);
+ gc->add_child(language_menu);
int default_lang = 0;
for (int i = 0; i < ScriptServer::get_language_count(); i++) {
@@ -370,60 +581,108 @@ ScriptCreateDialog::ScriptCreateDialog() {
}
}
- editor_settings = EditorSettings::get_singleton();
String last_selected_language = editor_settings->get_project_metadata("script_setup", "last_selected_language", "");
if (last_selected_language != "") {
for (int i = 0; i < language_menu->get_item_count(); i++) {
if (language_menu->get_item_text(i) == last_selected_language) {
language_menu->select(i);
+ current_language = i;
break;
}
}
} else {
language_menu->select(default_lang);
+ current_language = default_lang;
}
language_menu->connect("item_selected", this, "_lang_changed");
- //parent_name->set_text();
+ /* Inherits */
- vb2 = memnew(VBoxContainer);
- path_vb = memnew(VBoxContainer);
- vb2->add_child(path_vb);
+ hb = memnew(HBoxContainer);
+ hb->set_h_size_flags(SIZE_EXPAND_FILL);
+ parent_name = memnew(LineEdit);
+ parent_name->connect("text_changed", this, "_parent_name_changed");
+ parent_name->set_h_size_flags(SIZE_EXPAND_FILL);
+ hb->add_child(parent_name);
+ parent_browse_button = memnew(Button);
+ parent_browse_button->set_flat(true);
+ parent_browse_button->connect("pressed", this, "_browse_path", varray(true));
+ hb->add_child(parent_browse_button);
+ l = memnew(Label);
+ l->set_text(TTR("Inherits"));
+ l->set_align(Label::ALIGN_RIGHT);
+ gc->add_child(l);
+ gc->add_child(hb);
+ is_browsing_parent = false;
+
+ /* Class Name */
- HBoxContainer *hbc = memnew(HBoxContainer);
- file_path = memnew(LineEdit);
- file_path->connect("text_changed", this, "_path_changed");
- hbc->add_child(file_path);
- file_path->set_h_size_flags(SIZE_EXPAND_FILL);
- Button *b = memnew(Button);
- b->set_text(" .. ");
- b->connect("pressed", this, "_browse_path");
- hbc->add_child(b);
- path_vb->add_child(hbc);
- path_error_label = memnew(Label);
- path_vb->add_child(path_error_label);
- path_error_label->set_text(TTR("Error!"));
- path_error_label->set_align(Label::ALIGN_CENTER);
+ class_name = memnew(LineEdit);
+ class_name->connect("text_changed", this, "_class_name_changed");
+ class_name->set_h_size_flags(SIZE_EXPAND_FILL);
+ l = memnew(Label);
+ l->set_text(TTR("Class Name"));
+ l->set_align(Label::ALIGN_RIGHT);
+ gc->add_child(l);
+ gc->add_child(class_name);
+
+ /* Built-in Script */
internal = memnew(CheckButton);
- internal->set_text(TTR("Built-In Script"));
- vb2->add_child(internal);
internal->connect("pressed", this, "_built_in_pressed");
-
- vb->add_margin_child(TTR("Path:"), vb2);
-
- set_size(Size2(200, 150));
- set_hide_on_ok(false);
- set_title(TTR("Attach Node Script"));
+ hb = memnew(HBoxContainer);
+ empty = memnew(Control);
+ hb->add_child(internal);
+ hb->add_child(empty);
+ l = memnew(Label);
+ l->set_text(TTR("Built-in Script"));
+ l->set_align(Label::ALIGN_RIGHT);
+ gc->add_child(l);
+ gc->add_child(hb);
+
+ /* Path */
+
+ hb = memnew(HBoxContainer);
+ file_path = memnew(LineEdit);
+ file_path->connect("text_changed", this, "_path_changed");
+ file_path->set_h_size_flags(SIZE_EXPAND_FILL);
+ hb->add_child(file_path);
+ path_button = memnew(Button);
+ path_button->set_flat(true);
+ path_button->connect("pressed", this, "_browse_path", varray(false));
+ hb->add_child(path_button);
+ l = memnew(Label);
+ l->set_text(TTR("Path"));
+ l->set_align(Label::ALIGN_RIGHT);
+ gc->add_child(l);
+ gc->add_child(hb);
+
+ /* Dialog Setup */
file_browse = memnew(EditorFileDialog);
file_browse->connect("file_selected", this, "_file_selected");
add_child(file_browse);
get_ok()->set_text(TTR("Create"));
alert = memnew(AcceptDialog);
+ alert->set_as_minsize();
+ alert->get_label()->set_autowrap(true);
+ alert->get_label()->set_align(Label::ALIGN_CENTER);
+ alert->get_label()->set_valign(Label::VALIGN_CENTER);
+ alert->get_label()->set_custom_minimum_size(Size2(325, 60) * EDSCALE);
add_child(alert);
- _lang_changed(0);
- create_new = true;
+ set_as_minsize();
+ set_hide_on_ok(false);
+ set_title(TTR("Attach Node Script"));
+
+ is_parent_name_valid = false;
+ is_class_name_valid = false;
+ is_path_valid = false;
+
+ has_named_classes = false;
+ can_inherit_from_file = false;
+ is_built_in = false;
+
+ is_new_script_created = true;
}
diff --git a/editor/script_create_dialog.h b/editor/script_create_dialog.h
index 499886facd..862d4f88f2 100644
--- a/editor/script_create_dialog.h
+++ b/editor/script_create_dialog.h
@@ -34,8 +34,10 @@
#include "editor/editor_settings.h"
#include "scene/gui/check_button.h"
#include "scene/gui/dialogs.h"
+#include "scene/gui/grid_container.h"
#include "scene/gui/line_edit.h"
#include "scene/gui/option_button.h"
+#include "scene/gui/panel_container.h"
class ScriptCreateDialog : public ConfirmationDialog {
GDCLASS(ScriptCreateDialog, ConfirmationDialog);
@@ -44,30 +46,46 @@ class ScriptCreateDialog : public ConfirmationDialog {
Label *error_label;
Label *path_error_label;
LineEdit *parent_name;
+ Button *parent_browse_button;
OptionButton *language_menu;
LineEdit *file_path;
+ Button *path_button;
EditorFileDialog *file_browse;
CheckButton *internal;
VBoxContainer *path_vb;
AcceptDialog *alert;
bool path_valid;
bool create_new;
+ bool is_browsing_parent;
String initial_bp;
EditorSettings *editor_settings;
+ bool is_new_script_created;
+ bool is_path_valid;
+ bool has_named_classes;
+ bool can_inherit_from_file;
+ bool is_parent_name_valid;
+ bool is_class_name_valid;
+ bool is_built_in;
+ int current_language;
+ bool re_check_path;
void _path_changed(const String &p_path = String());
void _lang_changed(int l = 0);
void _built_in_pressed();
bool _validate(const String &p_strin);
void _class_name_changed(const String &p_name);
- void _browse_path();
+ void _parent_name_changed(const String &p_parent);
+ void _browse_path(bool browse_parent);
void _file_selected(const String &p_file);
virtual void ok_pressed();
void _create_new();
void _load_exist();
- void _update_controls();
+ void _msg_script_valid(bool valid, const String &p_msg = String());
+ void _msg_path_valid(bool valid, const String &p_msg = String());
+ void _update_dialog();
protected:
+ void _notification(int p_what);
static void _bind_methods();
public:
diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp
index 38cb8d654e..ebf4b1cf3a 100644
--- a/editor/script_editor_debugger.cpp
+++ b/editor/script_editor_debugger.cpp
@@ -90,11 +90,13 @@ public:
return "";
}
- void add_property(const String &p_name, const Variant &p_value) {
+ void add_property(const String &p_name, const Variant &p_value, const PropertyHint &p_hint, const String p_hint_string) {
PropertyInfo pinfo;
pinfo.name = p_name;
pinfo.type = p_value.get_type();
+ pinfo.hint = p_hint;
+ pinfo.hint_string = p_hint_string;
props.push_back(pinfo);
values[p_name] = p_value;
}
@@ -437,7 +439,11 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
inspected_object->last_edited_id = id;
- inspect_properties->edit(inspected_object);
+ if (tabs->get_current_tab() == 2) {
+ inspect_properties->edit(inspected_object);
+ } else {
+ editor->push_item(inspected_object);
+ }
} else if (p_msg == "message:video_mem") {
@@ -499,13 +505,20 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
String n = p_data[ofs + i * 2 + 0];
Variant v = p_data[ofs + i * 2 + 1];
+ PropertyHint h = PROPERTY_HINT_NONE;
+ String hs = String();
if (n.begins_with("*")) {
n = n.substr(1, n.length());
+ h = PROPERTY_HINT_OBJECT_ID;
+ String s = v;
+ s = s.replace("[", "");
+ hs = s.get_slice(":", 0);
+ v = s.get_slice(":", 1).to_int();
}
- variables->add_property("members/" + n, v);
+ variables->add_property("members/" + n, v, h, hs);
}
ofs += mcount * 2;
@@ -516,13 +529,20 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
String n = p_data[ofs + i * 2 + 0];
Variant v = p_data[ofs + i * 2 + 1];
+ PropertyHint h = PROPERTY_HINT_NONE;
+ String hs = String();
if (n.begins_with("*")) {
n = n.substr(1, n.length());
+ h = PROPERTY_HINT_OBJECT_ID;
+ String s = v;
+ s = s.replace("[", "");
+ hs = s.get_slice(":", 0);
+ v = s.get_slice(":", 1).to_int();
}
- variables->add_property("locals/" + n, v);
+ variables->add_property("locals/" + n, v, h, hs);
}
variables->update();
@@ -1056,6 +1076,9 @@ void ScriptEditorDebugger::stop() {
EditorNode::get_singleton()->get_pause_button()->set_pressed(false);
EditorNode::get_singleton()->get_pause_button()->set_disabled(true);
+ //avoid confusion when stopped debugging but an object is still edited
+ EditorNode::get_singleton()->push_item(NULL);
+
if (hide_on_stop) {
if (is_visible_in_tree())
EditorNode::get_singleton()->hide_bottom_panel();
@@ -1551,6 +1574,9 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
editor = p_editor;
tabs = memnew(TabContainer);
+ tabs->add_style_override("panel", editor->get_gui_base()->get_stylebox("EditorPanelDebugger", "EditorStyles"));
+ tabs->add_style_override("tab_fg", editor->get_gui_base()->get_stylebox("EditorTabFGDebugger", "EditorStyles"));
+ tabs->add_style_override("tab_bg", editor->get_gui_base()->get_stylebox("EditorTabBGDebugger", "EditorStyles"));
tabs->set_v_size_flags(SIZE_EXPAND_FILL);
tabs->set_area_as_parent_rect();
add_child(tabs);
@@ -1575,11 +1601,13 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
hbc->add_child(memnew(VSeparator));
step = memnew(Button);
+ step->set_flat(true);
hbc->add_child(step);
step->set_tooltip(TTR("Step Into"));
step->connect("pressed", this, "debug_step");
next = memnew(Button);
+ next->set_flat(true);
hbc->add_child(next);
next->set_tooltip(TTR("Step Over"));
next->connect("pressed", this, "debug_next");
@@ -1587,11 +1615,13 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
hbc->add_child(memnew(VSeparator));
dobreak = memnew(Button);
+ dobreak->set_flat(true);
hbc->add_child(dobreak);
dobreak->set_tooltip(TTR("Break"));
dobreak->connect("pressed", this, "debug_break");
docontinue = memnew(Button);
+ docontinue->set_flat(true);
hbc->add_child(docontinue);
docontinue->set_tooltip(TTR("Continue"));
docontinue->connect("pressed", this, "debug_continue");
@@ -1599,11 +1629,13 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
//hbc->add_child( memnew( VSeparator) );
back = memnew(Button);
+ back->set_flat(true);
hbc->add_child(back);
back->set_tooltip(TTR("Inspect Previous Instance"));
back->hide();
forward = memnew(Button);
+ forward->set_flat(true);
hbc->add_child(forward);
forward->set_tooltip(TTR("Inspect Next Instance"));
forward->hide();
@@ -1625,8 +1657,9 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
inspector->set_h_size_flags(SIZE_EXPAND_FILL);
inspector->hide_top_label();
inspector->get_scene_tree()->set_column_title(0, TTR("Variable"));
- inspector->set_capitalize_paths(false);
+ inspector->set_enable_capitalize_paths(false);
inspector->set_read_only(true);
+ inspector->connect("object_id_selected", this, "_scene_tree_property_select_object");
sc->add_child(inspector);
server = TCP_Server::create_ref();
@@ -1765,6 +1798,7 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
vmem_total->set_custom_minimum_size(Size2(100, 1) * EDSCALE);
vmem_hb->add_child(vmem_total);
vmem_refresh = memnew(Button);
+ vmem_refresh->set_flat(true);
vmem_hb->add_child(vmem_refresh);
vmem_vb->add_child(vmem_hb);
vmem_refresh->connect("pressed", this, "_video_mem_request");
@@ -1797,30 +1831,35 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
}
{ // misc
- VBoxContainer *info_left = memnew(VBoxContainer);
- info_left->set_h_size_flags(SIZE_EXPAND_FILL);
- info_left->set_name(TTR("Misc"));
- tabs->add_child(info_left);
+
+ GridContainer *grid_cont = memnew(GridContainer);
+ grid_cont->set_h_size_flags(SIZE_EXPAND_FILL);
+ grid_cont->set_name(TTR("Misc"));
+ grid_cont->set_columns(2);
+ tabs->add_child(grid_cont);
+
+ grid_cont->add_child(memnew(Label(TTR("Clicked Control:"))));
clicked_ctrl = memnew(LineEdit);
- info_left->add_margin_child(TTR("Clicked Control:"), clicked_ctrl);
+ grid_cont->add_child(clicked_ctrl);
+
+ grid_cont->add_child(memnew(Label(TTR("Clicked Control Type:"))));
clicked_ctrl_type = memnew(LineEdit);
- info_left->add_margin_child(TTR("Clicked Control Type:"), clicked_ctrl_type);
+ grid_cont->add_child(clicked_ctrl_type);
live_edit_root = memnew(LineEdit);
+ live_edit_root->set_h_size_flags(SIZE_EXPAND_FILL);
{
+ grid_cont->add_child(memnew(Label(TTR("Live Edit Root:"))));
+
HBoxContainer *lehb = memnew(HBoxContainer);
- Label *l = memnew(Label(TTR("Live Edit Root:")));
- lehb->add_child(l);
- l->set_h_size_flags(SIZE_EXPAND_FILL);
+ lehb->set_h_size_flags(SIZE_EXPAND_FILL);
+ lehb->add_child(live_edit_root);
le_set = memnew(Button(TTR("Set From Tree")));
lehb->add_child(le_set);
le_clear = memnew(Button(TTR("Clear")));
lehb->add_child(le_clear);
- info_left->add_child(lehb);
- MarginContainer *mc = memnew(MarginContainer);
- mc->add_child(live_edit_root);
- info_left->add_child(mc);
+ grid_cont->add_child(lehb);
le_set->set_disabled(true);
le_clear->set_disabled(true);
}
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index 48d015ec07..867302b657 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -1,5 +1,6 @@
# Arabic translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# athomield <athomield@hotmail.com>, 2017.
@@ -358,6 +359,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -365,6 +534,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -378,10 +570,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "الموقع:"
@@ -413,20 +601,6 @@ msgstr ""
msgid "Call"
msgstr "نداء"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr ""
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -476,13 +650,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -632,11 +799,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1111,10 +1273,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1479,21 +1637,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1762,10 +1905,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3736,6 +3875,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3783,6 +3926,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4232,6 +4383,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5088,11 +5247,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5104,7 +5263,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5140,10 +5299,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5202,6 +5357,10 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5385,7 +5544,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5452,10 +5611,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6057,6 +6212,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6616,6 +6775,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index fe15509a62..f884b33773 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -1,5 +1,6 @@
# Bulgarian translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Bojidar Marinov <bojidar.marinov.bg@gmail.com>, 2016.
@@ -356,6 +357,176 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Файл:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Имаше грешка при зареждане на Ñцената."
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -363,6 +534,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "ВнаÑÑне"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "ПриÑтавки"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -376,10 +570,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -411,20 +601,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr ""
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -474,13 +650,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -630,11 +799,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1110,10 +1274,6 @@ msgstr ""
msgid "Clear"
msgstr "ИзчиÑтване"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1478,21 +1638,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "ВнаÑÑне на обекти в проекта."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "ВнаÑÑне"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1761,10 +1906,6 @@ msgid "Installed Plugins:"
msgstr "ИнÑталирани приÑтавки:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3744,6 +3885,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3791,6 +3936,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4241,6 +4394,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5101,11 +5262,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5117,7 +5278,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5153,10 +5314,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5215,6 +5372,10 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5399,7 +5560,7 @@ msgstr ""
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr "ÐаÑтройки на проекта"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5466,10 +5627,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "ПриÑтавки"
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6079,6 +6236,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6664,6 +6825,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6732,6 +6904,13 @@ msgid ""
"texture to some node for display."
msgstr ""
+#~ msgid "Import assets to the project."
+#~ msgstr "ВнаÑÑне на обекти в проекта."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "ÐаÑтройки на проекта"
+
#~ msgid ""
#~ "A SampleLibrary resource must be created or set in the 'samples' property "
#~ "in order for SamplePlayer to play sound."
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index d4184dfe2b..3e4dec7656 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -1,5 +1,6 @@
# Bengali translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Abu Md. Maruf Sarker <maruf.webdev@gmail.com>, 2016-2017.
@@ -358,6 +359,184 @@ msgstr "শà§à¦°à§‡à¦£à§€à¦¬à¦¿à¦¨à§à¦¯à¦¾à¦¸/সারির মানের
msgid "Change Array Value"
msgstr "শà§à¦°à§‡à¦£à§€à¦¬à¦¿à¦¨à§à¦¯à¦¾à¦¸/সারির মান পরিবরà§à¦¤à¦¨ করà§à¦¨"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "সংসà§à¦•রণ:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "ফাইল"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "বরà§à¦£à¦¨à¦¾:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "ইনà§à¦¸à¦Ÿà¦²"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "বনà§à¦§ করà§à¦¨"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "সংযোগ.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "নোডের সাথে সংযà§à¦•à§à¦¤ করà§à¦¨:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "আবেদনকৃত ফাইল ফরমà§à¦¯à¦¾à¦Ÿ/ধরণ অজানা:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "সংযোগ.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "রিসোরà§à¦¸ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "নীচে"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "সকল"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -365,6 +544,29 @@ msgstr "শà§à¦°à§‡à¦£à§€à¦¬à¦¿à¦¨à§à¦¯à¦¾à¦¸/সারির মান পর
msgid "Search:"
msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "পà§à¦²à¦¾à¦—ইন-সমূহ"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "সাজান:"
@@ -378,10 +580,6 @@ msgid "Category:"
msgstr "বিভাগ:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "সকল"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "ওয়েবসাইট:"
@@ -413,20 +611,6 @@ msgstr "'%s' à¦à¦° জনà§à¦¯ মেথডের তালিকা:"
msgid "Call"
msgstr "ডাকà§à¦¨ (Call)"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "বনà§à¦§ করà§à¦¨"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "মেথডের তালিকা:"
@@ -477,13 +661,6 @@ msgid "Selection Only"
msgstr "শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নিরà§à¦¬à¦¾à¦šà¦¿à¦¤à¦¸à¦®à§‚হ"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "সনà§à¦§à¦¾à¦¨ করà§à¦¨"
@@ -635,11 +812,6 @@ msgstr "সামà§à¦ªà§à¦°à¦¤à¦¿à¦•:"
msgid "Matches:"
msgstr "মিলসমূহ:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "বরà§à¦£à¦¨à¦¾:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "à¦à¦° জনà§à¦¯ পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦•ের অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:"
@@ -1128,10 +1300,6 @@ msgstr " আউটপà§à¦Ÿ/ফলাফল:"
msgid "Clear"
msgstr "পরিসà§à¦•ার করà§à¦¨/কà§à¦²à§€à§Ÿà¦¾à¦°"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "দৃশà§à¦¯ হতে নোড"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1514,21 +1682,6 @@ msgid "Distraction Free Mode"
msgstr "বিকà§à¦·à§‡à¦ª-হীন মোড"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "উপাদানসমূহ পà§à¦°à¦•লà§à¦ªà§‡ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨à¥¤"
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "পà§à¦°à¦•লà§à¦ª অথবা দৃশà§à¦¯à§‡-বà§à¦¯à¦¾à¦ªà§€ বিবিধ সরঞà§à¦œà¦¾à¦®-সমূহ।"
@@ -1818,10 +1971,6 @@ msgid "Installed Plugins:"
msgstr "ইনà§à¦¸à¦Ÿà¦²-কৃত পà§à¦²à¦¾à¦—ইন-সমূহ:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "সংসà§à¦•রণ:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "লেখক:"
@@ -3830,6 +3979,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "AABB উৎপনà§à¦¨ করà§à¦¨"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "পৃষà§à¦ à¦¸à¦®à§‚হ কোনো আকার নেই!"
@@ -3882,6 +4036,16 @@ msgstr "আয়তন"
msgid "Emission Source: "
msgstr "Emission পূরণ:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "AABB উৎপনà§à¦¨ করà§à¦¨"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "গড় সময় (সেঃ)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "বকà§à¦°à¦°à§‡à¦–া হতে বিনà§à¦¦à§ অপসারণ করà§à¦¨"
@@ -4334,6 +4498,14 @@ msgid "Trim Trailing Whitespace"
msgstr "শেষের হোয়াইটসà§à¦ªà§‡à¦¸ ছেà¦à¦Ÿà§‡ ফেলà§à¦¨"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿà¦­à¦¾à¦¬à§‡ মাতà§à¦°à¦¾ দিন"
@@ -5207,12 +5379,12 @@ msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, পথটà¦
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, engine.cfg অবশà§à¦¯à¦‡ অনà§à¦ªà¦¸à§à¦¥à¦¿à¦¤ হতে হবে।"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ, engine.cfg অবশà§à¦¯à¦‡ উপসà§à¦¥à¦¿à¦¤ হতে হবে।"
#: editor/project_manager.cpp
@@ -5225,7 +5397,7 @@ msgstr "অকারà§à¦¯à¦•র পà§à¦°à¦•লà§à¦ªà§‡à¦° পথ (কোনà§
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦­à¦¬ হয়নি।"
#: editor/project_manager.cpp
@@ -5261,10 +5433,6 @@ msgid "Install Project:"
msgstr "পà§à¦°à¦•লà§à¦ª ইনà§à¦¸à¦Ÿà¦² করà§à¦¨:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "ইনà§à¦¸à¦Ÿà¦²"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "বà§à¦°à¦¾à¦‰à¦¸"
@@ -5325,6 +5493,11 @@ msgid "New Project"
msgstr "নতà§à¦¨ পà§à¦°à¦•লà§à¦ª"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "বসà§à¦¤à§ অপসারণ করà§à¦¨"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ করà§à¦¨"
@@ -5511,8 +5684,8 @@ msgstr "রিসোরà§à¦¸à§‡à¦° পà§à¦¨à¦ƒ-নকশার সিদà§à¦§
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° সেটিংস (engine.cfg)"
+msgid "Project Settings "
+msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° সেটিংস"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5578,10 +5751,6 @@ msgstr "ঘটনাসà§à¦¥à¦²"
msgid "AutoLoad"
msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿ-লোড"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "পà§à¦²à¦¾à¦—ইন-সমূহ"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6191,6 +6360,10 @@ msgid "Change Notifier Extents"
msgstr "Notifier à¦à¦° সীমা পরিবরà§à¦¤à¦¨ করà§à¦¨"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "পà§à¦°à§‹à¦¬à§‡à¦° (Probe) পরিবà§à¦¯à¦¾à¦ªà§à¦¤à¦¿ পরিবরà§à¦¤à¦¨ করà§à¦¨"
@@ -6792,6 +6965,17 @@ msgstr ""
"NavigationMeshInstance-কে অবশà§à¦¯à¦‡ Navigation-à¦à¦° অংশ অথবা অংশের অংশ হতে হবে। "
"à¦à¦Ÿà¦¾ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নà§à¦¯à¦¾à¦­à¦¿à¦—েশনের তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨ করে।"
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr "Path à¦à¦° দিক অবশà§à¦¯à¦‡ à¦à¦•টি কারà§à¦¯à¦•র Spatial নোডের à¦à¦° দিকে নিরà§à¦¦à§‡à¦¶ করাতে হবে।"
@@ -6868,6 +7052,16 @@ msgstr ""
"আকার ধারণ করতে পারে। অনà§à¦¯à¦¥à¦¾à§Ÿ, à¦à¦Ÿà¦¿à¦•ে à¦à¦•টি RenderTarget করà§à¦¨ à¦à¦¬à¦‚ à¦à¦° অভà§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ "
"দৃশà§à¦¯à¦¾à¦¬à¦²à¦¿à¦•ে (texture) দৃশà§à¦¯à¦®à¦¾à¦¨ করতে কোনো নোডে হসà§à¦¤à¦¾à¦¨à§à¦¤à¦° করà§à¦¨à¥¤"
+#~ msgid "Node From Scene"
+#~ msgstr "দৃশà§à¦¯ হতে নোড"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "উপাদানসমূহ পà§à¦°à¦•লà§à¦ªà§‡ ইমà§à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨à¥¤"
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° সেটিংস (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "পৃষà§à¦ à¦¤à¦²"
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index b125b6582f..6d7b245e58 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -1,5 +1,6 @@
# Catalan translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Roger BR <drai_kin@hotmail.com>, 2016.
@@ -358,6 +359,184 @@ msgstr "Canvia Tipus de la Matriu"
msgid "Change Array Value"
msgstr "Canvia Valor de la Matriu"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Versió:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Constants:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Fitxer:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descripció:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Tanca"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Connecta.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Connecta al Node:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Format de fitxer desconegut:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Desant..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Connecta.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Provant"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Error en desar recurs!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Errors de Càrrega"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Tot"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -365,6 +544,29 @@ msgstr "Canvia Valor de la Matriu"
msgid "Search:"
msgstr "Cerca:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Cerca"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Importa"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Ordena:"
@@ -378,10 +580,6 @@ msgid "Category:"
msgstr "Categoria:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Tot"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Lloc:"
@@ -413,20 +611,6 @@ msgstr "Llista de mètodes de '%s':"
msgid "Call"
msgstr "Crida"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Tanca"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Llista de mètodes:"
@@ -477,13 +661,6 @@ msgid "Selection Only"
msgstr "Selecció Només"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Cerca"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Troba"
@@ -634,11 +811,6 @@ msgstr "Recents:"
msgid "Matches:"
msgstr "Coincidències:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descripció:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Cerca Reemplaçant per a:"
@@ -1123,10 +1295,6 @@ msgstr " Sortida:"
msgid "Clear"
msgstr "Neteja"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Node de l'Escena"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1510,21 +1678,6 @@ msgid "Distraction Free Mode"
msgstr "Mode Lliure de Distraccions"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Importa actius al projecte."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Importa"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Eines vàries o d'escena."
@@ -1815,10 +1968,6 @@ msgid "Installed Plugins:"
msgstr "Connectors Instal·lats:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Versió:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Autor:"
@@ -3815,6 +3964,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3863,6 +4016,15 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Temps Mitjà (s)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4314,6 +4476,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5179,12 +5349,12 @@ msgstr ""
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "El camí de Destinació ha d'existir."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "El camí de Destinació ha d'existir."
#: editor/project_manager.cpp
@@ -5196,7 +5366,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5232,10 +5402,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5294,6 +5460,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Treu la Selecció"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5478,8 +5649,8 @@ msgstr ""
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Configuració del Projecte (engine.cfg)"
+msgid "Project Settings "
+msgstr "Configuració del Projecte"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5545,10 +5716,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6161,6 +6328,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6784,6 +6955,17 @@ msgstr ""
"NavigationMeshInstance ha de ser fill o nét d'un node Navigation. Només "
"proporciona dades de navegació."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6862,6 +7044,16 @@ msgstr ""
"forma per tal d'obtenir-ne la mida. Altrament, establiu-la com a Destinació "
"de Renderització i assigneu-ne la textura interna a algun node."
+#~ msgid "Node From Scene"
+#~ msgstr "Node de l'Escena"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Importa actius al projecte."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Configuració del Projecte (engine.cfg)"
+
#~ msgid ""
#~ "A SampleLibrary resource must be created or set in the 'samples' property "
#~ "in order for SamplePlayer to play sound."
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index 08982fd7e4..4643a9ac21 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -1,5 +1,6 @@
# Czech translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Jan 'spl!te' Kondelík <j.kondelik@centrum.cz>, 2016.
@@ -358,6 +359,181 @@ msgstr "Změnit typ hodnot pole"
msgid "Change Array Value"
msgstr "Změnit hodnotu pole"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Spojité"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Soubor:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Zavřít"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Připojit.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Připojit k uzlu:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Připojit.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Testované"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Chyba nahrávání fontu."
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Všechny"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -365,6 +541,29 @@ msgstr "Změnit hodnotu pole"
msgid "Search:"
msgstr "Hledat:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Hledat"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Řadit:"
@@ -378,10 +577,6 @@ msgid "Category:"
msgstr "Kategorie:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Všechny"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Web:"
@@ -413,20 +608,6 @@ msgstr "Seznam metod '%s':"
msgid "Call"
msgstr "Zavolat"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Zavřít"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Seznam metod:"
@@ -477,13 +658,6 @@ msgid "Selection Only"
msgstr "Pouze výběr"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Hledat"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Najít"
@@ -633,11 +807,6 @@ msgstr ""
msgid "Matches:"
msgstr "Shody:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Hledat náhradu za:"
@@ -1120,10 +1289,6 @@ msgstr ""
msgid "Clear"
msgstr "VyÄistit"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1488,21 +1653,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1772,10 +1922,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3753,6 +3899,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3800,6 +3950,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4251,6 +4409,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5111,11 +5277,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5127,7 +5293,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5163,10 +5329,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5225,6 +5387,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Odstranit výběr"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5409,7 +5576,7 @@ msgstr ""
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr "Nastavení projektu"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5476,10 +5643,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6087,6 +6250,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6695,6 +6862,17 @@ msgstr ""
"NavigationMeshInstance musí být dítÄ›tem nebo vnouÄetem uzlu Navigation. "
"Poskytuje pouze data pro navigaci."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6774,6 +6952,10 @@ msgstr ""
"mohl získat velikost. Jinak ho nastavte jako render target a pÅ™iÅ™aÄte jeho "
"vnitřní texturu nějakému uzlu k zobrazení."
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Nastavení projektu"
+
#~ msgid ""
#~ "A SampleLibrary resource must be created or set in the 'samples' property "
#~ "in order for SamplePlayer to play sound."
diff --git a/editor/translations/da.po b/editor/translations/da.po
index 49b26f6ed2..ba9d018e5a 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -1,5 +1,6 @@
# Danish translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# David Lamhauge <davidlamhauge@gmail.com>, 2016.
@@ -356,6 +357,181 @@ msgstr "Skift Array værditype"
msgid "Change Array Value"
msgstr "Ændre Array-værdi"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Kontinuerlig"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Fil:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Luk"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Forbind..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Opret forbindelse til Node:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Forbind..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Tester"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Error loading skrifttype."
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Alle"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -363,6 +539,29 @@ msgstr "Ændre Array-værdi"
msgid "Search:"
msgstr "Søgning:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Søg"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Sorter:"
@@ -376,10 +575,6 @@ msgid "Category:"
msgstr "Kategori:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Alle"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Websted:"
@@ -411,20 +606,6 @@ msgstr "Metode liste For '%s':"
msgid "Call"
msgstr "Kald"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Luk"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Metode liste:"
@@ -475,13 +656,6 @@ msgid "Selection Only"
msgstr "Kun Valgte"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Søg"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Find"
@@ -631,11 +805,6 @@ msgstr ""
msgid "Matches:"
msgstr "Matches:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Søg erstatning For:"
@@ -1114,10 +1283,6 @@ msgstr ""
msgid "Clear"
msgstr "Clear"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1482,21 +1647,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1765,10 +1915,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3744,6 +3890,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3791,6 +3941,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4242,6 +4400,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5099,11 +5265,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5115,7 +5281,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5151,10 +5317,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5213,6 +5375,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Fjern markering"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5396,7 +5563,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5463,10 +5630,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6072,6 +6235,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6672,6 +6839,17 @@ msgstr ""
"NavigationMeshInstance skal være et barn eller barnebarn til en Navigation "
"node. Det giver kun navigationsdata."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
diff --git a/editor/translations/de.po b/editor/translations/de.po
index ac615e885b..a10eaefa29 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -1,5 +1,6 @@
# German translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Alexander Mahr <alex.mahr@gmail.com>, 2016.
@@ -375,6 +376,184 @@ msgstr "Wertetyp des Arrays ändern"
msgid "Change Array Value"
msgstr "Array-Wert ändern"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Version:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Konstanten:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Datei"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Beschreibung:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Installieren"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Schließen"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Verbinde.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Verbinde mit Node:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Angefordertes Dateiformat unbekannt:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Speichere.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Verbinde.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Testphase"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Fehler beim speichern der Ressource!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Herunter"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Alle"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -382,6 +561,29 @@ msgstr "Array-Wert ändern"
msgid "Search:"
msgstr "Suche:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Suche"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Import"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Erweiterungen"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Sortiere:"
@@ -395,10 +597,6 @@ msgid "Category:"
msgstr "Kategorie:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Alle"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Seite:"
@@ -430,20 +628,6 @@ msgstr "Methodenliste für '%s':"
msgid "Call"
msgstr "Aufruf"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Schließen"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Methodenliste:"
@@ -494,13 +678,6 @@ msgid "Selection Only"
msgstr "Nur Auswahl"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Suche"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Finde"
@@ -652,11 +829,6 @@ msgstr "Kürzlich:"
msgid "Matches:"
msgstr "Treffer:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Beschreibung:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Suche Ersatz für:"
@@ -1145,10 +1317,6 @@ msgstr " Ausgabe:"
msgid "Clear"
msgstr "Löschen"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Node aus Szene"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1533,21 +1701,6 @@ msgid "Distraction Free Mode"
msgstr "Ablenkungsfreier Modus"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Importiere Medieninhalte ins Projekt."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Import"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Sonstiges Projekt oder szenenübergreifende Werkzeuge."
@@ -1837,10 +1990,6 @@ msgid "Installed Plugins:"
msgstr "Installierte Erweiterungen:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Version:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Autor:"
@@ -3852,6 +4001,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "Erzeuge AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "Flächen enthalten keinen Bereich!"
@@ -3904,6 +4058,16 @@ msgstr "Volumen"
msgid "Emission Source: "
msgstr "Emissionsfüllung:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "Erzeuge AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Durchschnittszeit (Sek)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Punkt von Kurve entfernen"
@@ -4358,6 +4522,14 @@ msgid "Trim Trailing Whitespace"
msgstr "kürze Leerraum am Zeilenende"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "Automatische Einrückung"
@@ -5232,12 +5404,12 @@ msgstr "Ungültiger Projektpfad, der Pfad muss existieren!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "Ungültiger Projektpfad, engine.cfg darf nicht existieren."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "Ungültiger Projektpfad, engine.cfg muss existieren."
#: editor/project_manager.cpp
@@ -5250,7 +5422,7 @@ msgstr "Ungültiger Projektpfad (etwas geändert?)."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "Konnte engine.cfg in Projektpfad nicht erzeugen."
#: editor/project_manager.cpp
@@ -5286,10 +5458,6 @@ msgid "Install Project:"
msgstr "Installiere Projekt:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "Installieren"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Durchstöbern"
@@ -5350,6 +5518,11 @@ msgid "New Project"
msgstr "Neues Projekt"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Entferne Element"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Verlassen"
@@ -5536,8 +5709,8 @@ msgstr "Ressourcen-Remap-Option entfernen"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Projekteinstellungen (engine.cfg)"
+msgid "Project Settings "
+msgstr "Projekteinstellungen"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5603,10 +5776,6 @@ msgstr "Lokalisierung"
msgid "AutoLoad"
msgstr "Autoload"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Erweiterungen"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6220,6 +6389,10 @@ msgid "Change Notifier Extents"
msgstr "Ändere Ausmaße des Benachrichtigers"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
#, fuzzy
msgid "Change Probe Extents"
msgstr "Ändere Ausmaße des Benachrichtigers"
@@ -6842,6 +7015,17 @@ msgstr ""
"Eine NavigationMesh-Instanz muss ein Unterobjekt erster oder höherer Ordnung "
"eines Navigation-Nodes sein. Es liefert nur Navigationsdaten."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr "Die Pfad-Eigenschaft muss auf ein gültiges Spatial-Node verweisen."
@@ -6920,6 +7104,16 @@ msgstr ""
"Eigenschaft ‚Render Target‘ des Viewports aktiviert und seine Textur "
"irgendeinem Node zum Anzeigen zugewiesen werden."
+#~ msgid "Node From Scene"
+#~ msgstr "Node aus Szene"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Importiere Medieninhalte ins Projekt."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Projekteinstellungen (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "Oberfläche"
diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po
index ae6d433e54..183f09e9a6 100644
--- a/editor/translations/de_CH.po
+++ b/editor/translations/de_CH.po
@@ -1,5 +1,6 @@
# Swiss High German translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Christian Fisch <christian.fiesel@gmail.com>, 2016.
@@ -355,6 +356,178 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Datei(en) öffnen"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Verbindung zu Node:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Connections editieren"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Szene kann nicht gespeichert werden."
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -362,6 +535,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -375,10 +571,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -410,20 +602,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr ""
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -473,13 +651,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -630,11 +801,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1108,10 +1274,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Node von Szene"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1477,21 +1639,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Assets zum Projekt importieren."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Verschiedene Projekte oder Szenenweite Werkzeuge."
@@ -1764,10 +1911,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3758,6 +3901,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "Flächen enthalten keinen Bereich!"
@@ -3807,6 +3954,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4256,6 +4411,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5116,12 +5279,12 @@ msgstr "Ungültiger Projektpfad, Pfad existiert nicht!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "Ungültiger Projektpfad, engine.cfg vorhanden!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "Ungültiger Projektpfad, engine.cfg nicht vorhanden!"
#: editor/project_manager.cpp
@@ -5134,7 +5297,7 @@ msgstr "Ungültiger Projektpfad, (wurde was geändert?)!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "Die engine.cfg kann im Projektverzeichnis nicht erstellt werden."
#: editor/project_manager.cpp
@@ -5170,10 +5333,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5232,6 +5391,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Ungültige Bilder löschen"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5416,7 +5580,7 @@ msgstr ""
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr "Projekteinstellungen"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5483,10 +5647,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6095,6 +6255,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6669,6 +6833,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6735,6 +6910,16 @@ msgid ""
"texture to some node for display."
msgstr ""
+#~ msgid "Node From Scene"
+#~ msgstr "Node von Szene"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Assets zum Projekt importieren."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Projekteinstellungen"
+
#~ msgid "Surface"
#~ msgstr "Oberfläche"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index 276662dbed..5f50c159b8 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -1,5 +1,6 @@
# LANGUAGE translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
@@ -349,6 +350,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -356,6 +525,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -369,10 +561,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -404,20 +592,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr ""
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -467,13 +641,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -623,11 +790,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1101,10 +1263,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1469,21 +1627,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1752,10 +1895,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3725,6 +3864,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3772,6 +3915,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4221,6 +4372,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5077,11 +5236,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5093,7 +5252,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5129,10 +5288,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5191,6 +5346,10 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5374,7 +5533,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5441,10 +5600,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6044,6 +6199,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6584,6 +6743,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/el.po b/editor/translations/el.po
index 357112ce0c..0879b693ff 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -1,5 +1,6 @@
# Greek translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# gtsiam <gtsiam@windowslive.com>, 2017.
@@ -358,6 +359,182 @@ msgstr "Αλλαγή Ï„Ïπου τιμής πίνακα"
msgid "Change Array Value"
msgstr "Αλλαγή τιμής πίνακα"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "ΣταθεÏές:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "ΑÏχείο:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "ΠεÏιγÏαφή:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Κλείσιμο"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "ΣÏνδεση.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "ΣÏνδεση στον κόμβο:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Ζητήθηκε άγνωστη μοÏφή αÏχείου:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "ΣÏνδεση.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Δοκιμιμαστικά"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Σφάλμα κατά την αποθήκευση πόÏου!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Όλα"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -365,6 +542,29 @@ msgstr "Αλλαγή τιμής πίνακα"
msgid "Search:"
msgstr "Αναζήτηση:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Αναζήτηση"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Εισαγωγή"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Ταξινόμηση:"
@@ -378,10 +578,6 @@ msgid "Category:"
msgstr "ΚατηγοÏία:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Όλα"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "ΔιεÏθυνση:"
@@ -413,20 +609,6 @@ msgstr "Λίστα συναÏτήσεων για '%s':"
msgid "Call"
msgstr "Κλήση"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Κλείσιμο"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Λίστα συναÏτήσεων:"
@@ -477,13 +659,6 @@ msgid "Selection Only"
msgstr "Μόνο στην επιλογή"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Αναζήτηση"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "ΕÏÏεση"
@@ -635,11 +810,6 @@ msgstr "ΠÏόσφατα:"
msgid "Matches:"
msgstr "Αντιστοιχίες:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "ΠεÏιγÏαφή:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Αναζήτηση αντικατάστασης για:"
@@ -1125,10 +1295,6 @@ msgstr " Έξοδος:"
msgid "Clear"
msgstr "ΕκκαθάÏιση"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Κόμβος από σκηνή"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1517,21 +1683,6 @@ msgid "Distraction Free Mode"
msgstr "ΛειτουÏγία χωÏίς διάσπαση Ï€Ïοσοχής"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Εισαγωγή πόÏων στο έÏγο."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Εισαγωγή"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Λοιπά έÏγα ή εÏγαλεία για όλη τη σκηνή."
@@ -1821,10 +1972,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3804,6 +3951,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3851,6 +4002,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4301,6 +4460,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5163,11 +5330,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5179,7 +5346,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5215,10 +5382,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5277,6 +5440,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "ΑφαίÏεση επιλογής"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5461,7 +5629,7 @@ msgstr ""
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr "Ρυθμίσεις έÏγου"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5528,10 +5696,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6134,6 +6298,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6758,6 +6926,17 @@ msgstr ""
"Ένας κόμβος NavigationMeshInstance Ï€Ïέπει να κληÏονομεί έναν κόμβο Ï„Ïπου "
"Navigation, διότι διαθέτει μόνο δεδομένα πλοήγησης."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
@@ -6836,6 +7015,16 @@ msgstr ""
"μέγεθος. Αλλιώς, κάντε το ένα RenderTarget και οÏίστε το internal texture σε "
"έναν κόμβο για απεικόνιση."
+#~ msgid "Node From Scene"
+#~ msgstr "Κόμβος από σκηνή"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Εισαγωγή πόÏων στο έÏγο."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Ρυθμίσεις έÏγου"
+
#~ msgid ""
#~ "A SampleLibrary resource must be created or set in the 'samples' property "
#~ "in order for SamplePlayer to play sound."
diff --git a/editor/translations/es.po b/editor/translations/es.po
index 6c9c54d88e..f01c84718b 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -1,5 +1,6 @@
# Spanish translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Alejandro Alvarez <eliluminado00@gmail.com>, 2017.
@@ -366,6 +367,184 @@ msgstr "Cambiar tipo de valor del «array»"
msgid "Change Array Value"
msgstr "Cambiar valor del «array»"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Versión:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Constantes:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Archivo"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descripción:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Instalar"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Cerrar"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Conectar.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Conectar a nodo:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Formato de archivo desconocido:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Guardando…"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Conectar.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Prueba"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "¡Hubo un error al guardar el recurso!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Abajo"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Todos"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -373,6 +552,29 @@ msgstr "Cambiar valor del «array»"
msgid "Search:"
msgstr "Buscar:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Buscar"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Importar"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Plugins"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Ordenar:"
@@ -386,10 +588,6 @@ msgid "Category:"
msgstr "Categoría:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Todos"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Sitio:"
@@ -421,20 +619,6 @@ msgstr "Lista de métodos Para '%s':"
msgid "Call"
msgstr "Llamada"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Cerrar"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Lista de métodos:"
@@ -485,13 +669,6 @@ msgid "Selection Only"
msgstr "Sólo selección"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Buscar"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Búsqueda"
@@ -645,11 +822,6 @@ msgstr "Recientes:"
msgid "Matches:"
msgstr "Coincidencias:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descripción:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Buscar reemplazo para:"
@@ -1141,10 +1313,6 @@ msgstr " Salida:"
msgid "Clear"
msgstr "Borrar todo"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Nodo desde escena"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1529,21 +1697,6 @@ msgid "Distraction Free Mode"
msgstr "Modo sin distracciones"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Importar elementos al proyecto."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Importar"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Herramientas varias o de escenas."
@@ -1834,10 +1987,6 @@ msgid "Installed Plugins:"
msgstr "Plugins instalados:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Versión:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Autor:"
@@ -3868,6 +4017,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "Generar AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "¡Las caras no contienen área!"
@@ -3920,6 +4074,16 @@ msgstr "Volumen"
msgid "Emission Source: "
msgstr "Relleno de emisión:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "Generar AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Tiempo promedio (seg)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Borrar punto de curva"
@@ -4377,6 +4541,14 @@ msgid "Trim Trailing Whitespace"
msgstr "Borrar espacios sobrantes al final"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "Autoindentar"
@@ -5255,12 +5427,12 @@ msgstr "¡La ruta del proyecto no es correcta, tiene que existir!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "La ruta del proyecto no es correcta, engine.cfg no debe existir."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "¡La ruta del proyecto no es correcta, engine.cfg debe existir."
#: editor/project_manager.cpp
@@ -5273,7 +5445,7 @@ msgstr "La ruta del proyecto no es correcta (¿has cambiado algo?)."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "No se pudo crear engine.cfg en la ruta de proyecto."
#: editor/project_manager.cpp
@@ -5309,10 +5481,6 @@ msgid "Install Project:"
msgstr "Instalar proyecto:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "Instalar"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Examinar"
@@ -5375,6 +5543,11 @@ msgid "New Project"
msgstr "Proyecto nuevo"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Remover Item"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Salir"
@@ -5561,8 +5734,8 @@ msgstr "Quitar opción de remapeo de recursos"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Ajustes de proyecto (engine.cfg)"
+msgid "Project Settings "
+msgstr "Ajustes del proyecto"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5628,10 +5801,6 @@ msgstr "Idioma"
msgid "AutoLoad"
msgstr "AutoLoad"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Plugins"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6254,6 +6423,10 @@ msgid "Change Notifier Extents"
msgstr "Cambiar Alcances de Notificadores"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
#, fuzzy
msgid "Change Probe Extents"
msgstr "Cambiar Alcances de Notificadores"
@@ -6899,6 +7072,17 @@ msgstr ""
"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Ya "
"que sólo proporciona los datos de navegación."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6977,6 +7161,16 @@ msgstr ""
"que pueda obtener un tamaño. Alternativamente, hacelo un RenderTarget y "
"asigná su textura interna a algún otro nodo para mostrar."
+#~ msgid "Node From Scene"
+#~ msgstr "Nodo desde escena"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Importar elementos al proyecto."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Ajustes de proyecto (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "Superficie"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index 502b043378..f826517b27 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -1,5 +1,6 @@
# Spanish (Argentina) translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2017.
@@ -361,6 +362,184 @@ msgstr "Cambiar Tipo de Valor del Array"
msgid "Change Array Value"
msgstr "Cambiar Valor del Array"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Version:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Constantes:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Archivo"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descripción:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Instalar"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Cerrar"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Conectar.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Conectar a Nodo:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Formato requerido de archivo desconocido:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Guardando.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Conectar.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Testeo"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Error al guardar el recurso!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Abajo"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Todos"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -368,6 +547,29 @@ msgstr "Cambiar Valor del Array"
msgid "Search:"
msgstr "Buscar:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Buscar"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Importar"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Plugins"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Ordenar:"
@@ -381,10 +583,6 @@ msgid "Category:"
msgstr "Categoría:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Todos"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Sitio:"
@@ -416,20 +614,6 @@ msgstr "Lista de Métodos Para '%s':"
msgid "Call"
msgstr "Llamar"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Cerrar"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Lista de Métodos:"
@@ -480,13 +664,6 @@ msgid "Selection Only"
msgstr "Solo Selección"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Buscar"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Encontrar"
@@ -638,11 +815,6 @@ msgstr "Recientes:"
msgid "Matches:"
msgstr "Coincidencias:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descripción:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Buscar Reemplazo Para:"
@@ -1130,10 +1302,6 @@ msgstr " Salida:"
msgid "Clear"
msgstr "Limpiar"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Nodo desde Escena"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1515,21 +1683,6 @@ msgid "Distraction Free Mode"
msgstr "Modo Sin Distracciones"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Importar assets al proyecto."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Importar"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Herramientas misceláneas a nivel proyecto o escena."
@@ -1819,10 +1972,6 @@ msgid "Installed Plugins:"
msgstr "Plugins Instalados:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Version:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Autor:"
@@ -3837,6 +3986,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "Generar AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "Las caras no contienen area!"
@@ -3889,6 +4043,16 @@ msgstr "Volumen"
msgid "Emission Source: "
msgstr "Relleno de Emisión:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "Generar AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Tiempo Promedio (seg)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Remover Punto de Curva"
@@ -4343,6 +4507,14 @@ msgid "Trim Trailing Whitespace"
msgstr "Eliminar Espacios Sobrantes al Final"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "Auto Indentar"
@@ -5217,12 +5389,12 @@ msgstr "Ruta de proyecto inválida, la ruta debe existir!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "Ruta de proyecto inválida, engine.cfg no debe existir."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "Ruta de proyecto inválida, engine.cfg debe existir."
#: editor/project_manager.cpp
@@ -5235,7 +5407,7 @@ msgstr "Ruta de proyecto inválida (cambiaste algo?)."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "No se pudo crear engine.cfg en la ruta de proyecto."
#: editor/project_manager.cpp
@@ -5271,10 +5443,6 @@ msgid "Install Project:"
msgstr "Instalar Proyecto:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "Instalar"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Examinar"
@@ -5337,6 +5505,11 @@ msgid "New Project"
msgstr "Proyecto Nuevo"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Remover Item"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Salir"
@@ -5523,8 +5696,8 @@ msgstr "Remover Opción de Remapeo de Recursos"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Ajustes de Proyecto (engine.cfg)"
+msgid "Project Settings "
+msgstr "Configuración de Proyecto"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5590,10 +5763,6 @@ msgstr "Locale"
msgid "AutoLoad"
msgstr "AutoLoad"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Plugins"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6205,6 +6374,10 @@ msgid "Change Notifier Extents"
msgstr "Cambiar Alcances de Notificadores"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "Cambiar Extensión de Sonda"
@@ -6825,6 +6998,17 @@ msgstr ""
"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Solo "
"provee datos de navegación."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
@@ -6902,6 +7086,16 @@ msgstr ""
"que pueda obtener un tamaño. Alternativamente, hacelo un RenderTarget y "
"asigná su textura interna a algún otro nodo para mostrar."
+#~ msgid "Node From Scene"
+#~ msgstr "Nodo desde Escena"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Importar assets al proyecto."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Ajustes de Proyecto (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "Superficie"
diff --git a/editor/translations/extract.py b/editor/translations/extract.py
index 616fec17a0..5e6c894936 100755
--- a/editor/translations/extract.py
+++ b/editor/translations/extract.py
@@ -38,7 +38,8 @@ unique_str = []
unique_loc = {}
main_po = """
# LANGUAGE translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index 2cfd69f3bd..e8402fcb25 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -1,5 +1,6 @@
# Persian translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# alabd14313 <alabd14313@yahoo.com>, 2016.
@@ -360,6 +361,182 @@ msgstr "نوع مقدار آرایه را تغییر بده"
msgid "Change Array Value"
msgstr "مقدار آرایه را تغییر بده"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "نسخه:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "مستمر"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "پرونده:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "توضیح:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "بستن"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "در حال اتصال..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "اتصال به گره:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "در حال اتصال..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "آزمودن"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "خطای بارگذاری قلم."
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "خطاهای بارگذاری"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "همه"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -367,6 +544,29 @@ msgstr "مقدار آرایه را تغییر بده"
msgid "Search:"
msgstr "جستجو:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "جستجو"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "مرتب‌سازی:"
@@ -380,10 +580,6 @@ msgid "Category:"
msgstr "طبقه‌بندی:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "همه"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "تارنما:"
@@ -415,20 +611,6 @@ msgstr "لیست متد برای 's%' :"
msgid "Call"
msgstr "ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "بستن"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Ùهرست متدها:"
@@ -479,13 +661,6 @@ msgid "Selection Only"
msgstr "تنها در قسمت انتخاب شده"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "جستجو"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "ÛŒØ§ÙØªÙ†"
@@ -636,11 +811,6 @@ msgstr ""
msgid "Matches:"
msgstr "تطبیق‌ها:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "توضیح:"
-
#: editor/dependency_editor.cpp
#, fuzzy
msgid "Search Replacement For:"
@@ -1125,10 +1295,6 @@ msgstr " خروجی:"
msgid "Clear"
msgstr "پاک کردن"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1493,21 +1659,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1777,10 +1928,6 @@ msgid "Installed Plugins:"
msgstr "Ø§ÙØ²ÙˆÙ†Ù‡ های نصب شده:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "نسخه:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "خالق:"
@@ -3762,6 +3909,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3809,6 +3960,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4260,6 +4419,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5119,11 +5286,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5135,7 +5302,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5171,10 +5338,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5235,6 +5398,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "برداشتن انتخاب شده"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5418,8 +5586,9 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
-msgstr ""
+#, fuzzy
+msgid "Project Settings "
+msgstr "ترجیحات"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5485,10 +5654,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6097,6 +6262,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6711,6 +6880,17 @@ msgstr ""
"NavigationMeshInstance باید یک ÙØ±Ø²Ù†Ø¯ یا نوه‌ی یک گره Navigation باشد. این "
"تنها داده‌ی پیمایش را ÙØ±Ø§Ù‡Ù… می‌کند."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index 5b0076400c..8db0cf2555 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -1,5 +1,6 @@
# French translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Brice <bbric@free.fr>, 2016.
@@ -372,6 +373,184 @@ msgstr "Modifier type de valeur du tableau"
msgid "Change Array Value"
msgstr "Modifier valeur du tableau"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Version :"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Constantes :"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Fichier"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Description :"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Installer"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Fermer"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Connecter…"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Connecter au nœud :"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Format de fichier demandé inconnu :"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Enregistrement…"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Connecter…"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "En test"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Erreur d'enregistrement de la ressource !"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Bas"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Tout"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -379,6 +558,29 @@ msgstr "Modifier valeur du tableau"
msgid "Search:"
msgstr "Rechercher :"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Rechercher"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Importer"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Extensions"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Trier :"
@@ -392,10 +594,6 @@ msgid "Category:"
msgstr "Catégorie :"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Tout"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Site :"
@@ -427,20 +625,6 @@ msgstr "Liste des méthodes pour « %s » :"
msgid "Call"
msgstr "Appel"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Fermer"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Liste des méthodes :"
@@ -491,13 +675,6 @@ msgid "Selection Only"
msgstr "Sélection uniquement"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Rechercher"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Trouver"
@@ -649,11 +826,6 @@ msgstr "Récents :"
msgid "Matches:"
msgstr "Correspondances :"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Description :"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Rechercher un remplacement pour :"
@@ -1146,10 +1318,6 @@ msgstr " Sortie :"
msgid "Clear"
msgstr "Effacer"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Nœud à partir d'une scène"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1535,21 +1703,6 @@ msgid "Distraction Free Mode"
msgstr "Mode sans distraction"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Importer des ressources dans le projet."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Importer"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Outils divers liés au projet ou à la scène."
@@ -1842,10 +1995,6 @@ msgid "Installed Plugins:"
msgstr "Extensions installées :"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Version :"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Auteur :"
@@ -3878,6 +4027,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "Générer un AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "Les faces n'ont pas de surface !"
@@ -3930,6 +4084,16 @@ msgstr "Volume"
msgid "Emission Source: "
msgstr "Remplissage d'émission :"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "Générer un AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Temps moyen (seconde)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Supprimer le point d'une courbe"
@@ -4385,6 +4549,14 @@ msgid "Trim Trailing Whitespace"
msgstr "Supprimer les espaces de fin de ligne"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "Indentation automatique"
@@ -5260,12 +5432,12 @@ msgstr "Chemin de projet invalide, le chemin doit exister !"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "Chemin de projet invalide, engine.cfg ne doit pas exister."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "Chemin de projet invalide, engine.cfg doit exister."
#: editor/project_manager.cpp
@@ -5278,7 +5450,7 @@ msgstr "Chemin de projet non valide (avez-vous changé quelque chose ?)."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
"Impossible de créer le fichier engine.cfg dans le répertoire du projet."
@@ -5319,10 +5491,6 @@ msgid "Install Project:"
msgstr "Projets récents :"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "Installer"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Parcourir"
@@ -5386,6 +5554,11 @@ msgid "New Project"
msgstr "Nouveau projet"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Supprimer l'item"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Quitter"
@@ -5572,8 +5745,8 @@ msgstr ""
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Paramètres du projet (engine.cfg)"
+msgid "Project Settings "
+msgstr "Paramètres du projet"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5639,10 +5812,6 @@ msgstr "Langue"
msgid "AutoLoad"
msgstr "AutoLoad"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Extensions"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6261,6 +6430,10 @@ msgid "Change Notifier Extents"
msgstr "Changer les extents d'un notificateur"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
#, fuzzy
msgid "Change Probe Extents"
msgstr "Changer les extents d'un notificateur"
@@ -6885,6 +7058,17 @@ msgstr ""
"Un NavigationMeshInstance doit être enfant ou sous-enfant d'un nœud de type "
"Navigation. Il fournit uniquement des données de navigation."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
@@ -6963,6 +7147,16 @@ msgstr ""
"nœud de type Control afin qu'il en obtienne une taille. Sinon, faites-en une "
"RenderTarget et assignez sa texture à un nœud pouvant l'afficher."
+#~ msgid "Node From Scene"
+#~ msgstr "Nœud à partir d'une scène"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Importer des ressources dans le projet."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Paramètres du projet (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "Surface"
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index b26c92257f..2d1b36d2ea 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -1,5 +1,6 @@
# Hungarian translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Varga Dániel <danikah.danikah@gmail.com>, 2016.
@@ -355,6 +356,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -362,6 +531,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -375,10 +567,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -410,20 +598,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr ""
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -473,13 +647,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -629,11 +796,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1107,10 +1269,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1475,21 +1633,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1758,10 +1901,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3731,6 +3870,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3778,6 +3921,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4227,6 +4378,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5083,11 +5242,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5099,7 +5258,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5135,10 +5294,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5197,6 +5352,10 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5380,7 +5539,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5447,10 +5606,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6050,6 +6205,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6590,6 +6749,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/id.po b/editor/translations/id.po
index 8151c3208c..2abf4090c8 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -1,5 +1,6 @@
# Indonesian translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Abdul Aziz Muslim Alqudsy <abdul.aziz.muslim.alqudsy@gmail.com>, 2016.
@@ -380,6 +381,182 @@ msgstr "Ubah Tipe Nilai Array"
msgid "Change Array Value"
msgstr "Ubah Nilai Array"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Konstanta:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "File:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Deskripsi:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Tutup"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Menyambungkan.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Sambungkan Ke Node:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Format file yang diminta tidak diketahui:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Menyambungkan.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Menguji"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Error menyimpan resource!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Semua"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -387,6 +564,29 @@ msgstr "Ubah Nilai Array"
msgid "Search:"
msgstr "Cari:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Cari"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Sortir:"
@@ -400,10 +600,6 @@ msgid "Category:"
msgstr "Kategori:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Semua"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Situs:"
@@ -435,20 +631,6 @@ msgstr "Daftar Fungsi Untuk '%s':"
msgid "Call"
msgstr "Panggil"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Tutup"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Daftar Fungsi:"
@@ -500,13 +682,6 @@ msgid "Selection Only"
msgstr "Hanya yang Dipilih"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Cari"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Cari"
@@ -659,11 +834,6 @@ msgstr "Saat ini:"
msgid "Matches:"
msgstr "Kecocokan:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Deskripsi:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Cari Ganti Untuk:"
@@ -1158,10 +1328,6 @@ msgstr " Keluaran:"
msgid "Clear"
msgstr "Bersihkan"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Node Dari Scene"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1545,21 +1711,6 @@ msgid "Distraction Free Mode"
msgstr "Mode Tanpa Gangguan"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1830,10 +1981,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3815,6 +3962,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3862,6 +4013,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4313,6 +4472,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5174,11 +5341,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5190,7 +5357,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5226,10 +5393,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5288,6 +5451,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Hapus Pilihan"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5473,7 +5641,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5540,10 +5708,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6156,6 +6320,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6772,6 +6940,17 @@ msgstr ""
"NavigationMeshInstance harus menjadi child atau grandchild untuk sebuah node "
"Navigation. Ini hanya menyediakan data navigasi."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6853,6 +7032,9 @@ msgstr ""
"sebuah RenderTarget dan tetapkannya tekstur internal untuk beberapa node "
"untuk ditampilkan."
+#~ msgid "Node From Scene"
+#~ msgstr "Node Dari Scene"
+
#~ msgid ""
#~ "A SampleLibrary resource must be created or set in the 'samples' property "
#~ "in order for SamplePlayer to play sound."
diff --git a/editor/translations/it.po b/editor/translations/it.po
index affd0dfdc1..08d04d296b 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -1,5 +1,6 @@
# Italian translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Dario Bonfanti <bonfi.96@hotmail.it>, 2016-2017.
@@ -360,6 +361,184 @@ msgstr "Cambia Tipo del Valore Array"
msgid "Change Array Value"
msgstr "Cambia Valore Array"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Versione:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Costanti:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "File"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descrizione:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Installa"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Chiudi"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Connetti.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Connetti A Nodo:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Formato file richiesto sconosciuto:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Salvataggio.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Connetti.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Testing"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Errore salvando la Risorsa!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Giù"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Tutti"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -367,6 +546,29 @@ msgstr "Cambia Valore Array"
msgid "Search:"
msgstr "Cerca:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Cerca"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Importa"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Plugins"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Ordina:"
@@ -380,10 +582,6 @@ msgid "Category:"
msgstr "Categoria:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Tutti"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Sito:"
@@ -415,20 +613,6 @@ msgstr "Lista Metodi Per '%s':"
msgid "Call"
msgstr "Chiama"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Chiudi"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Lista Metodi:"
@@ -479,13 +663,6 @@ msgid "Selection Only"
msgstr "Solo Selezione"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Cerca"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Trova"
@@ -637,11 +814,6 @@ msgstr "Recenti:"
msgid "Matches:"
msgstr "Corrispondenze:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descrizione:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Cerca Rimpiazzo Per:"
@@ -1130,10 +1302,6 @@ msgstr " Output:"
msgid "Clear"
msgstr "Rimuovi"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Nodo Da Scena"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1517,21 +1685,6 @@ msgid "Distraction Free Mode"
msgstr "Modalità Senza Distrazioni"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Importa asset nel progetto."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Importa"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Strumenti di progetto o scena vari."
@@ -1820,10 +1973,6 @@ msgid "Installed Plugins:"
msgstr "Plugins Installati:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Versione:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Autore:"
@@ -3838,6 +3987,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "Genera AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "Le facce non contengono area!"
@@ -3890,6 +4044,16 @@ msgstr "Volume"
msgid "Emission Source: "
msgstr "Riempimento Emissione:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "Genera AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Tempo Medio (sec)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Rimuovi Punto da Curva"
@@ -4344,6 +4508,14 @@ msgid "Trim Trailing Whitespace"
msgstr "Taglia Spazi in Coda"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "Auto Indenta"
@@ -5218,12 +5390,12 @@ msgstr "Percorso di progetto invalido, il percorso deve esistere!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "Percorso di progetto invalido, engine.cfg non deve esistere."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "Percorso di progetto invalido, engine.cfg deve esistere."
#: editor/project_manager.cpp
@@ -5236,7 +5408,7 @@ msgstr "Percorso di progetto invalido (cambiato qualcosa?)."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "Impossibile creare engine.cfg nel percorso di progetto."
#: editor/project_manager.cpp
@@ -5272,10 +5444,6 @@ msgid "Install Project:"
msgstr "Installa Progetto:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "Installa"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Sfoglia"
@@ -5336,6 +5504,11 @@ msgid "New Project"
msgstr "Nuovo Progetto"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Rimuovi Elemento"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Esci"
@@ -5522,8 +5695,8 @@ msgstr "Rimuovi Opzione di Remap Rimorse"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Impostazioni Progetto (engine.cfg)"
+msgid "Project Settings "
+msgstr "Impostazioni Progetto"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5589,10 +5762,6 @@ msgstr "Locale"
msgid "AutoLoad"
msgstr "AutoLoad"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Plugins"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6202,6 +6371,10 @@ msgid "Change Notifier Extents"
msgstr "Cambia Estensione di Notifier"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "Cambia Estensione Probe"
@@ -6833,6 +7006,17 @@ msgstr ""
"NavigationMeshInstance deve essere un figlio o nipote di un nodo Navigation. "
"Fornisce solamente dati per la navigazione."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
@@ -6911,6 +7095,16 @@ msgstr ""
"Control, in modo che possa ottenere una dimensione. Altrimenti, renderlo un "
"RenderTarget e assegnare alla sua texture interna qualche nodo da mostrare."
+#~ msgid "Node From Scene"
+#~ msgstr "Nodo Da Scena"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Importa asset nel progetto."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Impostazioni Progetto (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "Superficie"
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 7f0f01ff07..beeaf264a2 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -1,5 +1,6 @@
# Japanese translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# akirakido <achts.y@gmail.com>, 2016.
@@ -358,6 +359,181 @@ msgstr "é…列ã®å€¤ã®ç¨®é¡žã®å¤‰æ›´"
msgid "Change Array Value"
msgstr "é…列ã®å€¤ã‚’変更"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "継続的"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "ファイル:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "é–‰ã˜ã‚‹"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "接続"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šã—ã¾ã™ã€‚"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "接続"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "テスト中"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "フォント読ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "ã™ã¹ã¦"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -365,6 +541,29 @@ msgstr "é…列ã®å€¤ã‚’変更"
msgid "Search:"
msgstr "検索:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "検索"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "ä¸¦ã¹æ›¿ãˆ:"
@@ -378,10 +577,6 @@ msgid "Category:"
msgstr "カテゴリー:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "ã™ã¹ã¦"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "サイト:"
@@ -413,20 +608,6 @@ msgstr "'%s' ã®ãƒ¡ã‚½ãƒƒãƒ‰ä¸€è¦§ï¼š"
msgid "Call"
msgstr "呼ã³å‡ºã—"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "é–‰ã˜ã‚‹"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "メソッド一覧:"
@@ -477,13 +658,6 @@ msgid "Selection Only"
msgstr "é¸æŠžç¯„å›²ã®ã¿"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "検索"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "検索"
@@ -634,11 +808,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1114,11 +1283,6 @@ msgstr ""
msgid "Clear"
msgstr "削除"
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Node From Scene"
-msgstr "シーンã‹ã‚‰ã®ãƒŽãƒ¼ãƒ‰"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1494,21 +1658,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1777,10 +1926,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3758,6 +3903,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3805,6 +3954,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4257,6 +4414,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5114,11 +5279,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5130,7 +5295,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5166,10 +5331,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5228,6 +5389,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "é¸æŠžã—ã¦ã„ã‚‹ã‚‚ã®ã‚’削除"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "終了"
@@ -5411,7 +5577,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5478,10 +5644,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6087,6 +6249,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6698,6 +6864,17 @@ msgstr ""
"NavigationMeshInstance ã¯ã€ãƒŠãƒ“ゲーションノードã®å­ã‚„å­«ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
"ã“れã¯ãƒŠãƒ“ゲーションデータã®ã¿æä¾›ã—ã¾ã™ã€‚"
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6778,6 +6955,10 @@ msgstr ""
"ãりã¾ã™ã€‚ãれ以外ã®å ´åˆã€ãƒ¬ãƒ³ãƒ€ãƒ¼ ターゲットã—ã€ãã®å†…部ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£è¡¨ç¤ºã®ã„"
"ãã¤ã‹ã®ãƒŽãƒ¼ãƒ‰ã«å‰²ã‚Šå½“ã¦ã¾ã™ã€‚"
+#, fuzzy
+#~ msgid "Node From Scene"
+#~ msgstr "シーンã‹ã‚‰ã®ãƒŽãƒ¼ãƒ‰"
+
#~ msgid ""
#~ "A SampleLibrary resource must be created or set in the 'samples' property "
#~ "in order for SamplePlayer to play sound."
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index 02d7385927..08b10d2f7a 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -1,5 +1,6 @@
# Korean translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# 박한얼 (volzhs) <volzhs@gmail.com>, 2016-2017.
@@ -358,6 +359,184 @@ msgstr "배열 값 타입 변경"
msgid "Change Array Value"
msgstr "배열 값 변경"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "버전:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "ìƒìˆ˜:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "파ì¼"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "설명:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "설치"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "닫기"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "연결하기.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "연결할 노드:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "요청한 íŒŒì¼ í˜•ì‹ì„ 알 수 ì—†ìŒ:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "저장 중.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "연결하기.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "테스팅"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "리소스 저장 중 ì—러!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "아래"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "모ë‘"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -365,6 +544,29 @@ msgstr "배열 값 변경"
msgid "Search:"
msgstr "검색:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "검색"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "가져오기"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "플러그ì¸"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "ì •ë ¬:"
@@ -378,10 +580,6 @@ msgid "Category:"
msgstr "카테고리:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "모ë‘"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "사ì´íЏ:"
@@ -413,20 +611,6 @@ msgstr "'%s' 함수 목ë¡:"
msgid "Call"
msgstr "호출"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "닫기"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "함수 목ë¡:"
@@ -477,13 +661,6 @@ msgid "Selection Only"
msgstr "ì„ íƒì˜ì—­ë§Œ"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "검색"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "찾기"
@@ -635,11 +812,6 @@ msgstr "최근:"
msgid "Matches:"
msgstr "ì¼ì¹˜:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "설명:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "대체할 ëŒ€ìƒ ì°¾ê¸°:"
@@ -1123,10 +1295,6 @@ msgstr " 출력:"
msgid "Clear"
msgstr "지우기"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "씬으로부터 노드 가져오기"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1503,21 +1671,6 @@ msgid "Distraction Free Mode"
msgstr "초집중 모드"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "프로ì íŠ¸ë¡œ ì—ì…‹ 가져오기."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "가져오기"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "프로ì íЏ ë˜ëŠ” 씬 관련 여러가지 ë„구들."
@@ -1807,10 +1960,6 @@ msgid "Installed Plugins:"
msgstr "ì„¤ì¹˜ëœ í”ŒëŸ¬ê·¸ì¸:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "버전:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "ì €ìž:"
@@ -3815,6 +3964,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "AABB ìƒì„±"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "페ì´ìŠ¤ê°€ ì˜ì—­ì„ 가지고 있지 않습니다!"
@@ -3867,6 +4021,16 @@ msgstr "배출량"
msgid "Emission Source: "
msgstr "ì—미션 채움:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "AABB ìƒì„±"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "í‰ê·  시간 (ì´ˆ)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "커브ì—서 í¬ì¸íЏ ì‚­ì œ"
@@ -4319,6 +4483,14 @@ msgid "Trim Trailing Whitespace"
msgstr "후행 공백 ë¬¸ìž ì œê±°"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "ìžë™ 들여쓰기"
@@ -5189,12 +5361,12 @@ msgstr "프로ì íЏ 경로가 유효하지 않습니다. 경로가 반드시 ì¡
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "프로ì íЏ 경로가 유효하지 않습니다. engine.cfgê°€ 있으면 안ë©ë‹ˆë‹¤."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "프로ì íЏ 경로가 유효하지 않습니다. engine.cfgê°€ 존재해야합니다."
#: editor/project_manager.cpp
@@ -5207,7 +5379,7 @@ msgstr "유효하지 ì•Šì€ í”„ë¡œì íЏ 경로 (뭔가 변경하신 ê±°ë¼ë„?)
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "프로ì íЏ ê²½ë¡œì— engine.cfg를 ìƒì„±í•  수 없습니다."
#: editor/project_manager.cpp
@@ -5243,10 +5415,6 @@ msgid "Install Project:"
msgstr "프로ì íЏ 설치:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "설치"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "찾아보기"
@@ -5306,6 +5474,11 @@ msgid "New Project"
msgstr "새 프로ì íЏ"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "ì•„ì´í…œ ì‚­ì œ"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "종료"
@@ -5492,8 +5665,8 @@ msgstr "리소스 리맵핑 옵션 제거"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "프로ì íЏ 설정 (engine.cfg)"
+msgid "Project Settings "
+msgstr "프로ì íЏ 설정"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5559,10 +5732,6 @@ msgstr "지역"
msgid "AutoLoad"
msgstr "ìžë™ 로드"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "플러그ì¸"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6168,6 +6337,10 @@ msgid "Change Notifier Extents"
msgstr "Notifier 범위 변경"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "프로브 범위 변경"
@@ -6755,6 +6928,17 @@ msgstr ""
"NavigationMeshInstanceì€ Navigation ë…¸ë“œì˜ í•˜ìœ„ì— ìžˆì–´ì•¼ 합니다. ì´ê²ƒì€ 네비"
"게ì´ì…˜ ë°ì´íƒ€ë§Œì„ 제공합니다."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr "Path ì†ì„±ì€ 유효한 Spatial 노드를 가리켜야 합니다."
@@ -6828,6 +7012,16 @@ msgstr ""
"합니다. 그렇지 ì•Šì„ ê²½ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 Render target으로 설정하"
"ê³  ë‚´ë¶€ì ì¸ í…스ì³ë¥¼ 다른 ë…¸ë“œì— í• ë‹¹í•´ì•¼ 합니다."
+#~ msgid "Node From Scene"
+#~ msgstr "씬으로부터 노드 가져오기"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "프로ì íŠ¸ë¡œ ì—ì…‹ 가져오기."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "프로ì íЏ 설정 (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "출사면"
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index e452e85cd9..7ce577ebfa 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -1,5 +1,6 @@
# Norwegian Bokmål translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Anonymous <GentleSaucepan@protonmail.com>, 2017.
@@ -356,6 +357,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Lukk"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -363,6 +532,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -376,10 +568,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -411,20 +599,6 @@ msgstr ""
msgid "Call"
msgstr "Ring"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Lukk"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -474,13 +648,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -630,11 +797,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1108,10 +1270,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1476,21 +1634,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1759,10 +1902,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3732,6 +3871,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3779,6 +3922,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4228,6 +4379,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5084,11 +5243,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5100,7 +5259,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5136,10 +5295,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5198,6 +5353,10 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5381,7 +5540,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5448,10 +5607,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6053,6 +6208,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6598,6 +6757,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index 74d75c0a01..f0d54ebd9d 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -1,5 +1,6 @@
# Dutch translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Aram Nap <xyphex.aram@gmail.com>, 2017
@@ -357,6 +358,182 @@ msgstr "Wijzig Array Waarde Type"
msgid "Change Array Value"
msgstr "Wijzig Array Waarde"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Constanten:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Bestand:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Omschrijving:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Sluiten"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Verbind.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Verbind Aan Node:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Opgevraagde bestandsformaat onbekend:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Verbind.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Testen"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Error bij het opslaan van resource!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Alle"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -364,6 +541,29 @@ msgstr "Wijzig Array Waarde"
msgid "Search:"
msgstr "Zoeken:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Zoeken"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Sorteren:"
@@ -377,10 +577,6 @@ msgid "Category:"
msgstr "Categorie:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Alle"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Site:"
@@ -413,20 +609,6 @@ msgstr "Methode Lijst Voor '%s':"
msgid "Call"
msgstr "Aanroep"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Sluiten"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Methode Lijst:"
@@ -477,13 +659,6 @@ msgid "Selection Only"
msgstr "Alleen Selectie"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Zoeken"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Zoeken"
@@ -636,11 +811,6 @@ msgstr "Recente:"
msgid "Matches:"
msgstr "Matches:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Omschrijving:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Zoek Vervanging Voor:"
@@ -1130,10 +1300,6 @@ msgstr " Uitvoer:"
msgid "Clear"
msgstr "Leegmaken"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Node Uit Scene"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1501,21 +1667,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1784,10 +1935,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3765,6 +3912,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3812,6 +3963,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4262,6 +4421,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5122,11 +5289,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5138,7 +5305,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5174,10 +5341,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5236,6 +5399,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Verwijder Selectie"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5419,7 +5587,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5486,10 +5654,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6091,6 +6255,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6712,6 +6880,17 @@ msgstr ""
"NavigationMeshInstance moet een kind of kleinkind zijn van een Navigation "
"node. Het biedt alleen navigatie data."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
@@ -6789,6 +6968,9 @@ msgstr ""
"inhoud direct op het scherm te weergeven. Anders, maak er een RenderTarget "
"van en wijs zijn interne texture toe aan een node om te tonen."
+#~ msgid "Node From Scene"
+#~ msgstr "Node Uit Scene"
+
#~ msgid ""
#~ "A SampleLibrary resource must be created or set in the 'samples' property "
#~ "in order for SamplePlayer to play sound."
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 2149564c42..ccee170c57 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -1,5 +1,6 @@
# Polish translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# 8-bit Pixel <dawdejw@gmail.com>, 2016.
@@ -367,6 +368,184 @@ msgstr "Zmień Typ Tablicy"
msgid "Change Array Value"
msgstr "Zmień Wartość Tablicy"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Wersja:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Stałe:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Plik"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Opis:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Instaluj"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Zamknij"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Połącz.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Podłączanie Do Węzła:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Nieznany format pliku:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Zapisywanie.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Połącz.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Testowanie"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Błąd podczas zapisu zasobu!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Wczytaj błędy"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Wszystko"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -374,6 +553,29 @@ msgstr "Zmień Wartość Tablicy"
msgid "Search:"
msgstr "Szukaj:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Szukaj"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Importuj"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Wtyczki"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Sortuj:"
@@ -387,10 +589,6 @@ msgid "Category:"
msgstr "Kategoria:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Wszystko"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Źródło:"
@@ -422,20 +620,6 @@ msgstr "Lista metod '%s':"
msgid "Call"
msgstr "Wywołanie"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Zamknij"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Lista metod:"
@@ -486,13 +670,6 @@ msgid "Selection Only"
msgstr "Tylko zaznaczenie"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Szukaj"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Szukaj"
@@ -643,11 +820,6 @@ msgstr "Ostatnie:"
msgid "Matches:"
msgstr "PasujÄ…ce:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Opis:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Znajdź i zamień:"
@@ -1127,10 +1299,6 @@ msgstr " Konsola:"
msgid "Clear"
msgstr "Wyczyść"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Węzeł ze Sceny"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1513,21 +1681,6 @@ msgid "Distraction Free Mode"
msgstr "Tryb bez rozproszeń"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Importuj zasoby do projektu."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Importuj"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1814,10 +1967,6 @@ msgid "Installed Plugins:"
msgstr "Zainstalowane wtyczki:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Wersja:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Autor:"
@@ -3828,6 +3977,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "Generuj AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3876,6 +4030,16 @@ msgstr "Głośność"
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "Generuj AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Åšredni Czas (sek)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4328,6 +4492,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5195,12 +5367,12 @@ msgstr "Niepoprawna ścieżka projektu, ścieżka musi istnieć!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "Niepoprawna ścieżka projektu, engine.cfg nie może istnieć."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "Niepoprawna ścieżka projektu, engine.cfg musi istnieć."
#: editor/project_manager.cpp
@@ -5213,7 +5385,7 @@ msgstr "Niepoprawna ścieżka projektu (zmienić cokolwiek?)."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu."
#: editor/project_manager.cpp
@@ -5249,10 +5421,6 @@ msgid "Install Project:"
msgstr "Zainstaluj projekt:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "Instaluj"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Szukaj"
@@ -5311,6 +5479,11 @@ msgid "New Project"
msgstr "Nowy projekt"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Usuń element"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Wyjdź"
@@ -5497,8 +5670,8 @@ msgstr ""
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Ustawienia projektu (engine.cfg)"
+msgid "Project Settings "
+msgstr "Ustawienia projektu"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5564,10 +5737,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Wtyczki"
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6186,6 +6355,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
#, fuzzy
msgid "Change Probe Extents"
msgstr "Zmień rozmiar Box Shape"
@@ -6794,6 +6967,17 @@ msgstr ""
"NavigationMeshInstance musi być dzieckiem lub wnukiem węzła typu Navigation. "
"Udostępnia on tylko dane nawigacyjne."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6872,6 +7056,16 @@ msgstr ""
"otrzymał jakiś rozmiar. W przeciwnym wypadku ustawi opcję RenderTarget i "
"przyporządkuj jego teksturę dla któregoś węzła."
+#~ msgid "Node From Scene"
+#~ msgstr "Węzeł ze Sceny"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Importuj zasoby do projektu."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Ustawienia projektu (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "Powierzchnia"
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index 3a8f795eb9..4629c24f45 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -1,5 +1,6 @@
# Pirate translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Zion Nimchuk <zionnimchuk@gmail.com>, 2016-2017.
@@ -355,6 +356,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Close"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -362,6 +531,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -375,10 +567,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -410,20 +598,6 @@ msgstr ""
msgid "Call"
msgstr "Call"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Close"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -473,13 +647,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -629,11 +796,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1107,10 +1269,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1475,21 +1633,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1758,10 +1901,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3733,6 +3872,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3780,6 +3923,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4229,6 +4380,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5085,11 +5244,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5101,7 +5260,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5137,10 +5296,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5199,6 +5354,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Discharge ye' Variable"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5382,7 +5542,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5449,10 +5609,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6054,6 +6210,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6618,6 +6778,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index 6962fb5db7..25055a0b7b 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -1,5 +1,6 @@
# Portuguese (Brazil) translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Allyson Souza <allyson_as@outlook.com>, 2017.
@@ -363,6 +364,184 @@ msgstr "Alterar Tipo de Valor do Vetor"
msgid "Change Array Value"
msgstr "Alterar Valor do Vetor"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Versão:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Constantes:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Arquivo"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descrição:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Instalar"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Fechar"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "Conectar..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Conectar ao Nó:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "Formato de arquivo requisitado desconhecido:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Salvando..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "Conectar..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Em teste"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Erro ao salvar Recurso!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Abaixo"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Todos"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -370,6 +549,29 @@ msgstr "Alterar Valor do Vetor"
msgid "Search:"
msgstr "Pesquisar:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Pesquisar"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Importar"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Plugins"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Ordenar:"
@@ -383,10 +585,6 @@ msgid "Category:"
msgstr "Categoria:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Todos"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Site:"
@@ -418,20 +616,6 @@ msgstr "Lista de Métodos para \"%s\":"
msgid "Call"
msgstr "Chamar"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Fechar"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Lista de Métodos:"
@@ -482,13 +666,6 @@ msgid "Selection Only"
msgstr "Apenas na Seleção"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Pesquisar"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Localizar"
@@ -638,11 +815,6 @@ msgstr "Recente:"
msgid "Matches:"
msgstr "Combinações:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descrição:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Buscar Substituição Para:"
@@ -1129,10 +1301,6 @@ msgstr " Saída:"
msgid "Clear"
msgstr "Limpar"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Nó a Partir de Cena"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1513,21 +1681,6 @@ msgid "Distraction Free Mode"
msgstr "Modo Sem Distrações"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Importar assets ao projeto."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Importar"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Ferramentas diversas atuantes no projeto ou cena."
@@ -1817,10 +1970,6 @@ msgid "Installed Plugins:"
msgstr "Plugins Instalados:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Versão:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Autor:"
@@ -3839,6 +3988,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "Gerar AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "As faces não têm área!"
@@ -3891,6 +4045,16 @@ msgstr "Volume"
msgid "Emission Source: "
msgstr "Preenchimento de Emissão:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "Gerar AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Tempo Médio (seg)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Remover Ponto da Curva"
@@ -4347,6 +4511,14 @@ msgid "Trim Trailing Whitespace"
msgstr "Apagar Espaços em Branco"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "Auto Recuar"
@@ -5223,12 +5395,12 @@ msgstr "Caminho de projeto inválido, o caminho deve existir!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "Caminho de projeto inválido, engine.cfg não deve existir."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "Caminho de projeto inválido, engine.cfg deve existir."
#: editor/project_manager.cpp
@@ -5241,7 +5413,7 @@ msgstr "Caminho de projeto inválido (mudou alguma coisa?)."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "Não se pôde criar engine.cfg no caminho do projeto."
#: editor/project_manager.cpp
@@ -5277,10 +5449,6 @@ msgid "Install Project:"
msgstr "Instalar Projeto:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "Instalar"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Navegar"
@@ -5342,6 +5510,11 @@ msgid "New Project"
msgstr "Novo Projeto"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Remover Item"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Sair"
@@ -5528,8 +5701,8 @@ msgstr "Remover Opção de Remapeamento de Recurso"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Configurações do Projeto (engine.cfg)"
+msgid "Project Settings "
+msgstr "Configurações do Projeto"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5595,10 +5768,6 @@ msgstr "Localidade"
msgid "AutoLoad"
msgstr "AutoLoad"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Plugins"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6220,6 +6389,10 @@ msgid "Change Notifier Extents"
msgstr "Alterar a Extensão do Notificador"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
#, fuzzy
msgid "Change Probe Extents"
msgstr "Alterar a Extensão do Notificador"
@@ -6825,6 +6998,17 @@ msgstr ""
"NavigationMeshInstance deve ser filho ou neto de um nó Navigation. Ele "
"apenas fornece dados de navegação."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -6902,6 +7086,16 @@ msgstr ""
"para que ele possa ter um tamanho. Caso contrário, defina-o como destino de "
"render e atribua sua textura interna a algum nó para exibir."
+#~ msgid "Node From Scene"
+#~ msgstr "Nó a Partir de Cena"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Importar assets ao projeto."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Configurações do Projeto (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "Superfície"
diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po
index 329ec9c053..fa4629c5c1 100644
--- a/editor/translations/pt_PT.po
+++ b/editor/translations/pt_PT.po
@@ -1,5 +1,6 @@
# Portuguese (Portugal) translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# António Sarmento <antonio.luis.sarmento@gmail.com>, 2016.
@@ -355,6 +356,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Fechar"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -362,6 +531,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -375,10 +567,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -410,20 +598,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Fechar"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -473,13 +647,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -629,11 +796,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1107,10 +1269,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1475,21 +1633,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1758,10 +1901,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3732,6 +3871,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3779,6 +3922,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4229,6 +4380,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5085,11 +5244,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5101,7 +5260,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5137,10 +5296,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5199,6 +5354,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Remover Variável"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5382,7 +5542,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5449,10 +5609,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6053,6 +6209,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6606,6 +6766,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index 576261f8df..0c4a29fb63 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -1,5 +1,6 @@
# Russian translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# DimOkGamer <dimokgamer@gmail.com>, 2016-2017.
@@ -361,6 +362,184 @@ msgstr "Изменение типа Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð°ÑÑива"
msgid "Change Array Value"
msgstr "Изменить значение маÑÑива"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "ВерÑиÑ:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "КонÑтанты:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Файл"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "ОпиÑание:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "УÑтановить"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Закрыть"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "ПриÑоединить.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "ПриÑоединить к узлу:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "ÐеизвеÑтный формат запрашиваемого файла:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Сохранение.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "ПриÑоединить.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "ТеÑтируемые"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Ошибка при Ñохранении реÑурÑа!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Вниз"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Ð’Ñе"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -368,6 +547,29 @@ msgstr "Изменить значение маÑÑива"
msgid "Search:"
msgstr "ПоиÑк:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "ПоиÑк"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "Импорт"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Плагины"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Сортировать:"
@@ -381,10 +583,6 @@ msgid "Category:"
msgstr "КатегориÑ:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Ð’Ñе"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Сайт:"
@@ -416,20 +614,6 @@ msgstr "СпиÑок ÑпоÑоб Ð´Ð»Ñ '%s':"
msgid "Call"
msgstr "Вызов"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Закрыть"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "СпиÑок методов:"
@@ -480,13 +664,6 @@ msgid "Selection Only"
msgstr "Только выделÑть"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "ПоиÑк"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Ðайти"
@@ -638,11 +815,6 @@ msgstr "Ðедавнее:"
msgid "Matches:"
msgstr "СовпадениÑ:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "ОпиÑание:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "ПоиÑк замены длÑ:"
@@ -1130,10 +1302,6 @@ msgstr " Вывод:"
msgid "Clear"
msgstr "ОчиÑтить"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Узел Ñо Ñцены"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1515,21 +1683,6 @@ msgid "Distraction Free Mode"
msgstr "Свободный режим"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Импортировать аÑÑеты в проект."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "Импорт"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Прочие инÑтрументы."
@@ -1818,10 +1971,6 @@ msgid "Installed Plugins:"
msgstr "УÑтановленные плагины:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "ВерÑиÑ:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Ðвтор:"
@@ -3836,6 +3985,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "Сгенерировать AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "Грани не Ñодержат зоны!"
@@ -3888,6 +4042,16 @@ msgstr "Объём"
msgid "Emission Source: "
msgstr "Заполнение излучателÑ:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "Сгенерировать AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Среднее Ð²Ñ€ÐµÐ¼Ñ (Ñек.)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Удалена точка Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹"
@@ -4342,6 +4506,14 @@ msgid "Trim Trailing Whitespace"
msgstr "Удаление пробелов в конце Ñтрок"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "ÐвтоотÑтуп"
@@ -5214,12 +5386,12 @@ msgstr "Ðеверный путь к проекту, путь должен ÑуÑ
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "ÐедопуÑтимый путь к проекту, engine.cfg не должен ÑущеÑтвовать."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "ÐедопуÑтимый путь к проекту, engine.cfg должен ÑущеÑтвовать."
#: editor/project_manager.cpp
@@ -5232,7 +5404,7 @@ msgstr "Ðеверный путь к проекту (Что-то изменилÐ
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "Ðе могу Ñоздать engine.cfg в папке проекта."
#: editor/project_manager.cpp
@@ -5268,10 +5440,6 @@ msgid "Install Project:"
msgstr "УÑтановить проект:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "УÑтановить"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Обзор"
@@ -5332,6 +5500,11 @@ msgid "New Project"
msgstr "Ðовый проект"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Удалить Ñлемент"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Выход"
@@ -5518,8 +5691,8 @@ msgstr "Удалён параметр реÑурÑа перенаправленÐ
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "ÐаÑтройки проекта (engine.cfg)"
+msgid "Project Settings "
+msgstr "Параметры проекта"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5585,10 +5758,6 @@ msgstr "Язык"
msgid "AutoLoad"
msgstr "Ðвтозагрузка"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Плагины"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6200,6 +6369,10 @@ msgid "Change Notifier Extents"
msgstr "Изменены границы уведомителÑ"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "Изменены Probe Extents"
@@ -6808,6 +6981,17 @@ msgstr ""
"NavigationMeshInstance должен быть дочерним или под-дочерним узлом "
"Navigation. Он предоÑтавлÑет только навигационные данные."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr "СвойÑтво Path должно указывать на дейÑтвительный Spatial узел."
@@ -6885,6 +7069,16 @@ msgstr ""
"Ñделайте его целью рендеринга и передайте его внутренние текÑтуры какому-то "
"другому узлу Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ."
+#~ msgid "Node From Scene"
+#~ msgstr "Узел Ñо Ñцены"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Импортировать аÑÑеты в проект."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "ÐаÑтройки проекта (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "ПоверхноÑть"
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index 9dc83e0cd3..b0bee6aa6f 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -1,5 +1,6 @@
# Slovak translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# J08nY <johnenter@gmail.com>, 2016.
@@ -356,6 +357,176 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Konštanty:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Súbor:"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Popis:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -363,6 +534,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -376,10 +570,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Stránka:"
@@ -411,20 +601,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr ""
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -474,13 +650,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -630,11 +799,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Popis:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1109,10 +1273,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1478,21 +1638,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1761,10 +1906,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3736,6 +3877,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3783,6 +3928,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4233,6 +4386,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5092,11 +5253,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5108,7 +5269,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5144,10 +5305,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5206,6 +5363,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Všetky vybrané"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5389,7 +5551,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5456,10 +5618,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6066,6 +6224,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6619,6 +6781,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index a90a691f44..ea634658ce 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -1,5 +1,6 @@
# Slovenian translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# matevž lapajne <sivar.lapajne@gmail.com>, 2016.
@@ -356,6 +357,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Zapri"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -363,6 +532,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -376,10 +568,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -411,20 +599,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Zapri"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -474,13 +648,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -630,11 +797,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1108,10 +1270,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1476,21 +1634,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1759,10 +1902,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3733,6 +3872,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3780,6 +3923,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4230,6 +4381,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5086,11 +5245,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5102,7 +5261,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5138,10 +5297,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5200,6 +5355,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Odstrani Spremenljivko"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5383,7 +5543,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5450,10 +5610,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6054,6 +6210,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6618,6 +6778,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/th.po b/editor/translations/th.po
index 883c024ff3..b31532f3bf 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -1,5 +1,6 @@
# Thai translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Poommetee Ketson <poommetee@protonmail.com>, 2017.
@@ -366,6 +367,186 @@ msgstr "à¹à¸à¹‰à¹„ขชนิดตัวà¹à¸›à¸£à¹ƒà¸™à¸­à¸²à¸£à¹Œà¹€à¸£à¸¢
msgid "Change Array Value"
msgstr "à¹à¸à¹‰à¹„ขค่าในอาร์เรย์"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "รุ่น:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "ค่าคงที่:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "ไฟล์"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Description:"
+msgstr "รายละเอียด:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "ติดตั้ง"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "ปิด"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "เชื่อมโยง.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "เชื่อมโยงà¸à¸±à¸šà¹‚หนด:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "ไม่ทราบรูปà¹à¸šà¸šà¹„ฟล์ที่ร้องขอ:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึà¸.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "เชื่อมโยง.."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "ทดสอบ"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "บันทึà¸à¸£à¸µà¸‹à¸­à¸£à¹Œà¸ªà¸œà¸´à¸”พลาด!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "ลง"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "All"
+msgstr "ทั้งหมด"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -374,6 +555,30 @@ msgstr "à¹à¸à¹‰à¹„ขค่าในอาร์เรย์"
msgid "Search:"
msgstr "ค้นหา:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "ค้นหา"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+#, fuzzy
+msgid "Import"
+msgstr "นำเข้า"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "ปลั๊à¸à¸­à¸´à¸™"
+
#: editor/asset_library_editor_plugin.cpp
#, fuzzy
msgid "Sort:"
@@ -390,11 +595,6 @@ msgstr "ประเภท:"
#: editor/asset_library_editor_plugin.cpp
#, fuzzy
-msgid "All"
-msgstr "ทั้งหมด"
-
-#: editor/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Site:"
msgstr "ไซต์:"
@@ -431,20 +631,6 @@ msgstr "รายชื่อเมท็อดของ '%s':"
msgid "Call"
msgstr "เรียà¸"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "ปิด"
-
#: editor/call_dialog.cpp
#, fuzzy
msgid "Method List:"
@@ -506,13 +692,6 @@ msgid "Selection Only"
msgstr "เฉพาะที่เลือà¸à¹„ว้"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "ค้นหา"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
#, fuzzy
msgid "Find"
msgstr "ค้นหา"
@@ -692,12 +871,6 @@ msgstr "ล่าสุด:"
msgid "Matches:"
msgstr "พบ:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-#, fuzzy
-msgid "Description:"
-msgstr "รายละเอียด:"
-
#: editor/dependency_editor.cpp
#, fuzzy
msgid "Search Replacement For:"
@@ -1231,10 +1404,6 @@ msgstr " เอาท์พุต:"
msgid "Clear"
msgstr "ลบทั้งหมด"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "โหนดจาà¸à¸‰à¸²à¸"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1634,22 +1803,6 @@ msgid "Distraction Free Mode"
msgstr "โหมดไร้สิ่งรบà¸à¸§à¸™"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "นำเข้าไฟล์มายังโปรเจà¸à¸•์"
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-#, fuzzy
-msgid "Import"
-msgstr "นำเข้า"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1932,10 +2085,6 @@ msgid "Installed Plugins:"
msgstr "ปลั๊à¸à¸­à¸´à¸™à¸—ี่ติดตั้งà¹à¸¥à¹‰à¸§:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "รุ่น:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "โดย:"
@@ -3943,6 +4092,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "สร้าง AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "หน้าไม่มีพื้นที่!"
@@ -3992,6 +4146,16 @@ msgstr "ปริมาตร"
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "สร้าง AABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "เวลาเฉลี่ย (วินาที)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "ลบจุดในเส้นโค้ง"
@@ -4446,6 +4610,14 @@ msgid "Trim Trailing Whitespace"
msgstr "ลบตัวอัà¸à¸©à¸£à¸—ี่มองไม่เห็น"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "ย่อหน้าอัตโนมัติ"
@@ -5317,12 +5489,12 @@ msgstr "ที่อยู่โปรเจà¸à¸•์ผิดพลาด ตà¹
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "ที่อยู่โปรเจà¸à¸•์ผิดพลาด ต้องไม่มี engine.cfg"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "ที่อยู่โปรเจà¸à¸•์ผิดพลาด ต้องมี engine.cfg"
#: editor/project_manager.cpp
@@ -5335,7 +5507,7 @@ msgstr ""
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "สร้างไฟล์ engine.cfg ไม่ได้"
#: editor/project_manager.cpp
@@ -5371,10 +5543,6 @@ msgid "Install Project:"
msgstr "ติดตั้งโปรเจà¸à¸•์:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "ติดตั้ง"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "เลือà¸"
@@ -5433,6 +5601,11 @@ msgid "New Project"
msgstr "โปรเจà¸à¸•์ใหม่"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "ลบไอเทม"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "ออà¸"
@@ -5628,8 +5801,8 @@ msgstr "ลบà¸à¸²à¸£à¹à¸—นที่"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "ตัวเลือà¸à¹‚ปรเจà¸à¸•์ (engine.cfg)"
+msgid "Project Settings "
+msgstr "ตัวเลือà¸à¹‚ปรเจà¸à¸•์"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5695,10 +5868,6 @@ msgstr "ท้องถิ่น"
msgid "AutoLoad"
msgstr "ออโต้โหลด"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "ปลั๊à¸à¸­à¸´à¸™"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6304,6 +6473,10 @@ msgid "Change Notifier Extents"
msgstr "ปรับขนาด Notifier"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
#, fuzzy
msgid "Change Probe Extents"
msgstr "ปรับขนาด Probe"
@@ -6954,6 +7127,17 @@ msgstr ""
"NavigationMeshInstance ต้องเป็นโหนดลูà¸/หลานของโหนด Navigation "
"โหนดนี้ใช้เพื่อเป็นข้อมูลในà¸à¸²à¸£à¸™à¸³à¸—างเท่านั้น"
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
#, fuzzy
msgid "Path property must point to a valid Spatial node to work."
@@ -7034,6 +7218,16 @@ msgstr ""
"ให้à¹à¸à¹‰à¹„ขโหนดนี้ให้เป็นโหนดลูà¸à¸‚อง Control à¹à¸•่ถ้าไม่ ให้ปรับเป็น render target à¹à¸¥à¸°à¸™à¸³à¹„ปใช้เป็น "
"texture ของโหนดอื่น"
+#~ msgid "Node From Scene"
+#~ msgstr "โหนดจาà¸à¸‰à¸²à¸"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "นำเข้าไฟล์มายังโปรเจà¸à¸•์"
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "ตัวเลือà¸à¹‚ปรเจà¸à¸•์ (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "พื้นผิว"
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index 9228cf5818..b4d8975649 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -1,5 +1,6 @@
# Turkish translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Aprın Çor Tigin <kabusturk38@gmail.com>, 2016-2017.
@@ -362,6 +363,184 @@ msgstr "Dizinin türünü degistir"
msgid "Change Array Value"
msgstr "Dizi DeÄŸerini DeÄŸiÅŸtir"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Sürüm:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "Sabitler:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "Dizeç"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Açıklama:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "Kur"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Kapat"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "BaÄŸlan..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "Düğüme Bağlan:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "İstenilen dizeç formatı bilinmiyor:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "Kaydediliyor..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "BaÄŸlan..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "Deneme"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "Kaynak kaydedilirken sorun!"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "Aşağı"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Hepsi"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -369,6 +548,29 @@ msgstr "Dizi DeÄŸerini DeÄŸiÅŸtir"
msgid "Search:"
msgstr "Ara:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "Ara"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "İçe Aktar"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "Eklentiler"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "Sırala:"
@@ -382,10 +584,6 @@ msgid "Category:"
msgstr "Katman:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "Hepsi"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "Yer:"
@@ -417,20 +615,6 @@ msgstr "'%s' İçin Yöntem Dizelgesi:"
msgid "Call"
msgstr "Çağır"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "Kapat"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "Yöntem Dizelgesi:"
@@ -481,13 +665,6 @@ msgid "Selection Only"
msgstr "Yalnızca Seçim"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "Ara"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "Bul"
@@ -639,11 +816,6 @@ msgstr "Yakın zamanda:"
msgid "Matches:"
msgstr "EÅŸleÅŸmeler:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Açıklama:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Şunun İçin Değişikliği Ara:"
@@ -1125,10 +1297,6 @@ msgstr " Çıktı:"
msgid "Clear"
msgstr "Temizle"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "Sahneden Düğüm(node)"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1508,21 +1676,6 @@ msgid "Distraction Free Mode"
msgstr "Dikkat Dağıtmayan Biçim"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "Varlıkları tasarının içine aktar."
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "İçe Aktar"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "Türlü tasarı ya da sahne genişliğinde araçlar."
@@ -1811,10 +1964,6 @@ msgid "Installed Plugins:"
msgstr "Yüklü Eklentiler:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "Sürüm:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "Yazar:"
@@ -3824,6 +3973,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "AABB Üret"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "Yüzler alan içermez!"
@@ -3876,6 +4030,16 @@ msgstr "Oylum"
msgid "Emission Source: "
msgstr "Yayma Dolumu:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "AABB Üret"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "Ortalama Zaman (sn)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "Noktayı Eğriden Kaldır"
@@ -4330,6 +4494,14 @@ msgid "Trim Trailing Whitespace"
msgstr "İzleyenin Boşluklarını Kırp"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "Kendinden Girintili"
@@ -5204,12 +5376,12 @@ msgstr "Geçersiz tasarı yolu, yolun var olması gerekir!"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "Geçersiz tasarı yolu, engine.cfg var olmaması gerekir."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "Geçersiz tasarı yolu, engine.cfg var olması gerekir."
#: editor/project_manager.cpp
@@ -5222,7 +5394,7 @@ msgstr "Geçersiz tasarı yolu (bir şey değişti mi?)."
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "engine.cfg tasarı yolunda oluşturulamadı."
#: editor/project_manager.cpp
@@ -5258,10 +5430,6 @@ msgid "Install Project:"
msgstr "Tasarıyı Kur:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "Kur"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "Gözat"
@@ -5323,6 +5491,11 @@ msgid "New Project"
msgstr "Yeni Tasarı"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "Öğeyi Kaldır"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "Çık"
@@ -5509,8 +5682,8 @@ msgstr "Kaynak Yeniden Eşle Seçeneğini Kaldır"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "Tasarı Ayarları (engine.cfg)"
+msgid "Project Settings "
+msgstr "Tasarı Ayarları"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5576,10 +5749,6 @@ msgstr "Yerel"
msgid "AutoLoad"
msgstr "KendindenYükle"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "Eklentiler"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6188,6 +6357,10 @@ msgid "Change Notifier Extents"
msgstr "Bildirim Kapsamını Değiştir"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "DeÅŸme GeniÅŸlemesini DeÄŸiÅŸtir"
@@ -6796,6 +6969,17 @@ msgstr ""
"NavigationMeshInstance, bir Navigation düğümünün çocuğu ya da torunu "
"olmalıdır. O yalnızca yönlendirme verisi sağlar."
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
@@ -6873,6 +7057,16 @@ msgstr ""
"bir boyut elde edin. Ya da, onu bir RenderTarget yapın ve iç dokusunu "
"görüntülemesi için bir düğüme atayın."
+#~ msgid "Node From Scene"
+#~ msgstr "Sahneden Düğüm(node)"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "Varlıkları tasarının içine aktar."
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "Tasarı Ayarları (engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "Yüzey"
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index c8fb79d1c0..ef3e3b30ca 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -1,5 +1,6 @@
# Urdu (Pakistan) translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Muhammad Ali <ali@codeonion.com>, 2016.
@@ -356,6 +357,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -363,6 +532,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -376,10 +568,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "سائٹ:"
@@ -411,20 +599,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr ""
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -474,13 +648,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -630,11 +797,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1112,10 +1274,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1481,21 +1639,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1764,10 +1907,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3739,6 +3878,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3786,6 +3929,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4236,6 +4387,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5094,11 +5253,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5110,7 +5269,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5146,10 +5305,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5208,6 +5363,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr ".تمام کا انتخاب"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5391,7 +5551,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5458,10 +5618,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6067,6 +6223,10 @@ msgid "Change Notifier Extents"
msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
#, fuzzy
msgid "Change Probe Extents"
msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ"
@@ -6612,6 +6772,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index d2380c0a48..f3afcab79d 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -1,5 +1,6 @@
# Chinese (China) translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# 纯æ´çš„å蛋 <tqj.zyy@gmail.com>, 2016.
@@ -366,6 +367,184 @@ msgstr "修改数组类型"
msgid "Change Array Value"
msgstr "修改数组值"
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "版本:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Contents:"
+msgstr "常é‡:"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "文件"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "æè¿°:"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr "安装"
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "关闭"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "连接事件。"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "连接到节点:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Request failed, return code:"
+msgstr "未知的文件类型请求:"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Resolving.."
+msgstr "ä¿å­˜ä¸­..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "连接事件。"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "测试"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "ä¿å­˜èµ„æºå‡ºé”™ï¼"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Download Error"
+msgstr "å‘下"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "全部"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -373,6 +552,29 @@ msgstr "修改数组值"
msgid "Search:"
msgstr "æœç´¢:"
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "æœç´¢"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "导入"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "æ’ä»¶"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr "排åº:"
@@ -386,10 +588,6 @@ msgid "Category:"
msgstr "分类:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "全部"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "站点:"
@@ -421,20 +619,6 @@ msgstr "'%s'的方法列表:"
msgid "Call"
msgstr "调用到"
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "关闭"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr "方法列表:"
@@ -485,13 +669,6 @@ msgid "Selection Only"
msgstr "仅选中"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "æœç´¢"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "查找"
@@ -641,11 +818,6 @@ msgstr "最近文件:"
msgid "Matches:"
msgstr "匹é…项:"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "æè¿°:"
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "æœç´¢æ›¿æ¢:"
@@ -1121,10 +1293,6 @@ msgstr " 输出:"
msgid "Clear"
msgstr "清除"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr "从场景导入节点"
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1499,21 +1667,6 @@ msgid "Distraction Free Mode"
msgstr "无干扰模å¼"
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr "导入资æºã€‚"
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "导入"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr "其他工程或全场景工具。"
@@ -1792,10 +1945,6 @@ msgid "Installed Plugins:"
msgstr "已安装æ’ä»¶:"
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr "版本:"
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr "作者:"
@@ -3796,6 +3945,11 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generating AABB"
+msgstr "生æˆAABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr "é¢ä¸å«æœ‰åŒºåŸŸï¼"
@@ -3848,6 +4002,16 @@ msgstr "体积"
msgid "Emission Source: "
msgstr "å‘射填充:"
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generate Visibility AABB"
+msgstr "生æˆAABB"
+
+#: editor/plugins/particles_editor_plugin.cpp
+#, fuzzy
+msgid "Generation Time (sec):"
+msgstr "å¹³å‡å¸§æ—¶é—´ï¼ˆç§’)"
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr "从曲线中移除顶点"
@@ -4300,6 +4464,14 @@ msgid "Trim Trailing Whitespace"
msgstr "修剪行åŽç©ºç™½"
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr "自动缩进"
@@ -5170,12 +5342,12 @@ msgstr "项目目录ä¸å­˜åœ¨ï¼"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr "项目目录下必须包å«engin.cfg文件。"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr "项目目录下必须包å«engin.cfg文件。"
#: editor/project_manager.cpp
@@ -5188,7 +5360,7 @@ msgstr "é¡¹ç›®è·¯å¾„éžæ³•(被外部修改?)。"
#: editor/project_manager.cpp
#, fuzzy
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr "无法在项目目录下创建engine.cfg文件。"
#: editor/project_manager.cpp
@@ -5224,10 +5396,6 @@ msgid "Install Project:"
msgstr "安装项目:"
#: editor/project_manager.cpp
-msgid "Install"
-msgstr "安装"
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "æµè§ˆ"
@@ -5286,6 +5454,11 @@ msgid "New Project"
msgstr "新建"
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "移除项目"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "退出"
@@ -5472,8 +5645,8 @@ msgstr "移除资æºé‡å®šå‘选项"
#: editor/project_settings.cpp
#, fuzzy
-msgid "Project Settings (godot.cfg)"
-msgstr "项目设置(engine.cfg)"
+msgid "Project Settings "
+msgstr "项目设置"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5539,10 +5712,6 @@ msgstr "地区"
msgid "AutoLoad"
msgstr "自动加载(AutoLoad)"
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "æ’ä»¶"
-
#: editor/property_editor.cpp
#, fuzzy
msgid "Pick a Viewport"
@@ -6146,6 +6315,10 @@ msgid "Change Notifier Extents"
msgstr "更改通知器级别"
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "更改探针(Probe)范围"
@@ -6716,6 +6889,17 @@ msgid ""
msgstr ""
"NavigationMeshInstance类型节点必须作为Navigation节点的å­å­™æ‰èƒ½æä¾›å¯¼èˆªæ•°æ®ã€‚"
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr "path属性必须指å‘ä¸€ä¸ªåˆæ³•çš„Spatial节点æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
@@ -6788,6 +6972,16 @@ msgstr ""
"使其æˆä¸ºå­æŽ§ä»¶çš„æ‰€ä»¥å®ƒå¯ä»¥æœ‰ä¸€ä¸ªå°ºå¯¸å¤§å°å€¼ã€‚å¦åˆ™è¯·è®¾ç½®ä¸ºRender target,并将其"
"内部纹ç†åˆ†é…给一些节点以显示。"
+#~ msgid "Node From Scene"
+#~ msgstr "从场景导入节点"
+
+#~ msgid "Import assets to the project."
+#~ msgstr "导入资æºã€‚"
+
+#, fuzzy
+#~ msgid "Project Settings (godot.cfg)"
+#~ msgstr "项目设置(engine.cfg)"
+
#~ msgid "Surface"
#~ msgstr "表é¢"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index 7c06087fd2..e49582e901 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -1,5 +1,6 @@
# Chinese (Honk Kong) translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# Wesley (zx-wt) <ZX_WT@ymail.com>, 2016.
@@ -359,6 +360,180 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "View Files"
+msgstr "檔案"
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "關閉"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect."
+msgstr "連到..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Can't connect to host:"
+msgstr "連到"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Connecting.."
+msgstr "連到..."
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Requesting.."
+msgstr "測試"
+
+#: editor/asset_library_editor_plugin.cpp
+#, fuzzy
+msgid "Error making request"
+msgstr "載入字形出ç¾éŒ¯èª¤"
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "全部"
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -366,6 +541,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr "æœå°‹"
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr "å°Žå…¥"
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr "æ’ä»¶"
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -379,10 +577,6 @@ msgid "Category:"
msgstr "分類:"
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr "全部"
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr "地å€:"
@@ -414,20 +608,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr "關閉"
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -477,13 +657,6 @@ msgid "Selection Only"
msgstr "åªé™é¸ä¸­"
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr "æœå°‹"
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr "查找"
@@ -636,11 +809,6 @@ msgstr "最近:"
msgid "Matches:"
msgstr "å»åˆ"
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1119,10 +1287,6 @@ msgstr ""
msgid "Clear"
msgstr "清空"
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1491,21 +1655,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr "å°Žå…¥"
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1774,10 +1923,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3753,6 +3898,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3800,6 +3949,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4252,6 +4409,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5114,11 +5279,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5130,7 +5295,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5166,10 +5331,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr "ç€è¦½"
@@ -5228,6 +5389,11 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+#, fuzzy
+msgid "Templates"
+msgstr "移除é¸é …"
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr "離開"
@@ -5412,8 +5578,9 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
-msgstr ""
+#, fuzzy
+msgid "Project Settings "
+msgstr "設定"
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -5479,10 +5646,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr "æ’ä»¶"
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6094,6 +6257,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr ""
@@ -6649,6 +6816,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index 34943b9eb4..7836cd2f76 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -1,5 +1,6 @@
# Chinese (Taiwan) translation of the Godot Engine editor
-# Copyright (C) 2016-2017 Juan Linietsky, Ariel Manzur and the Godot community
+# Copyright (C) 2007-2017 Juan Linietsky, Ariel Manzur
+# Copyright (C) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)
# This file is distributed under the same license as the Godot source code.
#
# popcade <popcade@gmail.com>, 2016.
@@ -356,6 +357,174 @@ msgstr ""
msgid "Change Array Value"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp
+msgid "Free"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
+#: editor/editor_help.cpp editor/property_selector.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/call_dialog.cpp
+#: editor/connections_dialog.cpp editor/export_template_manager.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sample_library_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
+#: editor/property_editor.cpp editor/run_settings_dialog.cpp
+#: editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Req. Failed."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Redirect Loop."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Failed sha256 hash check"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Fetching:"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Resolving.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Connecting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Requesting.."
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "first"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "prev"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "next"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "last"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp editor/create_dialog.cpp
#: editor/editor_help.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_selector.cpp
@@ -363,6 +532,29 @@ msgstr ""
msgid "Search:"
msgstr ""
+#: editor/asset_library_editor_plugin.cpp editor/code_editor.cpp
+#: editor/editor_help.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/editor_node.cpp
+#: editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: editor/io_plugins/editor_font_import_plugin.cpp
+#: editor/io_plugins/editor_mesh_import_plugin.cpp
+#: editor/io_plugins/editor_sample_import_plugin.cpp
+#: editor/io_plugins/editor_scene_import_plugin.cpp
+#: editor/io_plugins/editor_texture_import_plugin.cpp
+#: editor/io_plugins/editor_translation_import_plugin.cpp
+#: editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: editor/asset_library_editor_plugin.cpp editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
#: editor/asset_library_editor_plugin.cpp
msgid "Sort:"
msgstr ""
@@ -376,10 +568,6 @@ msgid "Category:"
msgstr ""
#: editor/asset_library_editor_plugin.cpp
-msgid "All"
-msgstr ""
-
-#: editor/asset_library_editor_plugin.cpp
msgid "Site:"
msgstr ""
@@ -411,20 +599,6 @@ msgstr ""
msgid "Call"
msgstr ""
-#: editor/call_dialog.cpp editor/connections_dialog.cpp
-#: editor/export_template_manager.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/canvas_item_editor_plugin.cpp
-#: editor/plugins/resource_preloader_editor_plugin.cpp
-#: editor/plugins/sample_library_editor_plugin.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_settings.cpp
-#: editor/property_editor.cpp editor/run_settings_dialog.cpp
-#: editor/settings_config_dialog.cpp
-#: modules/visual_script/visual_script_editor.cpp
-msgid "Close"
-msgstr ""
-
#: editor/call_dialog.cpp
msgid "Method List:"
msgstr ""
@@ -474,13 +648,6 @@ msgid "Selection Only"
msgstr ""
#: editor/code_editor.cpp editor/editor_help.cpp
-#: editor/plugins/script_editor_plugin.cpp
-#: editor/plugins/script_text_editor.cpp
-#: editor/plugins/shader_editor_plugin.cpp editor/project_settings.cpp
-msgid "Search"
-msgstr ""
-
-#: editor/code_editor.cpp editor/editor_help.cpp
msgid "Find"
msgstr ""
@@ -630,11 +797,6 @@ msgstr ""
msgid "Matches:"
msgstr ""
-#: editor/create_dialog.cpp editor/editor_help.cpp editor/property_selector.cpp
-#: editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1108,10 +1270,6 @@ msgstr ""
msgid "Clear"
msgstr ""
-#: editor/editor_node.cpp
-msgid "Node From Scene"
-msgstr ""
-
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/resources_dock.cpp
msgid "Error saving resource!"
@@ -1476,21 +1634,6 @@ msgid "Distraction Free Mode"
msgstr ""
#: editor/editor_node.cpp
-msgid "Import assets to the project."
-msgstr ""
-
-#: editor/editor_node.cpp editor/io_plugins/editor_bitmask_import_plugin.cpp
-#: editor/io_plugins/editor_font_import_plugin.cpp
-#: editor/io_plugins/editor_mesh_import_plugin.cpp
-#: editor/io_plugins/editor_sample_import_plugin.cpp
-#: editor/io_plugins/editor_scene_import_plugin.cpp
-#: editor/io_plugins/editor_texture_import_plugin.cpp
-#: editor/io_plugins/editor_translation_import_plugin.cpp
-#: editor/project_manager.cpp
-msgid "Import"
-msgstr ""
-
-#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
msgstr ""
@@ -1759,10 +1902,6 @@ msgid "Installed Plugins:"
msgstr ""
#: editor/editor_plugin_settings.cpp
-msgid "Version:"
-msgstr ""
-
-#: editor/editor_plugin_settings.cpp
msgid "Author:"
msgstr ""
@@ -3732,6 +3871,10 @@ msgid "A processor material of type 'ParticlesMaterial' is required."
msgstr ""
#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
msgstr ""
@@ -3779,6 +3922,14 @@ msgstr ""
msgid "Emission Source: "
msgstr ""
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
msgstr ""
@@ -4228,6 +4379,14 @@ msgid "Trim Trailing Whitespace"
msgstr ""
#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent To Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
msgstr ""
@@ -5085,11 +5244,11 @@ msgid "Invalid project path, the path must exist!"
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must not exist."
+msgid "Invalid project path, *.godot must not exist."
msgstr ""
#: editor/project_manager.cpp
-msgid "Invalid project path, godot.cfg must exist."
+msgid "Invalid project path, *.godot must exist."
msgstr ""
#: editor/project_manager.cpp
@@ -5101,7 +5260,7 @@ msgid "Invalid project path (changed anything?)."
msgstr ""
#: editor/project_manager.cpp
-msgid "Couldn't create godot.cfg in project path."
+msgid "Couldn't create *.godot project file in project path."
msgstr ""
#: editor/project_manager.cpp
@@ -5137,10 +5296,6 @@ msgid "Install Project:"
msgstr ""
#: editor/project_manager.cpp
-msgid "Install"
-msgstr ""
-
-#: editor/project_manager.cpp
msgid "Browse"
msgstr ""
@@ -5199,6 +5354,10 @@ msgid "New Project"
msgstr ""
#: editor/project_manager.cpp
+msgid "Templates"
+msgstr ""
+
+#: editor/project_manager.cpp
msgid "Exit"
msgstr ""
@@ -5382,7 +5541,7 @@ msgid "Remove Resource Remap Option"
msgstr ""
#: editor/project_settings.cpp
-msgid "Project Settings (godot.cfg)"
+msgid "Project Settings "
msgstr ""
#: editor/project_settings.cpp editor/settings_config_dialog.cpp
@@ -5449,10 +5608,6 @@ msgstr ""
msgid "AutoLoad"
msgstr ""
-#: editor/project_settings.cpp
-msgid "Plugins"
-msgstr ""
-
#: editor/property_editor.cpp
msgid "Pick a Viewport"
msgstr ""
@@ -6056,6 +6211,10 @@ msgid "Change Notifier Extents"
msgstr ""
#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
#, fuzzy
msgid "Change Probe Extents"
msgstr "變更框型範åœ"
@@ -6610,6 +6769,17 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
#: scene/3d/remote_transform.cpp
msgid "Path property must point to a valid Spatial node to work."
msgstr ""
diff --git a/icon.png b/icon.png
index 7abb58ca7b..29c4a7b8fc 100644
--- a/icon.png
+++ b/icon.png
Binary files differ
diff --git a/icon.svg b/icon.svg
index 34747d34fe..5d075125e3 100644
--- a/icon.svg
+++ b/icon.svg
@@ -13,11 +13,11 @@
height="1024"
id="svg3030"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r15371"
sodipodi:docname="icon.svg"
inkscape:export-filename="/home/akien/Projects/godot/godot.git/icon.png"
- inkscape:export-xdpi="22.5"
- inkscape:export-ydpi="22.5">
+ inkscape:export-xdpi="24"
+ inkscape:export-ydpi="24">
<defs
id="defs3032" />
<sodipodi:namedview
@@ -28,13 +28,13 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
- inkscape:cx="-560.15123"
- inkscape:cy="190.62119"
+ inkscape:cx="707.24666"
+ inkscape:cy="14.063809"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
- inkscape:window-height="1015"
+ inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
@@ -54,79 +54,86 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
- transform="translate(0,-28.362183)">
+ transform="translate(0,-98.519719)">
<g
- id="g4149"
- transform="matrix(1.0688992,0,0,1.1334985,-45.061194,-81.689066)">
+ id="g78"
+ transform="matrix(4.162611,0,0,-4.162611,919.24059,771.67186)"
+ style="stroke-width:0.32031175">
<path
- sodipodi:nodetypes="cccccccccc"
- inkscape:connector-curvature="0"
- id="path3239"
- d="m 116.99388,715.36604 43.13957,-74.51381 75.99672,-171.42666 271.088,-13.63746 282.06373,14.1696 138.45065,255.56931 -25.0756,66.96734 -376.12685,53.39482 -367.70391,-40.32222 z"
- style="fill:#ffffff;fill-opacity:1;stroke:none" />
- <g
- transform="matrix(12.995388,0,0,-12.995388,898.37246,704.73082)"
- id="g3412">
- <path
- id="path3414"
- style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 0,-3.942 c 0,-0.39 -0.25,-0.734 -0.621,-0.852 L -6.835,-6.8 c -0.273,-0.091 -0.57,-0.042 -0.8,0.128 -0.232,0.168 -0.37,0.437 -0.37,0.721 l 0,4.305 -5.818,-1.108 0,-4.381 c 0,-0.447 -0.332,-0.824 -0.775,-0.885 l -8.41,-1.152 c -0.039,-0.003 -0.081,-0.008 -0.121,-0.008 -0.214,0 -0.424,0.078 -0.588,0.22 -0.195,0.172 -0.306,0.416 -0.306,0.676 l 0,4.638 -4.341,-0.018 0,-10e-4 -0.318,10e-4 -0.319,-10e-4 0,10e-4 -4.34,0.018 0,-4.638 c 0,-0.26 -0.112,-0.504 -0.307,-0.676 -0.164,-0.142 -0.374,-0.22 -0.587,-0.22 -0.041,0 -0.082,0.005 -0.123,0.008 l -8.41,1.152 c -0.442,0.061 -0.774,0.438 -0.774,0.885 l 0,4.381 -5.819,1.108 0,-4.305 c 0,-0.284 -0.137,-0.553 -0.368,-0.721 -0.232,-0.17 -0.529,-0.219 -0.802,-0.128 l -6.215,2.006 c -0.369,0.118 -0.619,0.462 -0.619,0.852 l 0,3.942 -3.837,1.29 c -0.19,-0.811 -0.295,-1.642 -0.295,-2.481 0,-10.301 14.512,-18.252 32.448,-18.309 l 0.022,0 0.023,0 c 17.936,0.057 32.448,8.008 32.448,18.309 0,0.766 -0.088,1.521 -0.247,2.266 L 0,0 Z"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="matrix(12.995388,0,0,-12.995388,140.10982,467.34929)"
- id="g3416">
- <path
- id="path3418"
- style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 0,-16.047 2.163,-0.729 c 0.364,-0.122 0.61,-0.462 0.61,-0.847 l 0,-3.936 4.426,-1.428 0,4.154 c 0,0.27 0.118,0.52 0.323,0.689 0.206,0.172 0.474,0.241 0.739,0.192 l 7.608,-1.452 c 0.422,-0.079 0.728,-0.448 0.728,-0.877 l 0,-4.338 6.62,-0.904 0,4.509 c 0,0.241 0.096,0.467 0.264,0.635 0.167,0.166 0.394,0.259 0.633,0.259 l 0.002,0 5.551,-0.022 5.549,0.022 c 0.245,-10e-4 0.468,-0.093 0.635,-0.259 0.169,-0.168 0.264,-0.394 0.264,-0.635 l 0,-4.509 6.621,0.904 0,4.338 c 0,0.429 0.304,0.798 0.726,0.877 l 7.609,1.452 c 0.262,0.049 0.533,-0.02 0.738,-0.192 0.205,-0.169 0.325,-0.419 0.325,-0.689 l 0,-4.154 4.425,1.428 0,3.936 c 0,0.385 0.245,0.725 0.609,0.847 l 1.475,0.497 0,16.279 0.04,0 c 1.437,1.834 2.767,3.767 4.042,5.828 -1.694,2.883 -3.768,5.459 -5.986,7.846 -2.057,-1.035 -4.055,-2.208 -5.942,-3.456 -0.944,0.938 -2.008,1.706 -3.052,2.509 -1.027,0.824 -2.183,1.428 -3.281,2.132 0.327,2.433 0.489,4.828 0.554,7.327 -2.831,1.424 -5.85,2.369 -8.903,3.047 -1.219,-2.048 -2.334,-4.267 -3.304,-6.436 -1.152,0.192 -2.309,0.264 -3.467,0.277 l 0,0.002 c -0.008,0 -0.015,-0.002 -0.022,-0.002 -0.008,0 -0.015,0.002 -0.022,0.002 l 0,-0.002 c -1.16,-0.013 -2.316,-0.085 -3.468,-0.277 -0.97,2.169 -2.084,4.388 -3.305,6.436 C 19.475,24.555 16.456,23.61 13.626,22.186 13.69,19.687 13.852,17.292 14.18,14.859 13.081,14.155 11.925,13.551 10.898,12.727 9.855,11.924 8.79,11.156 7.846,10.218 5.958,11.466 3.961,12.639 1.904,13.674 -0.314,11.287 -2.388,8.711 -4.082,5.828 -2.807,3.767 -1.477,1.834 -0.04,0 L 0,0 Z"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="matrix(12.995388,0,0,-12.995388,411.4457,567.42812)"
- id="g3420">
- <path
- id="path3422"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-3.611 -2.926,-6.537 -6.537,-6.537 -3.608,0 -6.535,2.926 -6.535,6.537 0,3.609 2.927,6.533 6.535,6.533 C -2.926,6.533 0,3.609 0,0"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="matrix(12.995388,0,0,-12.995388,391.00655,572.46636)"
- id="g3424">
- <path
- id="path3426"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-2.396 -1.941,-4.337 -4.339,-4.337 -2.396,0 -4.339,1.941 -4.339,4.337 0,2.396 1.943,4.339 4.339,4.339 C -1.941,4.339 0,2.396 0,0"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="matrix(12.995388,0,0,-12.995388,526.30933,660.10985)"
- id="g3428">
- <path
- id="path3430"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -1.162,0 -2.104,0.856 -2.104,1.912 l 0,6.018 c 0,1.054 0.942,1.912 2.104,1.912 1.162,0 2.106,-0.858 2.106,-1.912 l 0,-6.018 C 2.106,0.856 1.162,0 0,0"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="matrix(12.995388,0,0,-12.995388,641.18731,567.42812)"
- id="g3432">
- <path
- id="path3434"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-3.611 2.926,-6.537 6.537,-6.537 3.609,0 6.535,2.926 6.535,6.537 0,3.609 -2.926,6.533 -6.535,6.533 C 2.926,6.533 0,3.609 0,0"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="matrix(12.995388,0,0,-12.995388,661.63165,572.46636)"
- id="g3436">
- <path
- id="path3438"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-2.396 1.941,-4.337 4.336,-4.337 2.398,0 4.339,1.941 4.339,4.337 0,2.396 -1.941,4.339 -4.339,4.339 C 1.941,4.339 0,2.396 0,0"
- inkscape:connector-curvature="0" />
- </g>
+ d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175"
+ id="path80"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g82-3"
+ transform="matrix(4.162611,0,0,-4.162611,104.69892,525.90697)"
+ style="stroke-width:0.32031175">
+ <path
+ d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 h 0.134 c 4.795,6.12 9.232,12.569 13.487,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.368,12.569 -4.928,6.12 -0.134,0 Z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175"
+ id="path84-6"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g86-7"
+ transform="matrix(4.162611,0,0,-4.162611,784.07144,817.24284)"
+ style="stroke-width:0.32031175">
+ <path
+ d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175"
+ id="path88-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g90-3"
+ transform="matrix(4.162611,0,0,-4.162611,389.21484,625.67104)"
+ style="stroke-width:0.32031175">
+ <path
+ d="m 0,0 c 0,-12.052 -9.765,-21.815 -21.813,-21.815 -12.042,0 -21.81,9.763 -21.81,21.815 0,12.044 9.768,21.802 21.81,21.802 C -9.765,21.802 0,12.044 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175"
+ id="path92-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g94-6"
+ transform="matrix(4.162611,0,0,-4.162611,367.36686,631.05679)"
+ style="stroke-width:0.32031175">
+ <path
+ d="m 0,0 c 0,-7.994 -6.479,-14.473 -14.479,-14.473 -7.996,0 -14.479,6.479 -14.479,14.473 0,7.994 6.483,14.479 14.479,14.479 C -6.479,14.479 0,7.994 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175"
+ id="path96-2"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g98-9"
+ transform="matrix(4.162611,0,0,-4.162611,511.99336,724.73954)"
+ style="stroke-width:0.32031175">
+ <path
+ d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175"
+ id="path100-1"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g102-2"
+ transform="matrix(4.162611,0,0,-4.162611,634.78706,625.67104)"
+ style="stroke-width:0.32031175">
+ <path
+ d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175"
+ id="path104-7"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g106-0"
+ transform="matrix(4.162611,0,0,-4.162611,656.64056,631.05679)"
+ style="stroke-width:0.32031175">
+ <path
+ d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175"
+ id="path108-9"
+ inkscape:connector-curvature="0" />
</g>
</g>
</svg>
diff --git a/logo.png b/logo.png
index d6cab7f11b..8cf3e15ebc 100644
--- a/logo.png
+++ b/logo.png
Binary files differ
diff --git a/logo.svg b/logo.svg
index 98dcddfd2b..865712b345 100644
--- a/logo.svg
+++ b/logo.svg
@@ -1,134 +1,219 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 236.27499 84.6875"
- height="84.6875"
- width="236.27499"
- xml:space="preserve"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg2"
version="1.1"
- id="svg3336"><metadata
- id="metadata3342"><rdf:RDF><cc:Work
+ inkscape:version="0.92.1 r15371"
+ xml:space="preserve"
+ width="1024"
+ height="414"
+ viewBox="0 0 959.99998 388.125"
+ sodipodi:docname="logo.svg"
+ inkscape:export-filename="/home/akien/Projects/godot/godot.git/logo.png"
+ inkscape:export-xdpi="48"
+ inkscape:export-ydpi="48"><metadata
+ id="metadata8"><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><defs
- id="defs3340"><clipPath
- id="clipPath3350"
- clipPathUnits="userSpaceOnUse"><path
- id="path3352"
- d="m 0,67.75 189.02,0 L 189.02,0 0,0 0,67.75 Z" /></clipPath></defs><g
- transform="matrix(1.25,0,0,-1.25,0,84.6875)"
- id="g3344"><g
- id="g3346"><g
- clip-path="url(#clipPath3350)"
- id="g3348"><g
- transform="translate(112.7847,43.5176)"
- id="g3354"><path
- id="path3356"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -1.082,0 -1.989,-0.497 -2.724,-1.488 -0.732,-0.992 -1.099,-2.385 -1.099,-4.177 0,-1.796 0.349,-3.171 1.05,-4.129 0.699,-0.961 1.617,-1.439 2.756,-1.439 1.139,0 2.064,0.484 2.775,1.457 0.71,0.968 1.066,2.355 1.066,4.161 0,1.803 -0.367,3.192 -1.1,4.162 C 1.992,-0.484 1.083,0 0,0 m -0.017,-17.828 c -3.168,0 -5.752,1.037 -7.749,3.11 -1.994,2.075 -2.991,5.104 -2.991,9.084 0,3.984 1.008,6.999 3.027,9.053 2.018,2.051 4.624,3.077 7.815,3.077 3.191,0 5.769,-1.008 7.73,-3.029 1.964,-2.018 2.945,-5.076 2.945,-9.167 0,-4.094 -1.004,-7.139 -3.012,-9.137 -2.008,-1.994 -4.595,-2.991 -7.765,-2.991" /></g><g
- transform="translate(133.0269,43.2832)"
- id="g3358"><path
- id="path3360"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 0,-10.119 c 0,-0.473 0.035,-0.771 0.103,-0.896 0.066,-0.124 0.27,-0.186 0.607,-0.186 1.242,0 2.183,0.464 2.826,1.388 0.645,0.924 0.964,2.462 0.964,4.617 0,2.155 -0.334,3.559 -0.997,4.212 C 2.837,-0.33 1.782,0 0.338,0 L 0,0 Z m -6.495,-15.7 0,20.298 c 0,0.564 0.14,1.009 0.423,1.34 0.281,0.325 0.648,0.49 1.1,0.49 l 5.65,0 c 3.586,0 6.309,-0.905 8.168,-2.709 1.862,-1.804 2.794,-4.645 2.794,-8.525 0,-8.3 -3.543,-12.45 -10.625,-12.45 l -5.785,0 c -1.149,0 -1.725,0.518 -1.725,1.556" /></g><g
- transform="translate(157.6558,43.5176)"
- id="g3362"><path
- id="path3364"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -1.083,0 -1.991,-0.497 -2.726,-1.488 -0.731,-0.992 -1.097,-2.385 -1.097,-4.177 0,-1.796 0.35,-3.171 1.049,-4.129 0.698,-0.961 1.617,-1.439 2.756,-1.439 1.14,0 2.065,0.484 2.775,1.457 0.711,0.968 1.067,2.355 1.067,4.161 0,1.803 -0.367,3.192 -1.1,4.162 C 1.99,-0.484 1.083,0 0,0 m -0.018,-17.828 c -3.169,0 -5.751,1.037 -7.746,3.11 -1.997,2.075 -2.995,5.104 -2.995,9.084 0,3.984 1.009,6.999 3.027,9.053 2.02,2.051 4.624,3.077 7.817,3.077 3.192,0 5.768,-1.008 7.73,-3.029 1.963,-2.018 2.944,-5.076 2.944,-9.167 0,-4.094 -1.004,-7.139 -3.012,-9.137 -2.007,-1.994 -4.596,-2.991 -7.765,-2.991" /></g><g
- transform="translate(181.0239,26.5664)"
- id="g3366"><path
- id="path3368"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-0.448 -1.115,-0.676 -3.349,-0.676 -2.232,0 -3.35,0.228 -3.35,0.676 l 0,16.985 -4.059,0 c -0.384,0 -0.655,0.518 -0.812,1.558 -0.068,0.495 -0.1,1.002 -0.1,1.521 0,0.517 0.032,1.026 0.1,1.522 0.157,1.037 0.428,1.559 0.812,1.559 l 14.717,0 c 0.383,0 0.653,-0.522 0.812,-1.559 0.067,-0.496 0.101,-1.005 0.101,-1.522 0,-0.519 -0.034,-1.026 -0.101,-1.521 C 4.612,17.503 4.342,16.985 3.959,16.985 L 0,16.985 0,0 Z" /></g><g
- transform="translate(96.0444,38.5889)"
- id="g3370"><path
- id="path3372"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -1.821,0.028 -3.906,-0.352 -3.906,-0.352 l 0,-3.554 2.096,0 -0.023,-1.585 c 0,-0.587 -0.582,-0.882 -1.743,-0.882 -1.162,0 -2.188,0.492 -3.078,1.474 -0.893,0.982 -1.337,2.419 -1.337,4.311 0,1.897 0.434,3.295 1.303,4.197 0.866,0.902 2.002,1.354 3.399,1.354 0.587,0 1.195,-0.095 1.827,-0.288 0.632,-0.192 1.055,-0.371 1.27,-0.539 0.214,-0.173 0.417,-0.255 0.609,-0.255 0.191,0 0.501,0.223 0.929,0.676 0.429,0.451 0.813,1.134 1.152,2.046 0.337,0.916 0.506,1.618 0.506,2.116 0,0.494 -0.01,0.835 -0.032,1.014 -0.474,0.519 -1.348,0.93 -2.624,1.236 -1.273,0.304 -2.7,0.456 -4.279,0.456 -3.474,0 -6.191,-1.094 -8.153,-3.281 -1.963,-2.189 -2.943,-5.03 -2.943,-8.527 0,-4.105 1.003,-7.218 3.008,-9.338 2.01,-2.12 4.648,-3.178 7.919,-3.178 1.759,0 3.321,0.151 4.684,0.456 1.366,0.303 2.274,0.615 2.726,0.93 L 3.445,-0.926 C 3.445,-0.311 1.821,-0.031 0,0" /></g><g
- transform="translate(88.9126,11.8398)"
- id="g3374"><path
- id="path3376"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -0.187,-0.384 -0.531,-0.735 -1.034,-1.054 -0.502,-0.32 -1.14,-0.479 -1.915,-0.479 -1.022,0 -1.844,0.322 -2.469,0.973 -0.622,0.647 -0.934,1.579 -0.934,2.794 l 0,3.032 c 0,1.189 0.294,2.101 0.883,2.738 0.588,0.632 1.376,0.952 2.359,0.952 0.962,0 1.707,-0.253 2.234,-0.753 C -0.35,7.701 -0.074,7 -0.05,6.104 l -0.013,-0.04 -0.785,0 C -0.876,6.751 -1.075,7.28 -1.45,7.654 -1.823,8.025 -2.377,8.213 -3.11,8.213 -3.851,8.213 -4.438,7.962 -4.868,7.459 -5.296,6.957 -5.51,6.229 -5.51,5.273 l 0,-3.048 c 0,-0.992 0.231,-1.747 0.693,-2.268 0.461,-0.517 1.083,-0.775 1.868,-0.775 0.574,0 1.034,0.101 1.379,0.309 0.346,0.205 0.587,0.455 0.722,0.752 l 0,2.655 -2.115,0 0,0.739 L 0,3.637 0,0 Z" /></g><g
- transform="translate(92.7988,11.0645)"
- id="g3378"><path
- id="path3380"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0.465,0 0.88,0.132 1.242,0.4 0.362,0.27 0.616,0.611 0.767,1.026 l 0,1.638 -1.346,0 C 0.091,3.064 -0.368,2.902 -0.711,2.578 -1.055,2.256 -1.225,1.854 -1.225,1.375 -1.225,0.971 -1.119,0.639 -0.903,0.383 -0.688,0.126 -0.387,0 0,0 M 2.135,-0.611 C 2.093,-0.349 2.06,-0.136 2.04,0.031 2.02,0.201 2.009,0.37 2.009,0.542 1.779,0.166 1.483,-0.146 1.116,-0.39 0.75,-0.636 0.343,-0.758 -0.105,-0.758 c -0.627,0 -1.109,0.195 -1.45,0.583 -0.34,0.391 -0.511,0.917 -0.511,1.581 0,0.702 0.247,1.266 0.741,1.684 0.494,0.418 1.166,0.627 2.011,0.627 l 1.323,0 0,0.93 C 2.009,5.183 1.873,5.604 1.604,5.909 1.331,6.21 0.954,6.362 0.468,6.362 0.017,6.362 -0.356,6.219 -0.649,5.928 -0.94,5.639 -1.085,5.285 -1.085,4.864 l -0.786,0.007 -0.014,0.041 c -0.022,0.571 0.194,1.076 0.65,1.524 0.454,0.446 1.036,0.668 1.745,0.668 0.701,0 1.265,-0.213 1.696,-0.638 0.428,-0.429 0.643,-1.04 0.643,-1.835 l 0,-3.715 c 0,-0.27 0.012,-0.533 0.036,-0.784 0.024,-0.254 0.063,-0.499 0.125,-0.743 l -0.875,0 z" /></g><g
- transform="translate(98.2871,18.0273)"
- id="g3382"><path
- id="path3384"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 0.072,-1.176 c 0.199,0.421 0.466,0.745 0.796,0.976 0.332,0.227 0.722,0.341 1.171,0.341 0.457,0 0.843,-0.133 1.154,-0.403 0.311,-0.268 0.541,-0.675 0.687,-1.22 0.186,0.503 0.451,0.902 0.794,1.19 0.343,0.289 0.759,0.433 1.242,0.433 0.664,0 1.179,-0.269 1.544,-0.807 0.367,-0.539 0.55,-1.366 0.55,-2.483 l 0,-4.425 -0.846,0 0,4.439 c 0,0.929 -0.128,1.583 -0.378,1.959 -0.252,0.377 -0.612,0.567 -1.078,0.567 -0.491,0 -0.874,-0.207 -1.149,-0.628 C 4.285,-1.658 4.116,-2.185 4.054,-2.82 l 0,-0.197 0,-4.557 -0.842,0 0,4.434 c 0,0.908 -0.127,1.557 -0.387,1.945 -0.259,0.387 -0.619,0.58 -1.081,0.58 -0.442,0 -0.8,-0.135 -1.068,-0.403 C 0.407,-1.286 0.215,-1.654 0.099,-2.121 l 0,-5.453 -0.841,0 0,7.574 L 0,0 Z" /></g><g
- transform="translate(110.499,17.4268)"
- id="g3386"><path
- id="path3388"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -0.527,0 -0.959,-0.24 -1.299,-0.72 -0.339,-0.481 -0.514,-1.074 -0.529,-1.781 l 3.495,0 0,0.324 c 0,0.625 -0.147,1.146 -0.441,1.559 C 0.931,-0.205 0.523,0 0,0 m 0.119,-7.12 c -0.817,0 -1.485,0.307 -2.003,0.921 -0.517,0.612 -0.777,1.395 -0.777,2.349 l 0,1.258 c 0,0.956 0.26,1.753 0.78,2.387 0.521,0.631 1.147,0.946 1.881,0.946 0.793,0 1.408,-0.281 1.847,-0.845 0.44,-0.566 0.66,-1.326 0.66,-2.279 l 0,-0.831 -4.335,0 0,-0.63 c 0,-0.733 0.176,-1.344 0.525,-1.831 0.35,-0.488 0.826,-0.73 1.422,-0.73 0.414,0 0.775,0.073 1.075,0.217 0.301,0.147 0.558,0.353 0.773,0.624 L 2.311,-6.16 C 2.083,-6.45 1.786,-6.685 1.424,-6.858 1.063,-7.031 0.627,-7.12 0.119,-7.12" /></g><g
- transform="translate(119.8403,17.4268)"
- id="g3390"><path
- id="path3392"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -0.528,0 -0.962,-0.24 -1.301,-0.72 -0.337,-0.481 -0.513,-1.074 -0.528,-1.781 l 3.495,0 0,0.324 c 0,0.625 -0.146,1.146 -0.442,1.559 C 0.93,-0.205 0.522,0 0,0 m 0.118,-7.12 c -0.817,0 -1.484,0.307 -2.001,0.921 -0.52,0.612 -0.78,1.395 -0.78,2.349 l 0,1.258 c 0,0.956 0.262,1.753 0.78,2.387 C -1.36,0.426 -0.734,0.741 0,0.741 0.792,0.741 1.409,0.46 1.847,-0.104 2.286,-0.67 2.505,-1.43 2.505,-2.383 l 0,-0.831 -4.334,0 0,-0.63 c 0,-0.733 0.176,-1.344 0.527,-1.831 0.348,-0.488 0.822,-0.73 1.42,-0.73 0.416,0 0.775,0.073 1.074,0.217 0.302,0.147 0.559,0.353 0.776,0.624 L 2.31,-6.16 C 2.081,-6.45 1.786,-6.685 1.423,-6.858 1.063,-7.031 0.627,-7.12 0.118,-7.12" /></g><g
- transform="translate(124.5659,18.0273)"
- id="g3394"><path
- id="path3396"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 0.069,-1.252 c 0.202,0.444 0.469,0.789 0.804,1.029 0.332,0.242 0.723,0.364 1.172,0.364 0.677,0 1.196,-0.25 1.556,-0.753 0.363,-0.502 0.544,-1.283 0.544,-2.341 l 0,-4.621 -0.847,0 0,4.613 c 0,0.865 -0.127,1.47 -0.379,1.82 -0.251,0.351 -0.619,0.526 -1.098,0.526 -0.43,0 -0.791,-0.14 -1.08,-0.424 C 0.451,-1.32 0.234,-1.695 0.09,-2.168 l 0,-5.406 -0.84,0 L -0.75,0 0,0 Z" /></g><g
- transform="translate(131.1768,13.5771)"
- id="g3398"><path
- id="path3400"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-0.769 0.146,-1.38 0.441,-1.835 0.292,-0.459 0.736,-0.686 1.33,-0.686 0.406,0 0.748,0.109 1.029,0.331 0.28,0.221 0.501,0.53 0.664,0.921 l 0,3.752 C 3.307,2.887 3.091,3.213 2.818,3.464 2.545,3.711 2.2,3.835 1.785,3.835 1.193,3.835 0.746,3.577 0.448,3.06 0.149,2.541 0,1.865 0,1.035 L 0,0 Z m -0.849,1.035 c 0,1.073 0.217,1.936 0.652,2.585 0.432,0.647 1.033,0.971 1.8,0.971 0.425,0 0.798,-0.104 1.117,-0.312 C 3.039,4.075 3.303,3.776 3.515,3.396 l 0.082,1.054 0.714,0 0,-7.581 c 0,-0.971 -0.226,-1.723 -0.678,-2.255 -0.452,-0.53 -1.095,-0.799 -1.926,-0.799 -0.298,0 -0.619,0.047 -0.962,0.138 -0.344,0.091 -0.648,0.21 -0.915,0.359 l 0.233,0.739 c 0.227,-0.148 0.481,-0.262 0.763,-0.342 0.279,-0.083 0.568,-0.123 0.867,-0.123 0.602,0 1.049,0.193 1.337,0.579 0.289,0.391 0.434,0.956 0.434,1.704 l 0,0.916 C 3.25,-2.556 2.986,-2.817 2.673,-2.998 2.362,-3.18 1.998,-3.271 1.588,-3.271 c -0.761,0 -1.358,0.298 -1.789,0.894 -0.431,0.595 -0.648,1.388 -0.648,2.377 l 0,1.035 z" /></g><path
- id="path3402"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 138.318,10.453 -0.848,0 0,7.574 0.848,0 0,-7.574 z m 0,9.731 -0.848,0 0,1.193 0.848,0 0,-1.193 z" /><g
- transform="translate(141.0552,18.0273)"
- id="g3404"><path
- id="path3406"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 0.069,-1.252 c 0.202,0.444 0.468,0.789 0.803,1.029 0.334,0.242 0.725,0.364 1.173,0.364 0.677,0 1.197,-0.25 1.558,-0.753 0.363,-0.502 0.542,-1.283 0.542,-2.341 l 0,-4.621 -0.847,0 0,4.613 c 0,0.865 -0.127,1.47 -0.378,1.82 -0.253,0.351 -0.618,0.526 -1.099,0.526 -0.43,0 -0.79,-0.14 -1.079,-0.424 C 0.453,-1.32 0.235,-1.695 0.092,-2.168 l 0,-5.406 -0.842,0 L -0.75,0 0,0 Z" /></g><g
- transform="translate(149.4155,17.4268)"
- id="g3408"><path
- id="path3410"
- style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -0.528,0 -0.961,-0.24 -1.299,-0.72 -0.338,-0.481 -0.514,-1.074 -0.53,-1.781 l 3.495,0 0,0.324 c 0,0.625 -0.145,1.146 -0.44,1.559 C 0.932,-0.205 0.523,0 0,0 m 0.12,-7.12 c -0.819,0 -1.486,0.307 -2.002,0.921 -0.518,0.612 -0.778,1.395 -0.778,2.349 l 0,1.258 c 0,0.956 0.26,1.753 0.78,2.387 0.521,0.631 1.148,0.946 1.88,0.946 0.793,0 1.41,-0.281 1.85,-0.845 0.438,-0.566 0.657,-1.326 0.657,-2.279 l 0,-0.831 -4.336,0 0,-0.63 c 0,-0.733 0.177,-1.344 0.527,-1.831 0.349,-0.488 0.823,-0.73 1.422,-0.73 0.414,0 0.773,0.073 1.072,0.217 0.304,0.147 0.56,0.353 0.777,0.624 L 2.313,-6.16 C 2.082,-6.45 1.787,-6.685 1.425,-6.858 1.064,-7.031 0.628,-7.12 0.12,-7.12" /></g><g
- transform="translate(64.312,21.7949)"
- id="g3412"><path
- id="path3414"
- style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 0,-3.942 c 0,-0.39 -0.25,-0.734 -0.621,-0.852 L -6.835,-6.8 c -0.273,-0.091 -0.57,-0.042 -0.8,0.128 -0.232,0.168 -0.37,0.437 -0.37,0.721 l 0,4.305 -5.818,-1.108 0,-4.381 c 0,-0.447 -0.332,-0.824 -0.775,-0.885 l -8.41,-1.152 c -0.039,-0.003 -0.081,-0.008 -0.121,-0.008 -0.214,0 -0.424,0.078 -0.588,0.22 -0.195,0.172 -0.306,0.416 -0.306,0.676 l 0,4.638 -4.341,-0.018 0,-10e-4 -0.318,10e-4 -0.319,-10e-4 0,10e-4 -4.34,0.018 0,-4.638 c 0,-0.26 -0.112,-0.504 -0.307,-0.676 -0.164,-0.142 -0.374,-0.22 -0.587,-0.22 -0.041,0 -0.082,0.005 -0.123,0.008 l -8.41,1.152 c -0.442,0.061 -0.774,0.438 -0.774,0.885 l 0,4.381 -5.819,1.108 0,-4.305 c 0,-0.284 -0.137,-0.553 -0.368,-0.721 -0.232,-0.17 -0.529,-0.219 -0.802,-0.128 l -6.215,2.006 c -0.369,0.118 -0.619,0.462 -0.619,0.852 l 0,3.942 -3.837,1.29 c -0.19,-0.811 -0.295,-1.642 -0.295,-2.481 0,-10.301 14.512,-18.252 32.448,-18.309 l 0.022,0 0.023,0 c 17.936,0.057 32.448,8.008 32.448,18.309 0,0.766 -0.088,1.521 -0.247,2.266 L 0,0 Z" /></g><g
- transform="translate(5.9634,40.0615)"
- id="g3416"><path
- id="path3418"
- style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 0,-16.047 2.163,-0.729 c 0.364,-0.122 0.61,-0.462 0.61,-0.847 l 0,-3.936 4.426,-1.428 0,4.154 c 0,0.27 0.118,0.52 0.323,0.689 0.206,0.172 0.474,0.241 0.739,0.192 l 7.608,-1.452 c 0.422,-0.079 0.728,-0.448 0.728,-0.877 l 0,-4.338 6.62,-0.904 0,4.509 c 0,0.241 0.096,0.467 0.264,0.635 0.167,0.166 0.394,0.259 0.633,0.259 l 0.002,0 5.551,-0.022 5.549,0.022 c 0.245,-10e-4 0.468,-0.093 0.635,-0.259 0.169,-0.168 0.264,-0.394 0.264,-0.635 l 0,-4.509 6.621,0.904 0,4.338 c 0,0.429 0.304,0.798 0.726,0.877 l 7.609,1.452 c 0.262,0.049 0.533,-0.02 0.738,-0.192 0.205,-0.169 0.325,-0.419 0.325,-0.689 l 0,-4.154 4.425,1.428 0,3.936 c 0,0.385 0.245,0.725 0.609,0.847 l 1.475,0.497 0,16.279 0.04,0 c 1.437,1.834 2.767,3.767 4.042,5.828 -1.694,2.883 -3.768,5.459 -5.986,7.846 -2.057,-1.035 -4.055,-2.208 -5.942,-3.456 -0.944,0.938 -2.008,1.706 -3.052,2.509 -1.027,0.824 -2.183,1.428 -3.281,2.132 0.327,2.433 0.489,4.828 0.554,7.327 -2.831,1.424 -5.85,2.369 -8.903,3.047 -1.219,-2.048 -2.334,-4.267 -3.304,-6.436 -1.152,0.192 -2.309,0.264 -3.467,0.277 l 0,0.002 c -0.008,0 -0.015,-0.002 -0.022,-0.002 -0.008,0 -0.015,0.002 -0.022,0.002 l 0,-0.002 c -1.16,-0.013 -2.316,-0.085 -3.468,-0.277 -0.97,2.169 -2.084,4.388 -3.305,6.436 C 19.475,24.555 16.456,23.61 13.626,22.186 13.69,19.687 13.852,17.292 14.18,14.859 13.081,14.155 11.925,13.551 10.898,12.727 9.855,11.924 8.79,11.156 7.846,10.218 5.958,11.466 3.961,12.639 1.904,13.674 -0.314,11.287 -2.388,8.711 -4.082,5.828 -2.807,3.767 -1.477,1.834 -0.04,0 L 0,0 Z" /></g><g
- transform="translate(26.8428,32.3604)"
- id="g3420"><path
- id="path3422"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-3.611 -2.926,-6.537 -6.537,-6.537 -3.608,0 -6.535,2.926 -6.535,6.537 0,3.609 2.927,6.533 6.535,6.533 C -2.926,6.533 0,3.609 0,0" /></g><g
- transform="translate(25.27,31.9727)"
- id="g3424"><path
- id="path3426"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-2.396 -1.941,-4.337 -4.339,-4.337 -2.396,0 -4.339,1.941 -4.339,4.337 0,2.396 1.943,4.339 4.339,4.339 C -1.941,4.339 0,2.396 0,0" /></g><g
- transform="translate(35.6816,25.2285)"
- id="g3428"><path
- id="path3430"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c -1.162,0 -2.104,0.856 -2.104,1.912 l 0,6.018 c 0,1.054 0.942,1.912 2.104,1.912 1.162,0 2.106,-0.858 2.106,-1.912 l 0,-6.018 C 2.106,0.856 1.162,0 0,0" /></g><g
- transform="translate(44.5215,32.3604)"
- id="g3432"><path
- id="path3434"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-3.611 2.926,-6.537 6.537,-6.537 3.609,0 6.535,2.926 6.535,6.537 0,3.609 -2.926,6.533 -6.535,6.533 C 2.926,6.533 0,3.609 0,0" /></g><g
- transform="translate(46.0947,31.9727)"
- id="g3436"><path
- id="path3438"
- style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 0,0 c 0,-2.396 1.941,-4.337 4.336,-4.337 2.398,0 4.339,1.941 4.339,4.337 0,2.396 -1.941,4.339 -4.339,4.339 C 1.941,4.339 0,2.396 0,0" /></g></g></g></g></svg> \ No newline at end of file
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6"><clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath16"><path
+ d="M 0,595.276 H 841.89 V 0 H 0 Z"
+ id="path18"
+ inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ id="namedview4"
+ showgrid="false"
+ inkscape:zoom="0.63432763"
+ inkscape:cx="166.44059"
+ inkscape:cy="101.14582"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g14"
+ fit-margin-top="48"
+ fit-margin-left="48"
+ fit-margin-right="48"
+ fit-margin-bottom="48" /><g
+ id="g10"
+ inkscape:groupmode="layer"
+ inkscape:label="godot_engine_logo_2017_curves-01"
+ transform="matrix(1.25,0,0,-1.25,-94.249997,597.49874)"><g
+ id="g12"><g
+ id="g14"
+ clip-path="url(#clipPath16)"><g
+ id="g20"
+ transform="matrix(1.1310535,0,0,1.1310535,531.44953,355.31567)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c -3.611,0 -6.636,-1.659 -9.09,-4.967 -2.441,-3.311 -3.668,-7.958 -3.668,-13.938 0,-5.993 1.166,-10.581 3.503,-13.778 2.333,-3.207 5.398,-4.804 9.2,-4.804 3.8,0 6.887,1.617 9.258,4.862 2.371,3.233 3.559,7.861 3.559,13.886 0,6.02 -1.227,10.654 -3.673,13.89 C 6.646,-1.617 3.616,0 0,0 m -0.055,-59.493 c -10.573,0 -19.195,3.46 -25.859,10.379 -6.655,6.925 -9.984,17.03 -9.984,30.314 0,13.292 3.367,23.356 10.101,30.209 6.736,6.844 15.431,10.269 26.082,10.269 10.649,0 19.251,-3.363 25.794,-10.109 6.555,-6.733 9.827,-16.94 9.827,-30.591 0,-13.661 -3.348,-23.822 -10.05,-30.49 -6.702,-6.654 -15.333,-9.981 -25.911,-9.981"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path22"
+ inkscape:connector-curvature="0" /></g><g
+ id="g24"
+ transform="matrix(1.1310535,0,0,1.1310535,607.8515,354.43097)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 v -33.768 c 0,-1.577 0.116,-2.571 0.342,-2.988 0.224,-0.415 0.903,-0.623 2.029,-0.623 4.144,0 7.283,1.548 9.429,4.634 2.151,3.083 3.215,8.216 3.215,15.405 0,7.192 -1.113,11.878 -3.325,14.055 C 9.467,-1.102 5.946,0 1.129,0 Z m -21.675,-52.392 v 67.735 c 0,1.883 0.468,3.369 1.413,4.471 0.939,1.085 2.161,1.636 3.671,1.636 H 2.263 c 11.965,0 21.053,-3.018 27.257,-9.04 6.215,-6.02 9.322,-15.499 9.322,-28.447 0,-27.7 -11.821,-41.547 -35.456,-41.547 h -19.302 c -3.836,0 -5.759,1.727 -5.759,5.192"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path26"
+ inkscape:connector-curvature="0" /></g><g
+ id="g28"
+ transform="matrix(1.1310535,0,0,1.1310535,700.81066,355.31567)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c -3.612,0 -6.645,-1.659 -9.095,-4.967 -2.44,-3.311 -3.662,-7.958 -3.662,-13.938 0,-5.993 1.169,-10.581 3.499,-13.778 2.33,-3.207 5.398,-4.804 9.2,-4.804 3.801,0 6.89,1.617 9.258,4.862 2.372,3.233 3.56,7.861 3.56,13.886 0,6.02 -1.225,10.654 -3.671,13.89 C 6.642,-1.617 3.616,0 0,0 m -0.058,-59.493 c -10.577,0 -19.193,3.46 -25.851,10.379 -6.663,6.925 -9.993,17.03 -9.993,30.314 0,13.292 3.367,23.356 10.1,30.209 6.741,6.844 15.431,10.269 26.086,10.269 10.651,0 19.246,-3.363 25.797,-10.109 6.55,-6.733 9.822,-16.94 9.822,-30.591 0,-13.661 -3.349,-23.822 -10.05,-30.49 -6.699,-6.654 -15.338,-9.981 -25.911,-9.981"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path30"
+ inkscape:connector-curvature="0" /></g><g
+ id="g32"
+ transform="matrix(1.1310535,0,0,1.1310535,789.01132,291.33514)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c 0,-1.496 -3.721,-2.255 -11.176,-2.255 -7.448,0 -11.18,0.759 -11.18,2.255 v 56.681 h -13.545 c -1.281,0 -2.185,1.727 -2.71,5.198 -0.226,1.652 -0.334,3.343 -0.334,5.077 0,1.724 0.108,3.422 0.334,5.077 0.525,3.462 1.429,5.202 2.71,5.202 h 49.112 c 1.279,0 2.179,-1.74 2.712,-5.202 0.221,-1.655 0.335,-3.353 0.335,-5.077 0,-1.734 -0.114,-3.425 -0.335,-5.077 C 15.39,58.408 14.49,56.681 13.211,56.681 H 0 Z"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path34"
+ inkscape:connector-curvature="0" /></g><g
+ id="g36"
+ transform="matrix(1.1310535,0,0,1.1310535,468.26549,336.71278)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c -6.078,0.094 -13.034,-1.173 -13.034,-1.173 v -11.863 h 6.995 l -0.078,-5.288 c 0,-1.959 -1.942,-2.943 -5.815,-2.943 -3.878,0 -7.303,1.642 -10.274,4.917 -2.978,3.279 -4.459,8.072 -4.459,14.388 0,6.329 1.447,10.995 4.345,14.006 2.892,3.008 6.683,4.517 11.346,4.517 1.959,0 3.987,-0.316 6.096,-0.961 2.11,-0.639 3.519,-1.238 4.238,-1.799 0.713,-0.577 1.391,-0.85 2.032,-0.85 0.638,0 1.671,0.746 3.1,2.255 1.431,1.505 2.713,3.786 3.844,6.827 1.126,3.057 1.69,5.4 1.69,7.062 0,1.649 -0.036,2.786 -0.109,3.386 -1.581,1.73 -4.499,3.102 -8.755,4.122 -4.248,1.017 -9.011,1.522 -14.28,1.522 -11.594,0 -20.66,-3.65 -27.207,-10.95 -6.552,-7.303 -9.822,-16.783 -9.822,-28.452 0,-13.701 3.347,-24.087 10.041,-31.162 6.706,-7.074 15.51,-10.607 26.425,-10.607 5.87,0 11.08,0.505 15.632,1.522 4.557,1.013 7.586,2.053 9.093,3.105 l 0.452,35.33 C 11.496,-1.036 6.078,-0.104 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path38"
+ inkscape:connector-curvature="0" /></g><g
+ id="g40"
+ transform="matrix(1.1310535,0,0,1.1310535,441.34721,235.75121)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c -0.624,-1.28 -1.771,-2.454 -3.449,-3.516 -1.676,-1.069 -3.805,-1.6 -6.391,-1.6 -3.412,0 -6.156,1.075 -8.24,3.249 -2.076,2.157 -3.116,5.266 -3.116,9.323 v 10.116 c 0,3.969 0.98,7.013 2.946,9.138 1.962,2.108 4.59,3.177 7.872,3.177 3.208,0 5.695,-0.844 7.455,-2.513 1.755,-1.675 2.677,-4.015 2.757,-7.003 L -0.21,20.238 h -2.619 c -0.094,2.29 -0.759,4.057 -2.01,5.305 -1.244,1.238 -3.095,1.864 -5.539,1.864 -2.473,0 -4.432,-0.837 -5.866,-2.516 -1.43,-1.675 -2.143,-4.103 -2.143,-7.293 V 7.424 c 0,-3.308 0.771,-5.83 2.311,-7.567 1.54,-1.724 3.616,-2.588 6.236,-2.588 1.913,0 3.451,0.339 4.602,1.033 1.155,0.684 1.956,1.519 2.409,2.51 v 8.861 h -7.06 v 2.463 H 0 Z"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path42"
+ inkscape:connector-curvature="0" /></g><g
+ id="g44"
+ transform="matrix(1.1310535,0,0,1.1310535,456.01527,232.82495)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c 1.553,0 2.936,0.44 4.144,1.336 1.21,0.9 2.058,2.037 2.561,3.422 v 5.468 H 2.213 c -1.91,0 -3.44,-0.541 -4.585,-1.623 C -3.52,7.528 -4.088,6.185 -4.088,4.588 -4.088,3.239 -3.733,2.131 -3.014,1.277 -2.296,0.42 -1.292,0 0,0 M 7.124,-2.04 C 6.984,-1.164 6.875,-0.453 6.806,0.104 6.739,0.671 6.705,1.235 6.705,1.808 5.938,0.554 4.948,-0.486 3.725,-1.301 2.504,-2.122 1.146,-2.529 -0.35,-2.529 c -2.092,0 -3.701,0.648 -4.84,1.946 -1.132,1.303 -1.704,3.059 -1.704,5.276 0,2.343 0.823,4.223 2.473,5.618 1.649,1.395 3.89,2.092 6.709,2.092 h 4.417 v 3.106 c 0,1.786 -0.456,3.193 -1.351,4.21 -0.914,1.004 -2.17,1.512 -3.791,1.512 -1.508,0 -2.752,-0.479 -3.728,-1.45 -0.973,-0.965 -1.456,-2.144 -1.456,-3.549 l -2.623,0.023 -0.046,0.137 c -0.074,1.906 0.647,3.591 2.168,5.084 1.515,1.489 3.459,2.229 5.825,2.229 2.338,0 4.22,-0.711 5.657,-2.128 1.429,-1.431 2.146,-3.471 2.146,-6.124 V 3.057 c 0,-0.903 0.042,-1.78 0.121,-2.617 0.081,-0.848 0.212,-1.665 0.417,-2.48 z"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path46"
+ inkscape:connector-curvature="0" /></g><g
+ id="g48"
+ transform="matrix(1.1310535,0,0,1.1310535,476.7303,259.10521)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 0.24,-3.923 c 0.664,1.404 1.554,2.486 2.657,3.255 1.107,0.759 2.41,1.138 3.906,1.138 1.527,0 2.814,-0.444 3.852,-1.343 1.039,-0.896 1.805,-2.252 2.292,-4.074 0.623,1.682 1.505,3.011 2.65,3.973 1.145,0.964 2.534,1.444 4.143,1.444 2.217,0 3.937,-0.897 5.156,-2.692 1.224,-1.799 1.834,-4.559 1.834,-8.288 v -14.765 h -2.823 v 14.814 c 0,3.1 -0.429,5.283 -1.263,6.538 -0.839,1.257 -2.042,1.89 -3.598,1.89 -1.637,0 -2.915,-0.691 -3.834,-2.096 -0.914,-1.405 -1.478,-3.161 -1.683,-5.282 v -0.655 -15.209 H 10.72 v 14.798 c 0,3.027 -0.424,5.194 -1.292,6.488 -0.864,1.294 -2.066,1.936 -3.609,1.936 -1.475,0 -2.668,-0.45 -3.562,-1.342 -0.9,-0.897 -1.54,-2.125 -1.928,-3.683 V -25.275 H -2.477 V 0 Z"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path50"
+ inkscape:connector-curvature="0" /></g><g
+ id="g52"
+ transform="matrix(1.1310535,0,0,1.1310535,522.82277,256.83868)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c -1.758,0 -3.202,-0.802 -4.334,-2.402 -1.133,-1.606 -1.718,-3.585 -1.765,-5.944 h 11.66 v 1.082 c 0,2.086 -0.489,3.823 -1.469,5.201 C 3.106,-0.684 1.745,0 0,0 m 0.397,-23.76 c -2.725,0 -4.954,1.026 -6.685,3.073 -1.726,2.043 -2.591,4.657 -2.591,7.841 v 4.197 c 0,3.19 0.867,5.85 2.602,7.965 1.739,2.105 3.828,3.158 6.277,3.158 2.648,0 4.699,-0.939 6.164,-2.823 1.468,-1.887 2.201,-4.422 2.201,-7.603 v -2.773 H -6.099 v -2.102 c 0,-2.447 0.586,-4.484 1.752,-6.11 1.168,-1.63 2.755,-2.438 4.744,-2.438 1.382,0 2.585,0.244 3.588,0.724 1.003,0.491 1.863,1.179 2.578,2.082 l 1.149,-1.988 C 6.949,-21.525 5.96,-22.307 4.753,-22.887 3.549,-23.464 2.094,-23.76 0.397,-23.76"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path54"
+ inkscape:connector-curvature="0" /></g><g
+ id="g56"
+ transform="matrix(1.1310535,0,0,1.1310535,558.0805,256.83868)"
+ style="stroke-width:0.88413143"><path
+ d="M 0,0 C -1.763,0 -3.21,-0.802 -4.341,-2.402 -5.467,-4.008 -6.053,-5.987 -6.104,-8.346 H 5.559 v 1.082 c 0,2.086 -0.488,3.823 -1.474,5.201 C 3.104,-0.684 1.744,0 0,0 m 0.394,-23.76 c -2.726,0 -4.951,1.026 -6.679,3.073 -1.733,2.043 -2.6,4.657 -2.6,7.841 v 4.197 c 0,3.19 0.871,5.85 2.602,7.965 1.744,2.105 3.834,3.158 6.283,3.158 2.643,0 4.703,-0.939 6.164,-2.823 1.463,-1.887 2.197,-4.422 2.197,-7.603 v -2.773 H -6.104 v -2.102 c 0,-2.447 0.587,-4.484 1.76,-6.11 1.162,-1.63 2.742,-2.438 4.738,-2.438 1.387,0 2.585,0.244 3.585,0.724 1.007,0.491 1.866,1.179 2.589,2.082 l 1.141,-1.988 c -0.764,-0.968 -1.75,-1.75 -2.959,-2.33 -1.204,-0.577 -2.658,-0.873 -4.356,-0.873"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path58"
+ inkscape:connector-curvature="0" /></g><g
+ id="g60"
+ transform="matrix(1.1310535,0,0,1.1310535,575.91679,259.10521)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 0.23,-4.178 c 0.674,1.483 1.564,2.634 2.682,3.435 1.108,0.805 2.413,1.213 3.914,1.213 2.258,0 3.988,-0.835 5.189,-2.513 1.214,-1.675 1.815,-4.279 1.815,-7.812 v -15.42 h -2.825 v 15.394 c 0,2.888 -0.423,4.905 -1.264,6.075 -0.836,1.17 -2.065,1.753 -3.665,1.753 -1.435,0 -2.638,-0.466 -3.603,-1.414 C 1.504,-4.406 0.782,-5.657 0.301,-7.234 V -25.275 H -2.504 V 0 Z"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path62"
+ inkscape:connector-curvature="0" /></g><g
+ id="g64"
+ transform="matrix(1.1310535,0,0,1.1310535,600.8685,242.30884)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c 0,-2.565 0.486,-4.605 1.472,-6.123 0.974,-1.532 2.457,-2.288 4.436,-2.288 1.356,0 2.498,0.361 3.435,1.101 0.934,0.74 1.672,1.77 2.218,3.077 v 12.52 c -0.525,1.346 -1.246,2.434 -2.157,3.272 -0.91,0.824 -2.062,1.238 -3.448,1.238 -1.975,0 -3.468,-0.86 -4.46,-2.587 C 0.497,8.48 0,6.224 0,3.454 Z m -2.833,3.454 c 0,3.582 0.723,6.459 2.177,8.627 1.442,2.157 3.448,3.239 6.004,3.239 1.419,0 2.664,-0.346 3.728,-1.04 1.066,-0.681 1.947,-1.678 2.654,-2.946 l 0.274,3.516 h 2.381 v -25.298 c 0,-3.239 -0.751,-5.749 -2.26,-7.525 -1.511,-1.769 -3.657,-2.665 -6.428,-2.665 -0.996,0 -2.067,0.156 -3.212,0.459 -1.147,0.303 -2.162,0.701 -3.052,1.2 l 0.776,2.463 c 0.759,-0.492 1.608,-0.873 2.548,-1.141 0.932,-0.277 1.895,-0.41 2.894,-0.41 2.009,0 3.498,0.645 4.46,1.932 0.966,1.304 1.45,3.19 1.45,5.687 v 3.057 c -0.717,-1.138 -1.597,-2.011 -2.64,-2.614 -1.039,-0.606 -2.253,-0.909 -3.622,-0.909 -2.539,0 -4.53,0.994 -5.968,2.982 C -2.11,-5.948 -2.833,-3.301 -2.833,0 Z"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path66"
+ inkscape:connector-curvature="0" /></g><path
+ d="m 627.82321,230.5176 h -3.20089 v 28.58738 h 3.20089 z m 0,36.72644 h -3.20089 v 4.50385 h 3.20089 z"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994"
+ id="path68"
+ inkscape:connector-curvature="0" /><g
+ id="g70"
+ transform="matrix(1.1310535,0,0,1.1310535,638.15379,259.10521)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 0.23,-4.178 c 0.676,1.483 1.562,2.634 2.678,3.435 1.115,0.805 2.422,1.213 3.916,1.213 2.258,0 3.995,-0.835 5.199,-2.513 1.211,-1.675 1.807,-4.279 1.807,-7.812 v -15.42 h -2.825 v 15.394 c 0,2.888 -0.422,4.905 -1.261,6.075 -0.843,1.17 -2.063,1.753 -3.668,1.753 -1.434,0 -2.635,-0.466 -3.599,-1.414 C 1.51,-4.406 0.785,-5.657 0.306,-7.234 V -25.275 H -2.503 V 0 Z"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path72"
+ inkscape:connector-curvature="0" /></g><g
+ id="g74"
+ transform="matrix(1.1310535,0,0,1.1310535,669.70883,256.83868)"
+ style="stroke-width:0.88413143"><path
+ d="M 0,0 C -1.763,0 -3.208,-0.802 -4.334,-2.402 -5.463,-4.008 -6.052,-5.987 -6.102,-8.346 H 5.56 v 1.082 c 0,2.086 -0.486,3.823 -1.47,5.201 C 3.109,-0.684 1.747,0 0,0 m 0.401,-23.76 c -2.733,0 -4.958,1.026 -6.681,3.073 -1.73,2.043 -2.595,4.657 -2.595,7.841 v 4.197 c 0,3.19 0.865,5.85 2.6,7.965 1.739,2.105 3.831,3.158 6.275,3.158 2.646,0 4.706,-0.939 6.172,-2.823 1.462,-1.887 2.195,-4.422 2.195,-7.603 v -2.773 H -6.102 v -2.102 c 0,-2.447 0.59,-4.484 1.757,-6.11 1.166,-1.63 2.748,-2.438 4.746,-2.438 1.382,0 2.579,0.244 3.578,0.724 1.012,0.491 1.869,1.179 2.591,2.082 l 1.147,-1.988 c -0.769,-0.968 -1.755,-1.75 -2.962,-2.33 -1.203,-0.577 -2.658,-0.873 -4.354,-0.873"
+ style="fill:#6d6e71;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path76"
+ inkscape:connector-curvature="0" /></g><g
+ id="g78"
+ transform="matrix(1.1310535,0,0,1.1310535,348.13109,279.2668)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path80"
+ inkscape:connector-curvature="0" /></g><g
+ id="g82"
+ transform="matrix(1.1310535,0,0,1.1310535,126.80608,346.04533)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 h 0.134 c 4.795,6.12 9.232,12.569 13.487,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.368,12.569 -4.928,6.12 -0.134,0 Z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path84"
+ inkscape:connector-curvature="0" /></g><g
+ id="g86"
+ transform="matrix(1.1310535,0,0,1.1310535,311.40329,266.88437)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path88"
+ inkscape:connector-curvature="0" /></g><g
+ id="g90"
+ transform="matrix(1.1310535,0,0,1.1310535,204.11393,318.93771)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c 0,-12.052 -9.765,-21.815 -21.813,-21.815 -12.042,0 -21.81,9.763 -21.81,21.815 0,12.044 9.768,21.802 21.81,21.802 C -9.765,21.802 0,12.044 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path92"
+ inkscape:connector-curvature="0" /></g><g
+ id="g94"
+ transform="matrix(1.1310535,0,0,1.1310535,198.17748,317.47435)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c 0,-7.994 -6.479,-14.473 -14.479,-14.473 -7.996,0 -14.479,6.479 -14.479,14.473 0,7.994 6.483,14.479 14.479,14.479 C -6.479,14.479 0,7.994 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path96"
+ inkscape:connector-curvature="0" /></g><g
+ id="g98"
+ transform="matrix(1.1310535,0,0,1.1310535,237.47503,292.01909)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path100"
+ inkscape:connector-curvature="0" /></g><g
+ id="g102"
+ transform="matrix(1.1310535,0,0,1.1310535,270.84021,318.93771)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path104"
+ inkscape:connector-curvature="0" /></g><g
+ id="g106"
+ transform="matrix(1.1310535,0,0,1.1310535,276.77813,317.47435)"
+ style="stroke-width:0.88413143"><path
+ d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143"
+ id="path108"
+ inkscape:connector-curvature="0" /></g></g></g></g></svg> \ No newline at end of file
diff --git a/main/app_icon.png b/main/app_icon.png
index eafae08d59..1d75cdc710 100644
--- a/main/app_icon.png
+++ b/main/app_icon.png
Binary files differ
diff --git a/main/main.cpp b/main/main.cpp
index 0fa795b214..e13fb8d3db 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -129,7 +129,7 @@ void Main::print_help(const char *p_binary) {
OS::get_singleton()->print(VERSION_FULL_NAME " (c) 2008-2017 Juan Linietsky, Ariel Manzur.\n");
OS::get_singleton()->print("Usage: %s [options] [scene]\n", p_binary);
OS::get_singleton()->print("Options:\n");
- OS::get_singleton()->print("\t-path [dir] : Path to a game, containing godot.cfg\n");
+ OS::get_singleton()->print("\t-path [dir] : Path to a game, containing project.godot\n");
#ifdef TOOLS_ENABLED
OS::get_singleton()->print("\t-e,-editor : Bring up the editor instead of running the scene.\n");
#endif
@@ -447,6 +447,23 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
} else {
goto error;
}
+ } else if (I->get().ends_with("project.godot")) {
+ String path;
+ String file = I->get();
+ int sep = MAX(file.find_last("/"), file.find_last("\\"));
+ if (sep == -1)
+ path = ".";
+ else {
+ path = file.substr(0, sep);
+ }
+ if (OS::get_singleton()->set_cwd(path) == OK) {
+ // path already specified, don't override
+ } else {
+ game_path = path;
+ }
+#ifdef TOOLS_ENABLED
+ editor = true;
+#endif
} else if (I->get() == "-bp") { // /breakpoints
if (I->next()) {
@@ -571,8 +588,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
ScriptDebuggerRemote *sdr = memnew(ScriptDebuggerRemote);
uint16_t debug_port = GLOBAL_GET("network/debug/remote_port");
if (debug_host.find(":") != -1) {
- debug_port = debug_host.get_slicec(':', 1).to_int();
- debug_host = debug_host.get_slicec(':', 0);
+ int sep_pos = debug_host.find_last(":");
+ debug_port = debug_host.substr(sep_pos + 1, debug_host.length()).to_int();
+ debug_host = debug_host.substr(0, sep_pos);
}
Error derr = sdr->connect_to_host(debug_host, debug_port);
@@ -673,14 +691,14 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
else
input_map->load_from_globals(); //keys for game
- if (video_driver == "") // specified in godot.cfg
+ if (video_driver == "") // specified in project.godot
video_driver = GLOBAL_DEF("display/driver/name", Variant((const char *)OS::get_singleton()->get_video_driver_name(0)));
if (!force_res && use_custom_res && globals->has("display/window/width"))
video_mode.width = globals->get("display/window/width");
if (!force_res && use_custom_res && globals->has("display/window/height"))
video_mode.height = globals->get("display/window/height");
- if (!editor && (!bool(globals->get("display/window/allow_hidpi")) || force_lowdpi)) {
+ if (!editor && ((globals->has("display/window/allow_hidpi") && !globals->get("display/window/allow_hidpi")) || force_lowdpi)) {
OS::get_singleton()->_allow_hidpi = false;
}
if (use_custom_res && globals->has("display/window/fullscreen"))
@@ -725,7 +743,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
/* Determine Video Driver */
- if (audio_driver == "") { // specified in godot.cfg
+ if (audio_driver == "") { // specified in project.godot
audio_driver = GLOBAL_DEF("audio/driver", OS::get_singleton()->get_audio_driver_name(0));
}
@@ -899,18 +917,19 @@ Error Main::setup2() {
bool boot_logo_scale = GLOBAL_DEF("application/boot_splash_fullsize", true);
GlobalConfig::get_singleton()->set_custom_property_info("application/boot_splash", PropertyInfo(Variant::STRING, "application/boot_splash", PROPERTY_HINT_FILE, "*.png"));
- Image boot_logo;
+ Ref<Image> boot_logo;
boot_logo_path = boot_logo_path.strip_edges();
if (boot_logo_path != String() /*&& FileAccess::exists(boot_logo_path)*/) {
print_line("Boot splash path: " + boot_logo_path);
- Error err = boot_logo.load(boot_logo_path);
+ boot_logo.instance();
+ Error err = boot_logo->load(boot_logo_path);
if (err)
ERR_PRINTS("Non-existing or invalid boot splash at: " + boot_logo_path + ". Loading default splash.");
}
- if (!boot_logo.empty()) {
+ if (boot_logo.is_valid()) {
OS::get_singleton()->_msec_splash = OS::get_singleton()->get_ticks_msec();
Color boot_bg = GLOBAL_DEF("application/boot_bg_color", clear);
VisualServer::get_singleton()->set_boot_image(boot_logo, boot_bg, boot_logo_scale);
@@ -923,7 +942,7 @@ Error Main::setup2() {
#ifndef NO_DEFAULT_BOOT_LOGO
MAIN_PRINT("Main: Create bootsplash");
- Image splash(boot_splash_png);
+ Ref<Image> splash = memnew(Image(boot_splash_png));
MAIN_PRINT("Main: ClearColor");
VisualServer::get_singleton()->set_default_clear_color(boot_splash_bg_color);
@@ -932,7 +951,7 @@ Error Main::setup2() {
#endif
}
- Image icon(app_icon_png);
+ Ref<Image> icon = memnew(Image(app_icon_png));
OS::get_singleton()->set_icon(icon);
}
@@ -1235,7 +1254,7 @@ bool Main::start() {
String stretch_mode = GLOBAL_DEF("display/stretch/mode", "disabled");
String stretch_aspect = GLOBAL_DEF("display/stretch/aspect", "ignore");
- Size2i stretch_size = Size2(GLOBAL_DEF("display/screen/width", 0), GLOBAL_DEF("display/screen/height", 0));
+ Size2i stretch_size = Size2(GLOBAL_DEF("display/window/width", 0), GLOBAL_DEF("display/window/height", 0));
SceneTree::StretchMode sml_sm = SceneTree::STRETCH_MODE_DISABLED;
if (stretch_mode == "2d")
@@ -1446,8 +1465,8 @@ bool Main::start() {
String iconpath = GLOBAL_DEF("application/icon", "Variant()");
if (iconpath != "") {
- Image icon;
- if (icon.load(iconpath) == OK)
+ Ref<Image> icon;
+ if (icon->load(iconpath) == OK)
OS::get_singleton()->set_icon(icon);
}
}
diff --git a/main/splash.png b/main/splash.png
index 01ca2152ce..894a7d7aba 100644
--- a/main/splash.png
+++ b/main/splash.png
Binary files differ
diff --git a/main/tests/test_containers.cpp b/main/tests/test_containers.cpp
index 890599385a..956be5d169 100644
--- a/main/tests/test_containers.cpp
+++ b/main/tests/test_containers.cpp
@@ -55,18 +55,6 @@ MainLoop *test() {
{
- Image img;
- img.create(default_mouse_cursor_xpm);
-
- {
- for (int i = 0; i < 8; i++) {
-
- Image mipmap;
- //img.make_mipmap(mipmap);
- img = mipmap;
- if (img.get_width() <= 4) break;
- };
- };
};
#if 0
diff --git a/main/tests/test_image.cpp b/main/tests/test_image.cpp
index aff3bae417..c2c742e75d 100644
--- a/main/tests/test_image.cpp
+++ b/main/tests/test_image.cpp
@@ -63,11 +63,6 @@ public:
MainLoop *test() {
- Image img;
- ImageLoader::load_image("as1.png", &img);
-
- img.resize(512, 512);
-
return memnew(TestMainLoop);
}
}
diff --git a/main/tests/test_math.cpp b/main/tests/test_math.cpp
index cb75dcec13..95a1672e67 100644
--- a/main/tests/test_math.cpp
+++ b/main/tests/test_math.cpp
@@ -602,7 +602,7 @@ MainLoop *test() {
print_line(q3);
print_line("before v: " + v + " a: " + rtos(a));
- q.get_axis_and_angle(v, a);
+ q.get_axis_angle(v, a);
print_line("after v: " + v + " a: " + rtos(a));
}
diff --git a/main/tests/test_physics_2d.cpp b/main/tests/test_physics_2d.cpp
index 1476e45fcc..d8a00a589a 100644
--- a/main/tests/test_physics_2d.cpp
+++ b/main/tests/test_physics_2d.cpp
@@ -82,7 +82,7 @@ class TestPhysics2DMainLoop : public MainLoop {
}
}
- Image image(32, 2, 0, Image::FORMAT_LA8, pixels);
+ Ref<Image> image = memnew(Image(32, 2, 0, Image::FORMAT_LA8, pixels));
body_shape_data[Physics2DServer::SHAPE_SEGMENT].image = vs->texture_create_from_image(image);
@@ -109,7 +109,7 @@ class TestPhysics2DMainLoop : public MainLoop {
}
}
- Image image(32, 32, 0, Image::FORMAT_LA8, pixels);
+ Ref<Image> image = memnew(Image(32, 32, 0, Image::FORMAT_LA8, pixels));
body_shape_data[Physics2DServer::SHAPE_CIRCLE].image = vs->texture_create_from_image(image);
@@ -136,7 +136,7 @@ class TestPhysics2DMainLoop : public MainLoop {
}
}
- Image image(32, 32, 0, Image::FORMAT_LA8, pixels);
+ Ref<Image> image = memnew(Image(32, 32, 0, Image::FORMAT_LA8, pixels));
body_shape_data[Physics2DServer::SHAPE_RECTANGLE].image = vs->texture_create_from_image(image);
@@ -164,7 +164,7 @@ class TestPhysics2DMainLoop : public MainLoop {
}
}
- Image image(32, 64, 0, Image::FORMAT_LA8, pixels);
+ Ref<Image> image = memnew(Image(32, 64, 0, Image::FORMAT_LA8, pixels));
body_shape_data[Physics2DServer::SHAPE_CAPSULE].image = vs->texture_create_from_image(image);
@@ -178,7 +178,7 @@ class TestPhysics2DMainLoop : public MainLoop {
{
- Image image(convex_png);
+ Ref<Image> image = memnew(Image(convex_png));
body_shape_data[Physics2DServer::SHAPE_CONVEX_POLYGON].image = vs->texture_create_from_image(image);
diff --git a/methods.py b/methods.py
index d8f0bf6659..cad87ad775 100644
--- a/methods.py
+++ b/methods.py
@@ -1165,7 +1165,7 @@ def update_version():
print("Using custom revision: " + rev)
import version
- f = open("core/version.h", "wb")
+ f = open("core/version_generated.h", "wb")
f.write("#define VERSION_SHORT_NAME " + str(version.short_name) + "\n")
f.write("#define VERSION_NAME " + str(version.name) + "\n")
f.write("#define VERSION_MAJOR " + str(version.major) + "\n")
diff --git a/misc/dist/project_icon.svg b/misc/dist/project_icon.svg
new file mode 100644
index 0000000000..650c71fd12
--- /dev/null
+++ b/misc/dist/project_icon.svg
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1024"
+ height="1024"
+ id="svg3030"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="icon_default_project_icon.svg"
+ inkscape:export-filename="/home/akien/Projects/godot/godot.git/icon3.png"
+ inkscape:export-xdpi="6"
+ inkscape:export-ydpi="6">
+ <defs
+ id="defs3032" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.5"
+ inkscape:cx="601.35476"
+ inkscape:cy="346.09731"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata3035">
+ <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>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-98.519719)">
+ <rect
+ style="fill:#1e1a21;fill-opacity:1;stroke:#2e2832;stroke-width:16;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect33"
+ width="1008"
+ height="1008"
+ x="8"
+ y="106.51972"
+ rx="176.28572"
+ ry="176.28572" />
+ <g
+ id="g82-3"
+ transform="matrix(4.2343801,0,0,-4.2343764,97.676491,522.86238)"
+ style="stroke-width:0.31488276">
+ <path
+ d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 h 0.134 c 4.795,6.12 9.232,12.569 13.487,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.368,12.569 -4.928,6.12 -0.134,0 Z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.31488276"
+ id="path84-6"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g86-7"
+ transform="matrix(4.2343801,0,0,-4.2343764,788.7623,819.22103)"
+ style="stroke-width:0.31488276">
+ <path
+ d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.31488276"
+ id="path88-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g90-3"
+ transform="matrix(4.2343801,0,0,-4.2343764,387.09785,624.34645)"
+ style="stroke-width:0.31488276">
+ <path
+ d="m 0,0 c 0,-12.052 -9.765,-21.815 -21.813,-21.815 -12.042,0 -21.81,9.763 -21.81,21.815 0,12.044 9.768,21.802 21.81,21.802 C -9.765,21.802 0,12.044 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.31488276"
+ id="path92-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g94-6"
+ transform="matrix(4.2343801,0,0,-4.2343764,364.87318,629.82505)"
+ style="stroke-width:0.31488276">
+ <path
+ d="m 0,0 c 0,-7.994 -6.479,-14.473 -14.479,-14.473 -7.996,0 -14.479,6.479 -14.479,14.473 0,7.994 6.483,14.479 14.479,14.479 C -6.479,14.479 0,7.994 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.31488276"
+ id="path96-2"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g98-9"
+ transform="matrix(4.2343801,0,0,-4.2343764,511.99324,725.12292)"
+ style="stroke-width:0.31488276">
+ <path
+ d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.31488276"
+ id="path100-1"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g102-2"
+ transform="matrix(4.2343801,0,0,-4.2343764,636.90407,624.34645)"
+ style="stroke-width:0.31488276">
+ <path
+ d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.31488276"
+ id="path104-7"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g106-0"
+ transform="matrix(4.2343801,0,0,-4.2343764,659.13434,629.82505)"
+ style="stroke-width:0.31488276">
+ <path
+ d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.31488276"
+ id="path108-9"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/misc/scripts/sort-demos.sh b/misc/scripts/sort-demos.sh
index 2121d78c15..5e01b86b46 100644
--- a/misc/scripts/sort-demos.sh
+++ b/misc/scripts/sort-demos.sh
@@ -1,7 +1,7 @@
#!/bin/bash
# When scanning for demos, the project manager sorts them based on their
# timestamp, i.e. last modification date. This can make for a pretty
-# messy output, so this script 'touches' each godot.cfg file in reverse
+# messy output, so this script 'touches' each project.godot file in reverse
# alphabetical order to ensure a nice listing.
#
# It's good practice to run it once before packaging demos on the build
@@ -17,7 +17,7 @@ if [ -e demos.list ]; then
fi
for dir in 2d 3d gui misc viewport; do
- find "demos/$dir" -name "godot.cfg" |sort >> demos.list
+ find "demos/$dir" -name "project.godot" |sort >> demos.list
done
cat demos.list |sort -r > demos_r.list
diff --git a/misc/scripts/svgs_2_pngs.py b/misc/scripts/svgs_2_pngs.py
index b24324dcd7..0459f63bfa 100644
--- a/misc/scripts/svgs_2_pngs.py
+++ b/misc/scripts/svgs_2_pngs.py
@@ -16,7 +16,7 @@ last_svg_data = None
SCRIPT_FOLDER = dirname(realpath(__file__)) + '/'
theme_dir_base = SCRIPT_FOLDER + '../../scene/resources/default_theme/'
theme_dir_source = theme_dir_base + 'source/'
-icons_dir_base = SCRIPT_FOLDER + '../editor/icons/'
+icons_dir_base = SCRIPT_FOLDER + '../../editor/icons/'
icons_dir_2x = icons_dir_base + '2x/'
icons_dir_source = icons_dir_base + 'source/'
@@ -54,14 +54,14 @@ def export_icons():
out_icon_names = [name_only] # export to a png with the same file name
theme_out_icon_names = []
# special cases
- if special_icons.has_key(name_only):
+ if special_icons.get(name_only):
special_icon = special_icons[name_only]
if type(special_icon) is dict:
if special_icon.get('avoid_self'):
out_icon_names = []
- if special_icon.has_key('output_names'):
+ if special_icon.get('output_names'):
out_icon_names += special_icon['output_names']
- if special_icon.has_key('theme_output_names'):
+ if special_icon.get('theme_output_names'):
theme_out_icon_names += special_icon['theme_output_names']
source_path = '%s%s.svg' % (svgs_path, name_only)
@@ -83,10 +83,10 @@ def export_theme():
out_icon_names = [name_only] # export to a png with the same file name
# special cases
- if theme_icons.has_key(name_only):
+ if theme_icons.get(name_only):
special_icon = theme_icons[name_only]
if type(special_icon) is dict:
- if special_icon.has_key('output_names'):
+ if special_icon.get('output_names'):
out_icon_names += special_icon['output_names']
source_path = '%s%s.svg' % (svgs_path, name_only)
diff --git a/modules/dds/texture_loader_dds.cpp b/modules/dds/texture_loader_dds.cpp
index f80e6e501e..4448c80387 100644
--- a/modules/dds/texture_loader_dds.cpp
+++ b/modules/dds/texture_loader_dds.cpp
@@ -144,12 +144,14 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path,
f->get_32();
f->get_32();
- /*print_line("DDS width: "+itos(width));
+ /*
+ print_line("DDS width: "+itos(width));
print_line("DDS height: "+itos(height));
- print_line("DDS mipmaps: "+itos(mipmaps));*/
+ print_line("DDS mipmaps: "+itos(mipmaps));
- //printf("fourcc: %x fflags: %x, rgbbits: %x, fsize: %x\n",format_fourcc,format_flags,format_rgb_bits,format_size);
- //printf("rmask: %x gmask: %x, bmask: %x, amask: %x\n",format_red_mask,format_green_mask,format_blue_mask,format_alpha_mask);
+ printf("fourcc: %x fflags: %x, rgbbits: %x, fsize: %x\n",format_fourcc,format_flags,format_rgb_bits,format_size);
+ printf("rmask: %x gmask: %x, bmask: %x, amask: %x\n",format_red_mask,format_green_mask,format_blue_mask,format_alpha_mask);
+ */
//must avoid this later
while (f->get_pos() < 128)
@@ -439,7 +441,7 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path,
wb = PoolVector<uint8_t>::Write();
}
- Image img(width, height, mipmaps - 1, info.format, src_data);
+ Ref<Image> img = memnew(Image(width, height, mipmaps - 1, info.format, src_data));
Ref<ImageTexture> texture = memnew(ImageTexture);
texture->create_from_image(img);
diff --git a/modules/etc1/image_etc.cpp b/modules/etc1/image_etc.cpp
index 60544594f6..121f50684d 100644
--- a/modules/etc1/image_etc.cpp
+++ b/modules/etc1/image_etc.cpp
@@ -88,25 +88,26 @@ static void _decompress_etc(Image *p_img) {
r = PoolVector<uint8_t>::Read();
//print_line("Re Creating ETC into regular image: w "+itos(p_img->get_width())+" h "+itos(p_img->get_height())+" mm "+itos(p_img->get_mipmaps()));
- *p_img = Image(p_img->get_width(), p_img->get_height(), p_img->has_mipmaps(), Image::FORMAT_RGB8, dst);
- if (p_img->has_mipmaps())
+ bool needs_mipmaps = p_img->has_mipmaps();
+ p_img->create(p_img->get_width(), p_img->get_height(), p_img->has_mipmaps(), Image::FORMAT_RGB8, dst);
+ if (needs_mipmaps)
p_img->generate_mipmaps();
}
static void _compress_etc(Image *p_img) {
- Image img = *p_img;
+ Ref<Image> img = p_img->duplicate();
- int imgw = img.get_width(), imgh = img.get_height();
+ int imgw = img->get_width(), imgh = img->get_height();
ERR_FAIL_COND(nearest_power_of_2(imgw) != imgw || nearest_power_of_2(imgh) != imgh);
- if (img.get_format() != Image::FORMAT_RGB8)
- img.convert(Image::FORMAT_RGB8);
+ if (img->get_format() != Image::FORMAT_RGB8)
+ img->convert(Image::FORMAT_RGB8);
PoolVector<uint8_t> res_data;
PoolVector<uint8_t> dst_data;
- PoolVector<uint8_t>::Read r = img.get_data().read();
+ PoolVector<uint8_t>::Read r = img->get_data().read();
int target_size = Image::get_image_data_size(p_img->get_width(), p_img->get_height(), Image::FORMAT_ETC, p_img->has_mipmaps() ? -1 : 0);
int mmc = p_img->has_mipmaps() ? Image::get_image_required_mipmaps(p_img->get_width(), p_img->get_height(), Image::FORMAT_ETC) : 0;
@@ -122,7 +123,7 @@ static void _compress_etc(Image *p_img) {
int bw = MAX(imgw / 4, 1);
int bh = MAX(imgh / 4, 1);
- const uint8_t *src = &r[img.get_mipmap_offset(i)];
+ const uint8_t *src = &r[img->get_mipmap_offset(i)];
int mmsize = MAX(bw, 1) * MAX(bh, 1) * 8;
uint8_t *dst = &w[ofs];
@@ -171,7 +172,7 @@ static void _compress_etc(Image *p_img) {
mc++;
}
- *p_img = Image(p_img->get_width(), p_img->get_height(), (mc - 1) ? true : false, Image::FORMAT_ETC, dst_data);
+ p_img->create(p_img->get_width(), p_img->get_height(), (mc - 1) ? true : false, Image::FORMAT_ETC, dst_data);
}
void _register_etc1_compress_func() {
diff --git a/modules/etc1/texture_loader_pkm.cpp b/modules/etc1/texture_loader_pkm.cpp
index 9817de3a0f..c04528d2a0 100644
--- a/modules/etc1/texture_loader_pkm.cpp
+++ b/modules/etc1/texture_loader_pkm.cpp
@@ -85,7 +85,7 @@ RES ResourceFormatPKM::load(const String &p_path, const String &p_original_path,
int width = h.origWidth;
int height = h.origHeight;
- Image img(width, height, mipmaps, Image::FORMAT_ETC, src_data);
+ Ref<Image> img = memnew(Image(width, height, mipmaps, Image::FORMAT_ETC, src_data));
Ref<ImageTexture> texture = memnew(ImageTexture);
texture->create_from_image(img);
diff --git a/modules/gdnative/config.py b/modules/gdnative/config.py
index 9f57b9bb74..4f89ca0d4c 100644
--- a/modules/gdnative/config.py
+++ b/modules/gdnative/config.py
@@ -1,7 +1,7 @@
def can_build(platform):
- return True
+ return False
def configure(env):
diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp
index b543a486d3..9c8625c1e0 100644
--- a/modules/gdnative/gdnative.cpp
+++ b/modules/gdnative/gdnative.cpp
@@ -99,15 +99,15 @@ Error NativeLibrary::terminate(NativeLibrary *&p_native_lib) {
Error error = OK;
void *library_terminate;
error = OS::get_singleton()->get_dynamic_library_symbol_handle(p_native_lib->handle, GDNativeScriptLanguage::get_terminate_symbol_name(), library_terminate);
- if (error)
- return OK; // no terminate? okay, not that important lol
+ if (!error) {
- void (*library_terminate_pointer)(godot_native_terminate_options *) = (void (*)(godot_native_terminate_options *))library_terminate;
+ void (*library_terminate_pointer)(godot_native_terminate_options *) = (void (*)(godot_native_terminate_options *))library_terminate;
- godot_native_terminate_options options;
- options.in_editor = SceneTree::get_singleton()->is_editor_hint();
+ godot_native_terminate_options options;
+ options.in_editor = SceneTree::get_singleton()->is_editor_hint();
- library_terminate_pointer(&options);
+ library_terminate_pointer(&options);
+ }
GDNativeScriptLanguage::get_singleton()->initialized_libraries.erase(p_native_lib->path);
@@ -391,6 +391,54 @@ void GDNativeScript::get_script_signal_list(List<MethodInfo> *r_signals) const {
}
}
+Variant GDNativeScript::_new(const Variant **p_args, int p_argcount, Variant::CallError &r_error) {
+
+ /* STEP 1, CREATE */
+
+ if (!library.is_valid() || ((String)script_name).empty() || !script_data) {
+ r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ return Variant();
+ }
+
+ r_error.error = Variant::CallError::CALL_OK;
+ REF ref;
+ Object *owner = NULL;
+
+ GDNativeScriptData *_baseptr = script_data;
+ while (_baseptr->base_data) {
+ _baseptr = _baseptr->base_data;
+ }
+
+ if (!(_baseptr->base_native_type == "")) {
+ owner = ClassDB::instance(_baseptr->base_native_type);
+ } else {
+ owner = memnew(Reference); //by default, no base means use reference
+ }
+
+ Reference *r = owner->cast_to<Reference>();
+ if (r) {
+ ref = REF(r);
+ }
+
+ // GDScript does it like this: _create_instance(p_args, p_argcount, owner, r != NULL, r_error);
+ // @Todo support varargs for constructors.
+ GDNativeInstance *instance = (GDNativeInstance *)instance_create(owner);
+
+ owner->set_script_instance(instance);
+ if (!instance) {
+ if (ref.is_null()) {
+ memdelete(owner); //no owner, sorry
+ }
+ return Variant();
+ }
+
+ if (ref.is_valid()) {
+ return ref;
+ } else {
+ return owner;
+ }
+}
+
Ref<GDNativeLibrary> GDNativeScript::get_library() const {
return library;
}
@@ -438,6 +486,8 @@ void GDNativeScript::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_script_name"), &GDNativeScript::get_script_name);
ClassDB::bind_method(D_METHOD("set_script_name", "script_name"), &GDNativeScript::set_script_name);
+ ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "new", &GDNativeScript::_new, MethodInfo(Variant::OBJECT, "new"));
+
ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "library", PROPERTY_HINT_RESOURCE_TYPE, "GDNativeLibrary"), "set_library", "get_library");
ADD_PROPERTYNZ(PropertyInfo(Variant::STRING, "script_name"), "set_script_name", "get_script_name");
}
@@ -465,7 +515,6 @@ static const char *_dl_platforms_info[] = {
"unix|x11|so|X11",
"unix|server|so|Server",
"unix|android|so|Android",
- "unix|blackberry|so|Blackberry 10",
"unix|haiku|so|Haiku", // Right?
"|mac|dynlib|Mac",
"mac|ios|dynlib|iOS",
@@ -565,7 +614,6 @@ Error GDNativeLibrary::_terminate() {
}
Error ret = NativeLibrary::terminate(native_library);
-
native_library->scripts.clear();
return ret;
@@ -1168,6 +1216,7 @@ void GDNativeReloadNode::_notification(int p_what) {
Set<GDNativeScript *> scripts;
for (Set<GDNativeScript *>::Element *S = GDNativeScriptLanguage::get_singleton()->script_list.front(); S; S = S->next()) {
+
if (lib->native_library->scripts.has(S->get()->get_script_name())) {
GDNativeScript *script = S->get();
script->script_data = lib->get_script_data(script->get_script_name());
diff --git a/modules/gdnative/gdnative.h b/modules/gdnative/gdnative.h
index 89270b4e26..27e0c3788b 100644
--- a/modules/gdnative/gdnative.h
+++ b/modules/gdnative/gdnative.h
@@ -184,6 +184,8 @@ public:
virtual void get_script_method_list(List<MethodInfo> *p_list) const;
virtual void get_script_property_list(List<PropertyInfo> *p_list) const;
+ Variant _new(const Variant **p_args, int p_argcount, Variant::CallError &r_error);
+
Ref<GDNativeLibrary> get_library() const;
void set_library(Ref<GDNativeLibrary> p_library);
diff --git a/modules/gdnative/godot.cpp b/modules/gdnative/godot.cpp
index 7477a28db6..bc53eb93f4 100644
--- a/modules/gdnative/godot.cpp
+++ b/modules/gdnative/godot.cpp
@@ -30,6 +30,7 @@
#include "godot.h"
#include "class_db.h"
+#include "error_macros.h"
#include "gdnative.h"
#include "global_config.h"
#include "global_constants.h"
@@ -115,6 +116,28 @@ void GDAPI godot_method_bind_ptrcall(godot_method_bind *p_method_bind, godot_obj
mb->ptrcall(o, p_args, p_ret);
}
+godot_variant GDAPI godot_method_bind_call(godot_method_bind *p_method_bind, godot_object *p_instance, const godot_variant **p_args, const int p_arg_count, godot_variant_call_error *p_call_error) {
+ MethodBind *mb = (MethodBind *)p_method_bind;
+ Object *o = (Object *)p_instance;
+ const Variant **args = (const Variant **)p_args;
+
+ godot_variant ret;
+ godot_variant_new_nil(&ret);
+
+ Variant *ret_val = (Variant *)&ret;
+
+ Variant::CallError r_error;
+ *ret_val = mb->call(o, args, p_arg_count, r_error);
+
+ if (p_call_error) {
+ p_call_error->error = (godot_variant_call_error_error)r_error.error;
+ p_call_error->argument = r_error.argument;
+ p_call_error->expected = (godot_variant_type)r_error.expected;
+ }
+
+ return ret;
+}
+
// @Todo
/*
void GDAPI godot_method_bind_varcall(godot_method_bind *p_method_bind)
@@ -215,6 +238,18 @@ void GDAPI godot_free(void *p_ptr) {
memfree(p_ptr);
}
+void GDAPI godot_print_error(const char *p_description, const char *p_function, const char *p_file, int p_line) {
+ _err_print_error(p_function, p_file, p_line, p_description, ERR_HANDLER_ERROR);
+}
+
+void GDAPI godot_print_warning(const char *p_description, const char *p_function, const char *p_file, int p_line) {
+ _err_print_error(p_function, p_file, p_line, p_description, ERR_HANDLER_WARNING);
+}
+
+void GDAPI godot_print(const godot_string *p_message) {
+ print_line(*(String *)p_message);
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/modules/gdnative/godot.h b/modules/gdnative/godot.h
index 0d7aece23b..7214ce62df 100644
--- a/modules/gdnative/godot.h
+++ b/modules/gdnative/godot.h
@@ -38,12 +38,26 @@ extern "C" {
#define GDAPI_EXPORT
#endif
-#if !defined(_WIN32) && !defined(_MSC_VER)
+#ifdef _WIN32
+#if defined(GDAPI_EXPORT)
+#define GDCALLINGCONV
+#define GDAPI __declspec(dllexport) GDCALLINGCONV
+#else
+#define GDCALLINGCONV
+#define GDAPI __declspec(dllimport) GDCALLINGCONV
+#endif
+#elif defined(__APPLE__)
+#include "TargetConditionals.h"
+#if TARGET_OS_IPHONE
+#define GDCALLINGCONV
#define GDAPI
-#elif defined(GDAPI_EXPORT)
-#define GDAPI __declspec(dllexport)
+#elif TARGET_OS_MAC
+#define GDCALLINGCONV __attribute__((sysv_abi))
+#define GDAPI GDCALLINGCONV
+#endif
#else
-#define GDAPI __declspec(dllimport)
+#define GDCALLINGCONV __attribute__((sysv_abi))
+#define GDAPI GDCALLINGCONV
#endif
#include <stdbool.h>
@@ -214,7 +228,7 @@ typedef struct godot_method_bind {
godot_method_bind GDAPI *godot_method_bind_get_method(const char *p_classname, const char *p_methodname);
void GDAPI godot_method_bind_ptrcall(godot_method_bind *p_method_bind, godot_object *p_instance, const void **p_args, void *p_ret);
-
+godot_variant GDAPI godot_method_bind_call(godot_method_bind *p_method_bind, godot_object *p_instance, const godot_variant **p_args, const int p_arg_count, godot_variant_call_error *p_call_error);
////// Script API
typedef struct godot_native_init_options {
@@ -314,16 +328,16 @@ typedef struct godot_property_attributes {
typedef struct godot_instance_create_func {
// instance pointer, method_data - return user data
- void *(*create_func)(godot_object *, void *);
+ GDCALLINGCONV void *(*create_func)(godot_object *, void *);
void *method_data;
- void (*free_func)(void *);
+ GDCALLINGCONV void (*free_func)(void *);
} godot_instance_create_func;
typedef struct godot_instance_destroy_func {
// instance pointer, method data, user data
- void (*destroy_func)(godot_object *, void *, void *);
+ GDCALLINGCONV void (*destroy_func)(godot_object *, void *, void *);
void *method_data;
- void (*free_func)(void *);
+ GDCALLINGCONV void (*free_func)(void *);
} godot_instance_destroy_func;
void GDAPI godot_script_register_class(const char *p_name, const char *p_base, godot_instance_create_func p_create_func, godot_instance_destroy_func p_destroy_func);
@@ -332,25 +346,25 @@ void GDAPI godot_script_register_tool_class(const char *p_name, const char *p_ba
typedef struct godot_instance_method {
// instance pointer, method data, user data, num args, args - return result as varaint
- godot_variant (*method)(godot_object *, void *, void *, int, godot_variant **);
+ GDCALLINGCONV godot_variant (*method)(godot_object *, void *, void *, int, godot_variant **);
void *method_data;
- void (*free_func)(void *);
+ GDCALLINGCONV void (*free_func)(void *);
} godot_instance_method;
void GDAPI godot_script_register_method(const char *p_name, const char *p_function_name, godot_method_attributes p_attr, godot_instance_method p_method);
typedef struct godot_property_set_func {
// instance pointer, method data, user data, value
- void (*set_func)(godot_object *, void *, void *, godot_variant);
+ GDCALLINGCONV void (*set_func)(godot_object *, void *, void *, godot_variant);
void *method_data;
- void (*free_func)(void *);
+ GDCALLINGCONV void (*free_func)(void *);
} godot_property_set_func;
typedef struct godot_property_get_func {
// instance pointer, method data, user data, value
- godot_variant (*get_func)(godot_object *, void *, void *);
+ GDCALLINGCONV godot_variant (*get_func)(godot_object *, void *, void *);
void *method_data;
- void (*free_func)(void *);
+ GDCALLINGCONV void (*free_func)(void *);
} godot_property_get_func;
void GDAPI godot_script_register_property(const char *p_name, const char *p_path, godot_property_attributes *p_attr, godot_property_set_func p_set_func, godot_property_get_func p_get_func);
@@ -376,6 +390,7 @@ void GDAPI godot_script_register_signal(const char *p_name, const godot_signal *
void GDAPI *godot_native_get_userdata(godot_object *p_instance);
+// Calling convention?
typedef godot_object *(*godot_class_constructor)();
godot_class_constructor GDAPI godot_get_class_constructor(const char *p_classname);
@@ -389,6 +404,11 @@ void GDAPI *godot_alloc(int p_bytes);
void GDAPI *godot_realloc(void *p_ptr, int p_bytes);
void GDAPI godot_free(void *p_ptr);
+//print using Godot's error handler list
+void GDAPI godot_print_error(const char *p_description, const char *p_function, const char *p_file, int p_line);
+void GDAPI godot_print_warning(const char *p_description, const char *p_function, const char *p_file, int p_line);
+void GDAPI godot_print(const godot_string *p_message);
+
#ifdef __cplusplus
}
#endif
diff --git a/modules/gdnative/godot/godot_basis.cpp b/modules/gdnative/godot/godot_basis.cpp
index 4322acc401..474cd3d448 100644
--- a/modules/gdnative/godot/godot_basis.cpp
+++ b/modules/gdnative/godot/godot_basis.cpp
@@ -38,48 +38,176 @@ extern "C" {
void _basis_api_anchor() {
}
-void GDAPI godot_basis_new(godot_basis *p_basis) {
- Basis *basis = (Basis *)p_basis;
- *basis = Basis();
+void GDAPI godot_basis_new(godot_basis *p_v) {
+ Basis *v = (Basis *)p_v;
+ *v = Basis();
}
-void GDAPI godot_basis_new_with_euler_quat(godot_basis *p_basis, const godot_quat *p_euler) {
- Basis *basis = (Basis *)p_basis;
+void GDAPI godot_basis_new_with_euler_quat(godot_basis *p_v, const godot_quat *p_euler) {
+ Basis *v = (Basis *)p_v;
Quat *euler = (Quat *)p_euler;
- *basis = Basis(*euler);
+ *v = Basis(*euler);
}
-void GDAPI godot_basis_new_with_euler(godot_basis *p_basis, const godot_vector3 *p_euler) {
- Basis *basis = (Basis *)p_basis;
- Vector3 *euler = (Vector3 *)p_euler;
- *basis = Basis(*euler);
+void GDAPI godot_basis_new_with_euler(godot_basis *p_v, const godot_vector3 p_euler) {
+ Basis *v = (Basis *)p_v;
+ Vector3 *euler = (Vector3 *)&p_euler;
+ *v = Basis(*euler);
}
-godot_quat GDAPI godot_basis_as_quat(const godot_basis *p_basis) {
- const Basis *basis = (const Basis *)p_basis;
+void GDAPI godot_basis_new_with_axis_and_angle(godot_basis *p_v, const godot_vector3 p_axis, const godot_real p_phi) {
+ Basis *v = (Basis *)p_v;
+ const Vector3 *axis = (Vector3 *)&p_axis;
+ *v = Basis(*axis, p_phi);
+}
+
+void GDAPI godot_basis_new_with_rows(godot_basis *p_v, const godot_vector3 p_row0, const godot_vector3 p_row1, const godot_vector3 p_row2) {
+ Basis *v = (Basis *)p_v;
+ const Vector3 *row0 = (Vector3 *)&p_row0;
+ const Vector3 *row1 = (Vector3 *)&p_row1;
+ const Vector3 *row2 = (Vector3 *)&p_row2;
+ *v = Basis(*row0, *row1, *row2);
+}
+
+godot_quat GDAPI godot_basis_as_quat(const godot_basis *p_v) {
+ const Basis *v = (const Basis *)p_v;
godot_quat quat;
Quat *p_quat = (Quat *)&quat;
- *p_quat = basis->operator Quat();
+ *p_quat = v->operator Quat();
return quat;
}
-godot_vector3 GDAPI godot_basis_get_euler(const godot_basis *p_basis) {
- const Basis *basis = (const Basis *)p_basis;
- godot_vector3 euler;
- Vector3 *p_euler = (Vector3 *)&euler;
- *p_euler = basis->get_euler();
- return euler;
-}
-
/*
* p_elements is a pointer to an array of 3 (!!) vector3
*/
-void GDAPI godot_basis_get_elements(godot_basis *p_basis, godot_vector3 *p_elements) {
- Basis *basis = (Basis *)p_basis;
+void GDAPI godot_basis_get_elements(godot_basis *p_v, godot_vector3 *p_elements) {
+ Basis *v = (Basis *)p_v;
Vector3 *elements = (Vector3 *)p_elements;
- elements[0] = basis->elements[0];
- elements[1] = basis->elements[1];
- elements[2] = basis->elements[2];
+ elements[0] = v->elements[0];
+ elements[1] = v->elements[1];
+ elements[2] = v->elements[2];
+}
+
+godot_vector3 GDAPI godot_basis_get_axis(const godot_basis *p_v, const godot_int p_axis) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Basis *v = (Basis *)p_v;
+ *d = v->get_axis(p_axis);
+ return dest;
+}
+
+void GDAPI godot_basis_set_axis(godot_basis *p_v, const godot_int p_axis, const godot_vector3 p_value) {
+ Basis *v = (Basis *)p_v;
+ const Vector3 *value = (Vector3 *)&p_value;
+ v->set_axis(p_axis, *value);
+}
+
+godot_vector3 GDAPI godot_basis_get_row(const godot_basis *p_v, const godot_int p_row) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Basis *v = (Basis *)p_v;
+ *d = v->get_row(p_row);
+ return dest;
+}
+
+void GDAPI godot_basis_set_row(godot_basis *p_v, const godot_int p_row, const godot_vector3 p_value) {
+ Basis *v = (Basis *)p_v;
+ const Vector3 *value = (Vector3 *)&p_value;
+ v->set_row(p_row, *value);
+}
+
+godot_real godot_basis_determinant(const godot_basis *p_v) {
+ Basis *v = (Basis *)p_v;
+ return v->determinant();
+}
+
+godot_vector3 godot_basis_get_euler(const godot_basis *p_v) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Basis *v = (Basis *)p_v;
+ *d = v->get_euler();
+ return dest;
+}
+
+godot_int godot_basis_get_orthogonal_index(const godot_basis *p_v) {
+ const Basis *v = (Basis *)p_v;
+ return v->get_orthogonal_index();
+}
+
+godot_vector3 godot_basis_get_scale(const godot_basis *p_v) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Basis *v = (Basis *)p_v;
+ *d = v->get_scale();
+ return dest;
+}
+
+void godot_basis_inverse(godot_basis *p_dest, const godot_basis *p_v) {
+ Basis *d = (Basis *)p_dest;
+ const Basis *v = (Basis *)p_v;
+ *d = v->inverse();
+}
+
+void godot_basis_orthonormalized(godot_basis *p_dest, const godot_basis *p_v) {
+ Basis *d = (Basis *)p_dest;
+ const Basis *v = (Basis *)p_v;
+ *d = v->orthonormalized();
+}
+
+void godot_basis_rotated(godot_basis *p_dest, const godot_basis *p_v, const godot_vector3 p_axis, const godot_real p_phi) {
+ Basis *d = (Basis *)p_dest;
+ const Basis *v = (Basis *)p_v;
+ const Vector3 *axis = (Vector3 *)&p_axis;
+ *d = v->rotated(*axis, p_phi);
+}
+
+void godot_basis_scaled(godot_basis *p_dest, const godot_basis *p_v, const godot_vector3 p_scale) {
+ Basis *d = (Basis *)p_dest;
+ const Basis *v = (Basis *)p_v;
+ const Vector3 *scale = (Vector3 *)&p_scale;
+ *d = v->scaled(*scale);
+}
+
+godot_real godot_basis_tdotx(const godot_basis *p_v, const godot_vector3 p_with) {
+ const Basis *v = (Basis *)p_v;
+ const Vector3 *with = (Vector3 *)&p_with;
+ return v->tdotx(*with);
+}
+
+godot_real godot_basis_tdoty(const godot_basis *p_v, const godot_vector3 p_with) {
+ const Basis *v = (Basis *)p_v;
+ const Vector3 *with = (Vector3 *)&p_with;
+ return v->tdoty(*with);
+}
+
+godot_real godot_basis_tdotz(const godot_basis *p_v, const godot_vector3 p_with) {
+ const Basis *v = (Basis *)p_v;
+ const Vector3 *with = (Vector3 *)&p_with;
+ return v->tdotz(*with);
+}
+
+void godot_basis_transposed(godot_basis *p_dest, const godot_basis *p_v) {
+ Basis *d = (Basis *)p_dest;
+ const Basis *v = (Basis *)p_v;
+ *d = v->transposed();
+}
+
+godot_vector3 godot_basis_xform(const godot_basis *p_v, const godot_vector3 p_vect) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Basis *v = (Basis *)p_v;
+ const Vector3 *vect = (Vector3 *)&p_vect;
+ *d = v->xform(*vect);
+ return dest;
+}
+
+godot_vector3 godot_basis_xform_inv(const godot_basis *p_v, const godot_vector3 p_vect) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Basis *v = (Basis *)p_v;
+ const Vector3 *vect = (Vector3 *)&p_vect;
+ *d = v->xform_inv(*vect);
+ return dest;
}
#ifdef __cplusplus
diff --git a/modules/gdnative/godot/godot_basis.h b/modules/gdnative/godot/godot_basis.h
index e65e5b6830..2803396997 100644
--- a/modules/gdnative/godot/godot_basis.h
+++ b/modules/gdnative/godot/godot_basis.h
@@ -45,17 +45,37 @@ typedef struct godot_basis {
#include "../godot.h"
#include "godot_quat.h"
-void GDAPI godot_basis_new(godot_basis *p_basis);
-void GDAPI godot_basis_new_with_euler_quat(godot_basis *p_basis, const godot_quat *p_euler);
-void GDAPI godot_basis_new_with_euler(godot_basis *p_basis, const godot_vector3 *p_euler);
+void GDAPI godot_basis_new(godot_basis *p_v);
+void GDAPI godot_basis_new_with_euler_quat(godot_basis *p_v, const godot_quat *p_euler);
+void GDAPI godot_basis_new_with_euler(godot_basis *p_v, const godot_vector3 p_euler);
+void GDAPI godot_basis_new_with_axis_and_angle(godot_basis *p_v, const godot_vector3 p_axis, const godot_real p_phi);
+void GDAPI godot_basis_new_with_rows(godot_basis *p_v, const godot_vector3 p_row0, const godot_vector3 p_row1, const godot_vector3 p_row2);
-godot_quat GDAPI godot_basis_as_quat(const godot_basis *p_basis);
-godot_vector3 GDAPI godot_basis_get_euler(const godot_basis *p_basis);
+godot_quat GDAPI godot_basis_as_quat(const godot_basis *p_v);
/*
* p_elements is a pointer to an array of 3 (!!) vector3
*/
-void GDAPI godot_basis_get_elements(godot_basis *p_basis, godot_vector3 *p_elements);
+void GDAPI godot_basis_get_elements(godot_basis *p_v, godot_vector3 *p_elements);
+godot_vector3 GDAPI godot_basis_get_axis(const godot_basis *p_v, const godot_int p_axis);
+void GDAPI godot_basis_set_axis(godot_basis *p_v, const godot_int p_axis, const godot_vector3 p_value);
+godot_vector3 GDAPI godot_basis_get_row(const godot_basis *p_v, const godot_int p_row);
+void GDAPI godot_basis_set_row(godot_basis *p_v, const godot_int p_row, const godot_vector3 p_value);
+
+godot_real godot_basis_determinant(const godot_basis *p_v);
+godot_vector3 godot_basis_get_euler(const godot_basis *p_v);
+godot_int godot_basis_get_orthogonal_index(const godot_basis *p_v);
+godot_vector3 godot_basis_get_scale(const godot_basis *p_v);
+void godot_basis_inverse(godot_basis *p_dest, const godot_basis *p_v);
+void godot_basis_orthonormalized(godot_basis *p_dest, const godot_basis *p_v);
+void godot_basis_rotated(godot_basis *p_dest, const godot_basis *p_v, const godot_vector3 p_axis, const godot_real p_phi);
+void godot_basis_scaled(godot_basis *p_dest, const godot_basis *p_v, const godot_vector3 p_scale);
+godot_real godot_basis_tdotx(const godot_basis *p_v, const godot_vector3 p_with);
+godot_real godot_basis_tdoty(const godot_basis *p_v, const godot_vector3 p_with);
+godot_real godot_basis_tdotz(const godot_basis *p_v, const godot_vector3 p_with);
+void godot_basis_transposed(godot_basis *p_dest, const godot_basis *p_v);
+godot_vector3 godot_basis_xform(const godot_basis *p_v, const godot_vector3 p_vect);
+godot_vector3 godot_basis_xform_inv(const godot_basis *p_v, const godot_vector3 p_vect);
#ifdef __cplusplus
}
diff --git a/modules/gdnative/godot/godot_string.cpp b/modules/gdnative/godot/godot_string.cpp
index 757b8510cf..92c0b04041 100644
--- a/modules/gdnative/godot/godot_string.cpp
+++ b/modules/gdnative/godot/godot_string.cpp
@@ -80,6 +80,11 @@ const char GDAPI *godot_string_c_str(const godot_string *p_str) {
return s->utf8().get_data();
}
+const wchar_t GDAPI *godot_string_unicode_str(const godot_string *p_str) {
+ const String *s = (const String *)p_str;
+ return s->c_str();
+}
+
godot_bool GDAPI godot_string_operator_equal(const godot_string *p_a, const godot_string *p_b) {
String *a = (String *)p_a;
String *b = (String *)p_b;
diff --git a/modules/gdnative/godot/godot_string.h b/modules/gdnative/godot/godot_string.h
index 9289531c5e..83ed5d6ec1 100644
--- a/modules/gdnative/godot/godot_string.h
+++ b/modules/gdnative/godot/godot_string.h
@@ -35,6 +35,7 @@ extern "C" {
#endif
#include <stdint.h>
+#include <wchar.h>
#ifndef GODOT_CORE_API_GODOT_STRING_TYPE_DEFINED
typedef struct godot_string {
@@ -53,6 +54,7 @@ void GDAPI godot_string_copy_string(const godot_string *p_dest, const godot_stri
wchar_t GDAPI *godot_string_operator_index(godot_string *p_str, const godot_int p_idx);
const char GDAPI *godot_string_c_str(const godot_string *p_str);
+const wchar_t GDAPI *godot_string_unicode_str(const godot_string *p_str);
godot_bool GDAPI godot_string_operator_equal(const godot_string *p_a, const godot_string *p_b);
godot_bool GDAPI godot_string_operator_less(const godot_string *p_a, const godot_string *p_b);
diff --git a/modules/gdnative/godot/godot_variant.cpp b/modules/gdnative/godot/godot_variant.cpp
index 2214f85056..e9fa4eb8c6 100644
--- a/modules/gdnative/godot/godot_variant.cpp
+++ b/modules/gdnative/godot/godot_variant.cpp
@@ -457,12 +457,22 @@ godot_pool_color_array GDAPI godot_variant_as_pool_color_array(const godot_varia
return pba;
}
-godot_variant GDAPI godot_variant_call(godot_variant *p_v, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount /*, godot_variant_call_error *r_error */) {
+godot_variant GDAPI godot_variant_call(godot_variant *p_v, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount, godot_variant_call_error *p_error) {
Variant *v = (Variant *)p_v;
String *method = (String *)p_method;
- Variant **args = (Variant **)p_args;
+ const Variant **args = (const Variant **)p_args;
godot_variant res;
- memnew_placement_custom((Variant *)&res, Variant, Variant(v->call(*method, args, p_argcount)));
+ godot_variant_new_nil(&res);
+
+ Variant *ret_val = (Variant *)&res;
+
+ Variant::CallError r_error;
+ *ret_val = v->call(StringName(*method), args, p_argcount, r_error);
+ if (p_error) {
+ p_error->error = (godot_variant_call_error_error)r_error.error;
+ p_error->argument = r_error.argument;
+ p_error->expected = (godot_variant_type)r_error.expected;
+ }
return res;
}
diff --git a/modules/gdnative/godot/godot_variant.h b/modules/gdnative/godot/godot_variant.h
index 6f98b32363..bf0e2bf64e 100644
--- a/modules/gdnative/godot/godot_variant.h
+++ b/modules/gdnative/godot/godot_variant.h
@@ -45,13 +45,6 @@ typedef struct godot_variant {
struct godot_transform2d;
typedef struct godot_transform2d godot_transform2d;
-#include "godot_array.h"
-#include "godot_dictionary.h"
-#include "godot_input_event.h"
-#include "godot_node_path.h"
-#include "godot_rid.h"
-#include "godot_transform2d.h"
-
typedef enum godot_variant_type {
GODOT_VARIANT_TYPE_NIL,
@@ -69,7 +62,7 @@ typedef enum godot_variant_type {
GODOT_VARIANT_TYPE_TRANSFORM2D,
GODOT_VARIANT_TYPE_PLANE,
GODOT_VARIANT_TYPE_QUAT, // 10
- GODOT_VARIANT_TYPE_RECT3, //sorry naming convention fail :( not like it's used often
+ GODOT_VARIANT_TYPE_RECT3,
GODOT_VARIANT_TYPE_BASIS,
GODOT_VARIANT_TYPE_TRANSFORM,
@@ -93,6 +86,28 @@ typedef enum godot_variant_type {
GODOT_VARIANT_TYPE_POOL_COLOR_ARRAY,
} godot_variant_type;
+typedef enum godot_variant_call_error_error {
+ GODOT_CALL_ERROR_CALL_OK,
+ GODOT_CALL_ERROR_CALL_ERROR_INVALID_METHOD,
+ GODOT_CALL_ERROR_CALL_ERROR_INVALID_ARGUMENT,
+ GODOT_CALL_ERROR_CALL_ERROR_TOO_MANY_ARGUMENTS,
+ GODOT_CALL_ERROR_CALL_ERROR_TOO_FEW_ARGUMENTS,
+ GODOT_CALL_ERROR_CALL_ERROR_INSTANCE_IS_NULL,
+} godot_variant_call_error_error;
+
+typedef struct godot_variant_call_error {
+ godot_variant_call_error_error error;
+ int argument;
+ godot_variant_type expected;
+} godot_variant_call_error;
+
+#include "godot_array.h"
+#include "godot_dictionary.h"
+#include "godot_input_event.h"
+#include "godot_node_path.h"
+#include "godot_rid.h"
+#include "godot_transform2d.h"
+
godot_variant_type GDAPI godot_variant_get_type(const godot_variant *p_v);
void GDAPI godot_variant_copy(godot_variant *p_dest, const godot_variant *p_src);
@@ -159,7 +174,7 @@ godot_pool_vector2_array GDAPI godot_variant_as_pool_vector2_array(const godot_v
godot_pool_vector3_array GDAPI godot_variant_as_pool_vector3_array(const godot_variant *p_v);
godot_pool_color_array GDAPI godot_variant_as_pool_color_array(const godot_variant *p_v);
-godot_variant GDAPI godot_variant_call(godot_variant *p_v, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount /*, godot_variant_call_error *r_error */);
+godot_variant GDAPI godot_variant_call(godot_variant *p_v, const godot_string *p_method, const godot_variant **p_args, const godot_int p_argcount, godot_variant_call_error *p_error);
godot_bool GDAPI godot_variant_has_method(godot_variant *p_v, const godot_string *p_method);
diff --git a/modules/gdnative/godot/godot_vector2.cpp b/modules/gdnative/godot/godot_vector2.cpp
index ad5107f9a8..87e60b6245 100644
--- a/modules/gdnative/godot/godot_vector2.cpp
+++ b/modules/gdnative/godot/godot_vector2.cpp
@@ -37,11 +37,12 @@ extern "C" {
void _vector2_api_anchor() {}
-void GDAPI godot_vector2_new(godot_vector2 *p_v, godot_real p_x,
- godot_real p_y) {
- Vector2 *v = (Vector2 *)p_v;
+godot_vector2 GDAPI godot_vector2_new(const godot_real p_x, const godot_real p_y) {
+ godot_vector2 value;
+ Vector2 *v = (Vector2 *)&value;
v->x = p_x;
v->y = p_y;
+ return value;
}
void GDAPI godot_vector2_set_x(godot_vector2 *p_v, const godot_real p_x) {
@@ -55,11 +56,11 @@ void GDAPI godot_vector2_set_y(godot_vector2 *p_v, const godot_real p_y) {
}
godot_real GDAPI godot_vector2_get_x(const godot_vector2 *p_v) {
- Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *v = (Vector2 *)p_v;
return v->x;
}
godot_real GDAPI godot_vector2_get_y(const godot_vector2 *p_v) {
- Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *v = (Vector2 *)p_v;
return v->y;
}
@@ -67,224 +68,227 @@ void GDAPI godot_vector2_normalize(godot_vector2 *p_v) {
Vector2 *v = (Vector2 *)p_v;
v->normalize();
}
-void GDAPI godot_vector2_normalized(godot_vector2 *p_dest,
- const godot_vector2 *p_src) {
- Vector2 *v = (Vector2 *)p_src;
- Vector2 *d = (Vector2 *)p_dest;
+godot_vector2 GDAPI godot_vector2_normalized(const godot_vector2 *p_v) {
+ godot_vector2 dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ Vector2 *d = (Vector2 *)&dest;
*d = v->normalized();
+ return dest;
}
godot_real GDAPI godot_vector2_length(const godot_vector2 *p_v) {
- Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *v = (Vector2 *)p_v;
return v->length();
}
godot_real GDAPI godot_vector2_length_squared(const godot_vector2 *p_v) {
- Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *v = (Vector2 *)p_v;
return v->length_squared();
}
-godot_real GDAPI godot_vector2_distance_to(const godot_vector2 *p_a,
- const godot_vector2 *p_b) {
- Vector2 *a = (Vector2 *)p_a;
- Vector2 *b = (Vector2 *)p_b;
- return a->distance_to(*b);
+godot_real GDAPI godot_vector2_distance_to(const godot_vector2 *p_v, const godot_vector2 p_b) {
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ return v->distance_to(*b);
}
-godot_real GDAPI godot_vector2_distance_squared_to(const godot_vector2 *p_a,
- const godot_vector2 *p_b) {
- Vector2 *a = (Vector2 *)p_a;
- Vector2 *b = (Vector2 *)p_b;
- return a->distance_squared_to(*b);
+godot_real GDAPI godot_vector2_distance_squared_to(const godot_vector2 *p_v, const godot_vector2 p_b) {
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ return v->distance_squared_to(*b);
}
-void GDAPI godot_vector2_operator_add(godot_vector2 *p_dest,
- const godot_vector2 *p_a,
- const godot_vector2 *p_b) {
- Vector2 *dest = (Vector2 *)p_dest;
- const Vector2 *a = (Vector2 *)p_a;
- const Vector2 *b = (Vector2 *)p_b;
- *dest = *a + *b;
+godot_vector2 GDAPI godot_vector2_operator_add(const godot_vector2 *p_v, const godot_vector2 p_b) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ *d = *v + *b;
+ return dest;
}
-void GDAPI godot_vector2_operator_subtract(godot_vector2 *p_dest,
- const godot_vector2 *p_a,
- const godot_vector2 *p_b) {
- Vector2 *dest = (Vector2 *)p_dest;
- const Vector2 *a = (Vector2 *)p_a;
- const Vector2 *b = (Vector2 *)p_b;
- *dest = *a - *b;
+godot_vector2 GDAPI godot_vector2_operator_subtract(const godot_vector2 *p_v, const godot_vector2 p_b) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ *d = *v - *b;
+ return dest;
}
-void GDAPI godot_vector2_operator_multiply_vector(godot_vector2 *p_dest,
- const godot_vector2 *p_a,
- const godot_vector2 *p_b) {
- Vector2 *dest = (Vector2 *)p_dest;
- const Vector2 *a = (Vector2 *)p_a;
- const Vector2 *b = (Vector2 *)p_b;
- *dest = *a * *b;
+godot_vector2 GDAPI godot_vector2_operator_multiply_vector(const godot_vector2 *p_v, const godot_vector2 p_b) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ *d = *v * *b;
+ return dest;
}
-void GDAPI godot_vector2_operator_multiply_scalar(godot_vector2 *p_dest,
- const godot_vector2 *p_a,
- const godot_real p_b) {
- Vector2 *dest = (Vector2 *)p_dest;
- const Vector2 *a = (Vector2 *)p_a;
- *dest = *a * p_b;
+godot_vector2 GDAPI godot_vector2_operator_multiply_scalar(const godot_vector2 *p_v, const godot_real p_b) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ *d = *v * p_b;
+ return dest;
}
-void GDAPI godot_vector2_operator_divide_vector(godot_vector2 *p_dest,
- const godot_vector2 *p_a,
- const godot_vector2 *p_b) {
- Vector2 *dest = (Vector2 *)p_dest;
- const Vector2 *a = (Vector2 *)p_a;
- const Vector2 *b = (Vector2 *)p_b;
- *dest = *a / *b;
+godot_vector2 GDAPI godot_vector2_operator_divide_vector(const godot_vector2 *p_v, const godot_vector2 p_b) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ *d = *v / *b;
+ return dest;
}
-void GDAPI godot_vector2_operator_divide_scalar(godot_vector2 *p_dest,
- const godot_vector2 *p_a,
- const godot_real p_b) {
- Vector2 *dest = (Vector2 *)p_dest;
- const Vector2 *a = (Vector2 *)p_a;
- *dest = *a / p_b;
+godot_vector2 GDAPI godot_vector2_operator_divide_scalar(const godot_vector2 *p_v, const godot_real p_b) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ *d = *v / p_b;
+ return dest;
}
-godot_bool GDAPI godot_vector2_operator_equal(const godot_vector2 *p_a,
- const godot_vector2 *p_b) {
- const Vector2 *a = (Vector2 *)p_a;
- const Vector2 *b = (Vector2 *)p_b;
- return *a == *b;
+godot_bool GDAPI godot_vector2_operator_equal(const godot_vector2 *p_v, const godot_vector2 p_b) {
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ return *v == *b;
}
-godot_bool GDAPI godot_vector2_operator_less(const godot_vector2 *p_a,
- const godot_vector2 *p_b) {
- const Vector2 *a = (Vector2 *)p_a;
- const Vector2 *b = (Vector2 *)p_b;
- return *a < *b;
+godot_bool GDAPI godot_vector2_operator_less(const godot_vector2 *p_v, const godot_vector2 p_b) {
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ return *v < *b;
}
-void GDAPI godot_vector2_abs(godot_vector2 *p_dest,
- const godot_vector2 *p_src) {
- const Vector2 *src = (Vector2 *)p_src;
- Vector2 *dest = (Vector2 *)p_dest;
- *dest = src->abs();
+godot_vector2 GDAPI godot_vector2_abs(const godot_vector2 *p_v) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ *d = v->abs();
+ return dest;
}
-godot_real GDAPI godot_vector2_angle(const godot_vector2 *p_src) {
- const Vector2 *src = (Vector2 *)p_src;
- return src->angle();
+godot_real GDAPI godot_vector2_angle(const godot_vector2 *p_v) {
+ const Vector2 *v = (Vector2 *)p_v;
+ return v->angle();
}
-godot_real GDAPI godot_vector2_angle_to(const godot_vector2 *p_src,
- const godot_vector2 *p_to) {
- const Vector2 *src = (Vector2 *)p_src;
- const Vector2 *to = (Vector2 *)p_to;
- return src->angle_to(*to);
+godot_real GDAPI godot_vector2_angle_to(const godot_vector2 *p_v, const godot_vector2 p_to) {
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *to = (Vector2 *)&p_to;
+ return v->angle_to(*to);
}
-godot_real GDAPI godot_vector2_angle_to_point(const godot_vector2 *p_src,
- const godot_vector2 *p_to) {
- const Vector2 *src = (Vector2 *)p_src;
- const Vector2 *to = (Vector2 *)p_to;
- return src->angle_to_point(*to);
+godot_real GDAPI godot_vector2_angle_to_point(const godot_vector2 *p_v, const godot_vector2 p_to) {
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *to = (Vector2 *)&p_to;
+ return v->angle_to_point(*to);
}
-void GDAPI godot_vector2_clamped(godot_vector2 *p_dest,
- const godot_vector2 *p_src,
- godot_real length) {
- const Vector2 *src = (Vector2 *)p_src;
- Vector2 *dest = (Vector2 *)p_dest;
- *dest = src->clamped(length);
+godot_vector2 GDAPI godot_vector2_clamped(const godot_vector2 *p_v, const godot_real length) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ *d = v->clamped(length);
+ return dest;
}
-void GDAPI godot_vector2_cubic_interpolate(
- godot_vector2 *p_dest, const godot_vector2 *p_src, const godot_vector2 *p_b,
- const godot_vector2 *p_pre_a, const godot_vector2 *p_post_b, godot_real t) {
- Vector2 *dest = (Vector2 *)p_dest;
- const Vector2 *src = (Vector2 *)p_src;
- const Vector2 *b = (Vector2 *)p_b;
- const Vector2 *pre_a = (Vector2 *)p_pre_a;
- const Vector2 *post_b = (Vector2 *)p_post_b;
- *dest = src->cubic_interpolate(*b, *pre_a, *post_b, t);
+godot_vector2 GDAPI godot_vector2_cubic_interpolate(
+ const godot_vector2 *p_v, const godot_vector2 p_b, const godot_vector2 p_pre_a,
+ const godot_vector2 p_post_b, godot_real t) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ const Vector2 *pre_a = (Vector2 *)&p_pre_a;
+ const Vector2 *post_b = (Vector2 *)&p_post_b;
+ *d = v->cubic_interpolate(*b, *pre_a, *post_b, t);
+ return dest;
}
-godot_real GDAPI godot_vector2_dot(const godot_vector2 *p_src,
- const godot_vector2 *p_with) {
- const Vector2 *src = (Vector2 *)p_src;
- const Vector2 *with = (Vector2 *)p_with;
- return src->dot(*with);
+godot_real GDAPI godot_vector2_dot(const godot_vector2 *p_v, const godot_vector2 p_with) {
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *with = (Vector2 *)&p_with;
+ return v->dot(*with);
}
-void GDAPI godot_vector2_floor(godot_vector2 *p_dest,
- const godot_vector2 *p_src) {
- const Vector2 *src = (Vector2 *)p_src;
- Vector2 *dest = (Vector2 *)p_dest;
- *dest = src->floor();
+godot_vector2 GDAPI godot_vector2_floor(const godot_vector2 *p_v) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ *d = v->floor();
+ return dest;
}
-godot_real GDAPI godot_vector2_aspect(const godot_vector2 *p_src) {
- const Vector2 *src = (Vector2 *)p_src;
- return src->aspect();
+godot_real GDAPI godot_vector2_aspect(const godot_vector2 *p_v) {
+ const Vector2 *v = (Vector2 *)p_v;
+ return v->aspect();
}
-void GDAPI godot_vector2_linear_interpolate(godot_vector2 *p_dest,
- const godot_vector2 *p_src,
- const godot_vector2 *p_b,
+godot_vector2 GDAPI godot_vector2_linear_interpolate(
+ const godot_vector2 *p_v,
+ const godot_vector2 p_b,
godot_real t) {
- Vector2 *dest = (Vector2 *)p_dest;
- const Vector2 *src = (Vector2 *)p_src;
- const Vector2 *b = (Vector2 *)p_b;
- *dest = src->linear_interpolate(*b, t);
-}
-
-void GDAPI godot_vector2_reflect(godot_vector2 *p_dest,
- const godot_vector2 *p_src,
- const godot_vector2 *p_vec) {
- const Vector2 *src = (Vector2 *)p_src;
- const Vector2 *vec = (Vector2 *)p_vec;
- Vector2 *dest = (Vector2 *)p_dest;
- *dest = src->reflect(*vec);
-}
-
-void GDAPI godot_vector2_rotated(godot_vector2 *p_dest,
- const godot_vector2 *p_src, godot_real phi) {
- const Vector2 *src = (Vector2 *)p_src;
- Vector2 *dest = (Vector2 *)p_dest;
- *dest = src->rotated(phi);
-}
-
-void GDAPI godot_vector2_slide(godot_vector2 *p_dest,
- const godot_vector2 *p_src,
- godot_vector2 *p_vec) {
- const Vector2 *src = (Vector2 *)p_src;
- const Vector2 *vec = (Vector2 *)p_vec;
- Vector2 *dest = (Vector2 *)p_dest;
- *dest = src->slide(*vec);
-}
-
-void GDAPI godot_vector2_snapped(godot_vector2 *p_dest,
- const godot_vector2 *p_src,
- godot_vector2 *p_by) {
- const Vector2 *src = (Vector2 *)p_src;
- const Vector2 *by = (Vector2 *)p_by;
- Vector2 *dest = (Vector2 *)p_dest;
- *dest = src->snapped(*by);
-}
-
-void GDAPI godot_vector2_tangent(godot_vector2 *p_dest,
- const godot_vector2 *p_src) {
- const Vector2 *src = (Vector2 *)p_src;
- Vector2 *dest = (Vector2 *)p_dest;
- *dest = src->tangent();
-}
-
-void GDAPI godot_vector2_to_string(godot_string *p_dest,
- const godot_vector2 *p_src) {
- const Vector2 *src = (Vector2 *)p_src;
- String *dest = (String *)p_dest;
- *dest = "(" + *src + ")";
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *b = (Vector2 *)&p_b;
+ *d = v->linear_interpolate(*b, t);
+ return dest;
+}
+
+godot_vector2 GDAPI godot_vector2_reflect(const godot_vector2 *p_v, const godot_vector2 p_vec) {
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *vec = (Vector2 *)&p_vec;
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ *d = v->reflect(*vec);
+ return dest;
+}
+
+godot_vector2 GDAPI godot_vector2_rotated(const godot_vector2 *p_v, godot_real phi) {
+ const Vector2 *v = (Vector2 *)p_v;
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ *d = v->rotated(phi);
+ return dest;
+}
+
+godot_vector2 GDAPI godot_vector2_slide(const godot_vector2 *p_v, godot_vector2 p_vec) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *vec = (Vector2 *)&p_vec;
+ *d = v->slide(*vec);
+ return dest;
+}
+
+godot_vector2 GDAPI godot_vector2_snapped(const godot_vector2 *p_v, godot_vector2 p_by) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ const Vector2 *by = (Vector2 *)&p_by;
+ *d = v->snapped(*by);
+ return dest;
+}
+
+godot_vector2 GDAPI godot_vector2_tangent(const godot_vector2 *p_v) {
+ godot_vector2 dest;
+ Vector2 *d = (Vector2 *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ *d = v->tangent();
+ return dest;
+}
+
+godot_string GDAPI godot_vector2_to_string(const godot_vector2 *p_v) {
+ godot_string dest;
+ String *d = (String *)&dest;
+ const Vector2 *v = (Vector2 *)p_v;
+ *d = "(" + *v + ")";
+ return dest;
}
#ifdef __cplusplus
diff --git a/modules/gdnative/godot/godot_vector2.h b/modules/gdnative/godot/godot_vector2.h
index 4d957d4c7f..36a4f01d03 100644
--- a/modules/gdnative/godot/godot_vector2.h
+++ b/modules/gdnative/godot/godot_vector2.h
@@ -45,7 +45,7 @@ typedef struct godot_vector2 {
#include "../godot.h"
-void GDAPI godot_vector2_new(godot_vector2 *p_v, const godot_real p_x, const godot_real p_y);
+godot_vector2 GDAPI godot_vector2_new(const godot_real p_x, const godot_real p_y);
void GDAPI godot_vector2_set_x(godot_vector2 *p_v, const godot_real p_x);
void GDAPI godot_vector2_set_y(godot_vector2 *p_v, const godot_real p_y);
@@ -53,43 +53,43 @@ godot_real GDAPI godot_vector2_get_x(const godot_vector2 *p_v);
godot_real GDAPI godot_vector2_get_y(const godot_vector2 *p_v);
void GDAPI godot_vector2_normalize(godot_vector2 *p_v);
-void GDAPI godot_vector2_normalized(godot_vector2 *p_dest, const godot_vector2 *p_src);
+godot_vector2 GDAPI godot_vector2_normalized(const godot_vector2 *p_v);
godot_real GDAPI godot_vector2_length(const godot_vector2 *p_v);
godot_real GDAPI godot_vector2_length_squared(const godot_vector2 *p_v);
-godot_real GDAPI godot_vector2_distance_to(const godot_vector2 *p_a, const godot_vector2 *p_b);
-godot_real GDAPI godot_vector2_distance_squared_to(const godot_vector2 *p_a, const godot_vector2 *p_b);
+godot_real GDAPI godot_vector2_distance_to(const godot_vector2 *p_v, const godot_vector2 p_b);
+godot_real GDAPI godot_vector2_distance_squared_to(const godot_vector2 *p_v, const godot_vector2 p_b);
-void GDAPI godot_vector2_abs(godot_vector2 *p_dest, const godot_vector2 *p_src);
-godot_real GDAPI godot_vector2_angle(const godot_vector2 *p_src);
-godot_real GDAPI godot_vector2_angle_to(const godot_vector2 *p_src, const godot_vector2 *p_to);
-godot_real GDAPI godot_vector2_angle_to_point(const godot_vector2 *p_src, const godot_vector2 *p_to);
-void GDAPI godot_vector2_clamped(godot_vector2 *p_dest, const godot_vector2 *p_src, godot_real length);
-void GDAPI godot_vector2_cubic_interpolate(godot_vector2 *p_dest, const godot_vector2 *p_src,
- const godot_vector2 *p_b, const godot_vector2 *p_pre_a,
- const godot_vector2 *p_post_b, godot_real t);
-godot_real GDAPI godot_vector2_dot(const godot_vector2 *p_src, const godot_vector2 *p_with);
-void GDAPI godot_vector2_floor(godot_vector2 *p_dest, const godot_vector2 *p_src);
-godot_real GDAPI godot_vector2_aspect(const godot_vector2 *p_src);
-void GDAPI godot_vector2_linear_interpolate(godot_vector2 *p_dest, const godot_vector2 *p_src,
- const godot_vector2 *p_b, godot_real t);
-void GDAPI godot_vector2_reflect(godot_vector2 *p_dest, const godot_vector2 *p_src, const godot_vector2 *p_vec);
-void GDAPI godot_vector2_rotated(godot_vector2 *p_dest, const godot_vector2 *p_src, godot_real phi);
-void GDAPI godot_vector2_slide(godot_vector2 *p_dest, const godot_vector2 *p_src, godot_vector2 *p_vec);
-void GDAPI godot_vector2_snapped(godot_vector2 *p_dest, const godot_vector2 *p_src, godot_vector2 *p_by);
-void GDAPI godot_vector2_tangent(godot_vector2 *p_dest, const godot_vector2 *p_src);
-void GDAPI godot_vector2_to_string(godot_string *p_dest, const godot_vector2 *p_src);
+godot_vector2 GDAPI godot_vector2_abs(const godot_vector2 *p_v);
+godot_real GDAPI godot_vector2_angle(const godot_vector2 *p_v);
+godot_real GDAPI godot_vector2_angle_to(const godot_vector2 *p_v, const godot_vector2 p_to);
+godot_real GDAPI godot_vector2_angle_to_point(const godot_vector2 *p_v, const godot_vector2 p_to);
+godot_vector2 GDAPI godot_vector2_clamped(const godot_vector2 *p_v, godot_real length);
+godot_vector2 GDAPI godot_vector2_cubic_interpolate(const godot_vector2 *p_v,
+ const godot_vector2 p_b, const godot_vector2 p_pre_a,
+ const godot_vector2 p_post_b, godot_real t);
+godot_real GDAPI godot_vector2_dot(const godot_vector2 *p_v, const godot_vector2 p_with);
+godot_vector2 GDAPI godot_vector2_floor(const godot_vector2 *p_v);
+godot_real GDAPI godot_vector2_aspect(const godot_vector2 *p_v);
+godot_vector2 GDAPI godot_vector2_linear_interpolate(const godot_vector2 *p_v,
+ const godot_vector2 p_b, godot_real t);
+godot_vector2 GDAPI godot_vector2_reflect(const godot_vector2 *p_v, const godot_vector2 p_vec);
+godot_vector2 GDAPI godot_vector2_rotated(const godot_vector2 *p_v, godot_real phi);
+godot_vector2 GDAPI godot_vector2_slide(const godot_vector2 *p_v, godot_vector2 p_vec);
+godot_vector2 GDAPI godot_vector2_snapped(const godot_vector2 *p_v, godot_vector2 p_by);
+godot_vector2 GDAPI godot_vector2_tangent(const godot_vector2 *p_v);
+godot_string GDAPI godot_vector2_to_string(const godot_vector2 *p_v);
-void GDAPI godot_vector2_operator_add(godot_vector2 *p_dest, const godot_vector2 *p_a, const godot_vector2 *p_b);
-void GDAPI godot_vector2_operator_subtract(godot_vector2 *p_dest, const godot_vector2 *p_a, const godot_vector2 *p_b);
-void GDAPI godot_vector2_operator_multiply_vector(godot_vector2 *p_dest, const godot_vector2 *p_a, const godot_vector2 *p_b);
-void GDAPI godot_vector2_operator_multiply_scalar(godot_vector2 *p_dest, const godot_vector2 *p_a, const godot_real p_b);
-void GDAPI godot_vector2_operator_divide_vector(godot_vector2 *p_dest, const godot_vector2 *p_a, const godot_vector2 *p_b);
-void GDAPI godot_vector2_operator_divide_scalar(godot_vector2 *p_dest, const godot_vector2 *p_a, const godot_real p_b);
+godot_vector2 GDAPI godot_vector2_operator_add(const godot_vector2 *p_v, const godot_vector2 p_b);
+godot_vector2 GDAPI godot_vector2_operator_subtract(const godot_vector2 *p_v, const godot_vector2 p_b);
+godot_vector2 GDAPI godot_vector2_operator_multiply_vector(const godot_vector2 *p_v, const godot_vector2 p_b);
+godot_vector2 GDAPI godot_vector2_operator_multiply_scalar(const godot_vector2 *p_v, const godot_real p_b);
+godot_vector2 GDAPI godot_vector2_operator_divide_vector(const godot_vector2 *p_v, const godot_vector2 p_b);
+godot_vector2 GDAPI godot_vector2_operator_divide_scalar(const godot_vector2 *p_v, const godot_real p_b);
-godot_bool GDAPI godot_vector2_operator_equal(const godot_vector2 *p_a, const godot_vector2 *p_b);
-godot_bool GDAPI godot_vector2_operator_less(const godot_vector2 *p_a, const godot_vector2 *p_b);
+godot_bool GDAPI godot_vector2_operator_equal(const godot_vector2 *p_v, const godot_vector2 p_b);
+godot_bool GDAPI godot_vector2_operator_less(const godot_vector2 *p_v, const godot_vector2 p_b);
#ifdef __cplusplus
}
diff --git a/modules/gdnative/godot/godot_vector3.cpp b/modules/gdnative/godot/godot_vector3.cpp
index 41d1c1abf5..5f71b9f7e4 100644
--- a/modules/gdnative/godot/godot_vector3.cpp
+++ b/modules/gdnative/godot/godot_vector3.cpp
@@ -38,9 +38,11 @@ extern "C" {
void _vector3_api_anchor() {
}
-void GDAPI godot_vector3_new(godot_vector3 *p_v, const godot_real p_x, const godot_real p_y, const godot_real p_z) {
- Vector3 *v = (Vector3 *)p_v;
+godot_vector3 GDAPI godot_vector3_new(const godot_real p_x, const godot_real p_y, const godot_real p_z) {
+ godot_vector3 value;
+ Vector3 *v = (Vector3 *)&value;
*v = Vector3(p_x, p_y, p_z);
+ return value;
}
void GDAPI godot_vector3_set_axis(godot_vector3 *p_v, const godot_int p_axis, const godot_real p_val) {
@@ -78,217 +80,261 @@ void GDAPI godot_vector3_normalize(godot_vector3 *p_v) {
v->normalize();
}
-void GDAPI godot_vector3_normalized(godot_vector3 *p_dest, const godot_vector3 *p_src) {
- Vector3 *src = (Vector3 *)p_src;
- Vector3 *dest = (Vector3 *)p_dest;
- *dest = src->normalized();
-}
-
-void godot_vector3_inverse(godot_vector3 *p_dest, const godot_vector3 *p_src) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- *dest = src->inverse();
-}
-
-void godot_vector3_zero(godot_vector3 *p_src) {
- Vector3 *src = (Vector3 *)p_src;
- src->zero();
-}
-
-void godot_vector3_snap(godot_vector3 *p_src, godot_real val) {
- Vector3 *src = (Vector3 *)p_src;
- src->snap(val);
-}
-
-void godot_vector3_snapped(godot_vector3 *p_dest, const godot_vector3 *p_src, godot_real val) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- *dest = src->snapped(val);
-}
-
-void godot_vector3_rotate(godot_vector3 *p_src, const godot_vector3 *p_axis, godot_real phi) {
- Vector3 *src = (Vector3 *)p_src;
- const Vector3 *axis = (Vector3 *)p_axis;
- src->rotate(*axis, phi);
-}
-
-void godot_vector3_rotated(godot_vector3 *p_dest, const godot_vector3 *p_src,
- const godot_vector3 *p_axis, godot_real phi) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *axis = (Vector3 *)p_axis;
- *dest = src->rotated(*axis, phi);
-}
-
-void godot_vector3_linear_interpolate(godot_vector3 *p_dest, const godot_vector3 *p_src,
- const godot_vector3 *p_b, godot_real t) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *b = (Vector3 *)p_b;
- *dest = src->linear_interpolate(*b, t);
-}
-
-void godot_vector3_cubic_interpolate(godot_vector3 *p_dest, const godot_vector3 *p_src,
- const godot_vector3 *p_b, const godot_vector3 *p_pre_a,
- const godot_vector3 *p_post_b, godot_real t) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *b = (Vector3 *)p_b;
- const Vector3 *pre_a = (Vector3 *)p_pre_a;
- const Vector3 *post_b = (Vector3 *)p_post_b;
- *dest = src->cubic_interpolate(*b, *pre_a, *post_b, t);
-}
-
-void godot_vector3_cubic_interpolaten(godot_vector3 *p_dest, const godot_vector3 *p_src,
- const godot_vector3 *p_b, const godot_vector3 *p_pre_a,
- const godot_vector3 *p_post_b, godot_real t) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *b = (Vector3 *)p_b;
- const Vector3 *pre_a = (Vector3 *)p_pre_a;
- const Vector3 *post_b = (Vector3 *)p_post_b;
- *dest = src->cubic_interpolaten(*b, *pre_a, *post_b, t);
-}
-
-void godot_vector3_cross(godot_vector3 *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_b) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *b = (Vector3 *)p_b;
- *dest = src->cross(*b);
-}
-
-godot_real godot_vector3_dot(const godot_vector3 *p_src, const godot_vector3 *p_b) {
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *b = (Vector3 *)p_b;
- return src->dot(*b);
-}
-
-void godot_vector3_outer(godot_basis *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_b) {
- Basis *dest = (Basis *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *b = (Vector3 *)p_b;
- *dest = src->outer(*b);
+godot_vector3 GDAPI godot_vector3_normalized(const godot_vector3 *p_v) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ Vector3 *v = (Vector3 *)p_v;
+ *d = v->normalized();
+ return dest;
}
-void godot_vector3_to_diagonal_matrix(godot_basis *p_dest, const godot_vector3 *p_src) {
- Basis *dest = (Basis *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- *dest = src->to_diagonal_matrix();
+godot_vector3 godot_vector3_inverse(const godot_vector3 *p_v) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ *d = v->inverse();
+ return dest;
}
-void godot_vector3_abs(godot_vector3 *p_dest, const godot_vector3 *p_src) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- *dest = src->abs();
+void godot_vector3_zero(godot_vector3 *p_v) {
+ Vector3 *v = (Vector3 *)p_v;
+ v->zero();
}
-void godot_vector3_floor(godot_vector3 *p_dest, const godot_vector3 *p_src) {
- Vector3 *dest = (Vector3 *)p_dest;
- const Vector3 *src = (Vector3 *)p_src;
- *dest = src->floor();
+void godot_vector3_snap(godot_vector3 *p_v, const godot_real val) {
+ Vector3 *v = (Vector3 *)p_v;
+ v->snap(val);
}
-void godot_vector3_ceil(godot_vector3 *p_dest, const godot_vector3 *p_src) {
- const Vector3 *src = (Vector3 *)p_src;
- Vector3 *dest = (Vector3 *)p_dest;
- *dest = src->ceil();
+godot_vector3 godot_vector3_snapped(const godot_vector3 *p_v, const godot_real val) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ *d = v->snapped(val);
+ return dest;
}
-godot_real GDAPI godot_vector3_distance_to(const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- return a->distance_to(*b);
+void godot_vector3_rotate(godot_vector3 *p_v, const godot_vector3 p_axis, const godot_real phi) {
+ Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *axis = (Vector3 *)&p_axis;
+ v->rotate(*axis, phi);
+}
+
+godot_vector3 godot_vector3_rotated(const godot_vector3 *p_v, const godot_vector3 p_axis, const godot_real phi) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *axis = (Vector3 *)&p_axis;
+ *d = v->rotated(*axis, phi);
+ return dest;
+}
+
+godot_vector3 godot_vector3_linear_interpolate(const godot_vector3 *p_v, const godot_vector3 p_b, const godot_real t) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *b = (Vector3 *)&p_b;
+ *d = v->linear_interpolate(*b, t);
+ return dest;
+}
+
+godot_vector3 godot_vector3_cubic_interpolate(const godot_vector3 *p_v,
+ const godot_vector3 p_b, const godot_vector3 p_pre_a,
+ const godot_vector3 p_post_b, const godot_real t) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *b = (Vector3 *)&p_b;
+ const Vector3 *pre_a = (Vector3 *)&p_pre_a;
+ const Vector3 *post_b = (Vector3 *)&p_post_b;
+ *d = v->cubic_interpolate(*b, *pre_a, *post_b, t);
+ return dest;
+}
+
+godot_vector3 godot_vector3_cubic_interpolaten(const godot_vector3 *p_v,
+ const godot_vector3 p_b, const godot_vector3 p_pre_a,
+ const godot_vector3 p_post_b, const godot_real t) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *b = (Vector3 *)&p_b;
+ const Vector3 *pre_a = (Vector3 *)&p_pre_a;
+ const Vector3 *post_b = (Vector3 *)&p_post_b;
+ *d = v->cubic_interpolaten(*b, *pre_a, *post_b, t);
+ return dest;
+}
+
+godot_vector3 godot_vector3_cross(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *b = (Vector3 *)&p_b;
+ *d = v->cross(*b);
+ return dest;
+}
+
+godot_real godot_vector3_dot(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *b = (Vector3 *)&p_b;
+ return v->dot(*b);
+}
+
+godot_basis godot_vector3_outer(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ godot_basis dest;
+ Basis *d = (Basis *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *b = (Vector3 *)&p_b;
+ *d = v->outer(*b);
+ return dest;
+}
+
+godot_basis godot_vector3_to_diagonal_matrix(const godot_vector3 *p_v) {
+ godot_basis dest;
+ Basis *d = (Basis *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ *d = v->to_diagonal_matrix();
+ return dest;
+}
+
+godot_vector3 godot_vector3_abs(const godot_vector3 *p_v) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ *d = v->abs();
+ return dest;
+}
+
+godot_vector3 godot_vector3_floor(const godot_vector3 *p_v) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ *d = v->floor();
+ return dest;
+}
+
+godot_vector3 godot_vector3_ceil(const godot_vector3 *p_v) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ *d = v->ceil();
+ return dest;
+}
+
+godot_real GDAPI godot_vector3_distance_to(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ return v->distance_to(*b);
}
-godot_real GDAPI godot_vector3_distance_squared_to(const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- return a->distance_squared_to(*b);
+godot_real GDAPI godot_vector3_distance_squared_to(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ return v->distance_squared_to(*b);
}
-godot_real GDAPI godot_vector3_angle_to(const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- return a->angle_to(*b);
+godot_real GDAPI godot_vector3_angle_to(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ return v->angle_to(*b);
}
-void godot_vector3_slide(godot_vector3 *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_vec) {
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *vec = (Vector3 *)p_vec;
- Vector3 *dest = (Vector3 *)p_dest;
- *dest = src->slide(*vec);
+godot_vector3 godot_vector3_slide(const godot_vector3 *p_v, const godot_vector3 p_vec) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *vec = (Vector3 *)&p_vec;
+ *d = v->slide(*vec);
+ return dest;
}
-void godot_vector3_bounce(godot_vector3 *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_vec) {
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *vec = (Vector3 *)p_vec;
- Vector3 *dest = (Vector3 *)p_dest;
- *dest = src->bounce(*vec);
+godot_vector3 godot_vector3_bounce(const godot_vector3 *p_v, const godot_vector3 p_vec) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *vec = (Vector3 *)&p_vec;
+ *d = v->bounce(*vec);
+ return dest;
}
-void godot_vector3_reflect(godot_vector3 *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_vec) {
- const Vector3 *src = (Vector3 *)p_src;
- const Vector3 *vec = (Vector3 *)p_vec;
- Vector3 *dest = (Vector3 *)p_dest;
- *dest = src->reflect(*vec);
+godot_vector3 godot_vector3_reflect(const godot_vector3 *p_v, const godot_vector3 p_vec) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ const Vector3 *vec = (Vector3 *)&p_vec;
+ *d = v->reflect(*vec);
+ return dest;
}
-void GDAPI godot_vector3_operator_add(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *dest = (Vector3 *)p_dest;
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- *dest = *a + *b;
+godot_vector3 GDAPI godot_vector3_operator_add(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ *d = *v + *b;
+ return dest;
}
-void GDAPI godot_vector3_operator_subtract(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *dest = (Vector3 *)p_dest;
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- *dest = *a - *b;
+godot_vector3 GDAPI godot_vector3_operator_subtract(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ *d = *v - *b;
+ return dest;
}
-void GDAPI godot_vector3_operator_multiply_vector(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *dest = (Vector3 *)p_dest;
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- *dest = *a * *b;
+godot_vector3 GDAPI godot_vector3_operator_multiply_vector(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ *d = *v * *b;
+ return dest;
}
-void GDAPI godot_vector3_operator_multiply_scalar(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_real p_b) {
- Vector3 *dest = (Vector3 *)p_dest;
- Vector3 *a = (Vector3 *)p_a;
- *dest = *a * p_b;
+godot_vector3 GDAPI godot_vector3_operator_multiply_scalar(const godot_vector3 *p_v, const godot_real p_b) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ Vector3 *v = (Vector3 *)p_v;
+ *d = *v * p_b;
+ return dest;
}
-void GDAPI godot_vector3_operator_divide_vector(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *dest = (Vector3 *)p_dest;
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- *dest = *a / *b;
+godot_vector3 GDAPI godot_vector3_operator_divide_vector(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ *d = *v / *b;
+ return dest;
}
-void GDAPI godot_vector3_operator_divide_scalar(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_real p_b) {
- Vector3 *dest = (Vector3 *)p_dest;
- Vector3 *a = (Vector3 *)p_a;
- *dest = *a / p_b;
+godot_vector3 GDAPI godot_vector3_operator_divide_scalar(const godot_vector3 *p_v, const godot_real p_b) {
+ godot_vector3 dest;
+ Vector3 *d = (Vector3 *)&dest;
+ Vector3 *v = (Vector3 *)p_v;
+ *d = *v / p_b;
+ return dest;
}
-godot_bool GDAPI godot_vector3_operator_equal(const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- return *a == *b;
+godot_bool GDAPI godot_vector3_operator_equal(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ return *v == *b;
}
-godot_bool GDAPI godot_vector3_operator_less(const godot_vector3 *p_a, const godot_vector3 *p_b) {
- Vector3 *a = (Vector3 *)p_a;
- Vector3 *b = (Vector3 *)p_b;
- return *a < *b;
+godot_bool GDAPI godot_vector3_operator_less(const godot_vector3 *p_v, const godot_vector3 p_b) {
+ Vector3 *v = (Vector3 *)p_v;
+ Vector3 *b = (Vector3 *)&p_b;
+ return *v < *b;
}
-void GDAPI godot_vector3_to_string(godot_string *p_dest, const godot_vector3 *p_src) {
- const Vector3 *src = (Vector3 *)p_src;
- String *dest = (String *)p_dest;
- *dest = "(" + *src + ")";
+godot_string GDAPI godot_vector3_to_string(const godot_vector3 *p_v) {
+ godot_string dest;
+ String *d = (String *)&dest;
+ const Vector3 *v = (Vector3 *)p_v;
+ *d = "(" + *v + ")";
+ return dest;
}
#ifdef __cplusplus
diff --git a/modules/gdnative/godot/godot_vector3.h b/modules/gdnative/godot/godot_vector3.h
index bc141bcfec..654ddd7792 100644
--- a/modules/gdnative/godot/godot_vector3.h
+++ b/modules/gdnative/godot/godot_vector3.h
@@ -49,7 +49,7 @@ typedef struct godot_vector3 {
#include "../godot.h"
#include "godot_basis.h"
-void GDAPI godot_vector3_new(godot_vector3 *p_v, const godot_real p_x, const godot_real p_y, const godot_real p_z);
+godot_vector3 GDAPI godot_vector3_new(const godot_real p_x, const godot_real p_y, const godot_real p_z);
void GDAPI godot_vector3_set_axis(godot_vector3 *p_v, const godot_int p_axis, const godot_real p_val);
godot_real GDAPI godot_vector3_get_axis(const godot_vector3 *p_v, const godot_int p_axis);
@@ -61,50 +61,50 @@ godot_real GDAPI godot_vector3_length(const godot_vector3 *p_v);
godot_real GDAPI godot_vector3_length_squared(const godot_vector3 *p_v);
void GDAPI godot_vector3_normalize(godot_vector3 *p_v);
-void GDAPI godot_vector3_normalized(godot_vector3 *p_dest, const godot_vector3 *p_src);
-
-void GDAPI godot_vector3_inverse(godot_vector3 *p_dest, const godot_vector3 *p_src);
-void GDAPI godot_vector3_zero(godot_vector3 *p_src);
-void GDAPI godot_vector3_snap(godot_vector3 *p_src, godot_real val);
-void GDAPI godot_vector3_snapped(godot_vector3 *p_dest, const godot_vector3 *p_src, godot_real val);
-void GDAPI godot_vector3_rotate(godot_vector3 *p_src, const godot_vector3 *p_axis, godot_real phi);
-void GDAPI godot_vector3_rotated(godot_vector3 *p_dest, const godot_vector3 *p_src,
- const godot_vector3 *p_axis, godot_real phi);
-void GDAPI godot_vector3_linear_interpolate(godot_vector3 *p_dest, const godot_vector3 *p_src,
- const godot_vector3 *p_b, godot_real t);
-void GDAPI godot_vector3_cubic_interpolate(godot_vector3 *p_dest, const godot_vector3 *p_src,
- const godot_vector3 *p_b, const godot_vector3 *p_pre_a,
- const godot_vector3 *p_post_b, godot_real t);
-void GDAPI godot_vector3_cubic_interpolaten(godot_vector3 *p_dest, const godot_vector3 *p_src,
- const godot_vector3 *p_b, const godot_vector3 *p_pre_a,
- const godot_vector3 *p_post_b, godot_real t);
-void GDAPI godot_vector3_cross(godot_vector3 *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_b);
-godot_real GDAPI godot_vector3_dot(const godot_vector3 *p_src, const godot_vector3 *p_b);
-void GDAPI godot_vector3_outer(godot_basis *dest, const godot_vector3 *p_src, const godot_vector3 *p_b);
-void GDAPI godot_vector3_to_diagonal_matrix(godot_basis *dest, const godot_vector3 *p_src);
-void GDAPI godot_vector3_abs(godot_vector3 *p_dest, const godot_vector3 *p_src);
-void GDAPI godot_vector3_floor(godot_vector3 *p_dest, const godot_vector3 *p_src);
-void GDAPI godot_vector3_ceil(godot_vector3 *p_dest, const godot_vector3 *p_src);
-
-godot_real GDAPI godot_vector3_distance_to(const godot_vector3 *p_a, const godot_vector3 *p_b);
-godot_real GDAPI godot_vector3_distance_squared_to(const godot_vector3 *p_a, const godot_vector3 *p_b);
-godot_real GDAPI godot_vector3_angle_to(const godot_vector3 *p_a, const godot_vector3 *p_b);
-
-void GDAPI godot_vector3_slide(godot_vector3 *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_vec);
-void GDAPI godot_vector3_bounce(godot_vector3 *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_vec);
-void GDAPI godot_vector3_reflect(godot_vector3 *p_dest, const godot_vector3 *p_src, const godot_vector3 *p_vec);
-
-void GDAPI godot_vector3_operator_add(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_vector3 *p_b);
-void GDAPI godot_vector3_operator_subtract(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_vector3 *p_b);
-void GDAPI godot_vector3_operator_multiply_vector(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_vector3 *p_b);
-void GDAPI godot_vector3_operator_multiply_scalar(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_real p_b);
-void GDAPI godot_vector3_operator_divide_vector(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_vector3 *p_b);
-void GDAPI godot_vector3_operator_divide_scalar(godot_vector3 *p_dest, const godot_vector3 *p_a, const godot_real p_b);
-
-godot_bool GDAPI godot_vector3_operator_equal(const godot_vector3 *p_a, const godot_vector3 *p_b);
-godot_bool GDAPI godot_vector3_operator_less(const godot_vector3 *p_a, const godot_vector3 *p_b);
-
-void GDAPI godot_vector3_to_string(godot_string *p_dest, const godot_vector3 *p_src);
+godot_vector3 GDAPI godot_vector3_normalized(const godot_vector3 *p_v);
+
+godot_vector3 GDAPI godot_vector3_inverse(const godot_vector3 *p_v);
+void GDAPI godot_vector3_zero(godot_vector3 *p_v);
+void GDAPI godot_vector3_snap(godot_vector3 *p_v, const godot_real val);
+godot_vector3 GDAPI godot_vector3_snapped(const godot_vector3 *p_v, const godot_real val);
+void GDAPI godot_vector3_rotate(godot_vector3 *p_v, const godot_vector3 p_axis, const godot_real phi);
+godot_vector3 GDAPI godot_vector3_rotated(const godot_vector3 *p_v,
+ const godot_vector3 p_axis, const godot_real phi);
+godot_vector3 GDAPI godot_vector3_linear_interpolate(const godot_vector3 *p_v,
+ const godot_vector3 p_b, const godot_real t);
+godot_vector3 GDAPI godot_vector3_cubic_interpolate(const godot_vector3 *p_v,
+ const godot_vector3 p_b, const godot_vector3 p_pre_a,
+ const godot_vector3 p_post_b, const godot_real t);
+godot_vector3 GDAPI godot_vector3_cubic_interpolaten(const godot_vector3 *p_v,
+ const godot_vector3 p_b, const godot_vector3 p_pre_a,
+ const godot_vector3 p_post_b, const godot_real t);
+godot_vector3 GDAPI godot_vector3_cross(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_real GDAPI godot_vector3_dot(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_basis GDAPI godot_vector3_outer(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_basis GDAPI godot_vector3_to_diagonal_matrix(const godot_vector3 *p_v);
+godot_vector3 GDAPI godot_vector3_abs(const godot_vector3 *p_v);
+godot_vector3 GDAPI godot_vector3_floor(const godot_vector3 *p_v);
+godot_vector3 GDAPI godot_vector3_ceil(const godot_vector3 *p_v);
+
+godot_real GDAPI godot_vector3_distance_to(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_real GDAPI godot_vector3_distance_squared_to(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_real GDAPI godot_vector3_angle_to(const godot_vector3 *p_v, const godot_vector3 p_b);
+
+godot_vector3 GDAPI godot_vector3_slide(const godot_vector3 *p_v, const godot_vector3 p_vec);
+godot_vector3 GDAPI godot_vector3_bounce(const godot_vector3 *p_v, const godot_vector3 p_vec);
+godot_vector3 GDAPI godot_vector3_reflect(const godot_vector3 *p_v, const godot_vector3 p_vec);
+
+godot_vector3 GDAPI godot_vector3_operator_add(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_vector3 GDAPI godot_vector3_operator_subtract(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_vector3 GDAPI godot_vector3_operator_multiply_vector(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_vector3 GDAPI godot_vector3_operator_multiply_scalar(const godot_vector3 *p_v, const godot_real p_b);
+godot_vector3 GDAPI godot_vector3_operator_divide_vector(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_vector3 GDAPI godot_vector3_operator_divide_scalar(const godot_vector3 *p_v, const godot_real p_b);
+
+godot_bool GDAPI godot_vector3_operator_equal(const godot_vector3 *p_v, const godot_vector3 p_b);
+godot_bool GDAPI godot_vector3_operator_less(const godot_vector3 *p_v, const godot_vector3 p_b);
+
+godot_string GDAPI godot_vector3_to_string(const godot_vector3 *p_v);
#ifdef __cplusplus
}
diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp
index ae5bb5694c..7d5ba08d6c 100644
--- a/modules/gdscript/gd_editor.cpp
+++ b/modules/gdscript/gd_editor.cpp
@@ -27,10 +27,15 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+#include "editor/editor_settings.h"
#include "gd_compiler.h"
#include "gd_script.h"
#include "global_config.h"
#include "os/file_access.h"
+#ifdef TOOLS_ENABLED
+#include "editor/editor_file_system.h"
+#include "editor/editor_settings.h"
+#endif
void GDScriptLanguage::get_comment_delimiters(List<String> *p_delimiters) const {
@@ -50,11 +55,12 @@ Ref<Script> GDScriptLanguage::get_template(const String &p_class_name, const Str
"# var a = 2\n" +
"# var b = \"textvar\"\n\n" +
"func _ready():\n" +
- "\t# Called every time the node is added to the scene.\n" +
- "\t# Initialization here\n" +
- "\tpass\n";
+ "%TS%# Called every time the node is added to the scene.\n" +
+ "%TS%# Initialization here\n" +
+ "%TS%pass\n";
_template = _template.replace("%BASE%", p_base_class_name);
+ _template = _template.replace("%TS%", _get_indentation());
Ref<GDScript> script;
script.instance();
@@ -1315,7 +1321,7 @@ static void _find_identifiers(GDCompletionContext &context, int p_line, bool p_o
static const char *_type_names[Variant::VARIANT_MAX] = {
"null", "bool", "int", "float", "String", "Vector2", "Rect2", "Vector3", "Transform2D", "Plane", "Quat", "AABB", "Basis", "Transform",
- "Color", "Image", "NodePath", "RID", "Object", "InputEvent", "Dictionary", "Array", "RawArray", "IntArray", "FloatArray", "StringArray",
+ "Color", "NodePath", "RID", "Object", "InputEvent", "Dictionary", "Array", "RawArray", "IntArray", "FloatArray", "StringArray",
"Vector2Array", "Vector3Array", "ColorArray"
};
@@ -1405,6 +1411,17 @@ static void _make_function_hint(const GDParser::FunctionNode *p_func, int p_argi
arghint += ")";
}
+void get_directory_contents(EditorFileSystemDirectory *p_dir, Set<String> &r_list) {
+
+ for (int i = 0; i < p_dir->get_subdir_count(); i++) {
+ get_directory_contents(p_dir->get_subdir(i), r_list);
+ }
+
+ for (int i = 0; i < p_dir->get_file_count(); i++) {
+ r_list.insert("\"" + p_dir->get_file_path(i) + "\"");
+ }
+}
+
static void _find_type_arguments(GDCompletionContext &context, const GDParser::Node *p_node, int p_line, const StringName &p_method, const GDCompletionIdentifier &id, int p_argidx, Set<String> &result, String &arghint) {
//print_line("find type arguments?");
@@ -1753,6 +1770,10 @@ static void _find_call_arguments(GDCompletionContext &context, const GDParser::N
const GDParser::BuiltInFunctionNode *fn = static_cast<const GDParser::BuiltInFunctionNode *>(op->arguments[0]);
MethodInfo mi = GDFunctions::get_info(fn->function);
+ if (mi.name == "load" && bool(EditorSettings::get_singleton()->get("text_editor/completion/complete_file_paths"))) {
+ get_directory_contents(EditorFileSystem::get_singleton()->get_filesystem(), result);
+ }
+
arghint = _get_visual_datatype(mi.return_val, false) + " " + GDFunctions::get_func_name(fn->function) + String("(");
for (int i = 0; i < mi.arguments.size(); i++) {
if (i > 0)
@@ -2374,6 +2395,11 @@ Error GDScriptLanguage::complete_code(const String &p_code, const String &p_base
}
} break;
+ case GDParser::COMPLETION_RESOURCE_PATH: {
+
+ if (EditorSettings::get_singleton()->get("text_editor/completion/complete_file_paths"))
+ get_directory_contents(EditorFileSystem::get_singleton()->get_filesystem(), options);
+ } break;
}
for (Set<String>::Element *E = options.front(); E; E = E->next()) {
@@ -2391,8 +2417,29 @@ Error GDScriptLanguage::complete_code(const String &p_code, const String &p_base
#endif
+String GDScriptLanguage::_get_indentation() const {
+#ifdef TOOLS_ENABLED
+ if (SceneTree::get_singleton()->is_editor_hint()) {
+ bool use_space_indentation = EDITOR_DEF("text_editor/indent/type", 0);
+
+ if (use_space_indentation) {
+ int indent_size = EDITOR_DEF("text_editor/indent/size", 4);
+
+ String space_indent = "";
+ for (int i = 0; i < indent_size; i++) {
+ space_indent += " ";
+ }
+ return space_indent;
+ }
+ }
+#endif
+ return "\t";
+}
+
void GDScriptLanguage::auto_indent_code(String &p_code, int p_from_line, int p_to_line) const {
+ String indent = _get_indentation();
+
Vector<String> lines = p_code.split("\n");
List<int> indent_stack;
@@ -2432,8 +2479,9 @@ void GDScriptLanguage::auto_indent_code(String &p_code, int p_from_line, int p_t
if (i >= p_from_line) {
l = "";
- for (int j = 0; j < indent_stack.size(); j++)
- l += "\t";
+ for (int j = 0; j < indent_stack.size(); j++) {
+ l += indent;
+ }
l += st;
} else if (i > p_to_line) {
diff --git a/modules/gdscript/gd_function.cpp b/modules/gdscript/gd_function.cpp
index 608256c88a..fb32d23ad5 100644
--- a/modules/gdscript/gd_function.cpp
+++ b/modules/gdscript/gd_function.cpp
@@ -1433,9 +1433,21 @@ Variant GDFunctionState::_signal_callback(const Variant **p_args, int p_argcount
return ret;
}
-bool GDFunctionState::is_valid() const {
+bool GDFunctionState::is_valid(bool p_extended_check) const {
+
+ if (function == NULL)
+ return false;
+
+ if (p_extended_check) {
+ //class instance gone?
+ if (state.instance_id && !ObjectDB::get_instance(state.instance_id))
+ return false;
+ //script gone?
+ if (state.script_id && !ObjectDB::get_instance(state.script_id))
+ return false;
+ }
- return function != NULL;
+ return true;
}
Variant GDFunctionState::resume(const Variant &p_arg) {
@@ -1464,7 +1476,7 @@ Variant GDFunctionState::resume(const Variant &p_arg) {
void GDFunctionState::_bind_methods() {
ClassDB::bind_method(D_METHOD("resume:Variant", "arg"), &GDFunctionState::resume, DEFVAL(Variant()));
- ClassDB::bind_method(D_METHOD("is_valid"), &GDFunctionState::is_valid);
+ ClassDB::bind_method(D_METHOD("is_valid", "extended_check"), &GDFunctionState::is_valid, DEFVAL(false));
ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "_signal_callback", &GDFunctionState::_signal_callback, MethodInfo("_signal_callback"));
}
diff --git a/modules/gdscript/gd_function.h b/modules/gdscript/gd_function.h
index f0bf33147b..6d20b19777 100644
--- a/modules/gdscript/gd_function.h
+++ b/modules/gdscript/gd_function.h
@@ -237,7 +237,7 @@ protected:
static void _bind_methods();
public:
- bool is_valid() const;
+ bool is_valid(bool p_extended_check = false) const;
Variant resume(const Variant &p_arg = Variant());
GDFunctionState();
~GDFunctionState();
diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp
index cd16fef6b3..4ae62eb1d0 100644
--- a/modules/gdscript/gd_parser.cpp
+++ b/modules/gdscript/gd_parser.cpp
@@ -389,6 +389,19 @@ GDParser::Node *GDParser::_parse_expression(Node *p_parent, bool p_static, bool
}
tokenizer->advance();
+ if (tokenizer->get_token() == GDTokenizer::TK_CURSOR) {
+ completion_cursor = StringName();
+ completion_node = p_parent;
+ completion_type = COMPLETION_RESOURCE_PATH;
+ completion_class = current_class;
+ completion_function = current_function;
+ completion_line = tokenizer->get_token_line();
+ completion_block = current_block;
+ completion_argument = 0;
+ completion_found = true;
+ tokenizer->advance();
+ }
+
String path;
bool found_constant = false;
bool valid = false;
@@ -460,10 +473,10 @@ GDParser::Node *GDParser::_parse_expression(Node *p_parent, bool p_static, bool
_set_error("Expected ')' after 'preload' path");
return NULL;
}
+ tokenizer->advance();
ConstantNode *constant = alloc_node<ConstantNode>();
constant->value = res;
- tokenizer->advance();
expr = constant;
} else if (tokenizer->get_token() == GDTokenizer::TK_PR_YIELD) {
diff --git a/modules/gdscript/gd_parser.h b/modules/gdscript/gd_parser.h
index 445ad7361c..7e7e19de1b 100644
--- a/modules/gdscript/gd_parser.h
+++ b/modules/gdscript/gd_parser.h
@@ -437,6 +437,7 @@ public:
COMPLETION_PARENT_FUNCTION,
COMPLETION_METHOD,
COMPLETION_CALL_ARGUMENTS,
+ COMPLETION_RESOURCE_PATH,
COMPLETION_INDEX,
COMPLETION_VIRTUAL_FUNC,
COMPLETION_YIELD,
diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp
index 2367f60740..173014b138 100644
--- a/modules/gdscript/gd_script.cpp
+++ b/modules/gdscript/gd_script.cpp
@@ -1697,8 +1697,8 @@ void GDScriptLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_so
#ifdef TOOLS_ENABLED
while (E->get()->placeholders.size()) {
-
Object *obj = E->get()->placeholders.front()->get()->get_owner();
+
//save instance info
List<Pair<StringName, Variant> > state;
if (obj->get_script_instance()) {
@@ -1706,6 +1706,9 @@ void GDScriptLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_so
obj->get_script_instance()->get_property_state(state);
map[obj->get_instance_ID()] = state;
obj->set_script(RefPtr());
+ } else {
+ // no instance found. Let's remove it so we don't loop forever
+ E->get()->placeholders.erase(E->get()->placeholders.front()->get());
}
}
#endif
diff --git a/modules/gdscript/gd_script.h b/modules/gdscript/gd_script.h
index 93f8ee8721..00ae136790 100644
--- a/modules/gdscript/gd_script.h
+++ b/modules/gdscript/gd_script.h
@@ -384,12 +384,14 @@ public:
virtual bool validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path = "", List<String> *r_functions = NULL) const;
virtual Script *create_script() const;
virtual bool has_named_classes() const;
+ virtual bool can_inherit_from_file() { return true; }
virtual int find_function(const String &p_function, const String &p_code) const;
virtual String make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const;
virtual Error complete_code(const String &p_code, const String &p_base_path, Object *p_owner, List<String> *r_options, String &r_call_hint);
#ifdef TOOLS_ENABLED
virtual Error lookup_code(const String &p_code, const String &p_symbol, const String &p_base_path, Object *p_owner, LookupResult &r_result);
#endif
+ virtual String _get_indentation() const;
virtual void auto_indent_code(String &p_code, int p_from_line, int p_to_line) const;
virtual void add_global_constant(const StringName &p_variable, const Variant &p_value);
diff --git a/modules/gdscript/gd_tokenizer.cpp b/modules/gdscript/gd_tokenizer.cpp
index 13674f1f9a..c26ba03a64 100644
--- a/modules/gdscript/gd_tokenizer.cpp
+++ b/modules/gdscript/gd_tokenizer.cpp
@@ -800,7 +800,6 @@ void GDTokenizerText::_advance() {
{ Variant::BASIS, "Basis" },
{ Variant::TRANSFORM, "Transform" },
{ Variant::COLOR, "Color" },
- { Variant::IMAGE, "Image" },
{ Variant::_RID, "RID" },
{ Variant::OBJECT, "Object" },
{ Variant::INPUT_EVENT, "InputEvent" },
diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp
index 39fe0a1675..d8993710a4 100644
--- a/modules/gridmap/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/grid_map_editor_plugin.cpp
@@ -519,12 +519,12 @@ bool GridMapEditor::forward_spatial_input_event(Camera *p_camera, const InputEve
if (p_event.mouse_button.button_index == BUTTON_WHEEL_UP && (p_event.mouse_button.mod.command || p_event.mouse_button.mod.shift)) {
if (p_event.mouse_button.pressed)
- floor->set_value(floor->get_value() + 1);
+ floor->set_value(floor->get_value() + p_event.mouse_button.factor);
return true; //eaten
} else if (p_event.mouse_button.button_index == BUTTON_WHEEL_DOWN && (p_event.mouse_button.mod.command || p_event.mouse_button.mod.shift)) {
if (p_event.mouse_button.pressed)
- floor->set_value(floor->get_value() - 1);
+ floor->set_value(floor->get_value() - p_event.mouse_button.factor);
return true;
}
diff --git a/modules/jpg/image_loader_jpegd.cpp b/modules/jpg/image_loader_jpegd.cpp
index 83685d6446..0741dd198a 100644
--- a/modules/jpg/image_loader_jpegd.cpp
+++ b/modules/jpg/image_loader_jpegd.cpp
@@ -89,7 +89,7 @@ Error jpeg_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p
return OK;
}
-Error ImageLoaderJPG::load_image(Image *p_image, FileAccess *f) {
+Error ImageLoaderJPG::load_image(Ref<Image> p_image, FileAccess *f) {
PoolVector<uint8_t> src_image;
int src_image_len = f->get_len();
@@ -102,7 +102,7 @@ Error ImageLoaderJPG::load_image(Image *p_image, FileAccess *f) {
f->close();
- Error err = jpeg_load_image_from_buffer(p_image, w.ptr(), src_image_len);
+ Error err = jpeg_load_image_from_buffer(p_image.ptr(), w.ptr(), src_image_len);
w = PoolVector<uint8_t>::Write();
@@ -115,10 +115,11 @@ void ImageLoaderJPG::get_recognized_extensions(List<String> *p_extensions) const
p_extensions->push_back("jpeg");
}
-static Image _jpegd_mem_loader_func(const uint8_t *p_png, int p_size) {
+static Ref<Image> _jpegd_mem_loader_func(const uint8_t *p_png, int p_size) {
- Image img;
- Error err = jpeg_load_image_from_buffer(&img, p_png, p_size);
+ Ref<Image> img;
+ img.instance();
+ Error err = jpeg_load_image_from_buffer(img.ptr(), p_png, p_size);
if (err)
ERR_PRINT("Couldn't initialize ImageLoaderJPG with the given resource.");
diff --git a/modules/jpg/image_loader_jpegd.h b/modules/jpg/image_loader_jpegd.h
index d23e8a7d48..57d7a2bb1c 100644
--- a/modules/jpg/image_loader_jpegd.h
+++ b/modules/jpg/image_loader_jpegd.h
@@ -38,7 +38,7 @@
class ImageLoaderJPG : public ImageFormatLoader {
public:
- virtual Error load_image(Image *p_image, FileAccess *f);
+ virtual Error load_image(Ref<Image> p_image, FileAccess *f);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
ImageLoaderJPG();
};
diff --git a/modules/openssl/SCsub b/modules/openssl/SCsub
index 0e811ce8c9..add7d4dcfc 100644
--- a/modules/openssl/SCsub
+++ b/modules/openssl/SCsub
@@ -677,7 +677,16 @@ if (env['builtin_openssl'] != 'no'):
# Module sources
env_openssl.add_source_files(env.modules_sources, "*.cpp")
-env_openssl.add_source_files(env.modules_sources, "*.c")
+
+
+# Other thirdparty dependencies
+thirdparty_misc_dir = "#thirdparty/misc/"
+thirdparty_misc_sources = [
+ "curl_hostcheck.c",
+]
+thirdparty_misc_sources = [thirdparty_misc_dir + file for file in thirdparty_misc_sources]
+env_openssl.add_source_files(env.modules_sources, thirdparty_misc_sources)
+
# platform/uwp need to know openssl is available, pass to main env
if "platform" in env and env["platform"] == "uwp":
diff --git a/modules/openssl/stream_peer_openssl.h b/modules/openssl/stream_peer_openssl.h
index 12262da94a..5c830ebf37 100644
--- a/modules/openssl/stream_peer_openssl.h
+++ b/modules/openssl/stream_peer_openssl.h
@@ -30,17 +30,19 @@
#ifndef STREAM_PEER_OPEN_SSL_H
#define STREAM_PEER_OPEN_SSL_H
-#include "curl_hostcheck.h"
#include "global_config.h"
#include "io/stream_peer_ssl.h"
#include "os/file_access.h"
-#include <stdio.h> // If you don't know what this is for stop reading now.
+
+#include "thirdparty/misc/curl_hostcheck.h"
#include <openssl/bio.h> // BIO objects for I/O
#include <openssl/err.h> // Error reporting
#include <openssl/ssl.h> // SSL and SSL_CTX for SSL connections
#include <openssl/x509v3.h>
+#include <stdio.h>
+
class StreamPeerOpenSSL : public StreamPeerSSL {
private:
static int _bio_create(BIO *b);
diff --git a/modules/pvr/texture_loader_pvr.cpp b/modules/pvr/texture_loader_pvr.cpp
index 62cbd9cd8d..bdd4779e28 100644
--- a/modules/pvr/texture_loader_pvr.cpp
+++ b/modules/pvr/texture_loader_pvr.cpp
@@ -164,8 +164,8 @@ RES ResourceFormatPVR::load(const String &p_path, const String &p_original_path,
print_line("flip: " + itos(flags & PVR_VFLIP));
- Image image(width, height, mipmaps, format, data);
- ERR_FAIL_COND_V(image.empty(), RES());
+ Ref<Image> image = memnew(Image(width, height, mipmaps, format, data));
+ ERR_FAIL_COND_V(image->empty(), RES());
Ref<ImageTexture> texture = memnew(ImageTexture);
texture->create_from_image(image, tex_flags);
@@ -193,30 +193,32 @@ String ResourceFormatPVR::get_resource_type(const String &p_path) const {
static void _compress_pvrtc4(Image *p_img) {
- Image img = *p_img;
+ Ref<Image> img = p_img->duplicate();
bool make_mipmaps = false;
- if (img.get_width() % 8 || img.get_height() % 8) {
- make_mipmaps = img.has_mipmaps();
- img.resize(img.get_width() + (8 - (img.get_width() % 8)), img.get_height() + (8 - (img.get_height() % 8)));
+ if (img->get_width() % 8 || img->get_height() % 8) {
+ make_mipmaps = img->has_mipmaps();
+ img->resize(img->get_width() + (8 - (img->get_width() % 8)), img->get_height() + (8 - (img->get_height() % 8)));
}
- img.convert(Image::FORMAT_RGBA8);
- if (!img.has_mipmaps() && make_mipmaps)
- img.generate_mipmaps();
+ img->convert(Image::FORMAT_RGBA8);
+ if (!img->has_mipmaps() && make_mipmaps)
+ img->generate_mipmaps();
- bool use_alpha = img.detect_alpha();
+ bool use_alpha = img->detect_alpha();
- Image new_img;
- new_img.create(img.get_width(), img.get_height(), true, use_alpha ? Image::FORMAT_PVRTC4A : Image::FORMAT_PVRTC4);
- PoolVector<uint8_t> data = new_img.get_data();
+ Ref<Image> new_img;
+ new_img.instance();
+ new_img->create(img->get_width(), img->get_height(), true, use_alpha ? Image::FORMAT_PVRTC4A : Image::FORMAT_PVRTC4);
+
+ PoolVector<uint8_t> data = new_img->get_data();
{
PoolVector<uint8_t>::Write wr = data.write();
- PoolVector<uint8_t>::Read r = img.get_data().read();
+ PoolVector<uint8_t>::Read r = img->get_data().read();
- for (int i = 0; i <= new_img.get_mipmap_count(); i++) {
+ for (int i = 0; i <= new_img->get_mipmap_count(); i++) {
int ofs, size, w, h;
- img.get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
+ img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
Javelin::RgbaBitmap bm(w, h);
copymem(bm.GetData(), &r[ofs], size);
{
@@ -226,12 +228,12 @@ static void _compress_pvrtc4(Image *p_img) {
}
}
- new_img.get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
+ new_img->get_mipmap_offset_size_and_dimensions(i, ofs, size, w, h);
Javelin::PvrTcEncoder::EncodeRgba4Bpp(&wr[ofs], bm);
}
}
- *p_img = Image(new_img.get_width(), new_img.get_height(), new_img.has_mipmaps(), new_img.get_format(), data);
+ p_img->create(new_img->get_width(), new_img->get_height(), new_img->has_mipmaps(), new_img->get_format(), data);
}
ResourceFormatPVR::ResourceFormatPVR() {
@@ -676,8 +678,7 @@ static void _pvrtc_decompress(Image *p_img) {
r = PoolVector<uint8_t>::Read();
bool make_mipmaps = p_img->has_mipmaps();
- Image newimg(p_img->get_width(), p_img->get_height(), false, Image::FORMAT_RGBA8, newdata);
+ p_img->create(p_img->get_width(), p_img->get_height(), false, Image::FORMAT_RGBA8, newdata);
if (make_mipmaps)
- newimg.generate_mipmaps();
- *p_img = newimg;
+ p_img->generate_mipmaps();
}
diff --git a/modules/squish/image_compress_squish.cpp b/modules/squish/image_compress_squish.cpp
index c6835d4b62..3f7ad8b2c2 100644
--- a/modules/squish/image_compress_squish.cpp
+++ b/modules/squish/image_compress_squish.cpp
@@ -31,6 +31,12 @@
#include "print_string.h"
+#if defined(__SSE2__)
+#define SQUISH_USE_SSE 2
+#elif defined(__SSE__)
+#define SQUISH_USE_SSE 1
+#endif
+
#include <squish.h>
void image_compress_squish(Image *p_image) {
diff --git a/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp b/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp
index 227e5e61b6..c645a55703 100644
--- a/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp
+++ b/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp
@@ -30,7 +30,8 @@
#include "audio_stream_ogg_vorbis.h"
#include "os/file_access.h"
-#include "thirdparty/stb_vorbis/stb_vorbis.c"
+
+#include "thirdparty/misc/stb_vorbis.c"
void AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_frames) {
@@ -42,6 +43,7 @@ void AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_fra
int mixed = stb_vorbis_get_samples_float_interleaved(ogg_stream, 2, (float *)p_buffer, todo * 2);
todo -= mixed;
+ frames_mixed += mixed;
if (todo) {
//end of file!
@@ -66,8 +68,8 @@ float AudioStreamPlaybackOGGVorbis::get_stream_sampling_rate() {
void AudioStreamPlaybackOGGVorbis::start(float p_from_pos) {
- seek_pos(p_from_pos);
active = true;
+ seek_pos(p_from_pos);
loops = 0;
_begin_resample();
}
@@ -95,7 +97,12 @@ void AudioStreamPlaybackOGGVorbis::seek_pos(float p_time) {
if (!active)
return;
- stb_vorbis_seek(ogg_stream, uint32_t(p_time * vorbis_stream->sample_rate));
+ if (p_time >= get_length()) {
+ p_time = 0;
+ }
+ frames_mixed = uint32_t(vorbis_stream->sample_rate * p_time);
+
+ stb_vorbis_seek(ogg_stream, frames_mixed);
}
float AudioStreamPlaybackOGGVorbis::get_length() const {
diff --git a/modules/stb_vorbis/audio_stream_ogg_vorbis.h b/modules/stb_vorbis/audio_stream_ogg_vorbis.h
index bb895c4dfa..287aa4ca47 100644
--- a/modules/stb_vorbis/audio_stream_ogg_vorbis.h
+++ b/modules/stb_vorbis/audio_stream_ogg_vorbis.h
@@ -34,7 +34,7 @@
#include "servers/audio/audio_stream.h"
#define STB_VORBIS_HEADER_ONLY
-#include "thirdparty/stb_vorbis/stb_vorbis.c"
+#include "thirdparty/misc/stb_vorbis.c"
#undef STB_VORBIS_HEADER_ONLY
class AudioStreamOGGVorbis;
diff --git a/modules/theora/video_stream_theora.cpp b/modules/theora/video_stream_theora.cpp
index 28463e2cba..d895f60280 100644
--- a/modules/theora/video_stream_theora.cpp
+++ b/modules/theora/video_stream_theora.cpp
@@ -31,7 +31,8 @@
#include "global_config.h"
#include "os/os.h"
-#include "yuv2rgb.h"
+
+#include "thirdparty/misc/yuv2rgb.h"
int VideoStreamPlaybackTheora::buffer_data() {
@@ -137,7 +138,7 @@ void VideoStreamPlaybackTheora::video_write(void) {
format = Image::FORMAT_RGBA8;
}
- Image img(size.x, size.y, 0, Image::FORMAT_RGBA8, frame_data); //zero copy image creation
+ Ref<Image> img = memnew(Image(size.x, size.y, 0, Image::FORMAT_RGBA8, frame_data)); //zero copy image creation
texture->set_data(img); //zero copy send to visual server
diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp
index 53521c55a7..aec60391d3 100644
--- a/modules/visual_script/visual_script.cpp
+++ b/modules/visual_script/visual_script.cpp
@@ -1073,6 +1073,18 @@ void VisualScript::get_script_property_list(List<PropertyInfo> *p_list) const {
}
}
+int VisualScript::get_member_line(const StringName &p_member) const {
+#ifdef TOOLS_ENABLED
+ if (has_function(p_member)) {
+ for (Map<int, Function::NodeData>::Element *E = functions[p_member].nodes.front(); E; E = E->next()) {
+ if (E->get().node->cast_to<VisualScriptFunction>())
+ return E->key();
+ }
+ }
+#endif
+ return -1;
+}
+
#ifdef TOOLS_ENABLED
bool VisualScript::are_subnodes_edited() const {
diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h
index ee8ed2c965..273a819611 100644
--- a/modules/visual_script/visual_script.h
+++ b/modules/visual_script/visual_script.h
@@ -356,6 +356,8 @@ public:
virtual void get_script_property_list(List<PropertyInfo> *p_list) const;
+ virtual int get_member_line(const StringName &p_member) const;
+
#ifdef TOOLS_ENABLED
virtual bool are_subnodes_edited() const;
#endif
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp
index 7247636920..340e2fe637 100644
--- a/modules/visual_script/visual_script_editor.cpp
+++ b/modules/visual_script/visual_script_editor.cpp
@@ -346,7 +346,6 @@ static Color _color_from_type(Variant::Type p_type) {
case Variant::TRANSFORM: color = Color::html("f6a86e"); break;
case Variant::COLOR: color = Color::html("9dff70"); break;
- case Variant::IMAGE: color = Color::html("93f1b9"); break;
case Variant::NODE_PATH: color = Color::html("6993ec"); break;
case Variant::_RID: color = Color::html("69ec9a"); break;
case Variant::OBJECT: color = Color::html("79f3e8"); break;
@@ -451,7 +450,6 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
Control::get_icon("MiniBasis", "EditorIcons"),
Control::get_icon("MiniTransform", "EditorIcons"),
Control::get_icon("MiniColor", "EditorIcons"),
- Control::get_icon("MiniImage", "EditorIcons"),
Control::get_icon("MiniPath", "EditorIcons"),
Control::get_icon("MiniRid", "EditorIcons"),
Control::get_icon("MiniObject", "EditorIcons"),
@@ -490,7 +488,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
}
if (EditorSettings::get_singleton()->has("editors/visual_script/color_" + node->get_category())) {
- gnode->set_modulate(EditorSettings::get_singleton()->get("editors/visual_script/color_" + node->get_category()));
+ gnode->set_self_modulate(EditorSettings::get_singleton()->get("editors/visual_script/color_" + node->get_category()));
}
gnode->set_meta("__vnode", node);
@@ -735,7 +733,6 @@ void VisualScriptEditor::_update_members() {
Control::get_icon("MiniMatrix3", "EditorIcons"),
Control::get_icon("MiniTransform", "EditorIcons"),
Control::get_icon("MiniColor", "EditorIcons"),
- Control::get_icon("MiniImage", "EditorIcons"),
Control::get_icon("MiniPath", "EditorIcons"),
Control::get_icon("MiniRid", "EditorIcons"),
Control::get_icon("MiniObject", "EditorIcons"),
@@ -2153,7 +2150,7 @@ void VisualScriptEditor::goto_line(int p_line, bool p_with_error) {
_update_graph();
_update_members();
- call_deferred("_center_on_node", p_line); //editor might be just created and size might not exist yet
+ call_deferred("call_deferred", "_center_on_node", p_line); //editor might be just created and size might not exist yet
return;
}
@@ -2163,6 +2160,12 @@ void VisualScriptEditor::goto_line(int p_line, bool p_with_error) {
void VisualScriptEditor::trim_trailing_whitespace() {
}
+void VisualScriptEditor::convert_indent_to_spaces() {
+}
+
+void VisualScriptEditor::convert_indent_to_tabs() {
+}
+
void VisualScriptEditor::ensure_focus() {
graph->grab_focus();
@@ -2192,18 +2195,6 @@ void VisualScriptEditor::get_breakpoints(List<int> *p_breakpoints) {
}
}
-bool VisualScriptEditor::goto_method(const String &p_method) {
-
- if (!script->has_function(p_method))
- return false;
-
- edited_func = p_method;
- selected = edited_func;
- _update_members();
- _update_graph();
- return true;
-}
-
void VisualScriptEditor::add_callback(const String &p_function, PoolStringArray p_args) {
if (script->has_function(p_function)) {
@@ -2839,7 +2830,7 @@ void VisualScriptEditor::_node_filter_changed(const String &p_text) {
void VisualScriptEditor::_notification(int p_what) {
if (p_what == NOTIFICATION_READY) {
- node_filter_icon->set_texture(Control::get_icon("Zoom", "EditorIcons"));
+ node_filter_icon->set_texture(Control::get_icon("Search", "EditorIcons"));
}
}
diff --git a/modules/visual_script/visual_script_editor.h b/modules/visual_script/visual_script_editor.h
index 7322da5cfb..1fd97cc1bc 100644
--- a/modules/visual_script/visual_script_editor.h
+++ b/modules/visual_script/visual_script_editor.h
@@ -240,11 +240,12 @@ public:
virtual void set_edit_state(const Variant &p_state);
virtual void goto_line(int p_line, bool p_with_error = false);
virtual void trim_trailing_whitespace();
+ virtual void convert_indent_to_spaces();
+ virtual void convert_indent_to_tabs();
virtual void ensure_focus();
virtual void tag_saved_version();
virtual void reload(bool p_soft);
virtual void get_breakpoints(List<int> *p_breakpoints);
- virtual bool goto_method(const String &p_method);
virtual void add_callback(const String &p_function, PoolStringArray p_args);
virtual void update_settings();
virtual void set_debugger_active(bool p_active);
diff --git a/modules/webm/libvpx/SCsub b/modules/webm/libvpx/SCsub
index 241d6e30cd..0ee2ed45b8 100644
--- a/modules/webm/libvpx/SCsub
+++ b/modules/webm/libvpx/SCsub
@@ -273,7 +273,7 @@ else:
webm_cpu_x86 = True
else:
webm_cpu_x86 = not is_x11_or_server_arm and (cpu_bits == '32' or cpu_bits == '64') and (env["platform"] == 'windows' or env["platform"] == 'x11' or env["platform"] == 'osx' or env["platform"] == 'haiku' or is_android_x86 or is_ios_x86)
- webm_cpu_arm = is_x11_or_server_arm or (not is_ios_x86 and env["platform"] == 'iphone') or env["platform"] == 'bb10' or (not is_android_x86 and env["platform"] == 'android')
+ webm_cpu_arm = is_x11_or_server_arm or (not is_ios_x86 and env["platform"] == 'iphone') or (not is_android_x86 and env["platform"] == 'android')
if webm_cpu_x86:
import subprocess
diff --git a/modules/webm/video_stream_webm.cpp b/modules/webm/video_stream_webm.cpp
index 9d8062d283..eaf4215302 100644
--- a/modules/webm/video_stream_webm.cpp
+++ b/modules/webm/video_stream_webm.cpp
@@ -32,12 +32,13 @@
#include "OpusVorbisDecoder.hpp"
#include "VPXDecoder.hpp"
-#include "../theora/yuv2rgb.h"
#include "mkvparser/mkvparser.h"
#include "global_config.h"
#include "os/file_access.h"
+#include "thirdparty/misc/yuv2rgb.h"
+
#include <string.h>
class MkvReader : public mkvparser::IMkvReader {
diff --git a/modules/webp/image_loader_webp.cpp b/modules/webp/image_loader_webp.cpp
index 39c8f812ac..7313cb6c7c 100644
--- a/modules/webp/image_loader_webp.cpp
+++ b/modules/webp/image_loader_webp.cpp
@@ -37,23 +37,23 @@
#include <webp/decode.h>
#include <webp/encode.h>
-static PoolVector<uint8_t> _webp_lossy_pack(const Image &p_image, float p_quality) {
+static PoolVector<uint8_t> _webp_lossy_pack(const Ref<Image> &p_image, float p_quality) {
- ERR_FAIL_COND_V(p_image.empty(), PoolVector<uint8_t>());
+ ERR_FAIL_COND_V(p_image.is_null() || p_image->empty(), PoolVector<uint8_t>());
- Image img = p_image;
- if (img.detect_alpha())
- img.convert(Image::FORMAT_RGBA8);
+ Ref<Image> img = p_image->duplicate();
+ if (img->detect_alpha())
+ img->convert(Image::FORMAT_RGBA8);
else
- img.convert(Image::FORMAT_RGB8);
+ img->convert(Image::FORMAT_RGB8);
- Size2 s(img.get_width(), img.get_height());
- PoolVector<uint8_t> data = img.get_data();
+ Size2 s(img->get_width(), img->get_height());
+ PoolVector<uint8_t> data = img->get_data();
PoolVector<uint8_t>::Read r = data.read();
uint8_t *dst_buff = NULL;
size_t dst_size = 0;
- if (img.get_format() == Image::FORMAT_RGB8) {
+ if (img->get_format() == Image::FORMAT_RGB8) {
dst_size = WebPEncodeRGB(r.ptr(), s.width, s.height, 3 * s.width, CLAMP(p_quality * 100.0, 0, 100.0), &dst_buff);
} else {
@@ -74,22 +74,24 @@ static PoolVector<uint8_t> _webp_lossy_pack(const Image &p_image, float p_qualit
return dst;
}
-static Image _webp_lossy_unpack(const PoolVector<uint8_t> &p_buffer) {
+static Ref<Image> _webp_lossy_unpack(const PoolVector<uint8_t> &p_buffer) {
int size = p_buffer.size() - 4;
- ERR_FAIL_COND_V(size <= 0, Image());
+ ERR_FAIL_COND_V(size <= 0, Ref<Image>());
PoolVector<uint8_t>::Read r = p_buffer.read();
- ERR_FAIL_COND_V(r[0] != 'W' || r[1] != 'E' || r[2] != 'B' || r[3] != 'P', Image());
+ ERR_FAIL_COND_V(r[0] != 'W' || r[1] != 'E' || r[2] != 'B' || r[3] != 'P', Ref<Image>());
WebPBitstreamFeatures features;
if (WebPGetFeatures(&r[4], size, &features) != VP8_STATUS_OK) {
ERR_EXPLAIN("Error unpacking WEBP image:");
- ERR_FAIL_V(Image());
+ ERR_FAIL_V(Ref<Image>());
}
- //print_line("width: "+itos(features.width));
- //print_line("height: "+itos(features.height));
- //print_line("alpha: "+itos(features.has_alpha));
+ /*
+ print_line("width: "+itos(features.width));
+ print_line("height: "+itos(features.height));
+ print_line("alpha: "+itos(features.has_alpha));
+ */
PoolVector<uint8_t> dst_image;
int datasize = features.width * features.height * (features.has_alpha ? 4 : 3);
@@ -105,14 +107,15 @@ static Image _webp_lossy_unpack(const PoolVector<uint8_t> &p_buffer) {
}
//ERR_EXPLAIN("Error decoding webp! - "+p_file);
- ERR_FAIL_COND_V(errdec, Image());
+ ERR_FAIL_COND_V(errdec, Ref<Image>());
dst_w = PoolVector<uint8_t>::Write();
- return Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
+ Ref<Image> img = memnew(Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image));
+ return img;
}
-Error ImageLoaderWEBP::load_image(Image *p_image, FileAccess *f) {
+Error ImageLoaderWEBP::load_image(Ref<Image> p_image, FileAccess *f) {
uint32_t size = f->get_len();
PoolVector<uint8_t> src_image;
@@ -130,9 +133,11 @@ Error ImageLoaderWEBP::load_image(Image *p_image, FileAccess *f) {
ERR_FAIL_V(ERR_FILE_CORRUPT);
}
+ /*
print_line("width: " + itos(features.width));
print_line("height: " + itos(features.height));
print_line("alpha: " + itos(features.has_alpha));
+ */
src_w = PoolVector<uint8_t>::Write();
@@ -156,7 +161,7 @@ Error ImageLoaderWEBP::load_image(Image *p_image, FileAccess *f) {
src_r = PoolVector<uint8_t>::Read();
dst_w = PoolVector<uint8_t>::Write();
- *p_image = Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
+ p_image->create(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
return OK;
}
diff --git a/modules/webp/image_loader_webp.h b/modules/webp/image_loader_webp.h
index 2d0ac796d3..ba817e0ecd 100644
--- a/modules/webp/image_loader_webp.h
+++ b/modules/webp/image_loader_webp.h
@@ -38,7 +38,7 @@
class ImageLoaderWEBP : public ImageFormatLoader {
public:
- virtual Error load_image(Image *p_image, FileAccess *f);
+ virtual Error load_image(Ref<Image> p_image, FileAccess *f);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
ImageLoaderWEBP();
};
diff --git a/platform/android/build.gradle.template b/platform/android/build.gradle.template
index 8dfb006c00..2732fc3c29 100644
--- a/platform/android/build.gradle.template
+++ b/platform/android/build.gradle.template
@@ -3,7 +3,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0'
+ classpath 'com.android.tools.build:gradle:2.3.1'
$$GRADLE_CLASSPATH$$
}
}
@@ -31,7 +31,7 @@ android {
}
compileSdkVersion 23
- buildToolsVersion "23.0.3"
+ buildToolsVersion "25.0.3"
useLibrary 'org.apache.http.legacy'
packagingOptions {
@@ -66,6 +66,7 @@ android {
$$GRADLE_ASSET_DIRS$$
]
jniLibs.srcDirs = [
+ 'libs'
$$GRADLE_JNI_DIRS$$
]
}
diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp
index 72d665329e..84fc4f10bf 100644
--- a/platform/android/export/export.cpp
+++ b/platform/android/export/export.cpp
@@ -3523,7 +3523,7 @@ public:
EditorExportAndroid() {
- Image img(_android_logo);
+ Ref<Image> img = memnew(Image(_android_logo));
logo = Ref<ImageTexture>(memnew(ImageTexture));
logo->create_from_image(img);
diff --git a/platform/android/java/gradle/wrapper/gradle-wrapper.properties b/platform/android/java/gradle/wrapper/gradle-wrapper.properties
index d57051703e..a11cc1b825 100644
--- a/platform/android/java/gradle/wrapper/gradle-wrapper.properties
+++ b/platform/android/java/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
-#Wed Apr 10 15:27:10 PDT 2013
+#Fri May 12 08:50:03 KST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip
+org.gradle.jvmargs=-Xmx1536M
diff --git a/platform/android/java/res/drawable/icon.png b/platform/android/java/res/drawable/icon.png
index a0a0f4af25..29c4a7b8fc 100644
--- a/platform/android/java/res/drawable/icon.png
+++ b/platform/android/java/res/drawable/icon.png
Binary files differ
diff --git a/platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.java b/platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.java
index d90d6eac7b..63720999a7 100644
--- a/platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.java
+++ b/platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.java
@@ -1,4 +1,20 @@
/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: aidl/ILicenseResultListener.aidl
*/
diff --git a/platform/android/java/src/com/android/vending/licensing/ILicensingService.java b/platform/android/java/src/com/android/vending/licensing/ILicensingService.java
index 95599544e4..36afc0537d 100644
--- a/platform/android/java/src/com/android/vending/licensing/ILicensingService.java
+++ b/platform/android/java/src/com/android/vending/licensing/ILicensingService.java
@@ -1,4 +1,20 @@
/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: aidl/ILicensingService.aidl
*/
diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java b/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java
index ae3fe957cb..fb56f917be 100644
--- a/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java
+++ b/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java
@@ -221,7 +221,11 @@ public class Helpers {
static public String getSaveFilePath(Context c) {
File root = Environment.getExternalStorageDirectory();
- String path = Build.VERSION.SDK_INT >= 23 ? Constants.EXP_PATH_API23 : Constants.EXP_PATH;
+ // this makes several issues with Android SDK >= 23 devices.
+ // https://github.com/danikula/Google-Play-Expansion-File/commit/93a03bd34acad67c6ea34cfb6c3f02c93bdcea85
+ // https://issuetracker.google.com/issues/37075181
+ //String path = Build.VERSION.SDK_INT >= 23 ? Constants.EXP_PATH_API23 : Constants.EXP_PATH;
+ String path = Constants.EXP_PATH;
return root.toString() + path + c.getPackageName();
}
diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java
index 627bf3eedd..e83faa2756 100644
--- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java
+++ b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java
@@ -569,10 +569,10 @@ public abstract class DownloaderService extends CustomIntentService implements I
*/
void pollNetworkState() {
if (null == mConnectivityManager) {
- mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+ mConnectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
}
if (null == mWifiManager) {
- mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
+ mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
}
if (mConnectivityManager == null) {
Log.w(Constants.TAG,
diff --git a/platform/android/power_android.cpp b/platform/android/power_android.cpp
index 57977dd4b9..bb5a1db250 100644
--- a/platform/android/power_android.cpp
+++ b/platform/android/power_android.cpp
@@ -28,10 +28,35 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#include "core/error_macros.h"
+/*
+Adapted from corresponding SDL 2.0 code.
+*/
+
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
#include "power_android.h"
+#include "core/error_macros.h"
+
static void LocalReferenceHolder_Cleanup(struct LocalReferenceHolder *refholder) {
if (refholder->m_env) {
JNIEnv *env = refholder->m_env;
diff --git a/platform/bb10/SCsub b/platform/bb10/SCsub
deleted file mode 100644
index c19f46d579..0000000000
--- a/platform/bb10/SCsub
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-Import('env')
-
-bb10_lib = [
-
- 'bbutil.c',
- 'os_bb10.cpp',
- 'audio_driver_bb10.cpp',
- 'godot_bb10.cpp',
- 'payment_service.cpp',
-]
-
-env_bps = env.Clone()
-if env['bb10_payment_service'] == "yes":
- env_bps.Append(CPPFLAGS=['-DPAYMENT_SERVICE_ENABLED'])
-
-if env['bb10_lgles_override'] == "yes":
- env_bps.Append(CPPFLAGS=['-DBB10_LGLES_OVERRIDE'])
-
-
-prog = None
-prog = env_bps.Program('#bin/godot', bb10_lib)
diff --git a/platform/bb10/audio_driver_bb10.cpp b/platform/bb10/audio_driver_bb10.cpp
deleted file mode 100644
index 5658dc5334..0000000000
--- a/platform/bb10/audio_driver_bb10.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/*************************************************************************/
-/* audio_driver_bb10.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "audio_driver_bb10.h"
-
-#include <errno.h>
-
-Error AudioDriverBB10::init() {
- return init(NULL);
-};
-
-Error AudioDriverBB10::init(const char *p_name) {
-
- active = false;
- thread_exited = false;
- exit_thread = false;
- pcm_open = false;
- samples_in = NULL;
- samples_out = NULL;
-
- mix_rate = 44100;
- speaker_mode = SPEAKER_MODE_STEREO;
-
- char *dev_name;
- if (p_name == NULL) {
- dev_name = "pcmPreferred";
- } else {
- dev_name = (char *)p_name;
- }
- printf("******** reconnecting to device %s\n", dev_name);
- int ret = snd_pcm_open_name(&pcm_handle, dev_name, SND_PCM_OPEN_PLAYBACK);
- ERR_FAIL_COND_V(ret < 0, FAILED);
- pcm_open = true;
-
- snd_pcm_channel_info_t cinfo;
- zeromem(&cinfo, sizeof(cinfo));
- cinfo.channel = SND_PCM_CHANNEL_PLAYBACK;
- snd_pcm_plugin_info(pcm_handle, &cinfo);
-
- printf("rates %i, %i, %i, %i, %i\n", cinfo.rates, cinfo.rates & SND_PCM_RATE_44100, cinfo.rates & SND_PCM_RATE_32000, cinfo.rates & SND_PCM_RATE_22050, cinfo.max_rate);
-
- mix_rate = cinfo.max_rate;
-
- printf("formats %i, %i, %i\n", cinfo.formats, cinfo.formats & SND_PCM_FMT_S16_BE, cinfo.formats & SND_PCM_FMT_S16_LE);
- ERR_FAIL_COND_V(!(cinfo.formats & SND_PCM_FMT_S16_LE), FAILED);
-
- printf("voices %i\n", cinfo.max_voices);
- speaker_mode = SPEAKER_MODE_STEREO;
-
- snd_pcm_channel_params_t cp;
- zeromem(&cp, sizeof(cp));
- cp.mode = SND_PCM_MODE_BLOCK;
- cp.channel = SND_PCM_CHANNEL_PLAYBACK;
- cp.start_mode = SND_PCM_START_DATA;
- cp.stop_mode = SND_PCM_STOP_STOP;
- //cp.buf.block.frag_size = cinfo.max_fragment_size;
- cp.buf.block.frag_size = 512;
- cp.buf.block.frags_max = 1;
- cp.buf.block.frags_min = 1;
- cp.format.interleave = 1;
- cp.format.rate = mix_rate;
- cp.format.voices = speaker_mode;
- cp.format.format = SND_PCM_SFMT_S16_LE;
-
- ret = snd_pcm_plugin_params(pcm_handle, &cp);
- printf("ret is %i, %i\n", ret, cp.why_failed);
- ERR_FAIL_COND_V(ret < 0, FAILED);
-
- ret = snd_pcm_plugin_prepare(pcm_handle, SND_PCM_CHANNEL_PLAYBACK);
- ERR_FAIL_COND_V(ret < 0, FAILED);
-
- snd_mixer_group_t group;
- zeromem(&group, sizeof(group));
- snd_pcm_channel_setup_t setup;
- zeromem(&setup, sizeof(setup));
- setup.channel = SND_PCM_CHANNEL_PLAYBACK;
- setup.mode = SND_PCM_MODE_BLOCK;
- setup.mixer_gid = &group.gid;
- ret = snd_pcm_plugin_setup(pcm_handle, &setup);
- ERR_FAIL_COND_V(ret < 0, FAILED);
-
- pcm_frag_size = setup.buf.block.frag_size;
- pcm_max_frags = 1;
-
- sample_buf_count = pcm_frag_size * pcm_max_frags / 2;
- printf("sample count %i, %i, %i\n", sample_buf_count, pcm_frag_size, pcm_max_frags);
- samples_in = memnew_arr(int32_t, sample_buf_count);
- samples_out = memnew_arr(int16_t, sample_buf_count);
-
- thread = Thread::create(AudioDriverBB10::thread_func, this);
-
- return OK;
-};
-
-void AudioDriverBB10::thread_func(void *p_udata) {
-
- AudioDriverBB10 *ad = (AudioDriverBB10 *)p_udata;
-
- int channels = speaker_mode;
- int frame_count = ad->sample_buf_count / channels;
- int bytes_out = frame_count * channels * 2;
-
- while (!ad->exit_thread) {
-
- if (!ad->active) {
-
- for (int i = 0; i < ad->sample_buf_count; i++) {
-
- ad->samples_out[i] = 0;
- };
- } else {
-
- ad->lock();
-
- ad->audio_server_process(frame_count, ad->samples_in);
-
- ad->unlock();
-
- for (int i = 0; i < frame_count * channels; i++) {
-
- ad->samples_out[i] = ad->samples_in[i] >> 16;
- }
- };
-
- int todo = bytes_out;
- int total = 0;
-
- while (todo) {
-
- uint8_t *src = (uint8_t *)ad->samples_out;
- int wrote = snd_pcm_plugin_write(ad->pcm_handle, (void *)(src + total), todo);
- if (wrote < 0) {
- // error?
- break;
- };
- total += wrote;
- todo -= wrote;
- if (wrote < todo) {
- if (ad->thread_exited) {
- break;
- };
- printf("pcm_write underrun %i, errno %i\n", (int)ad->thread_exited, errno);
- snd_pcm_channel_status_t status;
- zeromem(&status, sizeof(status));
- // put in non-blocking mode
- snd_pcm_nonblock_mode(ad->pcm_handle, 1);
- status.channel = SND_PCM_CHANNEL_PLAYBACK;
- int ret = snd_pcm_plugin_status(ad->pcm_handle, &status);
- //printf("status return %i, %i, %i, %i, %i\n", ret, errno, status.status, SND_PCM_STATUS_READY, SND_PCM_STATUS_UNDERRUN);
- snd_pcm_nonblock_mode(ad->pcm_handle, 0);
- if (ret < 0) {
- break;
- };
- if (status.status == SND_PCM_STATUS_READY ||
- status.status == SND_PCM_STATUS_UNDERRUN) {
- snd_pcm_plugin_prepare(ad->pcm_handle, SND_PCM_CHANNEL_PLAYBACK);
- } else {
- break;
- };
- };
- };
- };
-
- snd_pcm_plugin_flush(ad->pcm_handle, SND_PCM_CHANNEL_PLAYBACK);
-
- ad->thread_exited = true;
- printf("**************** audio thread exit\n");
-};
-
-void AudioDriverBB10::start() {
-
- active = true;
-};
-
-int AudioDriverBB10::get_mix_rate() const {
-
- return mix_rate;
-};
-
-AudioDriver::SpeakerMode AudioDriverBB10::get_speaker_mode() const {
-
- return speaker_mode;
-};
-
-void AudioDriverBB10::lock() {
-
- if (!thread)
- return;
- mutex->lock();
-};
-
-void AudioDriverBB10::unlock() {
-
- if (!thread)
- return;
- mutex->unlock();
-};
-
-void AudioDriverBB10::finish() {
-
- if (!thread)
- return;
-
- exit_thread = true;
- Thread::wait_to_finish(thread);
-
- if (pcm_open)
- snd_pcm_close(pcm_handle);
-
- if (samples_in) {
- memdelete_arr(samples_in);
- memdelete_arr(samples_out);
- };
-
- memdelete(thread);
- thread = NULL;
-};
-
-AudioDriverBB10::AudioDriverBB10() {
-
- mutex = Mutex::create();
-};
-
-AudioDriverBB10::~AudioDriverBB10() {
-
- memdelete(mutex);
- mutex = NULL;
-};
diff --git a/platform/bb10/audio_driver_bb10.h b/platform/bb10/audio_driver_bb10.h
deleted file mode 100644
index c5d64236b8..0000000000
--- a/platform/bb10/audio_driver_bb10.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*************************************************************************/
-/* audio_driver_bb10.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "servers/audio_server.h"
-
-#include "core/os/mutex.h"
-#include "core/os/thread.h"
-
-#include <sys/asoundlib.h>
-
-class AudioDriverBB10 : public AudioDriver {
-
- Thread *thread;
- Mutex *mutex;
-
- snd_pcm_t *pcm_handle;
-
- int32_t *samples_in;
- int16_t *samples_out;
- int sample_buf_count;
-
- static void thread_func(void *p_udata);
-
- int mix_rate;
- SpeakerMode speaker_mode;
-
- int pcm_frag_size;
- int pcm_max_frags;
-
- bool active;
- bool thread_exited;
- mutable bool exit_thread;
- bool pcm_open;
-
-public:
- const char *get_name() const {
- return "BB10";
- };
-
- virtual Error init();
- virtual Error init(const char *p_name);
- virtual void start();
- virtual int get_mix_rate() const;
- virtual SpeakerMode get_speaker_mode() const;
- virtual void lock();
- virtual void unlock();
- virtual void finish();
-
- AudioDriverBB10();
- ~AudioDriverBB10();
-};
diff --git a/platform/bb10/bar/bar-descriptor.xml b/platform/bb10/bar/bar-descriptor.xml
deleted file mode 100644
index 0ba70b7180..0000000000
--- a/platform/bb10/bar/bar-descriptor.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version='1.0' encoding='utf-8' standalone='no'?>
-<qnx xmlns="http://www.qnx.com/schemas/application/1.0">
- <!-- BlackBerry® 10 application descriptor file.
-
- Specifies parameters for identifying, installing, and launching native applications on BlackBerry® 10 OS.
--->
- <!-- A universally unique application identifier. Must be unique across all BlackBerry applications.
- Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
- <id>com.godot.game</id>
- <!-- The name that is displayed in the BlackBerry application installer.
- May have multiple values for each language. See samples or xsd schema file. Optional. -->
- <name>Godot Game</name>
- <!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
- Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
- An updated version of application must have a versionNumber value higher than the previous version. Required. -->
- <versionNumber>0.0.1</versionNumber>
- <!-- Fourth digit segment of the package version. First three segments are taken from the
- <versionNumber> element. Must be an integer from 0 to 2^16-1 -->
- <buildId>0</buildId>
- <!-- Description, displayed in the BlackBerry application installer.
- May have multiple values for each language. See samples or xsd schema file. Optional. -->
- <description>Game made with Godot Engine</description>
- <!-- Name of author which is used for signing. Must match the developer name of your development certificate. -->
- <author>You Name or Company</author>
- <authorId>authorIDherePlease</authorId>
- <!-- Unique author ID assigned by signing authority. Required if using debug tokens. -->
- <!-- <authorId>ABC1234YjsnUk235h</authorId> -->
- <initialWindow>
- <aspectRatio>landscape</aspectRatio>
- <autoOrients>false</autoOrients>
- <systemChrome>none</systemChrome>
- <transparent>false</transparent>
- </initialWindow>
- <!-- The category where the application appears. Either core.games or core.media. -->
- <category>core.games</category>
- <permission>read_device_identifying_information</permission>
- <permission>access_internet</permission>
- <asset path="data.pck">data.pck</asset>
- <configuration name="Device-Debug">
- <platformArchitecture>armle-v7</platformArchitecture>
- <asset type="Qnx/Elf" path="godot.bb10.debug.qnx.armle" entry="true">godot.bb10.debug.qnx.armle</asset>
- </configuration>
- <configuration name="Device-Release">
- <platformArchitecture>armle-v7</platformArchitecture>
- <asset type="Qnx/Elf" path="godot.bb10.opt.qnx.armle" entry="true">godot.bb10.opt.qnx.armle</asset>
- </configuration>
- <!-- The icon for the application. -->
- <icon>
- <image>icon.png</image>
- </icon>
- <!-- Ensure that shared libraries in the package are found at run-time. -->
- <env value="app/native/lib:/usr/lib/qt4/lib" var="LD_LIBRARY_PATH"/>
-</qnx>
diff --git a/platform/bb10/bar/icon.png b/platform/bb10/bar/icon.png
deleted file mode 100644
index 2161402438..0000000000
--- a/platform/bb10/bar/icon.png
+++ /dev/null
Binary files differ
diff --git a/platform/bb10/bbutil.c b/platform/bb10/bbutil.c
deleted file mode 100644
index ab3dcf69b2..0000000000
--- a/platform/bb10/bbutil.c
+++ /dev/null
@@ -1,513 +0,0 @@
-#include <assert.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/keycodes.h>
-#include <time.h>
-
-#include "bbutil.h"
-
-EGLDisplay egl_disp;
-EGLSurface egl_surf;
-
-static EGLConfig egl_conf;
-static EGLContext egl_ctx;
-
-static screen_context_t screen_ctx;
-static screen_window_t screen_win;
-static screen_display_t screen_disp;
-
-
-static void
-bbutil_egl_perror(const char *msg) {
- static const char *errmsg[] = {
- "function succeeded",
- "EGL is not initialized, or could not be initialized, for the specified display",
- "cannot access a requested resource",
- "failed to allocate resources for the requested operation",
- "an unrecognized attribute or attribute value was passed in an attribute list",
- "an EGLConfig argument does not name a valid EGLConfig",
- "an EGLContext argument does not name a valid EGLContext",
- "the current surface of the calling thread is no longer valid",
- "an EGLDisplay argument does not name a valid EGLDisplay",
- "arguments are inconsistent",
- "an EGLNativePixmapType argument does not refer to a valid native pixmap",
- "an EGLNativeWindowType argument does not refer to a valid native window",
- "one or more argument values are invalid",
- "an EGLSurface argument does not name a valid surface configured for rendering",
- "a power management event has occurred",
- };
-
- fprintf(stderr, "%s: %s\n", msg, errmsg[eglGetError() - EGL_SUCCESS]);
-}
-EGLConfig bbutil_choose_config(EGLDisplay egl_disp, enum RENDERING_API api) {
- EGLConfig egl_conf = (EGLConfig)0;
- EGLConfig *egl_configs;
- EGLint egl_num_configs;
- EGLint val;
- EGLBoolean rc;
- EGLint i;
-
- rc = eglGetConfigs(egl_disp, NULL, 0, &egl_num_configs);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglGetConfigs");
- return egl_conf;
- }
- if (egl_num_configs == 0) {
- fprintf(stderr, "eglGetConfigs: could not find a configuration\n");
- return egl_conf;
- }
-
- egl_configs = malloc(egl_num_configs * sizeof(*egl_configs));
- if (egl_configs == NULL) {
- fprintf(stderr, "could not allocate memory for %d EGL configs\n", egl_num_configs);
- return egl_conf;
- }
-
- rc = eglGetConfigs(egl_disp, egl_configs,
- egl_num_configs, &egl_num_configs);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglGetConfigs");
- free(egl_configs);
- return egl_conf;
- }
-
- for (i = 0; i < egl_num_configs; i++) {
- eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_SURFACE_TYPE, &val);
- if (!(val & EGL_WINDOW_BIT)) {
- continue;
- }
-
- eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_RENDERABLE_TYPE, &val);
- if (!(val & api)) {
- continue;
- }
-
- eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_DEPTH_SIZE, &val);
- if ((api & (GL_ES_1|GL_ES_2)) && (val == 0)) {
- continue;
- }
-
- eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_RED_SIZE, &val);
- if (val != 8) {
- continue;
- }
- eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_GREEN_SIZE, &val);
- if (val != 8) {
- continue;
- }
-
- eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_BLUE_SIZE, &val);
- if (val != 8) {
- continue;
- }
-
- eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_BUFFER_SIZE, &val);
- if (val != 32) {
- continue;
- }
-
- egl_conf = egl_configs[i];
- break;
- }
-
- free(egl_configs);
-
- if (egl_conf == (EGLConfig)0) {
- fprintf(stderr, "bbutil_choose_config: could not find a matching configuration\n");
- }
-
- return egl_conf;
-}
-
-int
-bbutil_init_egl(screen_context_t ctx, enum RENDERING_API api) {
- int usage;
- int format = SCREEN_FORMAT_RGBX8888;
- int nbuffers = 2;
- EGLint interval = 1;
- int rc;
- EGLint attributes[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
-
- if (api == GL_ES_1) {
- usage = SCREEN_USAGE_OPENGL_ES1 | SCREEN_USAGE_ROTATION;
- } else if (api == GL_ES_2) {
- usage = SCREEN_USAGE_OPENGL_ES2 | SCREEN_USAGE_ROTATION;
- } else if (api == VG) {
- usage = SCREEN_USAGE_OPENVG | SCREEN_USAGE_ROTATION;
- } else {
- fprintf(stderr, "invalid api setting\n");
- return EXIT_FAILURE;
- }
-
- //Simple egl initialization
- screen_ctx = ctx;
-
- egl_disp = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- if (egl_disp == EGL_NO_DISPLAY) {
- bbutil_egl_perror("eglGetDisplay");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = eglInitialize(egl_disp, NULL, NULL);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglInitialize");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- if ((api == GL_ES_1) || (api == GL_ES_2)) {
- rc = eglBindAPI(EGL_OPENGL_ES_API);
- } else if (api == VG) {
- rc = eglBindAPI(EGL_OPENVG_API);
- }
-
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglBindApi");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- egl_conf = bbutil_choose_config(egl_disp, api);
- if (egl_conf == (EGLConfig)0) {
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- if (api == GL_ES_2) {
- egl_ctx = eglCreateContext(egl_disp, egl_conf, EGL_NO_CONTEXT, attributes);
- } else {
- egl_ctx = eglCreateContext(egl_disp, egl_conf, EGL_NO_CONTEXT, NULL);
- }
-
- if (egl_ctx == EGL_NO_CONTEXT) {
- bbutil_egl_perror("eglCreateContext");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = screen_create_window(&screen_win, screen_ctx);
- if (rc) {
- perror("screen_create_window");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_FORMAT, &format);
- if (rc) {
- perror("screen_set_window_property_iv(SCREEN_PROPERTY_FORMAT)");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_USAGE, &usage);
- if (rc) {
- perror("screen_set_window_property_iv(SCREEN_PROPERTY_USAGE)");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = screen_get_window_property_pv(screen_win, SCREEN_PROPERTY_DISPLAY, (void **)&screen_disp);
- if (rc) {
- perror("screen_get_window_property_pv");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- int screen_resolution[2];
-
- rc = screen_get_display_property_iv(screen_disp, SCREEN_PROPERTY_SIZE, screen_resolution);
- if (rc) {
- perror("screen_get_display_property_iv");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- int angle = atoi(getenv("ORIENTATION"));
-
- screen_display_mode_t screen_mode;
- rc = screen_get_display_property_pv(screen_disp, SCREEN_PROPERTY_MODE, (void**)&screen_mode);
- if (rc) {
- perror("screen_get_display_property_pv");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- int size[2];
- rc = screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, size);
- if (rc) {
- perror("screen_get_window_property_iv");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- int buffer_size[2] = {size[0], size[1]};
-
- if ((angle == 0) || (angle == 180)) {
- if (((screen_mode.width > screen_mode.height) && (size[0] < size[1])) ||
- ((screen_mode.width < screen_mode.height) && (size[0] > size[1]))) {
- buffer_size[1] = size[0];
- buffer_size[0] = size[1];
- }
- } else if ((angle == 90) || (angle == 270)){
- if (((screen_mode.width > screen_mode.height) && (size[0] > size[1])) ||
- ((screen_mode.width < screen_mode.height && size[0] < size[1]))) {
- buffer_size[1] = size[0];
- buffer_size[0] = size[1];
- }
- } else {
- fprintf(stderr, "Navigator returned an unexpected orientation angle.\n");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, buffer_size);
- if (rc) {
- perror("screen_set_window_property_iv");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_ROTATION, &angle);
- if (rc) {
- perror("screen_set_window_property_iv");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = screen_create_window_buffers(screen_win, nbuffers);
- if (rc) {
- perror("screen_create_window_buffers");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = screen_create_window_group(screen_win, get_window_group_id());
- if (rc) {
- perror("screen_create_window_group");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
- /* if (screen_create_window_group(screen_win, get_window_group_id()) != 0) goto fail; */
-
- int idle_mode = SCREEN_IDLE_MODE_KEEP_AWAKE;
- screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_IDLE_MODE, &idle_mode);
-
- egl_surf = eglCreateWindowSurface(egl_disp, egl_conf, screen_win, NULL);
- if (egl_surf == EGL_NO_SURFACE) {
- bbutil_egl_perror("eglCreateWindowSurface");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = eglMakeCurrent(egl_disp, egl_surf, egl_surf, egl_ctx);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglMakeCurrent");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- rc = eglSwapInterval(egl_disp, interval);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglSwapInterval");
- bbutil_terminate();
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}
-
-int
-bbutil_init_gl2d() {
-#if 0
- EGLint surface_width, surface_height;
-
- if ((egl_disp == EGL_NO_DISPLAY) || (egl_surf == EGL_NO_SURFACE) ){
- return EXIT_FAILURE;
- }
-
- eglQuerySurface(egl_disp, egl_surf, EGL_WIDTH, &surface_width);
- eglQuerySurface(egl_disp, egl_surf, EGL_HEIGHT, &surface_height);
-
- glShadeModel(GL_SMOOTH);
-
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-
- glViewport(0, 0, surface_width, surface_height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- glOrthof(0.0f, (float)(surface_width) / (float)(surface_height), 0.0f, 1.0f, -1.0f, 1.0f);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-#endif
-
- return EXIT_SUCCESS;
-}
-
-int
-bbutil_init(screen_context_t ctx, enum RENDERING_API api) {
- if (EXIT_SUCCESS != bbutil_init_egl(ctx, api)) {
- return EXIT_FAILURE;
- }
-
- if ((GL_ES_1 == api) && (EXIT_SUCCESS != bbutil_init_gl2d())) {
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}
-
-int bbutil_is_flipped() {
-
- int ret;
- screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_FLIP, &ret);
- return ret;
-};
-
-int bbutil_get_rotation() {
-
- int ret;
- screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_ROTATION, &ret);
- return ret;
-};
-
-
-void
-bbutil_terminate() {
- //Typical EGL cleanup
- if (egl_disp != EGL_NO_DISPLAY) {
- eglMakeCurrent(egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
- if (egl_surf != EGL_NO_SURFACE) {
- eglDestroySurface(egl_disp, egl_surf);
- egl_surf = EGL_NO_SURFACE;
- }
- if (egl_ctx != EGL_NO_CONTEXT) {
- eglDestroyContext(egl_disp, egl_ctx);
- egl_ctx = EGL_NO_CONTEXT;
- }
- if (screen_win != NULL) {
- screen_destroy_window(screen_win);
- screen_win = NULL;
- }
- eglTerminate(egl_disp);
- egl_disp = EGL_NO_DISPLAY;
- }
- eglReleaseThread();
-}
-
-void
-bbutil_swap() {
- int rc = eglSwapBuffers(egl_disp, egl_surf);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglSwapBuffers");
- }
-}
-
-void
-bbutil_clear() {
- glClear(GL_COLOR_BUFFER_BIT);
-}
-
-char *
-get_window_group_id()
-{
- static char s_window_group_id[16] = "";
-
- if (s_window_group_id[0] == '\0') {
- snprintf(s_window_group_id, sizeof(s_window_group_id), "%d", getpid());
- }
-
- return s_window_group_id;
-}
-
-
-int bbutil_rotate_screen_surface(int angle) {
- int rc, rotation, skip = 1, temp;
- EGLint interval = 1;
- int size[2];
-
- if ((angle != 0) && (angle != 90) && (angle != 180) && (angle != 270)) {
- fprintf(stderr, "Invalid angle\n");
- return EXIT_FAILURE;
- }
-
- rc = screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_ROTATION, &rotation);
- if (rc) {
- perror("screen_set_window_property_iv");
- return EXIT_FAILURE;
- }
-
- rc = screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, size);
- if (rc) {
- perror("screen_set_window_property_iv");
- return EXIT_FAILURE;
- }
-
- switch (angle - rotation) {
- case -270:
- case -90:
- case 90:
- case 270:
- temp = size[0];
- size[0] = size[1];
- size[1] = temp;
- skip = 0;
- break;
- }
-
- if (!skip) {
- rc = eglMakeCurrent(egl_disp, NULL, NULL, NULL);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglMakeCurrent");
- return EXIT_FAILURE;
- }
-
- rc = eglDestroySurface(egl_disp, egl_surf);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglMakeCurrent");
- return EXIT_FAILURE;
- }
-
- rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_SOURCE_SIZE, size);
- if (rc) {
- perror("screen_set_window_property_iv");
- return EXIT_FAILURE;
- }
-
- rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, size);
- if (rc) {
- perror("screen_set_window_property_iv");
- return EXIT_FAILURE;
- }
- egl_surf = eglCreateWindowSurface(egl_disp, egl_conf, screen_win, NULL);
- if (egl_surf == EGL_NO_SURFACE) {
- bbutil_egl_perror("eglCreateWindowSurface");
- return EXIT_FAILURE;
- }
-
- rc = eglMakeCurrent(egl_disp, egl_surf, egl_surf, egl_ctx);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglMakeCurrent");
- return EXIT_FAILURE;
- }
-
- rc = eglSwapInterval(egl_disp, interval);
- if (rc != EGL_TRUE) {
- bbutil_egl_perror("eglSwapInterval");
- return EXIT_FAILURE;
- }
- }
-
- rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_ROTATION, &angle);
- if (rc) {
- perror("screen_set_window_property_iv");
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}
-
diff --git a/platform/bb10/bbutil.h b/platform/bb10/bbutil.h
deleted file mode 100644
index 77f4402fbd..0000000000
--- a/platform/bb10/bbutil.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef _UTILITY_H_INCLUDED
-#define _UTILITY_H_INCLUDED
-
-#include <EGL/egl.h>
-#include <GLES2/gl2.h>
-#include <screen/screen.h>
-#include <sys/platform.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern EGLDisplay egl_disp;
-extern EGLSurface egl_surf;
-
-enum RENDERING_API {
- GL_ES_1 = EGL_OPENGL_ES_BIT,
- GL_ES_2 = EGL_OPENGL_ES2_BIT,
- VG = EGL_OPENVG_BIT
-};
-
-/**
- * Initializes EGL, GL and loads a default font
- *
- * \param libscreen context that will be used for EGL setup
- * \return EXIT_SUCCESS if initialization succeeded otherwise EXIT_FAILURE
- */
-int bbutil_init(screen_context_t ctx, enum RENDERING_API api);
-
-/**
- * Initializes EGL
- *
- * \param libscreen context that will be used for EGL setup
- * \return EXIT_SUCCESS if initialization succeeded otherwise EXIT_FAILURE
- */
-int bbutil_init_egl(screen_context_t ctx, enum RENDERING_API api);
-
-/**
- * Initializes GL 1.1 for simple 2D rendering. GL2 initialization will be added at a later point.
- *
- * \return EXIT_SUCCESS if initialization succeeded otherwise EXIT_FAILURE
- */
-int bbutil_init_gl2d();
-
-int bbutil_is_flipped();
-int bbutil_get_rotation();
-
-char *get_window_group_id();
-
-int bbutil_rotate_screen_surface(int angle);
-
-/**
- * Terminates EGL
- */
-void bbutil_terminate();
-
-/**
- * Swaps default bbutil window surface to the screen
- */
-void bbutil_swap();
-
-/**
- * Clears the screen of any existing text.
- * NOTE: must be called after a successful return from bbutil_init() or bbutil_init_egl() call
- */
-void bbutil_clear();
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif
diff --git a/platform/bb10/detect.py b/platform/bb10/detect.py
deleted file mode 100644
index d3ee9f0124..0000000000
--- a/platform/bb10/detect.py
+++ /dev/null
@@ -1,92 +0,0 @@
-import os
-import sys
-import string
-import methods
-
-
-def is_active():
- return True
-
-
-def get_name():
- return "BlackBerry 10"
-
-
-def can_build():
-
- import os
- if (not os.environ.has_key("QNX_TARGET")):
- return False
- return True
-
-
-def get_opts():
-
- return [
- ('QNX_HOST', 'path to qnx host', os.environ.get("QNX_HOST", 0)),
- ('QNX_TARGET', 'path to qnx target', os.environ.get("QNX_TARGET", 0)),
- ('QNX_CONFIGURATION', 'path to qnx configuration', os.environ.get("QNX_CONFIGURATION", 0)),
- ('qnx_target', 'Qnx target (armle or x86', 'armle'),
- ('bb10_payment_service', 'Enable Payment Service for BlackBerry10', 'yes'),
- ('bb10_lgles_override', 'Force legacy GLES (1.1) on iOS', 'no'),
- ('bb10_exceptions', 'Use exceptions when compiling on bb10', 'no'),
- ]
-
-
-def get_flags():
-
- return [
- ('tools', 'no'),
- ('module_theora_enabled', 'no'),
- ]
-
-
-def configure(env):
-
- if env['PLATFORM'] == 'win32':
- env.Tool('mingw')
- env['SPAWN'] = methods.win32_spawn
-
- env['qnx_target_ver'] = env['qnx_target']
- if env['qnx_target'] == "armle":
- env['qnx_prefix'] = 'ntoarmv7'
- env['qnx_target_ver'] = 'armle-v7'
- else:
- env['qnx_prefix'] = 'ntox86'
-
- env['OBJSUFFIX'] = ".qnx.${qnx_target}.o"
- env['LIBSUFFIX'] = ".qnx.${qnx_target}.a"
- env['PROGSUFFIX'] = ".qnx.${qnx_target}"
- print("PROGSUFFIX: " + env['PROGSUFFIX'] + " target: " + env['qnx_target'])
-
- env.PrependENVPath('PATH', env['QNX_CONFIGURATION'] + '/bin')
- env.PrependENVPath('PATH', env['QNX_CONFIGURATION'] + '/usr/bin')
- env['ENV']['QNX_HOST'] = env['QNX_HOST']
- env['ENV']['QNX_TARGET'] = env['QNX_TARGET']
- env['ENV']['QNX_CONFIGURATION'] = env['QNX_CONFIGURATION']
-
- env['CC'] = '$qnx_prefix-gcc'
- env['CXX'] = '$qnx_prefix-g++'
- env['AR'] = '$qnx_prefix-ar'
- env['RANLIB'] = '$qnx_prefix-ranlib'
-
- env.Append(CPPPATH=['#platform/bb10'])
- env.Append(LIBPATH=['#platform/bb10/lib/$qnx_target', '#platform/bb10/lib/$qnx_target_ver'])
- env.Append(CCFLAGS=string.split('-DBB10_ENABLED -DUNIX_ENABLED -DGLES2_ENABLED -DGLES1_ENABLED -D_LITTLE_ENDIAN -DNO_THREADS -DNO_FCNTL'))
- if env['bb10_exceptions'] == "yes":
- env.Append(CCFLAGS=['-fexceptions'])
- else:
- env.Append(CCFLAGS=['-fno-exceptions'])
-
- # env.Append(LINKFLAGS = string.split()
-
- if (env["target"] == "release"):
-
- env.Append(CCFLAGS=['-O3', '-DRELEASE_BUILD'])
-
- elif (env["target"] == "debug"):
-
- env.Append(CCFLAGS=['-g', '-O0', '-DDEBUG_ENABLED', '-D_DEBUG'])
- env.Append(LINKFLAGS=['-g'])
-
- env.Append(LIBS=['bps', 'pps', 'screen', 'socket', 'EGL', 'GLESv2', 'GLESv1_CM', 'm', 'asound'])
diff --git a/platform/bb10/export/export.cpp b/platform/bb10/export/export.cpp
deleted file mode 100644
index b620cea230..0000000000
--- a/platform/bb10/export/export.cpp
+++ /dev/null
@@ -1,829 +0,0 @@
-/*************************************************************************/
-/* export.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "export.h"
-#include "editor/editor_export.h"
-#include "editor/editor_node.h"
-#include "editor/editor_settings.h"
-#include "global_config.h"
-#include "io/marshalls.h"
-#include "io/xml_parser.h"
-#include "io/zip_io.h"
-#include "os/file_access.h"
-#include "os/os.h"
-#include "platform/bb10/logo.h"
-#include "version.h"
-
-#define MAX_DEVICES 5
-#if 0
-class EditorExportPlatformBB10 : public EditorExportPlatform {
-
- GDCLASS( EditorExportPlatformBB10,EditorExportPlatform );
-
- String custom_package;
-
- int version_code;
- String version_name;
- String package;
- String name;
- String category;
- String description;
- String author_name;
- String author_id;
- String icon;
-
-
-
- struct Device {
-
- int index;
- String name;
- String description;
- };
-
- Vector<Device> devices;
- bool devices_changed;
- Mutex *device_lock;
- Thread *device_thread;
- Ref<ImageTexture> logo;
-
- volatile bool quit_request;
-
-
- static void _device_poll_thread(void *ud);
-
- void _fix_descriptor(Vector<uint8_t>& p_manifest);
-protected:
-
- bool _set(const StringName& p_name, const Variant& p_value);
- bool _get(const StringName& p_name,Variant &r_ret) const;
- void _get_property_list( List<PropertyInfo> *p_list) const;
-
-public:
-
- virtual String get_name() const { return "BlackBerry 10"; }
- virtual ImageCompression get_image_compression() const { return IMAGE_COMPRESSION_ETC1; }
- virtual Ref<Texture> get_logo() const { return logo; }
-
-
- virtual bool poll_devices();
- virtual int get_device_count() const;
- virtual String get_device_name(int p_device) const;
- virtual String get_device_info(int p_device) const;
- virtual Error run(int p_device,int p_flags=0);
-
- virtual bool requires_password(bool p_debug) const { return !p_debug; }
- virtual String get_binary_extension() const { return "bar"; }
- virtual Error export_project(const String& p_path,bool p_debug,int p_flags=0);
-
- virtual bool can_export(String *r_error=NULL) const;
-
- EditorExportPlatformBB10();
- ~EditorExportPlatformBB10();
-};
-
-bool EditorExportPlatformBB10::_set(const StringName& p_name, const Variant& p_value) {
-
- String n=p_name;
-
- if (n=="version/code")
- version_code=p_value;
- else if (n=="version/name")
- version_name=p_value;
- else if (n=="package/unique_name")
- package=p_value;
- else if (n=="package/category")
- category=p_value;
- else if (n=="package/name")
- name=p_value;
- else if (n=="package/description")
- description=p_value;
- else if (n=="package/icon")
- icon=p_value;
- else if (n=="package/custom_template")
- custom_package=p_value;
- else if (n=="release/author")
- author_name=p_value;
- else if (n=="release/author_id")
- author_id=p_value;
- else
- return false;
-
- return true;
-}
-
-bool EditorExportPlatformBB10::_get(const StringName& p_name,Variant &r_ret) const{
-
- String n=p_name;
-
- if (n=="version/code")
- r_ret=version_code;
- else if (n=="version/name")
- r_ret=version_name;
- else if (n=="package/unique_name")
- r_ret=package;
- else if (n=="package/category")
- r_ret=category;
- else if (n=="package/name")
- r_ret=name;
- else if (n=="package/description")
- r_ret=description;
- else if (n=="package/icon")
- r_ret=icon;
- else if (n=="package/custom_template")
- r_ret=custom_package;
- else if (n=="release/author")
- r_ret=author_name;
- else if (n=="release/author_id")
- r_ret=author_id;
- else
- return false;
-
- return true;
-}
-void EditorExportPlatformBB10::_get_property_list( List<PropertyInfo> *p_list) const{
-
- p_list->push_back( PropertyInfo( Variant::INT, "version/code", PROPERTY_HINT_RANGE,"1,65535,1"));
- p_list->push_back( PropertyInfo( Variant::STRING, "version/name") );
- p_list->push_back( PropertyInfo( Variant::STRING, "package/unique_name") );
- p_list->push_back( PropertyInfo( Variant::STRING, "package/category") );
- p_list->push_back( PropertyInfo( Variant::STRING, "package/name") );
- p_list->push_back( PropertyInfo( Variant::STRING, "package/description",PROPERTY_HINT_MULTILINE_TEXT) );
- p_list->push_back( PropertyInfo( Variant::STRING, "package/icon",PROPERTY_HINT_FILE,"png") );
- p_list->push_back( PropertyInfo( Variant::STRING, "package/custom_template", PROPERTY_HINT_GLOBAL_FILE,"zip"));
- p_list->push_back( PropertyInfo( Variant::STRING, "release/author") );
- p_list->push_back( PropertyInfo( Variant::STRING, "release/author_id") );
-
- //p_list->push_back( PropertyInfo( Variant::INT, "resources/pack_mode", PROPERTY_HINT_ENUM,"Copy,Single Exec.,Pack (.pck),Bundles (Optical)"));
-
-}
-
-void EditorExportPlatformBB10::_fix_descriptor(Vector<uint8_t>& p_descriptor) {
-
- String fpath = EditorSettings::get_singleton()->get_settings_path().plus_file("tmp_bar-settings.xml");
- {
- FileAccessRef f = FileAccess::open(fpath,FileAccess::WRITE);
- f->store_buffer(p_descriptor.ptr(),p_descriptor.size());
- }
-
- Ref<XMLParser> parser = memnew( XMLParser );
- Error err = parser->open(fpath);
- ERR_FAIL_COND(err!=OK);
-
- String txt;
- err = parser->read();
- Vector<String> depth;
-
- while(err!=ERR_FILE_EOF) {
-
- ERR_FAIL_COND(err!=OK);
-
- switch(parser->get_node_type()) {
-
- case XMLParser::NODE_NONE: {
- print_line("???");
- } break;
- case XMLParser::NODE_ELEMENT: {
- String e="<";
- e+=parser->get_node_name();
- for(int i=0;i<parser->get_attribute_count();i++) {
- e+=" ";
- e+=parser->get_attribute_name(i)+"=\"";
- e+=parser->get_attribute_value(i)+"\" ";
- }
-
-
-
- if (parser->is_empty()) {
- e+="/";
- } else {
- depth.push_back(parser->get_node_name());
- }
-
- e+=">";
- txt+=e;
-
- } break;
- case XMLParser::NODE_ELEMENT_END: {
-
- txt+="</"+parser->get_node_name()+">";
- if (depth.size() && depth[depth.size()-1]==parser->get_node_name()) {
- depth.resize(depth.size()-1);
- }
-
-
- } break;
- case XMLParser::NODE_TEXT: {
- if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="id") {
-
- txt+=package;
- } else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="name") {
-
- String aname;
- if (this->name!="") {
- aname=this->name;
- } else {
- aname = GlobalConfig::get_singleton()->get("application/name");
-
- }
-
- if (aname=="") {
- aname=_MKSTR(VERSION_NAME);
- }
-
- txt+=aname;
-
- } else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="versionNumber") {
- txt+=itos(version_code);
- } else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="description") {
- txt+=description;
- } else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="author") {
- txt+=author_name;
- } else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="authorId") {
- txt+=author_id;
- } else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="category") {
- txt+=category;
- } else {
- txt+=parser->get_node_data();
- }
- } break;
- case XMLParser::NODE_COMMENT: {
- txt+="<!--"+parser->get_node_name()+"-->";
- } break;
- case XMLParser::NODE_CDATA: {
- //ignore
- //print_line("cdata");
- } break;
- case XMLParser::NODE_UNKNOWN: {
- //ignore
- txt+="<"+parser->get_node_name()+">";
- } break;
- }
-
- err = parser->read();
- }
-
-
- CharString cs = txt.utf8();
- p_descriptor.resize(cs.length());
- for(int i=0;i<cs.length();i++)
- p_descriptor[i]=cs[i];
-
-}
-
-
-
-Error EditorExportPlatformBB10::export_project(const String& p_path, bool p_debug, int p_flags) {
-
-
- EditorProgress ep("export","Exporting for BlackBerry 10",104);
-
- String src_template=custom_package;
-
- if (src_template=="") {
- String err;
- src_template = find_export_template("bb10.zip", &err);
- if (src_template=="") {
- EditorNode::add_io_error(err);
- return ERR_FILE_NOT_FOUND;
- }
- }
-
- FileAccess *src_f=NULL;
- zlib_filefunc_def io = zipio_create_io_from_file(&src_f);
-
- ep.step("Creating FileSystem for BAR",0);
-
- unzFile pkg = unzOpen2(src_template.utf8().get_data(), &io);
- if (!pkg) {
-
- EditorNode::add_io_error("Could not find template zip to export:\n"+src_template);
- return ERR_FILE_NOT_FOUND;
- }
-
- DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
- da->change_dir(EditorSettings::get_singleton()->get_settings_path());
-
-
- if (da->change_dir("tmp")!=OK) {
- da->make_dir("tmp");
- if (da->change_dir("tmp")!=OK)
- return ERR_CANT_CREATE;
- }
-
- if (da->change_dir("bb10_export")!=OK) {
- da->make_dir("bb10_export");
- if (da->change_dir("bb10_export")!=OK) {
- return ERR_CANT_CREATE;
- }
- }
-
-
- String bar_dir = da->get_current_dir();
- if (bar_dir.ends_with("/")) {
- bar_dir=bar_dir.substr(0,bar_dir.length()-1);
- }
-
- //THIS IS SUPER, SUPER DANGEROUS!!!!
- //CAREFUL WITH THIS CODE, MIGHT DELETE USERS HARD DRIVE OR HOME DIR
- //EXTRA CHECKS ARE IN PLACE EVERYWERE TO MAKE SURE NOTHING BAD HAPPENS BUT STILL....
- //BE SUPER CAREFUL WITH THIS PLEASE!!!
- //BLACKBERRY THIS IS YOUR FAULT FOR NOT MAKING A BETTER WAY!!
-
- bool berr = bar_dir.ends_with("bb10_export");
- if (berr) {
- if (da->list_dir_begin()) {
- EditorNode::add_io_error("Can't ensure that dir is empty:\n"+bar_dir);
- ERR_FAIL_COND_V(berr,FAILED);
- };
-
- String f = da->get_next();
- while (f != "") {
-
- if (f == "." || f == "..") {
- f = da->get_next();
- continue;
- };
- Error err = da->remove(bar_dir + "/" + f);
- if (err != OK) {
- EditorNode::add_io_error("Can't ensure that dir is empty:\n"+bar_dir);
- ERR_FAIL_COND_V(err!=OK,err);
- };
- f = da->get_next();
- };
-
- da->list_dir_end();
-
- } else {
- print_line("ARE YOU CRAZY??? THIS IS A SERIOUS BUG HERE!!!");
- ERR_FAIL_V(ERR_OMFG_THIS_IS_VERY_VERY_BAD);
- }
-
-
- ERR_FAIL_COND_V(!pkg, ERR_CANT_OPEN);
- int ret = unzGoToFirstFile(pkg);
-
-
-
- while(ret==UNZ_OK) {
-
- //get filename
- unz_file_info info;
- char fname[16384];
- ret = unzGetCurrentFileInfo(pkg,&info,fname,16384,NULL,0,NULL,0);
-
- String file=fname;
-
- Vector<uint8_t> data;
- data.resize(info.uncompressed_size);
-
- //read
- unzOpenCurrentFile(pkg);
- unzReadCurrentFile(pkg,data.ptr(),data.size());
- unzCloseCurrentFile(pkg);
-
- //write
-
- if (file=="bar-descriptor.xml") {
-
- _fix_descriptor(data);
- }
-
- if (file=="icon.png") {
- bool found=false;
-
- if (this->icon!="" && this->icon.ends_with(".png")) {
-
- FileAccess *f = FileAccess::open(this->icon,FileAccess::READ);
- if (f) {
-
- data.resize(f->get_len());
- f->get_buffer(data.ptr(),data.size());
- memdelete(f);
- found=true;
- }
-
- }
-
- if (!found) {
-
- String appicon = GlobalConfig::get_singleton()->get("application/icon");
- if (appicon!="" && appicon.ends_with(".png")) {
- FileAccess*f = FileAccess::open(appicon,FileAccess::READ);
- if (f) {
- data.resize(f->get_len());
- f->get_buffer(data.ptr(),data.size());
- memdelete(f);
- }
- }
- }
- }
-
-
- if (file.find("/")) {
-
- da->make_dir_recursive(file.get_base_dir());
- }
-
- FileAccessRef wf = FileAccess::open(bar_dir.plus_file(file),FileAccess::WRITE);
- wf->store_buffer(data.ptr(),data.size());
-
- ret = unzGoToNextFile(pkg);
- }
-
- ep.step("Adding Files..",2);
-
- FileAccess* dst = FileAccess::open(bar_dir+"/data.pck", FileAccess::WRITE);
- if (!dst) {
- EditorNode::add_io_error("Can't copy executable file to:\n "+p_path);
- return ERR_FILE_CANT_WRITE;
- }
- save_pack(dst, false, 1024);
- dst->close();
- memdelete(dst);
-
- ep.step("Creating BAR Package..",104);
-
- String bb_packager=EditorSettings::get_singleton()->get("export/blackberry/host_tools");
- bb_packager=bb_packager.plus_file("blackberry-nativepackager");
- if (OS::get_singleton()->get_name()=="Windows")
- bb_packager+=".bat";
-
-
- if (!FileAccess::exists(bb_packager)) {
- EditorNode::add_io_error("Can't find packager:\n"+bb_packager);
- return ERR_CANT_OPEN;
- }
-
- List<String> args;
- args.push_back("-package");
- args.push_back(p_path);
- if (p_debug) {
-
- String debug_token=EditorSettings::get_singleton()->get("export/blackberry/debug_token");
- if (!FileAccess::exists(debug_token)) {
- EditorNode::add_io_error("Debug token not found!");
- } else {
- args.push_back("-debugToken");
- args.push_back(debug_token);
- }
- args.push_back("-devMode");
- args.push_back("-configuration");
- args.push_back("Device-Debug");
- } else {
-
- args.push_back("-configuration");
- args.push_back("Device-Release");
- }
- args.push_back(bar_dir.plus_file("bar-descriptor.xml"));
-
- int ec;
-
- Error err = OS::get_singleton()->execute(bb_packager,args,true,NULL,NULL,&ec);
-
- if (err!=OK)
- return err;
- if (ec!=0)
- return ERR_CANT_CREATE;
-
- return OK;
-
-}
-
-bool EditorExportPlatformBB10::poll_devices() {
-
- bool dc=devices_changed;
- devices_changed=false;
- return dc;
-}
-
-int EditorExportPlatformBB10::get_device_count() const {
-
- device_lock->lock();
- int dc=devices.size();
- device_lock->unlock();
-
- return dc;
-
-}
-String EditorExportPlatformBB10::get_device_name(int p_device) const {
-
- ERR_FAIL_INDEX_V(p_device,devices.size(),"");
- device_lock->lock();
- String s=devices[p_device].name;
- device_lock->unlock();
- return s;
-}
-String EditorExportPlatformBB10::get_device_info(int p_device) const {
-
- ERR_FAIL_INDEX_V(p_device,devices.size(),"");
- device_lock->lock();
- String s=devices[p_device].description;
- device_lock->unlock();
- return s;
-}
-
-void EditorExportPlatformBB10::_device_poll_thread(void *ud) {
-
- EditorExportPlatformBB10 *ea=(EditorExportPlatformBB10 *)ud;
-
- while(!ea->quit_request) {
-
- String bb_deploy=EditorSettings::get_singleton()->get("export/blackberry/host_tools");
- bb_deploy=bb_deploy.plus_file("blackberry-deploy");
- bool windows = OS::get_singleton()->get_name()=="Windows";
- if (windows)
- bb_deploy+=".bat";
-
- if (FileAccess::exists(bb_deploy)) {
-
- Vector<Device> devices;
-
-
- for (int i=0;i<MAX_DEVICES;i++) {
-
- String host = EditorSettings::get_singleton()->get("export/blackberry/device_"+itos(i+1)+"/host");
- if (host==String())
- continue;
- String pass = EditorSettings::get_singleton()->get("export/blackberry/device_"+itos(i+1)+"/password");
- if (pass==String())
- continue;
-
- List<String> args;
- args.push_back("-listDeviceInfo");
- args.push_back(host);
- args.push_back("-password");
- args.push_back(pass);
-
-
- int ec;
- String dp;
-
- Error err = OS::get_singleton()->execute(bb_deploy,args,true,NULL,&dp,&ec);
-
- if (err==OK && ec==0) {
-
- Device dev;
- dev.index=i;
- String descr;
- Vector<String> ls=dp.split("\n");
-
- for(int i=0;i<ls.size();i++) {
-
- String l = ls[i].strip_edges();
- if (l.begins_with("modelfullname::")) {
- dev.name=l.get_slice("::",1);
- descr+="Model: "+dev.name+"\n";
- }
- if (l.begins_with("modelnumber::")) {
- String s = l.get_slice("::",1);
- dev.name+=" ("+s+")";
- descr+="Model Number: "+s+"\n";
- }
- if (l.begins_with("scmbundle::"))
- descr+="OS Version: "+l.get_slice("::",1)+"\n";
- if (l.begins_with("[n]debug_token_expiration::"))
- descr+="Debug Token Expires:: "+l.get_slice("::",1)+"\n";
-
- }
-
- dev.description=descr;
- devices.push_back(dev);
- }
-
- }
-
- bool changed=false;
-
-
- ea->device_lock->lock();
-
- if (ea->devices.size()!=devices.size()) {
- changed=true;
- } else {
-
- for(int i=0;i<ea->devices.size();i++) {
-
- if (ea->devices[i].index!=devices[i].index) {
- changed=true;
- break;
- }
- }
- }
-
- if (changed) {
-
- ea->devices=devices;
- ea->devices_changed=true;
- }
-
- ea->device_lock->unlock();
- }
-
-
- uint64_t wait = 3000000;
- uint64_t time = OS::get_singleton()->get_ticks_usec();
- while(OS::get_singleton()->get_ticks_usec() - time < wait ) {
- OS::get_singleton()->delay_usec(1000);
- if (ea->quit_request)
- break;
- }
- }
-
-}
-
-Error EditorExportPlatformBB10::run(int p_device, int p_flags) {
-
- ERR_FAIL_INDEX_V(p_device,devices.size(),ERR_INVALID_PARAMETER);
-
- String bb_deploy=EditorSettings::get_singleton()->get("export/blackberry/host_tools");
- bb_deploy=bb_deploy.plus_file("blackberry-deploy");
- if (OS::get_singleton()->get_name()=="Windows")
- bb_deploy+=".bat";
-
- if (!FileAccess::exists(bb_deploy)) {
- EditorNode::add_io_error("Blackberry Deploy not found:\n"+bb_deploy);
- return ERR_FILE_NOT_FOUND;
- }
-
-
- device_lock->lock();
-
-
- EditorProgress ep("run","Running on "+devices[p_device].name,3);
-
- //export_temp
- ep.step("Exporting APK",0);
-
- String export_to=EditorSettings::get_singleton()->get_settings_path().plus_file("/tmp/tmpexport.bar");
- Error err = export_project(export_to,true,p_flags);
- if (err) {
- device_lock->unlock();
- return err;
- }
-#if 0
- ep.step("Uninstalling..",1);
-
- print_line("Uninstalling previous version: "+devices[p_device].name);
- List<String> args;
- args.push_back("-s");
- args.push_back(devices[p_device].id);
- args.push_back("uninstall");
- args.push_back(package);
- int rv;
- err = OS::get_singleton()->execute(adb,args,true,NULL,NULL,&rv);
-
- if (err || rv!=0) {
- EditorNode::add_io_error("Could not install to device.");
- device_lock->unlock();
- return ERR_CANT_CREATE;
- }
-
- print_line("Installing into device (please wait..): "+devices[p_device].name);
-
-#endif
- ep.step("Installing to Device (please wait..)..",2);
-
- List<String> args;
- args.clear();
- args.push_back("-installApp");
- args.push_back("-launchApp");
- args.push_back("-device");
- String host = EditorSettings::get_singleton()->get("export/blackberry/device_"+itos(p_device+1)+"/host");
- String pass = EditorSettings::get_singleton()->get("export/blackberry/device_"+itos(p_device+1)+"/password");
- args.push_back(host);
- args.push_back("-password");
- args.push_back(pass);
- args.push_back(export_to);
-
- int rv;
- err = OS::get_singleton()->execute(bb_deploy,args,true,NULL,NULL,&rv);
- if (err || rv!=0) {
- EditorNode::add_io_error("Could not install to device.");
- device_lock->unlock();
- return ERR_CANT_CREATE;
- }
-
- device_lock->unlock();
- return OK;
-
-
-}
-
-
-EditorExportPlatformBB10::EditorExportPlatformBB10() {
-
- version_code=1;
- version_name="1.0";
- package="com.godot.noname";
- category="core.games";
- name="";
- author_name="Cert. Name";
- author_id="Cert. ID";
- description="Game made with Godot Engine";
-
- device_lock = Mutex::create();
- quit_request=false;
-
- device_thread=Thread::create(_device_poll_thread,this);
- devices_changed=true;
-
- Image img( _bb10_logo );
- logo = Ref<ImageTexture>( memnew( ImageTexture ));
- logo->create_from_image(img);
-}
-
-bool EditorExportPlatformBB10::can_export(String *r_error) const {
-
- bool valid=true;
- String bb_deploy=EditorSettings::get_singleton()->get("export/blackberry/host_tools");
- String err;
-
- if (!FileAccess::exists(bb_deploy.plus_file("blackberry-deploy"))) {
-
- valid=false;
- err+="Blackberry host tools not configured in editor settings.\n";
- }
-
- if (!exists_export_template("bb10.zip")) {
- valid=false;
- err+="No export template found.\nDownload and install export templates.\n";
- }
-
- String debug_token=EditorSettings::get_singleton()->get("export/blackberry/debug_token");
-
- if (!FileAccess::exists(debug_token)) {
- valid=false;
- err+="No debug token set, will not be able to test on device.\n";
- }
-
-
- if (custom_package!="" && !FileAccess::exists(custom_package)) {
- valid=false;
- err+="Custom release package not found.\n";
- }
-
- if (r_error)
- *r_error=err;
-
- return valid;
-}
-
-
-EditorExportPlatformBB10::~EditorExportPlatformBB10() {
-
- quit_request=true;
- Thread::wait_to_finish(device_thread);
- memdelete(device_lock);
- memdelete(device_thread);
-}
-
-#endif
-void register_bb10_exporter() {
-#if 0
- EDITOR_DEF("export/blackberry/host_tools","");
- EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING,"export/blackberry/host_tools",PROPERTY_HINT_GLOBAL_DIR));
- EDITOR_DEF("export/blackberry/debug_token","");
- EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING,"export/blackberry/debug_token",PROPERTY_HINT_GLOBAL_FILE,"bar"));
- EDITOR_DEF("export/blackberry/device_1/host","");
- EDITOR_DEF("export/blackberry/device_1/password","");
- EDITOR_DEF("export/blackberry/device_2/host","");
- EDITOR_DEF("export/blackberry/device_2/password","");
- EDITOR_DEF("export/blackberry/device_3/host","");
- EDITOR_DEF("export/blackberry/device_3/password","");
- EDITOR_DEF("export/blackberry/device_4/host","");
- EDITOR_DEF("export/blackberry/device_4/password","");
- EDITOR_DEF("export/blackberry/device_5/host","");
- EDITOR_DEF("export/blackberry/device_5/password","");
-
- Ref<EditorExportPlatformBB10> exporter = Ref<EditorExportPlatformBB10>( memnew(EditorExportPlatformBB10) );
- EditorImportExport::get_singleton()->add_export_platform(exporter);
-
-#endif
-}
diff --git a/platform/bb10/export/export.h b/platform/bb10/export/export.h
deleted file mode 100644
index 7939754bfa..0000000000
--- a/platform/bb10/export/export.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*************************************************************************/
-/* export.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-void register_bb10_exporter();
diff --git a/platform/bb10/godot_bb10.cpp b/platform/bb10/godot_bb10.cpp
deleted file mode 100644
index 4d382ddd15..0000000000
--- a/platform/bb10/godot_bb10.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*************************************************************************/
-/* godot_bb10.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "main/main.h"
-#include "os_bb10.h"
-
-#include <unistd.h>
-
-int main(int argc, char *argv[]) {
-
- OSBB10 os;
-
- Error err = Main::setup(argv[0], argc - 1, &argv[1]);
- if (err != OK)
- return 255;
-
- if (Main::start())
- os.run(); // it is actually the OS that decides how to run
- Main::cleanup();
-
- return os.get_exit_code();
-}
diff --git a/platform/bb10/logo.png b/platform/bb10/logo.png
deleted file mode 100644
index abf0d2cc69..0000000000
--- a/platform/bb10/logo.png
+++ /dev/null
Binary files differ
diff --git a/platform/bb10/os_bb10.cpp b/platform/bb10/os_bb10.cpp
deleted file mode 100644
index b571d1640c..0000000000
--- a/platform/bb10/os_bb10.cpp
+++ /dev/null
@@ -1,608 +0,0 @@
-/*************************************************************************/
-/* os_bb10.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "os_bb10.h"
-
-#include "bbutil.h"
-#include "core/global_config.h"
-#include "core/os/dir_access.h"
-#include "core/os/keyboard.h"
-#include "drivers/gles2/rasterizer_gles2.h"
-#include "main/main.h"
-#include "servers/visual/visual_server_raster.h"
-
-#include <assert.h>
-#include <bps/accelerometer.h>
-#include <bps/audiodevice.h>
-#include <bps/bps.h>
-#include <bps/navigator.h>
-#include <bps/orientation.h>
-#include <bps/screen.h>
-#include <bps/virtualkeyboard.h>
-#include <stdbool.h>
-#include <stdlib.h>
-
-#ifdef BB10_SCORELOOP_ENABLED
-#include "modules/scoreloop/scoreloop_bb10.h"
-#endif
-
-static char launch_dir[512];
-char *launch_dir_ptr;
-
-int OSBB10::get_video_driver_count() const {
-
- return 1;
-}
-const char *OSBB10::get_video_driver_name(int p_driver) const {
-
- return "GLES2";
-}
-
-OS::VideoMode OSBB10::get_default_video_mode() const {
-
- return OS::VideoMode();
-}
-
-int OSBB10::get_audio_driver_count() const {
-
- return 1;
-}
-const char *OSBB10::get_audio_driver_name(int p_driver) const {
-
- return "BB10";
-}
-
-void OSBB10::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) {
-
- data_dir = getenv("HOME");
-
- //Create a screen context that will be used to create an EGL surface to to receive libscreen events
- screen_create_context(&screen_cxt, 0);
-
- //Initialize BPS library
- bps_initialize();
-
- //Use utility code to initialize EGL for 2D rendering with GL ES 1.1
- enum RENDERING_API api = GL_ES_2;
-#ifdef BB10_LGLES_OVERRIDE
- api = GL_ES_1;
-#endif
- if (EXIT_SUCCESS != bbutil_init(screen_cxt, api)) {
- bbutil_terminate();
- screen_destroy_context(screen_cxt);
- return;
- };
-
- EGLint surface_width, surface_height;
-
- eglQuerySurface(egl_disp, egl_surf, EGL_WIDTH, &surface_width);
- eglQuerySurface(egl_disp, egl_surf, EGL_HEIGHT, &surface_height);
- printf("screen size: %ix%i\n", surface_width, surface_height);
- VideoMode mode;
- mode.width = surface_width;
- mode.height = surface_height;
- mode.fullscreen = true;
- mode.resizable = false;
- set_video_mode(mode);
-
- //Signal BPS library that navigator and screen events will be requested
- screen_request_events(screen_cxt);
- navigator_request_events(0);
- virtualkeyboard_request_events(0);
- audiodevice_request_events(0);
-
-#ifdef DEBUG_ENABLED
- bps_set_verbosity(3);
-#endif
-
- accel_supported = accelerometer_is_supported();
- if (accel_supported)
- accelerometer_set_update_frequency(FREQ_40_HZ);
- pitch = 0;
- roll = 0;
-
-#ifdef BB10_LGLES_OVERRIDE
- rasterizer = memnew(RasterizerGLES1(false));
-#else
- rasterizer = memnew(RasterizerGLES2(false, false));
-#endif
-
- visual_server = memnew(VisualServerRaster(rasterizer));
- visual_server->init();
- visual_server->cursor_set_visible(false, 0);
-
- audio_driver = memnew(AudioDriverBB10);
- audio_driver->set_singleton();
- audio_driver->init(NULL);
-
- physics_server = memnew(PhysicsServerSW);
- physics_server->init();
- physics_2d_server = memnew(Physics2DServerSW);
- physics_2d_server->init();
-
- input = memnew(InputDefault);
-
- power_manager = memnew(PowerBB10);
-
-#ifdef PAYMENT_SERVICE_ENABLED
- payment_service = memnew(PaymentService);
- Globals::get_singleton()->add_singleton(Globals::Singleton("InAppStore", payment_service));
-#endif
-}
-
-void OSBB10::set_main_loop(MainLoop *p_main_loop) {
-
- input->set_main_loop(p_main_loop);
- main_loop = p_main_loop;
-}
-
-void OSBB10::delete_main_loop() {
-
- memdelete(main_loop);
- main_loop = NULL;
-}
-
-void OSBB10::finalize() {
-
- if (main_loop)
- memdelete(main_loop);
- main_loop = NULL;
-
- /*
- if (debugger_connection_console) {
- memdelete(debugger_connection_console);
- }
- */
-
- visual_server->finish();
- memdelete(visual_server);
- memdelete(rasterizer);
-
- physics_server->finish();
- memdelete(physics_server);
-
- physics_2d_server->finish();
- memdelete(physics_2d_server);
-
-#ifdef PAYMENT_SERVICE_ENABLED
- memdelete(payment_service);
-#endif
-
- memdelete(input);
-
- bbutil_terminate();
- screen_destroy_context(screen_cxt);
-
- bps_shutdown();
-}
-
-void OSBB10::set_mouse_show(bool p_show) {
-
- //android has no mouse...
-}
-
-void OSBB10::set_mouse_grab(bool p_grab) {
-
- //it really has no mouse...!
-}
-
-bool OSBB10::is_mouse_grab_enabled() const {
-
- //*sigh* technology has evolved so much since i was a kid..
- return false;
-}
-Point2 OSBB10::get_mouse_position() const {
-
- return Point2();
-}
-int OSBB10::get_mouse_button_state() const {
-
- return 0;
-}
-void OSBB10::set_window_title(const String &p_title) {
-}
-
-//interesting byt not yet
-//void set_clipboard(const String& p_text);
-//String get_clipboard() const;
-
-void OSBB10::set_video_mode(const VideoMode &p_video_mode, int p_screen) {
-
- default_videomode = p_video_mode;
-}
-
-OS::VideoMode OSBB10::get_video_mode(int p_screen) const {
-
- return default_videomode;
-}
-void OSBB10::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const {
-
- p_list->push_back(default_videomode);
-}
-
-String OSBB10::get_name() {
-
- return "BlackBerry 10";
-}
-
-MainLoop *OSBB10::get_main_loop() const {
-
- return main_loop;
-}
-
-bool OSBB10::can_draw() const {
-
- return !minimized;
-}
-
-void OSBB10::set_cursor_shape(CursorShape p_shape) {
-
- //android really really really has no mouse.. how amazing..
-}
-
-void OSBB10::handle_screen_event(bps_event_t *event) {
-
- screen_event_t screen_event = screen_event_get_event(event);
-
- int screen_val;
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TYPE, &screen_val);
-
- int pos[2];
-
- switch (screen_val) {
- case SCREEN_EVENT_MTOUCH_TOUCH:
- case SCREEN_EVENT_MTOUCH_RELEASE: {
-
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_POSITION, pos);
-
- InputEvent ievent;
- ievent.type = InputEvent::SCREEN_TOUCH;
- ievent.device = 0;
- ievent.screen_touch.pressed = (screen_val == SCREEN_EVENT_MTOUCH_TOUCH);
- ievent.screen_touch.x = pos[0];
- ievent.screen_touch.y = pos[1];
- Point2 mpos(ievent.screen_touch.x, ievent.screen_touch.y);
-
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TOUCH_ID, &pos[0]);
- ievent.screen_touch.index = pos[0];
-
- last_touch_x[pos[0]] = ievent.screen_touch.x;
- last_touch_y[pos[0]] = ievent.screen_touch.y;
-
- input->parse_input_event(ievent);
-
- if (ievent.screen_touch.index == 0) {
-
- InputEvent ievent;
- ievent.type = InputEvent::MOUSE_BUTTON;
- ievent.device = 0;
- ievent.mouse_button.pressed = (screen_val == SCREEN_EVENT_MTOUCH_TOUCH);
- ievent.mouse_button.button_index = BUTTON_LEFT;
- ievent.mouse_button.doubleclick = 0;
- ievent.mouse_button.x = ievent.mouse_button.global_x = mpos.x;
- ievent.mouse_button.y = ievent.mouse_button.global_y = mpos.y;
- input->parse_input_event(ievent);
- };
-
- } break;
- case SCREEN_EVENT_MTOUCH_MOVE: {
-
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_POSITION, pos);
-
- InputEvent ievent;
- ievent.type = InputEvent::SCREEN_DRAG;
- ievent.device = 0;
- ievent.screen_drag.x = pos[0];
- ievent.screen_drag.y = pos[1];
-
- /*
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_SOURCE_POSITION, pos);
- ievent.screen_drag.relative_x = ievent.screen_drag.x - pos[0];
- ievent.screen_drag.relative_y = ievent.screen_drag.y - pos[1];
- */
-
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TOUCH_ID, &pos[0]);
- ievent.screen_drag.index = pos[0];
-
- ievent.screen_drag.relative_x = ievent.screen_drag.x - last_touch_x[ievent.screen_drag.index];
- ievent.screen_drag.relative_y = ievent.screen_drag.y - last_touch_y[ievent.screen_drag.index];
-
- last_touch_x[ievent.screen_drag.index] = ievent.screen_drag.x;
- last_touch_y[ievent.screen_drag.index] = ievent.screen_drag.y;
-
- Point2 mpos(ievent.screen_drag.x, ievent.screen_drag.y);
- Point2 mrel(ievent.screen_drag.relative_x, ievent.screen_drag.relative_y);
-
- input->parse_input_event(ievent);
-
- if (ievent.screen_touch.index == 0) {
-
- InputEvent ievent;
- ievent.type = InputEvent::MOUSE_MOTION;
- ievent.device = 0;
- ievent.mouse_motion.x = ievent.mouse_motion.global_x = mpos.x;
- ievent.mouse_motion.y = ievent.mouse_motion.global_y = mpos.y;
- input->set_mouse_position(Point2(ievent.mouse_motion.x, ievent.mouse_motion.y));
- ievent.mouse_motion.speed_x = input->get_last_mouse_speed().x;
- ievent.mouse_motion.speed_y = input->get_last_mouse_speed().y;
- ievent.mouse_motion.relative_x = mrel.x;
- ievent.mouse_motion.relative_y = mrel.y;
- ievent.mouse_motion.button_mask = 1; // pressed
-
- input->parse_input_event(ievent);
- };
- } break;
-
- case SCREEN_EVENT_KEYBOARD: {
-
- InputEvent ievent;
- ievent.type = InputEvent::KEY;
- ievent.device = 0;
- int val = 0;
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_SCAN, &val);
- ievent.key.scancode = val;
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_SYM, &val);
- ievent.key.unicode = val;
- if (val == 61448) {
- ievent.key.scancode = KEY_BACKSPACE;
- ievent.key.unicode = KEY_BACKSPACE;
- };
- if (val == 61453) {
- ievent.key.scancode = KEY_ENTER;
- ievent.key.unicode = KEY_ENTER;
- };
-
- int flags;
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_FLAGS, &flags);
- ievent.key.pressed = flags & 1; // bit 1 is pressed apparently
-
- int mod;
- screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_MODIFIERS, &mod);
-
- input->parse_input_event(ievent);
- } break;
-
- default:
- break;
- }
-};
-
-void OSBB10::handle_accelerometer() {
-
- if (!accel_supported)
- return;
-
- if (!fullscreen)
- return;
-
- double force_x, force_y, force_z;
- accelerometer_read_forces(&force_x, &force_y, &force_z);
- Vector3 accel = Vector3(force_x, flip_accelerometer ? force_y : -force_y, force_z);
- input->set_accelerometer(accel);
- // rotate 90 degrees
- //input->set_accelerometer(Vector3(force_y, flip_accelerometer?force_x:(-force_x), force_z));
-};
-
-void OSBB10::_resize(bps_event_t *event) {
-
- int angle = navigator_event_get_orientation_angle(event);
- bbutil_rotate_screen_surface(angle);
-
- EGLint surface_width, surface_height;
- eglQuerySurface(egl_disp, egl_surf, EGL_WIDTH, &surface_width);
- eglQuerySurface(egl_disp, egl_surf, EGL_HEIGHT, &surface_height);
-
- VideoMode mode;
- mode.width = surface_width;
- mode.height = surface_height;
- mode.fullscreen = true;
- mode.resizable = false;
- set_video_mode(mode);
-};
-
-void OSBB10::process_events() {
-
- handle_accelerometer();
-
- bps_event_t *event = NULL;
-
- do {
- int rc = bps_get_event(&event, 0);
- assert(rc == BPS_SUCCESS);
-
- if (!event) break;
-
-#ifdef BB10_SCORELOOP_ENABLED
- ScoreloopBB10 *sc = Globals::get_singleton()->get_singleton_object("Scoreloop")->cast_to<ScoreloopBB10>();
- if (sc->handle_event(event))
- continue;
-#endif
-
-#ifdef PAYMENT_SERVICE_ENABLED
- if (payment_service->handle_event(event))
- continue;
-#endif
-
- int domain = bps_event_get_domain(event);
- if (domain == screen_get_domain()) {
-
- handle_screen_event(event);
-
- } else if (domain == navigator_get_domain()) {
-
- if (NAVIGATOR_EXIT == bps_event_get_code(event)) {
- if (main_loop)
- main_loop->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST);
- bps_event_destroy(event);
- exit(0);
- return;
- /*
- } else if (bps_event_get_code(event) == NAVIGATOR_ORIENTATION_CHECK) {
-
- int angle = navigator_event_get_orientation_angle(event);
- navigator_orientation_check_response(event, false);
-
- } else if (bps_event_get_code(event) == NAVIGATOR_ORIENTATION) {
-
- _resize(event);
- */
- } else if (bps_event_get_code(event) == NAVIGATOR_WINDOW_STATE) {
-
- int state = navigator_event_get_window_state(event);
- bool was_fullscreen = fullscreen;
- minimized = state == NAVIGATOR_WINDOW_INVISIBLE;
- fullscreen = state == NAVIGATOR_WINDOW_FULLSCREEN;
- set_low_processor_usage_mode(!fullscreen);
- if (fullscreen != was_fullscreen) {
- if (fullscreen) {
- audio_server->set_fx_global_volume_scale(fullscreen_mixer_volume);
- audio_server->set_stream_global_volume_scale(fullscreen_stream_volume);
- } else {
- fullscreen_mixer_volume = audio_server->get_fx_global_volume_scale();
- fullscreen_stream_volume = audio_server->get_stream_global_volume_scale();
- audio_server->set_fx_global_volume_scale(0);
- audio_server->set_stream_global_volume_scale(0);
- };
- };
- };
- } else if (domain == audiodevice_get_domain()) {
-
- const char *audiodevice_path = audiodevice_event_get_path(event);
- printf("************* got audiodevice event, path %s\n", audiodevice_path);
- audio_driver->finish();
- audio_driver->init(audiodevice_path);
- audio_driver->start();
- };
-
- //bps_event_destroy(event);
- } while (event);
-};
-
-bool OSBB10::has_virtual_keyboard() const {
-
- return true;
-};
-
-void OSBB10::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect) {
-
- virtualkeyboard_show();
-};
-
-void OSBB10::hide_virtual_keyboard() {
-
- virtualkeyboard_hide();
-};
-
-void OSBB10::run() {
-
- if (!main_loop)
- return;
-
- main_loop->init();
-
- int flip = bbutil_is_flipped();
- int rot = bbutil_get_rotation();
- flip_accelerometer = rot == 90;
- printf("**************** rot is %i, flip %i\n", rot, (int)flip_accelerometer);
- /*
- orientation_direction_t orientation;
- int angle;
- orientation_get(&orientation, &angle);
- printf("******************** orientation %i, %i, %i\n", orientation, ORIENTATION_BOTTOM_UP, ORIENTATION_TOP_UP);
- if (orientation == ORIENTATION_BOTTOM_UP) {
- flip_accelerometer = true;
- };
- */
-
- while (true) {
-
- process_events(); // get rid of pending events
- if (Main::iteration() == true)
- break;
- bbutil_swap();
- //#ifdef DEBUG_ENABLED
- fflush(stdout);
- //#endif
- };
-
- main_loop->finish();
-};
-
-bool OSBB10::has_touchscreen_ui_hint() const {
-
- return true;
-}
-
-Error OSBB10::shell_open(String p_uri) {
-
- char *msg = NULL;
- int ret = navigator_invoke(p_uri.utf8().get_data(), &msg);
-
- return ret == BPS_SUCCESS ? OK : FAILED;
-};
-
-String OSBB10::get_data_dir() const {
-
- return data_dir;
-};
-
-Size2 OSBB10::get_window_size() const {
- return Vector2(default_videomode.width, default_videomode.height);
-}
-
-PowerState OSBB10::get_power_state() {
- return power_manager->get_power_state();
-}
-
-int OSBB10::get_power_seconds_left() {
- return power_manager->get_power_seconds_left();
-}
-
-int OSBB10::get_power_percent_left() {
- return power_manager->get_power_percent_left();
-}
-
-OSBB10::OSBB10() {
-
- main_loop = NULL;
- minimized = false;
- fullscreen = true;
- flip_accelerometer = true;
- fullscreen_mixer_volume = 1;
- fullscreen_stream_volume = 1;
-
- printf("godot bb10!\n");
- getcwd(launch_dir, sizeof(launch_dir));
- printf("launch dir %s\n", launch_dir);
- chdir("app/native");
- launch_dir_ptr = launch_dir;
-}
-
-OSBB10::~OSBB10() {
-}
diff --git a/platform/bb10/os_bb10.h b/platform/bb10/os_bb10.h
deleted file mode 100644
index 91149b6f68..0000000000
--- a/platform/bb10/os_bb10.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*************************************************************************/
-/* os_bb10.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#ifndef OS_BB10_H
-#define OS_BB10_H
-
-#include "audio_driver_bb10.h"
-#include "drivers/unix/os_unix.h"
-#include "main/input_default.h"
-#include "os/input.h"
-#include "os/main_loop.h"
-#include "payment_service.h"
-#include "power_bb10.h"
-#include "servers/audio_server.h"
-#include "servers/physics/physics_server_sw.h"
-#include "servers/physics_2d/physics_2d_server_sw.h"
-#include "servers/visual/rasterizer.h"
-
-#include <bps/event.h>
-#include <screen/screen.h>
-#include <stdint.h>
-#include <sys/platform.h>
-
-class OSBB10 : public OS_Unix {
-
- screen_context_t screen_cxt;
- float fullscreen_mixer_volume;
- float fullscreen_stream_volume;
-
- Rasterizer *rasterizer;
- VisualServer *visual_server;
- PhysicsServer *physics_server;
- Physics2DServer *physics_2d_server;
- AudioDriverBB10 *audio_driver;
- PowerBB10 *power_manager;
-
-#ifdef PAYMENT_SERVICE_ENABLED
- PaymentService *payment_service;
-#endif
-
- VideoMode default_videomode;
- MainLoop *main_loop;
-
- void process_events();
-
- void _resize(bps_event_t *event);
- void handle_screen_event(bps_event_t *event);
- void handle_accelerometer();
-
- int last_touch_x[16];
- int last_touch_y[16];
-
- bool accel_supported;
- float pitch;
- float roll;
-
- bool minimized;
- bool fullscreen;
- bool flip_accelerometer;
- String data_dir;
-
- InputDefault *input;
-
-public:
- // functions used by main to initialize/deintialize the OS
- virtual int get_video_driver_count() const;
- virtual const char *get_video_driver_name(int p_driver) const;
-
- virtual VideoMode get_default_video_mode() const;
-
- virtual String get_data_dir() const;
-
- virtual int get_audio_driver_count() const;
- virtual const char *get_audio_driver_name(int p_driver) const;
-
- virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver);
-
- virtual void set_main_loop(MainLoop *p_main_loop);
- virtual void delete_main_loop();
-
- virtual void finalize();
-
- typedef int64_t ProcessID;
-
- static OS *get_singleton();
-
- virtual void set_mouse_show(bool p_show);
- virtual void set_mouse_grab(bool p_grab);
- virtual bool is_mouse_grab_enabled() const;
- virtual Point2 get_mouse_position() const;
- virtual int get_mouse_button_state() const;
- virtual void set_window_title(const String &p_title);
-
- //virtual void set_clipboard(const String& p_text);
- //virtual String get_clipboard() const;
-
- virtual bool has_virtual_keyboard() const;
- virtual void show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect);
- virtual void hide_virtual_keyboard();
-
- virtual void set_video_mode(const VideoMode &p_video_mode, int p_screen = 0);
- virtual VideoMode get_video_mode(int p_screen = 0) const;
- virtual void get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen = 0) const;
-
- virtual Size2 get_window_size() const;
- virtual String get_name();
- virtual MainLoop *get_main_loop() const;
-
- virtual bool can_draw() const;
-
- virtual void set_cursor_shape(CursorShape p_shape);
-
- virtual bool has_touchscreen_ui_hint() const;
-
- virtual Error shell_open(String p_uri);
-
- void run();
-
- virtual PowerState get_power_state();
- virtual int get_power_seconds_left();
- virtual int get_power_percent_left();
-
- OSBB10();
- ~OSBB10();
-};
-
-#endif
diff --git a/platform/bb10/payment_service.cpp b/platform/bb10/payment_service.cpp
deleted file mode 100644
index 353845583f..0000000000
--- a/platform/bb10/payment_service.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/*************************************************************************/
-/* payment_service.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#ifdef PAYMENT_SERVICE_ENABLED
-
-#include "payment_service.h"
-
-#include "bbutil.h"
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-extern char *launch_dir_ptr;
-
-void PaymentService::_bind_methods() {
-
- ClassDB::bind_method(D_METHOD("request_product_info"), &PaymentService::request_product_info);
- ClassDB::bind_method(D_METHOD("purchase"), &PaymentService::purchase);
-
- ClassDB::bind_method(D_METHOD("get_pending_event_count"), &PaymentService::get_pending_event_count);
- ClassDB::bind_method(D_METHOD("pop_pending_event"), &PaymentService::pop_pending_event);
-};
-
-Error PaymentService::request_product_info(Variant p_params) {
-
- return ERR_UNAVAILABLE;
-};
-
-Error PaymentService::purchase(Variant p_params) {
-
- Dictionary params = p_params;
- ERR_FAIL_COND_V((!params.has("product_id")) && (!params.has("product_sku")), ERR_INVALID_PARAMETER);
-
- char *id = NULL;
- char *sku = NULL;
-
- CharString p_id = params.has("product_id") ? String(params["product_id"]).ascii() : CharString();
- CharString p_sku = params.has("product_sku") ? String(params["product_sku"]).ascii() : CharString();
- unsigned int request_id;
- chdir(launch_dir_ptr);
- int ret = paymentservice_purchase_request(params.has("product_sku") ? NULL : p_id.get_data(),
- params.has("product_sku") ? p_sku.get_data() : NULL,
- NULL, NULL, NULL, NULL, get_window_group_id(), &request_id);
- chdir("app/native");
-
- if (ret != BPS_SUCCESS) {
- int eret = errno;
- printf("purchase error %i, %x, %i, %x\n", ret, ret, eret, eret);
- ERR_FAIL_V((Error)eret);
- return (Error)eret;
- };
- return OK;
-};
-
-bool PaymentService::handle_event(bps_event_t *p_event) {
-
- if (bps_event_get_domain(p_event) != paymentservice_get_domain()) {
- return false;
- };
-
- Dictionary dict;
- int res = paymentservice_event_get_response_code(p_event);
- if (res == SUCCESS_RESPONSE) {
- dict["result"] = "ok";
-
- res = bps_event_get_code(p_event);
- if (res == PURCHASE_RESPONSE) {
- dict["type"] = "purchase";
- const char *pid = paymentservice_event_get_digital_good_id(p_event, 0);
- dict["product_id"] = String(pid ? pid : "");
- };
-
- } else {
- const char *desc = paymentservice_event_get_error_text(p_event);
- if (strcmp(desc, "alreadyPurchased") == 0) {
- dict["result"] = "ok";
- } else {
- dict["result"] = "error";
- dict["error_description"] = paymentservice_event_get_error_text(p_event);
- dict["error_code"] = paymentservice_event_get_error_id(p_event);
- printf("error code is %i\n", paymentservice_event_get_error_id(p_event));
- printf("error description is %s\n", paymentservice_event_get_error_text(p_event));
- };
- dict["product_id"] = "";
- };
-
- res = bps_event_get_code(p_event);
- if (res == PURCHASE_RESPONSE) {
- dict["type"] = "purchase";
- };
-
- printf("********** adding event with result %ls\n", String(dict["result"]).c_str());
- pending_events.push_back(dict);
-
- return true;
-};
-
-int PaymentService::get_pending_event_count() {
- return pending_events.size();
-};
-
-Variant PaymentService::pop_pending_event() {
-
- Variant front = pending_events.front()->get();
- pending_events.pop_front();
-
- return front;
-};
-
-PaymentService::PaymentService() {
-
- paymentservice_request_events(0);
-#ifdef DEBUG_ENABLED
- paymentservice_set_connection_mode(true);
-#else
- paymentservice_set_connection_mode(false);
-#endif
-};
-
-PaymentService::~PaymentService(){
-
-};
-
-#endif
diff --git a/platform/bb10/platform_config.h b/platform/bb10/platform_config.h
deleted file mode 100644
index 48bcadcc29..0000000000
--- a/platform/bb10/platform_config.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*************************************************************************/
-/* platform_config.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include <alloca.h>
diff --git a/platform/iphone/app_delegate.mm b/platform/iphone/app_delegate.mm
index e075941d36..5dc0fb08b1 100644
--- a/platform/iphone/app_delegate.mm
+++ b/platform/iphone/app_delegate.mm
@@ -49,6 +49,8 @@
#import <Parse/Parse.h>
#endif
+#import "GameController/GameController.h"
+
#define kFilteringFactor 0.1
#define kRenderingFrequency 60
#define kAccelerometerFrequency 100.0 // Hz
@@ -89,6 +91,282 @@ static ViewController *mainViewController = nil;
return mainViewController;
}
+NSMutableDictionary *ios_joysticks = nil;
+
+- (GCControllerPlayerIndex)getFreePlayerIndex {
+ bool have_player_1 = false;
+ bool have_player_2 = false;
+ bool have_player_3 = false;
+ bool have_player_4 = false;
+
+ if (ios_joysticks == nil) {
+ NSArray *keys = [ios_joysticks allKeys];
+ for (NSNumber *key in keys) {
+ GCController *controller = [ios_joysticks objectForKey:key];
+ if (controller.playerIndex == GCControllerPlayerIndex1) {
+ have_player_1 = true;
+ } else if (controller.playerIndex == GCControllerPlayerIndex2) {
+ have_player_2 = true;
+ } else if (controller.playerIndex == GCControllerPlayerIndex3) {
+ have_player_3 = true;
+ } else if (controller.playerIndex == GCControllerPlayerIndex4) {
+ have_player_4 = true;
+ };
+ };
+ };
+
+ if (!have_player_1) {
+ return GCControllerPlayerIndex1;
+ } else if (!have_player_2) {
+ return GCControllerPlayerIndex2;
+ } else if (!have_player_3) {
+ return GCControllerPlayerIndex3;
+ } else if (!have_player_4) {
+ return GCControllerPlayerIndex4;
+ } else {
+ return GCControllerPlayerIndexUnset;
+ };
+};
+
+- (void)controllerWasConnected:(NSNotification *)notification {
+ // create our dictionary if we don't have one yet
+ if (ios_joysticks == nil) {
+ ios_joysticks = [[NSMutableDictionary alloc] init];
+ };
+
+ // get our controller
+ GCController *controller = (GCController *)notification.object;
+ if (controller == nil) {
+ printf("Couldn't retrieve new controller\n");
+ } else if ([[ios_joysticks allKeysForObject:controller] count] != 0) {
+ printf("Controller is already registered\n");
+ } else {
+ // get a new id for our controller
+ int joy_id = OSIPhone::get_singleton()->get_unused_joy_id();
+ if (joy_id != -1) {
+ // assign our player index
+ if (controller.playerIndex == GCControllerPlayerIndexUnset) {
+ controller.playerIndex = [self getFreePlayerIndex];
+ };
+
+ // tell Godot about our new controller
+ OSIPhone::get_singleton()->joy_connection_changed(
+ joy_id, true, [controller.vendorName UTF8String]);
+
+ // add it to our dictionary, this will retain our controllers
+ [ios_joysticks setObject:controller
+ forKey:[NSNumber numberWithInt:joy_id]];
+
+ // set our input handler
+ [self setControllerInputHandler:controller];
+ } else {
+ printf("Couldn't retrieve new joy id\n");
+ };
+ };
+};
+
+- (void)controllerWasDisconnected:(NSNotification *)notification {
+ if (ios_joysticks != nil) {
+ // find our joystick, there should be only one in our dictionary
+ GCController *controller = (GCController *)notification.object;
+ NSArray *keys = [ios_joysticks allKeysForObject:controller];
+ for (NSNumber *key in keys) {
+ // tell Godot this joystick is no longer there
+ int joy_id = [key intValue];
+ OSIPhone::get_singleton()->joy_connection_changed(joy_id, false, "");
+
+ // and remove it from our dictionary
+ [ios_joysticks removeObjectForKey:key];
+ };
+ };
+};
+
+- (int)getJoyIdForController:(GCController *)controller {
+ if (ios_joysticks != nil) {
+ // find our joystick, there should be only one in our dictionary
+ NSArray *keys = [ios_joysticks allKeysForObject:controller];
+ for (NSNumber *key in keys) {
+ int joy_id = [key intValue];
+ return joy_id;
+ };
+ };
+
+ return -1;
+};
+
+- (void)setControllerInputHandler:(GCController *)controller {
+ // Hook in the callback handler for the correct gamepad profile.
+ // This is a bit of a weird design choice on Apples part.
+ // You need to select the most capable gamepad profile for the
+ // gamepad attached.
+ if (controller.extendedGamepad != nil) {
+ // The extended gamepad profile has all the input you could possibly find on
+ // a gamepad but will only be active if your gamepad actually has all of
+ // these...
+ controller.extendedGamepad.valueChangedHandler = ^(
+ GCExtendedGamepad *gamepad, GCControllerElement *element) {
+ int joy_id = [self getJoyIdForController:controller];
+
+ if (element == gamepad.buttonA) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_0,
+ gamepad.buttonA.isPressed);
+ } else if (element == gamepad.buttonB) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_1,
+ gamepad.buttonB.isPressed);
+ } else if (element == gamepad.buttonX) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_2,
+ gamepad.buttonX.isPressed);
+ } else if (element == gamepad.buttonY) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_3,
+ gamepad.buttonY.isPressed);
+ } else if (element == gamepad.leftShoulder) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_L,
+ gamepad.leftShoulder.isPressed);
+ } else if (element == gamepad.rightShoulder) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_R,
+ gamepad.rightShoulder.isPressed);
+ } else if (element == gamepad.leftTrigger) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_L2,
+ gamepad.leftTrigger.isPressed);
+ } else if (element == gamepad.rightTrigger) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_R2,
+ gamepad.rightTrigger.isPressed);
+ } else if (element == gamepad.dpad) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_UP,
+ gamepad.dpad.up.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_DOWN,
+ gamepad.dpad.down.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_LEFT,
+ gamepad.dpad.left.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_RIGHT,
+ gamepad.dpad.right.isPressed);
+ };
+
+ InputDefault::JoyAxis jx;
+ jx.min = -1;
+ if (element == gamepad.leftThumbstick) {
+ jx.value = gamepad.leftThumbstick.xAxis.value;
+ OSIPhone::get_singleton()->joy_axis(joy_id, JOY_ANALOG_LX, jx);
+ jx.value = -gamepad.leftThumbstick.yAxis.value;
+ OSIPhone::get_singleton()->joy_axis(joy_id, JOY_ANALOG_LY, jx);
+ } else if (element == gamepad.rightThumbstick) {
+ jx.value = gamepad.rightThumbstick.xAxis.value;
+ OSIPhone::get_singleton()->joy_axis(joy_id, JOY_ANALOG_RX, jx);
+ jx.value = -gamepad.rightThumbstick.yAxis.value;
+ OSIPhone::get_singleton()->joy_axis(joy_id, JOY_ANALOG_RY, jx);
+ } else if (element == gamepad.leftTrigger) {
+ jx.value = gamepad.leftTrigger.value;
+ OSIPhone::get_singleton()->joy_axis(joy_id, JOY_ANALOG_L2, jx);
+ } else if (element == gamepad.rightTrigger) {
+ jx.value = gamepad.rightTrigger.value;
+ OSIPhone::get_singleton()->joy_axis(joy_id, JOY_ANALOG_R2, jx);
+ };
+ };
+ } else if (controller.gamepad != nil) {
+ // gamepad is the standard profile with 4 buttons, shoulder buttons and a
+ // D-pad
+ controller.gamepad.valueChangedHandler = ^(GCGamepad *gamepad,
+ GCControllerElement *element) {
+ int joy_id = [self getJoyIdForController:controller];
+
+ if (element == gamepad.buttonA) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_0,
+ gamepad.buttonA.isPressed);
+ } else if (element == gamepad.buttonB) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_1,
+ gamepad.buttonB.isPressed);
+ } else if (element == gamepad.buttonX) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_2,
+ gamepad.buttonX.isPressed);
+ } else if (element == gamepad.buttonY) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_3,
+ gamepad.buttonY.isPressed);
+ } else if (element == gamepad.leftShoulder) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_L,
+ gamepad.leftShoulder.isPressed);
+ } else if (element == gamepad.rightShoulder) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_R,
+ gamepad.rightShoulder.isPressed);
+ } else if (element == gamepad.dpad) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_UP,
+ gamepad.dpad.up.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_DOWN,
+ gamepad.dpad.down.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_LEFT,
+ gamepad.dpad.left.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_RIGHT,
+ gamepad.dpad.right.isPressed);
+ };
+ };
+#ifdef ADD_MICRO_GAMEPAD // disabling this for now, only available on iOS 9+,
+ // while we are setting that as the minimum, seems our
+ // build environment doesn't like it
+ } else if (controller.microGamepad != nil) {
+ // micro gamepads were added in OS 9 and feature just 2 buttons and a d-pad
+ controller.microGamepad.valueChangedHandler =
+ ^(GCMicroGamepad *gamepad, GCControllerElement *element) {
+ int joy_id = [self getJoyIdForController:controller];
+
+ if (element == gamepad.buttonA) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_0,
+ gamepad.buttonA.isPressed);
+ } else if (element == gamepad.buttonX) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_BUTTON_2,
+ gamepad.buttonX.isPressed);
+ } else if (element == gamepad.dpad) {
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_UP,
+ gamepad.dpad.up.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_DOWN,
+ gamepad.dpad.down.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_LEFT,
+ gamepad.dpad.left.isPressed);
+ OSIPhone::get_singleton()->joy_button(joy_id, JOY_DPAD_RIGHT,
+ gamepad.dpad.right.isPressed);
+ };
+ };
+#endif
+ };
+
+ ///@TODO need to add support for controller.motion which gives us access to
+ /// the orientation of the device (if supported)
+
+ ///@TODO need to add support for controllerPausedHandler which should be a
+ /// toggle
+};
+
+- (void)initGameControllers {
+ // get told when controllers connect, this will be called right away for
+ // already connected controllers
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(controllerWasConnected:)
+ name:GCControllerDidConnectNotification
+ object:nil];
+
+ // get told when controllers disconnect
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(controllerWasDisconnected:)
+ name:GCControllerDidDisconnectNotification
+ object:nil];
+};
+
+- (void)deinitGameControllers {
+ [[NSNotificationCenter defaultCenter]
+ removeObserver:self
+ name:GCControllerDidConnectNotification
+ object:nil];
+ [[NSNotificationCenter defaultCenter]
+ removeObserver:self
+ name:GCControllerDidDisconnectNotification
+ object:nil];
+
+ if (ios_joysticks != nil) {
+ [ios_joysticks dealloc];
+ ios_joysticks = nil;
+ };
+};
+
static int frame_count = 0;
- (void)drawView:(GLView *)view;
{
@@ -97,8 +375,10 @@ static int frame_count = 0;
case 0: {
int backingWidth;
int backingHeight;
- glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
- glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
+ glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES,
+ GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
+ glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES,
+ GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
OS::VideoMode vm;
vm.fullscreen = true;
@@ -112,25 +392,35 @@ static int frame_count = 0;
};
++frame_count;
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
+ NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
- //NSString *documentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
- OSIPhone::get_singleton()->set_data_dir(String::utf8([documentsDirectory UTF8String]));
+ // NSString *documentsDirectory = [[[NSFileManager defaultManager]
+ // URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]
+ // lastObject];
+ OSIPhone::get_singleton()->set_data_dir(
+ String::utf8([documentsDirectory UTF8String]));
- NSString *locale_code = [[[NSLocale preferredLanguages] objectAtIndex:0] substringToIndex:2];
- OSIPhone::get_singleton()->set_locale(String::utf8([locale_code UTF8String]));
+ NSString *locale_code =
+ [[[NSLocale preferredLanguages] objectAtIndex:0] substringToIndex:2];
+ OSIPhone::get_singleton()->set_locale(
+ String::utf8([locale_code UTF8String]));
NSString *uuid;
- if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
+ if ([[UIDevice currentDevice]
+ respondsToSelector:@selector(identifierForVendor)]) {
uuid = [UIDevice currentDevice].identifierForVendor.UUIDString;
} else {
// before iOS 6, so just generate an identifier and store it
- uuid = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"];
+ uuid = [[NSUserDefaults standardUserDefaults]
+ objectForKey:@"identiferForVendor"];
if (!uuid) {
CFUUIDRef cfuuid = CFUUIDCreate(NULL);
uuid = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, cfuuid);
CFRelease(cfuuid);
- [[NSUserDefaults standardUserDefaults] setObject:uuid forKey:@"identifierForVendor"];
+ [[NSUserDefaults standardUserDefaults]
+ setObject:uuid
+ forKey:@"identifierForVendor"];
}
}
@@ -138,9 +428,9 @@ static int frame_count = 0;
}; break;
/*
- case 1: {
- ++frame_count;
- }; break;
+ case 1: {
+ ++frame_count;
+ }; break;
*/
case 1: {
@@ -173,9 +463,9 @@ static int frame_count = 0;
}; break;
/*
- case 3: {
- ++frame_count;
- }; break;
+ case 3: {
+ ++frame_count;
+ }; break;
*/
case 2: {
@@ -186,53 +476,85 @@ static int frame_count = 0;
default: {
if (OSIPhone::get_singleton()) {
- //OSIPhone::get_singleton()->update_accelerometer(accel[0], accel[1], accel[2]);
+ // OSIPhone::get_singleton()->update_accelerometer(accel[0], accel[1],
+ // accel[2]);
if (motionInitialised) {
- // Just using polling approach for now, we can set this up so it sends data to us in intervals, might be better.
- // See Apple reference pages for more details:
+ // Just using polling approach for now, we can set this up so it sends
+ // data to us in intervals, might be better. See Apple reference pages
+ // for more details:
// https://developer.apple.com/reference/coremotion/cmmotionmanager?language=objc
- // Apple splits our accelerometer date into a gravity and user movement component. We add them back together
+ // Apple splits our accelerometer date into a gravity and user movement
+ // component. We add them back together
CMAcceleration gravity = motionManager.deviceMotion.gravity;
- CMAcceleration acceleration = motionManager.deviceMotion.userAcceleration;
+ CMAcceleration acceleration =
+ motionManager.deviceMotion.userAcceleration;
- ///@TODO We don't seem to be getting data here, is my device broken or is this code incorrect?
- CMMagneticField magnetic = motionManager.deviceMotion.magneticField.field;
+ ///@TODO We don't seem to be getting data here, is my device broken or
+ /// is this code incorrect?
+ CMMagneticField magnetic =
+ motionManager.deviceMotion.magneticField.field;
- ///@TODO we can access rotationRate as a CMRotationRate variable (processed date) or CMGyroData (raw data), have to see what works best
+ ///@TODO we can access rotationRate as a CMRotationRate variable
+ ///(processed date) or CMGyroData (raw data), have to see what works
+ /// best
CMRotationRate rotation = motionManager.deviceMotion.rotationRate;
// Adjust for screen orientation.
- // [[UIDevice currentDevice] orientation] changes even if we've fixed our orientation which is not
- // a good thing when you're trying to get your user to move the screen in all directions and want consistent output
-
- ///@TODO Using [[UIApplication sharedApplication] statusBarOrientation] is a bit of a hack. Godot obviously knows the orientation so maybe we
+ // [[UIDevice currentDevice] orientation] changes even if we've fixed
+ // our orientation which is not a good thing when you're trying to get
+ // your user to move the screen in all directions and want consistent
+ // output
+
+ ///@TODO Using [[UIApplication sharedApplication] statusBarOrientation]
+ /// is a bit of a hack. Godot obviously knows the orientation so maybe
+ /// we
// can use that instead? (note that left and right seem swapped)
switch ([[UIApplication sharedApplication] statusBarOrientation]) {
case UIDeviceOrientationLandscapeLeft: {
- OSIPhone::get_singleton()->update_gravity(-gravity.y, gravity.x, gravity.z);
- OSIPhone::get_singleton()->update_accelerometer(-(acceleration.y + gravity.y), (acceleration.x + gravity.x), acceleration.z + gravity.z);
- OSIPhone::get_singleton()->update_magnetometer(-magnetic.y, magnetic.x, magnetic.z);
- OSIPhone::get_singleton()->update_gyroscope(-rotation.y, rotation.x, rotation.z);
+ OSIPhone::get_singleton()->update_gravity(-gravity.y, gravity.x,
+ gravity.z);
+ OSIPhone::get_singleton()->update_accelerometer(
+ -(acceleration.y + gravity.y), (acceleration.x + gravity.x),
+ acceleration.z + gravity.z);
+ OSIPhone::get_singleton()->update_magnetometer(
+ -magnetic.y, magnetic.x, magnetic.z);
+ OSIPhone::get_singleton()->update_gyroscope(-rotation.y, rotation.x,
+ rotation.z);
}; break;
case UIDeviceOrientationLandscapeRight: {
- OSIPhone::get_singleton()->update_gravity(gravity.y, -gravity.x, gravity.z);
- OSIPhone::get_singleton()->update_accelerometer((acceleration.y + gravity.y), -(acceleration.x + gravity.x), acceleration.z + gravity.z);
- OSIPhone::get_singleton()->update_magnetometer(magnetic.y, -magnetic.x, magnetic.z);
- OSIPhone::get_singleton()->update_gyroscope(rotation.y, -rotation.x, rotation.z);
+ OSIPhone::get_singleton()->update_gravity(gravity.y, -gravity.x,
+ gravity.z);
+ OSIPhone::get_singleton()->update_accelerometer(
+ (acceleration.y + gravity.y), -(acceleration.x + gravity.x),
+ acceleration.z + gravity.z);
+ OSIPhone::get_singleton()->update_magnetometer(
+ magnetic.y, -magnetic.x, magnetic.z);
+ OSIPhone::get_singleton()->update_gyroscope(rotation.y, -rotation.x,
+ rotation.z);
}; break;
case UIDeviceOrientationPortraitUpsideDown: {
- OSIPhone::get_singleton()->update_gravity(-gravity.x, gravity.y, gravity.z);
- OSIPhone::get_singleton()->update_accelerometer(-(acceleration.x + gravity.x), (acceleration.y + gravity.y), acceleration.z + gravity.z);
- OSIPhone::get_singleton()->update_magnetometer(-magnetic.x, magnetic.y, magnetic.z);
- OSIPhone::get_singleton()->update_gyroscope(-rotation.x, rotation.y, rotation.z);
+ OSIPhone::get_singleton()->update_gravity(-gravity.x, gravity.y,
+ gravity.z);
+ OSIPhone::get_singleton()->update_accelerometer(
+ -(acceleration.x + gravity.x), (acceleration.y + gravity.y),
+ acceleration.z + gravity.z);
+ OSIPhone::get_singleton()->update_magnetometer(
+ -magnetic.x, magnetic.y, magnetic.z);
+ OSIPhone::get_singleton()->update_gyroscope(-rotation.x, rotation.y,
+ rotation.z);
}; break;
default: { // assume portrait
- OSIPhone::get_singleton()->update_gravity(gravity.x, gravity.y, gravity.z);
- OSIPhone::get_singleton()->update_accelerometer(acceleration.x + gravity.x, acceleration.y + gravity.y, acceleration.z + gravity.z);
- OSIPhone::get_singleton()->update_magnetometer(magnetic.x, magnetic.y, magnetic.z);
- OSIPhone::get_singleton()->update_gyroscope(rotation.x, rotation.y, rotation.z);
+ OSIPhone::get_singleton()->update_gravity(gravity.x, gravity.y,
+ gravity.z);
+ OSIPhone::get_singleton()->update_accelerometer(
+ acceleration.x + gravity.x, acceleration.y + gravity.y,
+ acceleration.z + gravity.z);
+ OSIPhone::get_singleton()->update_magnetometer(magnetic.x, magnetic.y,
+ magnetic.z);
+ OSIPhone::get_singleton()->update_gyroscope(rotation.x, rotation.y,
+ rotation.z);
}; break;
};
}
@@ -247,7 +569,8 @@ static int frame_count = 0;
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
printf("****************** did receive memory warning!\n");
- OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_OS_MEMORY_WARNING);
+ OS::get_singleton()->get_main_loop()->notification(
+ MainLoop::NOTIFICATION_OS_MEMORY_WARNING);
};
- (void)applicationDidFinishLaunching:(UIApplication *)application {
@@ -257,25 +580,29 @@ static int frame_count = 0;
[application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
// disable idle timer
- //application.idleTimerDisabled = YES;
+ // application.idleTimerDisabled = YES;
- //Create a full-screen window
+ // Create a full-screen window
window = [[UIWindow alloc] initWithFrame:rect];
- //window.autoresizesSubviews = YES;
- //[window setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth];
+ // window.autoresizesSubviews = YES;
+ //[window setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
+ // UIViewAutoresizingFlexibleWidth];
- //Create the OpenGL ES view and add it to the window
+ // Create the OpenGL ES view and add it to the window
GLView *glView = [[GLView alloc] initWithFrame:rect];
printf("glview is %p\n", glView);
//[window addSubview:glView];
glView.delegate = self;
- //glView.autoresizesSubviews = YES;
- //[glView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth];
+ // glView.autoresizesSubviews = YES;
+ //[glView setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
+ // UIViewAutoresizingFlexibleWidth];
int backingWidth;
int backingHeight;
- glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
- glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
+ glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES,
+ GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
+ glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES,
+ GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
iphone_main(backingWidth, backingHeight, gargc, gargv);
@@ -284,26 +611,30 @@ static int frame_count = 0;
window.rootViewController = view_controller;
_set_keep_screen_on(bool(GLOBAL_DEF("display/keep_screen_on", true)) ? YES : NO);
- glView.useCADisplayLink = bool(GLOBAL_DEF("display.iOS/use_cadisplaylink", true)) ? YES : NO;
+ glView.useCADisplayLink =
+ bool(GLOBAL_DEF("display.iOS/use_cadisplaylink", true)) ? YES : NO;
printf("cadisaplylink: %d", glView.useCADisplayLink);
glView.animationInterval = 1.0 / kRenderingFrequency;
[glView startAnimation];
- //Show the window
+ // Show the window
[window makeKeyAndVisible];
- //Configure and start accelerometer
+ // Configure and start accelerometer
if (!motionInitialised) {
motionManager = [[CMMotionManager alloc] init];
if (motionManager.deviceMotionAvailable) {
motionManager.deviceMotionUpdateInterval = 1.0 / 70.0;
- [motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXMagneticNorthZVertical];
+ [motionManager startDeviceMotionUpdatesUsingReferenceFrame:
+ CMAttitudeReferenceFrameXMagneticNorthZVertical];
motionInitialised = YES;
};
};
- //OSIPhone::screen_width = rect.size.width - rect.origin.x;
- //OSIPhone::screen_height = rect.size.height - rect.origin.y;
+ [self initGameControllers];
+
+ // OSIPhone::screen_width = rect.size.width - rect.origin.x;
+ // OSIPhone::screen_height = rect.size.height - rect.origin.y;
mainViewController = view_controller;
@@ -319,16 +650,22 @@ static int frame_count = 0;
String adid = GLOBAL_DEF("mobileapptracker/advertiser_id", "");
String convkey = GLOBAL_DEF("mobileapptracker/conversion_key", "");
- NSString *advertiser_id = [NSString stringWithUTF8String:adid.utf8().get_data()];
- NSString *conversion_key = [NSString stringWithUTF8String:convkey.utf8().get_data()];
+ NSString *advertiser_id =
+ [NSString stringWithUTF8String:adid.utf8().get_data()];
+ NSString *conversion_key =
+ [NSString stringWithUTF8String:convkey.utf8().get_data()];
// Account Configuration info - must be set
- [MobileAppTracker initializeWithMATAdvertiserId:advertiser_id MATConversionKey:conversion_key];
+ [MobileAppTracker initializeWithMATAdvertiserId:advertiser_id
+ MATConversionKey:conversion_key];
// Used to pass us the IFA, enables highly accurate 1-to-1 attribution.
// Required for many advertising networks.
- [MobileAppTracker setAppleAdvertisingIdentifier:[[ASIdentifierManager sharedManager] advertisingIdentifier]
- advertisingTrackingEnabled:[[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]];
+ [MobileAppTracker
+ setAppleAdvertisingIdentifier:[[ASIdentifierManager sharedManager]
+ advertisingIdentifier]
+ advertisingTrackingEnabled:[[ASIdentifierManager sharedManager]
+ isAdvertisingTrackingEnabled]];
#endif
};
@@ -337,6 +674,8 @@ static int frame_count = 0;
printf("********************* will terminate\n");
+ [self deinitGameControllers];
+
if (motionInitialised) {
///@TODO is this the right place to clean this up?
[motionManager stopDeviceMotionUpdates];
@@ -353,7 +692,8 @@ static int frame_count = 0;
///@TODO maybe add pause motionManager? and where would we unpause it?
if (OS::get_singleton()->get_main_loop())
- OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT);
+ OS::get_singleton()->get_main_loop()->notification(
+ MainLoop::NOTIFICATION_WM_FOCUS_OUT);
[view_controller.view stopAnimation];
if (OS::get_singleton()->native_video_is_playing()) {
@@ -363,14 +703,15 @@ static int frame_count = 0;
- (void)applicationWillEnterForeground:(UIApplication *)application {
printf("********************* did enter foreground\n");
- //OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN);
+ // OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN);
[view_controller.view startAnimation];
}
- (void)applicationWillResignActive:(UIApplication *)application {
printf("********************* will resign active\n");
- //OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT);
- [view_controller.view stopAnimation]; // FIXME: pause seems to be recommended elsewhere
+ // OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT);
+ [view_controller.view
+ stopAnimation]; // FIXME: pause seems to be recommended elsewhere
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
@@ -380,9 +721,11 @@ static int frame_count = 0;
[MobileAppTracker measureSession];
#endif
if (OS::get_singleton()->get_main_loop())
- OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN);
+ OS::get_singleton()->get_main_loop()->notification(
+ MainLoop::NOTIFICATION_WM_FOCUS_IN);
- [view_controller.view startAnimation]; // FIXME: resume seems to be recommended elsewhere
+ [view_controller.view
+ startAnimation]; // FIXME: resume seems to be recommended elsewhere
if (OSIPhone::get_singleton()->native_video_is_playing()) {
OSIPhone::get_singleton()->native_video_unpause();
};
@@ -397,14 +740,17 @@ static int frame_count = 0;
}
// For 4.2+ support
-- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
+- (BOOL)application:(UIApplication *)application
+ openURL:(NSURL *)url
+ sourceApplication:(NSString *)sourceApplication
+ annotation:(id)annotation {
#ifdef MODULE_PARSE_ENABLED
NSLog(@"Handling application openURL");
- return [[FBSDKApplicationDelegate sharedInstance]
- application:application
- openURL:url
- sourceApplication:sourceApplication
- annotation:annotation];
+ return
+ [[FBSDKApplicationDelegate sharedInstance] application:application
+ openURL:url
+ sourceApplication:sourceApplication
+ annotation:annotation];
#endif
#ifdef MODULE_FACEBOOKSCORER_IOS_ENABLED
@@ -414,21 +760,25 @@ static int frame_count = 0;
#endif
}
-- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
+- (void)application:(UIApplication *)application
+ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
#ifdef MODULE_PARSE_ENABLED
// Store the deviceToken in the current installation and save it to Parse.
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
- //NSString* token = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding];
+ // NSString* token = [[NSString alloc] initWithData:deviceToken
+ // encoding:NSUTF8StringEncoding];
NSLog(@"Device Token : %@ ", deviceToken);
[currentInstallation setDeviceTokenFromData:deviceToken];
[currentInstallation saveInBackground];
#endif
}
-- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
+- (void)application:(UIApplication *)application
+ didReceiveRemoteNotification:(NSDictionary *)userInfo {
#ifdef MODULE_PARSE_ENABLED
[PFPush handlePush:userInfo];
- NSDictionary *aps = [userInfo objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
+ NSDictionary *aps =
+ [userInfo objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"Push Notification Payload (app active) %@", aps);
diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp
index bc25afabea..0a9d776421 100644
--- a/platform/iphone/os_iphone.cpp
+++ b/platform/iphone/os_iphone.cpp
@@ -357,6 +357,22 @@ void OSIPhone::update_gyroscope(float p_x, float p_y, float p_z) {
input->set_gyroscope(Vector3(p_x, p_y, p_z));
};
+int OSIPhone::get_unused_joy_id() {
+ return input->get_unused_joy_id();
+};
+
+void OSIPhone::joy_connection_changed(int p_idx, bool p_connected, String p_name) {
+ input->joy_connection_changed(p_idx, p_connected, p_name);
+};
+
+void OSIPhone::joy_button(int p_device, int p_button, bool p_pressed) {
+ input->joy_button(p_device, p_button, p_pressed);
+};
+
+void OSIPhone::joy_axis(int p_device, int p_axis, const InputDefault::JoyAxis &p_value) {
+ input->joy_axis(p_device, p_axis, p_value);
+};
+
void OSIPhone::delete_main_loop() {
if (main_loop) {
diff --git a/platform/iphone/os_iphone.h b/platform/iphone/os_iphone.h
index 754dea073f..209bf00788 100644
--- a/platform/iphone/os_iphone.h
+++ b/platform/iphone/os_iphone.h
@@ -145,6 +145,11 @@ public:
void update_magnetometer(float p_x, float p_y, float p_z);
void update_gyroscope(float p_x, float p_y, float p_z);
+ int get_unused_joy_id();
+ void joy_connection_changed(int p_idx, bool p_connected, String p_name);
+ void joy_button(int p_device, int p_button, bool p_pressed);
+ void joy_axis(int p_device, int p_axis, const InputDefault::JoyAxis &p_value);
+
static OSIPhone *get_singleton();
virtual void set_mouse_show(bool p_show);
diff --git a/platform/javascript/export/export.cpp b/platform/javascript/export/export.cpp
index 1a3c5f3e8f..ea388072c5 100644
--- a/platform/javascript/export/export.cpp
+++ b/platform/javascript/export/export.cpp
@@ -316,7 +316,7 @@ Error EditorExportPlatformJavaScript::run(const Ref<EditorExportPreset> &p_prese
EditorExportPlatformJavaScript::EditorExportPlatformJavaScript() {
- Image img(_javascript_logo);
+ Ref<Image> img = memnew(Image(_javascript_logo));
logo.instance();
logo->create_from_image(img);
}
diff --git a/platform/javascript/javascript_main.cpp b/platform/javascript/javascript_main.cpp
index ff29c21b1c..6b1d574496 100644
--- a/platform/javascript/javascript_main.cpp
+++ b/platform/javascript/javascript_main.cpp
@@ -31,166 +31,50 @@
#include "io/resource_loader.h"
#include "main/main.h"
#include "os_javascript.h"
-#include <GL/glut.h>
-#include <string.h>
OS_JavaScript *os = NULL;
-static void _gfx_init(void *ud, bool gl2, int w, int h, bool fs) {
+static void main_loop() {
- glutInitWindowSize(w, h);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutCreateWindow("godot");
+ os->main_loop_iterate();
}
-static uint32_t _mouse_button_mask = 0;
+extern "C" void main_after_fs_sync() {
-static void _glut_mouse_button(int button, int state, int x, int y) {
-
- InputEvent ev;
- ev.type = InputEvent::MOUSE_BUTTON;
- switch (button) {
- case GLUT_LEFT_BUTTON: ev.mouse_button.button_index = BUTTON_LEFT; break;
- case GLUT_MIDDLE_BUTTON: ev.mouse_button.button_index = BUTTON_MIDDLE; break;
- case GLUT_RIGHT_BUTTON: ev.mouse_button.button_index = BUTTON_RIGHT; break;
- case 3: ev.mouse_button.button_index = BUTTON_WHEEL_UP; break;
- case 4: ev.mouse_button.button_index = BUTTON_WHEEL_DOWN; break;
- }
-
- ev.mouse_button.pressed = state == GLUT_DOWN;
- ev.mouse_button.x = x;
- ev.mouse_button.y = y;
- ev.mouse_button.global_x = x;
- ev.mouse_button.global_y = y;
-
- if (ev.mouse_button.button_index < 4) {
- if (ev.mouse_button.pressed) {
- _mouse_button_mask |= 1 << (ev.mouse_button.button_index - 1);
- } else {
- _mouse_button_mask &= ~(1 << (ev.mouse_button.button_index - 1));
- }
- }
- ev.mouse_button.button_mask = _mouse_button_mask;
-
- uint32_t m = glutGetModifiers();
- ev.mouse_button.mod.alt = (m & GLUT_ACTIVE_ALT) != 0;
- ev.mouse_button.mod.shift = (m & GLUT_ACTIVE_SHIFT) != 0;
- ev.mouse_button.mod.control = (m & GLUT_ACTIVE_CTRL) != 0;
-
- os->push_input(ev);
-
- if (ev.mouse_button.button_index == BUTTON_WHEEL_UP || ev.mouse_button.button_index == BUTTON_WHEEL_DOWN) {
- // GLUT doesn't send release events for mouse wheel, so send manually
- ev.mouse_button.pressed = false;
- os->push_input(ev);
- }
-}
-
-static int _glut_prev_x = 0;
-static int _glut_prev_y = 0;
-
-static void _glut_mouse_motion(int x, int y) {
-
- InputEvent ev;
- ev.type = InputEvent::MOUSE_MOTION;
- ev.mouse_motion.button_mask = _mouse_button_mask;
- ev.mouse_motion.x = x;
- ev.mouse_motion.y = y;
- ev.mouse_motion.global_x = x;
- ev.mouse_motion.global_y = y;
- ev.mouse_motion.relative_x = x - _glut_prev_x;
- ev.mouse_motion.relative_y = y - _glut_prev_y;
- _glut_prev_x = x;
- _glut_prev_y = y;
-
- uint32_t m = glutGetModifiers();
- ev.mouse_motion.mod.alt = (m & GLUT_ACTIVE_ALT) != 0;
- ev.mouse_motion.mod.shift = (m & GLUT_ACTIVE_SHIFT) != 0;
- ev.mouse_motion.mod.control = (m & GLUT_ACTIVE_CTRL) != 0;
-
- os->push_input(ev);
-}
-
-static void _gfx_idle() {
-
- glutPostRedisplay();
-}
-
-int start_step = 0;
-
-static void _godot_draw(void) {
-
- if (start_step == 1) {
- start_step = 2;
- Main::start();
- os->main_loop_begin();
- }
-
- if (start_step == 2) {
- os->main_loop_iterate();
- }
-
- glutSwapBuffers();
-}
-
-extern "C" {
-
-void main_after_fs_sync() {
-
- start_step = 1;
-}
+ // Ease up compatibility
+ ResourceLoader::set_abort_on_missing_resources(false);
+ Main::start();
+ os->main_loop_begin();
+ emscripten_set_main_loop(main_loop, 0, false);
}
int main(int argc, char *argv[]) {
- /* Initialize the window */
printf("let it go dude!\n");
- glutInit(&argc, argv);
- os = new OS_JavaScript(argv[0], _gfx_init, NULL, NULL);
- Error err = Main::setup(argv[0], argc - 1, &argv[1]);
-
- ResourceLoader::set_abort_on_missing_resources(false); //ease up compatibility
-
- glutMouseFunc(_glut_mouse_button);
- glutMotionFunc(_glut_mouse_motion);
- glutPassiveMotionFunc(_glut_mouse_motion);
-
- /* Set up glut callback functions */
- glutIdleFunc(_gfx_idle);
- // glutReshapeFunc(gears_reshape);
- glutDisplayFunc(_godot_draw);
- //glutSpecialFunc(gears_special);
-
- //mount persistent file system
+ // sync from persistent state into memory and then
+ // run the 'main_after_fs_sync' function
/* clang-format off */
EM_ASM(
+ Module.noExitRuntime = true;
FS.mkdir('/userfs');
FS.mount(IDBFS, {}, '/userfs');
-
- // sync from persistent state into memory and then
- // run the 'main_after_fs_sync' function
FS.syncfs(true, function(err) {
-
if (err) {
Module.setStatus('Failed to load persistent data\nPlease allow (third-party) cookies');
Module.printErr('Failed to populate IDB file system: ' + err.message);
- Module.exit();
+ Module.noExitRuntime = false;
} else {
Module.print('Successfully populated IDB file system');
- ccall('main_after_fs_sync', 'void', []);
+ ccall('main_after_fs_sync', null);
}
});
);
/* clang-format on */
- glutMainLoop();
+ os = new OS_JavaScript(argv[0], NULL);
+ Error err = Main::setup(argv[0], argc - 1, &argv[1]);
return 0;
+ // continued async in main_after_fs_sync() from syncfs() callback
}
-
-/*
- *
- *09] <azakai|2__> reduz: yes, define TOTAL_MEMORY on Module. for example var Module = { TOTAL_MEMORY: 12345.. }; before the main
- *
- */
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index 71754502cb..dda619a54d 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -41,6 +41,21 @@
#include <emscripten.h>
#include <stdlib.h>
+#define DOM_BUTTON_LEFT 0
+#define DOM_BUTTON_MIDDLE 1
+#define DOM_BUTTON_RIGHT 2
+
+template <typename T>
+static InputModifierState dom2godot_mod(T emscripten_event_ptr) {
+
+ InputModifierState mod;
+ mod.shift = emscripten_event_ptr->shiftKey;
+ mod.alt = emscripten_event_ptr->altKey;
+ mod.control = emscripten_event_ptr->ctrlKey;
+ mod.meta = emscripten_event_ptr->metaKey;
+ return mod;
+}
+
int OS_JavaScript::get_video_driver_count() const {
return 1;
@@ -130,15 +145,188 @@ static EM_BOOL _fullscreen_change_callback(int event_type, const EmscriptenFulls
return false;
}
+static InputDefault *_input;
+
+static EM_BOOL _mousebutton_callback(int event_type, const EmscriptenMouseEvent *mouse_event, void *user_data) {
+
+ ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_MOUSEDOWN && event_type != EMSCRIPTEN_EVENT_MOUSEUP, false);
+
+ InputEvent ev;
+ ev.type = InputEvent::MOUSE_BUTTON;
+ ev.mouse_button.pressed = event_type == EMSCRIPTEN_EVENT_MOUSEDOWN;
+ ev.mouse_button.global_x = ev.mouse_button.x = mouse_event->canvasX;
+ ev.mouse_button.global_y = ev.mouse_button.y = mouse_event->canvasY;
+ ev.mouse_button.mod = dom2godot_mod(mouse_event);
+
+ switch (mouse_event->button) {
+ case DOM_BUTTON_LEFT: ev.mouse_button.button_index = BUTTON_LEFT; break;
+ case DOM_BUTTON_MIDDLE: ev.mouse_button.button_index = BUTTON_MIDDLE; break;
+ case DOM_BUTTON_RIGHT: ev.mouse_button.button_index = BUTTON_RIGHT; break;
+ default: return false;
+ }
+
+ ev.mouse_button.button_mask = _input->get_mouse_button_mask();
+ if (ev.mouse_button.pressed)
+ ev.mouse_button.button_mask |= 1 << ev.mouse_button.button_index;
+ else
+ ev.mouse_button.button_mask &= ~(1 << ev.mouse_button.button_index);
+ ev.mouse_button.button_mask >>= 1;
+
+ _input->parse_input_event(ev);
+ return true;
+}
+
+static EM_BOOL _mousemove_callback(int event_type, const EmscriptenMouseEvent *mouse_event, void *user_data) {
+
+ ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_MOUSEMOVE, false);
+
+ InputEvent ev;
+ ev.type = InputEvent::MOUSE_MOTION;
+ ev.mouse_motion.mod = dom2godot_mod(mouse_event);
+ ev.mouse_motion.button_mask = _input->get_mouse_button_mask() >> 1;
+
+ ev.mouse_motion.global_x = ev.mouse_motion.x = mouse_event->canvasX;
+ ev.mouse_motion.global_y = ev.mouse_motion.y = mouse_event->canvasY;
+
+ ev.mouse_motion.relative_x = _input->get_mouse_position().x - ev.mouse_motion.x;
+ ev.mouse_motion.relative_y = _input->get_mouse_position().y - ev.mouse_motion.y;
+
+ _input->set_mouse_position(Point2(ev.mouse_motion.x, ev.mouse_motion.y));
+ ev.mouse_motion.speed_x = _input->get_last_mouse_speed().x;
+ ev.mouse_motion.speed_y = _input->get_last_mouse_speed().y;
+
+ _input->parse_input_event(ev);
+ return true;
+}
+
+static EM_BOOL _wheel_callback(int event_type, const EmscriptenWheelEvent *wheel_event, void *user_data) {
+
+ ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_WHEEL, false);
+
+ InputEvent ev;
+ ev.type = InputEvent::MOUSE_BUTTON;
+ ev.mouse_button.button_mask = _input->get_mouse_button_mask() >> 1;
+ ev.mouse_button.global_x = ev.mouse_button.x = _input->get_mouse_position().x;
+ ev.mouse_button.global_y = ev.mouse_button.y = _input->get_mouse_position().y;
+ ev.mouse_button.mod.shift = _input->is_key_pressed(KEY_SHIFT);
+ ev.mouse_button.mod.alt = _input->is_key_pressed(KEY_ALT);
+ ev.mouse_button.mod.control = _input->is_key_pressed(KEY_CONTROL);
+ ev.mouse_button.mod.meta = _input->is_key_pressed(KEY_META);
+
+ if (wheel_event->deltaY < 0)
+ ev.mouse_button.button_index = BUTTON_WHEEL_UP;
+ else if (wheel_event->deltaY > 0)
+ ev.mouse_button.button_index = BUTTON_WHEEL_DOWN;
+ else if (wheel_event->deltaX > 0)
+ ev.mouse_button.button_index = BUTTON_WHEEL_LEFT;
+ else if (wheel_event->deltaX < 0)
+ ev.mouse_button.button_index = BUTTON_WHEEL_RIGHT;
+ else
+ return false;
+
+ ev.mouse_button.pressed = true;
+ _input->parse_input_event(ev);
+
+ ev.mouse_button.pressed = false;
+ _input->parse_input_event(ev);
+
+ return true;
+}
+
+static Point2 _prev_touches[32];
+
+static EM_BOOL _touchpress_callback(int event_type, const EmscriptenTouchEvent *touch_event, void *user_data) {
+
+ ERR_FAIL_COND_V(
+ event_type != EMSCRIPTEN_EVENT_TOUCHSTART &&
+ event_type != EMSCRIPTEN_EVENT_TOUCHEND &&
+ event_type != EMSCRIPTEN_EVENT_TOUCHCANCEL,
+ false);
+
+ InputEvent ev;
+ ev.type = InputEvent::SCREEN_TOUCH;
+ int lowest_id_index = -1;
+ for (int i = 0; i < touch_event->numTouches; ++i) {
+
+ const EmscriptenTouchPoint &touch = touch_event->touches[i];
+ if (lowest_id_index == -1 || touch.identifier < touch_event->touches[lowest_id_index].identifier)
+ lowest_id_index = i;
+ if (!touch.isChanged)
+ continue;
+ ev.screen_touch.index = touch.identifier;
+ _prev_touches[i].x = ev.screen_touch.x = touch.canvasX;
+ _prev_touches[i].y = ev.screen_touch.y = touch.canvasY;
+ ev.screen_touch.pressed = event_type == EMSCRIPTEN_EVENT_TOUCHSTART;
+
+ _input->parse_input_event(ev);
+ }
+
+ if (touch_event->touches[lowest_id_index].isChanged) {
+
+ ev.type = InputEvent::MOUSE_BUTTON;
+ ev.mouse_button.mod = dom2godot_mod(touch_event);
+ ev.mouse_button.button_mask = _input->get_mouse_button_mask() >> 1;
+ ev.mouse_button.global_x = ev.mouse_button.x = touch_event->touches[lowest_id_index].canvasX;
+ ev.mouse_button.global_y = ev.mouse_button.y = touch_event->touches[lowest_id_index].canvasY;
+ ev.mouse_button.button_index = BUTTON_LEFT;
+ ev.mouse_button.pressed = event_type == EMSCRIPTEN_EVENT_TOUCHSTART;
+
+ _input->parse_input_event(ev);
+ }
+ return true;
+}
+
+static EM_BOOL _touchmove_callback(int event_type, const EmscriptenTouchEvent *touch_event, void *user_data) {
+
+ ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_TOUCHMOVE, false);
+
+ InputEvent ev;
+ ev.type = InputEvent::SCREEN_DRAG;
+ int lowest_id_index = -1;
+ for (int i = 0; i < touch_event->numTouches; ++i) {
+
+ const EmscriptenTouchPoint &touch = touch_event->touches[i];
+ if (lowest_id_index == -1 || touch.identifier < touch_event->touches[lowest_id_index].identifier)
+ lowest_id_index = i;
+ if (!touch.isChanged)
+ continue;
+ ev.screen_drag.index = touch.identifier;
+ ev.screen_drag.x = touch.canvasX;
+ ev.screen_drag.y = touch.canvasY;
+ Point2 &prev = _prev_touches[i];
+ ev.screen_drag.relative_x = touch.canvasX - prev.x;
+ ev.screen_drag.relative_y = touch.canvasY - prev.y;
+ prev.x = ev.screen_drag.x;
+ prev.y = ev.screen_drag.y;
+
+ _input->parse_input_event(ev);
+ }
+
+ if (touch_event->touches[lowest_id_index].isChanged) {
+
+ ev.type = InputEvent::MOUSE_MOTION;
+ ev.mouse_motion.mod = dom2godot_mod(touch_event);
+ ev.mouse_motion.button_mask = _input->get_mouse_button_mask() >> 1;
+ ev.mouse_motion.global_x = ev.mouse_motion.x = touch_event->touches[lowest_id_index].canvasX;
+ ev.mouse_motion.global_y = ev.mouse_motion.y = touch_event->touches[lowest_id_index].canvasY;
+ ev.mouse_motion.relative_x = _input->get_mouse_position().x - ev.mouse_motion.x;
+ ev.mouse_motion.relative_y = _input->get_mouse_position().y - ev.mouse_motion.y;
+
+ _input->set_mouse_position(Point2(ev.mouse_motion.x, ev.mouse_motion.y));
+ ev.mouse_motion.speed_x = _input->get_last_mouse_speed().x;
+ ev.mouse_motion.speed_y = _input->get_last_mouse_speed().y;
+
+ _input->parse_input_event(ev);
+ }
+ return true;
+}
+
static InputEvent _setup_key_event(const EmscriptenKeyboardEvent *emscripten_event) {
InputEvent ev;
ev.type = InputEvent::KEY;
ev.key.echo = emscripten_event->repeat;
- ev.key.mod.alt = emscripten_event->altKey;
- ev.key.mod.shift = emscripten_event->shiftKey;
- ev.key.mod.control = emscripten_event->ctrlKey;
- ev.key.mod.meta = emscripten_event->metaKey;
+ ev.key.mod = dom2godot_mod(emscripten_event);
ev.key.scancode = dom2godot_scancode(emscripten_event->keyCode);
String unicode = String::utf8(emscripten_event->key);
@@ -167,7 +355,7 @@ static EM_BOOL _keydown_callback(int event_type, const EmscriptenKeyboardEvent *
deferred_key_event = ev;
return false; // do not suppress keypress event
}
- static_cast<OS_JavaScript *>(user_data)->push_input(ev);
+ _input->parse_input_event(ev);
return true;
}
@@ -176,7 +364,7 @@ static EM_BOOL _keypress_callback(int event_type, const EmscriptenKeyboardEvent
ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_KEYPRESS, false);
deferred_key_event.key.unicode = key_event->charCode;
- static_cast<OS_JavaScript *>(user_data)->push_input(deferred_key_event);
+ _input->parse_input_event(deferred_key_event);
return true;
}
@@ -186,7 +374,7 @@ static EM_BOOL _keyup_callback(int event_type, const EmscriptenKeyboardEvent *ke
InputEvent ev = _setup_key_event(key_event);
ev.key.pressed = false;
- static_cast<OS_JavaScript *>(user_data)->push_input(ev);
+ _input->parse_input_event(ev);
return ev.key.scancode != KEY_UNKNOWN && ev.key.scancode != 0;
}
@@ -202,14 +390,18 @@ void OS_JavaScript::initialize(const VideoMode &p_desired, int p_video_driver, i
print_line("Init OS");
- if (gfx_init_func)
- gfx_init_func(gfx_init_ud, use_gl2, p_desired.width, p_desired.height, p_desired.fullscreen);
+ EmscriptenWebGLContextAttributes attributes;
+ emscripten_webgl_init_context_attributes(&attributes);
+ attributes.alpha = false;
+ attributes.antialias = false;
+ attributes.majorVersion = 2;
+ EMSCRIPTEN_WEBGL_CONTEXT_HANDLE ctx = emscripten_webgl_create_context(NULL, &attributes);
+ ERR_FAIL_COND(emscripten_webgl_make_context_current(ctx) != EMSCRIPTEN_RESULT_SUCCESS);
- // nothing to do here, can't fulfil fullscreen request due to
- // browser security, window size is already set from HTML
video_mode = p_desired;
+ // can't fulfil fullscreen request due to browser security
video_mode.fullscreen = false;
- _windowed_size = get_window_size();
+ set_window_size(Size2(p_desired.width, p_desired.height));
// find locale, emscripten only sets "C"
char locale_ptr[16];
@@ -257,25 +449,34 @@ void OS_JavaScript::initialize(const VideoMode &p_desired, int p_video_driver, i
physics_2d_server->init();
input = memnew(InputDefault);
+ _input = input;
power_manager = memnew(PowerJavascript);
#define EM_CHECK(ev) \
if (result != EMSCRIPTEN_RESULT_SUCCESS) \
ERR_PRINTS("Error while setting " #ev " callback: Code " + itos(result))
-#define SET_EM_CALLBACK(ev, cb) \
- result = emscripten_set_##ev##_callback(NULL, this, true, &cb); \
+#define SET_EM_CALLBACK(target, ev, cb) \
+ result = emscripten_set_##ev##_callback(target, this, true, &cb); \
EM_CHECK(ev)
#define SET_EM_CALLBACK_NODATA(ev, cb) \
result = emscripten_set_##ev##_callback(NULL, true, &cb); \
EM_CHECK(ev)
EMSCRIPTEN_RESULT result;
- SET_EM_CALLBACK(keydown, _keydown_callback)
- SET_EM_CALLBACK(keypress, _keypress_callback)
- SET_EM_CALLBACK(keyup, _keyup_callback)
- SET_EM_CALLBACK(resize, _browser_resize_callback)
- SET_EM_CALLBACK(fullscreenchange, _fullscreen_change_callback)
+ SET_EM_CALLBACK("#canvas", mousemove, _mousemove_callback)
+ SET_EM_CALLBACK("#canvas", mousedown, _mousebutton_callback)
+ SET_EM_CALLBACK("#canvas", mouseup, _mousebutton_callback)
+ SET_EM_CALLBACK("#canvas", wheel, _wheel_callback)
+ SET_EM_CALLBACK("#canvas", touchstart, _touchpress_callback)
+ SET_EM_CALLBACK("#canvas", touchmove, _touchmove_callback)
+ SET_EM_CALLBACK("#canvas", touchend, _touchpress_callback)
+ SET_EM_CALLBACK("#canvas", touchcancel, _touchpress_callback)
+ SET_EM_CALLBACK(NULL, keydown, _keydown_callback)
+ SET_EM_CALLBACK(NULL, keypress, _keypress_callback)
+ SET_EM_CALLBACK(NULL, keyup, _keyup_callback)
+ SET_EM_CALLBACK(NULL, resize, _browser_resize_callback)
+ SET_EM_CALLBACK(NULL, fullscreenchange, _fullscreen_change_callback)
SET_EM_CALLBACK_NODATA(gamepadconnected, joy_callback_func)
SET_EM_CALLBACK_NODATA(gamepaddisconnected, joy_callback_func)
@@ -316,20 +517,87 @@ void OS_JavaScript::alert(const String &p_alert, const String &p_title) {
/* clang-format on */
}
-void OS_JavaScript::set_mouse_show(bool p_show) {
+static const char *godot2dom_cursor(OS::CursorShape p_shape) {
+
+ switch (p_shape) {
+ case OS::CURSOR_ARROW:
+ default:
+ return "auto";
+ case OS::CURSOR_IBEAM: return "text";
+ case OS::CURSOR_POINTING_HAND: return "pointer";
+ case OS::CURSOR_CROSS: return "crosshair";
+ case OS::CURSOR_WAIT: return "progress";
+ case OS::CURSOR_BUSY: return "wait";
+ case OS::CURSOR_DRAG: return "grab";
+ case OS::CURSOR_CAN_DROP: return "grabbing";
+ case OS::CURSOR_FORBIDDEN: return "no-drop";
+ case OS::CURSOR_VSIZE: return "ns-resize";
+ case OS::CURSOR_HSIZE: return "ew-resize";
+ case OS::CURSOR_BDIAGSIZE: return "nesw-resize";
+ case OS::CURSOR_FDIAGSIZE: return "nwse-resize";
+ case OS::CURSOR_MOVE: return "move";
+ case OS::CURSOR_VSPLIT: return "row-resize";
+ case OS::CURSOR_HSPLIT: return "col-resize";
+ case OS::CURSOR_HELP: return "help";
+ }
+}
- //javascript has no mouse...
+void OS_JavaScript::set_css_cursor(const char *p_cursor) {
+
+ /* clang-format off */
+ EM_ASM_({
+ Module.canvas.style.cursor = Module.UTF8ToString($0);
+ }, p_cursor);
+ /* clang-format on */
}
-void OS_JavaScript::set_mouse_grab(bool p_grab) {
+const char *OS_JavaScript::get_css_cursor() const {
- //it really has no mouse...!
+ char cursor[16];
+ /* clang-format off */
+ EM_ASM_INT({
+ Module.stringToUTF8(Module.canvas.style.cursor ? Module.canvas.style.cursor : 'auto', $0, 16);
+ }, cursor);
+ /* clang-format on */
+ return cursor;
}
-bool OS_JavaScript::is_mouse_grab_enabled() const {
+void OS_JavaScript::set_mouse_mode(OS::MouseMode p_mode) {
- //*sigh* technology has evolved so much since i was a kid..
- return false;
+ ERR_FAIL_INDEX(p_mode, MOUSE_MODE_CONFINED + 1);
+ ERR_EXPLAIN("MOUSE_MODE_CONFINED is not supported for the HTML5 platform");
+ ERR_FAIL_COND(p_mode == MOUSE_MODE_CONFINED);
+ if (p_mode == get_mouse_mode())
+ return;
+
+ if (p_mode == MOUSE_MODE_VISIBLE) {
+
+ set_css_cursor(godot2dom_cursor(cursor_shape));
+ emscripten_exit_pointerlock();
+
+ } else if (p_mode == MOUSE_MODE_HIDDEN) {
+
+ set_css_cursor("none");
+ emscripten_exit_pointerlock();
+
+ } else if (p_mode == MOUSE_MODE_CAPTURED) {
+
+ EMSCRIPTEN_RESULT result = emscripten_request_pointerlock("canvas", false);
+ ERR_EXPLAIN("MOUSE_MODE_CAPTURED can only be entered from within an appropriate input callback");
+ ERR_FAIL_COND(result == EMSCRIPTEN_RESULT_FAILED_NOT_DEFERRED);
+ ERR_FAIL_COND(result != EMSCRIPTEN_RESULT_SUCCESS);
+ set_css_cursor(godot2dom_cursor(cursor_shape));
+ }
+}
+
+OS::MouseMode OS_JavaScript::get_mouse_mode() const {
+
+ if (!strcmp(get_css_cursor(), "none"))
+ return MOUSE_MODE_HIDDEN;
+
+ EmscriptenPointerlockChangeEvent ev;
+ emscripten_get_pointerlock_status(&ev);
+ return ev.isActive && (strcmp(ev.id, "canvas") == 0) ? MOUSE_MODE_CAPTURED : MOUSE_MODE_VISIBLE;
}
Point2 OS_JavaScript::get_mouse_position() const {
@@ -339,7 +607,7 @@ Point2 OS_JavaScript::get_mouse_position() const {
int OS_JavaScript::get_mouse_button_state() const {
- return last_button_mask;
+ return input->get_mouse_button_mask();
}
void OS_JavaScript::set_window_title(const String &p_title) {
@@ -463,7 +731,11 @@ bool OS_JavaScript::can_draw() const {
void OS_JavaScript::set_cursor_shape(CursorShape p_shape) {
- //javascript really really really has no mouse.. how amazing..
+ ERR_FAIL_INDEX(p_shape, CURSOR_MAX);
+
+ cursor_shape = p_shape;
+ if (get_mouse_mode() != MOUSE_MODE_HIDDEN)
+ set_css_cursor(godot2dom_cursor(cursor_shape));
}
void OS_JavaScript::main_loop_begin() {
@@ -518,197 +790,6 @@ void OS_JavaScript::main_loop_focusin() {
//audio_driver_javascript.set_pause(false);
}
-void OS_JavaScript::push_input(const InputEvent &p_ev) {
-
- InputEvent ev = p_ev;
- if (ev.type == InputEvent::MOUSE_MOTION) {
- input->set_mouse_position(Point2(ev.mouse_motion.x, ev.mouse_motion.y));
- } else if (ev.type == InputEvent::MOUSE_BUTTON) {
- last_button_mask = ev.mouse_button.button_mask;
- }
- input->parse_input_event(p_ev);
-}
-
-void OS_JavaScript::process_touch(int p_what, int p_pointer, const Vector<TouchPos> &p_points) {
-
- //print_line("ev: "+itos(p_what)+" pnt: "+itos(p_pointer)+" pointc: "+itos(p_points.size()));
-
- switch (p_what) {
- case 0: { //gesture begin
-
- if (touch.size()) {
- //end all if exist
- InputEvent ev;
- ev.type = InputEvent::MOUSE_BUTTON;
- ev.mouse_button.button_index = BUTTON_LEFT;
- ev.mouse_button.button_mask = BUTTON_MASK_LEFT;
- ev.mouse_button.pressed = false;
- ev.mouse_button.x = touch[0].pos.x;
- ev.mouse_button.y = touch[0].pos.y;
- ev.mouse_button.global_x = touch[0].pos.x;
- ev.mouse_button.global_y = touch[0].pos.y;
- input->parse_input_event(ev);
-
- for (int i = 0; i < touch.size(); i++) {
-
- InputEvent ev;
- ev.type = InputEvent::SCREEN_TOUCH;
- ev.screen_touch.index = touch[i].id;
- ev.screen_touch.pressed = false;
- ev.screen_touch.x = touch[i].pos.x;
- ev.screen_touch.y = touch[i].pos.y;
- input->parse_input_event(ev);
- }
- }
-
- touch.resize(p_points.size());
- for (int i = 0; i < p_points.size(); i++) {
- touch[i].id = p_points[i].id;
- touch[i].pos = p_points[i].pos;
- }
-
- {
- //send mouse
- InputEvent ev;
- ev.type = InputEvent::MOUSE_BUTTON;
- ev.mouse_button.button_index = BUTTON_LEFT;
- ev.mouse_button.button_mask = BUTTON_MASK_LEFT;
- ev.mouse_button.pressed = true;
- ev.mouse_button.x = touch[0].pos.x;
- ev.mouse_button.y = touch[0].pos.y;
- ev.mouse_button.global_x = touch[0].pos.x;
- ev.mouse_button.global_y = touch[0].pos.y;
- last_mouse = touch[0].pos;
- input->parse_input_event(ev);
- }
-
- //send touch
- for (int i = 0; i < touch.size(); i++) {
-
- InputEvent ev;
- ev.type = InputEvent::SCREEN_TOUCH;
- ev.screen_touch.index = touch[i].id;
- ev.screen_touch.pressed = true;
- ev.screen_touch.x = touch[i].pos.x;
- ev.screen_touch.y = touch[i].pos.y;
- input->parse_input_event(ev);
- }
-
- } break;
- case 1: { //motion
-
- if (p_points.size()) {
- //send mouse, should look for point 0?
- InputEvent ev;
- ev.type = InputEvent::MOUSE_MOTION;
- ev.mouse_motion.button_mask = BUTTON_MASK_LEFT;
- ev.mouse_motion.x = p_points[0].pos.x;
- ev.mouse_motion.y = p_points[0].pos.y;
- input->set_mouse_position(Point2(ev.mouse_motion.x, ev.mouse_motion.y));
- ev.mouse_motion.speed_x = input->get_last_mouse_speed().x;
- ev.mouse_motion.speed_y = input->get_last_mouse_speed().y;
- ev.mouse_motion.relative_x = p_points[0].pos.x - last_mouse.x;
- ev.mouse_motion.relative_y = p_points[0].pos.y - last_mouse.y;
- last_mouse = p_points[0].pos;
- input->parse_input_event(ev);
- }
-
- ERR_FAIL_COND(touch.size() != p_points.size());
-
- for (int i = 0; i < touch.size(); i++) {
-
- int idx = -1;
- for (int j = 0; j < p_points.size(); j++) {
-
- if (touch[i].id == p_points[j].id) {
- idx = j;
- break;
- }
- }
-
- ERR_CONTINUE(idx == -1);
-
- if (touch[i].pos == p_points[idx].pos)
- continue; //no move unncesearily
-
- InputEvent ev;
- ev.type = InputEvent::SCREEN_DRAG;
- ev.screen_drag.index = touch[i].id;
- ev.screen_drag.x = p_points[idx].pos.x;
- ev.screen_drag.y = p_points[idx].pos.y;
- ev.screen_drag.relative_x = p_points[idx].pos.x - touch[i].pos.x;
- ev.screen_drag.relative_y = p_points[idx].pos.y - touch[i].pos.y;
- input->parse_input_event(ev);
- touch[i].pos = p_points[idx].pos;
- }
-
- } break;
- case 2: { //release
-
- if (touch.size()) {
- //end all if exist
- InputEvent ev;
- ev.type = InputEvent::MOUSE_BUTTON;
- ev.mouse_button.button_index = BUTTON_LEFT;
- ev.mouse_button.button_mask = BUTTON_MASK_LEFT;
- ev.mouse_button.pressed = false;
- ev.mouse_button.x = touch[0].pos.x;
- ev.mouse_button.y = touch[0].pos.y;
- ev.mouse_button.global_x = touch[0].pos.x;
- ev.mouse_button.global_y = touch[0].pos.y;
- input->parse_input_event(ev);
-
- for (int i = 0; i < touch.size(); i++) {
-
- InputEvent ev;
- ev.type = InputEvent::SCREEN_TOUCH;
- ev.screen_touch.index = touch[i].id;
- ev.screen_touch.pressed = false;
- ev.screen_touch.x = touch[i].pos.x;
- ev.screen_touch.y = touch[i].pos.y;
- input->parse_input_event(ev);
- }
- touch.clear();
- }
-
- } break;
- case 3: { // add tuchi
-
- ERR_FAIL_INDEX(p_pointer, p_points.size());
-
- TouchPos tp = p_points[p_pointer];
- touch.push_back(tp);
-
- InputEvent ev;
- ev.type = InputEvent::SCREEN_TOUCH;
- ev.screen_touch.index = tp.id;
- ev.screen_touch.pressed = true;
- ev.screen_touch.x = tp.pos.x;
- ev.screen_touch.y = tp.pos.y;
- input->parse_input_event(ev);
-
- } break;
- case 4: {
-
- for (int i = 0; i < touch.size(); i++) {
- if (touch[i].id == p_pointer) {
-
- InputEvent ev;
- ev.type = InputEvent::SCREEN_TOUCH;
- ev.screen_touch.index = touch[i].id;
- ev.screen_touch.pressed = false;
- ev.screen_touch.x = touch[i].pos.x;
- ev.screen_touch.y = touch[i].pos.y;
- input->parse_input_event(ev);
- touch.remove(i);
- i--;
- }
- }
-
- } break;
- }
-}
-
void OS_JavaScript::process_accelerometer(const Vector3 &p_accelerometer) {
input->set_accelerometer(p_accelerometer);
@@ -829,11 +910,8 @@ int OS_JavaScript::get_power_percent_left() {
return power_manager->get_power_percent_left();
}
-OS_JavaScript::OS_JavaScript(const char *p_execpath, GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, GetDataDirFunc p_get_data_dir_func) {
+OS_JavaScript::OS_JavaScript(const char *p_execpath, GetDataDirFunc p_get_data_dir_func) {
set_cmdline(p_execpath, get_cmdline_args());
- gfx_init_func = p_gfx_init_func;
- gfx_init_ud = p_gfx_init_ud;
- last_button_mask = 0;
main_loop = NULL;
gl_extensions = NULL;
window_maximized = false;
diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h
index ea906c560f..2bc603d8d9 100644
--- a/platform/javascript/os_javascript.h
+++ b/platform/javascript/os_javascript.h
@@ -45,24 +45,9 @@
#include <emscripten/html5.h>
-typedef void (*GFXInitFunc)(void *ud, bool gl2, int w, int h, bool fs);
typedef String (*GetDataDirFunc)();
class OS_JavaScript : public OS_Unix {
-public:
- struct TouchPos {
- int id;
- Point2 pos;
- };
-
-private:
- Vector<TouchPos> touch;
- Point2 last_mouse;
- int last_button_mask;
- GFXInitFunc gfx_init_func;
- void *gfx_init_ud;
-
- bool use_gl2;
int64_t time_to_save_sync;
int64_t last_sync_time;
@@ -76,6 +61,7 @@ private:
InputDefault *input;
bool window_maximized;
VideoMode video_mode;
+ CursorShape cursor_shape;
MainLoop *main_loop;
GetDataDirFunc get_data_dir_func;
@@ -90,6 +76,9 @@ private:
void process_joypads();
+ void set_css_cursor(const char *);
+ const char *get_css_cursor() const;
+
public:
// functions used by main to initialize/deintialize the OS
virtual int get_video_driver_count() const;
@@ -119,9 +108,8 @@ public:
virtual void alert(const String &p_alert, const String &p_title = "ALERT!");
- virtual void set_mouse_show(bool p_show);
- virtual void set_mouse_grab(bool p_grab);
- virtual bool is_mouse_grab_enabled() const;
+ virtual void set_mouse_mode(MouseMode p_mode);
+ virtual MouseMode get_mouse_mode() const;
virtual Point2 get_mouse_position() const;
virtual int get_mouse_button_state() const;
virtual void set_window_title(const String &p_title);
@@ -166,7 +154,6 @@ public:
virtual String get_resource_dir() const;
void process_accelerometer(const Vector3 &p_accelerometer);
- void process_touch(int p_what, int p_pointer, const Vector<TouchPos> &p_points);
void push_input(const InputEvent &p_ev);
virtual bool is_joy_known(int p_device);
@@ -177,7 +164,7 @@ public:
virtual int get_power_seconds_left();
virtual int get_power_percent_left();
- OS_JavaScript(const char *p_execpath, GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, GetDataDirFunc p_get_data_dir_func);
+ OS_JavaScript(const char *p_execpath, GetDataDirFunc p_get_data_dir_func);
~OS_JavaScript();
};
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h
index 2ecc379a7f..ff02bf0794 100644
--- a/platform/osx/os_osx.h
+++ b/platform/osx/os_osx.h
@@ -151,7 +151,7 @@ public:
virtual Size2 get_window_size() const;
- virtual void set_icon(const Image &p_icon);
+ virtual void set_icon(const Ref<Image> &p_icon);
virtual MainLoop *get_main_loop() const;
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm
index c6c2e6dab1..065506c612 100644
--- a/platform/osx/os_osx.mm
+++ b/platform/osx/os_osx.mm
@@ -788,6 +788,22 @@ static int translateKey(unsigned int key) {
*/
}
+inline void sendScrollEvent(int button, double factor) {
+ InputEvent ev;
+ ev.type = InputEvent::MOUSE_BUTTON;
+ ev.mouse_button.button_index = button;
+ ev.mouse_button.factor = factor;
+ ev.mouse_button.pressed = true;
+ ev.mouse_button.x = mouse_x;
+ ev.mouse_button.y = mouse_y;
+ ev.mouse_button.global_x = mouse_x;
+ ev.mouse_button.global_y = mouse_y;
+ ev.mouse_button.button_mask = button_mask;
+ OS_OSX::singleton->push_input(ev);
+ ev.mouse_button.pressed = false;
+ OS_OSX::singleton->push_input(ev);
+}
+
- (void)scrollWheel:(NSEvent *)event {
double deltaX, deltaY;
@@ -797,48 +813,21 @@ static int translateKey(unsigned int key) {
deltaY = [event scrollingDeltaY];
if ([event hasPreciseScrollingDeltas]) {
- deltaX *= 0.1;
- deltaY *= 0.1;
+ deltaX *= 0.03;
+ deltaY *= 0.03;
}
- } else {
+ } else
+#endif // MAC_OS_X_VERSION_MAX_ALLOWED
+ {
deltaX = [event deltaX];
deltaY = [event deltaY];
}
-#else
- deltaX = [event deltaX];
- deltaY = [event deltaY];
-#endif /*MAC_OS_X_VERSION_MAX_ALLOWED*/
-
- if (fabs(deltaY)) {
-
- InputEvent ev;
- ev.type = InputEvent::MOUSE_BUTTON;
- ev.mouse_button.button_index = deltaY > 0 ? BUTTON_WHEEL_UP : BUTTON_WHEEL_DOWN;
- ev.mouse_button.pressed = true;
- ev.mouse_button.x = mouse_x;
- ev.mouse_button.y = mouse_y;
- ev.mouse_button.global_x = mouse_x;
- ev.mouse_button.global_y = mouse_y;
- ev.mouse_button.button_mask = button_mask;
- OS_OSX::singleton->push_input(ev);
- ev.mouse_button.pressed = false;
- OS_OSX::singleton->push_input(ev);
- }
if (fabs(deltaX)) {
-
- InputEvent ev;
- ev.type = InputEvent::MOUSE_BUTTON;
- ev.mouse_button.button_index = deltaX < 0 ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_LEFT;
- ev.mouse_button.pressed = true;
- ev.mouse_button.x = mouse_x;
- ev.mouse_button.y = mouse_y;
- ev.mouse_button.global_x = mouse_x;
- ev.mouse_button.global_y = mouse_y;
- ev.mouse_button.button_mask = button_mask;
- OS_OSX::singleton->push_input(ev);
- ev.mouse_button.pressed = false;
- OS_OSX::singleton->push_input(ev);
+ sendScrollEvent(0 > deltaX ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_LEFT, fabs(deltaX * 0.3));
+ }
+ if (fabs(deltaY)) {
+ sendScrollEvent(0 < deltaY ? BUTTON_WHEEL_UP : BUTTON_WHEEL_DOWN, fabs(deltaY * 0.3));
}
}
@@ -1238,26 +1227,27 @@ void OS_OSX::set_window_title(const String &p_title) {
[window_object setTitle:[NSString stringWithUTF8String:p_title.utf8().get_data()]];
}
-void OS_OSX::set_icon(const Image &p_icon) {
+void OS_OSX::set_icon(const Ref<Image> &p_icon) {
- Image img = p_icon;
- img.convert(Image::FORMAT_RGBA8);
+ Ref<Image> img = p_icon;
+ img = img->duplicate();
+ img->convert(Image::FORMAT_RGBA8);
NSBitmapImageRep *imgrep = [[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:NULL
- pixelsWide:p_icon.get_width()
- pixelsHigh:p_icon.get_height()
+ pixelsWide:img->get_width()
+ pixelsHigh:img->get_height()
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
- bytesPerRow:p_icon.get_width() * 4
+ bytesPerRow:img->get_width() * 4
bitsPerPixel:32] autorelease];
ERR_FAIL_COND(imgrep == nil);
uint8_t *pixels = [imgrep bitmapData];
- int len = img.get_width() * img.get_height();
- PoolVector<uint8_t> data = img.get_data();
+ int len = img->get_width() * img->get_height();
+ PoolVector<uint8_t> data = img->get_data();
PoolVector<uint8_t>::Read r = data.read();
/* Premultiply the alpha channel */
@@ -1269,7 +1259,7 @@ void OS_OSX::set_icon(const Image &p_icon) {
pixels[i * 4 + 3] = alpha;
}
- NSImage *nsimg = [[[NSImage alloc] initWithSize:NSMakeSize(img.get_width(), img.get_height())] autorelease];
+ NSImage *nsimg = [[[NSImage alloc] initWithSize:NSMakeSize(img->get_width(), img->get_height())] autorelease];
ERR_FAIL_COND(nsimg == nil);
[nsimg addRepresentation:imgrep];
@@ -1630,7 +1620,6 @@ void OS_OSX::process_events() {
void OS_OSX::push_input(const InputEvent &p_event) {
InputEvent ev = p_event;
- //print_line("EV: "+String(ev));
input->parse_input_event(ev);
}
diff --git a/platform/osx/power_osx.cpp b/platform/osx/power_osx.cpp
index 0057fe8acc..2ef1a65ff1 100644
--- a/platform/osx/power_osx.cpp
+++ b/platform/osx/power_osx.cpp
@@ -27,6 +27,32 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+
+/*
+Adapted from corresponding SDL 2.0 code.
+*/
+
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
#include "power_osx.h"
#include <CoreFoundation/CoreFoundation.h>
diff --git a/platform/uwp/SCsub b/platform/uwp/SCsub
index 0167ea9e02..7ee5aa2ac3 100644
--- a/platform/uwp/SCsub
+++ b/platform/uwp/SCsub
@@ -9,6 +9,7 @@ files = [
'#platform/windows/stream_peer_winsock.cpp',
'#platform/windows/key_mapping_win.cpp',
'joypad_uwp.cpp',
+ 'power_uwp.cpp',
'gl_context_egl.cpp',
'app.cpp',
'os_uwp.cpp',
diff --git a/platform/uwp/app.h b/platform/uwp/app.h
index 647ef0261b..9cbe7669c9 100644
--- a/platform/uwp/app.h
+++ b/platform/uwp/app.h
@@ -107,7 +107,7 @@ namespace GodotUWP
int last_touch_y[32];
int number_of_contacts;
Windows::Foundation::Point last_mouse_pos;
- }
+ };
}
/* clang-format on */
diff --git a/platform/uwp/export/export.cpp b/platform/uwp/export/export.cpp
index 4a164e5ba1..976e6208ee 100644
--- a/platform/uwp/export/export.cpp
+++ b/platform/uwp/export/export.cpp
@@ -72,17 +72,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "editor/editor_import_export.h"
#include "editor/editor_node.h"
#include "global_config.h"
-#include "io/base64.h"
#include "io/marshalls.h"
-#include "io/sha256.h"
-#include "io/unzip.h"
-#include "io/zip.h"
#include "io/zip_io.h"
#include "object.h"
#include "os/file_access.h"
#include "platform/uwp/logo.h"
#include "version.h"
+#include "thirdparty/minizip/unzip.h"
+#include "thirdparty/minizip/zip.h"
+#include "thirdparty/misc/base64.h"
+#include "thirdparty/misc/sha256.h"
+
#include <zlib.h>
// Capabilities
diff --git a/platform/uwp/os_uwp.cpp b/platform/uwp/os_uwp.cpp
index 8b7e821ab3..c68b2ffa33 100644
--- a/platform/uwp/os_uwp.cpp
+++ b/platform/uwp/os_uwp.cpp
@@ -28,24 +28,22 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "os_uwp.h"
-#include "drivers/gles2/rasterizer_gles2.h"
+#include "drivers/gles3/rasterizer_gles3.h"
+#include "drivers/unix/ip_unix.h"
#include "drivers/windows/dir_access_windows.h"
#include "drivers/windows/file_access_windows.h"
#include "drivers/windows/mutex_windows.h"
+#include "drivers/windows/rw_lock_windows.h"
#include "drivers/windows/semaphore_windows.h"
-#include "main/main.h"
-#include "os/memory_pool_dynamic_static.h"
-#include "servers/audio_server.h"
-#include "servers/visual/visual_server_raster.h"
-#include "thread_uwp.h"
-//#include "servers/visual/visual_server_wrap_mt.h"
-#include "drivers/unix/ip_unix.h"
#include "global_config.h"
#include "io/marshalls.h"
-#include "os/memory_pool_dynamic_prealloc.h"
+#include "main/main.h"
#include "platform/windows/packet_peer_udp_winsock.h"
#include "platform/windows/stream_peer_winsock.h"
#include "platform/windows/tcp_server_winsock.h"
+#include "servers/audio_server.h"
+#include "servers/visual/visual_server_raster.h"
+#include "thread_uwp.h"
#include <ppltasks.h>
#include <wrl.h>
@@ -149,9 +147,6 @@ const char *OSUWP::get_audio_driver_name(int p_driver) const {
return AudioDriverManager::get_driver(p_driver)->get_name();
}
-static MemoryPoolStatic *mempool_static = NULL;
-static MemoryPoolDynamic *mempool_dynamic = NULL;
-
void OSUWP::initialize_core() {
last_button_state = 0;
@@ -161,32 +156,19 @@ void OSUWP::initialize_core() {
ThreadUWP::make_default();
SemaphoreWindows::make_default();
MutexWindows::make_default();
+ RWLockWindows::make_default();
FileAccess::make_default<FileAccessWindows>(FileAccess::ACCESS_RESOURCES);
FileAccess::make_default<FileAccessWindows>(FileAccess::ACCESS_USERDATA);
FileAccess::make_default<FileAccessWindows>(FileAccess::ACCESS_FILESYSTEM);
- //FileAccessBufferedFA<FileAccessWindows>::make_default();
DirAccess::make_default<DirAccessWindows>(DirAccess::ACCESS_RESOURCES);
DirAccess::make_default<DirAccessWindows>(DirAccess::ACCESS_USERDATA);
DirAccess::make_default<DirAccessWindows>(DirAccess::ACCESS_FILESYSTEM);
- //TCPServerWinsock::make_default();
- //StreamPeerWinsock::make_default();
-
TCPServerWinsock::make_default();
StreamPeerWinsock::make_default();
PacketPeerUDPWinsock::make_default();
- mempool_static = new MemoryPoolStaticMalloc;
-#if 1
- mempool_dynamic = memnew(MemoryPoolDynamicStatic);
-#else
-#define DYNPOOL_SIZE 4 * 1024 * 1024
- void *buffer = malloc(DYNPOOL_SIZE);
- mempool_dynamic = memnew(MemoryPoolDynamicPrealloc(buffer, DYNPOOL_SIZE));
-
-#endif
-
// We need to know how often the clock is updated
if (!QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_second))
ticks_per_second = 1000;
@@ -259,13 +241,18 @@ void OSUWP::initialize(const VideoMode &p_desired, int p_video_driver, int p_aud
set_video_mode(vm);
gl_context->make_current();
- rasterizer = memnew(RasterizerGLES2);
- visual_server = memnew(VisualServerRaster(rasterizer));
+ RasterizerGLES3::register_config();
+ RasterizerGLES3::make_current();
+
+ visual_server = memnew(VisualServerRaster);
+ // FIXME: Reimplement threaded rendering? Or remove?
+ /*
if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) {
visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD));
}
+ */
//
physics_server = memnew(PhysicsServerSW);
@@ -288,7 +275,7 @@ void OSUWP::initialize(const VideoMode &p_desired, int p_video_driver, int p_aud
ERR_PRINT("Initializing audio failed.");
}
- power_manager = memnew(PowerWinRT);
+ power_manager = memnew(PowerUWP);
managed_object->update_clipboard();
@@ -381,14 +368,6 @@ void OSUWP::finalize() {
if (gl_context)
memdelete(gl_context);
#endif
- if (rasterizer)
- memdelete(rasterizer);
-
- /*
- if (debugger_connection_console) {
- memdelete(debugger_connection_console);
- }
- */
memdelete(input);
@@ -400,11 +379,8 @@ void OSUWP::finalize() {
joypad = nullptr;
}
-void OSUWP::finalize_core() {
- if (mempool_dynamic)
- memdelete(mempool_dynamic);
- delete mempool_static;
+void OSUWP::finalize_core() {
}
void OSUWP::vprint(const char *p_format, va_list p_list, bool p_stderr) {
@@ -770,7 +746,7 @@ String OSUWP::get_executable_path() const {
return "";
}
-void OSUWP::set_icon(const Image &p_icon) {
+void OSUWP::set_icon(const Ref<Image> &p_icon) {
}
bool OSUWP::has_environment(const String &p_var) const {
@@ -880,15 +856,20 @@ String OSUWP::get_data_dir() const {
return String(data_folder->Path->Data()).replace("\\", "/");
}
-PowerState OSWinrt::get_power_state() {
+bool OSUWP::check_feature_support(const String &p_feature) {
+
+ return VisualServer::get_singleton()->has_os_feature(p_feature);
+}
+
+PowerState OSUWP::get_power_state() {
return power_manager->get_power_state();
}
-int OSWinrt::get_power_seconds_left() {
+int OSUWP::get_power_seconds_left() {
return power_manager->get_power_seconds_left();
}
-int OSWinrt::get_power_percent_left() {
+int OSUWP::get_power_percent_left() {
return power_manager->get_power_percent_left();
}
diff --git a/platform/uwp/os_uwp.h b/platform/uwp/os_uwp.h
index 88a1dddae3..22602e4564 100644
--- a/platform/uwp/os_uwp.h
+++ b/platform/uwp/os_uwp.h
@@ -38,7 +38,7 @@
#include "main/input_default.h"
#include "os/input.h"
#include "os/os.h"
-#include "power_winrt.h"
+#include "power_uwp.h"
#include "servers/audio_server.h"
#include "servers/physics/physics_server_sw.h"
#include "servers/physics_2d/physics_2d_server_sw.h"
@@ -94,7 +94,6 @@ private:
int old_x, old_y;
Point2i center;
VisualServer *visual_server;
- Rasterizer *rasterizer;
PhysicsServer *physics_server;
Physics2DServer *physics_2d_server;
int pressrc;
@@ -107,7 +106,7 @@ private:
AudioDriverXAudio2 audio_driver;
- PowerWinRT *power_manager;
+ PowerUWP *power_manager;
MouseMode mouse_mode;
bool alt_mem;
@@ -228,7 +227,7 @@ public:
virtual String get_clipboard() const;
void set_cursor_shape(CursorShape p_shape);
- void set_icon(const Image &p_icon);
+ void set_icon(const Ref<Image> &p_icon);
virtual String get_executable_path() const;
@@ -237,6 +236,8 @@ public:
virtual void move_window_to_foreground();
virtual String get_data_dir() const;
+ virtual bool check_feature_support(const String &p_feature);
+
void set_gl_context(ContextEGL *p_context);
void screen_size_changed();
diff --git a/platform/bb10/power_bb10.cpp b/platform/uwp/power_uwp.cpp
index a683b61376..ece07f84ad 100644
--- a/platform/bb10/power_bb10.cpp
+++ b/platform/uwp/power_uwp.cpp
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* power_bb10.cpp */
+/* power_uwp.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,16 +28,26 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#include "power_bb10.h"
+#include "power_uwp.h"
-#include "core/error_macros.h"
+PowerUWP::PowerUWP()
+ : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) {
+}
-bool PowerBB10::UpdatePowerInfo() {
+PowerUWP::~PowerUWP() {
+}
+bool PowerUWP::UpdatePowerInfo() {
+ // TODO, WinRT: Battery info is available on at least one WinRT platform (Windows Phone 8). Implement UpdatePowerInfo as appropriate. */
+ /* Notes from SDL:
+ - the Win32 function, GetSystemPowerStatus, is not available for use on WinRT
+ - Windows Phone 8 has a 'Battery' class, which is documented as available for C++
+ - More info on WP8's Battery class can be found at http://msdn.microsoft.com/library/windowsphone/develop/jj207231
+ */
return false;
}
-PowerState PowerBB10::get_power_state() {
+PowerState PowerUWP::get_power_state() {
if (UpdatePowerInfo()) {
return power_state;
} else {
@@ -46,7 +56,7 @@ PowerState PowerBB10::get_power_state() {
}
}
-int PowerBB10::get_power_seconds_left() {
+int PowerUWP::get_power_seconds_left() {
if (UpdatePowerInfo()) {
return nsecs_left;
} else {
@@ -55,7 +65,7 @@ int PowerBB10::get_power_seconds_left() {
}
}
-int PowerBB10::get_power_percent_left() {
+int PowerUWP::get_power_percent_left() {
if (UpdatePowerInfo()) {
return percent_left;
} else {
@@ -63,10 +73,3 @@ int PowerBB10::get_power_percent_left() {
return -1;
}
}
-
-PowerBB10::PowerBB10()
- : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) {
-}
-
-PowerBB10::~PowerBB10() {
-}
diff --git a/platform/bb10/power_bb10.h b/platform/uwp/power_uwp.h
index c5c18d5f69..c23d712980 100644
--- a/platform/bb10/power_bb10.h
+++ b/platform/uwp/power_uwp.h
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* power_bb10.h */
+/* power_uwp.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,10 +28,15 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#ifndef PLATFORM_BB10_POWER_BB10_H_
-#define PLATFORM_BB10_POWER_BB10_H_
+#ifndef PLATFORM_UWP_POWER_UWP_H_
+#define PLATFORM_UWP_POWER_UWP_H_
+
+#include "os/dir_access.h"
+#include "os/file_access.h"
+#include "os/power.h"
+
+class PowerUWP {
-class PowerBB10 {
private:
int nsecs_left;
int percent_left;
@@ -40,12 +45,12 @@ private:
bool UpdatePowerInfo();
public:
- PowerBB10();
- virtual ~PowerBB10();
+ PowerUWP();
+ virtual ~PowerUWP();
PowerState get_power_state();
int get_power_seconds_left();
int get_power_percent_left();
};
-#endif /* PLATFORM_BB10_POWER_BB10_H_ */
+#endif /* PLATFORM_UWP_POWER_UWP_H_ */
diff --git a/platform/windows/export/export.cpp b/platform/windows/export/export.cpp
index 2d11bfe4d8..3802e7e784 100644
--- a/platform/windows/export/export.cpp
+++ b/platform/windows/export/export.cpp
@@ -35,7 +35,7 @@ void register_windows_exporter() {
Ref<EditorExportPlatformPC> platform;
platform.instance();
- Image img(_windows_logo);
+ Ref<Image> img = memnew(Image(_windows_logo));
Ref<ImageTexture> logo;
logo.instance();
logo->create_from_image(img);
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 5b57da46d7..42597f79c8 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -509,10 +509,13 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (!motion)
return 0;
- if (motion < 0)
+ if (motion < 0) {
mb.button_index = BUTTON_WHEEL_LEFT;
- else
+ mb.factor = fabs((double)motion / (double)WHEEL_DELTA);
+ } else {
mb.button_index = BUTTON_WHEEL_RIGHT;
+ mb.factor = fabs((double)motion / (double)WHEEL_DELTA);
+ }
} break;
/*
case WM_XBUTTONDOWN: {
@@ -1990,17 +1993,17 @@ String OS_Windows::get_executable_path() const {
wchar_t bufname[4096];
GetModuleFileNameW(NULL, bufname, 4096);
String s = bufname;
- print_line("EXEC PATHP??: " + s);
return s;
}
-void OS_Windows::set_icon(const Image &p_icon) {
+void OS_Windows::set_icon(const Ref<Image> &p_icon) {
- Image icon = p_icon;
- if (icon.get_format() != Image::FORMAT_RGBA8)
- icon.convert(Image::FORMAT_RGBA8);
- int w = icon.get_width();
- int h = icon.get_height();
+ ERR_FAIL_COND(!p_icon.is_valid());
+ Ref<Image> icon = p_icon->duplicate();
+ if (icon->get_format() != Image::FORMAT_RGBA8)
+ icon->convert(Image::FORMAT_RGBA8);
+ int w = icon->get_width();
+ int h = icon->get_height();
/* Create temporary bitmap buffer */
int icon_len = 40 + h * w * 4;
@@ -2021,7 +2024,7 @@ void OS_Windows::set_icon(const Image &p_icon) {
encode_uint32(0, &icon_bmp[36]);
uint8_t *wr = &icon_bmp[40];
- PoolVector<uint8_t>::Read r = icon.get_data().read();
+ PoolVector<uint8_t>::Read r = icon->get_data().read();
for (int i = 0; i < h; i++) {
diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h
index 87eceafa02..4dd05928df 100644
--- a/platform/windows/os_windows.h
+++ b/platform/windows/os_windows.h
@@ -254,7 +254,7 @@ public:
virtual String get_clipboard() const;
void set_cursor_shape(CursorShape p_shape);
- void set_icon(const Image &p_icon);
+ void set_icon(const Ref<Image> &p_icon);
virtual String get_executable_path() const;
diff --git a/platform/windows/packet_peer_udp_winsock.cpp b/platform/windows/packet_peer_udp_winsock.cpp
index f69c0bd2ed..f3b91c1b56 100644
--- a/platform/windows/packet_peer_udp_winsock.cpp
+++ b/platform/windows/packet_peer_udp_winsock.cpp
@@ -203,6 +203,8 @@ Error PacketPeerUDPWinsock::_poll(bool p_wait) {
len = sizeof(struct sockaddr_storage);
++queue_count;
+ if (p_wait)
+ break;
};
if (ret == SOCKET_ERROR) {
diff --git a/platform/windows/power_windows.cpp b/platform/windows/power_windows.cpp
index 1d9756f68b..428bc5dcc2 100644
--- a/platform/windows/power_windows.cpp
+++ b/platform/windows/power_windows.cpp
@@ -28,6 +28,31 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+/*
+Adapted from corresponding SDL 2.0 code.
+*/
+
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
#include "power_windows.h"
// CODE CHUNK IMPORTED FROM SDL 2.0
diff --git a/platform/x11/context_gl_x11.cpp b/platform/x11/context_gl_x11.cpp
index 432aecb72e..ddf17481b1 100644
--- a/platform/x11/context_gl_x11.cpp
+++ b/platform/x11/context_gl_x11.cpp
@@ -152,8 +152,6 @@ Error ContextGL_X11::initialize() {
XSync(x11_display, False);
XSetErrorHandler(oldHandler);
- print_line("ALL IS GOOD");
-
glXMakeCurrent(x11_display, x11_window, p->glx_context);
/*
diff --git a/platform/x11/detect.py b/platform/x11/detect.py
index 34306c8d0f..0ba0f68393 100644
--- a/platform/x11/detect.py
+++ b/platform/x11/detect.py
@@ -141,6 +141,15 @@ def configure(env):
env.ParseConfig('pkg-config xrandr --cflags --libs')
if (env['builtin_openssl'] == 'no'):
+ # Currently not compatible with OpenSSL 1.1.0+
+ # https://github.com/godotengine/godot/issues/8624
+ import subprocess
+ openssl_version = subprocess.check_output(['pkg-config', 'openssl', '--modversion']).strip('\n')
+ if (openssl_version >= "1.1.0"):
+ print("Error: Found system-installed OpenSSL %s, currently only supporting version 1.0.x." % openssl_version)
+ print("Aborting.. You can compile with 'builtin_openssl=yes' to use the bundled version.\n")
+ sys.exit(255)
+
env.ParseConfig('pkg-config openssl --cflags --libs')
if (env['builtin_libwebp'] == 'no'):
diff --git a/platform/x11/export/export.cpp b/platform/x11/export/export.cpp
index b9ded188bf..d6bad95e5b 100644
--- a/platform/x11/export/export.cpp
+++ b/platform/x11/export/export.cpp
@@ -37,7 +37,7 @@ void register_x11_exporter() {
Ref<EditorExportPlatformPC> platform;
platform.instance();
- Image img(_x11_logo);
+ Ref<Image> img = memnew(Image(_x11_logo));
Ref<ImageTexture> logo;
logo.instance();
logo->create_from_image(img);
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp
index 2e2fe3ba8a..59ac1fed96 100644
--- a/platform/x11/os_x11.cpp
+++ b/platform/x11/os_x11.cpp
@@ -1857,15 +1857,15 @@ void OS_X11::alert(const String &p_alert, const String &p_title) {
execute("/usr/bin/xmessage", args, true);
}
-void OS_X11::set_icon(const Image &p_icon) {
+void OS_X11::set_icon(const Ref<Image> &p_icon) {
Atom net_wm_icon = XInternAtom(x11_display, "_NET_WM_ICON", False);
- if (!p_icon.empty()) {
- Image img = p_icon;
- img.convert(Image::FORMAT_RGBA8);
+ if (p_icon.is_valid()) {
+ Ref<Image> img = p_icon->duplicate();
+ img->convert(Image::FORMAT_RGBA8);
- int w = img.get_width();
- int h = img.get_height();
+ int w = img->get_width();
+ int h = img->get_height();
// We're using long to have wordsize (32Bit build -> 32 Bits, 64 Bit build -> 64 Bits
Vector<long> pd;
@@ -1875,7 +1875,7 @@ void OS_X11::set_icon(const Image &p_icon) {
pd[0] = w;
pd[1] = h;
- PoolVector<uint8_t>::Read r = img.get_data().read();
+ PoolVector<uint8_t>::Read r = img->get_data().read();
long *wr = &pd[2];
uint8_t const *pr = r.ptr();
diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h
index 44994e40ec..7f01f9c617 100644
--- a/platform/x11/os_x11.h
+++ b/platform/x11/os_x11.h
@@ -206,7 +206,7 @@ public:
virtual int get_mouse_button_state() const;
virtual void set_window_title(const String &p_title);
- virtual void set_icon(const Image &p_icon);
+ virtual void set_icon(const Ref<Image> &p_icon);
virtual MainLoop *get_main_loop() const;
diff --git a/platform/x11/power_x11.cpp b/platform/x11/power_x11.cpp
index 3454a6313e..093d24f406 100644
--- a/platform/x11/power_x11.cpp
+++ b/platform/x11/power_x11.cpp
@@ -28,6 +28,31 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+/*
+Adapted from corresponding SDL 2.0 code.
+*/
+
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
#include "power_x11.h"
#include <stdio.h>
diff --git a/scene/2d/collision_polygon_2d.cpp b/scene/2d/collision_polygon_2d.cpp
index b54861a314..39eef89274 100644
--- a/scene/2d/collision_polygon_2d.cpp
+++ b/scene/2d/collision_polygon_2d.cpp
@@ -28,10 +28,13 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "collision_polygon_2d.h"
+
#include "collision_object_2d.h"
#include "scene/resources/concave_polygon_shape_2d.h"
#include "scene/resources/convex_polygon_shape_2d.h"
-#include "triangulator.h"
+
+#include "thirdparty/misc/triangulator.h"
+
void CollisionPolygon2D::_add_to_collision_object(Object *p_obj) {
if (unparenting || !can_update_body)
diff --git a/scene/2d/navigation_polygon.cpp b/scene/2d/navigation_polygon.cpp
index aec6d7108b..807f72e81f 100644
--- a/scene/2d/navigation_polygon.cpp
+++ b/scene/2d/navigation_polygon.cpp
@@ -28,9 +28,11 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "navigation_polygon.h"
+
#include "core_string_names.h"
#include "navigation2d.h"
-#include "triangulator.h"
+
+#include "thirdparty/misc/triangulator.h"
void NavigationPolygon::set_vertices(const PoolVector<Vector2> &p_vertices) {
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp
index f752cbf6b6..626ea10515 100644
--- a/scene/2d/physics_body_2d.cpp
+++ b/scene/2d/physics_body_2d.cpp
@@ -1199,7 +1199,7 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const
revert_motion();
return Vector2();
}
- } else if (get_collision_normal().dot(-p_floor_direction) <= Math::cos(p_floor_max_angle)) { //ceiling
+ } else if (get_collision_normal().dot(-p_floor_direction) >= Math::cos(p_floor_max_angle)) { //ceiling
move_and_slide_on_ceiling = true;
} else {
move_and_slide_on_wall = true;
diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp
index 792861cbf3..0a1a8b56ff 100644
--- a/scene/2d/ray_cast_2d.cpp
+++ b/scene/2d/ray_cast_2d.cpp
@@ -157,16 +157,16 @@ void RayCast2D::_notification(int p_what) {
break;
Transform2D xf;
xf.rotate(cast_to.angle());
- xf.translate(Vector2(0, cast_to.length()));
+ xf.translate(Vector2(cast_to.length(), 0));
//Vector2 tip = Vector2(0,s->get_length());
Color dcol = get_tree()->get_debug_collisions_color(); //0.9,0.2,0.2,0.4);
draw_line(Vector2(), cast_to, dcol, 3);
Vector<Vector2> pts;
float tsize = 4;
- pts.push_back(xf.xform(Vector2(0, tsize)));
- pts.push_back(xf.xform(Vector2(0.707 * tsize, 0)));
- pts.push_back(xf.xform(Vector2(-0.707 * tsize, 0)));
+ pts.push_back(xf.xform(Vector2(tsize, 0)));
+ pts.push_back(xf.xform(Vector2(0, 0.707 * tsize)));
+ pts.push_back(xf.xform(Vector2(0, -0.707 * tsize)));
Vector<Color> cols;
for (int i = 0; i < 3; i++)
cols.push_back(dcol);
diff --git a/scene/3d/baked_light_instance.cpp b/scene/3d/baked_light_instance.cpp
deleted file mode 100644
index ffa7597113..0000000000
--- a/scene/3d/baked_light_instance.cpp
+++ /dev/null
@@ -1,1754 +0,0 @@
-/*************************************************************************/
-/* baked_light_instance.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "baked_light_instance.h"
-#include "light.h"
-#include "math.h"
-#include "mesh_instance.h"
-#include "scene/scene_string_names.h"
-
-#define FINDMINMAX(x0, x1, x2, min, max) \
- min = max = x0; \
- if (x1 < min) min = x1; \
- if (x1 > max) max = x1; \
- if (x2 < min) min = x2; \
- if (x2 > max) max = x2;
-
-static bool planeBoxOverlap(Vector3 normal, float d, Vector3 maxbox) {
- int q;
- Vector3 vmin, vmax;
- for (q = 0; q <= 2; q++) {
- if (normal[q] > 0.0f) {
- vmin[q] = -maxbox[q];
- vmax[q] = maxbox[q];
- } else {
- vmin[q] = maxbox[q];
- vmax[q] = -maxbox[q];
- }
- }
- if (normal.dot(vmin) + d > 0.0f) return false;
- if (normal.dot(vmax) + d >= 0.0f) return true;
-
- return false;
-}
-
-/*======================== X-tests ========================*/
-#define AXISTEST_X01(a, b, fa, fb) \
- p0 = a * v0.y - b * v0.z; \
- p2 = a * v2.y - b * v2.z; \
- if (p0 < p2) { \
- min = p0; \
- max = p2; \
- } else { \
- min = p2; \
- max = p0; \
- } \
- rad = fa * boxhalfsize.y + fb * boxhalfsize.z; \
- if (min > rad || max < -rad) return false;
-
-#define AXISTEST_X2(a, b, fa, fb) \
- p0 = a * v0.y - b * v0.z; \
- p1 = a * v1.y - b * v1.z; \
- if (p0 < p1) { \
- min = p0; \
- max = p1; \
- } else { \
- min = p1; \
- max = p0; \
- } \
- rad = fa * boxhalfsize.y + fb * boxhalfsize.z; \
- if (min > rad || max < -rad) return false;
-
-/*======================== Y-tests ========================*/
-#define AXISTEST_Y02(a, b, fa, fb) \
- p0 = -a * v0.x + b * v0.z; \
- p2 = -a * v2.x + b * v2.z; \
- if (p0 < p2) { \
- min = p0; \
- max = p2; \
- } else { \
- min = p2; \
- max = p0; \
- } \
- rad = fa * boxhalfsize.x + fb * boxhalfsize.z; \
- if (min > rad || max < -rad) return false;
-
-#define AXISTEST_Y1(a, b, fa, fb) \
- p0 = -a * v0.x + b * v0.z; \
- p1 = -a * v1.x + b * v1.z; \
- if (p0 < p1) { \
- min = p0; \
- max = p1; \
- } else { \
- min = p1; \
- max = p0; \
- } \
- rad = fa * boxhalfsize.x + fb * boxhalfsize.z; \
- if (min > rad || max < -rad) return false;
-
-/*======================== Z-tests ========================*/
-
-#define AXISTEST_Z12(a, b, fa, fb) \
- p1 = a * v1.x - b * v1.y; \
- p2 = a * v2.x - b * v2.y; \
- if (p2 < p1) { \
- min = p2; \
- max = p1; \
- } else { \
- min = p1; \
- max = p2; \
- } \
- rad = fa * boxhalfsize.x + fb * boxhalfsize.y; \
- if (min > rad || max < -rad) return false;
-
-#define AXISTEST_Z0(a, b, fa, fb) \
- p0 = a * v0.x - b * v0.y; \
- p1 = a * v1.x - b * v1.y; \
- if (p0 < p1) { \
- min = p0; \
- max = p1; \
- } else { \
- min = p1; \
- max = p0; \
- } \
- rad = fa * boxhalfsize.x + fb * boxhalfsize.y; \
- if (min > rad || max < -rad) return false;
-
-static bool fast_tri_box_overlap(const Vector3 &boxcenter, const Vector3 boxhalfsize, const Vector3 *triverts) {
-
- /* use separating axis theorem to test overlap between triangle and box */
- /* need to test for overlap in these directions: */
- /* 1) the {x,y,z}-directions (actually, since we use the AABB of the triangle */
- /* we do not even need to test these) */
- /* 2) normal of the triangle */
- /* 3) crossproduct(edge from tri, {x,y,z}-directin) */
- /* this gives 3x3=9 more tests */
- Vector3 v0, v1, v2;
- float min, max, d, p0, p1, p2, rad, fex, fey, fez;
- Vector3 normal, e0, e1, e2;
-
- /* This is the fastest branch on Sun */
- /* move everything so that the boxcenter is in (0,0,0) */
-
- v0 = triverts[0] - boxcenter;
- v1 = triverts[1] - boxcenter;
- v2 = triverts[2] - boxcenter;
-
- /* compute triangle edges */
- e0 = v1 - v0; /* tri edge 0 */
- e1 = v2 - v1; /* tri edge 1 */
- e2 = v0 - v2; /* tri edge 2 */
-
- /* Bullet 3: */
- /* test the 9 tests first (this was faster) */
- fex = Math::abs(e0.x);
- fey = Math::abs(e0.y);
- fez = Math::abs(e0.z);
- AXISTEST_X01(e0.z, e0.y, fez, fey);
- AXISTEST_Y02(e0.z, e0.x, fez, fex);
- AXISTEST_Z12(e0.y, e0.x, fey, fex);
-
- fex = Math::abs(e1.x);
- fey = Math::abs(e1.y);
- fez = Math::abs(e1.z);
- AXISTEST_X01(e1.z, e1.y, fez, fey);
- AXISTEST_Y02(e1.z, e1.x, fez, fex);
- AXISTEST_Z0(e1.y, e1.x, fey, fex);
-
- fex = Math::abs(e2.x);
- fey = Math::abs(e2.y);
- fez = Math::abs(e2.z);
- AXISTEST_X2(e2.z, e2.y, fez, fey);
- AXISTEST_Y1(e2.z, e2.x, fez, fex);
- AXISTEST_Z12(e2.y, e2.x, fey, fex);
-
- /* Bullet 1: */
- /* first test overlap in the {x,y,z}-directions */
- /* find min, max of the triangle each direction, and test for overlap in */
- /* that direction -- this is equivalent to testing a minimal AABB around */
- /* the triangle against the AABB */
-
- /* test in X-direction */
- FINDMINMAX(v0.x, v1.x, v2.x, min, max);
- if (min > boxhalfsize.x || max < -boxhalfsize.x) return false;
-
- /* test in Y-direction */
- FINDMINMAX(v0.y, v1.y, v2.y, min, max);
- if (min > boxhalfsize.y || max < -boxhalfsize.y) return false;
-
- /* test in Z-direction */
- FINDMINMAX(v0.z, v1.z, v2.z, min, max);
- if (min > boxhalfsize.z || max < -boxhalfsize.z) return false;
-
- /* Bullet 2: */
- /* test if the box intersects the plane of the triangle */
- /* compute plane equation of triangle: normal*x+d=0 */
- normal = e0.cross(e1);
- d = -normal.dot(v0); /* plane eq: normal.x+d=0 */
- if (!planeBoxOverlap(normal, d, boxhalfsize)) return false;
-
- return true; /* box and triangle overlaps */
-}
-
-Vector<Color> BakedLight::_get_bake_texture(Image &p_image, const Color &p_color) {
-
- Vector<Color> ret;
-
- if (p_image.empty()) {
-
- ret.resize(bake_texture_size * bake_texture_size);
- for (int i = 0; i < bake_texture_size * bake_texture_size; i++) {
- ret[i] = p_color;
- }
-
- return ret;
- }
-
- p_image.convert(Image::FORMAT_RGBA8);
- p_image.resize(bake_texture_size, bake_texture_size, Image::INTERPOLATE_CUBIC);
-
- PoolVector<uint8_t>::Read r = p_image.get_data().read();
- ret.resize(bake_texture_size * bake_texture_size);
-
- for (int i = 0; i < bake_texture_size * bake_texture_size; i++) {
- Color c;
- c.r = r[i * 4 + 0] / 255.0;
- c.g = r[i * 4 + 1] / 255.0;
- c.b = r[i * 4 + 2] / 255.0;
- c.a = r[i * 4 + 3] / 255.0;
- ret[i] = c;
- }
-
- return ret;
-}
-
-BakedLight::MaterialCache BakedLight::_get_material_cache(Ref<Material> p_material) {
-
- //this way of obtaining materials is inaccurate and also does not support some compressed formats very well
- Ref<SpatialMaterial> mat = p_material;
-
- Ref<Material> material = mat; //hack for now
-
- if (material_cache.has(material)) {
- return material_cache[material];
- }
-
- MaterialCache mc;
-
- if (mat.is_valid()) {
-
- Ref<ImageTexture> albedo_tex = mat->get_texture(SpatialMaterial::TEXTURE_ALBEDO);
-
- Image img_albedo;
- if (albedo_tex.is_valid()) {
-
- img_albedo = albedo_tex->get_data();
- }
-
- mc.albedo = _get_bake_texture(img_albedo, mat->get_albedo());
-
- Ref<ImageTexture> emission_tex = mat->get_texture(SpatialMaterial::TEXTURE_EMISSION);
-
- Color emission_col = mat->get_emission();
- emission_col.r *= mat->get_emission_energy();
- emission_col.g *= mat->get_emission_energy();
- emission_col.b *= mat->get_emission_energy();
-
- Image img_emission;
-
- if (emission_tex.is_valid()) {
-
- img_emission = emission_tex->get_data();
- }
-
- mc.emission = _get_bake_texture(img_emission, emission_col);
-
- } else {
- Image empty;
-
- mc.albedo = _get_bake_texture(empty, Color(0.7, 0.7, 0.7));
- mc.emission = _get_bake_texture(empty, Color(0, 0, 0));
- }
-
- material_cache[p_material] = mc;
- return mc;
-}
-
-static _FORCE_INLINE_ Vector2 get_uv(const Vector3 &p_pos, const Vector3 *p_vtx, const Vector2 *p_uv) {
-
- if (p_pos.distance_squared_to(p_vtx[0]) < CMP_EPSILON2)
- return p_uv[0];
- if (p_pos.distance_squared_to(p_vtx[1]) < CMP_EPSILON2)
- return p_uv[1];
- if (p_pos.distance_squared_to(p_vtx[2]) < CMP_EPSILON2)
- return p_uv[2];
-
- Vector3 v0 = p_vtx[1] - p_vtx[0];
- Vector3 v1 = p_vtx[2] - p_vtx[0];
- Vector3 v2 = p_pos - p_vtx[0];
-
- float d00 = v0.dot(v0);
- float d01 = v0.dot(v1);
- float d11 = v1.dot(v1);
- float d20 = v2.dot(v0);
- float d21 = v2.dot(v1);
- float denom = (d00 * d11 - d01 * d01);
- if (denom == 0)
- return p_uv[0];
- float v = (d11 * d20 - d01 * d21) / denom;
- float w = (d00 * d21 - d01 * d20) / denom;
- float u = 1.0f - v - w;
-
- return p_uv[0] * u + p_uv[1] * v + p_uv[2] * w;
-}
-
-void BakedLight::_plot_face(int p_idx, int p_level, const Vector3 *p_vtx, const Vector2 *p_uv, const MaterialCache &p_material, const Rect3 &p_aabb) {
-
- if (p_level == cell_subdiv - 1) {
- //plot the face by guessing it's albedo and emission value
-
- //find best axis to map to, for scanning values
- int closest_axis;
- float closest_dot;
-
- Vector3 normal = Plane(p_vtx[0], p_vtx[1], p_vtx[2]).normal;
-
- for (int i = 0; i < 3; i++) {
-
- Vector3 axis;
- axis[i] = 1.0;
- float dot = ABS(normal.dot(axis));
- if (i == 0 || dot > closest_dot) {
- closest_axis = i;
- closest_dot = dot;
- }
- }
-
- Vector3 axis;
- axis[closest_axis] = 1.0;
- Vector3 t1;
- t1[(closest_axis + 1) % 3] = 1.0;
- Vector3 t2;
- t2[(closest_axis + 2) % 3] = 1.0;
-
- t1 *= p_aabb.size[(closest_axis + 1) % 3] / float(color_scan_cell_width);
- t2 *= p_aabb.size[(closest_axis + 2) % 3] / float(color_scan_cell_width);
-
- Color albedo_accum;
- Color emission_accum;
- float alpha = 0.0;
-
- //map to a grid average in the best axis for this face
- for (int i = 0; i < color_scan_cell_width; i++) {
-
- Vector3 ofs_i = float(i) * t1;
-
- for (int j = 0; j < color_scan_cell_width; j++) {
-
- Vector3 ofs_j = float(j) * t2;
-
- Vector3 from = p_aabb.pos + ofs_i + ofs_j;
- Vector3 to = from + t1 + t2 + axis * p_aabb.size[closest_axis];
- Vector3 half = (to - from) * 0.5;
-
- //is in this cell?
- if (!fast_tri_box_overlap(from + half, half, p_vtx)) {
- continue; //face does not span this cell
- }
-
- //go from -size to +size*2 to avoid skipping collisions
- Vector3 ray_from = from + (t1 + t2) * 0.5 - axis * p_aabb.size[closest_axis];
- Vector3 ray_to = ray_from + axis * p_aabb.size[closest_axis] * 2;
-
- Vector3 intersection;
-
- if (!Geometry::ray_intersects_triangle(ray_from, ray_to, p_vtx[0], p_vtx[1], p_vtx[2], &intersection)) {
- //no intersect? look in edges
-
- float closest_dist = 1e20;
- for (int j = 0; j < 3; j++) {
- Vector3 c;
- Vector3 inters;
- Geometry::get_closest_points_between_segments(p_vtx[j], p_vtx[(j + 1) % 3], ray_from, ray_to, inters, c);
- float d = c.distance_to(intersection);
- if (j == 0 || d < closest_dist) {
- closest_dist = d;
- intersection = inters;
- }
- }
- }
-
- Vector2 uv = get_uv(intersection, p_vtx, p_uv);
-
- int uv_x = CLAMP(Math::fposmod(uv.x, 1.0f) * bake_texture_size, 0, bake_texture_size - 1);
- int uv_y = CLAMP(Math::fposmod(uv.y, 1.0f) * bake_texture_size, 0, bake_texture_size - 1);
-
- int ofs = uv_y * bake_texture_size + uv_x;
- albedo_accum.r += p_material.albedo[ofs].r;
- albedo_accum.g += p_material.albedo[ofs].g;
- albedo_accum.b += p_material.albedo[ofs].b;
- albedo_accum.a += p_material.albedo[ofs].a;
-
- emission_accum.r += p_material.emission[ofs].r;
- emission_accum.g += p_material.emission[ofs].g;
- emission_accum.b += p_material.emission[ofs].b;
- alpha += 1.0;
- }
- }
-
- if (alpha == 0) {
- //could not in any way get texture information.. so use closest point to center
-
- Face3 f(p_vtx[0], p_vtx[1], p_vtx[2]);
- Vector3 inters = f.get_closest_point_to(p_aabb.pos + p_aabb.size * 0.5);
-
- Vector2 uv = get_uv(inters, p_vtx, p_uv);
-
- int uv_x = CLAMP(Math::fposmod(uv.x, 1.0f) * bake_texture_size, 0, bake_texture_size - 1);
- int uv_y = CLAMP(Math::fposmod(uv.y, 1.0f) * bake_texture_size, 0, bake_texture_size - 1);
-
- int ofs = uv_y * bake_texture_size + uv_x;
-
- alpha = 1.0 / (color_scan_cell_width * color_scan_cell_width);
-
- albedo_accum.r = p_material.albedo[ofs].r * alpha;
- albedo_accum.g = p_material.albedo[ofs].g * alpha;
- albedo_accum.b = p_material.albedo[ofs].b * alpha;
- albedo_accum.a = p_material.albedo[ofs].a * alpha;
-
- emission_accum.r = p_material.emission[ofs].r * alpha;
- emission_accum.g = p_material.emission[ofs].g * alpha;
- emission_accum.b = p_material.emission[ofs].b * alpha;
-
- zero_alphas++;
- } else {
-
- float accdiv = 1.0 / (color_scan_cell_width * color_scan_cell_width);
- alpha *= accdiv;
-
- albedo_accum.r *= accdiv;
- albedo_accum.g *= accdiv;
- albedo_accum.b *= accdiv;
- albedo_accum.a *= accdiv;
-
- emission_accum.r *= accdiv;
- emission_accum.g *= accdiv;
- emission_accum.b *= accdiv;
- }
-
- //put this temporarily here, corrected in a later step
- bake_cells_write[p_idx].albedo[0] += albedo_accum.r;
- bake_cells_write[p_idx].albedo[1] += albedo_accum.g;
- bake_cells_write[p_idx].albedo[2] += albedo_accum.b;
- bake_cells_write[p_idx].light[0] += emission_accum.r;
- bake_cells_write[p_idx].light[1] += emission_accum.g;
- bake_cells_write[p_idx].light[2] += emission_accum.b;
- bake_cells_write[p_idx].alpha += alpha;
-
- static const Vector3 side_normals[6] = {
- Vector3(-1, 0, 0),
- Vector3(1, 0, 0),
- Vector3(0, -1, 0),
- Vector3(0, 1, 0),
- Vector3(0, 0, -1),
- Vector3(0, 0, 1),
- };
-
- for (int i = 0; i < 6; i++) {
- if (normal.dot(side_normals[i]) > CMP_EPSILON) {
- bake_cells_write[p_idx].used_sides |= (1 << i);
- }
- }
-
- } else {
- //go down
- for (int i = 0; i < 8; i++) {
-
- Rect3 aabb = p_aabb;
- aabb.size *= 0.5;
-
- if (i & 1)
- aabb.pos.x += aabb.size.x;
- if (i & 2)
- aabb.pos.y += aabb.size.y;
- if (i & 4)
- aabb.pos.z += aabb.size.z;
-
- {
- Rect3 test_aabb = aabb;
- //test_aabb.grow_by(test_aabb.get_longest_axis_size()*0.05); //grow a bit to avoid numerical error in real-time
- Vector3 qsize = test_aabb.size * 0.5; //quarter size, for fast aabb test
-
- if (!fast_tri_box_overlap(test_aabb.pos + qsize, qsize, p_vtx)) {
- //if (!Face3(p_vtx[0],p_vtx[1],p_vtx[2]).intersects_aabb2(aabb)) {
- //does not fit in child, go on
- continue;
- }
- }
-
- if (bake_cells_write[p_idx].childs[i] == CHILD_EMPTY) {
- //sub cell must be created
-
- if (bake_cells_used == (1 << bake_cells_alloc)) {
- //exhausted cells, creating more space
- bake_cells_alloc++;
- bake_cells_write = PoolVector<BakeCell>::Write();
- bake_cells.resize(1 << bake_cells_alloc);
- bake_cells_write = bake_cells.write();
- }
-
- bake_cells_write[p_idx].childs[i] = bake_cells_used;
- bake_cells_level_used[p_level + 1]++;
- bake_cells_used++;
- }
-
- _plot_face(bake_cells_write[p_idx].childs[i], p_level + 1, p_vtx, p_uv, p_material, aabb);
- }
- }
-}
-
-void BakedLight::_fixup_plot(int p_idx, int p_level, int p_x, int p_y, int p_z) {
-
- if (p_level == cell_subdiv - 1) {
-
- float alpha = bake_cells_write[p_idx].alpha;
-
- bake_cells_write[p_idx].albedo[0] /= alpha;
- bake_cells_write[p_idx].albedo[1] /= alpha;
- bake_cells_write[p_idx].albedo[2] /= alpha;
-
- //transfer emission to light
- bake_cells_write[p_idx].light[0] /= alpha;
- bake_cells_write[p_idx].light[1] /= alpha;
- bake_cells_write[p_idx].light[2] /= alpha;
-
- bake_cells_write[p_idx].alpha = 1.0;
-
- //remove neighbours from used sides
-
- for (int n = 0; n < 6; n++) {
-
- int ofs[3] = { 0, 0, 0 };
-
- ofs[n / 2] = (n & 1) ? 1 : -1;
-
- //convert to x,y,z on this level
- int x = p_x;
- int y = p_y;
- int z = p_z;
-
- x += ofs[0];
- y += ofs[1];
- z += ofs[2];
-
- int ofs_x = 0;
- int ofs_y = 0;
- int ofs_z = 0;
- int size = 1 << p_level;
- int half = size / 2;
-
- if (x < 0 || x >= size || y < 0 || y >= size || z < 0 || z >= size) {
- //neighbour is out, can't use it
- bake_cells_write[p_idx].used_sides &= ~(1 << uint32_t(n));
- continue;
- }
-
- uint32_t neighbour = 0;
-
- for (int i = 0; i < cell_subdiv - 1; i++) {
-
- BakeCell *bc = &bake_cells_write[neighbour];
-
- int child = 0;
- if (x >= ofs_x + half) {
- child |= 1;
- ofs_x += half;
- }
- if (y >= ofs_y + half) {
- child |= 2;
- ofs_y += half;
- }
- if (z >= ofs_z + half) {
- child |= 4;
- ofs_z += half;
- }
-
- neighbour = bc->childs[child];
- if (neighbour == CHILD_EMPTY) {
- break;
- }
-
- half >>= 1;
- }
-
- if (neighbour != CHILD_EMPTY) {
- bake_cells_write[p_idx].used_sides &= ~(1 << uint32_t(n));
- }
- }
- } else {
-
- //go down
-
- float alpha_average = 0;
- int half = cells_per_axis >> (p_level + 1);
- for (int i = 0; i < 8; i++) {
-
- uint32_t child = bake_cells_write[p_idx].childs[i];
-
- if (child == CHILD_EMPTY)
- continue;
-
- int nx = p_x;
- int ny = p_y;
- int nz = p_z;
-
- if (i & 1)
- nx += half;
- if (i & 2)
- ny += half;
- if (i & 4)
- nz += half;
-
- _fixup_plot(child, p_level + 1, nx, ny, nz);
- alpha_average += bake_cells_write[child].alpha;
- }
-
- bake_cells_write[p_idx].alpha = alpha_average / 8.0;
- bake_cells_write[p_idx].light[0] = 0;
- bake_cells_write[p_idx].light[1] = 0;
- bake_cells_write[p_idx].light[2] = 0;
- bake_cells_write[p_idx].albedo[0] = 0;
- bake_cells_write[p_idx].albedo[1] = 0;
- bake_cells_write[p_idx].albedo[2] = 0;
- }
-
- //clean up light
- bake_cells_write[p_idx].light_pass = 0;
- //find neighbours
-}
-
-void BakedLight::_bake_add_mesh(const Transform &p_xform, Ref<Mesh> &p_mesh) {
-
- for (int i = 0; i < p_mesh->get_surface_count(); i++) {
-
- if (p_mesh->surface_get_primitive_type(i) != Mesh::PRIMITIVE_TRIANGLES)
- continue; //only triangles
-
- MaterialCache material = _get_material_cache(p_mesh->surface_get_material(i));
-
- Array a = p_mesh->surface_get_arrays(i);
-
- PoolVector<Vector3> vertices = a[Mesh::ARRAY_VERTEX];
- PoolVector<Vector3>::Read vr = vertices.read();
- PoolVector<Vector2> uv = a[Mesh::ARRAY_TEX_UV];
- PoolVector<Vector2>::Read uvr;
- PoolVector<int> index = a[Mesh::ARRAY_INDEX];
-
- bool read_uv = false;
-
- if (uv.size()) {
-
- uvr = uv.read();
- read_uv = true;
- }
-
- if (index.size()) {
-
- int facecount = index.size() / 3;
- PoolVector<int>::Read ir = index.read();
-
- for (int j = 0; j < facecount; j++) {
-
- Vector3 vtxs[3];
- Vector2 uvs[3];
-
- for (int k = 0; k < 3; k++) {
- vtxs[k] = p_xform.xform(vr[ir[j * 3 + k]]);
- }
-
- if (read_uv) {
- for (int k = 0; k < 3; k++) {
- uvs[k] = uvr[ir[j * 3 + k]];
- }
- }
-
- //plot face
- _plot_face(0, 0, vtxs, uvs, material, bounds);
- }
-
- } else {
-
- int facecount = vertices.size() / 3;
-
- for (int j = 0; j < facecount; j++) {
-
- Vector3 vtxs[3];
- Vector2 uvs[3];
-
- for (int k = 0; k < 3; k++) {
- vtxs[k] = p_xform.xform(vr[j * 3 + k]);
- }
-
- if (read_uv) {
- for (int k = 0; k < 3; k++) {
- uvs[k] = uvr[j * 3 + k];
- }
- }
-
- //plot face
- _plot_face(0, 0, vtxs, uvs, material, bounds);
- }
- }
- }
-}
-
-void BakedLight::_bake_add_to_aabb(const Transform &p_xform, Ref<Mesh> &p_mesh, bool &first) {
-
- for (int i = 0; i < p_mesh->get_surface_count(); i++) {
-
- if (p_mesh->surface_get_primitive_type(i) != Mesh::PRIMITIVE_TRIANGLES)
- continue; //only triangles
-
- Array a = p_mesh->surface_get_arrays(i);
- PoolVector<Vector3> vertices = a[Mesh::ARRAY_VERTEX];
- int vc = vertices.size();
- PoolVector<Vector3>::Read vr = vertices.read();
-
- if (first) {
- bounds.pos = p_xform.xform(vr[0]);
- first = false;
- }
-
- for (int j = 0; j < vc; j++) {
- bounds.expand_to(p_xform.xform(vr[j]));
- }
- }
-}
-
-void BakedLight::bake() {
-
- bake_cells_alloc = 16;
- bake_cells.resize(1 << bake_cells_alloc);
- bake_cells_used = 1;
- cells_per_axis = (1 << (cell_subdiv - 1));
- zero_alphas = 0;
-
- bool aabb_first = true;
- print_line("Generating AABB");
-
- bake_cells_level_used.resize(cell_subdiv);
- for (int i = 0; i < cell_subdiv; i++) {
- bake_cells_level_used[i] = 0;
- }
-
- int count = 0;
- for (Set<GeometryInstance *>::Element *E = geometries.front(); E; E = E->next()) {
-
- print_line("aabb geom " + itos(count) + "/" + itos(geometries.size()));
-
- GeometryInstance *geom = E->get();
-
- if (geom->cast_to<MeshInstance>()) {
-
- MeshInstance *mesh_instance = geom->cast_to<MeshInstance>();
- Ref<Mesh> mesh = mesh_instance->get_mesh();
- if (mesh.is_valid()) {
-
- _bake_add_to_aabb(geom->get_relative_transform(this), mesh, aabb_first);
- }
- }
- count++;
- }
-
- print_line("AABB: " + bounds);
- ERR_FAIL_COND(aabb_first);
-
- bake_cells_write = bake_cells.write();
- count = 0;
-
- for (Set<GeometryInstance *>::Element *E = geometries.front(); E; E = E->next()) {
-
- GeometryInstance *geom = E->get();
- print_line("plot geom " + itos(count) + "/" + itos(geometries.size()));
-
- if (geom->cast_to<MeshInstance>()) {
-
- MeshInstance *mesh_instance = geom->cast_to<MeshInstance>();
- Ref<Mesh> mesh = mesh_instance->get_mesh();
- if (mesh.is_valid()) {
-
- _bake_add_mesh(geom->get_relative_transform(this), mesh);
- }
- }
-
- count++;
- }
-
- _fixup_plot(0, 0, 0, 0, 0);
-
- bake_cells_write = PoolVector<BakeCell>::Write();
-
- bake_cells.resize(bake_cells_used);
-
- print_line("total bake cells used: " + itos(bake_cells_used));
- for (int i = 0; i < cell_subdiv; i++) {
- print_line("level " + itos(i) + ": " + itos(bake_cells_level_used[i]));
- }
- print_line("zero alphas: " + itos(zero_alphas));
-}
-
-void BakedLight::_bake_directional(int p_idx, int p_level, int p_x, int p_y, int p_z, const Vector3 &p_dir, const Color &p_color, int p_sign) {
-
- if (p_level == cell_subdiv - 1) {
-
- Vector3 end;
- end.x = float(p_x + 0.5) / cells_per_axis;
- end.y = float(p_y + 0.5) / cells_per_axis;
- end.z = float(p_z + 0.5) / cells_per_axis;
-
- end = bounds.pos + bounds.size * end;
-
- float max_ray_len = (bounds.size).length() * 1.2;
-
- Vector3 begin = end + max_ray_len * -p_dir;
-
- //clip begin
-
- for (int i = 0; i < 3; i++) {
-
- if (ABS(p_dir[i]) < CMP_EPSILON) {
- continue; // parallel to axis, don't clip
- }
-
- Plane p;
- p.normal[i] = 1.0;
- p.d = bounds.pos[i];
- if (p_dir[i] < 0) {
- p.d += bounds.size[i];
- }
-
- Vector3 inters;
- if (p.intersects_segment(end, begin, &inters)) {
- begin = inters;
- }
- }
-
- int idx = _plot_ray(begin, end);
-
- if (idx >= 0 && light_pass != bake_cells_write[idx].light_pass) {
- //hit something, add or remove light to it
-
- Color albedo = Color(bake_cells_write[idx].albedo[0], bake_cells_write[idx].albedo[1], bake_cells_write[idx].albedo[2]);
- bake_cells_write[idx].light[0] += albedo.r * p_color.r * p_sign;
- bake_cells_write[idx].light[1] += albedo.g * p_color.g * p_sign;
- bake_cells_write[idx].light[2] += albedo.b * p_color.b * p_sign;
- bake_cells_write[idx].light_pass = light_pass;
- }
-
- } else {
-
- int half = cells_per_axis >> (p_level + 1);
-
- //go down
- for (int i = 0; i < 8; i++) {
-
- uint32_t child = bake_cells_write[p_idx].childs[i];
-
- if (child == CHILD_EMPTY)
- continue;
-
- int nx = p_x;
- int ny = p_y;
- int nz = p_z;
-
- if (i & 1)
- nx += half;
- if (i & 2)
- ny += half;
- if (i & 4)
- nz += half;
-
- _bake_directional(child, p_level + 1, nx, ny, nz, p_dir, p_color, p_sign);
- }
- }
-}
-
-void BakedLight::_bake_light(Light *p_light) {
-
- if (p_light->cast_to<DirectionalLight>()) {
-
- DirectionalLight *dl = p_light->cast_to<DirectionalLight>();
-
- Transform rel_xf = dl->get_relative_transform(this);
-
- Vector3 light_dir = -rel_xf.basis.get_axis(2);
-
- Color color = dl->get_color();
- float nrg = dl->get_param(Light::PARAM_ENERGY);
- color.r *= nrg;
- color.g *= nrg;
- color.b *= nrg;
-
- light_pass++;
- _bake_directional(0, 0, 0, 0, 0, light_dir, color, 1);
- }
-}
-
-void BakedLight::_upscale_light(int p_idx, int p_level) {
-
- //go down
-
- float light_accum[3] = { 0, 0, 0 };
- float alpha_accum = 0;
-
- bool check_children = p_level < (cell_subdiv - 2);
-
- for (int i = 0; i < 8; i++) {
-
- uint32_t child = bake_cells_write[p_idx].childs[i];
-
- if (child == CHILD_EMPTY)
- continue;
-
- if (check_children) {
- _upscale_light(child, p_level + 1);
- }
-
- light_accum[0] += bake_cells_write[child].light[0];
- light_accum[1] += bake_cells_write[child].light[1];
- light_accum[2] += bake_cells_write[child].light[2];
- alpha_accum += bake_cells_write[child].alpha;
- }
-
- bake_cells_write[p_idx].light[0] = light_accum[0] / 8.0;
- bake_cells_write[p_idx].light[1] = light_accum[1] / 8.0;
- bake_cells_write[p_idx].light[2] = light_accum[2] / 8.0;
- bake_cells_write[p_idx].alpha = alpha_accum / 8.0;
-}
-
-void BakedLight::bake_lights() {
-
- ERR_FAIL_COND(bake_cells.size() == 0);
-
- bake_cells_write = bake_cells.write();
-
- for (Set<Light *>::Element *E = lights.front(); E; E = E->next()) {
-
- _bake_light(E->get());
- }
-
- _upscale_light(0, 0);
-
- bake_cells_write = PoolVector<BakeCell>::Write();
-}
-
-Color BakedLight::_cone_trace(const Vector3 &p_from, const Vector3 &p_dir, float p_half_angle) {
-
- Color color(0, 0, 0, 0);
- float tha = Math::tan(p_half_angle); //tan half angle
- Vector3 from = (p_from - bounds.pos) / bounds.size; //convert to 0..1
- from /= cells_per_axis; //convert to voxels of size 1
- Vector3 dir = (p_dir / bounds.size).normalized();
-
- float max_dist = Vector3(cells_per_axis, cells_per_axis, cells_per_axis).length();
-
- float dist = 1.0;
- // self occlusion in flat surfaces
-
- float alpha = 0;
-
- while (dist < max_dist && alpha < 0.95) {
-
-#if 0
- // smallest sample diameter possible is the voxel size
- float diameter = MAX(1.0, 2.0 * tha * dist);
- float lod = log2(diameter);
-
- Vector3 sample_pos = from + dist * dir;
-
-
- Color samples_base[2][8]={{Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0)},
- {Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0),Color(0,0,0,0)}};
-
- float levelf = Math::fposmod(lod,1.0);
- float fx = Math::fposmod(sample_pos.x,1.0);
- float fy = Math::fposmod(sample_pos.y,1.0);
- float fz = Math::fposmod(sample_pos.z,1.0);
-
- for(int l=0;l<2;l++){
-
- int bx = Math::floor(sample_pos.x);
- int by = Math::floor(sample_pos.y);
- int bz = Math::floor(sample_pos.z);
-
- int lodn=int(Math::floor(lod))-l;
-
- bx>>=lodn;
- by>>=lodn;
- bz>>=lodn;
-
- int limit = MAX(0,cell_subdiv-lodn-1);
-
- for(int c=0;c<8;c++) {
-
- int x = bx;
- int y = by;
- int z = bz;
-
- if (c&1) {
- x+=1;
- }
- if (c&2) {
- y+=1;
- }
- if (c&4) {
- z+=1;
- }
-
- int ofs_x=0;
- int ofs_y=0;
- int ofs_z=0;
- int size = cells_per_axis>>lodn;
- int half=size/2;
-
- bool outside=x<0 || x>=size || y<0 || y>=size || z<0 || z>=size;
-
- if (outside)
- continue;
-
-
- uint32_t cell=0;
-
- for(int i=0;i<limit;i++) {
-
- BakeCell *bc = &bake_cells_write[cell];
-
- int child = 0;
- if (x >= ofs_x + half) {
- child|=1;
- ofs_x+=half;
- }
- if (y >= ofs_y + half) {
- child|=2;
- ofs_y+=half;
- }
- if (z >= ofs_z + half) {
- child|=4;
- ofs_z+=half;
- }
-
- cell = bc->childs[child];
- if (cell==CHILD_EMPTY)
- break;
-
- half>>=1;
- }
-
- if (cell!=CHILD_EMPTY) {
-
- samples_base[l][c].r=bake_cells_write[cell].light[0];
- samples_base[l][c].g=bake_cells_write[cell].light[1];
- samples_base[l][c].b=bake_cells_write[cell].light[2];
- samples_base[l][c].a=bake_cells_write[cell].alpha;
- }
-
- }
-
-
- }
-
- Color m0x0 = samples_base[0][0].linear_interpolate(samples_base[0][1],fx);
- Color m0x1 = samples_base[0][2].linear_interpolate(samples_base[0][3],fx);
- Color m0y0 = m0x0.linear_interpolate(m0x1,fy);
- m0x0 = samples_base[0][4].linear_interpolate(samples_base[0][5],fx);
- m0x1 = samples_base[0][6].linear_interpolate(samples_base[0][7],fx);
- Color m0y1 = m0x0.linear_interpolate(m0x1,fy);
- Color m0z = m0y0.linear_interpolate(m0y1,fz);
-
- Color m1x0 = samples_base[1][0].linear_interpolate(samples_base[1][1],fx);
- Color m1x1 = samples_base[1][2].linear_interpolate(samples_base[1][3],fx);
- Color m1y0 = m1x0.linear_interpolate(m1x1,fy);
- m1x0 = samples_base[1][4].linear_interpolate(samples_base[1][5],fx);
- m1x1 = samples_base[1][6].linear_interpolate(samples_base[1][7],fx);
- Color m1y1 = m1x0.linear_interpolate(m1x1,fy);
- Color m1z = m1y0.linear_interpolate(m1y1,fz);
-
- Color m = m0z.linear_interpolate(m1z,levelf);
-#else
- float diameter = 1.0;
- Vector3 sample_pos = from + dist * dir;
-
- Color m(0, 0, 0, 0);
- {
- int x = Math::floor(sample_pos.x);
- int y = Math::floor(sample_pos.y);
- int z = Math::floor(sample_pos.z);
-
- int ofs_x = 0;
- int ofs_y = 0;
- int ofs_z = 0;
- int size = cells_per_axis;
- int half = size / 2;
-
- bool outside = x < 0 || x >= size || y < 0 || y >= size || z < 0 || z >= size;
-
- if (!outside) {
-
- uint32_t cell = 0;
-
- for (int i = 0; i < cell_subdiv - 1; i++) {
-
- BakeCell *bc = &bake_cells_write[cell];
-
- int child = 0;
- if (x >= ofs_x + half) {
- child |= 1;
- ofs_x += half;
- }
- if (y >= ofs_y + half) {
- child |= 2;
- ofs_y += half;
- }
- if (z >= ofs_z + half) {
- child |= 4;
- ofs_z += half;
- }
-
- cell = bc->childs[child];
- if (cell == CHILD_EMPTY)
- break;
-
- half >>= 1;
- }
-
- if (cell != CHILD_EMPTY) {
-
- m.r = bake_cells_write[cell].light[0];
- m.g = bake_cells_write[cell].light[1];
- m.b = bake_cells_write[cell].light[2];
- m.a = bake_cells_write[cell].alpha;
- }
- }
- }
-
-#endif
- // front-to-back compositing
- float a = (1.0 - alpha);
- color.r += a * m.r;
- color.g += a * m.g;
- color.b += a * m.b;
- alpha += a * m.a;
- //occlusion += a * voxelColor.a;
- //occlusion += (a * voxelColor.a) / (1.0 + 0.03 * diameter);
- dist += diameter * 0.5; // smoother
- //dist += diameter; // faster but misses more voxels
- }
-
- return color;
-}
-
-void BakedLight::_bake_radiance(int p_idx, int p_level, int p_x, int p_y, int p_z) {
-
- if (p_level == cell_subdiv - 1) {
-
- const int NUM_CONES = 6;
- Vector3 cone_directions[6] = {
- Vector3(1, 0, 0),
- Vector3(0.5, 0.866025, 0),
- Vector3(0.5, 0.267617, 0.823639),
- Vector3(0.5, -0.700629, 0.509037),
- Vector3(0.5, -0.700629, -0.509037),
- Vector3(0.5, 0.267617, -0.823639)
- };
- float coneWeights[6] = { 0.25, 0.15, 0.15, 0.15, 0.15, 0.15 };
-
- Vector3 pos = (Vector3(p_x, p_y, p_z) / float(cells_per_axis)) * bounds.size + bounds.pos;
- Vector3 voxel_size = bounds.size / float(cells_per_axis);
- pos += voxel_size * 0.5;
-
- Color accum;
-
- bake_cells_write[p_idx].light[0] = 0;
- bake_cells_write[p_idx].light[1] = 0;
- bake_cells_write[p_idx].light[2] = 0;
-
- int freepix = 0;
- for (int i = 0; i < 6; i++) {
-
- if (!(bake_cells_write[p_idx].used_sides & (1 << i)))
- continue;
-
- if ((i & 1) == 0)
- bake_cells_write[p_idx].light[i / 2] = 1.0;
- freepix++;
- continue;
-
- int ofs = i / 2;
-
- Vector3 dir;
- if ((i & 1) == 0)
- dir[ofs] = 1.0;
- else
- dir[ofs] = -1.0;
-
- for (int j = 0; j < 1; j++) {
-
- Vector3 cone_dir;
- cone_dir.x = cone_directions[j][(ofs + 0) % 3];
- cone_dir.y = cone_directions[j][(ofs + 1) % 3];
- cone_dir.z = cone_directions[j][(ofs + 2) % 3];
-
- cone_dir[ofs] *= dir[ofs];
-
- Color res = _cone_trace(pos + dir * voxel_size, cone_dir, Math::deg2rad(29.9849));
- accum.r += res.r; //*coneWeights[j];
- accum.g += res.g; //*coneWeights[j];
- accum.b += res.b; //*coneWeights[j];
- }
- }
-#if 0
- if (freepix==0) {
- bake_cells_write[p_idx].light[0]=0;
- bake_cells_write[p_idx].light[1]=0;
- bake_cells_write[p_idx].light[2]=0;
- }
-
- if (freepix==1) {
- bake_cells_write[p_idx].light[0]=1;
- bake_cells_write[p_idx].light[1]=0;
- bake_cells_write[p_idx].light[2]=0;
- }
-
- if (freepix==2) {
- bake_cells_write[p_idx].light[0]=0;
- bake_cells_write[p_idx].light[1]=1;
- bake_cells_write[p_idx].light[2]=0;
- }
-
- if (freepix==3) {
- bake_cells_write[p_idx].light[0]=1;
- bake_cells_write[p_idx].light[1]=1;
- bake_cells_write[p_idx].light[2]=0;
- }
-
- if (freepix==4) {
- bake_cells_write[p_idx].light[0]=0;
- bake_cells_write[p_idx].light[1]=0;
- bake_cells_write[p_idx].light[2]=1;
- }
-
- if (freepix==5) {
- bake_cells_write[p_idx].light[0]=1;
- bake_cells_write[p_idx].light[1]=0;
- bake_cells_write[p_idx].light[2]=1;
- }
-
- if (freepix==6) {
- bake_cells_write[p_idx].light[0]=0;
- bake_cells_write[p_idx].light[0]=1;
- bake_cells_write[p_idx].light[0]=1;
- }
-#endif
- //bake_cells_write[p_idx].radiance[0]=accum.r;
- //bake_cells_write[p_idx].radiance[1]=accum.g;
- //bake_cells_write[p_idx].radiance[2]=accum.b;
-
- } else {
-
- int half = cells_per_axis >> (p_level + 1);
-
- //go down
- for (int i = 0; i < 8; i++) {
-
- uint32_t child = bake_cells_write[p_idx].childs[i];
-
- if (child == CHILD_EMPTY)
- continue;
-
- int nx = p_x;
- int ny = p_y;
- int nz = p_z;
-
- if (i & 1)
- nx += half;
- if (i & 2)
- ny += half;
- if (i & 4)
- nz += half;
-
- _bake_radiance(child, p_level + 1, nx, ny, nz);
- }
- }
-}
-
-void BakedLight::bake_radiance() {
-
- ERR_FAIL_COND(bake_cells.size() == 0);
-
- bake_cells_write = bake_cells.write();
-
- _bake_radiance(0, 0, 0, 0, 0);
-
- bake_cells_write = PoolVector<BakeCell>::Write();
-}
-int BakedLight::_find_cell(int x, int y, int z) {
-
- uint32_t cell = 0;
-
- int ofs_x = 0;
- int ofs_y = 0;
- int ofs_z = 0;
- int size = cells_per_axis;
- int half = size / 2;
-
- if (x < 0 || x >= size)
- return -1;
- if (y < 0 || y >= size)
- return -1;
- if (z < 0 || z >= size)
- return -1;
-
- for (int i = 0; i < cell_subdiv - 1; i++) {
-
- BakeCell *bc = &bake_cells_write[cell];
-
- int child = 0;
- if (x >= ofs_x + half) {
- child |= 1;
- ofs_x += half;
- }
- if (y >= ofs_y + half) {
- child |= 2;
- ofs_y += half;
- }
- if (z >= ofs_z + half) {
- child |= 4;
- ofs_z += half;
- }
-
- cell = bc->childs[child];
- if (cell == CHILD_EMPTY)
- return -1;
-
- half >>= 1;
- }
-
- return cell;
-}
-
-int BakedLight::_plot_ray(const Vector3 &p_from, const Vector3 &p_to) {
-
- Vector3 from = (p_from - bounds.pos) / bounds.size;
- Vector3 to = (p_to - bounds.pos) / bounds.size;
-
- int x1 = Math::floor(from.x * cells_per_axis);
- int y1 = Math::floor(from.y * cells_per_axis);
- int z1 = Math::floor(from.z * cells_per_axis);
-
- int x2 = Math::floor(to.x * cells_per_axis);
- int y2 = Math::floor(to.y * cells_per_axis);
- int z2 = Math::floor(to.z * cells_per_axis);
-
- int i, dx, dy, dz, l, m, n, x_inc, y_inc, z_inc, err_1, err_2, dx2, dy2, dz2;
- int point[3];
-
- point[0] = x1;
- point[1] = y1;
- point[2] = z1;
- dx = x2 - x1;
- dy = y2 - y1;
- dz = z2 - z1;
- x_inc = (dx < 0) ? -1 : 1;
- l = ABS(dx);
- y_inc = (dy < 0) ? -1 : 1;
- m = ABS(dy);
- z_inc = (dz < 0) ? -1 : 1;
- n = ABS(dz);
- dx2 = l << 1;
- dy2 = m << 1;
- dz2 = n << 1;
-
- if ((l >= m) && (l >= n)) {
- err_1 = dy2 - l;
- err_2 = dz2 - l;
- for (i = 0; i < l; i++) {
- int cell = _find_cell(point[0], point[1], point[2]);
- if (cell >= 0)
- return cell;
-
- if (err_1 > 0) {
- point[1] += y_inc;
- err_1 -= dx2;
- }
- if (err_2 > 0) {
- point[2] += z_inc;
- err_2 -= dx2;
- }
- err_1 += dy2;
- err_2 += dz2;
- point[0] += x_inc;
- }
- } else if ((m >= l) && (m >= n)) {
- err_1 = dx2 - m;
- err_2 = dz2 - m;
- for (i = 0; i < m; i++) {
- int cell = _find_cell(point[0], point[1], point[2]);
- if (cell >= 0)
- return cell;
- if (err_1 > 0) {
- point[0] += x_inc;
- err_1 -= dy2;
- }
- if (err_2 > 0) {
- point[2] += z_inc;
- err_2 -= dy2;
- }
- err_1 += dx2;
- err_2 += dz2;
- point[1] += y_inc;
- }
- } else {
- err_1 = dy2 - n;
- err_2 = dx2 - n;
- for (i = 0; i < n; i++) {
- int cell = _find_cell(point[0], point[1], point[2]);
- if (cell >= 0)
- return cell;
-
- if (err_1 > 0) {
- point[1] += y_inc;
- err_1 -= dz2;
- }
- if (err_2 > 0) {
- point[0] += x_inc;
- err_2 -= dz2;
- }
- err_1 += dy2;
- err_2 += dx2;
- point[2] += z_inc;
- }
- }
- return _find_cell(point[0], point[1], point[2]);
-}
-
-void BakedLight::set_cell_subdiv(int p_subdiv) {
-
- cell_subdiv = p_subdiv;
-
- //VS::get_singleton()->baked_light_set_subdivision(baked_light,p_subdiv);
-}
-
-int BakedLight::get_cell_subdiv() const {
-
- return cell_subdiv;
-}
-
-Rect3 BakedLight::get_aabb() const {
-
- return Rect3(Vector3(0, 0, 0), Vector3(1, 1, 1));
-}
-PoolVector<Face3> BakedLight::get_faces(uint32_t p_usage_flags) const {
-
- return PoolVector<Face3>();
-}
-
-String BakedLight::get_configuration_warning() const {
- return String();
-}
-
-void BakedLight::_debug_mesh(int p_idx, int p_level, const Rect3 &p_aabb, DebugMode p_mode, Ref<MultiMesh> &p_multimesh, int &idx) {
-
- if (p_level == cell_subdiv - 1) {
-
- Vector3 center = p_aabb.pos + p_aabb.size * 0.5;
- Transform xform;
- xform.origin = center;
- xform.basis.scale(p_aabb.size * 0.5);
- p_multimesh->set_instance_transform(idx, xform);
- Color col;
- switch (p_mode) {
- case DEBUG_ALBEDO: {
- col = Color(bake_cells_write[p_idx].albedo[0], bake_cells_write[p_idx].albedo[1], bake_cells_write[p_idx].albedo[2]);
- } break;
- case DEBUG_LIGHT: {
- col = Color(bake_cells_write[p_idx].light[0], bake_cells_write[p_idx].light[1], bake_cells_write[p_idx].light[2]);
- Color colr = Color(bake_cells_write[p_idx].radiance[0], bake_cells_write[p_idx].radiance[1], bake_cells_write[p_idx].radiance[2]);
- col.r += colr.r;
- col.g += colr.g;
- col.b += colr.b;
- } break;
- }
- p_multimesh->set_instance_color(idx, col);
-
- idx++;
-
- } else {
-
- for (int i = 0; i < 8; i++) {
-
- if (bake_cells_write[p_idx].childs[i] == CHILD_EMPTY)
- continue;
-
- Rect3 aabb = p_aabb;
- aabb.size *= 0.5;
-
- if (i & 1)
- aabb.pos.x += aabb.size.x;
- if (i & 2)
- aabb.pos.y += aabb.size.y;
- if (i & 4)
- aabb.pos.z += aabb.size.z;
-
- _debug_mesh(bake_cells_write[p_idx].childs[i], p_level + 1, aabb, p_mode, p_multimesh, idx);
- }
- }
-}
-
-void BakedLight::create_debug_mesh(DebugMode p_mode) {
-
- Ref<MultiMesh> mm;
- mm.instance();
-
- mm->set_transform_format(MultiMesh::TRANSFORM_3D);
- mm->set_color_format(MultiMesh::COLOR_8BIT);
- mm->set_instance_count(bake_cells_level_used[cell_subdiv - 1]);
-
- Ref<Mesh> mesh;
- mesh.instance();
-
- {
- Array arr;
- arr.resize(Mesh::ARRAY_MAX);
-
- PoolVector<Vector3> vertices;
- PoolVector<Color> colors;
-
- int vtx_idx = 0;
-#define ADD_VTX(m_idx) \
- ; \
- vertices.push_back(face_points[m_idx]); \
- colors.push_back(Color(1, 1, 1, 1)); \
- vtx_idx++;
-
- for (int i = 0; i < 6; i++) {
-
- Vector3 face_points[4];
-
- for (int j = 0; j < 4; j++) {
-
- float v[3];
- v[0] = 1.0;
- v[1] = 1 - 2 * ((j >> 1) & 1);
- v[2] = v[1] * (1 - 2 * (j & 1));
-
- for (int k = 0; k < 3; k++) {
-
- if (i < 3)
- face_points[j][(i + k) % 3] = v[k] * (i >= 3 ? -1 : 1);
- else
- face_points[3 - j][(i + k) % 3] = v[k] * (i >= 3 ? -1 : 1);
- }
- }
-
- //tri 1
- ADD_VTX(0);
- ADD_VTX(1);
- ADD_VTX(2);
- //tri 2
- ADD_VTX(2);
- ADD_VTX(3);
- ADD_VTX(0);
- }
-
- arr[Mesh::ARRAY_VERTEX] = vertices;
- arr[Mesh::ARRAY_COLOR] = colors;
- mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, arr);
- }
-
- {
- Ref<SpatialMaterial> fsm;
- fsm.instance();
- fsm->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true);
- fsm->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true);
- fsm->set_flag(SpatialMaterial::FLAG_UNSHADED, true);
- fsm->set_albedo(Color(1, 1, 1, 1));
-
- mesh->surface_set_material(0, fsm);
- }
-
- mm->set_mesh(mesh);
-
- bake_cells_write = bake_cells.write();
-
- int idx = 0;
- _debug_mesh(0, 0, bounds, p_mode, mm, idx);
-
- print_line("written: " + itos(idx) + " total: " + itos(bake_cells_level_used[cell_subdiv - 1]));
-
- MultiMeshInstance *mmi = memnew(MultiMeshInstance);
- mmi->set_multimesh(mm);
- add_child(mmi);
-#ifdef TOOLS_ENABLED
- if (get_tree()->get_edited_scene_root() == this) {
- mmi->set_owner(this);
- } else {
- mmi->set_owner(get_owner());
- }
-#else
- mmi->set_owner(get_owner());
-#endif
-}
-
-void BakedLight::_debug_mesh_albedo() {
- create_debug_mesh(DEBUG_ALBEDO);
-}
-
-void BakedLight::_debug_mesh_light() {
- create_debug_mesh(DEBUG_LIGHT);
-}
-
-void BakedLight::_bind_methods() {
-
- ClassDB::bind_method(D_METHOD("set_cell_subdiv", "steps"), &BakedLight::set_cell_subdiv);
- ClassDB::bind_method(D_METHOD("get_cell_subdiv"), &BakedLight::get_cell_subdiv);
-
- ClassDB::bind_method(D_METHOD("bake"), &BakedLight::bake);
- ClassDB::set_method_flags(get_class_static(), _scs_create("bake"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR);
-
- ClassDB::bind_method(D_METHOD("bake_lights"), &BakedLight::bake_lights);
- ClassDB::set_method_flags(get_class_static(), _scs_create("bake_lights"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR);
-
- ClassDB::bind_method(D_METHOD("bake_radiance"), &BakedLight::bake_radiance);
- ClassDB::set_method_flags(get_class_static(), _scs_create("bake_radiance"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR);
-
- ClassDB::bind_method(D_METHOD("debug_mesh_albedo"), &BakedLight::_debug_mesh_albedo);
- ClassDB::set_method_flags(get_class_static(), _scs_create("debug_mesh_albedo"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR);
-
- ClassDB::bind_method(D_METHOD("debug_mesh_light"), &BakedLight::_debug_mesh_light);
- ClassDB::set_method_flags(get_class_static(), _scs_create("debug_mesh_light"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR);
-
- ADD_PROPERTY(PropertyInfo(Variant::INT, "cell_subdiv"), "set_cell_subdiv", "get_cell_subdiv");
- ADD_SIGNAL(MethodInfo("baked_light_changed"));
-}
-
-BakedLight::BakedLight() {
-
- //baked_light=VisualServer::get_singleton()->baked_light_create();
- VS::get_singleton()->instance_set_base(get_instance(), baked_light);
-
- cell_subdiv = 8;
- bake_texture_size = 128;
- color_scan_cell_width = 8;
- light_pass = 0;
-}
-
-BakedLight::~BakedLight() {
-
- VS::get_singleton()->free(baked_light);
-}
-
-/////////////////////////
-
-#if 0
-void BakedLightSampler::set_param(Param p_param,float p_value) {
- ERR_FAIL_INDEX(p_param,PARAM_MAX);
- params[p_param]=p_value;
- VS::get_singleton()->baked_light_sampler_set_param(base,VS::BakedLightSamplerParam(p_param),p_value);
-}
-
-float BakedLightSampler::get_param(Param p_param) const{
-
- ERR_FAIL_INDEX_V(p_param,PARAM_MAX,0);
- return params[p_param];
-
-}
-
-void BakedLightSampler::set_resolution(int p_resolution){
-
- ERR_FAIL_COND(p_resolution<4 || p_resolution>32);
- resolution=p_resolution;
- VS::get_singleton()->baked_light_sampler_set_resolution(base,resolution);
-}
-int BakedLightSampler::get_resolution() const {
-
- return resolution;
-}
-
-AABB BakedLightSampler::get_aabb() const {
-
- float r = get_param(PARAM_RADIUS);
- return AABB( Vector3(-r,-r,-r),Vector3(r*2,r*2,r*2));
-}
-DVector<Face3> BakedLightSampler::get_faces(uint32_t p_usage_flags) const {
- return DVector<Face3>();
-}
-
-void BakedLightSampler::_bind_methods() {
-
- ClassDB::bind_method(D_METHOD("set_param","param","value"),&BakedLightSampler::set_param);
- ClassDB::bind_method(D_METHOD("get_param","param"),&BakedLightSampler::get_param);
-
- ClassDB::bind_method(D_METHOD("set_resolution","resolution"),&BakedLightSampler::set_resolution);
- ClassDB::bind_method(D_METHOD("get_resolution"),&BakedLightSampler::get_resolution);
-
-
- BIND_CONSTANT( PARAM_RADIUS );
- BIND_CONSTANT( PARAM_STRENGTH );
- BIND_CONSTANT( PARAM_ATTENUATION );
- BIND_CONSTANT( PARAM_DETAIL_RATIO );
- BIND_CONSTANT( PARAM_MAX );
-
- ADD_PROPERTYI( PropertyInfo(Variant::REAL,"params/radius",PROPERTY_HINT_RANGE,"0.01,1024,0.01"),"set_param","get_param",PARAM_RADIUS);
- ADD_PROPERTYI( PropertyInfo(Variant::REAL,"params/strength",PROPERTY_HINT_RANGE,"0.01,16,0.01"),"set_param","get_param",PARAM_STRENGTH);
- ADD_PROPERTYI( PropertyInfo(Variant::REAL,"params/attenuation",PROPERTY_HINT_EXP_EASING),"set_param","get_param",PARAM_ATTENUATION);
- ADD_PROPERTYI( PropertyInfo(Variant::REAL,"params/detail_ratio",PROPERTY_HINT_RANGE,"0.01,1.0,0.01"),"set_param","get_param",PARAM_DETAIL_RATIO);
- //ADD_PROPERTYI( PropertyInfo(Variant::REAL,"params/detail_ratio",PROPERTY_HINT_RANGE,"0,20,1"),"set_param","get_param",PARAM_DETAIL_RATIO);
- ADD_PROPERTY( PropertyInfo(Variant::REAL,"params/resolution",PROPERTY_HINT_RANGE,"4,32,1"),"set_resolution","get_resolution");
-
-}
-
-BakedLightSampler::BakedLightSampler() {
-
- base = VS::get_singleton()->baked_light_sampler_create();
- set_base(base);
-
- params[PARAM_RADIUS]=1.0;
- params[PARAM_STRENGTH]=1.0;
- params[PARAM_ATTENUATION]=1.0;
- params[PARAM_DETAIL_RATIO]=0.1;
- resolution=16;
-
-
-}
-
-BakedLightSampler::~BakedLightSampler(){
-
- VS::get_singleton()->free(base);
-}
-#endif
diff --git a/scene/3d/baked_light_instance.h b/scene/3d/baked_light_instance.h
deleted file mode 100644
index 63a5fa7255..0000000000
--- a/scene/3d/baked_light_instance.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*************************************************************************/
-/* baked_light_instance.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#ifndef BAKED_LIGHT_INSTANCE_H
-#define BAKED_LIGHT_INSTANCE_H
-
-#include "scene/3d/multimesh_instance.h"
-#include "scene/3d/visual_instance.h"
-#include "scene/resources/baked_light.h"
-
-class BakedLightBaker;
-class Light;
-
-class BakedLight : public VisualInstance {
- GDCLASS(BakedLight, VisualInstance);
-
-public:
- enum DebugMode {
- DEBUG_ALBEDO,
- DEBUG_LIGHT
- };
-
-private:
- RID baked_light;
- int cell_subdiv;
- Rect3 bounds;
- int cells_per_axis;
-
- enum {
- CHILD_EMPTY = 0xFFFFFFFF,
- };
-
- /* BAKE DATA */
-
- struct BakeCell {
-
- uint32_t childs[8];
- float albedo[3]; //albedo in RGB24
- float light[3]; //accumulated light in 16:16 fixed point (needs to be integer for moving lights fast)
- float radiance[3]; //accumulated light in 16:16 fixed point (needs to be integer for moving lights fast)
- uint32_t used_sides;
- float alpha; //used for upsampling
- uint32_t light_pass; //used for baking light
-
- BakeCell() {
- for (int i = 0; i < 8; i++) {
- childs[i] = 0xFFFFFFFF;
- }
-
- for (int i = 0; i < 3; i++) {
- light[i] = 0;
- albedo[i] = 0;
- radiance[i] = 0;
- }
- alpha = 0;
- light_pass = 0;
- used_sides = 0;
- }
- };
-
- int bake_texture_size;
- int color_scan_cell_width;
-
- struct MaterialCache {
- //128x128 textures
- Vector<Color> albedo;
- Vector<Color> emission;
- };
-
- Vector<Color> _get_bake_texture(Image &p_image, const Color &p_color);
-
- Map<Ref<Material>, MaterialCache> material_cache;
- MaterialCache _get_material_cache(Ref<Material> p_material);
-
- int bake_cells_alloc;
- int bake_cells_used;
- int zero_alphas;
- Vector<int> bake_cells_level_used;
- PoolVector<BakeCell> bake_cells;
- PoolVector<BakeCell>::Write bake_cells_write;
-
- void _plot_face(int p_idx, int p_level, const Vector3 *p_vtx, const Vector2 *p_uv, const MaterialCache &p_material, const Rect3 &p_aabb);
- void _fixup_plot(int p_idx, int p_level, int p_x, int p_y, int p_z);
- void _bake_add_mesh(const Transform &p_xform, Ref<Mesh> &p_mesh);
- void _bake_add_to_aabb(const Transform &p_xform, Ref<Mesh> &p_mesh, bool &first);
-
- void _debug_mesh(int p_idx, int p_level, const Rect3 &p_aabb, DebugMode p_mode, Ref<MultiMesh> &p_multimesh, int &idx);
- void _debug_mesh_albedo();
- void _debug_mesh_light();
-
- _FORCE_INLINE_ int _find_cell(int x, int y, int z);
- int _plot_ray(const Vector3 &p_from, const Vector3 &p_to);
-
- uint32_t light_pass;
-
- void _bake_directional(int p_idx, int p_level, int p_x, int p_y, int p_z, const Vector3 &p_dir, const Color &p_color, int p_sign);
- void _upscale_light(int p_idx, int p_level);
- void _bake_light(Light *p_light);
-
- Color _cone_trace(const Vector3 &p_from, const Vector3 &p_dir, float p_half_angle);
- void _bake_radiance(int p_idx, int p_level, int p_x, int p_y, int p_z);
-
- friend class GeometryInstance;
-
- Set<GeometryInstance *> geometries;
- friend class Light;
-
- Set<Light *> lights;
-
-protected:
- static void _bind_methods();
-
-public:
- void set_cell_subdiv(int p_subdiv);
- int get_cell_subdiv() const;
-
- void bake();
- void bake_lights();
- void bake_radiance();
-
- void create_debug_mesh(DebugMode p_mode);
-
- virtual Rect3 get_aabb() const;
- virtual PoolVector<Face3> get_faces(uint32_t p_usage_flags) const;
-
- String get_configuration_warning() const;
-
- BakedLight();
- ~BakedLight();
-};
-
-#if 0
-class BakedLightSampler : public VisualInstance {
- GDCLASS(BakedLightSampler,VisualInstance);
-
-
-public:
-
- enum Param {
- PARAM_RADIUS=VS::BAKED_LIGHT_SAMPLER_RADIUS,
- PARAM_STRENGTH=VS::BAKED_LIGHT_SAMPLER_STRENGTH,
- PARAM_ATTENUATION=VS::BAKED_LIGHT_SAMPLER_ATTENUATION,
- PARAM_DETAIL_RATIO=VS::BAKED_LIGHT_SAMPLER_DETAIL_RATIO,
- PARAM_MAX=VS::BAKED_LIGHT_SAMPLER_MAX
- };
-
-
-
-protected:
-
- RID base;
- float params[PARAM_MAX];
- int resolution;
- static void _bind_methods();
-public:
-
- virtual AABB get_aabb() const;
- virtual PoolVector<Face3> get_faces(uint32_t p_usage_flags) const;
-
- void set_param(Param p_param,float p_value);
- float get_param(Param p_param) const;
-
- void set_resolution(int p_resolution);
- int get_resolution() const;
-
- BakedLightSampler();
- ~BakedLightSampler();
-};
-
-VARIANT_ENUM_CAST( BakedLightSampler::Param );
-
-#endif
-#endif // BAKED_LIGHT_H
diff --git a/scene/3d/gi_probe.cpp b/scene/3d/gi_probe.cpp
index 7370e1330c..96311236ef 100644
--- a/scene/3d/gi_probe.cpp
+++ b/scene/3d/gi_probe.cpp
@@ -881,11 +881,11 @@ void GIProbe::_fixup_plot(int p_idx, int p_level, int p_x, int p_y, int p_z, Bak
}
}
-Vector<Color> GIProbe::_get_bake_texture(Image &p_image, const Color &p_color) {
+Vector<Color> GIProbe::_get_bake_texture(Ref<Image> p_image, const Color &p_color) {
Vector<Color> ret;
- if (p_image.empty()) {
+ if (p_image.is_null()) {
ret.resize(bake_texture_size * bake_texture_size);
for (int i = 0; i < bake_texture_size * bake_texture_size; i++) {
@@ -895,14 +895,14 @@ Vector<Color> GIProbe::_get_bake_texture(Image &p_image, const Color &p_color) {
return ret;
}
- if (p_image.is_compressed()) {
+ if (p_image->is_compressed()) {
print_line("DECOMPRESSING!!!!");
- p_image.decompress();
+ p_image->decompress();
}
- p_image.convert(Image::FORMAT_RGBA8);
- p_image.resize(bake_texture_size, bake_texture_size, Image::INTERPOLATE_CUBIC);
+ p_image->convert(Image::FORMAT_RGBA8);
+ p_image->resize(bake_texture_size, bake_texture_size, Image::INTERPOLATE_CUBIC);
- PoolVector<uint8_t>::Read r = p_image.get_data().read();
+ PoolVector<uint8_t>::Read r = p_image->get_data().read();
ret.resize(bake_texture_size * bake_texture_size);
for (int i = 0; i < bake_texture_size * bake_texture_size; i++) {
@@ -934,7 +934,7 @@ GIProbe::Baker::MaterialCache GIProbe::_get_material_cache(Ref<Material> p_mater
Ref<Texture> albedo_tex = mat->get_texture(SpatialMaterial::TEXTURE_ALBEDO);
- Image img_albedo;
+ Ref<Image> img_albedo;
if (albedo_tex.is_valid()) {
img_albedo = albedo_tex->get_data();
@@ -950,7 +950,7 @@ GIProbe::Baker::MaterialCache GIProbe::_get_material_cache(Ref<Material> p_mater
emission_col.g *= mat->get_emission_energy();
emission_col.b *= mat->get_emission_energy();
- Image img_emission;
+ Ref<Image> img_emission;
if (emission_tex.is_valid()) {
@@ -960,7 +960,7 @@ GIProbe::Baker::MaterialCache GIProbe::_get_material_cache(Ref<Material> p_mater
mc.emission = _get_bake_texture(img_emission, emission_col);
} else {
- Image empty;
+ Ref<Image> empty;
mc.albedo = _get_bake_texture(empty, Color(0.7, 0.7, 0.7));
mc.emission = _get_bake_texture(empty, Color(0, 0, 0));
diff --git a/scene/3d/gi_probe.h b/scene/3d/gi_probe.h
index ae89a6f068..3b05d9952b 100644
--- a/scene/3d/gi_probe.h
+++ b/scene/3d/gi_probe.h
@@ -134,7 +134,7 @@ private:
Vector<Color> emission;
};
- Vector<Color> _get_bake_texture(Image &p_image, const Color &p_color);
+ Vector<Color> _get_bake_texture(Ref<Image> p_image, const Color &p_color);
Map<Ref<Material>, MaterialCache> material_cache;
MaterialCache _get_material_cache(Ref<Material> p_material);
int leaf_voxel_count;
@@ -170,7 +170,7 @@ private:
int color_scan_cell_width;
int bake_texture_size;
- Vector<Color> _get_bake_texture(Image &p_image, const Color &p_color);
+ Vector<Color> _get_bake_texture(Ref<Image> p_image, const Color &p_color);
Baker::MaterialCache _get_material_cache(Ref<Material> p_material, Baker *p_baker);
void _plot_face(int p_idx, int p_level, int p_x, int p_y, int p_z, const Vector3 *p_vtx, const Vector2 *p_uv, const Baker::MaterialCache &p_material, const Rect3 &p_aabb, Baker *p_baker);
void _plot_mesh(const Transform &p_xform, Ref<Mesh> &p_mesh, Baker *p_baker, const Vector<Ref<Material> > &p_materials, const Ref<Material> &p_override_material);
diff --git a/scene/3d/light.cpp b/scene/3d/light.cpp
index bb14ad5108..6ab65d3994 100644
--- a/scene/3d/light.cpp
+++ b/scene/3d/light.cpp
@@ -29,7 +29,6 @@
/*************************************************************************/
#include "light.h"
-#include "baked_light_instance.h"
#include "global_config.h"
#include "scene/resources/surface_tool.h"
@@ -166,26 +165,9 @@ void Light::_notification(int p_what) {
if (p_what == NOTIFICATION_ENTER_TREE) {
_update_visibility();
-
- Node *node = this;
-
- while (node) {
-
- baked_light = node->cast_to<BakedLight>();
- if (baked_light) {
- baked_light->lights.insert(this);
- break;
- }
-
- node = node->get_parent();
- }
}
if (p_what == NOTIFICATION_EXIT_TREE) {
-
- if (baked_light) {
- baked_light->lights.erase(this);
- }
}
}
@@ -262,8 +244,6 @@ Light::Light(VisualServer::LightType p_type) {
light = VisualServer::get_singleton()->light_create(p_type);
VS::get_singleton()->instance_set_base(get_instance(), light);
- baked_light = NULL;
-
editor_only = false;
set_color(Color(1, 1, 1, 1));
set_shadow(false);
diff --git a/scene/3d/light.h b/scene/3d/light.h
index ed8758b09b..c02f9d12d3 100644
--- a/scene/3d/light.h
+++ b/scene/3d/light.h
@@ -75,7 +75,6 @@ private:
bool editor_only;
void _update_visibility();
- BakedLight *baked_light;
// bind helpers
protected:
diff --git a/scene/3d/particles.cpp b/scene/3d/particles.cpp
index 038ca33a41..71079ea780 100644
--- a/scene/3d/particles.cpp
+++ b/scene/3d/particles.cpp
@@ -48,11 +48,13 @@ void Particles::set_emitting(bool p_emitting) {
void Particles::set_amount(int p_amount) {
+ ERR_FAIL_COND(p_amount < 1);
amount = p_amount;
VS::get_singleton()->particles_set_amount(particles, amount);
}
void Particles::set_lifetime(float p_lifetime) {
+ ERR_FAIL_COND(p_lifetime <= 0);
lifetime = p_lifetime;
VS::get_singleton()->particles_set_lifetime(particles, lifetime);
}
diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp
index 94f34d6fb3..98babedf0d 100644
--- a/scene/3d/physics_body.cpp
+++ b/scene/3d/physics_body.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "physics_body.h"
+#include "method_bind_ext.inc"
#include "scene/scene_string_names.h"
void PhysicsBody::_notification(int p_what) {
@@ -907,6 +908,19 @@ bool KinematicBody::_ignores_mode(PhysicsServer::BodyMode p_mode) const {
return true;
}
+void KinematicBody::revert_motion() {
+
+ Transform gt = get_global_transform();
+ gt.origin -= travel; //I do hope this is correct.
+ travel = Vector3();
+ set_global_transform(gt);
+}
+
+Vector3 KinematicBody::get_travel() const {
+
+ return travel;
+}
+
Vector3 KinematicBody::move(const Vector3 &p_motion) {
//give me back regular physics engine logic
@@ -1097,10 +1111,111 @@ Vector3 KinematicBody::move(const Vector3 &p_motion) {
Transform gt = get_global_transform();
gt.origin += motion;
set_global_transform(gt);
+ travel = motion;
return p_motion - motion;
}
+Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction, const Vector3 &p_ceil_direction, float p_slope_stop_min_velocity, int p_max_bounces, float p_floor_max_angle, float p_ceil_max_angle) {
+
+ /*
+ Things to note:
+ 1. This function is basically the KinematicBody2D function ported over.
+ 2. The 'travel' variable and stuff relating to it exists more or less for this function's sake.
+ 3. Someone is going to have to document this, so here's an example for them:
+ vel = move_and_slide(vel, Vector3(0, 1, 0), Vector3(0, -1, 0), 0.1);
+ Very useful for FPS controllers so long as you control horizontal motion properly - even for Quake-style AABB colliders.
+ The slope stop system is... rather weird, and it's correct operation depends on what scale your game is built on,
+ but as far as I can tell in theory it's suppposed to be a way of turning impassable slopes into invisible walls.
+ It can also be a pain, since there's a better-known way of defining such things: "let gravity do the work".
+ If you don't like it, set it to positive infinity.
+ 4. Might be a bug somewhere else in physics: When there are two CollisionShape nodes with a shared Shape, only one is considered, I think.
+ Test this further.
+ */
+
+ Vector3 motion = (move_and_slide_floor_velocity + p_linear_velocity) * get_fixed_process_delta_time();
+ Vector3 lv = p_linear_velocity;
+
+ move_and_slide_on_floor = false;
+ move_and_slide_on_ceiling = false;
+ move_and_slide_on_wall = false;
+ move_and_slide_colliders.clear();
+ move_and_slide_floor_velocity = Vector3();
+
+ while (p_max_bounces) {
+
+ motion = move(motion);
+
+ if (is_colliding()) {
+
+ bool hit_horizontal = false; //hit floor or ceiling
+
+ if (p_floor_direction != Vector3()) {
+ if (get_collision_normal().dot(p_floor_direction) >= Math::cos(p_floor_max_angle)) { //floor
+
+ hit_horizontal = true;
+ move_and_slide_on_floor = true;
+ move_and_slide_floor_velocity = get_collider_velocity();
+
+ //Note: These two lines are the only lines that really changed between 3D/2D, see if it can't be reused somehow???
+ Vector2 hz_velocity = Vector2(lv.x - move_and_slide_floor_velocity.x, lv.z - move_and_slide_floor_velocity.z);
+ if (get_travel().length() < 1 && hz_velocity.length() < p_slope_stop_min_velocity) {
+ revert_motion();
+ return Vector3();
+ }
+ }
+ }
+
+ if (p_ceil_direction != Vector3()) {
+ if (get_collision_normal().dot(p_ceil_direction) >= Math::cos(p_ceil_max_angle)) { //ceiling
+ hit_horizontal = true;
+ move_and_slide_on_ceiling = true;
+ }
+ }
+
+ //if it hit something but didn't hit a floor or ceiling, it is by default a wall
+ //(this imitates the pre-specifiable-ceiling logic more or less, except ceiling is optional)
+ if (!hit_horizontal) {
+ move_and_slide_on_wall = true;
+ }
+
+ Vector3 n = get_collision_normal();
+ motion = motion.slide(n);
+ lv = lv.slide(n);
+ Variant collider = _get_collider();
+ if (collider.get_type() != Variant::NIL) {
+ move_and_slide_colliders.push_back(collider);
+ }
+
+ } else {
+ break;
+ }
+
+ p_max_bounces--;
+ if (motion == Vector3())
+ break;
+ }
+
+ return lv;
+}
+
+bool KinematicBody::is_move_and_slide_on_floor() const {
+
+ return move_and_slide_on_floor;
+}
+bool KinematicBody::is_move_and_slide_on_wall() const {
+
+ return move_and_slide_on_wall;
+}
+bool KinematicBody::is_move_and_slide_on_ceiling() const {
+
+ return move_and_slide_on_ceiling;
+}
+Array KinematicBody::get_move_and_slide_colliders() const {
+
+ return move_and_slide_colliders;
+}
+
Vector3 KinematicBody::move_to(const Vector3 &p_position) {
return move(p_position - get_global_transform().origin);
@@ -1223,6 +1338,7 @@ void KinematicBody::_bind_methods() {
ClassDB::bind_method(D_METHOD("move", "rel_vec"), &KinematicBody::move);
ClassDB::bind_method(D_METHOD("move_to", "position"), &KinematicBody::move_to);
+ ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "floor_normal", "ceil_normal", "slope_stop_min_velocity", "max_bounces", "floor_max_angle", "ceil_max_angle"), &KinematicBody::move_and_slide, DEFVAL(Vector3(0, 0, 0)), DEFVAL(Vector3(0, 0, 0)), DEFVAL(5), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(Math::deg2rad((float)45)));
ClassDB::bind_method(D_METHOD("can_teleport_to", "position"), &KinematicBody::can_teleport_to);
@@ -1249,6 +1365,14 @@ void KinematicBody::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_collision_margin", "pixels"), &KinematicBody::set_collision_margin);
ClassDB::bind_method(D_METHOD("get_collision_margin", "pixels"), &KinematicBody::get_collision_margin);
+ ClassDB::bind_method(D_METHOD("get_travel"), &KinematicBody::get_travel);
+ ClassDB::bind_method(D_METHOD("revert_motion"), &KinematicBody::revert_motion);
+
+ ClassDB::bind_method(D_METHOD("get_move_and_slide_colliders"), &KinematicBody::get_move_and_slide_colliders);
+ ClassDB::bind_method(D_METHOD("is_move_and_slide_on_floor"), &KinematicBody::is_move_and_slide_on_floor);
+ ClassDB::bind_method(D_METHOD("is_move_and_slide_on_ceiling"), &KinematicBody::is_move_and_slide_on_ceiling);
+ ClassDB::bind_method(D_METHOD("is_move_and_slide_on_wall"), &KinematicBody::is_move_and_slide_on_wall);
+
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with/static"), "set_collide_with_static_bodies", "can_collide_with_static_bodies");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with/kinematic"), "set_collide_with_kinematic_bodies", "can_collide_with_kinematic_bodies");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collide_with/rigid"), "set_collide_with_rigid_bodies", "can_collide_with_rigid_bodies");
diff --git a/scene/3d/physics_body.h b/scene/3d/physics_body.h
index c62f6be13f..d13f84dc15 100644
--- a/scene/3d/physics_body.h
+++ b/scene/3d/physics_body.h
@@ -275,6 +275,13 @@ class KinematicBody : public PhysicsBody {
Vector3 collider_vel;
ObjectID collider;
int collider_shape;
+ Vector3 travel;
+
+ Vector3 move_and_slide_floor_velocity;
+ bool move_and_slide_on_floor;
+ bool move_and_slide_on_ceiling;
+ bool move_and_slide_on_wall;
+ Array move_and_slide_colliders;
Variant _get_collider() const;
@@ -295,6 +302,10 @@ public:
bool can_teleport_to(const Vector3 &p_position);
bool is_colliding() const;
+
+ Vector3 get_travel() const; // Set by move and others. Consider unreliable except immediately after a move call.
+ void revert_motion();
+
Vector3 get_collision_pos() const;
Vector3 get_collision_normal() const;
Vector3 get_collider_velocity() const;
@@ -316,6 +327,12 @@ public:
void set_collision_margin(float p_margin);
float get_collision_margin() const;
+ Vector3 move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction = Vector3(0, 0, 0), const Vector3 &p_ceil_direction = Vector3(0, 0, 0), float p_slope_stop_min_velocity = 5, int p_max_bounces = 4, float p_floor_max_angle = Math::deg2rad((float)45), float p_ceil_max_angle = Math::deg2rad((float)45));
+ bool is_move_and_slide_on_floor() const;
+ bool is_move_and_slide_on_wall() const;
+ bool is_move_and_slide_on_ceiling() const;
+ Array get_move_and_slide_colliders() const;
+
KinematicBody();
~KinematicBody();
};
diff --git a/scene/3d/ray_cast.cpp b/scene/3d/ray_cast.cpp
index f984d8f06d..d24aa6ae2a 100644
--- a/scene/3d/ray_cast.cpp
+++ b/scene/3d/ray_cast.cpp
@@ -30,12 +30,15 @@
#include "ray_cast.h"
#include "collision_object.h"
+#include "mesh_instance.h"
#include "servers/physics_server.h"
void RayCast::set_cast_to(const Vector3 &p_point) {
cast_to = p_point;
if (is_inside_tree() && (get_tree()->is_editor_hint() || get_tree()->is_debugging_collisions_hint()))
update_gizmo();
+ if (is_inside_tree() && get_tree()->is_debugging_collisions_hint())
+ _update_debug_shape();
}
Vector3 RayCast::get_cast_to() const {
@@ -95,6 +98,13 @@ void RayCast::set_enabled(bool p_enabled) {
set_fixed_process(p_enabled);
if (!p_enabled)
collided = false;
+
+ if (is_inside_tree() && get_tree()->is_debugging_collisions_hint()) {
+ if (p_enabled)
+ _update_debug_shape();
+ else
+ _clear_debug_shape();
+ }
}
bool RayCast::is_enabled() const {
@@ -110,6 +120,9 @@ void RayCast::_notification(int p_what) {
if (enabled && !get_tree()->is_editor_hint()) {
set_fixed_process(true);
+
+ if (get_tree()->is_debugging_collisions_hint())
+ _update_debug_shape();
} else
set_fixed_process(false);
@@ -120,13 +133,23 @@ void RayCast::_notification(int p_what) {
set_fixed_process(false);
}
+ if (debug_shape)
+ _clear_debug_shape();
+
} break;
case NOTIFICATION_FIXED_PROCESS: {
if (!enabled)
break;
+ bool prev_collision_state = collided;
_update_raycast_state();
+ if (prev_collision_state != collided && get_tree()->is_debugging_collisions_hint()) {
+ if (debug_material.is_valid()) {
+ Ref<SpatialMaterial> line_material = static_cast<Ref<SpatialMaterial> >(debug_material);
+ line_material->set_albedo(collided ? Color(1.0, 0, 0) : Color(1.0, 0.8, 0.6));
+ }
+ }
} break;
}
@@ -232,6 +255,68 @@ void RayCast::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "type_mask", PROPERTY_HINT_FLAGS, "Static,Kinematic,Rigid,Character,Area"), "set_type_mask", "get_type_mask");
}
+void RayCast::_create_debug_shape() {
+
+ if (!debug_material.is_valid()) {
+ debug_material = Ref<SpatialMaterial>(memnew(SpatialMaterial));
+
+ Ref<SpatialMaterial> line_material = static_cast<Ref<SpatialMaterial> >(debug_material);
+ line_material->set_flag(SpatialMaterial::FLAG_UNSHADED, true);
+ line_material->set_line_width(3.0);
+ line_material->set_albedo(Color(1.0, 0.8, 0.6));
+ }
+
+ Ref<Mesh> mesh = memnew(Mesh);
+
+ MeshInstance *mi = memnew(MeshInstance);
+ mi->set_mesh(mesh);
+
+ add_child(mi);
+ debug_shape = mi;
+}
+
+void RayCast::_update_debug_shape() {
+
+ if (!enabled)
+ return;
+
+ if (!debug_shape)
+ _create_debug_shape();
+
+ MeshInstance *mi = static_cast<MeshInstance *>(debug_shape);
+ if (!mi->get_mesh().is_valid())
+ return;
+
+ Ref<Mesh> mesh = mi->get_mesh();
+ if (mesh->get_surface_count() > 0)
+ mesh->surface_remove(0);
+
+ Array a;
+ a.resize(Mesh::ARRAY_MAX);
+
+ Vector<Vector3> verts;
+ verts.push_back(Vector3());
+ verts.push_back(cast_to);
+ a[Mesh::ARRAY_VERTEX] = verts;
+
+ mesh->add_surface_from_arrays(Mesh::PRIMITIVE_LINES, a);
+ mesh->surface_set_material(0, debug_material);
+}
+
+void RayCast::_clear_debug_shape() {
+
+ if (!debug_shape)
+ return;
+
+ MeshInstance *mi = static_cast<MeshInstance *>(debug_shape);
+ if (mi->is_inside_tree())
+ mi->queue_delete();
+ else
+ memdelete(mi);
+
+ debug_shape = NULL;
+}
+
RayCast::RayCast() {
enabled = false;
@@ -241,4 +326,5 @@ RayCast::RayCast() {
layer_mask = 1;
type_mask = PhysicsDirectSpaceState::TYPE_MASK_COLLISION;
cast_to = Vector3(0, -1, 0);
+ debug_shape = NULL;
}
diff --git a/scene/3d/ray_cast.h b/scene/3d/ray_cast.h
index 7ab7b57db3..63a53d724f 100644
--- a/scene/3d/ray_cast.h
+++ b/scene/3d/ray_cast.h
@@ -50,6 +50,13 @@ class RayCast : public Spatial {
uint32_t layer_mask;
uint32_t type_mask;
+ Node *debug_shape;
+ Ref<Material> debug_material;
+
+ void _create_debug_shape();
+ void _update_debug_shape();
+ void _clear_debug_shape();
+
protected:
void _notification(int p_what);
void _update_raycast_state();
diff --git a/scene/SCsub b/scene/SCsub
index bd2da1eab9..df52e9c6cb 100644
--- a/scene/SCsub
+++ b/scene/SCsub
@@ -3,10 +3,23 @@
Import('env')
env.scene_sources = []
+
+
+# Thirdparty code
+thirdparty_dir = "#thirdparty/misc/"
+thirdparty_sources = [
+ # C sources
+ "mikktspace.c",
+]
+thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
+env.add_source_files(env.scene_sources, thirdparty_sources)
+
+
+# Godot's own sources
env.add_source_files(env.scene_sources, "*.cpp")
-Export('env')
+# Chain load SCsubs
SConscript('main/SCsub')
SConscript('gui/SCsub')
SConscript('3d/SCsub')
@@ -17,6 +30,8 @@ SConscript('resources/SCsub')
SConscript('io/SCsub')
+# Build it all as a library
lib = env.Library("scene", env.scene_sources)
-
env.Prepend(LIBS=[lib])
+
+Export('env')
diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp
index ee4f8736d7..839dcc3678 100644
--- a/scene/gui/base_button.cpp
+++ b/scene/gui/base_button.cpp
@@ -38,6 +38,8 @@ void BaseButton::_unpress_group() {
if (!button_group.is_valid())
return;
+ status.pressed = true;
+
for (Set<BaseButton *>::Element *E = button_group->buttons.front(); E; E = E->next()) {
if (E->get() == this)
continue;
diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp
index 6fcc878e11..f57b3d0fd1 100644
--- a/scene/gui/button.cpp
+++ b/scene/gui/button.cpp
@@ -69,49 +69,48 @@ void Button::_notification(int p_what) {
RID ci = get_canvas_item();
Size2 size = get_size();
Color color;
+ Color icon_color = Color(1, 1, 1);
//print_line(get_text()+": "+itos(is_flat())+" hover "+itos(get_draw_mode()));
- Ref<StyleBox> style = get_stylebox("normal");
-
+ String style_name = "";
switch (get_draw_mode()) {
case DRAW_NORMAL: {
- style = get_stylebox("normal");
- if (!flat)
- style->draw(ci, Rect2(Point2(0, 0), size));
+ style_name = "normal";
color = get_color("font_color");
+
} break;
case DRAW_PRESSED: {
- style = get_stylebox("pressed");
- style->draw(ci, Rect2(Point2(0, 0), size));
- if (has_color("font_color_pressed"))
+ style_name = "pressed";
+ if (has_color("font_color_pressed")) {
color = get_color("font_color_pressed");
- else
+ icon_color = color;
+ } else
color = get_color("font_color");
} break;
case DRAW_HOVER: {
- style = get_stylebox("hover");
- style->draw(ci, Rect2(Point2(0, 0), size));
+ style_name = "hover";
color = get_color("font_color_hover");
} break;
case DRAW_DISABLED: {
- style = get_stylebox("disabled");
- style->draw(ci, Rect2(Point2(0, 0), size));
+ style_name = "disabled";
color = get_color("font_color_disabled");
} break;
}
+ if (style_name != "" && !flat) get_stylebox(style_name)->draw(ci, Rect2(Point2(0, 0), size));
+
+ Ref<StyleBox> style = get_stylebox(style_name);
if (has_focus()) {
- Ref<StyleBox> style = get_stylebox("focus");
style->draw(ci, Rect2(Point2(), size));
}
@@ -149,7 +148,7 @@ void Button::_notification(int p_what) {
int valign = size.height - style->get_minimum_size().y;
- _icon->draw(ci, style->get_offset() + Point2(0, Math::floor((valign - _icon->get_height()) / 2.0)), is_disabled() ? Color(1, 1, 1, 0.4) : Color(1, 1, 1));
+ _icon->draw(ci, style->get_offset() + Point2(0, Math::floor((valign - _icon->get_height()) / 2.0)), is_disabled() ? Color(1, 1, 1, 0.4) : icon_color);
}
}
}
diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp
index adb5e2f0b6..264ee6297e 100644
--- a/scene/gui/color_picker.cpp
+++ b/scene/gui/color_picker.cpp
@@ -178,7 +178,7 @@ void ColorPicker::_update_presets() {
}
}
- Image i(size.x * presets.size(), size.y, false, Image::FORMAT_RGB8, img);
+ Ref<Image> i = memnew(Image(size.x * presets.size(), size.y, false, Image::FORMAT_RGB8, img));
Ref<ImageTexture> t;
t.instance();
@@ -399,16 +399,16 @@ void ColorPicker::_screen_input(const InputEvent &ev) {
Viewport *r = get_tree()->get_root();
if (!r->get_visible_rect().has_point(Point2(mev.global_x, mev.global_y)))
return;
- Image img = r->get_screen_capture();
- if (!img.empty()) {
+ Ref<Image> img = r->get_screen_capture();
+ if (!img.is_null()) {
last_capture = img;
r->queue_screen_capture();
}
- if (!last_capture.empty()) {
- int pw = last_capture.get_format() == Image::FORMAT_RGBA8 ? 4 : 3;
- int ofs = (mev.global_y * last_capture.get_width() + mev.global_x) * pw;
+ if (last_capture.is_valid() && !last_capture->empty()) {
+ int pw = last_capture->get_format() == Image::FORMAT_RGBA8 ? 4 : 3;
+ int ofs = (mev.global_y * last_capture->get_width() + mev.global_x) * pw;
- PoolVector<uint8_t>::Read r = last_capture.get_data().read();
+ PoolVector<uint8_t>::Read r = last_capture->get_data().read();
Color c(r[ofs + 0] / 255.0, r[ofs + 1] / 255.0, r[ofs + 2] / 255.0);
diff --git a/scene/gui/color_picker.h b/scene/gui/color_picker.h
index bce1ae07f7..437a491b54 100644
--- a/scene/gui/color_picker.h
+++ b/scene/gui/color_picker.h
@@ -47,7 +47,7 @@ class ColorPicker : public BoxContainer {
private:
Control *screen;
- Image last_capture;
+ Ref<Image> last_capture;
Control *uv_edit;
Control *w_edit;
TextureRect *sample;
diff --git a/scene/gui/color_ramp_edit.cpp b/scene/gui/color_ramp_edit.cpp
index c6f73fe6e6..a0fd2dd33c 100644
--- a/scene/gui/color_ramp_edit.cpp
+++ b/scene/gui/color_ramp_edit.cpp
@@ -42,7 +42,8 @@ ColorRampEdit::ColorRampEdit() {
add_child(popup);
checker = Ref<ImageTexture>(memnew(ImageTexture));
- checker->create_from_image(Image(checker_bg_png), ImageTexture::FLAG_REPEAT);
+ Ref<Image> img = memnew(Image(checker_bg_png));
+ checker->create_from_image(img, ImageTexture::FLAG_REPEAT);
}
int ColorRampEdit::_get_point_from_pos(int x) {
diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp
index 2ec72a2948..cf5321e907 100644
--- a/scene/gui/dialogs.cpp
+++ b/scene/gui/dialogs.cpp
@@ -36,6 +36,8 @@
#include "editor/editor_node.h"
#endif
+// WindowDialog
+
void WindowDialog::_post_popup() {
drag_type = DRAG_NONE; // just in case
@@ -51,21 +53,25 @@ void WindowDialog::_fix_size() {
Size2i viewport_size = get_viewport_rect().size;
// Windows require additional padding to keep the window chrome visible.
- Ref<StyleBox> panel = get_stylebox("panel", "WindowDialog");
- float top = panel->get_margin(MARGIN_TOP);
- float left = panel->get_margin(MARGIN_LEFT);
- float bottom = panel->get_margin(MARGIN_BOTTOM);
- float right = panel->get_margin(MARGIN_RIGHT);
-
- pos.x = MAX(left, MIN(pos.x, viewport_size.x - size.x - right));
- pos.y = MAX(top, MIN(pos.y, viewport_size.y - size.y - bottom));
- set_global_position(pos);
-
- // Also resize the window to fit if a resize should be possible at all.
- if (resizable) {
- size.x = MIN(size.x, viewport_size.x - left - right);
- size.y = MIN(size.y, viewport_size.y - top - bottom);
- set_size(size);
+ Ref<StyleBoxTexture> panel = get_stylebox("panel", "WindowDialog");
+
+ // Check validity, because the theme could contain a different type of StyleBox
+ if (panel.is_valid()) {
+ float top = panel->get_expand_margin_size(MARGIN_TOP);
+ float left = panel->get_expand_margin_size(MARGIN_LEFT);
+ float bottom = panel->get_expand_margin_size(MARGIN_BOTTOM);
+ float right = panel->get_expand_margin_size(MARGIN_RIGHT);
+
+ pos.x = MAX(left, MIN(pos.x, viewport_size.x - size.x - right));
+ pos.y = MAX(top, MIN(pos.y, viewport_size.y - size.y - bottom));
+ set_global_position(pos);
+
+ // Also resize the window to fit if a resize should be possible at all.
+ if (resizable) {
+ size.x = MIN(size.x, viewport_size.x - left - right);
+ size.y = MIN(size.y, viewport_size.y - top - bottom);
+ set_size(size);
+ }
}
}
@@ -74,9 +80,9 @@ bool WindowDialog::has_point(const Point2 &p_point) const {
Rect2 r(Point2(), get_size());
// Enlarge upwards for title bar.
- int titlebar_height = get_constant("titlebar_height", "WindowDialog");
- r.pos.y -= titlebar_height;
- r.size.y += titlebar_height;
+ int title_height = get_constant("title_height", "WindowDialog");
+ r.pos.y -= title_height;
+ r.size.y += title_height;
// Inflate by the resizable border thickness.
if (resizable) {
@@ -173,30 +179,21 @@ void WindowDialog::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_DRAW: {
-
RID canvas = get_canvas_item();
- Size2 size = get_size();
+ // Draw the background.
Ref<StyleBox> panel = get_stylebox("panel", "WindowDialog");
- int margin_left = static_cast<int>(panel->get_margin(MARGIN_LEFT));
- int margin_top = static_cast<int>(panel->get_margin(MARGIN_TOP));
- int margin_right = static_cast<int>(panel->get_margin(MARGIN_RIGHT));
- int margin_bottom = static_cast<int>(panel->get_margin(MARGIN_BOTTOM));
-
- Rect2 rect;
- rect.pos.x = -margin_left;
- rect.pos.y = -margin_top;
- rect.size.width = size.width + margin_left + margin_right;
- rect.size.height = size.height + margin_top + margin_bottom;
-
- panel->draw(canvas, rect);
+ Size2 size = get_size();
+ panel->draw(canvas, Rect2(0, 0, size.x, size.y));
- int title_height = get_constant("title_height", "WindowDialog");
+ // Draw the title bar text.
+ Ref<Font> title_font = get_font("title_font", "WindowDialog");
Color title_color = get_color("title_color", "WindowDialog");
- Ref<Font> font = get_font("title_font", "WindowDialog");
- int ofs = (size.width - font->get_string_size(title).width) / 2;
- draw_string(font, Point2(ofs, -title_height + font->get_ascent()), title, title_color, size.width - panel->get_minimum_size().width);
-
+ int title_height = get_constant("title_height", "WindowDialog");
+ int font_height = title_font->get_height() - title_font->get_descent() * 2;
+ int x = (size.x - title_font->get_string_size(title).x) / 2;
+ int y = (-title_height + font_height) / 2;
+ title_font->draw(canvas, Point2(x, y), title, title_color, size.x - panel->get_minimum_size().x);
} break;
case NOTIFICATION_THEME_CHANGED:
@@ -238,12 +235,12 @@ int WindowDialog::_drag_hit_test(const Point2 &pos) const {
int drag_type = DRAG_NONE;
if (resizable) {
- int titlebar_height = get_constant("titlebar_height", "WindowDialog");
+ int title_height = get_constant("title_height", "WindowDialog");
int scaleborder_size = get_constant("scaleborder_size", "WindowDialog");
Rect2 rect = get_rect();
- if (pos.y < (-titlebar_height + scaleborder_size))
+ if (pos.y < (-title_height + scaleborder_size))
drag_type = DRAG_RESIZE_TOP;
else if (pos.y >= (rect.size.height - scaleborder_size))
drag_type = DRAG_RESIZE_BOTTOM;
@@ -317,6 +314,8 @@ WindowDialog::WindowDialog() {
WindowDialog::~WindowDialog() {
}
+// PopupDialog
+
void PopupDialog::_notification(int p_what) {
if (p_what == NOTIFICATION_DRAW) {
@@ -554,6 +553,8 @@ AcceptDialog::AcceptDialog() {
AcceptDialog::~AcceptDialog() {
}
+// ConfirmationDialog
+
void ConfirmationDialog::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_cancel:Button"), &ConfirmationDialog::get_cancel);
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp
index 2f1af318e9..391b39443d 100644
--- a/scene/gui/file_dialog.cpp
+++ b/scene/gui/file_dialog.cpp
@@ -336,8 +336,8 @@ void FileDialog::update_file_list() {
dirs.push_back("..");
}
- dirs.sort_custom<NoCaseComparator>();
- files.sort_custom<NoCaseComparator>();
+ dirs.sort_custom<NaturalNoCaseComparator>();
+ files.sort_custom<NaturalNoCaseComparator>();
while (!dirs.empty()) {
String &dir_name = dirs.front()->get();
diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp
index 0c092a4e17..d5df3bac67 100644
--- a/scene/gui/graph_edit.cpp
+++ b/scene/gui/graph_edit.cpp
@@ -579,7 +579,7 @@ void GraphEdit::_bake_segment2d(CanvasItem *p_where, float p_begin, float p_end,
if (p_depth >= p_min_depth && (dp < p_tol || p_depth >= p_max_depth)) {
- p_where->draw_line(beg, end, p_color.linear_interpolate(p_to_color, mp), 2, true);
+ p_where->draw_line(beg, end, p_color.linear_interpolate(p_to_color, mp), 4, true);
lines++;
} else {
_bake_segment2d(p_where, p_begin, mp, p_a, p_out, p_b, p_in, p_depth + 1, p_min_depth, p_max_depth, p_tol, p_color, p_to_color, lines);
@@ -598,7 +598,7 @@ void GraphEdit::_draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const
int cp_neg_len = get_constant("bezier_len_neg");
if (diff > 0) {
- cp_offset = MAX(cp_len, diff * 0.5);
+ cp_offset = MIN(cp_len, diff * 0.5);
} else {
cp_offset = MAX(MIN(cp_len - diff, cp_neg_len), -diff * 0.5);
}
@@ -962,6 +962,18 @@ void GraphEdit::_gui_input(const InputEvent &p_ev) {
//too difficult to get right
//set_zoom(zoom/ZOOM_SCALE);
}
+ if (b.button_index == BUTTON_WHEEL_UP) {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() * b.factor / 8);
+ }
+ if (b.button_index == BUTTON_WHEEL_DOWN) {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() * b.factor / 8);
+ }
+ if (b.button_index == BUTTON_WHEEL_RIGHT) {
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * b.factor / 8);
+ }
+ if (b.button_index == BUTTON_WHEEL_LEFT) {
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * b.factor / 8);
+ }
}
if (p_ev.type == InputEvent::KEY && p_ev.key.scancode == KEY_D && p_ev.key.pressed && p_ev.key.mod.command) {
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index c2d5775b64..b79104ba39 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -42,6 +42,7 @@ void ItemList::add_item(const String &p_item, const Ref<Texture> &p_texture, boo
item.disabled = false;
item.tooltip_enabled = true;
item.custom_bg = Color(0, 0, 0, 0);
+ item.custom_font_color = get_color("font_color");
items.push_back(item);
update();
@@ -151,6 +152,20 @@ Color ItemList::get_item_custom_bg_color(int p_idx) const {
return items[p_idx].custom_bg;
}
+void ItemList::set_item_custom_font_color(int p_idx, const Color &p_custom_font_color) {
+
+ ERR_FAIL_INDEX(p_idx, items.size());
+
+ items[p_idx].custom_font_color = p_custom_font_color;
+}
+
+Color ItemList::get_item_custom_font_color(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx, items.size(), Color());
+
+ return items[p_idx].custom_font_color;
+}
+
void ItemList::set_item_tag_icon(int p_idx, const Ref<Texture> &p_tag_icon) {
ERR_FAIL_INDEX(p_idx, items.size());
@@ -518,10 +533,14 @@ void ItemList::_gui_input(const InputEvent &p_event) {
}
if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index == BUTTON_WHEEL_UP && p_event.mouse_button.pressed) {
+ scroll_bar->set_value(scroll_bar->get_value() - scroll_bar->get_page() * p_event.mouse_button.factor / 8);
+
scroll_bar->set_value(scroll_bar->get_value() - scroll_bar->get_page() / 8);
}
if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index == BUTTON_WHEEL_DOWN && p_event.mouse_button.pressed) {
+ scroll_bar->set_value(scroll_bar->get_value() + scroll_bar->get_page() * p_event.mouse_button.factor / 8);
+
scroll_bar->set_value(scroll_bar->get_value() + scroll_bar->get_page() / 8);
}
@@ -1013,7 +1032,8 @@ void ItemList::_notification(int p_what) {
else
max_len = size.x;
- Color modulate = items[i].selected ? font_color_selected : font_color;
+ Color font_color_2 = items[i].custom_font_color;
+ Color modulate = items[i].selected ? font_color_selected : font_color_2;
if (items[i].disabled)
modulate.a *= 0.5;
diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h
index 4b896de77c..96a894d3fd 100644
--- a/scene/gui/item_list.h
+++ b/scene/gui/item_list.h
@@ -62,6 +62,7 @@ private:
Variant metadata;
String tooltip;
Color custom_bg;
+ Color custom_font_color;
Rect2 rect_cache;
Rect2 min_rect_cache;
@@ -144,6 +145,9 @@ public:
void set_item_custom_bg_color(int p_idx, const Color &p_custom_bg_color);
Color get_item_custom_bg_color(int p_idx) const;
+ void set_item_custom_font_color(int p_idx, const Color &p_custom_font_color);
+ Color get_item_custom_font_color(int p_idx) const;
+
void select(int p_idx, bool p_single = true);
void unselect(int p_idx);
bool is_selected(int p_idx) const;
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 9abf9649c0..8bb6828fa6 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -576,7 +576,7 @@ void LineEdit::_notification(int p_what) {
RID ci = get_canvas_item();
- Ref<StyleBox> style = get_stylebox("normal");
+ Ref<StyleBox> style = has_focus() ? get_stylebox("active") : get_stylebox("normal");
if (!is_editable())
style = get_stylebox("read_only");
@@ -617,7 +617,7 @@ void LineEdit::_notification(int p_what) {
int font_ascent = font->get_ascent();
Color selection_color = get_color("selection_color");
- Color font_color = get_color("font_color");
+ Color font_color = is_editable() ? has_focus() ? get_color("font_color_active") : get_color("font_color") : get_color("font_color_read_only");
Color font_color_selected = get_color("font_color_selected");
Color cursor_color = get_color("cursor_color");
@@ -633,8 +633,8 @@ void LineEdit::_notification(int p_what) {
if (char_ofs >= t.length())
break;
- CharType cchar = pass ? '*' : t[char_ofs];
- CharType next = pass ? '*' : t[char_ofs + 1];
+ CharType cchar = (pass && !text.empty()) ? '*' : t[char_ofs];
+ CharType next = (pass && !text.empty()) ? '*' : t[char_ofs + 1];
int char_width = font->get_char_size(cchar, next).width;
// end of widget, break!
diff --git a/scene/gui/option_button.cpp b/scene/gui/option_button.cpp
index 0806d35d48..b967a1a7ce 100644
--- a/scene/gui/option_button.cpp
+++ b/scene/gui/option_button.cpp
@@ -56,7 +56,24 @@ void OptionButton::_notification(int p_what) {
Size2 size = get_size();
Point2 ofs(size.width - arrow->get_width() - get_constant("arrow_margin"), int(Math::abs((size.height - arrow->get_height()) / 2)));
- arrow->draw(ci, ofs);
+
+ Color arrow_color = get_color("font_color");
+ switch (get_draw_mode()) {
+ case DRAW_NORMAL: {
+ arrow_color = get_color("font_color");
+ } break;
+ case DRAW_PRESSED: {
+ arrow_color = get_color("font_color_pressed");
+ } break;
+ case DRAW_HOVER: {
+ arrow_color = get_color("font_color_hover");
+ } break;
+ case DRAW_DISABLED: {
+ arrow_color = get_color("font_color_disabled");
+ } break;
+ }
+
+ arrow->draw(ci, ofs, arrow_color);
} break;
}
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index 6ac6eac655..e3f26e0f0b 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -108,6 +108,11 @@ Size2 PopupMenu::get_minimum_size() const {
accel_max_w = MAX(accel_w, accel_max_w);
}
+ if (items[i].submenu != "") {
+
+ size.width += get_icon("submenu")->get_width();
+ }
+
minsize.height += size.height;
max_w = MAX(max_w, size.width);
}
@@ -273,7 +278,7 @@ void PopupMenu::_gui_input(const InputEvent &p_event) {
Point2 pos = get_position();
int s = (vseparation + font->get_height()) * 3;
- pos.y -= s;
+ pos.y -= (s * b.factor);
set_position(pos);
//update hover
@@ -293,7 +298,7 @@ void PopupMenu::_gui_input(const InputEvent &p_event) {
Point2 pos = get_position();
int s = (vseparation + font->get_height()) * 3;
- pos.y += s;
+ pos.y += (s * b.factor);
set_position(pos);
//update hover
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index e5a17298e4..6e5f218a66 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -780,12 +780,14 @@ void RichTextLabel::_gui_input(InputEvent p_event) {
if (b.button_index == BUTTON_WHEEL_UP) {
if (scroll_active)
- vscroll->set_value(vscroll->get_value() - vscroll->get_page() / 8);
+
+ vscroll->set_value(vscroll->get_value() - vscroll->get_page() * b.factor * 0.5 / 8);
}
if (b.button_index == BUTTON_WHEEL_DOWN) {
if (scroll_active)
- vscroll->set_value(vscroll->get_value() + vscroll->get_page() / 8);
+
+ vscroll->set_value(vscroll->get_value() + vscroll->get_page() * b.factor * 0.5 / 8);
}
} break;
case InputEvent::KEY: {
diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp
index 9146fa9393..a89c2b27c9 100644
--- a/scene/gui/scroll_container.cpp
+++ b/scene/gui/scroll_container.cpp
@@ -85,20 +85,32 @@ void ScrollContainer::_gui_input(const InputEvent &p_gui_input) {
const InputEventMouseButton &mb = p_gui_input.mouse_button;
if (mb.button_index == BUTTON_WHEEL_UP && mb.pressed) {
- if (h_scroll->is_visible_in_tree() && !v_scroll->is_visible_in_tree()) {
- // only horizontal is enabled, scroll horizontally
- h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 8);
+ // only horizontal is enabled, scroll horizontally
+ if (h_scroll->is_visible() && !v_scroll->is_visible()) {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 8 * mb.factor);
} else if (v_scroll->is_visible_in_tree()) {
- v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 8);
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 8 * mb.factor);
}
}
if (mb.button_index == BUTTON_WHEEL_DOWN && mb.pressed) {
- if (h_scroll->is_visible_in_tree() && !v_scroll->is_visible_in_tree()) {
- // only horizontal is enabled, scroll horizontally
- h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 8);
- } else if (v_scroll->is_visible_in_tree()) {
- v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 8);
+ // only horizontal is enabled, scroll horizontally
+ if (h_scroll->is_visible() && !v_scroll->is_visible()) {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 8 * mb.factor);
+ } else if (v_scroll->is_visible()) {
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 8 * mb.factor);
+ }
+ }
+
+ if (mb.button_index == BUTTON_WHEEL_LEFT && mb.pressed) {
+ if (h_scroll->is_visible_in_tree()) {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() * mb.factor / 8);
+ }
+ }
+
+ if (mb.button_index == BUTTON_WHEEL_RIGHT && mb.pressed) {
+ if (h_scroll->is_visible_in_tree()) {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() * mb.factor / 8);
}
}
diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp
index 049adc6fb4..83d535a2e7 100644
--- a/scene/gui/spin_box.cpp
+++ b/scene/gui/spin_box.cpp
@@ -115,13 +115,15 @@ void SpinBox::_gui_input(const InputEvent &p_event) {
} break;
case BUTTON_WHEEL_UP: {
if (line_edit->has_focus()) {
- set_value(get_value() + get_step());
+
+ set_value(get_value() + get_step() * mb.factor);
accept_event();
}
} break;
case BUTTON_WHEEL_DOWN: {
if (line_edit->has_focus()) {
- set_value(get_value() - get_step());
+
+ set_value(get_value() - get_step() * mb.factor);
accept_event();
}
} break;
@@ -192,7 +194,12 @@ void SpinBox::_notification(int p_what) {
RID ci = get_canvas_item();
Size2i size = get_size();
- updown->draw(ci, Point2i(size.width - updown->get_width(), (size.height - updown->get_height()) / 2));
+ Color color = has_focus() ? line_edit->get_color("font_color_active") : line_edit->get_color("font_color");
+ if (!is_editable())
+ color = line_edit->get_color("font_color_read_only");
+ updown->draw(ci, Point2i(size.width - updown->get_width(), (size.height - updown->get_height()) / 2), color);
+
+ } else if (p_what == NOTIFICATION_FOCUS_EXIT) {
} else if (p_what == NOTIFICATION_FOCUS_EXIT) {
diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp
index 0c7a58dc16..952f2a9710 100644
--- a/scene/gui/tab_container.cpp
+++ b/scene/gui/tab_container.cpp
@@ -206,6 +206,9 @@ void TabContainer::_notification(int p_what) {
break;
}
+ // Draw the tab area.
+ panel->draw(canvas, Rect2(0, header_height, size.width, size.height - header_height));
+
// Draw all visible tabs.
int x = 0;
for (int i = 0; i < tab_widths.size(); i++) {
@@ -224,7 +227,7 @@ void TabContainer::_notification(int p_what) {
// Draw the tab background.
int tab_width = tab_widths[i];
- Rect2 tab_rect(tabs_ofs_cache + x, 0, tab_width, header_height);
+ Rect2 tab_rect(tabs_ofs_cache + x, 2, tab_width, header_height);
tab_style->draw(canvas, tab_rect);
// Draw the tab contents.
@@ -279,8 +282,6 @@ void TabContainer::_notification(int p_what) {
Color(1, 1, 1, first_tab_cache > 0 ? 1.0 : 0.5));
}
- // Draw the tab area.
- panel->draw(canvas, Rect2(0, header_height, size.width, size.height - header_height));
} break;
case NOTIFICATION_THEME_CHANGED: {
if (get_tab_count() > 0) {
@@ -659,7 +660,7 @@ TabContainer::TabContainer() {
current = 0;
previous = 0;
mouse_x_cache = 0;
- align = ALIGN_CENTER;
+ align = ALIGN_LEFT;
tabs_visible = true;
popup = NULL;
} \ No newline at end of file
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 69a90535df..fb986cfb97 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -101,15 +101,15 @@ void TextEdit::Text::set_font(const Ref<Font> &p_font) {
font = p_font;
}
-void TextEdit::Text::set_tab_size(int p_tab_size) {
+void TextEdit::Text::set_indent_size(int p_indent_size) {
- tab_size = p_tab_size;
+ indent_size = p_indent_size;
}
void TextEdit::Text::_update_line_cache(int p_line) const {
int w = 0;
- int tab_w = font->get_char_size(' ').width * tab_size;
+ int tab_w = font->get_char_size(' ').width * indent_size;
int len = text[p_line].data.length();
const CharType *str = text[p_line].data.c_str();
@@ -334,7 +334,10 @@ void TextEdit::_update_scrollbars() {
v_scroll->show();
v_scroll->set_max(total_rows);
v_scroll->set_page(visible_rows);
- v_scroll->set_value(cursor.line_ofs);
+
+ if (fabs(v_scroll->get_value() - (double)cursor.line_ofs) >= 1) {
+ v_scroll->set_value(cursor.line_ofs);
+ }
} else {
cursor.line_ofs = 0;
@@ -346,7 +349,9 @@ void TextEdit::_update_scrollbars() {
h_scroll->show();
h_scroll->set_max(total_width);
h_scroll->set_page(visible_width);
- h_scroll->set_value(cursor.x_ofs);
+ if (fabs(h_scroll->get_value() - (double)cursor.x_ofs) >= 1) {
+ h_scroll->set_value(cursor.x_ofs);
+ }
} else {
@@ -456,7 +461,7 @@ void TextEdit::_notification(int p_what) {
int visible_rows = get_visible_rows();
- int tab_w = cache.font->get_char_size(' ').width * tab_size;
+ int tab_w = cache.font->get_char_size(' ').width * indent_size;
Color color = cache.font_color;
int in_region = -1;
@@ -1305,7 +1310,38 @@ void TextEdit::backspace_at_cursor() {
_is_pair_left_symbol(text[cursor.line][cursor.column - 1])) {
_consume_backspace_for_pair_symbol(prev_line, prev_column);
} else {
- _remove_text(prev_line, prev_column, cursor.line, cursor.column);
+ // handle space indentation
+ if (cursor.column - indent_size >= 0 && indent_using_spaces) {
+
+ // if there is enough spaces to count as a tab
+ bool unindent = true;
+ for (int i = 1; i <= indent_size; i++) {
+ if (text[cursor.line][cursor.column - i] != ' ') {
+ unindent = false;
+ break;
+ }
+ }
+
+ // and it is before the first character
+ int i = 0;
+ while (i < cursor.column && i < text[cursor.line].length()) {
+ if (text[cursor.line][i] != ' ' && text[cursor.line][i] != '\t') {
+ unindent = false;
+ break;
+ }
+ i++;
+ }
+
+ // then we can remove it as a single character.
+ if (unindent) {
+ _remove_text(cursor.line, cursor.column - indent_size, cursor.line, cursor.column);
+ prev_column = cursor.column - indent_size;
+ } else {
+ _remove_text(prev_line, prev_column, cursor.line, cursor.column);
+ }
+ } else {
+ _remove_text(prev_line, prev_column, cursor.line, cursor.column);
+ }
}
cursor_set_line(prev_line);
@@ -1328,7 +1364,11 @@ void TextEdit::indent_selection_right() {
for (int i = start_line; i <= end_line; i++) {
String line_text = get_line(i);
- line_text = '\t' + line_text;
+ if (indent_using_spaces) {
+ line_text = space_indent + line_text;
+ } else {
+ line_text = '\t' + line_text;
+ }
set_line(i, line_text);
}
@@ -1359,8 +1399,8 @@ void TextEdit::indent_selection_left() {
if (line_text.begins_with("\t")) {
line_text = line_text.substr(1, line_text.length());
set_line(i, line_text);
- } else if (line_text.begins_with(" ")) {
- line_text = line_text.substr(4, line_text.length());
+ } else if (line_text.begins_with(space_indent)) {
+ line_text = line_text.substr(indent_size, line_text.length());
set_line(i, line_text);
}
}
@@ -1445,17 +1485,18 @@ void TextEdit::_gui_input(const InputEvent &p_gui_input) {
}
if (mb.pressed) {
+
if (mb.button_index == BUTTON_WHEEL_UP && !mb.mod.command) {
- v_scroll->set_value(v_scroll->get_value() - 3);
+ v_scroll->set_value(v_scroll->get_value() - (3 * mb.factor));
}
if (mb.button_index == BUTTON_WHEEL_DOWN && !mb.mod.command) {
- v_scroll->set_value(v_scroll->get_value() + 3);
+ v_scroll->set_value(v_scroll->get_value() + (3 * mb.factor));
}
if (mb.button_index == BUTTON_WHEEL_LEFT) {
- h_scroll->set_value(h_scroll->get_value() - 3);
+ h_scroll->set_value(h_scroll->get_value() - (100 * mb.factor));
}
if (mb.button_index == BUTTON_WHEEL_RIGHT) {
- h_scroll->set_value(h_scroll->get_value() + 3);
+ h_scroll->set_value(h_scroll->get_value() + (100 * mb.factor));
}
if (mb.button_index == BUTTON_LEFT) {
@@ -1931,17 +1972,39 @@ void TextEdit::_gui_input(const InputEvent &p_gui_input) {
String ins = "\n";
//keep indentation
+ int space_count = 0;
for (int i = 0; i < text[cursor.line].length(); i++) {
- if (text[cursor.line][i] == '\t')
- ins += "\t";
- else
+ if (text[cursor.line][i] == '\t') {
+ if (indent_using_spaces) {
+ ins += space_indent;
+ } else {
+ ins += "\t";
+ }
+ space_count = 0;
+ } else if (text[cursor.line][i] == ' ') {
+ space_count++;
+
+ if (space_count == indent_size) {
+ if (indent_using_spaces) {
+ ins += space_indent;
+ } else {
+ ins += "\t";
+ }
+ space_count = 0;
+ }
+ } else {
break;
+ }
}
if (auto_indent) {
// indent once again if previous line will end with ':'
// (i.e. colon precedes current cursor position)
if (cursor.column > 0 && text[cursor.line][cursor.column - 1] == ':') {
- ins += "\t";
+ if (indent_using_spaces) {
+ ins += space_indent;
+ } else {
+ ins += "\t";
+ }
}
}
@@ -1987,15 +2050,36 @@ void TextEdit::_gui_input(const InputEvent &p_gui_input) {
} else {
if (k.mod.shift) {
+ //simple unindent
int cc = cursor.column;
- if (cc > 0 && cc <= text[cursor.line].length() && text[cursor.line][cursor.column - 1] == '\t') {
- //simple unindent
+ if (cc > 0 && cc <= text[cursor.line].length()) {
+ if (text[cursor.line][cursor.column - 1] == '\t') {
+ backspace_at_cursor();
+ } else {
+ if (cursor.column - indent_size >= 0) {
+
+ bool unindent = true;
+ for (int i = 1; i <= indent_size; i++) {
+ if (text[cursor.line][cursor.column - i] != ' ') {
+ unindent = false;
+ break;
+ }
+ }
- backspace_at_cursor();
+ if (unindent) {
+ _remove_text(cursor.line, cursor.column - indent_size, cursor.line, cursor.column);
+ cursor_set_column(cursor.column - indent_size);
+ }
+ }
+ }
}
} else {
//simple indent
- _insert_text_at_cursor("\t");
+ if (indent_using_spaces) {
+ _insert_text_at_cursor(space_indent);
+ } else {
+ _insert_text_at_cursor("\t");
+ }
}
}
@@ -3103,7 +3187,7 @@ int TextEdit::get_char_pos_for(int p_px, String p_str) const {
int px = 0;
int c = 0;
- int tab_w = cache.font->get_char_size(' ').width * tab_size;
+ int tab_w = cache.font->get_char_size(' ').width * indent_size;
while (c < p_str.length()) {
@@ -3135,7 +3219,7 @@ int TextEdit::get_column_x_offset(int p_char, String p_str) {
int px = 0;
- int tab_w = cache.font->get_char_size(' ').width * tab_size;
+ int tab_w = cache.font->get_char_size(' ').width * indent_size;
for (int i = 0; i < p_char; i++) {
@@ -3952,10 +4036,24 @@ void TextEdit::_push_current_op() {
current_op.chain_forward = false;
}
-void TextEdit::set_tab_size(const int p_size) {
+void TextEdit::set_indent_using_spaces(const bool p_use_spaces) {
+ indent_using_spaces = p_use_spaces;
+}
+
+bool TextEdit::is_indent_using_spaces() const {
+ return indent_using_spaces;
+}
+
+void TextEdit::set_indent_size(const int p_size) {
ERR_FAIL_COND(p_size <= 0);
- tab_size = p_size;
- text.set_tab_size(p_size);
+ indent_size = p_size;
+ text.set_indent_size(p_size);
+
+ space_indent = "";
+ for (int i = 0; i < p_size; i++) {
+ space_indent += " ";
+ }
+
update();
}
@@ -4448,8 +4546,8 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_text"), &TextEdit::get_text);
ClassDB::bind_method(D_METHOD("get_line", "line"), &TextEdit::get_line);
- ClassDB::bind_method(D_METHOD("cursor_set_column", "column", "adjust_viewport"), &TextEdit::cursor_set_column, DEFVAL(false));
- ClassDB::bind_method(D_METHOD("cursor_set_line", "line", "adjust_viewport"), &TextEdit::cursor_set_line, DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("cursor_set_column", "column", "adjust_viewport"), &TextEdit::cursor_set_column, DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("cursor_set_line", "line", "adjust_viewport"), &TextEdit::cursor_set_line, DEFVAL(true));
ClassDB::bind_method(D_METHOD("cursor_get_column"), &TextEdit::cursor_get_column);
ClassDB::bind_method(D_METHOD("cursor_get_line"), &TextEdit::cursor_get_line);
@@ -4542,8 +4640,8 @@ TextEdit::TextEdit() {
cache.breakpoint_gutter_width = 0;
breakpoint_gutter_width = 0;
- tab_size = 4;
- text.set_tab_size(tab_size);
+ indent_size = 4;
+ text.set_indent_size(indent_size);
text.clear();
//text.insert(1,"Mongolia..");
//text.insert(2,"PAIS GENEROSO!!");
@@ -4631,6 +4729,8 @@ TextEdit::TextEdit() {
auto_brace_completion_enabled = false;
brace_matching_enabled = false;
highlight_all_occurrences = false;
+ indent_using_spaces = false;
+ space_indent = " ";
auto_indent = false;
insert_mode = false;
window_has_focus = true;
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index d5fe2950f4..905ea46bd7 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -141,12 +141,12 @@ class TextEdit : public Control {
const Vector<ColorRegion> *color_regions;
mutable Vector<Line> text;
Ref<Font> font;
- int tab_size;
+ int indent_size;
void _update_line_cache(int p_line) const;
public:
- void set_tab_size(int p_tab_size);
+ void set_indent_size(int p_indent_size);
void set_font(const Ref<Font> &p_font);
void set_color_regions(const Vector<ColorRegion> *p_regions) { color_regions = p_regions; }
int get_line_width(int p_line) const;
@@ -163,7 +163,7 @@ class TextEdit : public Control {
void clear();
void clear_caches();
_FORCE_INLINE_ const String &operator[](int p_line) const { return text[p_line].data; }
- Text() { tab_size = 4; }
+ Text() { indent_size = 4; }
};
struct TextOperation {
@@ -221,7 +221,9 @@ class TextEdit : public Control {
int max_chars;
bool readonly;
bool syntax_coloring;
- int tab_size;
+ bool indent_using_spaces;
+ int indent_size;
+ String space_indent;
Timer *caret_blink_timer;
bool caret_blink_enabled;
@@ -461,7 +463,9 @@ public:
void redo();
void clear_undo_history();
- void set_tab_size(const int p_size);
+ void set_indent_using_spaces(const bool p_use_spaces);
+ bool is_indent_using_spaces() const;
+ void set_indent_size(const int p_size);
void set_draw_tabs(bool p_draw);
bool is_drawing_tabs() const;
diff --git a/scene/gui/tool_button.cpp b/scene/gui/tool_button.cpp
index 5fc4b6ecf8..7e8a426d15 100644
--- a/scene/gui/tool_button.cpp
+++ b/scene/gui/tool_button.cpp
@@ -29,6 +29,10 @@
/*************************************************************************/
#include "tool_button.h"
+void ToolButton::_notification(int p_what) {
+ // set_self_modulate(get_color("pressed"));
+}
+
ToolButton::ToolButton() {
set_flat(true);
}
diff --git a/scene/gui/tool_button.h b/scene/gui/tool_button.h
index d243b5559f..58948f798f 100644
--- a/scene/gui/tool_button.h
+++ b/scene/gui/tool_button.h
@@ -37,6 +37,9 @@ class ToolButton : public Button {
public:
ToolButton();
+
+protected:
+ void _notification(int p_what);
};
#endif // TOOL_BUTTON_H
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index bc7b7485d8..67c97c2e52 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -464,7 +464,7 @@ void TreeItem::deselect(int p_column) {
_cell_deselected(p_column);
}
-void TreeItem::add_button(int p_column, const Ref<Texture> &p_button, int p_id, bool p_disabled) {
+void TreeItem::add_button(int p_column, const Ref<Texture> &p_button, int p_id, bool p_disabled, const String &p_tooltip) {
ERR_FAIL_INDEX(p_column, cells.size());
ERR_FAIL_COND(!p_button.is_valid());
@@ -474,6 +474,7 @@ void TreeItem::add_button(int p_column, const Ref<Texture> &p_button, int p_id,
p_id = cells[p_column].buttons.size();
button.id = p_id;
button.disabled = p_disabled;
+ button.tooltip = p_tooltip;
cells[p_column].buttons.push_back(button);
_changed_notify(p_column);
}
@@ -669,7 +670,7 @@ void TreeItem::_bind_methods() {
ClassDB::bind_method(D_METHOD("clear_custom_bg_color", "column"), &TreeItem::clear_custom_bg_color);
ClassDB::bind_method(D_METHOD("get_custom_bg_color", "column"), &TreeItem::get_custom_bg_color);
- ClassDB::bind_method(D_METHOD("add_button", "column", "button:Texture", "button_idx", "disabled"), &TreeItem::add_button, DEFVAL(-1), DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("add_button", "column", "button:Texture", "button_idx", "disabled", "tooltip"), &TreeItem::add_button, DEFVAL(-1), DEFVAL(false), DEFVAL(""));
ClassDB::bind_method(D_METHOD("get_button_count", "column"), &TreeItem::get_button_count);
ClassDB::bind_method(D_METHOD("get_button:Texture", "column", "button_idx"), &TreeItem::get_button);
ClassDB::bind_method(D_METHOD("set_button", "column", "button_idx", "button:Texture"), &TreeItem::set_button);
@@ -1517,6 +1518,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, bool
if (p_doubleclick && (!c.editable || c.mode == TreeItem::CELL_MODE_CUSTOM || c.mode == TreeItem::CELL_MODE_ICON /*|| c.mode==TreeItem::CELL_MODE_CHECK*/)) { //it' s confusing for check
emit_signal("item_activated");
+ incr_search.clear();
return -1;
}
@@ -2070,6 +2072,7 @@ void Tree::_gui_input(InputEvent p_event) {
//bring up editor if possible
if (!edit_selected()) {
emit_signal("item_activated");
+ incr_search.clear();
}
}
accept_event();
@@ -2338,11 +2341,11 @@ void Tree::_gui_input(InputEvent p_event) {
} break;
case BUTTON_WHEEL_UP: {
- v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 8);
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * b.factor / 8);
} break;
case BUTTON_WHEEL_DOWN: {
- v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 8);
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * b.factor / 8);
} break;
}
@@ -3290,6 +3293,19 @@ String Tree::get_tooltip(const Point2 &p_pos) const {
if (it) {
+ TreeItem::Cell &c = it->cells[col];
+ int col_width = get_column_width(col);
+ for (int j = c.buttons.size() - 1; j >= 0; j--) {
+ Ref<Texture> b = c.buttons[j].texture;
+ Size2 size = b->get_size() + cache.button_pressed->get_minimum_size();
+ if (pos.x > col_width - size.width) {
+ String tooltip = c.buttons[j].tooltip;
+ if (tooltip != "") {
+ return tooltip;
+ }
+ }
+ col_width -= size.width;
+ }
String ret;
if (it->get_tooltip(col) == "")
ret = it->get_text(col);
diff --git a/scene/gui/tree.h b/scene/gui/tree.h
index 3830c3e8ca..4bee1adc4b 100644
--- a/scene/gui/tree.h
+++ b/scene/gui/tree.h
@@ -93,10 +93,12 @@ private:
bool disabled;
Ref<Texture> texture;
Color color;
+ String tooltip;
Button() {
id = 0;
disabled = false;
color = Color(1, 1, 1, 1);
+ tooltip = "";
}
};
@@ -180,7 +182,7 @@ public:
void set_icon_max_width(int p_column, int p_max);
int get_icon_max_width(int p_column) const;
- void add_button(int p_column, const Ref<Texture> &p_button, int p_id = -1, bool p_disabled = false);
+ void add_button(int p_column, const Ref<Texture> &p_button, int p_id = -1, bool p_disabled = false, const String &p_tooltip = "");
int get_button_count(int p_column) const;
Ref<Texture> get_button(int p_column, int p_idx) const;
int get_button_id(int p_column, int p_idx) const;
diff --git a/scene/gui/video_player.h b/scene/gui/video_player.h
index c3a839c514..1d70718a6a 100644
--- a/scene/gui/video_player.h
+++ b/scene/gui/video_player.h
@@ -59,7 +59,7 @@ class VideoPlayer : public Control {
RID stream_rid;
Ref<ImageTexture> texture;
- Image last_frame;
+ Ref<Image> last_frame;
AudioRBResampler resampler;
diff --git a/scene/main/http_request.cpp b/scene/main/http_request.cpp
index 783afc8b58..a9b2dba186 100644
--- a/scene/main/http_request.cpp
+++ b/scene/main/http_request.cpp
@@ -29,6 +29,8 @@
/*************************************************************************/
#include "http_request.h"
+#include "version.h"
+
void HTTPRequest::_redirect_request(const String &p_new_url) {
}
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index cfee5066b4..bf91b109ad 100755
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -463,7 +463,7 @@ Node::PauseMode Node::get_pause_mode() const {
void Node::_propagate_pause_owner(Node *p_owner) {
- if (data.pause_mode != PAUSE_MODE_INHERIT)
+ if (this != p_owner && data.pause_mode != PAUSE_MODE_INHERIT)
return;
data.pause_owner = p_owner;
for (int i = 0; i < data.children.size(); i++) {
diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp
index be28479f39..a43938c661 100644
--- a/scene/main/scene_main_loop.cpp
+++ b/scene/main/scene_main_loop.cpp
@@ -510,8 +510,6 @@ void SceneTree::input_event(const InputEvent &p_event) {
void SceneTree::init() {
//_quit=false;
- accept_quit = true;
- quit_on_go_back = true;
initialized = true;
input_handled = false;
@@ -2266,6 +2264,8 @@ SceneTree::SceneTree() {
singleton = this;
_quit = false;
+ accept_quit = true;
+ quit_on_go_back = true;
initialized = false;
#ifdef TOOLS_ENABLED
editor_hint = false;
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 406640275c..aaf839b072 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -1226,10 +1226,10 @@ void Viewport::queue_screen_capture() {
//VS::get_singleton()->viewport_queue_screen_capture(viewport);
}
-Image Viewport::get_screen_capture() const {
+Ref<Image> Viewport::get_screen_capture() const {
//return VS::get_singleton()->viewport_get_screen_capture(viewport);
- return Image();
+ return Ref<Image>();
}
Ref<ViewportTexture> Viewport::get_texture() const {
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index d784fc8ee9..e0f9cf1de2 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -383,7 +383,7 @@ public:
Vector2 get_camera_rect_size() const;
void queue_screen_capture();
- Image get_screen_capture() const;
+ Ref<Image> get_screen_capture() const;
void set_use_own_world(bool p_world);
bool is_using_own_world() const;
diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp
index 513aa8153d..76ff6edc63 100644
--- a/scene/register_scene_types.cpp
+++ b/scene/register_scene_types.cpp
@@ -212,7 +212,7 @@
#include "scene/resources/environment.h"
#include "scene/3d/area.h"
-#include "scene/3d/baked_light_instance.h"
+
#include "scene/3d/body_shape.h"
#include "scene/3d/immediate_geometry.h"
#include "scene/3d/multimesh_instance.h"
@@ -452,7 +452,7 @@ void register_scene_types() {
ClassDB::register_class<PathFollow>();
ClassDB::register_class<VisibilityNotifier>();
ClassDB::register_class<VisibilityEnabler>();
- ClassDB::register_class<BakedLight>();
+ // ClassDB::register_class<BakedLight>();
//ClassDB::register_type<BakedLightSampler>();
ClassDB::register_class<WorldEnvironment>();
ClassDB::register_class<RemoteTransform>();
diff --git a/scene/resources/SCsub b/scene/resources/SCsub
index 60b16cd0d4..2ad90247a7 100644
--- a/scene/resources/SCsub
+++ b/scene/resources/SCsub
@@ -3,7 +3,6 @@
Import('env')
env.add_source_files(env.scene_sources, "*.cpp")
-env.add_source_files(env.scene_sources, "*.c")
Export('env')
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index cebec379e6..545c700354 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -1761,8 +1761,8 @@ bool Animation::_transform_track_optimize_key(const TKey<TransformKey> &t0, cons
Vector3 v02, v01;
real_t a02, a01;
- r02.get_axis_and_angle(v02, a02);
- r01.get_axis_and_angle(v01, a01);
+ r02.get_axis_angle(v02, a02);
+ r01.get_axis_angle(v01, a01);
if (Math::abs(a02) > p_max_optimizable_angle)
return false;
diff --git a/scene/resources/baked_light.cpp b/scene/resources/baked_light.cpp
deleted file mode 100644
index 1d896e640a..0000000000
--- a/scene/resources/baked_light.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-/*************************************************************************/
-/* baked_light.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "baked_light.h"
-#include "servers/visual_server.h"
diff --git a/scene/resources/bit_mask.cpp b/scene/resources/bit_mask.cpp
index b8a9ea3361..e512f8a968 100644
--- a/scene/resources/bit_mask.cpp
+++ b/scene/resources/bit_mask.cpp
@@ -41,16 +41,16 @@ void BitMap::create(const Size2 &p_size) {
zeromem(bitmask.ptr(), bitmask.size());
}
-void BitMap::create_from_image_alpha(const Image &p_image) {
+void BitMap::create_from_image_alpha(const Ref<Image> &p_image) {
- ERR_FAIL_COND(p_image.empty());
- Image img = p_image;
- img.convert(Image::FORMAT_LA8);
- ERR_FAIL_COND(img.get_format() != Image::FORMAT_LA8);
+ ERR_FAIL_COND(p_image.is_null() || p_image->empty());
+ Ref<Image> img = p_image->duplicate();
+ img->convert(Image::FORMAT_LA8);
+ ERR_FAIL_COND(img->get_format() != Image::FORMAT_LA8);
- create(Size2(img.get_width(), img.get_height()));
+ create(Size2(img->get_width(), img->get_height()));
- PoolVector<uint8_t>::Read r = img.get_data().read();
+ PoolVector<uint8_t>::Read r = img->get_data().read();
uint8_t *w = bitmask.ptr();
for (int i = 0; i < width * height; i++) {
diff --git a/scene/resources/bit_mask.h b/scene/resources/bit_mask.h
index 78da6ce0d8..5ab7a3134d 100644
--- a/scene/resources/bit_mask.h
+++ b/scene/resources/bit_mask.h
@@ -30,6 +30,7 @@
#ifndef BIT_MASK_H
#define BIT_MASK_H
+#include "image.h"
#include "io/resource_loader.h"
#include "resource.h"
@@ -51,7 +52,7 @@ protected:
public:
void create(const Size2 &p_size);
- void create_from_image_alpha(const Image &p_image);
+ void create_from_image_alpha(const Ref<Image> &p_image);
void set_bit(const Point2 &p_pos, bool p_value);
bool get_bit(const Point2 &p_pos) const;
diff --git a/scene/resources/default_theme/arrow_down.png b/scene/resources/default_theme/arrow_down.png
index fc837d120a..4ef7b41de6 100644
--- a/scene/resources/default_theme/arrow_down.png
+++ b/scene/resources/default_theme/arrow_down.png
Binary files differ
diff --git a/scene/resources/default_theme/arrow_right.png b/scene/resources/default_theme/arrow_right.png
index ebe6e26ace..13a42f730d 100644
--- a/scene/resources/default_theme/arrow_right.png
+++ b/scene/resources/default_theme/arrow_right.png
Binary files differ
diff --git a/scene/resources/default_theme/button_disabled.png b/scene/resources/default_theme/button_disabled.png
index d75e76989d..1ee7be0674 100644
--- a/scene/resources/default_theme/button_disabled.png
+++ b/scene/resources/default_theme/button_disabled.png
Binary files differ
diff --git a/scene/resources/default_theme/button_group.png b/scene/resources/default_theme/button_group.png
new file mode 100644
index 0000000000..83820c8e0c
--- /dev/null
+++ b/scene/resources/default_theme/button_group.png
Binary files differ
diff --git a/scene/resources/default_theme/button_hover.png b/scene/resources/default_theme/button_hover.png
index 6e609f435f..5c6c434042 100644
--- a/scene/resources/default_theme/button_hover.png
+++ b/scene/resources/default_theme/button_hover.png
Binary files differ
diff --git a/scene/resources/default_theme/button_normal.png b/scene/resources/default_theme/button_normal.png
index 92482aaf28..3e6c509f5b 100644
--- a/scene/resources/default_theme/button_normal.png
+++ b/scene/resources/default_theme/button_normal.png
Binary files differ
diff --git a/scene/resources/default_theme/button_pressed.png b/scene/resources/default_theme/button_pressed.png
index 19a7e237aa..9559126eba 100644
--- a/scene/resources/default_theme/button_pressed.png
+++ b/scene/resources/default_theme/button_pressed.png
Binary files differ
diff --git a/scene/resources/default_theme/checked.png b/scene/resources/default_theme/checked.png
index 93e291a29e..aa5e7f6bdb 100644
--- a/scene/resources/default_theme/checked.png
+++ b/scene/resources/default_theme/checked.png
Binary files differ
diff --git a/scene/resources/default_theme/close.png b/scene/resources/default_theme/close.png
index 5ac6357dcd..b6973740e7 100644
--- a/scene/resources/default_theme/close.png
+++ b/scene/resources/default_theme/close.png
Binary files differ
diff --git a/scene/resources/default_theme/close_hl.png b/scene/resources/default_theme/close_hl.png
index 5ac6357dcd..b6973740e7 100644
--- a/scene/resources/default_theme/close_hl.png
+++ b/scene/resources/default_theme/close_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp
index d7c44e0363..ac3b46c69f 100644
--- a/scene/resources/default_theme/default_theme.cpp
+++ b/scene/resources/default_theme/default_theme.cpp
@@ -53,20 +53,20 @@ static Ref<StyleBoxTexture> make_stylebox(T p_src, float p_left, float p_top, fl
} else {
texture = Ref<ImageTexture>(memnew(ImageTexture));
- Image img(p_src);
+ Ref<Image> img = memnew(Image(p_src));
if (scale > 1) {
- Size2 orig_size = Size2(img.get_width(), img.get_height());
+ Size2 orig_size = Size2(img->get_width(), img->get_height());
- img.convert(Image::FORMAT_RGBA8);
- img.expand_x2_hq2x();
+ img->convert(Image::FORMAT_RGBA8);
+ img->expand_x2_hq2x();
if (scale != 2.0) {
- img.resize(orig_size.x * scale, orig_size.y * scale);
+ img->resize(orig_size.x * scale, orig_size.y * scale);
}
} else if (scale < 1) {
- Size2 orig_size = Size2(img.get_width(), img.get_height());
- img.convert(Image::FORMAT_RGBA8);
- img.resize(orig_size.x * scale, orig_size.y * scale);
+ Size2 orig_size = Size2(img->get_width(), img->get_height());
+ img->convert(Image::FORMAT_RGBA8);
+ img->resize(orig_size.x * scale, orig_size.y * scale);
}
texture->create_from_image(img, ImageTexture::FLAG_FILTER);
@@ -97,23 +97,27 @@ static Ref<StyleBoxTexture> sb_expand(Ref<StyleBoxTexture> p_sbox, float p_left,
return p_sbox;
}
+static Ref<StyleBoxTexture> sb_expand_default(Ref<StyleBoxTexture> p_sbox) {
+ return sb_expand(p_sbox, 0, 0, 0, 0);
+}
+
template <class T>
static Ref<Texture> make_icon(T p_src) {
Ref<ImageTexture> texture(memnew(ImageTexture));
- Image img = Image(p_src);
+ Ref<Image> img = memnew(Image(p_src));
if (scale > 1) {
- Size2 orig_size = Size2(img.get_width(), img.get_height());
+ Size2 orig_size = Size2(img->get_width(), img->get_height());
- img.convert(Image::FORMAT_RGBA8);
- img.expand_x2_hq2x();
+ img->convert(Image::FORMAT_RGBA8);
+ img->expand_x2_hq2x();
if (scale != 2.0) {
- img.resize(orig_size.x * scale, orig_size.y * scale);
+ img->resize(orig_size.x * scale, orig_size.y * scale);
}
} else if (scale < 1) {
- Size2 orig_size = Size2(img.get_width(), img.get_height());
- img.convert(Image::FORMAT_RGBA8);
- img.resize(orig_size.x * scale, orig_size.y * scale);
+ Size2 orig_size = Size2(img->get_width(), img->get_height());
+ img->convert(Image::FORMAT_RGBA8);
+ img->resize(orig_size.x * scale, orig_size.y * scale);
}
texture->create_from_image(img, ImageTexture::FLAG_FILTER);
@@ -158,7 +162,7 @@ static Ref<BitmapFont> make_font2(int p_height, int p_ascent, int p_charcount, c
Ref<BitmapFont> font(memnew(BitmapFont));
- Image image(p_img);
+ Ref<Image> image = memnew(Image(p_img));
Ref<ImageTexture> tex = memnew(ImageTexture);
tex->create_from_image(image);
@@ -213,14 +217,16 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// Font Colors
- Color control_font_color = Color::html("e0e0e0");
- Color control_font_color_lower = Color::html("a0a0a0");
- Color control_font_color_low = Color::html("b0b0b0");
+ Color control_font_color = Color(1, 1, 1, 0.8);
+ Color control_font_color_lower = Color(1, 1, 1, 0.32);
+ Color control_font_color_low = Color(1, 1, 1, 0.58);
Color control_font_color_hover = Color::html("f0f0f0");
- Color control_font_color_disabled = Color(0.9, 0.9, 0.9, 0.2);
+ Color control_font_color_disabled = Color::html("425468");
Color control_font_color_pressed = Color::html("ffffff");
Color font_color_selection = Color::html("7d7d7d");
+ Color accent_color = Color::html("7eff8a");
+
// Panel
t->set_stylebox("panel", "Panel", make_stylebox(panel_bg_png, 0, 0, 0, 0));
@@ -234,11 +240,15 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// Button
- Ref<StyleBox> sb_button_normal = sb_expand(make_stylebox(button_normal_png, 4, 4, 4, 4, 6, 3, 6, 3), 2, 2, 2, 2);
- Ref<StyleBox> sb_button_pressed = sb_expand(make_stylebox(button_pressed_png, 4, 4, 4, 4, 6, 3, 6, 3), 2, 2, 2, 2);
- Ref<StyleBox> sb_button_hover = sb_expand(make_stylebox(button_hover_png, 4, 4, 4, 4, 6, 2, 6, 2), 2, 2, 2, 2);
- Ref<StyleBox> sb_button_disabled = sb_expand(make_stylebox(button_disabled_png, 4, 4, 4, 4, 6, 2, 6, 2), 2, 2, 2, 2);
- Ref<StyleBox> sb_button_focus = sb_expand(make_stylebox(button_focus_png, 4, 4, 4, 4, 6, 2, 6, 2), 2, 2, 2, 2);
+ Color button_font_color = Color::html("9fb4ca");
+ Color button_font_color_hover = Color::html("70b1ff");
+ Color button_font_color_disabled = Color::html("425468");
+
+ Ref<StyleBox> sb_button_normal = sb_expand_default(make_stylebox(button_normal_png, 6, 6, 6, 6, 6, 4, 6, 4));
+ Ref<StyleBox> sb_button_pressed = sb_expand_default(make_stylebox(button_pressed_png, 6, 6, 6, 6, 6, 4, 6, 4));
+ Ref<StyleBox> sb_button_hover = sb_expand_default(make_stylebox(button_hover_png, 6, 6, 6, 6, 6, 4, 6, 4));
+ Ref<StyleBox> sb_button_disabled = sb_expand_default(make_stylebox(button_disabled_png, 6, 6, 6, 6, 6, 4, 6, 4));
+ Ref<StyleBox> sb_button_focus = make_stylebox(focus_png, 6, 6, 6, 6, 6, 2, 6, 2);
t->set_stylebox("normal", "Button", sb_button_normal);
t->set_stylebox("pressed", "Button", sb_button_pressed);
@@ -248,12 +258,14 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_font("font", "Button", default_font);
- t->set_color("font_color", "Button", control_font_color);
- t->set_color("font_color_pressed", "Button", control_font_color_pressed);
- t->set_color("font_color_hover", "Button", control_font_color_hover);
- t->set_color("font_color_disabled", "Button", control_font_color_disabled);
+ t->set_color("font_color", "Button", button_font_color);
+ t->set_color("font_color_pressed", "Button", accent_color);
+ t->set_color("font_color_hover", "Button", button_font_color_hover);
+ t->set_color("font_color_disabled", "Button", button_font_color_disabled);
- t->set_constant("hseparation", "Button", 2 * scale);
+ t->set_constant("side_margin", "Button", 4 * scale);
+ t->set_constant("bottom_margin", "Button", 4 * scale);
+ t->set_constant("hseparation", "Button", 4 * scale);
// LinkButton
@@ -284,66 +296,73 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// ToolButton
- t->set_stylebox("normal", "ToolButton", make_empty_stylebox(6, 4, 6, 4));
- t->set_stylebox("pressed", "ToolButton", make_stylebox(button_pressed_png, 4, 4, 4, 4, 6, 4, 6, 4));
- t->set_stylebox("hover", "ToolButton", make_stylebox(button_normal_png, 4, 4, 4, 4, 6, 4, 6, 4));
- t->set_stylebox("disabled", "ToolButton", make_empty_stylebox(6, 4, 6, 4));
- t->set_stylebox("focus", "ToolButton", focus);
+ Ref<StyleBox> tb_empty = memnew(StyleBoxEmpty);
+ tb_empty->set_default_margin(MARGIN_LEFT, 6 * scale);
+ tb_empty->set_default_margin(MARGIN_RIGHT, 6 * scale);
+ tb_empty->set_default_margin(MARGIN_TOP, 4 * scale);
+ tb_empty->set_default_margin(MARGIN_BOTTOM, 4 * scale);
+
+ t->set_stylebox("normal", "ToolButton", tb_empty);
+ t->set_stylebox("pressed", "ToolButton", tb_empty);
+ t->set_stylebox("hover", "ToolButton", tb_empty);
+ t->set_stylebox("disabled", "ToolButton", tb_empty);
+ t->set_stylebox("focus", "ToolButton", tb_empty);
t->set_font("font", "ToolButton", default_font);
t->set_color("font_color", "ToolButton", control_font_color);
- t->set_color("font_color_pressed", "ToolButton", control_font_color_pressed);
+ t->set_color("font_color_pressed", "ToolButton", accent_color);
t->set_color("font_color_hover", "ToolButton", control_font_color_hover);
- t->set_color("font_color_disabled", "ToolButton", Color(0.9, 0.95, 1, 0.3));
+ t->set_color("font_color_disabled", "ToolButton", button_font_color_disabled);
t->set_constant("hseparation", "ToolButton", 3);
// OptionButton
- Ref<StyleBox> sb_optbutton_normal = sb_expand(make_stylebox(option_button_normal_png, 4, 4, 21, 4, 6, 3, 21, 3), 2, 2, 2, 2);
- Ref<StyleBox> sb_optbutton_pressed = sb_expand(make_stylebox(option_button_pressed_png, 4, 4, 21, 4, 6, 3, 21, 3), 2, 2, 2, 2);
- Ref<StyleBox> sb_optbutton_hover = sb_expand(make_stylebox(option_button_hover_png, 4, 4, 21, 4, 6, 2, 21, 2), 2, 2, 2, 2);
- Ref<StyleBox> sb_optbutton_disabled = sb_expand(make_stylebox(option_button_disabled_png, 4, 4, 21, 4, 6, 2, 21, 2), 2, 2, 2, 2);
- Ref<StyleBox> sb_optbutton_focus = sb_expand(make_stylebox(button_focus_png, 4, 4, 4, 4, 6, 2, 6, 2), 2, 2, 2, 2);
+ Ref<StyleBox> sb_optbutton_normal = sb_expand_default(make_stylebox(button_normal_png, 6, 6, 6, 6, 6, 4, 16, 4));
+ Ref<StyleBox> sb_optbutton_pressed = sb_expand_default(make_stylebox(button_pressed_png, 6, 6, 6, 6, 6, 4, 16, 4));
+ Ref<StyleBox> sb_optbutton_hover = sb_expand_default(make_stylebox(button_hover_png, 6, 6, 6, 6, 6, 4, 16, 4));
+ Ref<StyleBox> sb_optbutton_disabled = sb_expand_default(make_stylebox(button_disabled_png, 6, 6, 6, 6, 6, 4, 16, 4));
+ Ref<StyleBox> sb_optbutton_focus = focus;
t->set_stylebox("normal", "OptionButton", sb_optbutton_normal);
t->set_stylebox("pressed", "OptionButton", sb_optbutton_pressed);
t->set_stylebox("hover", "OptionButton", sb_optbutton_hover);
t->set_stylebox("disabled", "OptionButton", sb_optbutton_disabled);
- t->set_stylebox("focus", "OptionButton", sb_button_focus);
+ t->set_stylebox("focus", "OptionButton", sb_optbutton_focus);
t->set_icon("arrow", "OptionButton", make_icon(option_arrow_png));
t->set_font("font", "OptionButton", default_font);
- t->set_color("font_color", "OptionButton", control_font_color);
- t->set_color("font_color_pressed", "OptionButton", control_font_color_pressed);
- t->set_color("font_color_hover", "OptionButton", control_font_color_hover);
- t->set_color("font_color_disabled", "OptionButton", control_font_color_disabled);
+ t->set_color("font_color", "OptionButton", button_font_color);
+ t->set_color("font_color_pressed", "OptionButton", accent_color);
+ t->set_color("font_color_hover", "OptionButton", button_font_color_hover);
+ t->set_color("font_color_disabled", "OptionButton", button_font_color_disabled);
t->set_constant("hseparation", "OptionButton", 2 * scale);
- t->set_constant("arrow_margin", "OptionButton", 2 * scale);
+ t->set_constant("arrow_margin", "OptionButton", 8 * scale);
// MenuButton
- t->set_stylebox("normal", "MenuButton", sb_button_normal);
- t->set_stylebox("pressed", "MenuButton", sb_button_pressed);
- t->set_stylebox("hover", "MenuButton", sb_button_pressed);
+ t->set_stylebox("normal", "MenuButton", tb_empty);
+ t->set_stylebox("pressed", "MenuButton", tb_empty);
+ t->set_stylebox("hover", "MenuButton", tb_empty);
t->set_stylebox("disabled", "MenuButton", make_empty_stylebox(0, 0, 0, 0));
- t->set_stylebox("focus", "MenuButton", sb_button_focus);
+ t->set_stylebox("focus", "MenuButton", tb_empty);
t->set_font("font", "MenuButton", default_font);
t->set_color("font_color", "MenuButton", control_font_color);
- t->set_color("font_color_pressed", "MenuButton", control_font_color_pressed);
+ t->set_color("font_color_pressed", "MenuButton", accent_color);
t->set_color("font_color_hover", "MenuButton", control_font_color_hover);
- t->set_color("font_color_disabled", "MenuButton", Color(1, 1, 1, 0.3));
+ t->set_color("font_color_disabled", "MenuButton", button_font_color_disabled);
+ t->set_color("font_color_focus", "MenuButton", accent_color);
t->set_constant("hseparation", "MenuButton", 3 * scale);
// ButtonGroup
- t->set_stylebox("panel", "ButtonGroup", memnew(StyleBoxEmpty));
+ t->set_stylebox("panel", "ButtonGroup", make_stylebox(button_group_png, 16, 16, 16, 16, 8, 4, 8, 4));
// CheckBox
@@ -410,7 +429,7 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_font("font", "Label", default_font);
- t->set_color("font_color", "Label", Color(1, 1, 1));
+ t->set_color("font_color", "Label", control_font_color_low);
t->set_color("font_color_shadow", "Label", Color(0, 0, 0, 0));
t->set_constant("shadow_offset_x", "Label", 1 * scale);
@@ -420,15 +439,21 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// LineEdit
- t->set_stylebox("normal", "LineEdit", make_stylebox(line_edit_png, 5, 5, 5, 5));
+ Ref<StyleBoxTexture> sb_line_edit = sb_expand_default(make_stylebox(line_edit_png, 6, 6, 6, 6, 6, 4, 6, 4));
+ t->set_stylebox("normal", "LineEdit", sb_line_edit);
+ Ref<StyleBoxTexture> sb_line_edit_active = sb_expand_default(make_stylebox(line_edit_active_png, 6, 6, 6, 6, 6, 4, 6, 4));
+ t->set_stylebox("active", "LineEdit", sb_line_edit_active);
t->set_stylebox("focus", "LineEdit", focus);
- t->set_stylebox("read_only", "LineEdit", make_stylebox(line_edit_disabled_png, 6, 6, 6, 6));
+ Ref<StyleBoxTexture> sb_line_edit_disabled = sb_expand_default(make_stylebox(line_edit_disabled_png, 6, 6, 6, 6, 6, 4, 6, 4));
+ t->set_stylebox("read_only", "LineEdit", sb_line_edit_disabled);
t->set_font("font", "LineEdit", default_font);
- t->set_color("font_color", "LineEdit", control_font_color);
- t->set_color("font_color_selected", "LineEdit", Color(0, 0, 0));
- t->set_color("cursor_color", "LineEdit", control_font_color_hover);
+ t->set_color("font_color", "LineEdit", button_font_color);
+ t->set_color("font_color_selected", "LineEdit", button_font_color);
+ t->set_color("font_color_active", "LineEdit", accent_color);
+ t->set_color("font_color_read_only", "LineEdit", button_font_color_disabled);
+ t->set_color("cursor_color", "LineEdit", button_font_color);
t->set_color("selection_color", "LineEdit", font_color_selection);
t->set_constant("minimum_spaces", "LineEdit", 12 * scale);
@@ -445,9 +470,9 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// TextEdit
- t->set_stylebox("normal", "TextEdit", make_stylebox(tree_bg_png, 3, 3, 3, 3));
+ t->set_stylebox("normal", "TextEdit", make_stylebox(tree_bg_png, 6, 6, 6, 6));
t->set_stylebox("focus", "TextEdit", focus);
- t->set_stylebox("completion", "TextEdit", make_stylebox(tree_bg_png, 3, 3, 3, 3));
+ t->set_stylebox("completion", "TextEdit", make_stylebox(tree_bg_png, 6, 6, 6, 6));
t->set_icon("tab", "TextEdit", make_icon(tab_png));
@@ -532,19 +557,25 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// WindowDialog
- Ref<StyleBoxTexture> style_pp_win = sb_expand(make_stylebox(popup_window_png, 10, 26, 10, 8), 8, 24, 8, 6);
+ Ref<StyleBoxTexture> style_pp_win = make_stylebox(popup_window_png, 8, 8, 8, 8, 8, 30, 8, 8);
+
t->set_stylebox("panel", "WindowDialog", style_pp_win);
- t->set_constant("titlebar_height", "WindowDialog", 20 * scale);
- t->set_constant("scaleborder_size", "WindowDialog", 4);
+ t->set_constant("scaleborder_size", "WindowDialog", 4 * scale);
+
+ t->set_icon("close", "WindowDialog", make_icon(close_png));
+ t->set_icon("close_hilite", "WindowDialog", make_icon(close_hl_png));
t->set_font("title_font", "WindowDialog", large_font);
- t->set_color("title_color", "WindowDialog", Color(0, 0, 0));
+
+ t->set_color("title_color", "WindowDialog", Color::html("dae0e6"));
+
+ t->set_constant("close_h_ofs", "WindowDialog", 20 * scale);
+ t->set_constant("close_v_ofs", "WindowDialog", 20 * scale);
+ t->set_constant("titlebar_height", "WindowDialog", 20 * scale);
t->set_constant("title_height", "WindowDialog", 20 * scale);
t->set_icon("close", "WindowDialog", make_icon(close_png));
t->set_icon("close_hilite", "WindowDialog", make_icon(close_hl_png));
- t->set_constant("close_h_ofs", "WindowDialog", 18 * scale);
- t->set_constant("close_v_ofs", "WindowDialog", 18 * scale);
// File Dialog
@@ -552,9 +583,9 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// Popup
- Ref<StyleBoxTexture> style_pp = sb_expand(make_stylebox(popup_bg_png, 5, 5, 5, 5, 4, 4, 4, 4), 2, 2, 2, 2);
+ Ref<StyleBoxTexture> style_pp = sb_expand(make_stylebox(popup_bg_png, 6, 6, 6, 6, 4, 4, 4, 4), 2, 2, 2, 2);
- Ref<StyleBoxTexture> selected = make_stylebox(selection_png, 6, 6, 6, 6);
+ Ref<StyleBoxTexture> selected = make_stylebox(selection_png, 6, 7, 6, 7);
for (int i = 0; i < 4; i++) {
selected->set_expand_margin_size(Margin(i), 2 * scale);
}
@@ -615,16 +646,16 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// Tree
- Ref<StyleBoxTexture> tree_selected = make_stylebox(selection_png, 4, 4, 4, 4, 8, 0, 8, 0);
- Ref<StyleBoxTexture> tree_selected_oof = make_stylebox(selection_oof_png, 4, 4, 4, 4, 8, 0, 8, 0);
+ Ref<StyleBoxTexture> tree_selected = make_stylebox(selection_png, 6, 7, 6, 7, 8, 0, 8, 0);
+ Ref<StyleBoxTexture> tree_selected_oof = make_stylebox(selection_oof_png, 6, 6, 6, 6, 8, 0, 8, 0);
- t->set_stylebox("bg", "Tree", make_stylebox(tree_bg_png, 4, 4, 4, 5));
+ t->set_stylebox("bg", "Tree", make_stylebox(tree_bg_png, 6, 6, 6, 6));
t->set_stylebox("bg_focus", "Tree", focus);
t->set_stylebox("selected", "Tree", tree_selected_oof);
t->set_stylebox("selected_focus", "Tree", tree_selected);
t->set_stylebox("cursor", "Tree", focus);
t->set_stylebox("cursor_unfocused", "Tree", focus);
- t->set_stylebox("button_pressed", "Tree", make_stylebox(button_pressed_png, 4, 4, 4, 4));
+ t->set_stylebox("button_pressed", "Tree", make_stylebox(button_pressed_png, 6, 6, 6, 6));
t->set_stylebox("title_button_normal", "Tree", make_stylebox(tree_title_png, 4, 4, 4, 4));
t->set_stylebox("title_button_pressed", "Tree", make_stylebox(tree_title_pressed_png, 4, 4, 4, 4));
t->set_stylebox("title_button_hover", "Tree", make_stylebox(tree_title_png, 4, 4, 4, 4));
@@ -642,11 +673,12 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_color("title_button_color", "Tree", control_font_color);
t->set_color("font_color", "Tree", control_font_color_low);
t->set_color("font_color_selected", "Tree", control_font_color_pressed);
- t->set_color("selection_color", "Tree", Color(0.1, 0.1, 1, 0.8));
+ t->set_color("button_pressed", "Tree", accent_color);
+ t->set_color("selection_color", "Tree", Color(0, 0, 0, 0.8));
t->set_color("cursor_color", "Tree", Color(0, 0, 0));
t->set_color("guide_color", "Tree", Color(0, 0, 0, 0.1));
- t->set_color("drop_position_color", "Tree", Color(1, 0.3, 0.2));
- t->set_color("relationship_line_color", "Tree", Color::html("464646"));
+ t->set_color("drop_position_color", "Tree", Color(0, 0, 0, 0.2));
+ t->set_color("relationship_line_color", "Tree", Color(0, 0, 0, 0.1));
t->set_constant("hseparation", "Tree", 4 * scale);
t->set_constant("vseparation", "Tree", 4 * scale);
@@ -658,10 +690,10 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_constant("scroll_speed", "Tree", 12);
// ItemList
- Ref<StyleBoxTexture> item_selected = make_stylebox(selection_png, 4, 4, 4, 4, 8, 2, 8, 2);
- Ref<StyleBoxTexture> item_selected_oof = make_stylebox(selection_oof_png, 4, 4, 4, 4, 8, 2, 8, 2);
+ Ref<StyleBoxTexture> item_selected = make_stylebox(selection_png, 6, 7, 6, 7, 8, 2, 4, 2);
+ Ref<StyleBoxTexture> item_selected_oof = make_stylebox(selection_oof_png, 6, 6, 6, 6, 8, 2, 4, 2);
- t->set_stylebox("bg", "ItemList", make_stylebox(tree_bg_png, 4, 4, 4, 5));
+ t->set_stylebox("bg", "ItemList", make_stylebox(tree_bg_png, 6, 6, 6, 6));
t->set_stylebox("bg_focus", "ItemList", focus);
t->set_constant("hseparation", "ItemList", 4);
t->set_constant("vseparation", "ItemList", 2);
@@ -678,14 +710,13 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// TabContainer
- Ref<StyleBoxTexture> tc_sb = sb_expand(make_stylebox(tab_container_bg_png, 4, 4, 4, 4, 4, 4, 4, 4), 3, 3, 3, 3);
+ Ref<StyleBoxTexture> tc_sb = sb_expand(make_stylebox(tab_container_bg_png, 6, 6, 6, 6, 4, 4, 4, 4), 3, 3, 3, 3);
tc_sb->set_expand_margin_size(MARGIN_TOP, 2 * scale);
tc_sb->set_default_margin(MARGIN_TOP, 8 * scale);
- t->set_stylebox("tab_fg", "TabContainer", sb_expand(make_stylebox(tab_current_png, 4, 4, 4, 1, 16, 4, 16, 4), 2, 2, 2, 2));
- t->set_stylebox("tab_bg", "TabContainer", sb_expand(make_stylebox(tab_behind_png, 5, 5, 5, 1, 16, 6, 16, 4), 3, 0, 3, 3));
- t->set_stylebox("tab_disabled", "TabContainer", sb_expand(make_stylebox(tab_disabled_png, 5, 5, 5, 1, 16, 6, 16, 4), 3, 0, 3, 3));
+ t->set_stylebox("tab_fg", "TabContainer", sb_expand(make_stylebox(tab_current_png, 6, 6, 6, 0, 16, 8, 16, 8), 2, 2, 2, 2));
+ t->set_stylebox("tab_bg", "TabContainer", sb_expand(make_stylebox(tab_behind_png, 5, 5, 5, 1, 16, 8, 16, 8), 3, 0, 3, 3));
t->set_stylebox("panel", "TabContainer", tc_sb);
t->set_icon("increment", "TabContainer", make_icon(scroll_button_right_png));
@@ -697,7 +728,7 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_font("font", "TabContainer", default_font);
- t->set_color("font_color_fg", "TabContainer", control_font_color_hover);
+ t->set_color("font_color_fg", "TabContainer", control_font_color);
t->set_color("font_color_bg", "TabContainer", control_font_color_low);
t->set_color("font_color_disabled", "TabContainer", control_font_color_disabled);
@@ -709,12 +740,20 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
// Tabs
- t->set_stylebox("tab_fg", "Tabs", sb_expand(make_stylebox(tab_current_png, 4, 3, 4, 1, 16, 3, 16, 2), 2, 2, 2, 2));
- t->set_stylebox("tab_bg", "Tabs", sb_expand(make_stylebox(tab_behind_png, 5, 4, 5, 1, 16, 5, 16, 2), 3, 3, 3, 3));
- t->set_stylebox("tab_disabled", "Tabs", sb_expand(make_stylebox(tab_disabled_png, 5, 4, 5, 1, 16, 5, 16, 2), 3, 3, 3, 3));
+ t->set_stylebox("tab_fg", "Tabs", sb_expand(make_stylebox(tab_current_png, 6, 6, 6, 0, 16, 8, 16, 8), 2, 2, 2, 2));
+ // tc_sb->set_expand_margin_size(MARGIN_TOP,2 *scale);
+ t->set_stylebox("tab_bg", "Tabs", sb_expand(make_stylebox(tab_behind_png, 5, 4, 5, 1, 16, 8, 16, 8), 2, 2, 2, 2));
t->set_stylebox("panel", "Tabs", tc_sb);
- t->set_stylebox("button_pressed", "Tabs", make_stylebox(button_pressed_png, 4, 4, 4, 4));
- t->set_stylebox("button", "Tabs", make_stylebox(button_normal_png, 4, 4, 4, 4));
+ t->set_stylebox("button_pressed", "Tabs", make_stylebox(button_pressed_png, 6, 6, 6, 6));
+ t->set_stylebox("button", "Tabs", make_stylebox(button_normal_png, 6, 6, 6, 6));
+
+ t->set_icon("increment", "Tabs", make_icon(scroll_button_right_png));
+ t->set_icon("increment_hilite", "Tabs", make_icon(scroll_button_right_hl_png));
+ t->set_icon("decrement", "Tabs", make_icon(scroll_button_left_png));
+ t->set_icon("decrement_hilite", "Tabs", make_icon(scroll_button_left_hl_png));
+ t->set_icon("close", "Tabs", make_icon(tab_close_png));
+
+ t->set_font("font", "Tabs", default_font);
t->set_icon("increment", "Tabs", make_icon(scroll_button_right_png));
t->set_icon("increment_hilite", "Tabs", make_icon(scroll_button_right_hl_png));
@@ -724,7 +763,7 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_font("font", "Tabs", default_font);
- t->set_color("font_color_fg", "Tabs", control_font_color_hover);
+ t->set_color("font_color_fg", "Tabs", control_font_color);
t->set_color("font_color_bg", "Tabs", control_font_color_low);
t->set_color("font_color_disabled", "Tabs", control_font_color_disabled);
@@ -742,8 +781,8 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_font("normal", "Fonts", default_font);
t->set_font("large", "Fonts", large_font);
- t->set_constant("separation", "HSeparator", 4 * scale);
- t->set_constant("separation", "VSeparator", 4 * scale);
+ t->set_constant("separation", "HSeparator", 16 * scale);
+ t->set_constant("separation", "VSeparator", 16 * scale);
// Dialogs
@@ -812,12 +851,12 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_constant("separation", "HBoxContainer", 4 * scale);
t->set_constant("separation", "VBoxContainer", 4 * scale);
- t->set_constant("margin_left", "MarginContainer", 8 * scale);
+ t->set_constant("margin_left", "MarginContainer", 0 * scale);
t->set_constant("margin_top", "MarginContainer", 0 * scale);
t->set_constant("margin_right", "MarginContainer", 0 * scale);
t->set_constant("margin_bottom", "MarginContainer", 0 * scale);
- t->set_constant("hseparation", "GridContainer", 4 * scale);
- t->set_constant("vseparation", "GridContainer", 4 * scale);
+ t->set_constant("hseparation", "GridContainer", 14 * scale);
+ t->set_constant("vseparation", "GridContainer", 8 * scale);
t->set_constant("separation", "HSplitContainer", 12 * scale);
t->set_constant("separation", "VSplitContainer", 12 * scale);
t->set_constant("autohide", "HSplitContainer", 1 * scale);
@@ -865,8 +904,19 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_stylebox("panelnc", "Panel", ttnc);
t->set_stylebox("panelf", "Panel", tc_sb);
- Ref<StyleBoxTexture> sb_pc = make_stylebox(tab_container_bg_png, 4, 4, 4, 4, 7, 7, 7, 7);
+ Ref<StyleBoxTexture> sb_pc = make_stylebox(tab_container_bg_png, 6, 6, 6, 6, 7, 7, 7, 7);
t->set_stylebox("panel", "PanelContainer", sb_pc);
+ t->set_stylebox("panel_full", "PanelContainer", make_stylebox(tab_container_bg_png, 4, 4, 4, 4, 2, 7, 2, 0));
+
+ t->set_icon("minus", "GraphEdit", make_icon(icon_zoom_less_png));
+ t->set_icon("reset", "GraphEdit", make_icon(icon_zoom_reset_png));
+ t->set_icon("more", "GraphEdit", make_icon(icon_zoom_more_png));
+ t->set_icon("snap", "GraphEdit", make_icon(icon_snap_png));
+ t->set_stylebox("bg", "GraphEdit", make_stylebox(tree_bg_png, 6, 6, 6, 6));
+ t->set_color("grid_minor", "GraphEdit", Color(1, 1, 1, 0.05));
+ t->set_color("grid_major", "GraphEdit", Color(1, 1, 1, 0.2));
+ t->set_constant("bezier_len_pos", "GraphEdit", 80 * scale);
+ t->set_constant("bezier_len_neg", "GraphEdit", 160 * scale);
t->set_icon("minus", "GraphEdit", make_icon(icon_zoom_less_png));
t->set_icon("reset", "GraphEdit", make_icon(icon_zoom_reset_png));
@@ -880,6 +930,18 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
t->set_icon("logo", "Icons", make_icon(logo_png));
+ // Editor
+ t->set_color("prop_category", "Editor", Color::html("232b33"));
+ t->set_color("prop_section", "Editor", Color(0, 0, 0, 0.1));
+ t->set_color("prop_subsection", "Editor", Color::html("272f39"));
+ t->set_color("fg_selected", "Editor", Color::html("ffbd8e8e"));
+ t->set_color("fg_error", "Editor", Color::html("ffbd8e8e"));
+
+ t->set_color("animation_editor_track_pos", "Editor", accent_color);
+ t->set_color("animation_editor_time", "Editor", Color(1, 1, 1, 0.1));
+ t->set_color("animation_editor_selection_rect", "Editor", Color(1, 1, 1, 0.5));
+ t->set_color("animation_editor_line", "Editor", Color(1, 1, 1, 0.1));
+
// Theme
default_icon = make_icon(error_icon_png);
diff --git a/scene/resources/default_theme/dropdown.png b/scene/resources/default_theme/dropdown.png
index 3a6a2ed778..b9a324be7c 100644
--- a/scene/resources/default_theme/dropdown.png
+++ b/scene/resources/default_theme/dropdown.png
Binary files differ
diff --git a/scene/resources/default_theme/focus.png b/scene/resources/default_theme/focus.png
index 5d37028f2d..1908fd8aee 100644
--- a/scene/resources/default_theme/focus.png
+++ b/scene/resources/default_theme/focus.png
Binary files differ
diff --git a/scene/resources/default_theme/frame_focus.png b/scene/resources/default_theme/frame_focus.png
index 9170db38ed..1908fd8aee 100644
--- a/scene/resources/default_theme/frame_focus.png
+++ b/scene/resources/default_theme/frame_focus.png
Binary files differ
diff --git a/scene/resources/default_theme/full_panel_bg.png b/scene/resources/default_theme/full_panel_bg.png
index 7f02dc7259..c6e59b747c 100644
--- a/scene/resources/default_theme/full_panel_bg.png
+++ b/scene/resources/default_theme/full_panel_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/graph_node.png b/scene/resources/default_theme/graph_node.png
index d4b4dd3c1f..c7e374693c 100644
--- a/scene/resources/default_theme/graph_node.png
+++ b/scene/resources/default_theme/graph_node.png
Binary files differ
diff --git a/scene/resources/default_theme/graph_node_comment.png b/scene/resources/default_theme/graph_node_comment.png
index f2d6daa259..0452cb1b1d 100644
--- a/scene/resources/default_theme/graph_node_comment.png
+++ b/scene/resources/default_theme/graph_node_comment.png
Binary files differ
diff --git a/scene/resources/default_theme/graph_node_comment_focus.png b/scene/resources/default_theme/graph_node_comment_focus.png
index a4b7b5a618..49127da092 100644
--- a/scene/resources/default_theme/graph_node_comment_focus.png
+++ b/scene/resources/default_theme/graph_node_comment_focus.png
Binary files differ
diff --git a/scene/resources/default_theme/graph_node_position.png b/scene/resources/default_theme/graph_node_position.png
index 7ec15e2ff4..76a213be72 100644
--- a/scene/resources/default_theme/graph_node_position.png
+++ b/scene/resources/default_theme/graph_node_position.png
Binary files differ
diff --git a/scene/resources/default_theme/graph_node_selected.png b/scene/resources/default_theme/graph_node_selected.png
index f76c9703dd..0e22312e6a 100644
--- a/scene/resources/default_theme/graph_node_selected.png
+++ b/scene/resources/default_theme/graph_node_selected.png
Binary files differ
diff --git a/scene/resources/default_theme/hseparator.png b/scene/resources/default_theme/hseparator.png
index 99609ac118..88165ea6b2 100644
--- a/scene/resources/default_theme/hseparator.png
+++ b/scene/resources/default_theme/hseparator.png
Binary files differ
diff --git a/scene/resources/default_theme/hslider_bg.png b/scene/resources/default_theme/hslider_bg.png
index 9c2a2df62a..a66e136813 100644
--- a/scene/resources/default_theme/hslider_bg.png
+++ b/scene/resources/default_theme/hslider_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/hslider_grabber.png b/scene/resources/default_theme/hslider_grabber.png
index 2acd33879a..c8be897e07 100644
--- a/scene/resources/default_theme/hslider_grabber.png
+++ b/scene/resources/default_theme/hslider_grabber.png
Binary files differ
diff --git a/scene/resources/default_theme/hslider_grabber_hl.png b/scene/resources/default_theme/hslider_grabber_hl.png
index f8a011e64b..1639776a28 100644
--- a/scene/resources/default_theme/hslider_grabber_hl.png
+++ b/scene/resources/default_theme/hslider_grabber_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/hsplit_bg.png b/scene/resources/default_theme/hsplit_bg.png
index 7dd1d48b29..cfb76f7dc7 100644
--- a/scene/resources/default_theme/hsplit_bg.png
+++ b/scene/resources/default_theme/hsplit_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/hsplitter.png b/scene/resources/default_theme/hsplitter.png
index 71a3914d7e..3ac1dddf90 100644
--- a/scene/resources/default_theme/hsplitter.png
+++ b/scene/resources/default_theme/hsplitter.png
Binary files differ
diff --git a/scene/resources/default_theme/icon_close.png b/scene/resources/default_theme/icon_close.png
index 5ac6357dcd..b6973740e7 100644
--- a/scene/resources/default_theme/icon_close.png
+++ b/scene/resources/default_theme/icon_close.png
Binary files differ
diff --git a/scene/resources/default_theme/line_edit.png b/scene/resources/default_theme/line_edit.png
index bf2b91f1be..339a796390 100644
--- a/scene/resources/default_theme/line_edit.png
+++ b/scene/resources/default_theme/line_edit.png
Binary files differ
diff --git a/scene/resources/default_theme/line_edit_active.png b/scene/resources/default_theme/line_edit_active.png
new file mode 100644
index 0000000000..b6bebde925
--- /dev/null
+++ b/scene/resources/default_theme/line_edit_active.png
Binary files differ
diff --git a/scene/resources/default_theme/line_edit_disabled.png b/scene/resources/default_theme/line_edit_disabled.png
index a0fa505e4c..1fce186f3d 100644
--- a/scene/resources/default_theme/line_edit_disabled.png
+++ b/scene/resources/default_theme/line_edit_disabled.png
Binary files differ
diff --git a/scene/resources/default_theme/line_edit_focus.png b/scene/resources/default_theme/line_edit_focus.png
deleted file mode 100644
index e66d7b60e3..0000000000
--- a/scene/resources/default_theme/line_edit_focus.png
+++ /dev/null
Binary files differ
diff --git a/scene/resources/default_theme/line_edit_selected.png b/scene/resources/default_theme/line_edit_selected.png
new file mode 100644
index 0000000000..b6bebde925
--- /dev/null
+++ b/scene/resources/default_theme/line_edit_selected.png
Binary files differ
diff --git a/scene/resources/default_theme/make_header.py b/scene/resources/default_theme/make_header.py
index 03c2c9be4a..db449f9417 100755
--- a/scene/resources/default_theme/make_header.py
+++ b/scene/resources/default_theme/make_header.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
import os
import glob
@@ -10,21 +11,17 @@ f = open("theme_data.h", "wb")
f.write("// THIS FILE HAS BEEN AUTOGENERATED, DON'T EDIT!!\n")
-f.write("\n\n")
-
# Generate png image block
+f.write("\n// png image block\n");
pixmaps = glob.glob("*.png")
-
pixmaps.sort()
-f.write("\n\n\n")
-
for x in pixmaps:
var_str = x[:-4] + "_png"
- f.write("static const unsigned char " + var_str + "[]={\n")
+ f.write("\nstatic const unsigned char " + var_str + "[] = {\n\t")
pngf = open(x, "rb")
@@ -33,24 +30,22 @@ for x in pixmaps:
f.write(hex(ord(b)))
b = pngf.read(1)
if (len(b) == 1):
- f.write(",")
+ f.write(", ")
- f.write("\n};\n\n\n")
+ f.write("\n};\n")
pngf.close()
# Generate shaders block
+f.write("\n// shaders block\n");
shaders = glob.glob("*.gsl")
-
shaders.sort()
-f.write("\n\n\n")
-
for x in shaders:
var_str = x[:-4] + "_shader_code"
- f.write("static const char *" + var_str + "=\n")
+ f.write("\nstatic const char *" + var_str + " = \n")
sf = open(x, "rb")
@@ -65,7 +60,7 @@ for x in shaders:
if (b != ""):
f.write("\"\n")
- f.write("\";\n\n\n")
+ f.write("\";\n")
sf.close()
f.close()
diff --git a/scene/resources/default_theme/option_arrow.png b/scene/resources/default_theme/option_arrow.png
index 007de16bfa..b7bc38e03f 100644
--- a/scene/resources/default_theme/option_arrow.png
+++ b/scene/resources/default_theme/option_arrow.png
Binary files differ
diff --git a/scene/resources/default_theme/option_button_disabled.png b/scene/resources/default_theme/option_button_disabled.png
index ce727d56e1..d8e7942eaa 100644
--- a/scene/resources/default_theme/option_button_disabled.png
+++ b/scene/resources/default_theme/option_button_disabled.png
Binary files differ
diff --git a/scene/resources/default_theme/option_button_focus.png b/scene/resources/default_theme/option_button_focus.png
deleted file mode 100644
index c76d91287e..0000000000
--- a/scene/resources/default_theme/option_button_focus.png
+++ /dev/null
Binary files differ
diff --git a/scene/resources/default_theme/option_button_hover.png b/scene/resources/default_theme/option_button_hover.png
index fd1e987ceb..2f67922f92 100644
--- a/scene/resources/default_theme/option_button_hover.png
+++ b/scene/resources/default_theme/option_button_hover.png
Binary files differ
diff --git a/scene/resources/default_theme/option_button_normal.png b/scene/resources/default_theme/option_button_normal.png
index 9d7fb98d1c..6f14414b41 100644
--- a/scene/resources/default_theme/option_button_normal.png
+++ b/scene/resources/default_theme/option_button_normal.png
Binary files differ
diff --git a/scene/resources/default_theme/option_button_pressed.png b/scene/resources/default_theme/option_button_pressed.png
index 28b1d93468..7ca71c44db 100644
--- a/scene/resources/default_theme/option_button_pressed.png
+++ b/scene/resources/default_theme/option_button_pressed.png
Binary files differ
diff --git a/scene/resources/default_theme/panel_bg.png b/scene/resources/default_theme/panel_bg.png
index 320819ad6d..c6db700766 100644
--- a/scene/resources/default_theme/panel_bg.png
+++ b/scene/resources/default_theme/panel_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/popup_bg.png b/scene/resources/default_theme/popup_bg.png
index 63f5994441..d8c633974a 100644
--- a/scene/resources/default_theme/popup_bg.png
+++ b/scene/resources/default_theme/popup_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/popup_hover.png b/scene/resources/default_theme/popup_hover.png
deleted file mode 100644
index 85d4e48475..0000000000
--- a/scene/resources/default_theme/popup_hover.png
+++ /dev/null
Binary files differ
diff --git a/scene/resources/default_theme/popup_unchecked.png b/scene/resources/default_theme/popup_unchecked.png
deleted file mode 100644
index c1137e6fbf..0000000000
--- a/scene/resources/default_theme/popup_unchecked.png
+++ /dev/null
Binary files differ
diff --git a/scene/resources/default_theme/popup_window.png b/scene/resources/default_theme/popup_window.png
index 59362a8ffd..e667c93d2f 100644
--- a/scene/resources/default_theme/popup_window.png
+++ b/scene/resources/default_theme/popup_window.png
Binary files differ
diff --git a/scene/resources/default_theme/progress_bar.png b/scene/resources/default_theme/progress_bar.png
index bf81e3adea..d3e1838248 100644
--- a/scene/resources/default_theme/progress_bar.png
+++ b/scene/resources/default_theme/progress_bar.png
Binary files differ
diff --git a/scene/resources/default_theme/progress_fill.png b/scene/resources/default_theme/progress_fill.png
index 3a34dfdda6..c211b0a74d 100644
--- a/scene/resources/default_theme/progress_fill.png
+++ b/scene/resources/default_theme/progress_fill.png
Binary files differ
diff --git a/scene/resources/default_theme/radio_checked.png b/scene/resources/default_theme/radio_checked.png
index 95d472022f..963cf76e98 100644
--- a/scene/resources/default_theme/radio_checked.png
+++ b/scene/resources/default_theme/radio_checked.png
Binary files differ
diff --git a/scene/resources/default_theme/radio_unchecked.png b/scene/resources/default_theme/radio_unchecked.png
index 7f0535c3a4..0b90989037 100644
--- a/scene/resources/default_theme/radio_unchecked.png
+++ b/scene/resources/default_theme/radio_unchecked.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_bg.png b/scene/resources/default_theme/scroll_bg.png
index cefadb2c08..1908fd8aee 100644
--- a/scene/resources/default_theme/scroll_bg.png
+++ b/scene/resources/default_theme/scroll_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_button_down.png b/scene/resources/default_theme/scroll_button_down.png
index caeac9b286..a901bc8c70 100644
--- a/scene/resources/default_theme/scroll_button_down.png
+++ b/scene/resources/default_theme/scroll_button_down.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_button_down_hl.png b/scene/resources/default_theme/scroll_button_down_hl.png
index 48036e0297..4e36bb924a 100644
--- a/scene/resources/default_theme/scroll_button_down_hl.png
+++ b/scene/resources/default_theme/scroll_button_down_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_button_left.png b/scene/resources/default_theme/scroll_button_left.png
index 3b50938d97..ab32b9deb1 100644
--- a/scene/resources/default_theme/scroll_button_left.png
+++ b/scene/resources/default_theme/scroll_button_left.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_button_left_hl.png b/scene/resources/default_theme/scroll_button_left_hl.png
index b3d348c24f..7a9ff6ac0a 100644
--- a/scene/resources/default_theme/scroll_button_left_hl.png
+++ b/scene/resources/default_theme/scroll_button_left_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_button_right.png b/scene/resources/default_theme/scroll_button_right.png
index 1c622a41ad..3699c2cdf7 100644
--- a/scene/resources/default_theme/scroll_button_right.png
+++ b/scene/resources/default_theme/scroll_button_right.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_button_right_hl.png b/scene/resources/default_theme/scroll_button_right_hl.png
index 108796ca02..37195daadd 100644
--- a/scene/resources/default_theme/scroll_button_right_hl.png
+++ b/scene/resources/default_theme/scroll_button_right_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_button_up.png b/scene/resources/default_theme/scroll_button_up.png
index 2c8238ae4c..a88d17e1c5 100644
--- a/scene/resources/default_theme/scroll_button_up.png
+++ b/scene/resources/default_theme/scroll_button_up.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_button_up_hl.png b/scene/resources/default_theme/scroll_button_up_hl.png
index 4283bd114a..04ce402964 100644
--- a/scene/resources/default_theme/scroll_button_up_hl.png
+++ b/scene/resources/default_theme/scroll_button_up_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_grabber.png b/scene/resources/default_theme/scroll_grabber.png
index 1d625a9b7b..4be7f4e6cc 100644
--- a/scene/resources/default_theme/scroll_grabber.png
+++ b/scene/resources/default_theme/scroll_grabber.png
Binary files differ
diff --git a/scene/resources/default_theme/scroll_grabber_hl.png b/scene/resources/default_theme/scroll_grabber_hl.png
index 99eb24b7e7..8d0a15ac58 100644
--- a/scene/resources/default_theme/scroll_grabber_hl.png
+++ b/scene/resources/default_theme/scroll_grabber_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/selection.png b/scene/resources/default_theme/selection.png
index 501877a8b4..1aa4ffa86f 100644
--- a/scene/resources/default_theme/selection.png
+++ b/scene/resources/default_theme/selection.png
Binary files differ
diff --git a/scene/resources/default_theme/selection_oof.png b/scene/resources/default_theme/selection_oof.png
index 9594fe0913..7b485eec3b 100644
--- a/scene/resources/default_theme/selection_oof.png
+++ b/scene/resources/default_theme/selection_oof.png
Binary files differ
diff --git a/scene/resources/default_theme/source/arrow_down.svg b/scene/resources/default_theme/source/arrow_down.svg
index 354040b548..1dd209720f 100644
--- a/scene/resources/default_theme/source/arrow_down.svg
+++ b/scene/resources/default_theme/source/arrow_down.svg
@@ -14,7 +14,7 @@
viewBox="0 0 12 12"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="64"
- inkscape:cx="5.7299355"
- inkscape:cy="6.6875366"
+ inkscape:zoom="22.627417"
+ inkscape:cx="1.7981958"
+ inkscape:cy="7.5815407"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -71,10 +71,10 @@
id="layer1"
transform="translate(0,-1040.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 2,1043.3622 0,3 4,3 4,-3 0,-3 z"
- id="rect4174"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.39215687"
+ d="m 3,1045.3622 3,3 3,-3"
+ id="path814"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
+ sodipodi:nodetypes="ccc" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/arrow_right.svg b/scene/resources/default_theme/source/arrow_right.svg
index 4c4bc05e28..43134ba1b1 100644
--- a/scene/resources/default_theme/source/arrow_right.svg
+++ b/scene/resources/default_theme/source/arrow_right.svg
@@ -14,7 +14,7 @@
viewBox="0 0 12 12"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="45.254836"
- inkscape:cx="3.0018179"
- inkscape:cy="6.0349408"
+ inkscape:cx="4.0845752"
+ inkscape:cy="5.8802612"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -71,10 +71,10 @@
id="layer1"
transform="translate(0,-1040.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 3,1050.3622 3,0 3,-4 -3,-4 -3,0 z"
- id="rect4174"
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.39215687"
+ d="m 4,1049.3622 3.0000202,-3 -3.0000202,-3"
+ id="path814"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
+ sodipodi:nodetypes="ccc" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/button_disabled.svg b/scene/resources/default_theme/source/button_disabled.svg
new file mode 100644
index 0000000000..eb4ce87e36
--- /dev/null
+++ b/scene/resources/default_theme/source/button_disabled.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="button_disabled.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/button_disabled.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.3006706"
+ inkscape:cy="10.701568"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:none;fill-opacity:0.19607843;stroke:#425468;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/button_group.svg b/scene/resources/default_theme/source/button_group.svg
new file mode 100644
index 0000000000..84bdb00505
--- /dev/null
+++ b/scene/resources/default_theme/source/button_group.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ viewBox="0 0 32 31.999998"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="button_group.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/button_disabled.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="15.144473"
+ inkscape:cy="14.499068"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3623)">
+ <circle
+ style="fill:#000000;fill-opacity:0.19607843;stroke:none;stroke-width:2.54545379;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4503"
+ cx="16"
+ cy="1036.3623"
+ r="13.999995" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/button_hover.svg b/scene/resources/default_theme/source/button_hover.svg
new file mode 100644
index 0000000000..46a58b1917
--- /dev/null
+++ b/scene/resources/default_theme/source/button_hover.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="button_hover.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/button_hover.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.6900507"
+ inkscape:cy="7.7665583"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:none;fill-opacity:0.19607843;stroke:#70b1ff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/button_normal.svg b/scene/resources/default_theme/source/button_normal.svg
new file mode 100644
index 0000000000..c0fc1f2c5a
--- /dev/null
+++ b/scene/resources/default_theme/source/button_normal.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="button_normal.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/button_hover.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.0075667"
+ inkscape:cy="8.2242067"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:none;fill-opacity:0.19607843;stroke:#788da3;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/button_pressed.svg b/scene/resources/default_theme/source/button_pressed.svg
new file mode 100644
index 0000000000..e761b07eb1
--- /dev/null
+++ b/scene/resources/default_theme/source/button_pressed.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="button_pressed.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/button_pressed.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.7152485"
+ inkscape:cy="9.8535758"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:none;fill-opacity:0.19607843;stroke:#7eff8a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/checked.svg b/scene/resources/default_theme/source/checked.svg
new file mode 100644
index 0000000000..6d2c03f4c5
--- /dev/null
+++ b/scene/resources/default_theme/source/checked.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="checked.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.555527"
+ inkscape:cy="7.1886752"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.78431374;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 2 C 2.8954305 2 2 2.8954305 2 4 L 2 12 C 2 13.104569 2.8954305 14 4 14 L 12 14 C 13.104569 14 14 13.104569 14 12 L 14 4 C 14 2.8954305 13.104569 2 12 2 L 4 2 z M 11.292969 4.2929688 L 12.707031 5.7070312 L 6 12.414062 L 3.2929688 9.7070312 L 4.7070312 8.2929688 L 6 9.5859375 L 11.292969 4.2929688 z "
+ transform="translate(0,1036.3623)"
+ id="circle4178" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/dropdown.svg b/scene/resources/default_theme/source/dropdown.svg
new file mode 100644
index 0000000000..5963e74007
--- /dev/null
+++ b/scene/resources/default_theme/source/dropdown.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="dropdown.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64"
+ inkscape:cx="3.5701039"
+ inkscape:cy="3.3945836"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431374"
+ d="m 1,1047.3622 3,3 3,-3"
+ id="path4503"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/focus.svg b/scene/resources/default_theme/source/focus.svg
new file mode 100644
index 0000000000..4fd463b206
--- /dev/null
+++ b/scene/resources/default_theme/source/focus.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="focus.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64.000003"
+ inkscape:cx="3.8318954"
+ inkscape:cy="6.6190751"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)" />
+</svg>
diff --git a/scene/resources/default_theme/source/frame_focus.svg b/scene/resources/default_theme/source/frame_focus.svg
new file mode 100644
index 0000000000..fba950091a
--- /dev/null
+++ b/scene/resources/default_theme/source/frame_focus.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="frame_focus.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64.000003"
+ inkscape:cx="3.8318954"
+ inkscape:cy="6.6190751"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)" />
+</svg>
diff --git a/scene/resources/default_theme/source/full_panel_bg.svg b/scene/resources/default_theme/source/full_panel_bg.svg
new file mode 100644
index 0000000000..4adceb5254
--- /dev/null
+++ b/scene/resources/default_theme/source/full_panel_bg.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="full_panel_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/full_panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="7.9626269"
+ inkscape:cy="2.5437896"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:#232a32;fill-opacity:1;stroke:#2e3842;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484-6"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/graph_node.svg b/scene/resources/default_theme/source/graph_node.svg
new file mode 100644
index 0000000000..f309f29d9a
--- /dev/null
+++ b/scene/resources/default_theme/source/graph_node.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="70"
+ viewBox="0 0 16 69.999996"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="graph_node.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/full_panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.9999996"
+ inkscape:cx="7.4490379"
+ inkscape:cy="37.697586"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-982.3623)">
+ <path
+ style="opacity:1;fill:#afabf1;fill-opacity:0.78431374;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 1 C 1.3380048 1 0 2.3380048 0 4 L 0 66 C 0 67.661995 1.3380048 69 3 69 L 13 69 C 14.661995 69 16 67.661995 16 66 L 16 4 C 16 2.3380048 14.661995 1 13 1 L 3 1 z M 2 23 L 14 23 L 14 66 C 14 66.554 13.554 67 13 67 L 3 67 C 2.446 67 2 66.554 2 66 L 2 23 z "
+ id="rect4144"
+ transform="translate(0,982.3623)" />
+ <path
+ style="opacity:1;fill:#1d1836;fill-opacity:0.58823532;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1005.3623 0,43 c 0,0.554 0.446,1 1,1 l 10,0 c 0.554,0 1,-0.446 1,-1 l 0,-43 z"
+ id="rect4194"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csssscc" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/graph_node_comment.svg b/scene/resources/default_theme/source/graph_node_comment.svg
new file mode 100644
index 0000000000..4b41b9b3d0
--- /dev/null
+++ b/scene/resources/default_theme/source/graph_node_comment.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="70"
+ viewBox="0 0 16 69.999996"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="graph_node_comment.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/full_panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.9999996"
+ inkscape:cx="7.9593685"
+ inkscape:cy="41.411006"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-982.3623)">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.58823532;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 1 C 1.3380048 1 0 2.3380048 0 4 L 0 66 C 0 67.661995 1.3380048 69 3 69 L 13 69 C 14.661995 69 16 67.661995 16 66 L 16 4 C 16 2.3380048 14.661995 1 13 1 L 3 1 z M 2 23 L 14 23 L 14 66 C 14 66.554 13.554 67 13 67 L 3 67 C 2.446 67 2 66.554 2 66 L 2 23 z "
+ transform="translate(0,982.3623)"
+ id="rect4144" />
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1005.3623 0,43 c 0,0.554 0.446,1 1,1 l 10,0 c 0.554,0 1,-0.446 1,-1 l 0,-43 z"
+ id="rect4194"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csssscc" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/graph_node_comment_focus.svg b/scene/resources/default_theme/source/graph_node_comment_focus.svg
new file mode 100644
index 0000000000..af60130ea0
--- /dev/null
+++ b/scene/resources/default_theme/source/graph_node_comment_focus.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="70"
+ viewBox="0 0 16 69.999996"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="graph_node_comment_focus.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/full_panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.9999997"
+ inkscape:cx="13.69465"
+ inkscape:cy="33.350792"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-982.3623)">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.88235295;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 1 C 1.3380048 1 0 2.3380048 0 4 L 0 66 C 0 67.661995 1.3380048 69 3 69 L 13 69 C 14.661995 69 16 67.661995 16 66 L 16 4 C 16 2.3380048 14.661995 1 13 1 L 3 1 z M 2 23 L 14 23 L 14 66 C 14 66.554 13.554 67 13 67 L 3 67 C 2.446 67 2 66.554 2 66 L 2 23 z "
+ transform="translate(0,982.3623)"
+ id="rect4144" />
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1005.3623 0,43 c 0,0.554 0.446,1 1,1 l 10,0 c 0.554,0 1,-0.446 1,-1 l 0,-43 z"
+ id="rect4194"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csssscc" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/graph_node_position.svg b/scene/resources/default_theme/source/graph_node_position.svg
new file mode 100644
index 0000000000..6d98d8b115
--- /dev/null
+++ b/scene/resources/default_theme/source/graph_node_position.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="70"
+ viewBox="0 0 16 69.999996"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="graph_node_position.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/full_panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="17.794895"
+ inkscape:cy="40.559851"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-982.3623)">
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 1 C 1.3380048 1 0 2.3380048 0 4 L 0 66 C 0 67.661995 1.3380048 69 3 69 L 13 69 C 14.661995 69 16 67.661995 16 66 L 16 4 C 16 2.3380048 14.661995 1 13 1 L 3 1 z M 3 3 L 13 3 C 13.554 3 14 3.446 14 4 L 14 23 L 14 47 L 14 66 C 14 66.554 13.554 67 13 67 L 3 67 C 2.446 67 2 66.554 2 66 L 2 47 L 2 23 L 2 4 C 2 3.446 2.446 3 3 3 z "
+ transform="translate(0,982.3623)"
+ id="rect4144" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/graph_node_selected.svg b/scene/resources/default_theme/source/graph_node_selected.svg
new file mode 100644
index 0000000000..a480cb8ab8
--- /dev/null
+++ b/scene/resources/default_theme/source/graph_node_selected.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="70"
+ viewBox="0 0 16 69.999996"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="graph_node_selected.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/full_panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.9999996"
+ inkscape:cx="29.199039"
+ inkscape:cy="37.947586"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-982.3623)">
+ <path
+ style="opacity:1;fill:#cac8f6;fill-opacity:0.88235295;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 1 C 1.3380048 1 0 2.3380048 0 4 L 0 66 C 0 67.661995 1.3380048 69 3 69 L 13 69 C 14.661995 69 16 67.661995 16 66 L 16 4 C 16 2.3380048 14.661995 1 13 1 L 3 1 z M 2 23 L 14 23 L 14 66 C 14 66.554 13.554 67 13 67 L 3 67 C 2.446 67 2 66.554 2 66 L 2 23 z "
+ id="rect4144"
+ transform="translate(0,982.3623)" />
+ <path
+ style="opacity:1;fill:#1d1836;fill-opacity:0.58823532;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1005.3623 0,43 c 0,0.554 0.446,1 1,1 l 10,0 c 0.554,0 1,-0.446 1,-1 l 0,-43 z"
+ id="rect4194"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csssscc" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/hseparator.svg b/scene/resources/default_theme/source/hseparator.svg
new file mode 100644
index 0000000000..4bf5381240
--- /dev/null
+++ b/scene/resources/default_theme/source/hseparator.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="hseparator.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64.000004"
+ inkscape:cx="1.1715704"
+ inkscape:cy="4.26452"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)" />
+</svg>
diff --git a/scene/resources/default_theme/source/hslider_bg.svg b/scene/resources/default_theme/source/hslider_bg.svg
new file mode 100644
index 0000000000..f247904a33
--- /dev/null
+++ b/scene/resources/default_theme/source/hslider_bg.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="hslider_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.463221"
+ inkscape:cy="6.5721301"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <path
+ style="fill:#000000;fill-opacity:0.19607843;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 4 5 A 3 3 0 0 0 1 8 A 3 3 0 0 0 4 11 L 12 11 A 3 3 0 0 0 15 8 A 3 3 0 0 0 12 5 L 4 5 z "
+ transform="translate(0,1036.3623)"
+ id="path814" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/hslider_grabber.svg b/scene/resources/default_theme/source/hslider_grabber.svg
new file mode 100644
index 0000000000..a222edd37e
--- /dev/null
+++ b/scene/resources/default_theme/source/hslider_grabber.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="hslider_grabber.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.6109686"
+ inkscape:cy="6.3424144"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <circle
+ r="6.9999943"
+ cy="1044.3623"
+ cx="8.0000057"
+ id="circle4262"
+ style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/hslider_grabber_hl.svg b/scene/resources/default_theme/source/hslider_grabber_hl.svg
new file mode 100644
index 0000000000..d53aa5c0e9
--- /dev/null
+++ b/scene/resources/default_theme/source/hslider_grabber_hl.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="hslider_grabber_hl.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.0748113"
+ inkscape:cy="6.0432589"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <circle
+ r="6.9999943"
+ cy="1044.3623"
+ cx="8.0000057"
+ id="circle4262"
+ style="fill:#7eff8a;fill-opacity:1;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/hsplitter.svg b/scene/resources/default_theme/source/hsplitter.svg
new file mode 100644
index 0000000000..01c893fc56
--- /dev/null
+++ b/scene/resources/default_theme/source/hsplitter.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="64"
+ viewBox="0 0 8 64"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="hsplitter.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313709"
+ inkscape:cx="-2.0338296"
+ inkscape:cy="39.22669"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-988.3622)">
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.39215687;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 4,990.3622 v 60"
+ id="path814"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/icon_close.svg b/scene/resources/default_theme/source/icon_close.svg
index 6e6ec16638..f0eb83f54d 100644
--- a/scene/resources/default_theme/source/icon_close.svg
+++ b/scene/resources/default_theme/source/icon_close.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="22.627418"
- inkscape:cx="1.8501874"
- inkscape:cy="8.0543329"
+ inkscape:zoom="45.254836"
+ inkscape:cx="7.6258883"
+ inkscape:cy="7.576455"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -69,26 +69,15 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
- <g
- id="layer1-4"
- inkscape:label="Layer 1"
- transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,-736.13242,311.54347)"
- style="fill:#080808;fill-opacity:1">
- <rect
- y="1043.3622"
- x="1"
- height="1.9999478"
- width="14"
- id="rect4137"
- style="fill:#080808;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#080808;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4158"
- width="13.999966"
- height="2.0000017"
- x="1037.3622"
- y="-9" />
- </g>
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.39215687;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 4,1040.3622 8,8"
+ id="path814"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.39215687;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 4,1048.3622 8,-8"
+ id="path816"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/line_edit.svg b/scene/resources/default_theme/source/line_edit.svg
new file mode 100644
index 0000000000..bcddf8bf7f
--- /dev/null
+++ b/scene/resources/default_theme/source/line_edit.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="line_edit.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/tab_container_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.5104007"
+ inkscape:cy="4.8259288"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-nodes="false"
+ inkscape:snap-bbox-midpoints="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:#303b46;fill-opacity:1;stroke:#2c3640;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484-6"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#788da3;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,11 c 0,1.661997 1.3380026,3 3,3 h 6 c 1.661997,0 3,-1.338003 3,-3"
+ id="rect4503"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssc"
+ transform="translate(0,1036.3623)" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/line_edit_active.svg b/scene/resources/default_theme/source/line_edit_active.svg
new file mode 100644
index 0000000000..e823138141
--- /dev/null
+++ b/scene/resources/default_theme/source/line_edit_active.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="line_edit_selected.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/tab_container_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="6.0294685"
+ inkscape:cy="5.7319094"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-nodes="false"
+ inkscape:snap-bbox-midpoints="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:#303b46;fill-opacity:1;stroke:#2c3640;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484-6"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#7eff8a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,11 c 0,1.661997 1.3380026,3 3,3 h 6 c 1.661997,0 3,-1.338003 3,-3"
+ id="rect4503"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssc"
+ transform="translate(0,1036.3623)" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/line_edit_disabled.svg b/scene/resources/default_theme/source/line_edit_disabled.svg
new file mode 100644
index 0000000000..9e60d7ccbd
--- /dev/null
+++ b/scene/resources/default_theme/source/line_edit_disabled.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="line_edit_disabled.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/tab_container_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.2717731"
+ inkscape:cy="8.8637422"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:#303b46;fill-opacity:1;stroke:#2c3640;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484-6"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#425468;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1047.3623 c 0,1.662 1.338003,3 3,3 h 6 c 1.661997,0 3,-1.338 3,-3"
+ id="rect4503"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssc" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/option_arrow.svg b/scene/resources/default_theme/source/option_arrow.svg
index cd78404ff1..5cd943e9e3 100644
--- a/scene/resources/default_theme/source/option_arrow.svg
+++ b/scene/resources/default_theme/source/option_arrow.svg
@@ -14,7 +14,7 @@
viewBox="0 0 12 12"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="45.254836"
- inkscape:cx="6.0969578"
- inkscape:cy="7.5632913"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.1667338"
+ inkscape:cy="5.9875884"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -61,7 +61,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -71,16 +71,10 @@
id="layer1"
transform="translate(0,-1040.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 3,1045.3622 6,0 -3,-4 z"
- id="path4158"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:connector-curvature="0"
- id="path4160"
- d="m 3,1047.3622 6,0 -3,4 z"
- style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- sodipodi:nodetypes="cccc" />
+ 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:0.78431374;fill-rule:nonzero;stroke:none;stroke-width:2;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 9.9999996,1043.3583 c -0.2637796,0.01 -0.5144012,0.1165 -0.697265,0.3067 l -3.292969,3.2929 -3.2929688,-3.2929 C 2.5285367,1043.4714 2.2700113,1043.3622 2,1043.3622 c -0.8974208,2e-4 -1.34038281,1.0909 -0.6972656,1.7168 l 4,4 c 0.3905299,0.3904 1.0235325,0.3904 1.4140624,0 l 4.0000002,-4 c 0.657344,-0.6321 0.194906,-1.7422 -0.7167974,-1.7207 z"
+ id="path4484"
+ sodipodi:nodetypes="cccccccccc" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/panel_bg.svg b/scene/resources/default_theme/source/panel_bg.svg
new file mode 100644
index 0000000000..5115d3d0ac
--- /dev/null
+++ b/scene/resources/default_theme/source/panel_bg.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 7.9999995"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="panel_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="6.4834446"
+ inkscape:cy="3.3875925"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3623)">
+ <rect
+ style="opacity:1;fill:#232a32;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4213"
+ width="8"
+ height="7.999999"
+ x="0"
+ y="1044.3623" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/popup_bg.svg b/scene/resources/default_theme/source/popup_bg.svg
new file mode 100644
index 0000000000..cbf356aec0
--- /dev/null
+++ b/scene/resources/default_theme/source/popup_bg.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="popup_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/popup_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.6514997"
+ inkscape:cy="9.5440638"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <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:#000000;fill-opacity:0.19607843;fill-rule:nonzero;stroke:none;stroke-width:1.77777672;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 4.4453125,1036.3633 C 1.9984702,1036.3633 0,1038.3598 0,1040.8066 v 7.1114 c 0,2.4468 1.9984702,4.4453 4.4453125,4.4453 H 11.554688 C 14.00153,1052.3633 16,1050.3648 16,1047.918 v -7.1114 c 0,-2.4468 -1.99847,-4.4433 -4.445312,-4.4433 z"
+ id="rect4497"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssss" />
+ <rect
+ style="fill:#394653;fill-opacity:1;stroke:#455463;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/popup_window.svg b/scene/resources/default_theme/source/popup_window.svg
new file mode 100644
index 0000000000..43aabb3ca2
--- /dev/null
+++ b/scene/resources/default_theme/source/popup_window.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="20"
+ height="36"
+ viewBox="0 0 20 35.999998"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="popup_window.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/full_panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="10.268488"
+ inkscape:cy="24.750533"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1016.3623)">
+ <rect
+ style="fill:#000000;fill-opacity:0.19607843;stroke:none;stroke-width:1.8106823;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4499"
+ width="18"
+ height="33.999996"
+ x="1"
+ y="1017.3623"
+ ry="5.9999952" />
+ <rect
+ ry="4.9999952"
+ y="1018.3623"
+ x="2"
+ height="31.999996"
+ width="16"
+ id="rect4497"
+ style="fill:#000000;fill-opacity:0.19607843;stroke:none;stroke-width:1.65615714;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#394653;fill-opacity:1;stroke:#455463;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484"
+ width="12"
+ height="27.999996"
+ x="4"
+ y="1020.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/progress_bar.svg b/scene/resources/default_theme/source/progress_bar.svg
new file mode 100644
index 0000000000..ddaac73547
--- /dev/null
+++ b/scene/resources/default_theme/source/progress_bar.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="progress_bar.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/popup_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.2769476"
+ inkscape:cy="8.8116358"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)" />
+</svg>
diff --git a/scene/resources/default_theme/source/progress_fill.svg b/scene/resources/default_theme/source/progress_fill.svg
new file mode 100644
index 0000000000..99b6a45bf5
--- /dev/null
+++ b/scene/resources/default_theme/source/progress_fill.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="progress_fill.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/popup_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.2752007"
+ inkscape:cy="7.6135176"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <circle
+ style="fill:#7eff8a;fill-opacity:1;stroke:none;stroke-width:1.0285722;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path816"
+ cx="8"
+ cy="1044.3623"
+ r="6.0000048" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/radio_checked.svg b/scene/resources/default_theme/source/radio_checked.svg
new file mode 100644
index 0000000000..cbfb407bf2
--- /dev/null
+++ b/scene/resources/default_theme/source/radio_checked.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="radio_checked.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="4.875052"
+ inkscape:cy="10.187321"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.78431374;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 8 2 A 6 6 0 0 0 2 8 A 6 6 0 0 0 8 14 A 6 6 0 0 0 14 8 A 6 6 0 0 0 8 2 z M 8 4 A 4 4 0 0 1 12 8 A 4 4 0 0 1 8 12 A 4 4 0 0 1 4 8 A 4 4 0 0 1 8 4 z "
+ transform="translate(0,1036.3623)"
+ id="path4154" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.78431374;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="circle4158"
+ cx="8"
+ cy="1044.3623"
+ r="3" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/radio_unchecked.svg b/scene/resources/default_theme/source/radio_unchecked.svg
new file mode 100644
index 0000000000..0e3aaae6d9
--- /dev/null
+++ b/scene/resources/default_theme/source/radio_unchecked.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="radio_unchecked.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="-0.63112348"
+ inkscape:cy="10.614735"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.78431374;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 8 2 A 6 6 0 0 0 2 8 A 6 6 0 0 0 8 14 A 6 6 0 0 0 14 8 A 6 6 0 0 0 8 2 z M 8 4 A 4 4 0 0 1 12 8 A 4 4 0 0 1 8 12 A 4 4 0 0 1 4 8 A 4 4 0 0 1 8 4 z "
+ transform="translate(0,1036.3623)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_bg.svg b/scene/resources/default_theme/source/scroll_bg.svg
new file mode 100644
index 0000000000..29604b9e14
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_bg.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="4.4464273"
+ inkscape:cy="6.9717582"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)" />
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_button_down.svg b/scene/resources/default_theme/source/scroll_button_down.svg
new file mode 100644
index 0000000000..078cc5c37c
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_button_down.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_button_down.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="1.4098045"
+ inkscape:cy="5.764877"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <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:0.27450982;fill-rule:nonzero;stroke:none;stroke-width:2;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 10.023438,1044.3535 a 1.0001,1.0001 0 0 0 -0.6230474,0.209 L 6,1047.1113 2.5996094,1044.5625 a 1.0001,1.0001 0 1 0 -1.1992188,1.5996 l 4,3 a 1.0001,1.0001 0 0 0 1.1992188,0 l 3.9999996,-3 a 1.0001,1.0001 0 0 0 -0.576171,-1.8086 z"
+ id="path4511"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_button_down_hl.svg b/scene/resources/default_theme/source/scroll_button_down_hl.svg
new file mode 100644
index 0000000000..f0b461f037
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_button_down_hl.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_button_down_hl.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="5.8513188"
+ inkscape:cy="5.8532653"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <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:#7eff8a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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 10.023438,1044.3535 a 1.0001,1.0001 0 0 0 -0.6230474,0.209 L 6,1047.1113 2.5996094,1044.5625 a 1.0001,1.0001 0 1 0 -1.1992188,1.5996 l 4,3 a 1.0001,1.0001 0 0 0 1.1992188,0 l 3.9999996,-3 a 1.0001,1.0001 0 0 0 -0.576171,-1.8086 z"
+ id="path4511"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_button_left.svg b/scene/resources/default_theme/source/scroll_button_left.svg
new file mode 100644
index 0000000000..22d7f42001
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_button_left.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_button_left.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="4.5296015"
+ inkscape:cy="7.0872243"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.27450982"
+ d="m 6.999975,1042.3623 -3,4 3,4"
+ id="path4511"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_button_left_hl.svg b/scene/resources/default_theme/source/scroll_button_left_hl.svg
new file mode 100644
index 0000000000..22c24aae22
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_button_left_hl.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_button_left_hl.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="4.238333"
+ inkscape:cy="6.998836"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <path
+ style="fill:none;stroke:#7eff8a;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6.999975,1042.3623 -3,4 3,4"
+ id="path4511"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_button_right.svg b/scene/resources/default_theme/source/scroll_button_right.svg
new file mode 100644
index 0000000000..95afabf006
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_button_right.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_button_right.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.1153879"
+ inkscape:cy="6.4685059"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <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:0.2745098;fill-rule:nonzero;stroke:none;stroke-width:2;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 5.0332031,1041.3516 a 1.0001,1.0001 0 0 0 -0.8339843,1.6113 l 2.5507812,3.3984 -2.5507812,3.4004 a 1.000985,1.000985 0 1 0 1.6015624,1.2012 l 3,-4 a 1.0001,1.0001 0 0 0 0,-1.2012 l -3,-4 a 1.0001,1.0001 0 0 0 -0.7675781,-0.4101 z"
+ id="path4511"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_button_right_hl.svg b/scene/resources/default_theme/source/scroll_button_right_hl.svg
new file mode 100644
index 0000000000..c836c2975b
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_button_right_hl.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_button_right_hl.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.1153879"
+ inkscape:cy="6.4685059"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <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:#7eff8a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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 5.0332031,1041.3516 a 1.0001,1.0001 0 0 0 -0.8339843,1.6113 l 2.5507812,3.3984 -2.5507812,3.4004 a 1.000985,1.000985 0 1 0 1.6015624,1.2012 l 3,-4 a 1.0001,1.0001 0 0 0 0,-1.2012 l -3,-4 a 1.0001,1.0001 0 0 0 -0.7675781,-0.4101 z"
+ id="path4511"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_button_up.svg b/scene/resources/default_theme/source/scroll_button_up.svg
new file mode 100644
index 0000000000..90107666c9
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_button_up.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_button_up.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="1.4098045"
+ inkscape:cy="5.764877"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <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:0.27450982;fill-rule:nonzero;stroke:none;stroke-width:2;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 10.023438,1048.3706 a 1.0001,1.0001 0 0 1 -0.6230474,-0.209 L 6,1045.6128 l -3.4003906,2.5488 a 1.0001,1.0001 0 1 1 -1.1992188,-1.5996 l 4,-3 a 1.0001,1.0001 0 0 1 1.1992188,0 l 3.9999996,3 a 1.0001,1.0001 0 0 1 -0.576171,1.8086 z"
+ id="path4511"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_button_up_hl.svg b/scene/resources/default_theme/source/scroll_button_up_hl.svg
new file mode 100644
index 0000000000..b5f92e0f8a
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_button_up_hl.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_button_up_hl.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="1.4098045"
+ inkscape:cy="5.764877"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <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:#7eff8a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;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 10.023438,1048.3706 a 1.0001,1.0001 0 0 1 -0.6230474,-0.209 L 6,1045.6128 l -3.4003906,2.5488 a 1.0001,1.0001 0 1 1 -1.1992188,-1.5996 l 4,-3 a 1.0001,1.0001 0 0 1 1.1992188,0 l 3.9999996,3 a 1.0001,1.0001 0 0 1 -0.576171,1.8086 z"
+ id="path4511"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_grabber.svg b/scene/resources/default_theme/source/scroll_grabber.svg
new file mode 100644
index 0000000000..b9d2bbbec0
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_grabber.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_grabber.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="1.3086411"
+ inkscape:cy="6.9275641"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <circle
+ style="opacity:1;fill:#ffffff;fill-opacity:0.27450982;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4239"
+ cx="6"
+ cy="1046.3623"
+ r="2" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/scroll_grabber_hl.svg b/scene/resources/default_theme/source/scroll_grabber_hl.svg
new file mode 100644
index 0000000000..88f4317b8d
--- /dev/null
+++ b/scene/resources/default_theme/source/scroll_grabber_hl.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 11.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="scroll_grabber_hl.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="1.4412236"
+ inkscape:cy="5.623836"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3623)">
+ <circle
+ style="opacity:1;fill:#7eff8a;fill-opacity:1;stroke:none;stroke-width:2.24999642;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4239"
+ cx="6"
+ cy="1046.3623"
+ r="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/selection.svg b/scene/resources/default_theme/source/selection.svg
new file mode 100644
index 0000000000..7346191195
--- /dev/null
+++ b/scene/resources/default_theme/source/selection.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="selection.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/button_pressed.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.5458029"
+ inkscape:cy="7.3443927"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:none;fill-opacity:0.19607843;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.35294119"
+ id="rect823"
+ width="14"
+ height="9.9999952"
+ x="1"
+ y="1039.3623"
+ ry="3.9999952" />
+ <rect
+ ry="2.9999952"
+ y="1040.3623"
+ x="1.9999952"
+ height="7.9999952"
+ width="12.00001"
+ id="rect825"
+ style="fill:#ffffff;fill-opacity:0.19607843;stroke:none;stroke-width:1.71428704;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/selection_oof.svg b/scene/resources/default_theme/source/selection_oof.svg
new file mode 100644
index 0000000000..f12b066a52
--- /dev/null
+++ b/scene/resources/default_theme/source/selection_oof.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="selection_oof.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/button_pressed.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="-2.3310576"
+ inkscape:cy="4.9359914"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:none;fill-opacity:0.19607843;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.35294119"
+ id="rect823"
+ width="14"
+ height="14"
+ x="1"
+ y="1037.3623"
+ ry="3.9999952" />
+ <rect
+ ry="2.9999952"
+ y="1038.3623"
+ x="1.9999954"
+ height="12.00001"
+ width="12.00001"
+ id="rect825"
+ style="fill:#ffffff;fill-opacity:0.19607843;stroke:none;stroke-width:1.71428704;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/spinbox_updown.svg b/scene/resources/default_theme/source/spinbox_updown.svg
index 5b8e0a83eb..e29d7fe0d2 100644
--- a/scene/resources/default_theme/source/spinbox_updown.svg
+++ b/scene/resources/default_theme/source/spinbox_updown.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -28,11 +28,11 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="45.254834"
- inkscape:cx="5.7914867"
- inkscape:cy="9.8174296"
+ inkscape:zoom="16"
+ inkscape:cx="-1.901723"
+ inkscape:cy="9.1326297"
inkscape:document-units="px"
- inkscape:current-layer="layer1"
+ inkscape:current-layer="layer1-5"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -71,16 +71,13 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 4,1042.3622 8,0 -4,-5 z"
- id="path4158"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:connector-curvature="0"
- id="path4160"
- d="m 4,1046.3622 8,0 -4,5 z"
- style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- sodipodi:nodetypes="cccc" />
+ 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:#e0e0e0;fill-opacity:0.78431374;fill-rule:nonzero;stroke:none;stroke-width:2;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 7.984375 1.0019531 A 1.0001 1.0001 0 0 0 7.2929688 1.2929688 L 3.2929688 5.2929688 A 1.0001 1.0001 0 1 0 4.7070312 6.7070312 L 8 3.4140625 L 11.292969 6.7070312 A 1.0001 1.0001 0 1 0 12.707031 5.2929688 L 8.7070312 1.2929688 A 1.0001 1.0001 0 0 0 7.984375 1.0019531 z M 11.990234 8.9863281 A 1.0001 1.0001 0 0 0 11.292969 9.2929688 L 8 12.585938 L 4.7070312 9.2929688 A 1.0001 1.0001 0 0 0 3.9902344 8.9902344 A 1.0001 1.0001 0 0 0 3.2929688 10.707031 L 7.2929688 14.707031 A 1.0001 1.0001 0 0 0 8.7070312 14.707031 L 12.707031 10.707031 A 1.0001 1.0001 0 0 0 11.990234 8.9863281 z "
+ transform="translate(0,1036.3622)"
+ id="path4484" />
+ <g
+ id="layer1-5"
+ inkscape:label="Layer 1"
+ transform="translate(14.210182,-5.3664)" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/submenu.svg b/scene/resources/default_theme/source/submenu.svg
index ef7f696571..927338d9bb 100644
--- a/scene/resources/default_theme/source/submenu.svg
+++ b/scene/resources/default_theme/source/submenu.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 8"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="64.000003"
- inkscape:cx="1.4039962"
- inkscape:cy="5.6866955"
+ inkscape:cx="5.7489132"
+ inkscape:cy="3.1277668"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -71,10 +71,9 @@
id="layer1"
transform="translate(0,-1044.3622)">
<path
- style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1,1052.3622 3,0 3,-4 -3,-4 -3,0 z"
- id="rect4174"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
+ style="fill:none;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.78431374;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 3,1045.3622 3,3 -3,3"
+ id="path814"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/tab.svg b/scene/resources/default_theme/source/tab.svg
new file mode 100644
index 0000000000..612977953a
--- /dev/null
+++ b/scene/resources/default_theme/source/tab.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="tab.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="-2.6446005"
+ inkscape:cy="5.445875"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <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:0.07843138;fill-rule:nonzero;stroke:none;stroke-width:2;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 8,3.984375 c -4,2.6770833 -2,1.3385417 0,0 z M 8,4 C 7.9958579,3.7402262 7.8907874,3.4766349 7.7070312,3.2929688 l -3,-3.00000005 C 4.5187601,0.09943602 4.2602361,-0.00974989 3.9902344,-0.00976563 3.0928174,-0.00952997 2.6498571,1.0811201 3.2929688,1.7070312 L 4.5859375,3 H 0 V 5 L 4.5859375,5 3.2929688,6.2929688 C 2.3113156,7.2354775 3.7645225,8.6886844 4.7070312,7.7070312 l 3,-3 C 7.898443,4.5157079 8.0041444,4.2706029 8,4 Z"
+ transform="translate(0,1044.3622)"
+ id="path814"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/tab_behind.svg b/scene/resources/default_theme/source/tab_behind.svg
new file mode 100644
index 0000000000..5fa84ffda5
--- /dev/null
+++ b/scene/resources/default_theme/source/tab_behind.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="tab_behind.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/tab_behind.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="10.899138"
+ inkscape:cy="7.5918468"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)" />
+</svg>
diff --git a/scene/resources/default_theme/source/tab_close.svg b/scene/resources/default_theme/source/tab_close.svg
index 65b71ae860..f85518665b 100644
--- a/scene/resources/default_theme/source/tab_close.svg
+++ b/scene/resources/default_theme/source/tab_close.svg
@@ -14,11 +14,11 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
- sodipodi:docname="icon_close.svg">
+ sodipodi:docname="tab_close.svg">
<defs
id="defs4" />
<sodipodi:namedview
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="22.627418"
- inkscape:cx="3.3969834"
- inkscape:cy="11.678255"
+ inkscape:zoom="45.254836"
+ inkscape:cx="9.2858482"
+ inkscape:cy="8.0181058"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1">
@@ -60,7 +60,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -69,25 +69,15 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
- <g
- id="layer1-4"
- inkscape:label="Layer 1"
- transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,-736.13242,311.54347)">
- <rect
- y="1043.3622"
- x="1"
- height="1.9999478"
- width="14"
- id="rect4137"
- style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4158"
- width="13.999966"
- height="2.0000017"
- x="1037.3622"
- y="-9" />
- </g>
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.39215687;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 4,1048.3622 8,-8"
+ id="path819"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.39215687;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 4,1040.3622 8,8"
+ id="path821"
+ inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/tab_container_bg.svg b/scene/resources/default_theme/source/tab_container_bg.svg
new file mode 100644
index 0000000000..d19cb7cfa1
--- /dev/null
+++ b/scene/resources/default_theme/source/tab_container_bg.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="tab_container_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/tab_container_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.1997709"
+ inkscape:cy="8.5220258"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:#36424e;fill-opacity:1;stroke:#323d48;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484-6"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/tab_current.svg b/scene/resources/default_theme/source/tab_current.svg
new file mode 100644
index 0000000000..e43a83c3ec
--- /dev/null
+++ b/scene/resources/default_theme/source/tab_current.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="tab_current.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/tab_current.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="9.2059746"
+ inkscape:cy="6.5875113"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <path
+ style="fill:#36424e;fill-opacity:1;stroke:#323d48;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 14,16 V 5 C 14,3.3380026 12.661997,2 11,2 H 5 C 3.3380026,2 2,3.3380026 2,5 v 11"
+ transform="translate(0,1036.3623)"
+ id="rect4484-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsscc" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/tab_menu.svg b/scene/resources/default_theme/source/tab_menu.svg
index 84f7c8095a..39e0d1f261 100644
--- a/scene/resources/default_theme/source/tab_menu.svg
+++ b/scene/resources/default_theme/source/tab_menu.svg
@@ -14,7 +14,7 @@
viewBox="0 0 16 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -28,9 +28,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="45.254836"
- inkscape:cx="6.2944765"
- inkscape:cy="7.7343939"
+ inkscape:zoom="32.000001"
+ inkscape:cx="4.0814179"
+ inkscape:cy="8.4695645"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -70,11 +70,23 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
- <path
- style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 4,1044.3622 0,3 4,3 4,-3 0,-3 z"
- id="rect4174"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
+ <circle
+ style="fill:#ffffff;fill-opacity:0.39215687;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.35294118"
+ id="path819"
+ cx="8"
+ cy="1038.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1044.3622"
+ cx="8"
+ id="circle821"
+ style="fill:#ffffff;fill-opacity:0.39215687;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.35294118" />
+ <circle
+ style="fill:#ffffff;fill-opacity:0.39215687;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.35294118"
+ id="circle823"
+ cx="8"
+ cy="1050.3622"
+ r="2" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/toggle_off.svg b/scene/resources/default_theme/source/toggle_off.svg
new file mode 100644
index 0000000000..e5bf0e9809
--- /dev/null
+++ b/scene/resources/default_theme/source/toggle_off.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="32"
+ viewBox="0 0 64 31.999998"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="toggle_off.svg"
+ inkscape:export-filename="/home/djrm/Projects/gd_theme/assets/check_btn_off.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313709"
+ inkscape:cx="35.30642"
+ inkscape:cy="10.306683"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3623)">
+ <path
+ style="fill:#000000;fill-opacity:0.19607843;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 24 6 A 10.000006 10.000006 0 0 0 14 16 A 10.000006 10.000006 0 0 0 24 26 L 40 26 A 9.9999943 9.9999943 0 0 0 50 16 A 9.9999943 9.9999943 0 0 0 40 6 L 24 6 z "
+ transform="translate(0,1020.3623)"
+ id="circle4160" />
+ <circle
+ r="7.9999924"
+ cy="1036.3623"
+ cx="-24.000006"
+ id="circle4138"
+ style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/toggle_on.svg b/scene/resources/default_theme/source/toggle_on.svg
new file mode 100644
index 0000000000..f8b55a853d
--- /dev/null
+++ b/scene/resources/default_theme/source/toggle_on.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="32"
+ viewBox="0 0 64 31.999998"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="toggle_on.svg"
+ inkscape:export-filename="/home/djrm/Projects/gd_theme/assets/check_btn_on.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.000001"
+ inkscape:cx="31.866725"
+ inkscape:cy="13.213395"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3623)">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#000000;fill-opacity:0.19607843;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 40.000015,1026.3623 a 10.000006,10.000006 0 0 1 10,10 10.000006,10.000006 0 0 1 -10,10 h -16 a 9.9999943,9.9999943 0 0 1 -10,-10 9.9999943,9.9999943 0 0 1 10,-10 z"
+ id="circle4160" />
+ <circle
+ r="7.9999924"
+ cy="1036.3623"
+ cx="40.000008"
+ id="circle4138"
+ style="fill:#7eff8a;fill-opacity:1;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/tooltip_bg.svg b/scene/resources/default_theme/source/tooltip_bg.svg
new file mode 100644
index 0000000000..84da6fe984
--- /dev/null
+++ b/scene/resources/default_theme/source/tooltip_bg.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="tooltip_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/button_pressed.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.4290295"
+ inkscape:cy="8.0937882"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.78431373;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 3,1036.3623 c -1.661997,0 -3,1.338 -3,3 v 10 c 0,1.662 1.338003,3 3,3 h 10 c 1.661997,0 3,-1.338 3,-3 v -10 c 0,-1.662 -1.338003,-3 -3,-3 z m 0,2 h 10 c 0.553997,0 1,0.446 1,1 v 10 c 0,0.554 -0.446003,1 -1,1 H 3 c -0.553997,0 -1,-0.446 -1,-1 v -10 c 0,-0.554 0.446003,-1 1,-1 z"
+ id="rect4166"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:0.68627451;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4137"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="0.99999481" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/tree_bg.svg b/scene/resources/default_theme/source/tree_bg.svg
new file mode 100644
index 0000000000..ba39010421
--- /dev/null
+++ b/scene/resources/default_theme/source/tree_bg.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="tree_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000002"
+ inkscape:cx="1.8744117"
+ inkscape:cy="8.3113002"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="fill:#2b353f;fill-opacity:1;stroke:#252e37;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4484-6"
+ width="12"
+ height="12"
+ x="2"
+ y="1038.3623"
+ ry="2.9999952" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/tree_title.svg b/scene/resources/default_theme/source/tree_title.svg
new file mode 100644
index 0000000000..f7140f3aff
--- /dev/null
+++ b/scene/resources/default_theme/source/tree_title.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="tree_title.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/popup_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="11.133501"
+ inkscape:cy="7.000622"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="opacity:1;fill:#000000;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4158"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3623" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/tree_title_pressed.svg b/scene/resources/default_theme/source/tree_title_pressed.svg
new file mode 100644
index 0000000000..a1a6cd5a89
--- /dev/null
+++ b/scene/resources/default_theme/source/tree_title_pressed.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="tree_title_pressed.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/popup_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.414751"
+ inkscape:cy="7.219372"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <rect
+ style="opacity:1;fill:#000000;fill-opacity:0.27450982;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4158"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3623" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/unchecked.svg b/scene/resources/default_theme/source/unchecked.svg
new file mode 100644
index 0000000000..053cbe6de5
--- /dev/null
+++ b/scene/resources/default_theme/source/unchecked.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="unchecked.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/unchecked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.8224661"
+ inkscape:cy="8.2065809"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.78431374;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 2 A 2 2 0 0 0 2 4 L 2 12 A 2 2 0 0 0 4 14 L 12 14 A 2 2 0 0 0 14 12 L 14 4 A 2 2 0 0 0 12 2 L 4 2 z M 4.8007812 4 L 11.199219 4 A 0.8000012 0.8000012 0 0 1 12 4.8007812 L 12 11.199219 A 0.8000012 0.8000012 0 0 1 11.199219 12 L 4.8007812 12 A 0.8000012 0.8000012 0 0 1 4 11.199219 L 4 4.8007812 A 0.8000012 0.8000012 0 0 1 4.8007812 4 z "
+ transform="translate(0,1036.3623)"
+ id="circle4178" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/updown.svg b/scene/resources/default_theme/source/updown.svg
index adc72b405d..24e4ed0f23 100644
--- a/scene/resources/default_theme/source/updown.svg
+++ b/scene/resources/default_theme/source/updown.svg
@@ -14,7 +14,7 @@
viewBox="0 0 8 16"
id="svg2"
version="1.1"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.1 r"
inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
inkscape:export-xdpi="45"
inkscape:export-ydpi="45"
@@ -29,8 +29,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="32.000001"
- inkscape:cx="-3.4436559"
- inkscape:cy="10.099799"
+ inkscape:cx="-0.193656"
+ inkscape:cy="9.787299"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@@ -42,8 +42,8 @@
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
@@ -71,7 +71,7 @@
id="layer1"
transform="translate(0,-1036.3622)">
<path
- style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431374"
d="m 1,1042.3565 3,-2.9943 3,2.9943"
id="path4155"
inkscape:connector-curvature="0"
@@ -80,7 +80,7 @@
inkscape:connector-curvature="0"
id="path4159"
d="m 1,1046.3622 3,3 3,-3"
- style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431374"
sodipodi:nodetypes="ccc" />
</g>
</svg>
diff --git a/scene/resources/default_theme/source/vseparator.svg b/scene/resources/default_theme/source/vseparator.svg
new file mode 100644
index 0000000000..40c2c674a1
--- /dev/null
+++ b/scene/resources/default_theme/source/vseparator.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="vseparator.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="5.3201856"
+ inkscape:cy="4.9836785"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)" />
+</svg>
diff --git a/scene/resources/default_theme/source/vslider_bg.svg b/scene/resources/default_theme/source/vslider_bg.svg
new file mode 100644
index 0000000000..b34dddc2d0
--- /dev/null
+++ b/scene/resources/default_theme/source/vslider_bg.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="vslider_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="10.537518"
+ inkscape:cy="7.6498812"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <g
+ id="layer1-5"
+ inkscape:label="Layer 1"
+ transform="rotate(90,8,1044.3623)">
+ <path
+ id="path814"
+ transform="translate(0,1036.3623)"
+ d="m 4,5 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 h 8 A 3,3 0 0 0 15,8 3,3 0 0 0 12,5 Z"
+ style="fill:#000000;fill-opacity:0.19607843;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/vslider_grabber.svg b/scene/resources/default_theme/source/vslider_grabber.svg
new file mode 100644
index 0000000000..76703daa54
--- /dev/null
+++ b/scene/resources/default_theme/source/vslider_grabber.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="vslider_grabber.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.8922186"
+ inkscape:cy="6.4674144"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <circle
+ r="6.9999943"
+ cy="1044.3623"
+ cx="8.0000057"
+ id="circle4262"
+ style="fill:#d3d3d3;fill-opacity:1;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/vslider_grabber_hl.svg b/scene/resources/default_theme/source/vslider_grabber_hl.svg
new file mode 100644
index 0000000000..b688130f24
--- /dev/null
+++ b/scene/resources/default_theme/source/vslider_grabber_hl.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="vslider_grabber_hl.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/checked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.0748113"
+ inkscape:cy="6.0432589"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <circle
+ r="6.9999943"
+ cy="1044.3623"
+ cx="8.0000057"
+ id="circle4262"
+ style="fill:#7eff8a;fill-opacity:1;stroke:none;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/vsplit_bg.svg b/scene/resources/default_theme/source/vsplit_bg.svg
new file mode 100644
index 0000000000..e11940cf53
--- /dev/null
+++ b/scene/resources/default_theme/source/vsplit_bg.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 7.9999995"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="vsplit_bg.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/panel_bg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64.000003"
+ inkscape:cx="-1.1524794"
+ inkscape:cy="3.8847002"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3623)">
+ <rect
+ style="opacity:1;fill:#000000;fill-opacity:0.09803922;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4213"
+ width="8"
+ height="7.999999"
+ x="0"
+ y="1044.3623" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/vsplitter.svg b/scene/resources/default_theme/source/vsplitter.svg
new file mode 100644
index 0000000000..80f7c2ce12
--- /dev/null
+++ b/scene/resources/default_theme/source/vsplitter.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="8"
+ viewBox="0 0 64 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="vsplitter.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="59.744611"
+ inkscape:cy="0.46378871"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1600"
+ inkscape:window-height="836"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.39215687;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 2,1048.3622 H 62"
+ id="path814"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/source/window_resizer.svg b/scene/resources/default_theme/source/window_resizer.svg
new file mode 100644
index 0000000000..ef92d64be0
--- /dev/null
+++ b/scene/resources/default_theme/source/window_resizer.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 15.999999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="window_resizer.svg"
+ inkscape:export-filename="/home/djrm/Projects/godot/scene/resources/default_theme/unchecked.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="-3.1015509"
+ inkscape:cy="9.5660349"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4136"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3623)">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.78431373;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.0000005,1047.3623 8.9999995,0 0,-9 z"
+ id="circle4178"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/scene/resources/default_theme/spinbox_updown.png b/scene/resources/default_theme/spinbox_updown.png
index b40b1e9fd2..ff65df801b 100644
--- a/scene/resources/default_theme/spinbox_updown.png
+++ b/scene/resources/default_theme/spinbox_updown.png
Binary files differ
diff --git a/scene/resources/default_theme/submenu.png b/scene/resources/default_theme/submenu.png
index ec727eecf1..465afe7786 100644
--- a/scene/resources/default_theme/submenu.png
+++ b/scene/resources/default_theme/submenu.png
Binary files differ
diff --git a/scene/resources/default_theme/tab.png b/scene/resources/default_theme/tab.png
index 3e4d792a48..951a4a3e76 100644
--- a/scene/resources/default_theme/tab.png
+++ b/scene/resources/default_theme/tab.png
Binary files differ
diff --git a/scene/resources/default_theme/tab_behind.png b/scene/resources/default_theme/tab_behind.png
index 12f07c3a91..d3e1838248 100644
--- a/scene/resources/default_theme/tab_behind.png
+++ b/scene/resources/default_theme/tab_behind.png
Binary files differ
diff --git a/scene/resources/default_theme/tab_close.png b/scene/resources/default_theme/tab_close.png
index 20d9b5c810..b6973740e7 100644
--- a/scene/resources/default_theme/tab_close.png
+++ b/scene/resources/default_theme/tab_close.png
Binary files differ
diff --git a/scene/resources/default_theme/tab_container_backup.png b/scene/resources/default_theme/tab_container_backup.png
new file mode 100644
index 0000000000..f87905b1da
--- /dev/null
+++ b/scene/resources/default_theme/tab_container_backup.png
Binary files differ
diff --git a/scene/resources/default_theme/tab_container_bg.png b/scene/resources/default_theme/tab_container_bg.png
index 92482aaf28..1b62e2690c 100644
--- a/scene/resources/default_theme/tab_container_bg.png
+++ b/scene/resources/default_theme/tab_container_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/tab_current.png b/scene/resources/default_theme/tab_current.png
index 7289e032da..c1f0ba24d4 100644
--- a/scene/resources/default_theme/tab_current.png
+++ b/scene/resources/default_theme/tab_current.png
Binary files differ
diff --git a/scene/resources/default_theme/tab_menu.png b/scene/resources/default_theme/tab_menu.png
index 148b64b8aa..ffc63f2d41 100644
--- a/scene/resources/default_theme/tab_menu.png
+++ b/scene/resources/default_theme/tab_menu.png
Binary files differ
diff --git a/scene/resources/default_theme/tab_menu_hl.png b/scene/resources/default_theme/tab_menu_hl.png
index 148b64b8aa..ffc63f2d41 100644
--- a/scene/resources/default_theme/tab_menu_hl.png
+++ b/scene/resources/default_theme/tab_menu_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/theme_data.h b/scene/resources/default_theme/theme_data.h
index 394cfaf424..eba925cfe0 100644
--- a/scene/resources/default_theme/theme_data.h
+++ b/scene/resources/default_theme/theme_data.h
@@ -1,578 +1,449 @@
-// THIS FILE HAS BEEN AUTOGENERATED, DONT EDIT!!
+// THIS FILE HAS BEEN AUTOGENERATED, DON'T EDIT!!
+// png image block
-
-
-
-static const unsigned char arrow_down_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x6,0x0,0x0,0x0,0x56,0x75,0x5c,0xe7,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6d,0x49,0x44,0x41,0x54,0x28,0x91,0x63,0x60,0x18,0x74,0x80,0x11,0xc6,0x78,0xf0,0xe0,0xc1,0x7f,0x7c,0xa,0x15,0x14,0x14,0x18,0x19,0x18,0x18,0x18,0x98,0x48,0xb5,0x81,0x7c,0xd,0x8c,0x8c,0x8c,0xf1,0xc,0xc,0xc,0x5f,0xb1,0xa8,0xf9,0xce,0xc8,0xc8,0x98,0xe,0x57,0x87,0x2c,0x73,0xff,0xfe,0x7d,0xd,0x6,0x6,0x86,0x55,0x8c,0x8c,0x8c,0xba,0x50,0xa1,0x1b,0xcc,0xcc,0xcc,0x61,0xb2,0xb2,0xb2,0x97,0xb1,0x6a,0x60,0x60,0x60,0x60,0x78,0xf1,0xe2,0x5,0xf7,0xcf,0x9f,0x3f,0xa7,0x30,0x30,0x30,0x30,0xb0,0xb3,0xb3,0xe7,0x48,0x48,0x48,0x60,0xb3,0x75,0x30,0x1,0x0,0x28,0x20,0x14,0xc2,0x1b,0xd0,0x7c,0xca,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char arrow_down_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xd5, 0x8f, 0x31, 0xa, 0x80, 0x40, 0x10, 0x3, 0x27, 0x9e, 0x8d, 0xa5, 0xe0, 0x9f, 0x84, 0xc3, 0xe7, 0x8a, 0xe0, 0xab, 0x2c, 0x6d, 0x84, 0xb5, 0xd9, 0x95, 0xe3, 0xbc, 0x7, 0x68, 0xaa, 0x10, 0x32, 0x64, 0x17, 0xfe, 0x2f, 0x85, 0x31, 0xb3, 0x5, 0xe8, 0x81, 0x5d, 0xd2, 0xe9, 0xd9, 0x0, 0xcc, 0xc0, 0x25, 0x69, 0x5, 0xe8, 0xa, 0x38, 0x1, 0x13, 0x90, 0xcd, 0x6c, 0xf0, 0x72, 0xf6, 0x2c, 0xb5, 0x16, 0xa2, 0x30, 0x2, 0x87, 0xc7, 0xe1, 0xb7, 0x58, 0x7d, 0x80, 0x6, 0x44, 0x5d, 0x7e, 0x1, 0xd5, 0xdd, 0x94, 0xff, 0x7c, 0x58, 0x37, 0xd0, 0xd, 0x22, 0xd5, 0xdc, 0x5c, 0xa1, 0xab, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char arrow_right_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x6,0x0,0x0,0x0,0x56,0x75,0x5c,0xe7,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6c,0x49,0x44,0x41,0x54,0x28,0x91,0x63,0x60,0xa0,0x35,0x60,0x44,0xe6,0x3c,0x78,0xf0,0xe0,0x3f,0x8c,0xfd,0xff,0xff,0xff,0x44,0x45,0x45,0xc5,0x5,0xe8,0x1a,0x98,0x70,0x9a,0xc4,0xc8,0x38,0xe5,0xe1,0xc3,0x87,0xda,0x44,0x6b,0x60,0x60,0x60,0xe0,0xfe,0xff,0xff,0xff,0xaa,0x17,0x2f,0x5e,0x70,0x13,0xab,0x81,0x81,0x81,0x81,0x41,0xeb,0xe7,0xcf,0x9f,0x53,0x48,0xd1,0x80,0x1,0x8,0x69,0xb8,0xc6,0xce,0xce,0x9e,0x43,0xac,0x86,0xaf,0x8c,0x8c,0x8c,0x61,0x12,0x12,0x12,0x5f,0x89,0xd2,0xf0,0xff,0xff,0xff,0x1c,0x79,0x79,0xf9,0xab,0x84,0x1d,0x49,0x6d,0x0,0x0,0x8f,0x30,0x1e,0x10,0x6e,0x79,0xda,0xf9,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char arrow_right_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x72, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xb5, 0xd0, 0xb1, 0xe, 0x1, 0x61, 0x14, 0x44, 0xe1, 0xef, 0xb2, 0x5, 0x2a, 0xc4, 0x2b, 0x89, 0x58, 0x9e, 0x97, 0xac, 0x67, 0x12, 0x74, 0x34, 0x72, 0x35, 0x5b, 0xf0, 0x67, 0xb3, 0xab, 0xd9, 0xe9, 0x4e, 0x71, 0x32, 0x93, 0x61, 0xec, 0xc4, 0x37, 0x64, 0xe6, 0x11, 0x15, 0x9a, 0x88, 0x78, 0x76, 0x9, 0x93, 0x82, 0xa7, 0xd8, 0xa0, 0xce, 0xcc, 0xf9, 0x3f, 0x42, 0x83, 0x1b, 0x56, 0x38, 0x64, 0xe6, 0xa2, 0x57, 0x88, 0x88, 0x17, 0xce, 0xb8, 0x63, 0x89, 0xed, 0x50, 0xc3, 0x60, 0x7e, 0x84, 0xcc, 0x9c, 0x61, 0xdf, 0x4e, 0x7a, 0xe0, 0x52, 0xa, 0x55, 0xc1, 0x3b, 0xac, 0xdb, 0x49, 0xa7, 0xae, 0xa7, 0x4a, 0xe1, 0x8d, 0xab, 0x9e, 0x5b, 0xc7, 0xcf, 0x7, 0xea, 0x5d, 0x1c, 0x18, 0xd, 0xc6, 0x18, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char background_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x3,0x0,0x0,0x0,0x44,0xa4,0x8a,0xc6,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x11,0x50,0x4c,0x54,0x45,0x91,0xc9,0xab,0x90,0xc9,0xab,0x90,0xc9,0xaa,0x90,0xc8,0xab,0x91,0xc9,0xaa,0x91,0xc8,0xab,0x90,0xc8,0xaa,0x8f,0xc8,0xab,0x8f,0xc9,0xab,0x8f,0xc8,0xaa,0x90,0xc7,0xaa,0x90,0xc7,0xab,0x8f,0xc7,0xaa,0x8f,0xc7,0xab,0x8e,0xc7,0xab,0x8e,0xc6,0xab,0x8f,0xc6,0xab,0x8e,0xc6,0xaa,0x8f,0xc6,0xaa,0x8e,0xc7,0xaa,0x8e,0xc5,0xaa,0x8e,0xc5,0xab,0x8d,0xc5,0xaa,0x8d,0xc5,0xab,0x8d,0xc6,0xaa,0x8d,0xc6,0xab,0x8d,0xc4,0xaa,0x8e,0xc4,0xab,0x8d,0xc4,0xab,0x8e,0xc4,0xaa,0x8c,0xc4,0xaa,0x8c,0xc5,0xaa,0x8d,0xc3,0xab,0x8d,0xc3,0xaa,0x8c,0xc3,0xaa,0x8c,0xc4,0xab,0x8c,0xc3,0xab,0x8c,0xc2,0xab,0x8b,0xc2,0xaa,0x8b,0xc3,0xaa,0x8b,0xc3,0xab,0x8c,0xc2,0xaa,0x8b,0xc2,0xab,0x8b,0xc1,0xaa,0x8b,0xc1,0xab,0x8a,0xc2,0xaa,0x8a,0xc1,0xaa,0x8a,0xc0,0xaa,0x8b,0xc0,0xaa,0x8a,0xc1,0xa9,0x8a,0xc0,0xa9,0x89,0xc0,0xaa,0x8a,0xbf,0xaa,0x89,0xbf,0xaa,0x89,0xbf,0xa9,0x8a,0xbf,0xa9,0x88,0xbf,0xaa,0x89,0xbe,0xaa,0x89,0xbe,0xa9,0x88,0xbf,0xa9,0x88,0xbe,0xa9,0x88,0xbe,0xaa,0x88,0xbd,0xaa,0x88,0xbd,0xa9,0x89,0xbd,0xaa,0x89,0xbd,0xa9,0x87,0xbe,0xa9,0x87,0xbd,0xaa,0x87,0xbe,0xaa,0x87,0xbd,0xa9,0x87,0xbc,0xaa,0x88,0xbc,0xa9,0x88,0xbc,0xaa,0x87,0xbc,0xa9,0x86,0xbc,0xa9,0x87,0xbb,0xaa,0x87,0xbb,0xa9,0x86,0xbb,0xa9,0x86,0xbc,0xaa,0x86,0xbb,0xaa,0x86,0xba,0xaa,0x86,0xba,0xa9,0x85,0xba,0xa9,0x85,0xbb,0xaa,0x85,0xbb,0xa9,0x85,0xba,0xaa,0x85,0xb9,0xa9,0x86,0xb9,0xa9,0x86,0xb9,0xaa,0x85,0xb9,0xaa,0xff,0xff,0xff,0x25,0xe,0xc5,0xe1,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x5a,0x3,0xbb,0xa5,0xa2,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x2,0xaa,0x49,0x44,0x41,0x54,0x38,0xcb,0x45,0x4b,0xd,0x63,0x9a,0x56,0x14,0xbd,0x86,0x2d,0x24,0x2b,0xf8,0x8a,0x1,0xcc,0x18,0x23,0xcd,0x8b,0xc5,0x2a,0xa9,0x6e,0x51,0x98,0x58,0x3e,0xda,0x52,0x69,0x9e,0x4a,0x10,0xba,0xb8,0xec,0xff,0xff,0x91,0x9d,0x47,0xd2,0xf5,0xbc,0xcb,0x3d,0x1f,0xf7,0x40,0xd4,0x23,0x4c,0x4f,0x2,0x9b,0xa8,0x93,0x27,0x9d,0xa3,0xe7,0x50,0xe9,0xc9,0x79,0x69,0x74,0xf7,0x9f,0x7a,0x8a,0xd2,0xfb,0xf9,0xf4,0x25,0x53,0xd5,0x33,0xf4,0xcf,0xce,0x90,0x9d,0xa8,0xa,0x80,0x75,0xaa,0xc8,0xca,0xa9,0xa2,0x9c,0xf4,0x54,0x52,0x91,0x9c,0xab,0x2a,0x46,0x42,0xf9,0xe5,0xb4,0x2b,0xa9,0xe7,0xca,0xab,0x57,0xc8,0x15,0x8d,0x74,0x4d,0xd5,0x25,0x40,0x8a,0xae,0xea,0xda,0xb9,0xd6,0x59,0x55,0x12,0xfe,0xd0,0x49,0xef,0xb3,0xbe,0xfe,0x5a,0x37,0x34,0x66,0x30,0x5d,0xd3,0xfb,0xfa,0x80,0x69,0x3,0x7d,0x70,0xd1,0xd5,0xfa,0x9a,0x4e,0x3,0xe3,0x62,0xd0,0xd7,0xd,0xd6,0x37,0x98,0xd1,0xef,0xf,0xc0,0x9a,0xc1,0x2e,0xc,0xc6,0x2e,0xd8,0xeb,0x1,0x86,0x98,0x61,0x32,0x13,0x7f,0x33,0x66,0x49,0x36,0xba,0x41,0x68,0x18,0xdd,0x66,0x64,0x5b,0x96,0x69,0x59,0x90,0xd6,0xf0,0x72,0x68,0x9a,0x43,0xd3,0xfa,0xd5,0x32,0x2f,0x6d,0xe3,0xd2,0xb2,0x98,0x65,0x30,0x93,0x1c,0x7b,0x88,0x67,0xdb,0xa6,0xd,0x72,0x7e,0x1b,0xba,0xa8,0xc0,0xda,0xbf,0xf,0x91,0xba,0xb6,0x4b,0x8e,0xe7,0x78,0xee,0xd0,0x75,0x87,0x1e,0xac,0xe3,0x60,0x5f,0x39,0x57,0xe,0x84,0xe7,0xd8,0xb6,0x63,0x5f,0xd1,0x1b,0xe7,0x9a,0xcb,0x92,0xe7,0xba,0xae,0xe7,0xf0,0x1b,0xc7,0xb9,0x76,0x3c,0x8e,0xb3,0x87,0x16,0xbf,0xf1,0x88,0x73,0xee,0x8c,0x46,0xd8,0xd7,0x7c,0xe4,0xf1,0xef,0x18,0x79,0x37,0x9c,0x7b,0x6f,0xbc,0x11,0x27,0xfe,0xd6,0xf7,0xf9,0x98,0xf3,0x77,0x13,0xfe,0x96,0x8f,0xb8,0x3f,0x96,0x65,0x9f,0x4f,0x38,0x1f,0x4f,0xf8,0x68,0xc2,0xc9,0x7f,0xc6,0x74,0xea,0x73,0x49,0x13,0xcc,0x78,0xe2,0xfb,0x13,0x59,0xf2,0xdf,0xf9,0x63,0xa,0xa6,0xfe,0x34,0xf0,0xf1,0xba,0xe9,0x20,0x39,0xf0,0x6f,0x83,0xdb,0x69,0x10,0x4c,0x29,0x78,0x3f,0xb,0x50,0x91,0xe7,0xc0,0x9f,0x61,0xdd,0x6,0xb3,0xd9,0xcc,0xf7,0xdf,0x83,0xe0,0x2,0x9a,0xcd,0x67,0xcf,0x98,0x77,0xea,0xf,0x29,0xe4,0xfc,0x9,0x13,0x40,0xd0,0x1c,0x87,0x1f,0xb8,0x93,0xab,0xb,0xee,0x5e,0x62,0x5a,0x2c,0xe7,0x21,0x78,0xb9,0x58,0x2e,0xb1,0xd1,0xb8,0x5b,0x84,0x4b,0xd8,0xf9,0x7c,0x81,0xef,0x2e,0xa4,0xc5,0x22,0xc,0x97,0x61,0x18,0x85,0x12,0x51,0x4,0x5e,0x46,0x61,0xf4,0x97,0x74,0xb,0xb9,0xa8,0x3b,0xad,0xe2,0x38,0xa,0xd7,0xab,0x28,0x4,0x85,0x1f,0xe2,0x10,0x1c,0xc5,0xe1,0x2a,0x5c,0x25,0x2b,0x4a,0xe3,0x38,0x49,0x93,0x24,0x4d,0xe3,0x34,0x4e,0xe2,0x68,0xd,0x1f,0xad,0x93,0x24,0x59,0x23,0xfa,0xb0,0x4e,0x53,0xca,0xf2,0x2c,0xfb,0xf8,0xf1,0x13,0x6c,0x92,0x42,0xa7,0x49,0x9e,0xe6,0x69,0x92,0x49,0xd3,0x65,0x94,0x7d,0xce,0xb2,0x2c,0xc9,0xd2,0xa2,0xf8,0x92,0xe7,0x59,0x51,0xc0,0x7d,0xce,0xb,0xc8,0x1c,0xc8,0x36,0x5,0x95,0x5f,0xb3,0x72,0x53,0x66,0xf7,0x5f,0x37,0x70,0xf7,0x79,0x51,0x88,0xfb,0x12,0x3d,0x91,0xdd,0x8b,0x4d,0x99,0x8b,0x92,0x44,0x59,0xa,0x51,0x8a,0x72,0xb,0x2e,0x37,0x2,0x1a,0xa2,0x0,0x8b,0xd,0x62,0x21,0x48,0xec,0x76,0x7b,0x21,0xaa,0x52,0xec,0xb6,0xa2,0xaa,0xb6,0xf,0xfb,0x7d,0x2d,0xc4,0xf6,0xa1,0x7a,0x10,0xdb,0x9d,0x28,0x77,0x15,0x55,0xbb,0xba,0x92,0xd8,0x57,0xbb,0xaa,0xaa,0xeb,0x7d,0x2d,0xed,0xff,0xdf,0xbe,0xa6,0x43,0xd5,0x34,0x75,0xd3,0x54,0xcd,0xa1,0xaa,0xf,0x75,0x83,0xbc,0xae,0x5a,0xb4,0x64,0xf6,0xd,0x1d,0x6a,0x25,0x9a,0xa6,0x6d,0xab,0x43,0x3,0xfc,0x2d,0x57,0x8b,0xf7,0xf8,0xd8,0xb4,0x87,0xb6,0x6e,0xe9,0xb1,0x6d,0x8e,0x6d,0x7b,0x6c,0xff,0x39,0x3e,0x1d,0x9f,0x20,0x8f,0xd2,0x1d,0xff,0x45,0xa,0xdd,0xb6,0x4f,0xff,0x1,0xbe,0xd3,0xa6,0xf7,0x55,0x9e,0xe1,0xf0,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char background_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x20, 0x8, 0x3, 0x0, 0x0, 0x0, 0x44, 0xa4, 0x8a, 0xc6, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x1, 0x11, 0x50, 0x4c, 0x54, 0x45, 0x91, 0xc9, 0xab, 0x90, 0xc9, 0xab, 0x90, 0xc9, 0xaa, 0x90, 0xc8, 0xab, 0x91, 0xc9, 0xaa, 0x91, 0xc8, 0xab, 0x90, 0xc8, 0xaa, 0x8f, 0xc8, 0xab, 0x8f, 0xc9, 0xab, 0x8f, 0xc8, 0xaa, 0x90, 0xc7, 0xaa, 0x90, 0xc7, 0xab, 0x8f, 0xc7, 0xaa, 0x8f, 0xc7, 0xab, 0x8e, 0xc7, 0xab, 0x8e, 0xc6, 0xab, 0x8f, 0xc6, 0xab, 0x8e, 0xc6, 0xaa, 0x8f, 0xc6, 0xaa, 0x8e, 0xc7, 0xaa, 0x8e, 0xc5, 0xaa, 0x8e, 0xc5, 0xab, 0x8d, 0xc5, 0xaa, 0x8d, 0xc5, 0xab, 0x8d, 0xc6, 0xaa, 0x8d, 0xc6, 0xab, 0x8d, 0xc4, 0xaa, 0x8e, 0xc4, 0xab, 0x8d, 0xc4, 0xab, 0x8e, 0xc4, 0xaa, 0x8c, 0xc4, 0xaa, 0x8c, 0xc5, 0xaa, 0x8d, 0xc3, 0xab, 0x8d, 0xc3, 0xaa, 0x8c, 0xc3, 0xaa, 0x8c, 0xc4, 0xab, 0x8c, 0xc3, 0xab, 0x8c, 0xc2, 0xab, 0x8b, 0xc2, 0xaa, 0x8b, 0xc3, 0xaa, 0x8b, 0xc3, 0xab, 0x8c, 0xc2, 0xaa, 0x8b, 0xc2, 0xab, 0x8b, 0xc1, 0xaa, 0x8b, 0xc1, 0xab, 0x8a, 0xc2, 0xaa, 0x8a, 0xc1, 0xaa, 0x8a, 0xc0, 0xaa, 0x8b, 0xc0, 0xaa, 0x8a, 0xc1, 0xa9, 0x8a, 0xc0, 0xa9, 0x89, 0xc0, 0xaa, 0x8a, 0xbf, 0xaa, 0x89, 0xbf, 0xaa, 0x89, 0xbf, 0xa9, 0x8a, 0xbf, 0xa9, 0x88, 0xbf, 0xaa, 0x89, 0xbe, 0xaa, 0x89, 0xbe, 0xa9, 0x88, 0xbf, 0xa9, 0x88, 0xbe, 0xa9, 0x88, 0xbe, 0xaa, 0x88, 0xbd, 0xaa, 0x88, 0xbd, 0xa9, 0x89, 0xbd, 0xaa, 0x89, 0xbd, 0xa9, 0x87, 0xbe, 0xa9, 0x87, 0xbd, 0xaa, 0x87, 0xbe, 0xaa, 0x87, 0xbd, 0xa9, 0x87, 0xbc, 0xaa, 0x88, 0xbc, 0xa9, 0x88, 0xbc, 0xaa, 0x87, 0xbc, 0xa9, 0x86, 0xbc, 0xa9, 0x87, 0xbb, 0xaa, 0x87, 0xbb, 0xa9, 0x86, 0xbb, 0xa9, 0x86, 0xbc, 0xaa, 0x86, 0xbb, 0xaa, 0x86, 0xba, 0xaa, 0x86, 0xba, 0xa9, 0x85, 0xba, 0xa9, 0x85, 0xbb, 0xaa, 0x85, 0xbb, 0xa9, 0x85, 0xba, 0xaa, 0x85, 0xb9, 0xa9, 0x86, 0xb9, 0xa9, 0x86, 0xb9, 0xaa, 0x85, 0xb9, 0xaa, 0xff, 0xff, 0xff, 0x25, 0xe, 0xc5, 0xe1, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x5a, 0x3, 0xbb, 0xa5, 0xa2, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x2, 0xaa, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x45, 0x4b, 0xd, 0x63, 0x9a, 0x56, 0x14, 0xbd, 0x86, 0x2d, 0x24, 0x2b, 0xf8, 0x8a, 0x1, 0xcc, 0x18, 0x23, 0xcd, 0x8b, 0xc5, 0x2a, 0xa9, 0x6e, 0x51, 0x98, 0x58, 0x3e, 0xda, 0x52, 0x69, 0x9e, 0x4a, 0x10, 0xba, 0xb8, 0xec, 0xff, 0xff, 0x91, 0x9d, 0x47, 0xd2, 0xf5, 0xbc, 0xcb, 0x3d, 0x1f, 0xf7, 0x40, 0xd4, 0x23, 0x4c, 0x4f, 0x2, 0x9b, 0xa8, 0x93, 0x27, 0x9d, 0xa3, 0xe7, 0x50, 0xe9, 0xc9, 0x79, 0x69, 0x74, 0xf7, 0x9f, 0x7a, 0x8a, 0xd2, 0xfb, 0xf9, 0xf4, 0x25, 0x53, 0xd5, 0x33, 0xf4, 0xcf, 0xce, 0x90, 0x9d, 0xa8, 0xa, 0x80, 0x75, 0xaa, 0xc8, 0xca, 0xa9, 0xa2, 0x9c, 0xf4, 0x54, 0x52, 0x91, 0x9c, 0xab, 0x2a, 0x46, 0x42, 0xf9, 0xe5, 0xb4, 0x2b, 0xa9, 0xe7, 0xca, 0xab, 0x57, 0xc8, 0x15, 0x8d, 0x74, 0x4d, 0xd5, 0x25, 0x40, 0x8a, 0xae, 0xea, 0xda, 0xb9, 0xd6, 0x59, 0x55, 0x12, 0xfe, 0xd0, 0x49, 0xef, 0xb3, 0xbe, 0xfe, 0x5a, 0x37, 0x34, 0x66, 0x30, 0x5d, 0xd3, 0xfb, 0xfa, 0x80, 0x69, 0x3, 0x7d, 0x70, 0xd1, 0xd5, 0xfa, 0x9a, 0x4e, 0x3, 0xe3, 0x62, 0xd0, 0xd7, 0xd, 0xd6, 0x37, 0x98, 0xd1, 0xef, 0xf, 0xc0, 0x9a, 0xc1, 0x2e, 0xc, 0xc6, 0x2e, 0xd8, 0xeb, 0x1, 0x86, 0x98, 0x61, 0x32, 0x13, 0x7f, 0x33, 0x66, 0x49, 0x36, 0xba, 0x41, 0x68, 0x18, 0xdd, 0x66, 0x64, 0x5b, 0x96, 0x69, 0x59, 0x90, 0xd6, 0xf0, 0x72, 0x68, 0x9a, 0x43, 0xd3, 0xfa, 0xd5, 0x32, 0x2f, 0x6d, 0xe3, 0xd2, 0xb2, 0x98, 0x65, 0x30, 0x93, 0x1c, 0x7b, 0x88, 0x67, 0xdb, 0xa6, 0xd, 0x72, 0x7e, 0x1b, 0xba, 0xa8, 0xc0, 0xda, 0xbf, 0xf, 0x91, 0xba, 0xb6, 0x4b, 0x8e, 0xe7, 0x78, 0xee, 0xd0, 0x75, 0x87, 0x1e, 0xac, 0xe3, 0x60, 0x5f, 0x39, 0x57, 0xe, 0x84, 0xe7, 0xd8, 0xb6, 0x63, 0x5f, 0xd1, 0x1b, 0xe7, 0x9a, 0xcb, 0x92, 0xe7, 0xba, 0xae, 0xe7, 0xf0, 0x1b, 0xc7, 0xb9, 0x76, 0x3c, 0x8e, 0xb3, 0x87, 0x16, 0xbf, 0xf1, 0x88, 0x73, 0xee, 0x8c, 0x46, 0xd8, 0xd7, 0x7c, 0xe4, 0xf1, 0xef, 0x18, 0x79, 0x37, 0x9c, 0x7b, 0x6f, 0xbc, 0x11, 0x27, 0xfe, 0xd6, 0xf7, 0xf9, 0x98, 0xf3, 0x77, 0x13, 0xfe, 0x96, 0x8f, 0xb8, 0x3f, 0x96, 0x65, 0x9f, 0x4f, 0x38, 0x1f, 0x4f, 0xf8, 0x68, 0xc2, 0xc9, 0x7f, 0xc6, 0x74, 0xea, 0x73, 0x49, 0x13, 0xcc, 0x78, 0xe2, 0xfb, 0x13, 0x59, 0xf2, 0xdf, 0xf9, 0x63, 0xa, 0xa6, 0xfe, 0x34, 0xf0, 0xf1, 0xba, 0xe9, 0x20, 0x39, 0xf0, 0x6f, 0x83, 0xdb, 0x69, 0x10, 0x4c, 0x29, 0x78, 0x3f, 0xb, 0x50, 0x91, 0xe7, 0xc0, 0x9f, 0x61, 0xdd, 0x6, 0xb3, 0xd9, 0xcc, 0xf7, 0xdf, 0x83, 0xe0, 0x2, 0x9a, 0xcd, 0x67, 0xcf, 0x98, 0x77, 0xea, 0xf, 0x29, 0xe4, 0xfc, 0x9, 0x13, 0x40, 0xd0, 0x1c, 0x87, 0x1f, 0xb8, 0x93, 0xab, 0xb, 0xee, 0x5e, 0x62, 0x5a, 0x2c, 0xe7, 0x21, 0x78, 0xb9, 0x58, 0x2e, 0xb1, 0xd1, 0xb8, 0x5b, 0x84, 0x4b, 0xd8, 0xf9, 0x7c, 0x81, 0xef, 0x2e, 0xa4, 0xc5, 0x22, 0xc, 0x97, 0x61, 0x18, 0x85, 0x12, 0x51, 0x4, 0x5e, 0x46, 0x61, 0xf4, 0x97, 0x74, 0xb, 0xb9, 0xa8, 0x3b, 0xad, 0xe2, 0x38, 0xa, 0xd7, 0xab, 0x28, 0x4, 0x85, 0x1f, 0xe2, 0x10, 0x1c, 0xc5, 0xe1, 0x2a, 0x5c, 0x25, 0x2b, 0x4a, 0xe3, 0x38, 0x49, 0x93, 0x24, 0x4d, 0xe3, 0x34, 0x4e, 0xe2, 0x68, 0xd, 0x1f, 0xad, 0x93, 0x24, 0x59, 0x23, 0xfa, 0xb0, 0x4e, 0x53, 0xca, 0xf2, 0x2c, 0xfb, 0xf8, 0xf1, 0x13, 0x6c, 0x92, 0x42, 0xa7, 0x49, 0x9e, 0xe6, 0x69, 0x92, 0x49, 0xd3, 0x65, 0x94, 0x7d, 0xce, 0xb2, 0x2c, 0xc9, 0xd2, 0xa2, 0xf8, 0x92, 0xe7, 0x59, 0x51, 0xc0, 0x7d, 0xce, 0xb, 0xc8, 0x1c, 0xc8, 0x36, 0x5, 0x95, 0x5f, 0xb3, 0x72, 0x53, 0x66, 0xf7, 0x5f, 0x37, 0x70, 0xf7, 0x79, 0x51, 0x88, 0xfb, 0x12, 0x3d, 0x91, 0xdd, 0x8b, 0x4d, 0x99, 0x8b, 0x92, 0x44, 0x59, 0xa, 0x51, 0x8a, 0x72, 0xb, 0x2e, 0x37, 0x2, 0x1a, 0xa2, 0x0, 0x8b, 0xd, 0x62, 0x21, 0x48, 0xec, 0x76, 0x7b, 0x21, 0xaa, 0x52, 0xec, 0xb6, 0xa2, 0xaa, 0xb6, 0xf, 0xfb, 0x7d, 0x2d, 0xc4, 0xf6, 0xa1, 0x7a, 0x10, 0xdb, 0x9d, 0x28, 0x77, 0x15, 0x55, 0xbb, 0xba, 0x92, 0xd8, 0x57, 0xbb, 0xaa, 0xaa, 0xeb, 0x7d, 0x2d, 0xed, 0xff, 0xdf, 0xbe, 0xa6, 0x43, 0xd5, 0x34, 0x75, 0xd3, 0x54, 0xcd, 0xa1, 0xaa, 0xf, 0x75, 0x83, 0xbc, 0xae, 0x5a, 0xb4, 0x64, 0xf6, 0xd, 0x1d, 0x6a, 0x25, 0x9a, 0xa6, 0x6d, 0xab, 0x43, 0x3, 0xfc, 0x2d, 0x57, 0x8b, 0xf7, 0xf8, 0xd8, 0xb4, 0x87, 0xb6, 0x6e, 0xe9, 0xb1, 0x6d, 0x8e, 0x6d, 0x7b, 0x6c, 0xff, 0x39, 0x3e, 0x1d, 0x9f, 0x20, 0x8f, 0xd2, 0x1d, 0xff, 0x45, 0xa, 0xdd, 0xb6, 0x4f, 0xff, 0x1, 0xbe, 0xd3, 0xa6, 0xf7, 0x55, 0x9e, 0xe1, 0xf0, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char base_green_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x1,0x3,0x0,0x0,0x0,0x49,0xb4,0xe8,0xb7,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0x90,0xc9,0xab,0xff,0xff,0xff,0xc6,0xd0,0x9d,0x30,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1,0xff,0x2,0x2d,0xde,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xc,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x18,0xdc,0x0,0x0,0x0,0xa0,0x0,0x1,0x61,0x25,0x7d,0x47,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char base_green_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x20, 0x1, 0x3, 0x0, 0x0, 0x0, 0x49, 0xb4, 0xe8, 0xb7, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x6, 0x50, 0x4c, 0x54, 0x45, 0x90, 0xc9, 0xab, 0xff, 0xff, 0xff, 0xc6, 0xd0, 0x9d, 0x30, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x1, 0xff, 0x2, 0x2d, 0xde, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0xc, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x63, 0x60, 0x18, 0xdc, 0x0, 0x0, 0x0, 0xa0, 0x0, 0x1, 0x61, 0x25, 0x7d, 0x47, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe, 0x17, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char button_disabled_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xd9,0x49,0x44,0x41,0x54,0x28,0xcf,0x7d,0x91,0x41,0x4e,0xc3,0x30,0x14,0x44,0x9f,0xed,0x8f,0x6d,0x35,0x8b,0x9a,0x6d,0xb9,0x6,0xfb,0xde,0x81,0xd3,0xe4,0x8,0xf4,0x32,0xbd,0x1,0xb,0x6e,0xc0,0x25,0x60,0x83,0xa8,0x2,0x6a,0xa4,0xc6,0x49,0xfc,0xbb,0x88,0x54,0x11,0x94,0x30,0xb3,0xf9,0xd2,0x9f,0x19,0x8d,0x34,0x6,0xc1,0x13,0x88,0x78,0x1c,0x96,0x9,0x85,0x91,0xcc,0x85,0x8e,0x2c,0x78,0x2a,0x12,0x5b,0x2a,0x2,0x6,0x3,0x28,0x4a,0x47,0xcb,0x37,0xd,0x8,0x81,0xb4,0x7f,0x7a,0xa8,0x87,0xc4,0xc,0xd2,0xbc,0x3f,0xbf,0x1e,0x19,0x84,0xc8,0x76,0x57,0x9f,0xd2,0x80,0xfe,0x7a,0x1b,0x24,0xed,0x6a,0x5e,0x38,0xb,0x9e,0xaa,0x4f,0xfd,0xdc,0x8e,0xd2,0xd3,0x27,0x2a,0xbc,0xe0,0x8,0x65,0xe6,0xe6,0xd6,0x94,0x80,0x13,0x2c,0x46,0x29,0xb,0x2,0x5,0x83,0x15,0xc0,0xac,0x26,0x18,0x90,0xe9,0x5c,0x11,0x30,0x9,0x54,0x17,0x5,0xa,0xa,0x42,0x41,0xcb,0x62,0x87,0x2,0x4a,0x11,0x46,0xba,0xd5,0x84,0x8e,0xd1,0x92,0x69,0x6d,0xe3,0xd0,0x3f,0x74,0xd8,0x86,0x96,0xec,0xb8,0xc3,0xa5,0xaf,0xfb,0x47,0x1f,0x3d,0xe1,0xc6,0x48,0x3c,0x7d,0x1e,0x3e,0xde,0xf8,0x31,0x6c,0xfe,0x1d,0xab,0x15,0x32,0x30,0x70,0x5e,0x9b,0xfb,0xa,0xbb,0x7c,0x61,0xa2,0x50,0x44,0x45,0xca,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char button_disabled_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x2, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x93, 0x31, 0x4e, 0x2, 0x61, 0x10, 0x85, 0xbf, 0xf9, 0xc3, 0x15, 0x54, 0x94, 0xc2, 0x6a, 0x2b, 0xee, 0x40, 0x1, 0xd9, 0x8e, 0x82, 0x8, 0xb6, 0x62, 0xc9, 0x66, 0xb, 0xaf, 0xf0, 0x1f, 0x2, 0x1, 0x3b, 0xa4, 0x5, 0xb, 0x63, 0xb9, 0x71, 0x4d, 0xf6, 0xc, 0x50, 0x6d, 0x65, 0x1, 0x1, 0xbd, 0xc3, 0x8e, 0xc5, 0x2e, 0x68, 0x8, 0xb0, 0x24, 0xb4, 0xbe, 0x6a, 0x32, 0x99, 0xef, 0x65, 0x26, 0x79, 0x3, 0x27, 0x4a, 0xfe, 0xd6, 0xd5, 0x96, 0x77, 0xf, 0xea, 0xaa, 0x70, 0xb6, 0x73, 0x58, 0xf9, 0x6, 0x9, 0xc2, 0x49, 0x7f, 0x8, 0xe8, 0xc6, 0xc0, 0x5a, 0x6b, 0xa2, 0xe9, 0xf2, 0x15, 0xa8, 0x3, 0xb1, 0xa, 0x9f, 0x7b, 0xc, 0xae, 0x1, 0x7, 0x91, 0xb7, 0x4a, 0xf9, 0xa2, 0x61, 0xad, 0x4d, 0xa, 0x0, 0xd1, 0x74, 0xd5, 0x6, 0xea, 0x8a, 0xfa, 0x1f, 0x93, 0xa7, 0xde, 0xa1, 0x95, 0x6b, 0x4d, 0xcf, 0x57, 0xb4, 0x1b, 0xcd, 0x96, 0x77, 0xc0, 0xd0, 0xa4, 0x6d, 0x75, 0x81, 0x38, 0xf, 0x6, 0x78, 0x7f, 0xe9, 0x3f, 0x2, 0x31, 0x9, 0x2e, 0x40, 0x81, 0xf4, 0x98, 0x4b, 0x60, 0x9e, 0x7, 0xaf, 0xa5, 0x30, 0x47, 0xb8, 0x2, 0x30, 0xc7, 0x42, 0xfb, 0xf4, 0x6f, 0x90, 0x19, 0x88, 0xb2, 0x10, 0x28, 0x1d, 0xb, 0x9, 0x94, 0x44, 0x59, 0xfc, 0x6e, 0x60, 0x8, 0x0, 0xa7, 0xd6, 0xf4, 0xfc, 0x3c, 0x38, 0x9b, 0x71, 0x32, 0x26, 0xcd, 0x41, 0xa5, 0x5c, 0x1c, 0x45, 0xb3, 0xd5, 0x8d, 0xa2, 0xdd, 0x6a, 0xab, 0xf3, 0x70, 0x28, 0xca, 0x8a, 0xae, 0xa3, 0x3c, 0xa, 0xc7, 0xdb, 0xcf, 0x74, 0xdb, 0x69, 0x93, 0xe0, 0xaa, 0xe1, 0x7c, 0xa7, 0x41, 0xc2, 0x17, 0x86, 0x20, 0x1c, 0xf, 0x9e, 0xc9, 0x9e, 0xe9, 0x64, 0xfd, 0x0, 0xe8, 0xa0, 0x57, 0x22, 0x74, 0x4f, 0xd4, 0x31, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char button_focus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x30,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0xff,0xff,0xff,0xb9,0xa2,0x9b,0xc9,0x0,0x0,0x0,0xf,0x74,0x52,0x4e,0x53,0x0,0xe,0x39,0x68,0x7a,0x7b,0x3a,0x74,0x10,0x8,0x69,0xf,0x6,0x75,0x11,0xb8,0x16,0x0,0x1,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xf,0x18,0xba,0x0,0xd9,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x3f,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc0,0x4,0x42,0x26,0xa1,0xa1,0xce,0x8a,0x40,0x46,0x7a,0xe7,0xcc,0x99,0x33,0xca,0x80,0x8c,0xd5,0x20,0xe1,0x5d,0x40,0x1c,0x3,0x62,0x1c,0x5,0xe2,0x48,0x10,0x63,0x2a,0x7e,0x6,0x5c,0x31,0x58,0xbb,0x14,0x10,0xe7,0xee,0x9c,0x39,0x73,0x1e,0xc8,0x40,0x31,0x98,0x15,0xe8,0x0,0x0,0xec,0xe0,0x11,0x6d,0x2c,0x6f,0x45,0x2b,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char button_focus_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x4, 0x3, 0x0, 0x0, 0x0, 0xed, 0xdd, 0xe2, 0x52, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x30, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0x47, 0x8c, 0xbf, 0xff, 0xff, 0xff, 0xb9, 0xa2, 0x9b, 0xc9, 0x0, 0x0, 0x0, 0xf, 0x74, 0x52, 0x4e, 0x53, 0x0, 0xe, 0x39, 0x68, 0x7a, 0x7b, 0x3a, 0x74, 0x10, 0x8, 0x69, 0xf, 0x6, 0x75, 0x11, 0xb8, 0x16, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0xf, 0x18, 0xba, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0x3f, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x63, 0x60, 0xc0, 0x4, 0x42, 0x26, 0xa1, 0xa1, 0xce, 0x8a, 0x40, 0x46, 0x7a, 0xe7, 0xcc, 0x99, 0x33, 0xca, 0x80, 0x8c, 0xd5, 0x20, 0xe1, 0x5d, 0x40, 0x1c, 0x3, 0x62, 0x1c, 0x5, 0xe2, 0x48, 0x10, 0x63, 0x2a, 0x7e, 0x6, 0x5c, 0x31, 0x58, 0xbb, 0x14, 0x10, 0xe7, 0xee, 0x9c, 0x39, 0x73, 0x1e, 0xc8, 0x40, 0x31, 0x98, 0x15, 0xe8, 0x0, 0x0, 0xec, 0xe0, 0x11, 0x6d, 0x2c, 0x6f, 0x45, 0x2b, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char button_hover_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x8d,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x42,0x40,0x4b,0x5f,0x5a,0x6c,0x5f,0x5a,0x6b,0x56,0x53,0x64,0x57,0x53,0x64,0x3e,0x3b,0x46,0x57,0x53,0x63,0x57,0x53,0x63,0x5b,0x57,0x68,0x5a,0x56,0x67,0x4d,0x4a,0x57,0x49,0x46,0x52,0x48,0x45,0x51,0x5b,0x57,0x66,0x59,0x55,0x64,0x47,0x44,0x50,0x58,0x54,0x64,0x46,0x43,0x50,0x56,0x53,0x63,0x45,0x42,0x4f,0x56,0x53,0x62,0x45,0x42,0x4e,0x55,0x51,0x62,0x44,0x41,0x4e,0x55,0x51,0x60,0x44,0x41,0x4d,0x43,0x40,0x4c,0x47,0x43,0x51,0x43,0x3f,0x4d,0x42,0x3f,0x4c,0x53,0x50,0x5f,0x53,0x4f,0x5e,0xff,0xff,0xff,0x99,0x8b,0x2e,0x55,0x0,0x0,0x0,0x16,0x74,0x52,0x4e,0x53,0x4,0xa,0x11,0x19,0x1f,0x22,0x24,0x15,0x25,0x34,0x3f,0x46,0x47,0x48,0x77,0xef,0xef,0xef,0xef,0x77,0xef,0xed,0x6b,0x28,0x52,0x7a,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x2e,0x54,0xd3,0x10,0x87,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x97,0x49,0x44,0x41,0x54,0x18,0xd3,0x65,0xcf,0x49,0x12,0x82,0x30,0x10,0x5,0xd0,0xce,0x48,0x46,0x40,0x51,0x4,0x41,0x45,0xc4,0x20,0x88,0xf7,0xbf,0x9e,0x21,0x45,0x65,0xa1,0x6f,0xd7,0xbf,0xaa,0x27,0x0,0x84,0x9,0x65,0xdc,0x63,0x94,0x60,0x4,0x80,0x12,0x21,0x95,0x36,0xd6,0x1a,0xad,0xa4,0x48,0x10,0x60,0x91,0x66,0xe5,0x29,0x28,0xb3,0x54,0x60,0x20,0x32,0xaf,0xea,0x73,0x50,0x57,0xb9,0x24,0x40,0x55,0xb3,0xd5,0x3e,0x69,0x14,0x5,0xa6,0xdb,0x4b,0xd4,0x6a,0x6,0xdc,0x5c,0x6f,0xd1,0xd5,0x70,0xe0,0xb6,0xbb,0x47,0x9d,0x5d,0x83,0xfe,0x11,0xf5,0x6b,0x60,0x86,0x67,0x34,0xf8,0x16,0xa6,0xdd,0x18,0x39,0x3f,0x94,0x2a,0x37,0xbe,0x36,0xa3,0xf3,0x6b,0x89,0xdc,0x4d,0xf3,0x3b,0x98,0xa7,0xbd,0x3f,0xc,0x8b,0xe2,0xb0,0x7c,0x82,0xe5,0x58,0xf8,0xd3,0xff,0x9e,0xfb,0x7d,0xff,0xb,0x74,0xeb,0x15,0x11,0xe1,0xa7,0x60,0xfc,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char button_group_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x20, 0x8, 0x6, 0x0, 0x0, 0x0, 0x73, 0x7a, 0x7a, 0xf4, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x60, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0x97, 0xcd, 0x6e, 0x82, 0x40, 0x14, 0x46, 0x8f, 0xad, 0xa0, 0x51, 0x1a, 0xd1, 0xa5, 0xab, 0x76, 0xd1, 0xf7, 0x7f, 0xa1, 0xb6, 0xa6, 0x9b, 0x6e, 0x8b, 0x9, 0x5a, 0xa3, 0x18, 0xbb, 0xb8, 0x40, 0xc6, 0xf1, 0x32, 0x19, 0x90, 0x61, 0xd3, 0x9e, 0x25, 0x19, 0xf3, 0x1d, 0xe6, 0xc7, 0xf9, 0x80, 0xbf, 0xce, 0xa8, 0xe5, 0xf8, 0x19, 0xb0, 0x0, 0x12, 0x20, 0x2, 0xe2, 0xf2, 0xf9, 0x11, 0x38, 0x1, 0x39, 0xb0, 0x5, 0xf6, 0x7d, 0xb, 0x2c, 0x81, 0x35, 0x30, 0xf1, 0x1c, 0x7f, 0x0, 0xbe, 0x80, 0xec, 0x5e, 0x81, 0x9, 0xf0, 0xc, 0xcc, 0x3d, 0x83, 0x6d, 0x76, 0xc0, 0x6, 0x99, 0x21, 0x95, 0x47, 0xc7, 0x8f, 0x13, 0xe0, 0x15, 0x98, 0x76, 0xc, 0x7, 0x59, 0xa2, 0x15, 0xb2, 0x24, 0xaa, 0x44, 0x93, 0xc0, 0x53, 0x19, 0xee, 0x12, 0xf4, 0xe5, 0xa1, 0x94, 0xc8, 0x35, 0x9, 0x2d, 0x20, 0xee, 0x31, 0xbc, 0x62, 0x84, 0x6c, 0xde, 0xc, 0x38, 0xdb, 0x76, 0x36, 0x2f, 0xc0, 0xb8, 0xc7, 0xf0, 0x8a, 0x31, 0xb2, 0x9f, 0xae, 0xb0, 0x5, 0x96, 0x74, 0xdf, 0x70, 0x3e, 0xcc, 0x81, 0xd4, 0x25, 0xb0, 0xe, 0x18, 0xae, 0x66, 0x98, 0x2, 0x33, 0xfc, 0xcf, 0xf9, 0x3d, 0x4c, 0xcb, 0xac, 0x1b, 0x81, 0xf4, 0x76, 0x6c, 0x30, 0x16, 0x9a, 0x40, 0xc8, 0xb5, 0xb7, 0x49, 0x34, 0x81, 0x58, 0x19, 0x18, 0x8a, 0x48, 0x13, 0x88, 0x94, 0x81, 0xa1, 0xa8, 0x5f, 0xd6, 0x14, 0xb8, 0xc, 0x28, 0x50, 0x67, 0x99, 0x2, 0xc5, 0x80, 0x2, 0x27, 0x4d, 0xa0, 0xf1, 0xc6, 0x1a, 0x4a, 0x20, 0x1f, 0x50, 0xa0, 0xce, 0x32, 0x5, 0xb6, 0x3, 0xa, 0xd4, 0x45, 0xc5, 0x14, 0xd8, 0x23, 0x4d, 0x26, 0x34, 0x7, 0xe0, 0x47, 0x13, 0x0, 0xa9, 0x51, 0xa1, 0xb9, 0xca, 0xb0, 0x5, 0x32, 0xa4, 0x46, 0x85, 0x22, 0xc7, 0xea, 0x89, 0x5a, 0x1f, 0xd8, 0x10, 0xe6, 0x48, 0x16, 0xc0, 0xa7, 0xfd, 0x50, 0x6b, 0x3d, 0x67, 0x64, 0x16, 0x56, 0xb4, 0xaf, 0xed, 0x4d, 0x5c, 0x80, 0x77, 0x8c, 0xb5, 0x77, 0x9, 0x80, 0xfc, 0x27, 0xe4, 0xc8, 0xad, 0xa5, 0xcd, 0x52, 0x1b, 0xa, 0xe0, 0x83, 0x86, 0x63, 0xee, 0xea, 0x7d, 0x47, 0xe0, 0x1b, 0xb9, 0x25, 0xbb, 0x5e, 0x54, 0x39, 0xf0, 0x86, 0xf2, 0xe6, 0x15, 0xbe, 0x53, 0x9c, 0x22, 0x4d, 0xc6, 0xb7, 0xa2, 0xf7, 0xf6, 0x61, 0x62, 0xe3, 0xf3, 0x69, 0x96, 0xe1, 0x78, 0xe3, 0x7f, 0x6c, 0x7e, 0x1, 0x6e, 0x8e, 0x40, 0x43, 0xe2, 0x3d, 0x6f, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char button_normal_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x8a,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x3a,0x44,0x56,0x53,0x61,0x56,0x52,0x60,0x47,0x44,0x52,0x33,0x31,0x39,0x47,0x44,0x50,0x47,0x44,0x51,0x52,0x50,0x5d,0x51,0x4f,0x5d,0x46,0x42,0x4e,0x42,0x3e,0x4a,0x41,0x3e,0x49,0x51,0x4e,0x5b,0x40,0x3e,0x48,0x4f,0x4c,0x59,0x3f,0x3d,0x47,0x4e,0x4a,0x58,0x3e,0x3b,0x46,0x4b,0x49,0x55,0x3c,0x3a,0x44,0x4a,0x47,0x54,0x3b,0x39,0x43,0x49,0x46,0x53,0x3a,0x38,0x42,0x47,0x45,0x50,0x39,0x37,0x40,0x47,0x43,0x50,0x38,0x35,0x3f,0x36,0x34,0x3e,0x44,0x42,0x4d,0x44,0x41,0x4c,0xff,0xff,0xff,0xe5,0x37,0x10,0x78,0x0,0x0,0x0,0x15,0x74,0x52,0x4e,0x53,0x4,0xa,0x11,0x19,0x1f,0x22,0x24,0x15,0x25,0x34,0x3f,0x46,0x47,0x48,0x77,0xef,0xef,0xef,0x77,0xef,0xed,0xe8,0xff,0x76,0xed,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x2d,0xcd,0xda,0x41,0x3d,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x93,0x49,0x44,0x41,0x54,0x18,0xd3,0x65,0xcf,0x47,0x12,0x82,0x40,0x10,0x5,0xd0,0x9e,0xc8,0x44,0x92,0x22,0x41,0x54,0x44,0x40,0x14,0xef,0x7f,0x3e,0x7,0x8a,0xea,0x85,0xbe,0xe5,0xaf,0xea,0xf0,0x1,0x8,0x65,0x5c,0xc8,0x40,0x70,0x46,0x9,0x0,0x89,0x94,0x36,0xd6,0x79,0xef,0xac,0xd1,0x2a,0x22,0x40,0x55,0x9c,0x14,0xa7,0x4d,0x91,0xc4,0x8a,0x2,0xd3,0x69,0x59,0xd5,0x9b,0xaa,0x4c,0x35,0x3,0x6e,0x9a,0xfa,0xbc,0xab,0x1b,0xc3,0x41,0xd8,0xf6,0x82,0x5a,0x2b,0x40,0xba,0xeb,0xd,0x5d,0x9d,0x4,0xe9,0xbb,0x3b,0xea,0xfc,0x1a,0xf4,0xf,0xd4,0xaf,0x81,0x1b,0x46,0x34,0x84,0x11,0x61,0xa7,0x27,0x9a,0xc2,0x52,0x6e,0xe6,0x17,0x9a,0xc3,0x59,0xa6,0xb3,0xf1,0xbd,0x1b,0xb3,0xf0,0x18,0x55,0xf9,0x61,0xf9,0x6c,0x96,0x63,0x1e,0x5e,0xff,0x2b,0xf7,0x5b,0xff,0xb,0x69,0x5a,0x14,0xfa,0x84,0xf6,0xc2,0x8,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char button_hover_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xea, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0xd3, 0x2d, 0x52, 0x82, 0x61, 0x14, 0xc5, 0xf1, 0xdf, 0x65, 0x58, 0x80, 0x45, 0x67, 0x94, 0x60, 0xa2, 0xab, 0x7b, 0xa0, 0xf9, 0xc1, 0xb8, 0x0, 0xb5, 0x13, 0xc4, 0x1d, 0xb0, 0x3, 0x8, 0x68, 0x56, 0x56, 0x20, 0x43, 0x64, 0xf, 0x6c, 0x80, 0x64, 0x80, 0xa0, 0x5, 0x36, 0xe0, 0x35, 0xf8, 0xf2, 0x26, 0xf9, 0x98, 0xa1, 0x7a, 0xd2, 0xd, 0xf7, 0x7f, 0xee, 0x99, 0x67, 0xce, 0xc3, 0x9e, 0x8a, 0x72, 0xca, 0x8c, 0xa7, 0xa1, 0x87, 0xc, 0xd, 0x1c, 0xae, 0xd9, 0xff, 0x8a, 0x34, 0xee, 0xde, 0x78, 0x15, 0x91, 0xa5, 0x41, 0xa7, 0x93, 0x95, 0xe5, 0xb9, 0x61, 0x72, 0x89, 0x29, 0x3e, 0xd6, 0x18, 0x9c, 0xa2, 0x2e, 0x8c, 0xe, 0x26, 0x9a, 0x9d, 0x4e, 0x7c, 0x57, 0x61, 0x79, 0xe6, 0x3e, 0xb9, 0x8c, 0xd0, 0xea, 0x5e, 0xc7, 0xcb, 0xa6, 0xc8, 0xed, 0xf7, 0x6c, 0xa1, 0xbf, 0xb8, 0x70, 0x87, 0xd7, 0xa, 0x14, 0xb1, 0xa7, 0xdb, 0x60, 0xe8, 0x35, 0xe3, 0x19, 0xd3, 0xa4, 0x1, 0xd5, 0xe2, 0x25, 0x8e, 0x31, 0xdb, 0x6, 0x97, 0xa, 0xb3, 0xe0, 0x4, 0x2a, 0x3b, 0x43, 0x6b, 0xf4, 0x6f, 0x50, 0x18, 0x24, 0x73, 0xa9, 0xb6, 0x33, 0x95, 0x6a, 0xc9, 0xbc, 0x34, 0x8, 0xc6, 0xa8, 0x17, 0x25, 0xd9, 0xa8, 0x62, 0xa7, 0x5e, 0x30, 0xbf, 0x3d, 0x38, 0x98, 0x18, 0x2c, 0x2e, 0xdc, 0xa2, 0xdf, 0x1e, 0xe6, 0xa3, 0xdd, 0xaa, 0x3c, 0x28, 0x8e, 0xaf, 0x62, 0x65, 0xb4, 0x47, 0xee, 0x93, 0x46, 0xa4, 0xa3, 0x3f, 0x93, 0x87, 0xcf, 0x60, 0xdc, 0xbb, 0xf2, 0xb6, 0xfa, 0x4c, 0x7b, 0xeb, 0x7, 0xd1, 0xc3, 0x49, 0x77, 0x7a, 0x49, 0x64, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char button_pressed_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x7,0x1c,0xc,0x14,0x2b,0xf9,0x77,0x52,0x64,0x0,0x0,0x1,0x92,0x49,0x44,0x41,0x54,0x38,0xcb,0x8d,0x93,0x4d,0x4e,0x1b,0x41,0x10,0x85,0xbf,0xea,0xaa,0x1e,0x20,0x83,0xf9,0x9,0x36,0xb2,0x85,0x72,0x84,0x8,0x65,0x11,0xe5,0xc,0x9c,0x80,0x73,0x10,0xee,0xc1,0x41,0x38,0x1,0xab,0xec,0xa3,0x2c,0x2,0x8a,0xe0,0x2,0x51,0xc2,0x48,0x46,0x42,0x64,0xc6,0x91,0x21,0xf4,0x74,0x16,0x2e,0xb0,0x71,0x2,0xf2,0x93,0x9e,0xba,0x16,0xdd,0xaf,0x5e,0xa9,0x5f,0x9,0x60,0x40,0x1,0x2c,0x1,0xcb,0x5e,0x2b,0x10,0x78,0x8a,0x16,0x48,0xc0,0x1d,0x30,0x6,0x6e,0x81,0x3b,0xf3,0x87,0x25,0xb0,0x9,0xac,0x7b,0xbd,0xc,0x88,0x13,0x20,0x3b,0xc7,0xc0,0x8,0xb8,0x1,0xae,0x81,0x91,0xf9,0xe5,0xad,0x77,0xbb,0x1f,0xf6,0x7b,0xdd,0xfe,0x41,0x4a,0x69,0x2d,0x93,0xf9,0x1f,0x4,0x41,0x55,0x7f,0xd,0xaf,0xaa,0xa3,0xaf,0x67,0x9f,0x8f,0x81,0x64,0xde,0xb1,0xbb,0xdd,0x1b,0x7c,0xac,0x9b,0x9b,0xce,0xd9,0xb7,0x2f,0xfc,0xf3,0x5e,0xa6,0xe5,0xee,0xdb,0xf7,0x6b,0xdb,0xbd,0xc1,0x21,0xf0,0x9,0x18,0x5,0x60,0x5,0xd8,0x48,0x6d,0xdb,0x39,0xbf,0x38,0xc5,0x34,0x62,0x36,0x47,0x9d,0xf2,0xfc,0xe2,0x94,0xd4,0xb6,0x1d,0x60,0x3,0x58,0x31,0x20,0x2,0x65,0x40,0x88,0x31,0x92,0xbd,0xbb,0x8,0xe4,0x3c,0x39,0x67,0x91,0x33,0x84,0x89,0xa5,0x12,0x88,0xf,0x3f,0x10,0x45,0x5,0xb3,0xc8,0x73,0x10,0x11,0xb2,0xab,0x8b,0xa,0xde,0xb8,0x30,0x9f,0xb0,0x8,0xa2,0xc4,0x58,0xb0,0x8,0x82,0x28,0xde,0x58,0xcc,0xff,0x5c,0x45,0x64,0x61,0x1,0x99,0xcc,0xa5,0x80,0x4e,0x5,0xc2,0xcb,0x2,0xe2,0x41,0x10,0x40,0xc2,0x53,0x81,0xc,0xa8,0x8a,0x52,0x2c,0xe8,0x40,0x27,0x23,0x28,0x90,0xcd,0xe3,0x79,0x1b,0x34,0x50,0x14,0x4b,0xf0,0x4c,0x88,0x66,0xbd,0x4,0xd,0x78,0x94,0x93,0x79,0x3c,0x9b,0x18,0x63,0x7a,0xbd,0xb9,0xa5,0xcd,0xa8,0x7e,0xb4,0x3a,0x2f,0x15,0x10,0xca,0x72,0x95,0x18,0x8b,0x4,0x34,0xc0,0xd8,0x80,0x1a,0x18,0x56,0xd5,0xcf,0x93,0x41,0x7f,0x67,0xaf,0xb3,0xba,0x1e,0x5e,0x8a,0xb2,0x99,0xb5,0x97,0xd5,0x8f,0x13,0x60,0x8,0xd4,0x2,0x74,0x9d,0x6f,0x80,0xbe,0x2f,0x55,0xe9,0x26,0xc2,0xcc,0x26,0x66,0x5f,0xa4,0x6b,0xa0,0x2,0xbe,0x3,0x57,0xe6,0x56,0x1e,0x66,0x1a,0x2,0xaf,0x3c,0x24,0x36,0x67,0xe0,0x1e,0xf8,0x3,0xfc,0xf6,0x6d,0xac,0x81,0xe6,0x2f,0x7c,0x22,0x6d,0x74,0x25,0xb,0xb3,0xa2,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char button_normal_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x2, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x93, 0xa1, 0x4e, 0xc3, 0x0, 0x10, 0x86, 0xbf, 0xbf, 0x99, 0x98, 0x60, 0x38, 0x48, 0x60, 0x82, 0x64, 0x4b, 0x1f, 0xa5, 0x6e, 0x82, 0xa0, 0xc7, 0x86, 0xaf, 0x20, 0xc, 0xd1, 0xe1, 0xea, 0x18, 0xa2, 0xc3, 0xc, 0xf4, 0xe8, 0x78, 0x1, 0x82, 0xec, 0xa3, 0x2c, 0x2c, 0x41, 0xc, 0x1, 0x12, 0x44, 0x67, 0x76, 0x88, 0x95, 0x41, 0x48, 0x43, 0x21, 0xb5, 0xfc, 0xea, 0xc4, 0x7d, 0x5f, 0x2e, 0x97, 0x3b, 0x28, 0x19, 0xad, 0x2b, 0x33, 0x9d, 0x5d, 0xde, 0x1e, 0x99, 0xe1, 0x61, 0xda, 0xca, 0xef, 0xb6, 0x17, 0x89, 0xe4, 0xfc, 0xa4, 0x3d, 0x46, 0xb2, 0xb5, 0x20, 0xc, 0x43, 0x27, 0xad, 0x35, 0xee, 0x40, 0x2d, 0xc4, 0x94, 0xa5, 0x1e, 0x73, 0x5, 0x8e, 0xed, 0x61, 0xb8, 0x18, 0xf7, 0xd5, 0xb7, 0x87, 0xfd, 0x30, 0xc, 0x97, 0x15, 0x80, 0xc5, 0x66, 0xb3, 0x8b, 0xd1, 0x42, 0xf2, 0x7, 0xbd, 0xf6, 0xf5, 0x4f, 0x23, 0x7, 0x51, 0xec, 0x4b, 0x1a, 0xa5, 0xb5, 0x46, 0x7, 0x18, 0x3b, 0xab, 0xe9, 0xf1, 0x10, 0xd3, 0x22, 0x18, 0xe0, 0xe2, 0xb4, 0x73, 0x85, 0x98, 0xa, 0x3c, 0x0, 0x27, 0xdb, 0xc4, 0xe, 0x30, 0x2f, 0x82, 0xbf, 0x64, 0x6e, 0xd2, 0xee, 0xa7, 0xa0, 0x44, 0xfe, 0x5, 0x99, 0x40, 0x66, 0x4f, 0x40, 0xfd, 0xf, 0x5c, 0x3d, 0x63, 0x56, 0x2, 0x83, 0x4, 0xc3, 0xd, 0xa2, 0xd8, 0x2f, 0x22, 0x83, 0x28, 0xf6, 0x31, 0x5c, 0x83, 0x4, 0xa0, 0x2, 0x50, 0x7d, 0x9d, 0xc5, 0xe9, 0x46, 0xf3, 0x40, 0xd2, 0xa8, 0x3f, 0x9c, 0x1c, 0xff, 0xee, 0x94, 0x67, 0x31, 0x7c, 0x7b, 0xa6, 0xfe, 0x70, 0xd2, 0x15, 0x78, 0x66, 0xce, 0x76, 0x1e, 0x2f, 0x2d, 0x9f, 0xd, 0x92, 0x41, 0xef, 0xf0, 0xe6, 0xe3, 0x99, 0x4a, 0xe7, 0x1d, 0xad, 0xe8, 0x5d, 0x6, 0x36, 0xf7, 0x1f, 0x56, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char checked_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x8d,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x58,0x56,0x63,0xb0,0xaf,0xb5,0x38,0x37,0x40,0x20,0x20,0x24,0xb6,0xb6,0xb9,0x57,0x57,0x5a,0x20,0x20,0x24,0x38,0x36,0x40,0x20,0x20,0x25,0x1e,0x1e,0x22,0x1f,0x1f,0x23,0x8b,0x8b,0x8d,0xff,0xff,0xff,0x20,0x20,0x24,0x22,0x22,0x27,0x23,0x23,0x28,0x42,0x42,0x47,0xf8,0xf8,0xf8,0xfe,0xfe,0xfe,0x25,0x25,0x2a,0x4e,0x4e,0x52,0x26,0x26,0x2b,0xc5,0xc5,0xc7,0xaa,0xaa,0xab,0xb8,0xb8,0xba,0x5f,0x5f,0x63,0x74,0x74,0x77,0xed,0xed,0xed,0x33,0x33,0x38,0x8d,0x8d,0x8f,0xb8,0xb8,0xb9,0x35,0x35,0x39,0x3a,0x3a,0x3e,0xfb,0xfb,0xfb,0xfa,0xfa,0xfa,0xb2,0xb2,0xb4,0x45,0x45,0x49,0x61,0x61,0x65,0x8f,0x8f,0x92,0x63,0x63,0x66,0x2a,0x2a,0x2f,0x40,0x82,0xb,0xf6,0x0,0x0,0x0,0xf,0x74,0x52,0x4e,0x53,0x0,0x7,0x27,0x50,0x66,0x68,0x6a,0x81,0xb4,0xfa,0xdd,0xfb,0xfb,0xb4,0xfa,0xb8,0xf0,0x7f,0x59,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x12,0x7b,0xbc,0x6c,0x0,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x8e,0x49,0x44,0x41,0x54,0x18,0xd3,0x65,0xcf,0x5b,0x12,0x82,0x30,0xc,0x40,0x51,0x48,0x5b,0x15,0x5,0x5b,0x42,0x2b,0x4,0x50,0x40,0xc5,0xb7,0xee,0x7f,0x79,0x96,0x8a,0x88,0x7a,0x3f,0xcf,0x4c,0x26,0x89,0xe7,0xfd,0xe5,0x3,0xe3,0xc2,0x35,0x99,0x82,0x6f,0x1,0x66,0x81,0x54,0xae,0x18,0xe7,0x60,0x81,0x5,0x89,0x36,0x5d,0xab,0x34,0x5b,0x30,0xb,0x5c,0x6a,0xa2,0xbc,0x20,0x2a,0x71,0x2d,0xb9,0x5,0xa1,0xc,0x6d,0xb0,0xa2,0x1a,0x9b,0xad,0x12,0x3d,0xec,0x70,0xdf,0x36,0x58,0x9b,0x1,0xe,0xc7,0xd3,0x19,0x4b,0xfa,0x80,0x9d,0xc9,0xd2,0xcb,0x18,0xae,0x88,0x37,0x1a,0x43,0x91,0xdf,0x1f,0x6f,0x70,0x6b,0x5f,0x69,0xb7,0x76,0x38,0xcc,0xe8,0x24,0xec,0xe,0x83,0x28,0xec,0x4f,0x97,0xcb,0x8,0xbe,0x9e,0xe3,0xcc,0x3d,0xf7,0xd3,0x13,0x10,0x58,0xd,0x44,0xd4,0xa5,0x38,0x3e,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char button_pressed_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xe8, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0xd3, 0x21, 0x4f, 0x42, 0x51, 0x18, 0xc6, 0xf1, 0xdf, 0xb9, 0x50, 0xa4, 0xeb, 0xa6, 0x4, 0x13, 0x1f, 0xe5, 0x36, 0x82, 0xf3, 0x3, 0x88, 0x9d, 0x60, 0x12, 0x93, 0x8c, 0x41, 0xc3, 0x8a, 0x66, 0xe4, 0x1b, 0x38, 0x23, 0x1f, 0x85, 0x64, 0x80, 0xa0, 0x9d, 0xc6, 0x7d, 0xd, 0x5e, 0x68, 0x17, 0xd8, 0xa8, 0xfe, 0xd3, 0xd9, 0xd9, 0xfb, 0xfc, 0x77, 0xde, 0xed, 0x39, 0x9c, 0x48, 0xda, 0x9d, 0x22, 0x52, 0xdf, 0xf8, 0x9e, 0x94, 0x7, 0xe7, 0x15, 0xc3, 0x3f, 0xc4, 0x7c, 0xa8, 0x37, 0x95, 0x52, 0xec, 0x4, 0x83, 0x18, 0x64, 0x1b, 0x8d, 0x8f, 0x44, 0x1b, 0x8b, 0xe0, 0xab, 0x42, 0x70, 0x8d, 0x16, 0x3e, 0x33, 0xeb, 0x9b, 0x41, 0x1a, 0x14, 0x75, 0x28, 0x9c, 0x75, 0x12, 0xed, 0x10, 0xdd, 0x51, 0x7a, 0x7a, 0xdb, 0xf7, 0xe4, 0x7e, 0x8c, 0xbb, 0x98, 0x6c, 0x34, 0xee, 0x30, 0xcd, 0x4a, 0x77, 0x8e, 0xc5, 0xa1, 0x30, 0xc, 0x53, 0xef, 0x15, 0x8b, 0x8c, 0x1c, 0xea, 0x10, 0x5c, 0x62, 0x79, 0x28, 0xbc, 0x25, 0x58, 0x6, 0x57, 0x90, 0x1d, 0x1b, 0xaa, 0xe2, 0x5f, 0x50, 0xa, 0x32, 0x56, 0x89, 0xe6, 0xb1, 0xa1, 0x44, 0x33, 0x63, 0xb5, 0x13, 0x14, 0xcc, 0xd1, 0x2a, 0x4b, 0xb2, 0x97, 0x72, 0xa6, 0x55, 0x66, 0xfe, 0x7a, 0x50, 0xb3, 0x9e, 0x15, 0x1a, 0xb7, 0x98, 0xf4, 0x63, 0xfc, 0x70, 0x4c, 0x95, 0x6b, 0xd6, 0xb3, 0xf2, 0xae, 0x24, 0x22, 0x3d, 0x7b, 0xe9, 0x64, 0xe4, 0x5, 0x17, 0x15, 0xfb, 0x7e, 0x17, 0xcc, 0x47, 0x1e, 0xdf, 0xb7, 0x9f, 0xe9, 0x64, 0x7e, 0x1, 0x43, 0xf2, 0x49, 0x4e, 0xb4, 0x2a, 0xa5, 0x9, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char checker_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x0,0x0,0x0,0x0,0xe1,0x64,0xe1,0x57,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xe,0xc4,0x0,0x0,0xe,0xc4,0x1,0x95,0x2b,0xe,0x1b,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x1a,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0xfc,0xcf,0xc0,0xc0,0xd0,0xc0,0xc0,0xc0,0xc0,0xc4,0x0,0x5,0x98,0xc,0xc6,0x7a,0xc2,0x6a,0x0,0x8b,0x7a,0x2,0x8d,0x68,0x67,0xe3,0xa,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char checked_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0xa, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xc5, 0x92, 0x3d, 0x6a, 0xc3, 0x40, 0x10, 0x46, 0xbf, 0x4f, 0x3f, 0xbd, 0x4d, 0x88, 0xd3, 0xed, 0xa, 0xcc, 0x9e, 0x22, 0x4d, 0x20, 0xc7, 0x91, 0xfb, 0xf8, 0x6, 0x82, 0xa4, 0xb, 0x4e, 0xf0, 0x25, 0xe4, 0x6b, 0xe4, 0x10, 0x8b, 0xa, 0x6d, 0xb1, 0x10, 0x37, 0x72, 0xbd, 0xa, 0x4c, 0x1a, 0x9, 0x14, 0xdb, 0x92, 0x52, 0x25, 0x53, 0xcd, 0x30, 0xfb, 0xde, 0xce, 0xc0, 0x0, 0xff, 0x1d, 0xec, 0x93, 0xba, 0xae, 0xef, 0x45, 0x64, 0xb, 0xe0, 0x76, 0x12, 0x20, 0x8f, 0x22, 0x52, 0x64, 0x59, 0xf6, 0x1, 0x0, 0xd1, 0xa0, 0xf7, 0x34, 0x7, 0x3, 0x80, 0x88, 0xac, 0x48, 0x6e, 0xfb, 0x3a, 0x1a, 0x36, 0x66, 0xd8, 0x86, 0xe4, 0xa1, 0x7b, 0x7b, 0x77, 0x21, 0x98, 0x83, 0xdb, 0xb6, 0xdd, 0x68, 0xad, 0x9f, 0x1, 0x94, 0xc3, 0xc6, 0xac, 0x80, 0xe4, 0x29, 0x8a, 0xa2, 0x8d, 0x31, 0xa6, 0xf2, 0xde, 0x6b, 0x0, 0xf, 0xbf, 0x16, 0x90, 0x3c, 0x91, 0xcc, 0x95, 0x52, 0x95, 0xf7, 0x5e, 0x87, 0x10, 0xde, 0x1, 0xdc, 0x4c, 0xa, 0xba, 0x3d, 0x1b, 0x0, 0x4d, 0x8, 0x21, 0x57, 0x4a, 0x55, 0xd6, 0xda, 0x75, 0x8, 0x61, 0x7f, 0xe, 0x3, 0x40, 0x72, 0x56, 0x97, 0x5a, 0xeb, 0x17, 0x6b, 0x6d, 0x9, 0x0, 0xc6, 0x98, 0xca, 0x5a, 0xbb, 0x4e, 0xd3, 0x74, 0x7, 0x60, 0x79, 0x6d, 0xca, 0x1f, 0x2, 0x92, 0x8f, 0xce, 0xb9, 0x83, 0x52, 0xaa, 0x2, 0x80, 0x6e, 0xec, 0xd7, 0x31, 0xf8, 0x42, 0x20, 0x22, 0xb, 0x0, 0x6f, 0xce, 0xb9, 0x3c, 0x49, 0x92, 0xaf, 0x6b, 0x3b, 0x8f, 0xa, 0xba, 0xb, 0x5b, 0x89, 0xc8, 0x42, 0x44, 0x76, 0x21, 0x4, 0x8c, 0xfd, 0x4c, 0xf2, 0xb3, 0xcf, 0x87, 0x87, 0x54, 0x90, 0x3c, 0x76, 0xe5, 0x72, 0xa, 0x8e, 0xe3, 0xb8, 0x98, 0x9a, 0xea, 0x6f, 0xe3, 0x1b, 0x38, 0xbf, 0x6e, 0xb3, 0x2e, 0xdd, 0xd5, 0x21, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char close_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x9b,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x31,0xe,0xc2,0x30,0x10,0x4,0x17,0xaa,0x3d,0x67,0xdb,0x58,0xd0,0xd3,0xf0,0xa3,0x7c,0x36,0x3c,0x82,0x48,0x44,0x22,0x6f,0xb1,0x4d,0x85,0x14,0x81,0xf,0x2c,0x28,0xe0,0xda,0xd5,0x8c,0x4e,0x77,0xb,0xfc,0xd5,0x98,0xd9,0x20,0x29,0x7a,0xb9,0xa4,0x68,0x66,0x83,0xb,0x93,0xcc,0x24,0xa7,0x9a,0x44,0x52,0x24,0x39,0x91,0xcc,0x55,0x89,0xa4,0xde,0xcc,0xce,0x24,0xb,0xc9,0x39,0x84,0xb0,0xf7,0xb2,0xae,0xeb,0x76,0xde,0x8a,0x4f,0x92,0x66,0xd8,0x91,0x5c,0x49,0x5e,0x9a,0xe1,0xb5,0x64,0x5,0x16,0x92,0x8b,0x7,0x6f,0x9b,0x8c,0x0,0x4a,0x29,0x9b,0x26,0x81,0xa4,0x3e,0xa5,0x34,0x2,0x38,0x2,0x58,0x0,0xcc,0x0,0xe,0x39,0xe7,0xd3,0xfa,0xb0,0xee,0xea,0x8f,0x7,0x7b,0xf5,0x9d,0xb7,0xb0,0x97,0x55,0x25,0x5f,0x17,0xe9,0x2e,0xf9,0xb8,0xca,0x3f,0x9b,0x1b,0x1a,0xe3,0x40,0x47,0xa0,0xda,0xda,0x61,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char checker_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x0, 0x0, 0x0, 0x0, 0xe1, 0x64, 0xe1, 0x57, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xe, 0xc4, 0x0, 0x0, 0xe, 0xc4, 0x1, 0x95, 0x2b, 0xe, 0x1b, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0x1a, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x63, 0xfc, 0xcf, 0xc0, 0xc0, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc4, 0x0, 0x5, 0x98, 0xc, 0xc6, 0x7a, 0xc2, 0x6a, 0x0, 0x8b, 0x7a, 0x2, 0x8d, 0x68, 0x67, 0xe3, 0xa, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char close_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x9b,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x31,0xe,0xc2,0x30,0x10,0x4,0x17,0xaa,0x3d,0x67,0xdb,0x58,0xd0,0xd3,0xf0,0xa3,0x7c,0x36,0x3c,0x82,0x48,0x44,0x22,0x6f,0xb1,0x4d,0x85,0x14,0x81,0xf,0x2c,0x28,0xe0,0xda,0xd5,0x8c,0x4e,0x77,0xb,0xfc,0xd5,0x98,0xd9,0x20,0x29,0x7a,0xb9,0xa4,0x68,0x66,0x83,0xb,0x93,0xcc,0x24,0xa7,0x9a,0x44,0x52,0x24,0x39,0x91,0xcc,0x55,0x89,0xa4,0xde,0xcc,0xce,0x24,0xb,0xc9,0x39,0x84,0xb0,0xf7,0xb2,0xae,0xeb,0x76,0xde,0x8a,0x4f,0x92,0x66,0xd8,0x91,0x5c,0x49,0x5e,0x9a,0xe1,0xb5,0x64,0x5,0x16,0x92,0x8b,0x7,0x6f,0x9b,0x8c,0x0,0x4a,0x29,0x9b,0x26,0x81,0xa4,0x3e,0xa5,0x34,0x2,0x38,0x2,0x58,0x0,0xcc,0x0,0xe,0x39,0xe7,0xd3,0xfa,0xb0,0xee,0xea,0x8f,0x7,0x7b,0xf5,0x9d,0xb7,0xb0,0x97,0x55,0x25,0x5f,0x17,0xe9,0x2e,0xf9,0xb8,0xca,0x3f,0x9b,0x1b,0x1a,0xe3,0x40,0x47,0xa0,0xda,0xda,0x61,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char close_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xbe, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xd5, 0x90, 0x3b, 0xe, 0xc2, 0x40, 0xc, 0x44, 0x9f, 0x9, 0x45, 0xf8, 0x14, 0x80, 0xb8, 0xf, 0x15, 0x8a, 0x8, 0x48, 0xdc, 0x94, 0x8a, 0x4, 0x85, 0x9a, 0xe3, 0x20, 0x48, 0xc3, 0xa7, 0x20, 0x32, 0x8d, 0x41, 0x8b, 0xc9, 0x4a, 0xb4, 0xb8, 0xda, 0x1d, 0x7b, 0x9e, 0x35, 0x86, 0xbf, 0x2f, 0x9, 0x3f, 0xaa, 0xba, 0x2, 0xba, 0x40, 0x25, 0x22, 0x37, 0xd7, 0xeb, 0x1, 0x19, 0xf0, 0x10, 0x91, 0xed, 0x4b, 0xef, 0x38, 0x60, 0x2, 0x4c, 0x81, 0xdc, 0xc, 0xa1, 0x39, 0xb7, 0x5e, 0x12, 0x1a, 0x3c, 0xa0, 0x2, 0x4e, 0xc0, 0x18, 0x58, 0xaa, 0x6a, 0x5f, 0x55, 0x53, 0x60, 0x61, 0x5a, 0xd, 0xec, 0xa3, 0x11, 0x6c, 0x5b, 0x6a, 0xdb, 0x26, 0xc0, 0xc5, 0xe4, 0x81, 0x99, 0xb, 0x1f, 0xed, 0xb, 0x10, 0x40, 0xd6, 0xc0, 0xcc, 0x66, 0xe, 0xc0, 0xc6, 0x9b, 0xdb, 0x22, 0xc4, 0x4a, 0x63, 0xcb, 0x7e, 0x89, 0xa0, 0xc0, 0xd0, 0x22, 0x94, 0x22, 0x72, 0x8d, 0x2, 0x9c, 0xb9, 0x6, 0xa, 0x3, 0x84, 0xda, 0x7, 0xc4, 0x47, 0xc8, 0x6c, 0xf0, 0x8c, 0x1d, 0x4c, 0x44, 0xee, 0xc0, 0xce, 0xb4, 0x11, 0x30, 0xf, 0xd, 0x1e, 0xd0, 0x0, 0x47, 0xdb, 0xf2, 0x3e, 0x98, 0xbd, 0x4b, 0xeb, 0x35, 0x6d, 0xb7, 0xf8, 0xe3, 0x7a, 0x2, 0x49, 0x7e, 0x47, 0x10, 0xc3, 0xf7, 0xae, 0x75, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char color_picker_hue_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x8,0x2,0x0,0x0,0x0,0xfd,0x5c,0x8b,0xcf,0x0,0x0,0x0,0x59,0x49,0x44,0x41,0x54,0x28,0x91,0xcd,0xd0,0x31,0xa,0x3,0x31,0x10,0x43,0xd1,0x87,0xc0,0xf6,0xfd,0x8f,0x1b,0xdb,0x30,0x69,0x76,0x21,0x65,0xd8,0x14,0x71,0xf1,0xf9,0x8c,0x84,0x9a,0x51,0x44,0x13,0xfd,0x21,0xe3,0x87,0xed,0xf7,0xa8,0xcd,0x2a,0x99,0x8e,0x46,0x2b,0x94,0xd0,0x43,0xb,0xe3,0x64,0xb3,0x2a,0xa6,0x93,0xb9,0x9f,0x9a,0x4e,0x3a,0x69,0x97,0xc7,0xe5,0x3b,0x1b,0xff,0xef,0x6d,0xa5,0xec,0x30,0xc3,0xeb,0xf2,0xc,0xeb,0xe3,0x5e,0x27,0xf4,0x8a,0x37,0x75,0x7b,0x8a,0xe5,0x90,0x9a,0xab,0x81,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char close_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xbe, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xd5, 0x90, 0x3b, 0xe, 0xc2, 0x40, 0xc, 0x44, 0x9f, 0x9, 0x45, 0xf8, 0x14, 0x80, 0xb8, 0xf, 0x15, 0x8a, 0x8, 0x48, 0xdc, 0x94, 0x8a, 0x4, 0x85, 0x9a, 0xe3, 0x20, 0x48, 0xc3, 0xa7, 0x20, 0x32, 0x8d, 0x41, 0x8b, 0xc9, 0x4a, 0xb4, 0xb8, 0xda, 0x1d, 0x7b, 0x9e, 0x35, 0x86, 0xbf, 0x2f, 0x9, 0x3f, 0xaa, 0xba, 0x2, 0xba, 0x40, 0x25, 0x22, 0x37, 0xd7, 0xeb, 0x1, 0x19, 0xf0, 0x10, 0x91, 0xed, 0x4b, 0xef, 0x38, 0x60, 0x2, 0x4c, 0x81, 0xdc, 0xc, 0xa1, 0x39, 0xb7, 0x5e, 0x12, 0x1a, 0x3c, 0xa0, 0x2, 0x4e, 0xc0, 0x18, 0x58, 0xaa, 0x6a, 0x5f, 0x55, 0x53, 0x60, 0x61, 0x5a, 0xd, 0xec, 0xa3, 0x11, 0x6c, 0x5b, 0x6a, 0xdb, 0x26, 0xc0, 0xc5, 0xe4, 0x81, 0x99, 0xb, 0x1f, 0xed, 0xb, 0x10, 0x40, 0xd6, 0xc0, 0xcc, 0x66, 0xe, 0xc0, 0xc6, 0x9b, 0xdb, 0x22, 0xc4, 0x4a, 0x63, 0xcb, 0x7e, 0x89, 0xa0, 0xc0, 0xd0, 0x22, 0x94, 0x22, 0x72, 0x8d, 0x2, 0x9c, 0xb9, 0x6, 0xa, 0x3, 0x84, 0xda, 0x7, 0xc4, 0x47, 0xc8, 0x6c, 0xf0, 0x8c, 0x1d, 0x4c, 0x44, 0xee, 0xc0, 0xce, 0xb4, 0x11, 0x30, 0xf, 0xd, 0x1e, 0xd0, 0x0, 0x47, 0xdb, 0xf2, 0x3e, 0x98, 0xbd, 0x4b, 0xeb, 0x35, 0x6d, 0xb7, 0xf8, 0xe3, 0x7a, 0x2, 0x49, 0x7e, 0x47, 0x10, 0xc3, 0xf7, 0xae, 0x75, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char color_picker_sample_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x14,0x8,0x2,0x0,0x0,0x0,0xed,0x20,0x74,0x8,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x9,0x18,0xc,0x27,0x37,0x29,0x4f,0x42,0x2d,0x0,0x0,0x0,0x61,0x49,0x44,0x41,0x54,0x68,0xde,0xed,0xd9,0xb1,0xd,0x0,0x21,0xc,0x3,0x40,0x40,0xbf,0x5f,0x66,0xcd,0x84,0xf9,0x96,0x19,0xf0,0x5d,0x87,0x5c,0x5b,0x9,0xca,0x9e,0x99,0x75,0xe9,0xee,0xfb,0x59,0x55,0x52,0xe9,0xc3,0xe9,0x59,0x10,0x4c,0x1,0x50,0x0,0x50,0x0,0x8,0xf4,0xf9,0x15,0x49,0x93,0x53,0x13,0x0,0x2b,0x10,0x28,0x0,0x28,0x0,0x64,0xd9,0x2e,0xc1,0xd2,0xe4,0xd4,0x4,0xc0,0xa,0x4,0xa,0x0,0xa,0x0,0x59,0x5c,0x82,0xa5,0xd1,0xa9,0x9,0x80,0x15,0x8,0x14,0x0,0x14,0x0,0xb2,0xfc,0x5b,0xb2,0x3c,0x5a,0x4,0xa1,0xf3,0x57,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char color_picker_hue_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x8, 0x2, 0x0, 0x0, 0x0, 0xfd, 0x5c, 0x8b, 0xcf, 0x0, 0x0, 0x0, 0x59, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xcd, 0xd0, 0x31, 0xa, 0x3, 0x31, 0x10, 0x43, 0xd1, 0x87, 0xc0, 0xf6, 0xfd, 0x8f, 0x1b, 0xdb, 0x30, 0x69, 0x76, 0x21, 0x65, 0xd8, 0x14, 0x71, 0xf1, 0xf9, 0x8c, 0x84, 0x9a, 0x51, 0x44, 0x13, 0xfd, 0x21, 0xe3, 0x87, 0xed, 0xf7, 0xa8, 0xcd, 0x2a, 0x99, 0x8e, 0x46, 0x2b, 0x94, 0xd0, 0x43, 0xb, 0xe3, 0x64, 0xb3, 0x2a, 0xa6, 0x93, 0xb9, 0x9f, 0x9a, 0x4e, 0x3a, 0x69, 0x97, 0xc7, 0xe5, 0x3b, 0x1b, 0xff, 0xef, 0x6d, 0xa5, 0xec, 0x30, 0xc3, 0xeb, 0xf2, 0xc, 0xeb, 0xe3, 0x5e, 0x27, 0xf4, 0x8a, 0x37, 0x75, 0x7b, 0x8a, 0xe5, 0x90, 0x9a, 0xab, 0x81, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char dosfont_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x1,0x0,0x0,0x0,0x0,0xeb,0x45,0x5c,0x66,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x74,0x52,0x4e,0x53,0x0,0x0,0x76,0x93,0xcd,0x38,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0x1,0xdd,0x8a,0x13,0xa4,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x89,0x0,0x0,0xb,0x89,0x1,0x37,0xc9,0xcb,0xad,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x2,0x83,0x49,0x44,0x41,0x54,0x48,0xc7,0xed,0xd4,0xb1,0x6e,0xdb,0x30,0x10,0x0,0x50,0x22,0x3,0x27,0x22,0xc8,0x78,0x83,0x91,0xa9,0x1f,0xc0,0xa9,0x10,0xa,0x7e,0xc,0x11,0x14,0x87,0xc,0x1c,0x32,0x9,0x1a,0xe,0x46,0xa6,0xfc,0x43,0xff,0x86,0xb5,0x80,0x9b,0x88,0x8e,0x5d,0x64,0x18,0x9e,0xdc,0xd5,0x53,0x91,0xc1,0xa0,0x7a,0xa4,0xe4,0xd4,0x31,0xd2,0x25,0x70,0x97,0xa2,0x37,0x48,0xe6,0x33,0x45,0xdd,0x51,0x24,0x95,0x7a,0x23,0xe0,0x75,0x13,0xb,0xd8,0x93,0xbf,0x51,0x51,0xa3,0xac,0x99,0xc9,0x29,0x87,0x81,0x83,0xb2,0x0,0xc7,0xfe,0xee,0x43,0x58,0x85,0x95,0xb7,0xa6,0xb6,0xaf,0x7a,0xe9,0x93,0x63,0xc3,0xf2,0xc,0x96,0x3e,0xba,0x97,0x11,0x3,0xb5,0x46,0xc0,0x15,0x30,0x43,0x1,0xbd,0x6,0x81,0x71,0xa9,0xb2,0x82,0x9,0x92,0x3d,0xf6,0xb0,0xbd,0x5c,0xf2,0x53,0xf2,0x75,0xc,0x11,0x5f,0xc7,0xe0,0xc4,0xaa,0xb4,0x40,0x41,0xc4,0x69,0xd0,0x27,0x55,0x12,0x13,0x78,0x74,0xa7,0xb5,0xd8,0x3f,0x14,0x77,0x81,0x0,0x22,0x93,0x9b,0x4c,0x54,0x5b,0x72,0x6d,0x98,0x17,0xd1,0x33,0xb3,0x94,0xaa,0x3c,0x93,0xea,0xb4,0x76,0x31,0x6a,0x66,0x0,0xa9,0x59,0x1c,0x8c,0xe,0x33,0xc0,0x12,0x4c,0x29,0xc2,0xa5,0xc3,0xc1,0xd0,0xb2,0x64,0x6a,0x60,0xa3,0xc0,0xea,0xac,0x19,0x58,0x4b,0xa9,0x4a,0x17,0xf0,0xda,0x68,0xb6,0x5,0xec,0xb2,0xf6,0x88,0x33,0xc8,0x18,0x52,0xd5,0x5a,0x1,0xb3,0x61,0x1,0x53,0xdf,0x2,0x51,0x2d,0x33,0xdd,0x12,0x59,0xea,0x94,0x95,0x3c,0x80,0x2e,0x5e,0xf9,0xdb,0x71,0x73,0x70,0xcf,0x39,0x3b,0x76,0xb7,0xbb,0x7d,0xcf,0x74,0x50,0xd,0x62,0x40,0x44,0x6,0x83,0xfe,0xc7,0x8e,0x51,0x5,0x5c,0xe1,0xdd,0xdd,0xaa,0xc2,0xf8,0x53,0x80,0x31,0xe2,0xfd,0x7d,0x14,0x8,0x7e,0xcc,0x5,0x28,0x62,0xd7,0xc5,0xc,0xa6,0xf3,0xc3,0x46,0xa6,0x30,0xd7,0x1e,0x1b,0x2e,0xd0,0x7f,0x63,0x5f,0x1f,0xf1,0x32,0xc9,0x90,0x82,0xef,0xb9,0x82,0xc,0x5a,0x1,0xef,0x66,0x90,0xd7,0x7a,0x2c,0x80,0x13,0x94,0xc4,0xf6,0x9f,0xd8,0x75,0xbb,0x2c,0x89,0xed,0xff,0x42,0xe9,0xa7,0xfb,0xa4,0x84,0xec,0x13,0x45,0x7,0x1a,0xb9,0x97,0x18,0x65,0xab,0x4,0xf9,0x54,0x8c,0x3c,0x54,0xe8,0xed,0xa3,0x7c,0x7b,0x55,0xe0,0x8b,0x0,0xf6,0x4f,0x36,0xd6,0x3d,0xc3,0xe8,0x41,0xc0,0xa1,0xb1,0xdb,0x9,0xa8,0x29,0x0,0xe,0xec,0xc3,0x4,0xc1,0x8,0xc,0x0,0xd6,0x36,0xf3,0x23,0xba,0x80,0x3,0x6f,0x17,0x15,0xbe,0x4b,0xe5,0x8c,0x23,0xc2,0x57,0x7b,0x5d,0x61,0x53,0xc0,0x61,0xf,0xbd,0xd5,0x15,0x68,0x47,0x8e,0x0,0x7b,0x37,0xba,0xab,0xba,0x59,0xcc,0x79,0x3d,0xd7,0xaf,0x5a,0xe3,0x85,0x66,0x69,0xab,0x16,0x32,0x31,0x5b,0xd0,0xdb,0x66,0x2,0x2f,0x6f,0xe,0xb2,0x42,0xb5,0x87,0xdf,0xf0,0x59,0xae,0x6a,0x86,0xae,0x93,0x4c,0x7d,0x1b,0x9a,0x6b,0x84,0xdd,0x9a,0xd6,0xca,0xc8,0x89,0xc3,0xfb,0xd4,0x82,0xe,0x30,0xa2,0x2c,0x18,0xc2,0x98,0xb2,0x4f,0x8,0xba,0x83,0xa1,0x40,0x12,0x88,0x6f,0x43,0x38,0x82,0x1c,0x1f,0x15,0x70,0x82,0x96,0xa8,0xa5,0x3d,0xed,0x9c,0xde,0xb9,0x1,0xe9,0xb8,0x5f,0x4c,0x39,0xd2,0xa6,0xac,0xa6,0x48,0xe7,0xd0,0x95,0x53,0xb0,0xc4,0x7b,0x97,0xd4,0xcd,0x3c,0xdd,0xf0,0xd0,0x4e,0xbf,0xe6,0x65,0x24,0x5b,0x7b,0x7d,0xe,0xe5,0xd6,0xae,0xe9,0x90,0x64,0xfd,0x70,0x9e,0x21,0xb5,0x6c,0x5,0xa4,0xa2,0x87,0xe9,0xa3,0x25,0xf4,0x5,0x5c,0x39,0x61,0xa6,0x1e,0xbe,0x11,0x18,0x80,0xed,0xb,0x18,0x9b,0x70,0x70,0xec,0x5f,0x80,0x3f,0x26,0x27,0xb3,0xc9,0x33,0xc8,0x5c,0x2c,0x5a,0x59,0x1f,0xcb,0x2c,0x89,0x9d,0xae,0xf,0x7d,0xcc,0xdb,0x9c,0xdd,0xd5,0xed,0x7c,0x7f,0xbe,0xd0,0x52,0xf9,0x1f,0xff,0x76,0xfc,0x2,0x24,0x3a,0x65,0x42,0xf6,0x41,0x91,0x95,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char color_picker_sample_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x14, 0x8, 0x2, 0x0, 0x0, 0x0, 0xed, 0x20, 0x74, 0x8, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x9, 0x18, 0xc, 0x27, 0x37, 0x29, 0x4f, 0x42, 0x2d, 0x0, 0x0, 0x0, 0x61, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0xd9, 0xb1, 0xd, 0x0, 0x21, 0xc, 0x3, 0x40, 0x40, 0xbf, 0x5f, 0x66, 0xcd, 0x84, 0xf9, 0x96, 0x19, 0xf0, 0x5d, 0x87, 0x5c, 0x5b, 0x9, 0xca, 0x9e, 0x99, 0x75, 0xe9, 0xee, 0xfb, 0x59, 0x55, 0x52, 0xe9, 0xc3, 0xe9, 0x59, 0x10, 0x4c, 0x1, 0x50, 0x0, 0x50, 0x0, 0x8, 0xf4, 0xf9, 0x15, 0x49, 0x93, 0x53, 0x13, 0x0, 0x2b, 0x10, 0x28, 0x0, 0x28, 0x0, 0x64, 0xd9, 0x2e, 0xc1, 0xd2, 0xe4, 0xd4, 0x4, 0xc0, 0xa, 0x4, 0xa, 0x0, 0xa, 0x0, 0x59, 0x5c, 0x82, 0xa5, 0xd1, 0xa9, 0x9, 0x80, 0x15, 0x8, 0x14, 0x0, 0x14, 0x0, 0xb2, 0xfc, 0x5b, 0xb2, 0x3c, 0x5a, 0x4, 0xa1, 0xf3, 0x57, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char dropdown_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x4,0x0,0x0,0x0,0x6e,0x6,0x76,0x0,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x64,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x60,0xf8,0xc0,0xcc,0x0,0x5,0x1f,0x98,0x19,0x18,0x18,0x3f,0x30,0xff,0xd3,0x83,0x70,0xff,0x33,0x33,0x30,0x8,0x9f,0x61,0xf9,0x6b,0xff,0x65,0x2f,0x3,0x1c,0xbc,0xea,0x66,0x62,0xbc,0xcf,0xc0,0xc0,0xf0,0x7,0x26,0xc0,0x74,0x89,0x89,0xe9,0x29,0x9f,0x14,0x3,0xb,0xc3,0x5f,0x6,0x6,0x6,0x6,0xee,0x38,0x91,0x25,0xc,0xc,0xc,0x1f,0xd8,0xde,0x4b,0x3e,0xfc,0xff,0xf0,0xff,0x9b,0x58,0xb8,0xce,0xf,0x6c,0xef,0xe4,0xde,0xa4,0x32,0x20,0x83,0xf,0x4c,0x30,0x16,0x0,0x75,0xad,0x1b,0x7f,0x65,0xec,0x78,0x4c,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char dosfont_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x80, 0x1, 0x0, 0x0, 0x0, 0x0, 0xeb, 0x45, 0x5c, 0x66, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x2, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x0, 0x76, 0x93, 0xcd, 0x38, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0x1, 0xdd, 0x8a, 0x13, 0xa4, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x89, 0x0, 0x0, 0xb, 0x89, 0x1, 0x37, 0xc9, 0xcb, 0xad, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x2, 0x83, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd4, 0xb1, 0x6e, 0xdb, 0x30, 0x10, 0x0, 0x50, 0x22, 0x3, 0x27, 0x22, 0xc8, 0x78, 0x83, 0x91, 0xa9, 0x1f, 0xc0, 0xa9, 0x10, 0xa, 0x7e, 0xc, 0x11, 0x14, 0x87, 0xc, 0x1c, 0x32, 0x9, 0x1a, 0xe, 0x46, 0xa6, 0xfc, 0x43, 0xff, 0x86, 0xb5, 0x80, 0x9b, 0x88, 0x8e, 0x5d, 0x64, 0x18, 0x9e, 0xdc, 0xd5, 0x53, 0x91, 0xc1, 0xa0, 0x7a, 0xa4, 0xe4, 0xd4, 0x31, 0xd2, 0x25, 0x70, 0x97, 0xa2, 0x37, 0x48, 0xe6, 0x33, 0x45, 0xdd, 0x51, 0x24, 0x95, 0x7a, 0x23, 0xe0, 0x75, 0x13, 0xb, 0xd8, 0x93, 0xbf, 0x51, 0x51, 0xa3, 0xac, 0x99, 0xc9, 0x29, 0x87, 0x81, 0x83, 0xb2, 0x0, 0xc7, 0xfe, 0xee, 0x43, 0x58, 0x85, 0x95, 0xb7, 0xa6, 0xb6, 0xaf, 0x7a, 0xe9, 0x93, 0x63, 0xc3, 0xf2, 0xc, 0x96, 0x3e, 0xba, 0x97, 0x11, 0x3, 0xb5, 0x46, 0xc0, 0x15, 0x30, 0x43, 0x1, 0xbd, 0x6, 0x81, 0x71, 0xa9, 0xb2, 0x82, 0x9, 0x92, 0x3d, 0xf6, 0xb0, 0xbd, 0x5c, 0xf2, 0x53, 0xf2, 0x75, 0xc, 0x11, 0x5f, 0xc7, 0xe0, 0xc4, 0xaa, 0xb4, 0x40, 0x41, 0xc4, 0x69, 0xd0, 0x27, 0x55, 0x12, 0x13, 0x78, 0x74, 0xa7, 0xb5, 0xd8, 0x3f, 0x14, 0x77, 0x81, 0x0, 0x22, 0x93, 0x9b, 0x4c, 0x54, 0x5b, 0x72, 0x6d, 0x98, 0x17, 0xd1, 0x33, 0xb3, 0x94, 0xaa, 0x3c, 0x93, 0xea, 0xb4, 0x76, 0x31, 0x6a, 0x66, 0x0, 0xa9, 0x59, 0x1c, 0x8c, 0xe, 0x33, 0xc0, 0x12, 0x4c, 0x29, 0xc2, 0xa5, 0xc3, 0xc1, 0xd0, 0xb2, 0x64, 0x6a, 0x60, 0xa3, 0xc0, 0xea, 0xac, 0x19, 0x58, 0x4b, 0xa9, 0x4a, 0x17, 0xf0, 0xda, 0x68, 0xb6, 0x5, 0xec, 0xb2, 0xf6, 0x88, 0x33, 0xc8, 0x18, 0x52, 0xd5, 0x5a, 0x1, 0xb3, 0x61, 0x1, 0x53, 0xdf, 0x2, 0x51, 0x2d, 0x33, 0xdd, 0x12, 0x59, 0xea, 0x94, 0x95, 0x3c, 0x80, 0x2e, 0x5e, 0xf9, 0xdb, 0x71, 0x73, 0x70, 0xcf, 0x39, 0x3b, 0x76, 0xb7, 0xbb, 0x7d, 0xcf, 0x74, 0x50, 0xd, 0x62, 0x40, 0x44, 0x6, 0x83, 0xfe, 0xc7, 0x8e, 0x51, 0x5, 0x5c, 0xe1, 0xdd, 0xdd, 0xaa, 0xc2, 0xf8, 0x53, 0x80, 0x31, 0xe2, 0xfd, 0x7d, 0x14, 0x8, 0x7e, 0xcc, 0x5, 0x28, 0x62, 0xd7, 0xc5, 0xc, 0xa6, 0xf3, 0xc3, 0x46, 0xa6, 0x30, 0xd7, 0x1e, 0x1b, 0x2e, 0xd0, 0x7f, 0x63, 0x5f, 0x1f, 0xf1, 0x32, 0xc9, 0x90, 0x82, 0xef, 0xb9, 0x82, 0xc, 0x5a, 0x1, 0xef, 0x66, 0x90, 0xd7, 0x7a, 0x2c, 0x80, 0x13, 0x94, 0xc4, 0xf6, 0x9f, 0xd8, 0x75, 0xbb, 0x2c, 0x89, 0xed, 0xff, 0x42, 0xe9, 0xa7, 0xfb, 0xa4, 0x84, 0xec, 0x13, 0x45, 0x7, 0x1a, 0xb9, 0x97, 0x18, 0x65, 0xab, 0x4, 0xf9, 0x54, 0x8c, 0x3c, 0x54, 0xe8, 0xed, 0xa3, 0x7c, 0x7b, 0x55, 0xe0, 0x8b, 0x0, 0xf6, 0x4f, 0x36, 0xd6, 0x3d, 0xc3, 0xe8, 0x41, 0xc0, 0xa1, 0xb1, 0xdb, 0x9, 0xa8, 0x29, 0x0, 0xe, 0xec, 0xc3, 0x4, 0xc1, 0x8, 0xc, 0x0, 0xd6, 0x36, 0xf3, 0x23, 0xba, 0x80, 0x3, 0x6f, 0x17, 0x15, 0xbe, 0x4b, 0xe5, 0x8c, 0x23, 0xc2, 0x57, 0x7b, 0x5d, 0x61, 0x53, 0xc0, 0x61, 0xf, 0xbd, 0xd5, 0x15, 0x68, 0x47, 0x8e, 0x0, 0x7b, 0x37, 0xba, 0xab, 0xba, 0x59, 0xcc, 0x79, 0x3d, 0xd7, 0xaf, 0x5a, 0xe3, 0x85, 0x66, 0x69, 0xab, 0x16, 0x32, 0x31, 0x5b, 0xd0, 0xdb, 0x66, 0x2, 0x2f, 0x6f, 0xe, 0xb2, 0x42, 0xb5, 0x87, 0xdf, 0xf0, 0x59, 0xae, 0x6a, 0x86, 0xae, 0x93, 0x4c, 0x7d, 0x1b, 0x9a, 0x6b, 0x84, 0xdd, 0x9a, 0xd6, 0xca, 0xc8, 0x89, 0xc3, 0xfb, 0xd4, 0x82, 0xe, 0x30, 0xa2, 0x2c, 0x18, 0xc2, 0x98, 0xb2, 0x4f, 0x8, 0xba, 0x83, 0xa1, 0x40, 0x12, 0x88, 0x6f, 0x43, 0x38, 0x82, 0x1c, 0x1f, 0x15, 0x70, 0x82, 0x96, 0xa8, 0xa5, 0x3d, 0xed, 0x9c, 0xde, 0xb9, 0x1, 0xe9, 0xb8, 0x5f, 0x4c, 0x39, 0xd2, 0xa6, 0xac, 0xa6, 0x48, 0xe7, 0xd0, 0x95, 0x53, 0xb0, 0xc4, 0x7b, 0x97, 0xd4, 0xcd, 0x3c, 0xdd, 0xf0, 0xd0, 0x4e, 0xbf, 0xe6, 0x65, 0x24, 0x5b, 0x7b, 0x7d, 0xe, 0xe5, 0xd6, 0xae, 0xe9, 0x90, 0x64, 0xfd, 0x70, 0x9e, 0x21, 0xb5, 0x6c, 0x5, 0xa4, 0xa2, 0x87, 0xe9, 0xa3, 0x25, 0xf4, 0x5, 0x5c, 0x39, 0x61, 0xa6, 0x1e, 0xbe, 0x11, 0x18, 0x80, 0xed, 0xb, 0x18, 0x9b, 0x70, 0x70, 0xec, 0x5f, 0x80, 0x3f, 0x26, 0x27, 0xb3, 0xc9, 0x33, 0xc8, 0x5c, 0x2c, 0x5a, 0x59, 0x1f, 0xcb, 0x2c, 0x89, 0x9d, 0xae, 0xf, 0x7d, 0xcc, 0xdb, 0x9c, 0xdd, 0xd5, 0xed, 0x7c, 0x7f, 0xbe, 0xd0, 0x52, 0xf9, 0x1f, 0xff, 0x76, 0xfc, 0x2, 0x24, 0x3a, 0x65, 0x42, 0xf6, 0x41, 0x91, 0x95, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe, 0x17, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char error_icon_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x4,0x0,0x0,0x0,0xd9,0x73,0xb2,0x7f,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x5d,0x49,0x44,0x41,0x54,0x48,0xc7,0xed,0x94,0xc1,0xe,0x80,0x20,0xc,0x43,0x5b,0xe3,0xff,0xff,0x72,0x3d,0xcc,0x85,0xa1,0xbb,0x18,0xf4,0x62,0xca,0xa9,0x74,0xe3,0x65,0xd,0x1,0xa,0x6b,0x6b,0x5b,0x3c,0x6f,0x80,0x1,0x7f,0x1,0xec,0x29,0x78,0xbe,0x2a,0x31,0x94,0x98,0x9e,0x98,0xf5,0xab,0x37,0x1,0xaa,0x19,0x8d,0xe2,0x50,0xb1,0x9b,0xbd,0xb7,0x23,0x8c,0x21,0x7b,0xd5,0xf5,0x3d,0x88,0x50,0x1,0xdf,0x46,0xb8,0xf,0x5c,0xef,0xa6,0xab,0xd1,0x7f,0xa2,0x1,0x6,0x0,0x0,0xe,0x62,0x6,0x31,0x47,0xb6,0x7f,0xdd,0x14,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char dropdown_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x68, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0xa5, 0x8e, 0x21, 0xe, 0xc3, 0x60, 0x14, 0x82, 0x3f, 0xfe, 0xa4, 0x99, 0xee, 0x9, 0x9e, 0xa8, 0xe9, 0xe1, 0x66, 0x76, 0x92, 0x99, 0x9a, 0x1d, 0x6e, 0x82, 0x13, 0x54, 0xcf, 0xfc, 0x4c, 0xbd, 0xa4, 0x6e, 0x62, 0x28, 0x2, 0x4, 0x80, 0x7f, 0x21, 0xdb, 0x2f, 0xe0, 0x6, 0x3c, 0xaa, 0xea, 0x4, 0xb0, 0xbd, 0x2, 0x4f, 0xe0, 0x33, 0x92, 0x2c, 0x49, 0x76, 0x49, 0x87, 0xed, 0xd5, 0xf6, 0x2a, 0xe9, 0x48, 0xb2, 0x27, 0x59, 0xd4, 0xc2, 0x9c, 0x73, 0x1b, 0x63, 0xbc, 0x1, 0x9a, 0x27, 0xb9, 0xab, 0x2b, 0x3b, 0x4, 0xd0, 0x66, 0x55, 0x9d, 0xea, 0x33, 0x97, 0x5d, 0xae, 0x7f, 0x7e, 0xe2, 0xb, 0xf3, 0x6d, 0x3b, 0xdb, 0xfc, 0x5b, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char focus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x4,0x3,0x0,0x0,0x0,0xa4,0x5b,0x41,0xd4,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x30,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0xff,0xff,0xff,0xb9,0xa2,0x9b,0xc9,0x0,0x0,0x0,0xf,0x74,0x52,0x4e,0x53,0x0,0xe,0x39,0x68,0x7a,0x7b,0x3a,0x74,0x10,0x8,0x69,0xf,0x6,0x75,0x11,0xb8,0x16,0x0,0x1,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xf,0x18,0xba,0x0,0xd9,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x38,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x10,0x32,0x9,0xd,0x75,0x56,0x64,0x48,0xef,0x9c,0x39,0x73,0x46,0x19,0xc3,0x6a,0x6,0x20,0xd8,0xc5,0x10,0x3,0xa2,0x8e,0x32,0x44,0x82,0xa8,0xa9,0xd8,0x29,0xa8,0x12,0xb0,0x6,0x29,0x86,0xdc,0x9d,0x33,0x67,0xce,0x2b,0x63,0x10,0x3,0x1b,0x6,0x0,0xdf,0xc6,0x11,0x6d,0xb8,0xf4,0x9c,0xac,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char error_icon_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x20, 0x8, 0x4, 0x0, 0x0, 0x0, 0xd9, 0x73, 0xb2, 0x7f, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0x5d, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x94, 0xc1, 0xe, 0x80, 0x20, 0xc, 0x43, 0x5b, 0xe3, 0xff, 0xff, 0x72, 0x3d, 0xcc, 0x85, 0xa1, 0xbb, 0x18, 0xf4, 0x62, 0xca, 0xa9, 0x74, 0xe3, 0x65, 0xd, 0x1, 0xa, 0x6b, 0x6b, 0x5b, 0x3c, 0x6f, 0x80, 0x1, 0x7f, 0x1, 0xec, 0x29, 0x78, 0xbe, 0x2a, 0x31, 0x94, 0x98, 0x9e, 0x98, 0xf5, 0xab, 0x37, 0x1, 0xaa, 0x19, 0x8d, 0xe2, 0x50, 0xb1, 0x9b, 0xbd, 0xb7, 0x23, 0x8c, 0x21, 0x7b, 0xd5, 0xf5, 0x3d, 0x88, 0x50, 0x1, 0xdf, 0x46, 0xb8, 0xf, 0x5c, 0xef, 0xa6, 0xab, 0xd1, 0x7f, 0xa2, 0x1, 0x6, 0x0, 0x0, 0xe, 0x62, 0x6, 0x31, 0x47, 0xb6, 0x7f, 0xdd, 0x14, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char frame_focus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x4,0x3,0x0,0x0,0x0,0xa4,0x5b,0x41,0xd4,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x30,0x50,0x4c,0x54,0x45,0xff,0xff,0xff,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0x47,0x8c,0xbf,0xff,0xff,0xff,0xcc,0x40,0x27,0xb9,0x0,0x0,0x0,0xf,0x74,0x52,0x4e,0x53,0x0,0xe,0x39,0x68,0x7a,0x7b,0x3a,0x74,0x10,0x8,0x69,0xf,0x6,0x75,0x11,0xb8,0x16,0x0,0x1,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x0,0x88,0x5,0x1d,0x48,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x38,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x10,0x32,0x9,0xd,0x75,0x56,0x64,0x48,0xef,0x9c,0x39,0x73,0x46,0x19,0xc3,0x6a,0x6,0x20,0xd8,0xc5,0x10,0x3,0xa2,0x8e,0x32,0x44,0x82,0xa8,0xa9,0xd8,0x29,0xa8,0x12,0xb0,0x6,0x29,0x86,0xdc,0x9d,0x33,0x67,0xce,0x2b,0x63,0x10,0x3,0x1b,0x6,0x0,0xdf,0xc6,0x11,0x6d,0xb8,0xf4,0x9c,0xac,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char focus_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0x63, 0x60, 0x18, 0x5, 0xa3, 0x80, 0x3a, 0x0, 0x0, 0x2, 0x4c, 0x0, 0x1, 0x4e, 0x94, 0x8c, 0x4d, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char full_panel_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x3,0x0,0x0,0x0,0x44,0xa4,0x8a,0xc6,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x33,0x50,0x4c,0x54,0x45,0x27,0x27,0x29,0x26,0x26,0x28,0x25,0x25,0x27,0x24,0x24,0x26,0x23,0x23,0x25,0x22,0x22,0x24,0x21,0x21,0x23,0x1e,0x1e,0x20,0x1d,0x1d,0x1f,0x1c,0x1c,0x1e,0x31,0x30,0x32,0x50,0x4e,0x54,0x4e,0x4c,0x50,0x4c,0x4a,0x4e,0x3d,0x3b,0x3f,0x38,0x36,0x3a,0xff,0xff,0xff,0x4,0xb3,0x69,0x9b,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x10,0x95,0xb2,0xd,0x2c,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x63,0x49,0x44,0x41,0x54,0x38,0xcb,0xed,0x93,0x29,0x12,0xc0,0x30,0xc,0xc4,0x7c,0x3b,0x67,0xf3,0xff,0xdf,0xb6,0xe1,0xce,0x98,0x15,0x45,0x58,0xb3,0x68,0x5,0x0,0x80,0x48,0x21,0x88,0xb0,0x41,0x62,0x51,0xb,0x50,0x61,0xda,0xa,0xb1,0x79,0xa9,0x1,0xc5,0x8d,0xe9,0x1b,0x60,0x6b,0x7d,0xcc,0x80,0xd1,0x9b,0x31,0x2,0x8a,0xf7,0x67,0x85,0x3c,0xdd,0x5,0x81,0xb4,0x8c,0x75,0x60,0x14,0x25,0x20,0xab,0xf3,0x24,0xcc,0x6a,0x57,0xb8,0xc2,0xff,0x42,0x76,0xda,0xf4,0xf6,0x69,0x38,0x69,0x7a,0x79,0xbc,0x49,0xfe,0x2f,0x65,0xd3,0x2d,0x45,0xb,0x5e,0xbc,0x3b,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char frame_focus_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0x63, 0x60, 0x18, 0x5, 0xa3, 0x80, 0x3a, 0x0, 0x0, 0x2, 0x4c, 0x0, 0x1, 0x4e, 0x94, 0x8c, 0x4d, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x17,0xd,0x5,0x12,0xa1,0x38,0x83,0x9b,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x2,0x74,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0x3d,0x6f,0xd3,0x60,0x10,0xc7,0x7f,0x17,0x9b,0x26,0x25,0x22,0xad,0xa,0x8,0xf1,0x52,0x75,0x0,0x16,0x24,0x90,0x2a,0x96,0x7c,0x1,0x6,0xc4,0xce,0xc4,0x17,0x0,0x31,0xb0,0x30,0x0,0x23,0x82,0x85,0x5,0x9,0x4,0x5f,0x80,0x89,0x1d,0x31,0xf0,0x5,0x58,0x50,0x25,0x50,0x59,0x80,0xa1,0xe2,0xad,0x28,0x34,0x4a,0x3,0x25,0x76,0xea,0xe7,0x39,0x6,0x3f,0x76,0x6d,0xc7,0x49,0x5f,0xd8,0x90,0x6f,0xb1,0xf5,0xe4,0xb9,0xdf,0xdd,0xfd,0xef,0x22,0xf9,0x84,0x2d,0x13,0xa0,0x6,0x78,0xee,0x29,0xe4,0x4d,0x1,0xb,0x18,0xf7,0x54,0x32,0x97,0x6a,0xc0,0x7e,0x60,0xe,0x38,0xc,0xb4,0x80,0x7d,0x5,0xc0,0x26,0xd0,0x7,0x3a,0x40,0x17,0xf8,0x3,0xd8,0x24,0x6a,0x13,0x38,0x35,0x73,0x60,0xf6,0x6a,0xa3,0xde,0xb8,0x38,0x35,0x55,0x3f,0x41,0x89,0xd,0x87,0xe1,0x97,0x20,0xc,0x5e,0xae,0xff,0xea,0x3d,0x5,0x3e,0x2,0x1b,0xe2,0x22,0x2d,0xcc,0xcd,0x1e,0x7c,0x78,0x72,0xe1,0xf4,0xa5,0x7b,0xb7,0x1f,0x7c,0x9e,0x6e,0x35,0xca,0xfc,0x19,0xf4,0x3,0xee,0xdc,0xbf,0x39,0xff,0x69,0xe5,0xc3,0x8b,0x6e,0x6f,0xed,0x6,0xb0,0x22,0x40,0x3,0x58,0x3c,0x7a,0xe4,0xf8,0xab,0x67,0x4f,0x9e,0x77,0xa3,0xc8,0x12,0xd,0xa3,0x52,0x80,0x3f,0xe5,0xe3,0xfb,0x35,0xae,0x5c,0xbb,0x3c,0xf7,0xfd,0xc7,0xd7,0xb,0xc0,0x92,0xef,0x74,0x68,0xfa,0x9e,0xdf,0x1c,0xfc,0xe,0xbb,0x88,0xc6,0x47,0xa,0x2a,0x59,0x85,0x95,0x61,0xb8,0xc9,0x30,0x4,0xdf,0xf3,0x9b,0xae,0x6c,0x49,0x0,0x1e,0x80,0x51,0x1b,0xfb,0xc7,0x2,0xc7,0x5a,0x3b,0x88,0x66,0xcf,0x63,0xf3,0x12,0x80,0x26,0xbf,0xa8,0xb5,0xa8,0xa,0x88,0x22,0x8,0x8a,0x22,0x2a,0x19,0x37,0x1d,0xe9,0xad,0x9f,0x6b,0xb4,0x55,0x14,0x5,0x55,0x44,0xe2,0x32,0x6c,0xe2,0x24,0x71,0x18,0x9d,0x4,0xb0,0x6a,0xd3,0x1b,0x2a,0xe9,0x4b,0xfc,0xae,0xe4,0x45,0x19,0x9f,0x81,0x2b,0xdb,0x15,0xa6,0xa2,0x19,0x2d,0xec,0x8,0x24,0x7,0x30,0xd6,0x16,0xf8,0x82,0xa8,0xc6,0x45,0x68,0x52,0xbf,0x4e,0xce,0x60,0xeb,0x42,0x5c,0xb4,0x66,0x9c,0x6c,0xc9,0x1f,0xa4,0x0,0xb0,0x39,0xc5,0xc9,0xa1,0x28,0x89,0x5f,0x14,0xd1,0x5a,0x37,0x32,0x89,0xf2,0x82,0xc6,0x3,0xe0,0xda,0xa,0x22,0x3a,0xa9,0xb,0x9a,0x26,0xaa,0xf1,0x41,0x9a,0x42,0x2,0xb2,0xb2,0x6d,0x6,0x5b,0xa3,0xab,0x23,0xd5,0x48,0x32,0x92,0xe3,0x33,0x10,0x37,0xb7,0x2a,0xea,0xee,0x4a,0x2a,0x42,0xe,0x5a,0x2a,0xa2,0x51,0x37,0x40,0x85,0x48,0x96,0xb4,0x23,0xdb,0x88,0x68,0x5c,0xc4,0xcc,0x3c,0x14,0xa7,0x6f,0xa2,0x6,0xaa,0xb1,0x7c,0xd9,0x30,0xaa,0x79,0xc7,0x49,0x93,0x78,0xf7,0xd1,0xad,0x79,0x76,0x69,0x29,0x20,0xda,0x34,0x2c,0x9e,0x3d,0xff,0x7a,0x27,0x4e,0x4b,0xef,0xde,0xb4,0x4b,0x33,0x58,0xef,0xf7,0x76,0x9b,0x0,0x35,0xfe,0xd1,0x2a,0x40,0x5,0xa8,0x0,0x15,0xa0,0x2,0x54,0x80,0xa,0xf0,0x5f,0x2,0xa4,0xe4,0x13,0x78,0xd7,0x19,0xd8,0x3d,0xf8,0xda,0x4,0x60,0x81,0xc0,0x18,0x13,0xda,0x68,0x7,0x5e,0x11,0x18,0x63,0x42,0x20,0x0,0x6c,0xcd,0xad,0xb2,0x6b,0x41,0x38,0x58,0xee,0x74,0x57,0xdb,0x93,0x20,0x36,0x82,0x4e,0x77,0xb5,0x1d,0x84,0x83,0x65,0x60,0xd,0x30,0xc9,0xe6,0x3a,0x3,0x9c,0x6b,0x35,0x67,0x1f,0x37,0xea,0xd3,0x67,0x3c,0xcf,0x2b,0x15,0xd7,0x18,0x63,0x83,0x70,0xf0,0xbe,0xbf,0xd1,0xbb,0xe,0xbc,0x5,0xd6,0x25,0xb3,0xc2,0xb5,0x80,0x63,0xc0,0x21,0xa0,0x3e,0x66,0xf9,0xe,0x81,0x9f,0xc0,0x37,0xb7,0x47,0x1b,0x29,0x8,0xea,0x27,0xfb,0xe0,0x98,0x2a,0xd4,0x95,0x1c,0xed,0x51,0xf8,0x51,0xfb,0xb,0x1,0xbe,0x20,0x9f,0x90,0x81,0x17,0xaa,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char full_panel_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x1, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x93, 0x31, 0x4a, 0x3, 0x61, 0x10, 0x85, 0xdf, 0x9b, 0xfd, 0x97, 0x9c, 0xc0, 0x80, 0x62, 0x6d, 0xb7, 0x75, 0xec, 0x84, 0x40, 0x1a, 0x5, 0xaf, 0x60, 0xe, 0xe1, 0x1, 0x72, 0x14, 0xbd, 0x82, 0x62, 0xb5, 0x10, 0xb0, 0x33, 0x9d, 0x90, 0x3, 0xa8, 0x20, 0x29, 0x62, 0x1f, 0xdd, 0xcd, 0xbf, 0xf3, 0x2c, 0x76, 0x9, 0x11, 0x56, 0x12, 0xd9, 0xd6, 0x7, 0x3f, 0xfc, 0xc5, 0xcc, 0x37, 0x6f, 0xe0, 0xd, 0xd0, 0x51, 0xdc, 0xfe, 0x67, 0x83, 0xe1, 0x98, 0xc0, 0x8, 0xd4, 0x41, 0x6b, 0xb5, 0xf8, 0x21, 0x20, 0x9f, 0xcf, 0xa6, 0x37, 0x0, 0xb4, 0x5, 0x98, 0x58, 0x36, 0x78, 0xbc, 0x27, 0x79, 0x2e, 0x79, 0xf4, 0xaa, 0xa, 0xad, 0xd3, 0x92, 0x24, 0x1a, 0x2d, 0x48, 0x7a, 0x98, 0xcf, 0xce, 0x2e, 0x81, 0x89, 0x27, 0x0, 0x90, 0xd, 0x6c, 0x4c, 0xf2, 0xba, 0xf8, 0x5a, 0xa1, 0xf8, 0x5c, 0x59, 0x5c, 0xaf, 0xd1, 0xfa, 0xca, 0xc2, 0xe4, 0x42, 0x48, 0xd3, 0x93, 0xfe, 0xf1, 0xdb, 0xeb, 0xf2, 0xfd, 0xe5, 0xd9, 0x1a, 0x1b, 0x23, 0xc9, 0x63, 0x2c, 0xcb, 0x9d, 0x3b, 0xc7, 0x75, 0x1, 0xc9, 0x2b, 0x2, 0x23, 0x0, 0xb0, 0x7a, 0x35, 0x1d, 0xba, 0x7b, 0xab, 0xed, 0x36, 0xb9, 0x7b, 0x22, 0xe8, 0x68, 0x3, 0xe8, 0xa2, 0x7f, 0x40, 0x3, 0x20, 0xb8, 0xa0, 0x59, 0xdc, 0xb7, 0x89, 0x66, 0x91, 0xe0, 0x62, 0x3, 0x10, 0x90, 0x1b, 0x2d, 0x84, 0xb4, 0xb7, 0xb3, 0x39, 0xa4, 0x3d, 0x18, 0x2d, 0x8, 0xc8, 0xeb, 0xe1, 0x0, 0x9a, 0x28, 0xdf, 0x91, 0xbc, 0x70, 0x79, 0xd4, 0x1f, 0xa2, 0xfc, 0xf3, 0x98, 0x4e, 0x87, 0x57, 0x75, 0xc2, 0xd4, 0xff, 0xc5, 0xfc, 0x52, 0x40, 0x3e, 0x7f, 0x9a, 0xde, 0xa2, 0x39, 0xa6, 0xce, 0xfa, 0x6, 0xb9, 0xde, 0x7b, 0x63, 0x8a, 0x21, 0x2a, 0x35, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_breakpoint_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x6,0xf,0x3b,0x1c,0xec,0x64,0x51,0x75,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x8f,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0xd7,0xbd,0x9,0xc0,0x20,0x10,0x5,0xe0,0x53,0x2c,0x5d,0x40,0x74,0x4,0xf7,0x9f,0xc4,0x11,0x22,0x2e,0x60,0x6f,0x9a,0x13,0x4e,0x21,0x41,0x50,0x48,0x91,0x77,0x95,0xf8,0xf3,0x79,0x62,0xf5,0x88,0x36,0x4b,0xf5,0x41,0x2d,0xf1,0x22,0x22,0xbf,0x78,0x2e,0x5b,0x97,0x2,0xc9,0xc3,0xc,0x2c,0x95,0xdc,0x6f,0x78,0xce,0x5b,0x97,0xd4,0x42,0x27,0xd9,0xba,0x14,0xac,0x4b,0xa1,0x96,0xd8,0x24,0x20,0x9f,0x41,0x1d,0x7b,0xba,0x59,0xb6,0xaf,0xa7,0x3d,0x7e,0x78,0xdb,0x54,0xbc,0x36,0x74,0xa7,0x77,0x7f,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x4,0xe4,0xb7,0xfc,0xc8,0x6b,0x59,0xce,0x99,0x39,0x95,0x71,0xb4,0x6b,0x4b,0x89,0xf5,0x44,0x72,0x3d,0x93,0x9d,0x3f,0xad,0x1b,0x54,0xed,0x49,0xd3,0x36,0x45,0x4f,0x1f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x46, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc5, 0x24, 0x14, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xca, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0xce, 0xa1, 0xe, 0x41, 0x71, 0x14, 0xc7, 0xf1, 0xef, 0xf9, 0xef, 0x6a, 0x82, 0xd, 0xe9, 0xa, 0x66, 0xf3, 0x2, 0x9e, 0x41, 0xc0, 0x33, 0x90, 0x5, 0xe3, 0x61, 0x68, 0x34, 0xaa, 0xa0, 0x29, 0x1e, 0xe1, 0x4e, 0x37, 0xc5, 0x26, 0xd9, 0x2e, 0x81, 0x8d, 0x76, 0x8f, 0x80, 0xa0, 0x5d, 0x7f, 0xb4, 0xf3, 0x4b, 0xa7, 0xfc, 0x3e, 0xbf, 0x3, 0x5f, 0x46, 0xa2, 0x48, 0x33, 0xfb, 0xdd, 0xb9, 0x2b, 0x4a, 0x43, 0xa1, 0x90, 0xaa, 0x4, 0x31, 0xe2, 0x96, 0x87, 0xe3, 0x66, 0x1c, 0xec, 0x77, 0xe7, 0x2e, 0x4a, 0x5b, 0x3f, 0x58, 0x55, 0x28, 0xa0, 0x49, 0xa7, 0x98, 0xab, 0xe2, 0x48, 0x68, 0x7a, 0x7e, 0x8f, 0x8, 0x2d, 0x87, 0x90, 0xf7, 0x5, 0x10, 0xf2, 0xce, 0xbb, 0xfc, 0x8c, 0x1, 0x6, 0x18, 0x60, 0xc0, 0xcf, 0x80, 0xe0, 0x75, 0xc, 0xfa, 0xf5, 0xf5, 0x27, 0xc5, 0xe1, 0x68, 0x55, 0xfb, 0xc9, 0x7, 0x6, 0x18, 0x60, 0x80, 0x1, 0x6, 0x18, 0x60, 0x80, 0x1, 0x6, 0x18, 0xf0, 0x1f, 0x40, 0x20, 0x6, 0x8, 0xc3, 0xca, 0x35, 0x6d, 0x29, 0x2c, 0x55, 0x6e, 0x0, 0xaa, 0xc4, 0xb2, 0x98, 0x5f, 0x7a, 0xaa, 0x49, 0xc7, 0x67, 0x5d, 0x60, 0xea, 0x4a, 0xe5, 0xec, 0x58, 0xc4, 0xcd, 0x54, 0x1f, 0x9f, 0xa4, 0x89, 0x2a, 0xb1, 0x26, 0xcc, 0xe, 0xa7, 0xed, 0xc4, 0x67, 0xf8, 0x2d, 0x77, 0x97, 0xcc, 0x36, 0xeb, 0x4d, 0x52, 0xcd, 0xa3, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_close_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x6,0x0,0x0,0x0,0x56,0x75,0x5c,0xe7,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x93,0x49,0x44,0x41,0x54,0x28,0x91,0x95,0x92,0x31,0xe,0xc2,0x30,0x10,0x4,0x17,0xaa,0x3d,0x7b,0xdb,0x58,0xa4,0xa7,0xe1,0x47,0xfe,0x2c,0x3c,0x82,0x48,0x44,0x22,0x6f,0xb1,0x4d,0x15,0xc9,0x20,0x1f,0x52,0xae,0xdd,0xd9,0x2b,0xe6,0xe,0x0,0x60,0x66,0x59,0x52,0x82,0x33,0x92,0x92,0x99,0x65,0xec,0x30,0xc9,0x4a,0x72,0x19,0x95,0x24,0x25,0x92,0xb,0xc9,0x6a,0x66,0x19,0x92,0x26,0x33,0x7b,0x92,0x6c,0x24,0xd7,0x10,0xc2,0xdc,0xc1,0x5f,0x59,0x8c,0xf1,0x32,0xc,0x42,0x8,0xb3,0xb,0x3b,0xdb,0xde,0x24,0x5f,0x2e,0xdc,0x97,0x3a,0xb0,0x91,0xdc,0x7e,0xe1,0xb3,0x67,0x66,0x9f,0xd6,0xda,0x69,0x58,0x90,0x34,0x95,0x52,0xee,0x0,0x6e,0x0,0x36,0x0,0x2b,0x80,0x6b,0xad,0xf5,0xd1,0x8b,0x70,0x6d,0xb8,0xf6,0xfe,0xd9,0x18,0x96,0xe,0x1f,0xe,0x38,0xf6,0x1a,0x1f,0x9f,0xec,0x40,0x47,0x56,0x51,0x84,0x77,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_breakpoint_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x40, 0x8, 0x6, 0x0, 0x0, 0x0, 0x13, 0x7d, 0xf7, 0x96, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x8, 0x6, 0xf, 0x3b, 0x1c, 0xec, 0x64, 0x51, 0x75, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe, 0x17, 0x0, 0x0, 0x0, 0x8f, 0x49, 0x44, 0x41, 0x54, 0x58, 0xc3, 0xed, 0xd7, 0xbd, 0x9, 0xc0, 0x20, 0x10, 0x5, 0xe0, 0x53, 0x2c, 0x5d, 0x40, 0x74, 0x4, 0xf7, 0x9f, 0xc4, 0x11, 0x22, 0x2e, 0x60, 0x6f, 0x9a, 0x13, 0x4e, 0x21, 0x41, 0x50, 0x48, 0x91, 0x77, 0x95, 0xf8, 0xf3, 0x79, 0x62, 0xf5, 0x88, 0x36, 0x4b, 0xf5, 0x41, 0x2d, 0xf1, 0x22, 0x22, 0xbf, 0x78, 0x2e, 0x5b, 0x97, 0x2, 0xc9, 0xc3, 0xc, 0x2c, 0x95, 0xdc, 0x6f, 0x78, 0xce, 0x5b, 0x97, 0xd4, 0x42, 0x27, 0xd9, 0xba, 0x14, 0xac, 0x4b, 0xa1, 0x96, 0xd8, 0x24, 0x20, 0x9f, 0x41, 0x1d, 0x7b, 0xba, 0x59, 0xb6, 0xaf, 0xa7, 0x3d, 0x7e, 0x78, 0xdb, 0x54, 0xbc, 0x36, 0x74, 0xa7, 0x77, 0x7f, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e, 0x4, 0xe4, 0xb7, 0xfc, 0xc8, 0x6b, 0x59, 0xce, 0x99, 0x39, 0x95, 0x71, 0xb4, 0x6b, 0x4b, 0x89, 0xf5, 0x44, 0x72, 0x3d, 0x93, 0x9d, 0x3f, 0xad, 0x1b, 0x54, 0xed, 0x49, 0xd3, 0x36, 0x45, 0x4f, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_comment_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x19,0x11,0x2a,0x1d,0xd6,0x78,0x8b,0x40,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x1,0x74,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0xbf,0x4e,0xc2,0x50,0x14,0xc6,0x7f,0x6d,0x91,0x56,0x1b,0x90,0x80,0x2c,0x44,0xc2,0xa0,0x2e,0xe,0x3e,0x3,0x89,0x93,0xf1,0x1d,0x4c,0x18,0x4d,0x1c,0x7c,0xb,0x57,0x7,0x13,0x47,0x13,0x77,0x46,0xe3,0xc4,0x4b,0x98,0x60,0x4c,0xd4,0x81,0x60,0x58,0x94,0xff,0x22,0x2d,0xd0,0xd6,0xe5,0xde,0x88,0x8,0x2,0x35,0x6e,0xf7,0x5b,0x6e,0x9a,0x9c,0xef,0x77,0xee,0x39,0x37,0x1d,0x3e,0x8d,0x2f,0x69,0x80,0xe,0x18,0xe2,0xd4,0xf8,0xae,0x0,0xf0,0x1,0x4f,0x9c,0x1,0x63,0x45,0x3a,0xb0,0x6,0x24,0x81,0x34,0x10,0x7,0x56,0x26,0x0,0x43,0xa0,0x3,0xbc,0x2,0xd,0xe0,0x3,0xf0,0x65,0x57,0x1b,0xd8,0x5e,0x8f,0x25,0x8e,0x2d,0xd3,0x3a,0x88,0x46,0xcd,0x4d,0xa6,0x68,0x30,0x70,0x5f,0x1c,0xd7,0xb9,0x6d,0x77,0x5b,0x97,0xc0,0x13,0xd0,0xd3,0x44,0xa7,0x5c,0x32,0x91,0x3a,0xdf,0xca,0xed,0x1c,0x16,0x52,0xdd,0x2a,0xbf,0xe8,0xaa,0x1e,0xcb,0x3e,0x57,0x1e,0x6f,0x1a,0xad,0xfa,0x29,0x50,0x91,0x33,0xa7,0x4d,0xd3,0xca,0xcf,0x33,0x3,0x14,0x52,0xdd,0xaa,0x69,0x5a,0x79,0x31,0xaa,0x21,0x97,0x65,0x47,0x8c,0x88,0xcd,0x82,0x12,0xb5,0x36,0xa0,0x49,0x80,0xc1,0xf2,0x32,0x24,0x20,0x90,0x4f,0x12,0x46,0x3a,0x7f,0x94,0x2,0x28,0x80,0x2,0x88,0x5f,0x7b,0xfc,0xe3,0xec,0xe1,0x3d,0x1b,0x1a,0x30,0x1a,0x7a,0x1c,0x65,0xd8,0x5f,0xc4,0x74,0x5d,0xa3,0xa4,0x5e,0x41,0x1,0x14,0x40,0x1,0x14,0x40,0x1,0x14,0x40,0x1,0xfe,0x15,0xa0,0x4d,0xc9,0x88,0x4b,0xdf,0xc0,0xf,0xe1,0xf5,0x25,0xc0,0x7,0x1c,0xcf,0xf3,0xdc,0x45,0x9d,0xa2,0xd6,0x1,0x7c,0x5d,0x44,0xd9,0xba,0xe3,0xf6,0xcb,0xc5,0xa6,0x5d,0x9a,0x67,0x2e,0x36,0xed,0x92,0xe3,0xf6,0xcb,0x40,0x1d,0xf0,0x64,0x72,0x5d,0x7,0xf6,0xe2,0x76,0xe2,0xc2,0x32,0x57,0x77,0xd,0xc3,0xd0,0x67,0x74,0xf6,0x1d,0xb7,0x7f,0xdf,0xe9,0xb5,0x4e,0x80,0x3b,0xa0,0xad,0x8d,0x45,0xb8,0x38,0x90,0x1,0x36,0x0,0x73,0x46,0xf8,0x76,0x81,0x37,0xa0,0x26,0x72,0xb4,0xa7,0x4d,0x2c,0x34,0x22,0xf3,0xe0,0x8c,0x9,0x2,0x31,0xf2,0x28,0xe4,0xe2,0x7f,0xea,0x13,0x64,0x47,0x6c,0x83,0x36,0x6d,0xd2,0x40,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_close_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x93, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0x95, 0x92, 0x31, 0xe, 0xc2, 0x30, 0x10, 0x4, 0x17, 0xaa, 0x3d, 0x7b, 0xdb, 0x58, 0xa4, 0xa7, 0xe1, 0x47, 0xfe, 0x2c, 0x3c, 0x82, 0x48, 0x44, 0x22, 0x6f, 0xb1, 0x4d, 0x15, 0xc9, 0x20, 0x1f, 0x52, 0xae, 0xdd, 0xd9, 0x2b, 0xe6, 0xe, 0x0, 0x60, 0x66, 0x59, 0x52, 0x82, 0x33, 0x92, 0x92, 0x99, 0x65, 0xec, 0x30, 0xc9, 0x4a, 0x72, 0x19, 0x95, 0x24, 0x25, 0x92, 0xb, 0xc9, 0x6a, 0x66, 0x19, 0x92, 0x26, 0x33, 0x7b, 0x92, 0x6c, 0x24, 0xd7, 0x10, 0xc2, 0xdc, 0xc1, 0x5f, 0x59, 0x8c, 0xf1, 0x32, 0xc, 0x42, 0x8, 0xb3, 0xb, 0x3b, 0xdb, 0xde, 0x24, 0x5f, 0x2e, 0xdc, 0x97, 0x3a, 0xb0, 0x91, 0xdc, 0x7e, 0xe1, 0xb3, 0x67, 0x66, 0x9f, 0xd6, 0xda, 0x69, 0x58, 0x90, 0x34, 0x95, 0x52, 0xee, 0x0, 0x6e, 0x0, 0x36, 0x0, 0x2b, 0x80, 0x6b, 0xad, 0xf5, 0xd1, 0x8b, 0x70, 0x6d, 0xb8, 0xf6, 0xfe, 0xd9, 0x18, 0x96, 0xe, 0x1f, 0xe, 0x38, 0xf6, 0x1a, 0x1f, 0x9f, 0xec, 0x40, 0x47, 0x56, 0x51, 0x84, 0x77, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_comment_focus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x0,0x0,0x0,0x0,0x0,0xf9,0x43,0xbb,0x7f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x9,0x2,0xe,0x16,0x22,0xbe,0xef,0xc2,0xe1,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x1,0x4a,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0xd7,0xbf,0x4b,0xdb,0x41,0x1c,0xc6,0xf1,0xd7,0x37,0x51,0x4,0x3,0xa,0xa2,0x20,0xd2,0xe2,0xe2,0x64,0x41,0xdc,0xdc,0xac,0xe0,0x54,0xdc,0xb2,0xe6,0x2f,0x10,0x1a,0xf0,0x4f,0x11,0x22,0xf8,0x17,0x64,0xcd,0x26,0x9d,0x1c,0x74,0x73,0x13,0x21,0x4e,0x2e,0xa5,0xa5,0x14,0xac,0x82,0x82,0x62,0xd0,0x7c,0xd3,0xa1,0x77,0x18,0x35,0xfe,0x48,0xa4,0xdb,0x3d,0x70,0xdc,0xf2,0x79,0xde,0x77,0xf7,0x39,0x38,0xee,0xc9,0xdc,0x2b,0x43,0x1,0xc5,0x30,0x67,0x1e,0xaa,0x83,0x1c,0xed,0x30,0x77,0x74,0x15,0x15,0x30,0x8a,0x9,0x4c,0x61,0xc,0xc3,0x8f,0x0,0xb7,0xb8,0xc4,0x29,0xce,0x71,0x8d,0x3c,0xae,0x5a,0xc2,0x5c,0xa3,0x5a,0x59,0xc7,0x17,0x7c,0xd0,0x5b,0x3f,0xf1,0xad,0x5c,0xab,0x6f,0xe3,0x4,0x57,0x59,0x58,0x69,0xb6,0x51,0xad,0x6c,0x62,0xed,0x77,0xf3,0xf0,0x87,0x17,0x34,0xfd,0x69,0xf1,0x23,0x76,0xca,0xb5,0xfa,0x6,0xbe,0xc7,0x33,0x4f,0x61,0xe5,0x35,0x33,0x84,0x9a,0x95,0xe0,0x29,0xc6,0x66,0x95,0xc2,0x78,0xab,0x62,0x7d,0x16,0x1,0x45,0xfd,0xab,0x18,0x1,0x9d,0x78,0x25,0x83,0xa8,0xe0,0x9d,0x4a,0x80,0x4,0x48,0x80,0x7f,0x1a,0xea,0xf1,0xda,0xc,0xe,0x38,0xd8,0xdf,0x5b,0x7d,0x8b,0x69,0x69,0xf9,0xf3,0x6e,0xba,0x85,0x4,0x48,0x80,0x4,0x48,0x80,0x4,0x48,0x80,0x4,0xf8,0xaf,0x80,0xac,0x47,0x46,0xec,0x7b,0x7,0xf9,0x0,0xde,0x3c,0x2,0x72,0xdc,0xa0,0xd5,0x87,0xb9,0x15,0x3c,0x79,0x21,0x44,0xd9,0x33,0x34,0xbb,0x3f,0x4f,0xaf,0x7c,0xb0,0x9a,0xc1,0xd3,0x8e,0xc9,0x75,0x1c,0xb,0x8d,0x6a,0x65,0xb,0xf3,0x2f,0x34,0x37,0xc7,0x71,0xb9,0x56,0xff,0x8a,0x23,0x5c,0x64,0x5d,0x11,0x6e,0xc,0x33,0x98,0xc4,0xc8,0x33,0xe1,0xbb,0x85,0x3f,0xf8,0x15,0x72,0x74,0x3b,0x7b,0xd4,0xd0,0xa1,0x98,0x7,0x9f,0xd9,0x41,0x27,0x1c,0xf9,0x6e,0xc0,0xc6,0x3f,0xd5,0x5f,0x9d,0x54,0x4e,0x15,0xfd,0xeb,0xb4,0x4f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_comment_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x46, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc5, 0x24, 0x14, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x8b, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0xd8, 0xb1, 0xd, 0xc2, 0x40, 0xc, 0x5, 0xd0, 0x97, 0x28, 0x75, 0x90, 0x18, 0x6, 0x58, 0x80, 0x92, 0x82, 0x1d, 0x18, 0x8b, 0x2d, 0x22, 0xa, 0xd8, 0x0, 0xb6, 0xc9, 0x4, 0x47, 0x13, 0x4, 0x25, 0xc9, 0x41, 0xf7, 0x5d, 0xf9, 0x24, 0xff, 0x77, 0xae, 0x4d, 0x65, 0x35, 0xa5, 0x94, 0xe, 0x7, 0x6c, 0xb0, 0xfa, 0x32, 0x37, 0xe2, 0x81, 0xa1, 0x29, 0xa5, 0x1c, 0xb1, 0x5f, 0xb8, 0xc0, 0xad, 0xc5, 0x76, 0x61, 0x18, 0x76, 0x2d, 0xfa, 0xa, 0xa0, 0x6f, 0x2b, 0xc2, 0x20, 0x40, 0x80, 0x0, 0x1, 0x7e, 0x6, 0x74, 0x1f, 0xfd, 0x79, 0x66, 0xf6, 0xf4, 0x93, 0xd, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x0, 0x1, 0x2, 0x4, 0xf8, 0x1b, 0x30, 0x4e, 0xfd, 0x7a, 0x46, 0xee, 0x35, 0x3b, 0xd6, 0x1e, 0x20, 0xae, 0x1d, 0x86, 0xe9, 0x31, 0xf7, 0x4, 0x72, 0xc7, 0x65, 0xe1, 0xc7, 0xef, 0x7a, 0x2, 0x67, 0x50, 0x16, 0x1c, 0x57, 0x97, 0xfe, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_default_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x39,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x12,0x19,0xe,0xb,0x10,0xe,0xb,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x12,0x19,0x0,0x0,0x0,0x19,0x15,0x1c,0x24,0x1e,0x27,0x16,0x12,0x19,0xff,0xff,0xff,0x2b,0x4d,0xfd,0x66,0x0,0x0,0x0,0xf,0x74,0x52,0x4e,0x53,0x0,0x46,0x47,0x3f,0x2b,0x11,0x3,0xfd,0xd3,0xcd,0x2a,0x73,0x45,0xf8,0x3d,0x3f,0x57,0xda,0x84,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x12,0x7b,0xbc,0x6c,0x0,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x38,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0x64,0x2,0x2,0x46,0x8,0xc9,0xcc,0xc2,0xca,0xc6,0xc0,0x8f,0x4,0xd8,0x39,0x98,0x59,0x19,0x50,0x80,0x0,0x27,0x17,0xaa,0x0,0x83,0x20,0x37,0x9a,0x0,0x3f,0xd3,0xc0,0x8,0xf0,0xa0,0x9,0xf0,0xf2,0x61,0x3a,0x1d,0xc3,0x73,0xe8,0xde,0x7,0x0,0x89,0x4d,0x2,0xf2,0x16,0xd3,0x74,0x45,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_comment_focus_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x46, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc5, 0x24, 0x14, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x97, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0xd8, 0xb1, 0x11, 0xc2, 0x30, 0x10, 0x44, 0xd1, 0x7f, 0x8c, 0x87, 0xe, 0x80, 0xd4, 0x94, 0xa4, 0x2a, 0xa0, 0x0, 0x12, 0x5c, 0x3, 0x10, 0x9a, 0x2e, 0xa0, 0x11, 0x9a, 0x20, 0xb4, 0x29, 0x62, 0x9, 0xd0, 0xc, 0x84, 0xb6, 0x6c, 0xb2, 0xbd, 0x44, 0xa7, 0x60, 0x9f, 0x36, 0x16, 0x4c, 0x9c, 0x90, 0xb4, 0x4, 0xe, 0x40, 0x2, 0xd6, 0x3, 0x73, 0x3d, 0x70, 0x3, 0x4e, 0x21, 0xa9, 0x1, 0x76, 0x85, 0x5, 0xae, 0x21, 0xe9, 0x1, 0xac, 0xa, 0x81, 0x57, 0x48, 0x7a, 0x16, 0x86, 0x1, 0x58, 0x4c, 0x9, 0x1b, 0x30, 0x60, 0xc0, 0xc0, 0xac, 0x40, 0xf5, 0xb3, 0xa7, 0x91, 0xd9, 0xfb, 0x2c, 0xd, 0xc, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x1, 0x3, 0x6, 0xc, 0x18, 0xf8, 0x1b, 0xd0, 0xe7, 0xbd, 0x1e, 0x91, 0xdb, 0xe6, 0xb3, 0xb, 0x49, 0x47, 0x60, 0x5f, 0x58, 0xa0, 0xad, 0x80, 0x73, 0xbe, 0x24, 0x60, 0x33, 0x30, 0xd8, 0xf1, 0xf9, 0x2, 0xb9, 0x14, 0x3e, 0xfc, 0x9d, 0x37, 0xf9, 0xbd, 0x1e, 0x48, 0x36, 0x1d, 0x7d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_default_focus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xb7,0x49,0x44,0x41,0x54,0x28,0xcf,0x9d,0x91,0x3d,0x6a,0x42,0x61,0x10,0x45,0xcf,0x8c,0x4f,0x22,0x7c,0x58,0x84,0x14,0x2e,0xc0,0xf5,0x64,0x17,0xba,0x3,0x2d,0x4,0x41,0x17,0x96,0x2a,0x65,0x5c,0x43,0x7a,0xb,0x53,0xfa,0xc3,0x63,0x9c,0x6b,0xf1,0x4,0xf9,0x24,0x31,0x21,0xb7,0x1b,0xe6,0x14,0x33,0xe7,0x1a,0x80,0xc,0xc7,0x1,0xa7,0x4b,0x2,0x49,0x9a,0xc0,0x34,0xc2,0xbb,0x11,0xae,0x58,0x92,0x4,0x2d,0x2d,0x61,0xb2,0x99,0xf8,0x26,0xfd,0xaf,0xe1,0xdb,0x62,0xca,0x89,0x40,0x88,0x35,0x13,0xb6,0x15,0xb0,0x7d,0x99,0x68,0xfd,0xae,0xa2,0x1e,0x42,0xcc,0x9,0x4a,0x5,0x94,0x71,0xd8,0xfc,0xa8,0x67,0xf5,0x1d,0x40,0x34,0xec,0x2b,0x60,0xff,0xd9,0x48,0x3,0x1a,0xdc,0x79,0x14,0xbf,0x3d,0xf6,0x4f,0x80,0xdf,0x80,0xfc,0x2b,0x60,0x77,0x16,0x3a,0x13,0x76,0x24,0x48,0x7,0x28,0x2c,0x89,0x6a,0x1d,0xc3,0xe5,0xae,0x7c,0xd0,0x92,0x3f,0xa8,0xb6,0x53,0xd9,0xac,0x5e,0x39,0x10,0x8f,0xcb,0x4a,0x3b,0x5b,0x67,0x12,0x80,0xa7,0xea,0xbc,0x6b,0xdd,0x17,0xbe,0x3f,0x4f,0x23,0x27,0x82,0x63,0x73,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_default_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x39, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x12, 0x19, 0xe, 0xb, 0x10, 0xe, 0xb, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x12, 0x19, 0x0, 0x0, 0x0, 0x19, 0x15, 0x1c, 0x24, 0x1e, 0x27, 0x16, 0x12, 0x19, 0xff, 0xff, 0xff, 0x2b, 0x4d, 0xfd, 0x66, 0x0, 0x0, 0x0, 0xf, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x46, 0x47, 0x3f, 0x2b, 0x11, 0x3, 0xfd, 0xd3, 0xcd, 0x2a, 0x73, 0x45, 0xf8, 0x3d, 0x3f, 0x57, 0xda, 0x84, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x12, 0x7b, 0xbc, 0x6c, 0x0, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x4, 0x4e, 0x1d, 0x2, 0xaf, 0x0, 0x0, 0x0, 0x38, 0x49, 0x44, 0x41, 0x54, 0x18, 0xd3, 0x63, 0x60, 0x64, 0x2, 0x2, 0x46, 0x8, 0xc9, 0xcc, 0xc2, 0xca, 0xc6, 0xc0, 0x8f, 0x4, 0xd8, 0x39, 0x98, 0x59, 0x19, 0x50, 0x80, 0x0, 0x27, 0x17, 0xaa, 0x0, 0x83, 0x20, 0x37, 0x9a, 0x0, 0x3f, 0xd3, 0xc0, 0x8, 0xf0, 0xa0, 0x9, 0xf0, 0xf2, 0x61, 0x3a, 0x1d, 0xc3, 0x73, 0xe8, 0xde, 0x7, 0x0, 0x89, 0x4d, 0x2, 0xf2, 0x16, 0xd3, 0x74, 0x45, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_position_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x6,0xf,0x3b,0x3b,0x49,0x6e,0xe4,0x1e,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x90,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0xd7,0xbd,0x9,0xc0,0x20,0x10,0x5,0xe0,0x53,0x2c,0xdd,0x40,0x47,0x70,0x7,0x67,0x77,0x7,0x47,0x88,0x1b,0xd8,0x9b,0xe6,0x84,0x53,0x48,0x10,0x14,0x52,0xe4,0x5d,0x25,0xfe,0x7c,0x9e,0x58,0x3d,0xa2,0xcd,0x52,0x7d,0x50,0x63,0xb8,0x88,0xc8,0x2d,0x9e,0x2b,0x36,0x65,0x4f,0xf2,0x30,0x3,0x4b,0x25,0xf7,0x1b,0x9e,0x73,0x36,0x65,0xb5,0xd0,0x49,0xb1,0x29,0x7b,0x9b,0xb2,0xaf,0x31,0x34,0x9,0xc8,0x67,0x50,0xc7,0x9e,0x6e,0x96,0xed,0xeb,0x69,0x8f,0x1b,0xde,0x36,0x15,0xaf,0xd,0xdd,0xe9,0xdd,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x1f,0x1,0xe5,0x2d,0x3f,0xf2,0x5a,0x91,0x73,0x66,0x4e,0x65,0x1c,0xed,0xda,0x52,0x62,0x3d,0x91,0x5c,0xcf,0x64,0xe7,0x4f,0xeb,0x6,0x80,0xff,0x44,0x93,0xd4,0xd9,0xea,0x7e,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_default_focus_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0xb5, 0xfa, 0x37, 0xea, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0xb7, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x9d, 0x91, 0x3d, 0x6a, 0x42, 0x61, 0x10, 0x45, 0xcf, 0x8c, 0x4f, 0x22, 0x7c, 0x58, 0x84, 0x14, 0x2e, 0xc0, 0xf5, 0x64, 0x17, 0xba, 0x3, 0x2d, 0x4, 0x41, 0x17, 0x96, 0x2a, 0x65, 0x5c, 0x43, 0x7a, 0xb, 0x53, 0xfa, 0xc3, 0x63, 0x9c, 0x6b, 0xf1, 0x4, 0xf9, 0x24, 0x31, 0x21, 0xb7, 0x1b, 0xe6, 0x14, 0x33, 0xe7, 0x1a, 0x80, 0xc, 0xc7, 0x1, 0xa7, 0x4b, 0x2, 0x49, 0x9a, 0xc0, 0x34, 0xc2, 0xbb, 0x11, 0xae, 0x58, 0x92, 0x4, 0x2d, 0x2d, 0x61, 0xb2, 0x99, 0xf8, 0x26, 0xfd, 0xaf, 0xe1, 0xdb, 0x62, 0xca, 0x89, 0x40, 0x88, 0x35, 0x13, 0xb6, 0x15, 0xb0, 0x7d, 0x99, 0x68, 0xfd, 0xae, 0xa2, 0x1e, 0x42, 0xcc, 0x9, 0x4a, 0x5, 0x94, 0x71, 0xd8, 0xfc, 0xa8, 0x67, 0xf5, 0x1d, 0x40, 0x34, 0xec, 0x2b, 0x60, 0xff, 0xd9, 0x48, 0x3, 0x1a, 0xdc, 0x79, 0x14, 0xbf, 0x3d, 0xf6, 0x4f, 0x80, 0xdf, 0x80, 0xfc, 0x2b, 0x60, 0x77, 0x16, 0x3a, 0x13, 0x76, 0x24, 0x48, 0x7, 0x28, 0x2c, 0x89, 0x6a, 0x1d, 0xc3, 0xe5, 0xae, 0x7c, 0xd0, 0x92, 0x3f, 0xa8, 0xb6, 0x53, 0xd9, 0xac, 0x5e, 0x39, 0x10, 0x8f, 0xcb, 0x4a, 0x3b, 0x5b, 0x67, 0x12, 0x80, 0xa7, 0xea, 0xbc, 0x6b, 0xdd, 0x17, 0xbe, 0x3f, 0x4f, 0x23, 0x27, 0x82, 0x63, 0x73, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_node_selected_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x17,0xd,0x4,0x3b,0xfa,0x91,0x2a,0xb6,0x0,0x0,0x3,0x44,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0x3f,0x68,0xdc,0x76,0x14,0xc7,0xbf,0xef,0xa7,0x9f,0x7e,0x3a,0xdd,0x39,0xf6,0xdd,0x95,0xb3,0x3,0xc1,0x75,0x1b,0x70,0xa,0xe9,0x98,0x25,0x93,0x87,0x52,0x3a,0x4,0x2,0xce,0xe0,0xd2,0x34,0x35,0x94,0x8e,0x1d,0xbc,0xd5,0x4b,0xc7,0x2e,0x25,0x63,0x2,0x5d,0xa,0xa5,0xb1,0x1b,0x2,0xf5,0xd0,0x40,0xa0,0x90,0x10,0x3a,0x64,0xca,0x92,0x31,0x81,0x24,0xd0,0xd2,0x9a,0x40,0x2f,0x17,0xdf,0x1f,0xfb,0x74,0xf2,0xe9,0x27,0xfd,0x5e,0x7,0x49,0xb6,0x4e,0xe7,0xea,0x86,0x6e,0xe5,0x1e,0xdc,0x49,0x42,0xef,0x7d,0xde,0xf7,0x7d,0xf5,0x13,0xe8,0x47,0xcc,0x4c,0x0,0xc4,0xbd,0x7b,0x4f,0x9c,0xb0,0xdd,0x71,0xdb,0xfb,0x2d,0xc7,0xb0,0x11,0x5a,0x7,0x84,0x4c,0xd8,0xb6,0x62,0x41,0xc2,0xd4,0x67,0x1b,0x43,0x59,0xaf,0xf9,0x97,0x2f,0x5f,0x18,0x2,0x30,0xc4,0xcc,0xd6,0xdd,0x1f,0xef,0x9e,0xea,0x79,0x83,0x33,0xed,0x6e,0xf7,0x6c,0xaf,0xd7,0x59,0xe8,0x7b,0xfd,0x72,0x10,0x4,0x32,0xb,0x50,0x4a,0x85,0x33,0x95,0x99,0xc1,0xdc,0x5c,0xad,0x59,0xaf,0x56,0x7f,0x9f,0xab,0x94,0x5f,0xad,0x7e,0xbe,0x7a,0x40,0x5b,0x5b,0xf7,0x2b,0x41,0xbb,0xf9,0x6e,0xa7,0xd7,0x5e,0xb9,0x72,0x75,0xe5,0x86,0x72,0xa4,0x85,0x82,0x8,0x86,0x61,0xf4,0xcb,0x9d,0x47,0x1b,0xb5,0xb9,0xfa,0x23,0x55,0x5f,0xf8,0x43,0xea,0x4e,0xb7,0xdc,0x7c,0xf3,0xfa,0xdc,0xc7,0xeb,0x1f,0xdc,0x64,0x66,0x71,0xb8,0x37,0xbb,0x2b,0x1d,0xb,0x44,0x23,0x13,0x80,0x99,0x11,0xe,0x23,0x50,0x65,0x6f,0x71,0xf5,0x93,0x95,0x9b,0x3f,0x6f,0xff,0xb6,0x76,0x9a,0x9c,0xa6,0x8,0x42,0x5f,0x79,0xfd,0x83,0x79,0xa7,0x24,0x5,0xfc,0xfa,0x2e,0x9,0x42,0xa8,0xd,0xc2,0x20,0x1a,0xfd,0x69,0x3,0x12,0x4,0xf8,0xf5,0x5d,0xa7,0x24,0x85,0xd7,0x3f,0x98,0xf,0x42,0x5f,0x9,0xc3,0x46,0xc,0xfc,0x81,0xb,0x0,0x91,0x66,0x30,0x1b,0x10,0x0,0x98,0x6c,0x7b,0x80,0xc0,0x60,0x66,0x44,0x21,0x3,0x0,0x6,0xfe,0xc0,0x35,0x6c,0x84,0xd0,0x5a,0x53,0x84,0x88,0x0,0x80,0x13,0xd9,0xcc,0xc,0x88,0xb8,0x10,0x0,0x40,0x0,0x1b,0x0,0xcc,0x0,0xc7,0x39,0x11,0x22,0xd2,0x5a,0x93,0xb4,0x6d,0x9b,0x11,0x25,0x89,0x86,0xc1,0x20,0x80,0x18,0xa0,0xe3,0xee,0x47,0xd0,0xcc,0x31,0xad,0x91,0x79,0xa3,0x40,0x4,0x80,0x91,0xe6,0xe5,0x83,0x73,0x37,0x64,0xee,0x2e,0xd8,0x24,0x9,0xc4,0xc7,0xa,0xb2,0x6a,0x8a,0x0,0x1c,0xf7,0xce,0x5e,0xc4,0xc5,0xe6,0x18,0x92,0x57,0x36,0x2,0x30,0x26,0x33,0x7b,0xe2,0x1e,0x71,0xe2,0xb,0x33,0x68,0xf2,0x8,0xd9,0x16,0x94,0xd1,0x13,0xff,0x9b,0x49,0xa,0xc0,0x6,0x6c,0x72,0xf6,0x8f,0xbb,0x58,0xe0,0x41,0x32,0x77,0x22,0x1a,0xc9,0xf2,0x49,0x87,0x89,0xcf,0x8a,0x14,0xc4,0x0,0x93,0x14,0x66,0xba,0xd1,0xf1,0xec,0xa6,0x18,0x60,0xe2,0xfa,0x91,0xde,0xd9,0xae,0x34,0xf9,0x31,0x52,0xba,0x1e,0x28,0x5d,0x4c,0x94,0xfa,0x99,0xbc,0xf,0x45,0xa,0x4c,0x5c,0x38,0xd6,0xc9,0xe0,0xe8,0x89,0xe4,0xad,0x1d,0x5f,0xca,0x9c,0x7f,0x15,0x8b,0x63,0xdc,0xc4,0x7c,0x8f,0x8c,0x91,0xb9,0x93,0x71,0xc0,0xd7,0xdf,0x7c,0xf5,0xea,0xd9,0x8b,0xa7,0x85,0x1d,0xcf,0x9f,0x7b,0x1f,0xdf,0xdf,0xfa,0x76,0xf1,0x44,0xc0,0xd9,0xa5,0x65,0x58,0xc2,0x2e,0x4,0x2c,0x2d,0xbe,0xf3,0xef,0xa,0x3c,0xaf,0x8f,0xde,0x7e,0xb7,0x10,0xe0,0x79,0xfd,0x91,0x6b,0x81,0xff,0x18,0x53,0xc0,0x14,0x30,0x5,0x4c,0x1,0x53,0xc0,0x14,0x30,0x5,0xfc,0xff,0x0,0x5a,0x6b,0x82,0x75,0xe2,0xe7,0xcf,0xc9,0x91,0xe6,0x58,0x19,0x5,0x16,0x2c,0x6,0x0,0x5b,0xca,0x89,0xf5,0x69,0x4e,0x5a,0x23,0x1c,0xe5,0x44,0x8e,0x52,0x1,0x0,0x94,0xdd,0x99,0x89,0x80,0x34,0xc7,0x51,0x2a,0x70,0x94,0x13,0x49,0x25,0xdd,0xa0,0xe4,0x96,0x5b,0xc3,0x43,0xcd,0x1b,0x9b,0x9f,0x5e,0xbc,0x71,0x9d,0x1e,0xf,0xfc,0x3,0xe8,0x30,0x1c,0xd9,0x74,0xd9,0x52,0xa2,0xec,0x9e,0xc2,0xc6,0xe6,0xd5,0x8b,0xc3,0x43,0xcd,0x25,0xb7,0xdc,0x52,0xd2,0xd,0x68,0x6b,0xeb,0x7e,0x65,0xef,0xaf,0x97,0xcb,0xdd,0xfd,0xce,0x87,0x9f,0x7d,0x71,0xe9,0xba,0xe3,0xda,0x85,0x4e,0xc,0x7d,0xcd,0x3f,0xfd,0xf0,0xeb,0x66,0x75,0xb6,0xf6,0xf0,0xad,0xb7,0x97,0x5f,0x12,0x33,0x5b,0xb7,0xbf,0xbb,0x3d,0xdb,0xea,0x74,0x97,0x3a,0xdd,0xee,0x7b,0x3,0xdf,0x9b,0xd7,0x5a,0xdb,0xc6,0x8c,0x7e,0xad,0xa,0x21,0x60,0xdb,0xb6,0x2e,0xbb,0x95,0xd7,0xb5,0x6a,0xf5,0x79,0xa3,0x56,0xfd,0xf3,0xda,0x97,0xd7,0xf6,0x29,0xdd,0xbd,0x6f,0x6f,0x3f,0x28,0xf5,0xff,0x6e,0x56,0xb4,0x19,0x2a,0x66,0x73,0xe2,0xe3,0x25,0x12,0xc6,0x16,0x4e,0x30,0x73,0x7a,0xc1,0x5b,0x5f,0xff,0xe8,0x10,0xc0,0xd1,0xf6,0x4,0xcc,0x4c,0x3b,0x3b,0x3b,0xa2,0xd1,0x68,0x14,0x8e,0xd0,0x6a,0xb5,0x78,0x6d,0x6d,0xcd,0x10,0xc5,0xdb,0xba,0x7f,0x0,0xb2,0x1f,0xaf,0x82,0x62,0x7a,0x69,0xbb,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_position_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x46, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc5, 0x24, 0x14, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xb1, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0xd7, 0xb1, 0x11, 0x82, 0x50, 0x10, 0x84, 0xe1, 0xff, 0x80, 0x19, 0x33, 0x72, 0x68, 0x5, 0x4b, 0xc1, 0x32, 0x24, 0x60, 0x50, 0x3, 0xdf, 0x30, 0x9a, 0xd2, 0x2, 0xad, 0xa8, 0xa5, 0x40, 0xc, 0x31, 0xf0, 0xc, 0xc4, 0x31, 0x30, 0xf0, 0x81, 0xe9, 0x6d, 0xbe, 0xdf, 0x5e, 0x7a, 0xf0, 0x67, 0xc4, 0x56, 0xd5, 0x86, 0xae, 0x3b, 0x23, 0x92, 0x2, 0x91, 0x63, 0xaf, 0x5, 0x6a, 0x86, 0xe1, 0x10, 0xcc, 0xe5, 0xfd, 0xc2, 0xe1, 0x8, 0xc8, 0xf0, 0x7d, 0x1b, 0xcc, 0xcb, 0x0, 0x89, 0x14, 0xc5, 0xc3, 0xa5, 0x6d, 0xcb, 0x32, 0x61, 0x9a, 0x6e, 0x78, 0xde, 0xce, 0x7b, 0x9f, 0xed, 0x5a, 0x6, 0x90, 0x3c, 0xbf, 0xbf, 0x24, 0x1b, 0x7b, 0xcb, 0x2e, 0xff, 0x8e, 0x2, 0xa, 0x28, 0xa0, 0x80, 0x2, 0xa, 0x28, 0xa0, 0x80, 0x2, 0xa, 0x28, 0xa0, 0x80, 0x2, 0xa, 0x28, 0xf0, 0x1b, 0x68, 0x61, 0x7e, 0xe9, 0x1d, 0x63, 0x8d, 0xd9, 0x2, 0x20, 0xd2, 0x88, 0x35, 0xe6, 0xa, 0x64, 0x2b, 0xf, 0xb8, 0x4, 0x84, 0xe1, 0x91, 0xbe, 0x7, 0x91, 0x14, 0x6b, 0x63, 0xa7, 0x9a, 0x48, 0xc3, 0x34, 0xd5, 0x8c, 0xe3, 0x69, 0xe5, 0xf0, 0x27, 0x4f, 0xdd, 0xc, 0x30, 0x45, 0xe4, 0x56, 0x1f, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char graph_port_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x8,0x6,0x0,0x0,0x0,0x8d,0x32,0xcf,0xbd,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xc6,0x49,0x44,0x41,0x54,0x18,0x95,0x6d,0x90,0x3d,0x4e,0xc4,0x30,0x14,0x84,0xbf,0xb1,0xa8,0x92,0x48,0x39,0x46,0xe2,0x9a,0x9f,0x12,0xc1,0xbd,0x16,0x25,0x4b,0x41,0xb,0x67,0xa1,0xa7,0xa2,0x63,0xa1,0x76,0x94,0x5b,0x58,0x72,0x52,0x3e,0xd3,0xc4,0x11,0xda,0xe5,0xab,0x46,0xa3,0xd1,0x68,0xde,0x13,0x1b,0x21,0x84,0x7,0x49,0x3,0x70,0xbb,0x59,0x5f,0xc0,0x5b,0xdf,0xf7,0xef,0x0,0x2,0x98,0xa6,0xe9,0x0,0x1c,0x1,0xc7,0x19,0x39,0xe7,0x67,0xef,0xfd,0xa0,0xad,0xe9,0x3,0x70,0x6d,0xdb,0x52,0xd7,0x35,0x0,0xcb,0xb2,0x10,0x63,0x4,0x30,0xe7,0xdc,0xe3,0x95,0xa4,0xb1,0x84,0x9a,0xa6,0xd9,0x9b,0x8a,0x8e,0x31,0x3a,0x33,0x1b,0x1d,0x70,0xd,0xec,0x4d,0x7f,0xa9,0xaa,0xaa,0xc8,0x1b,0x7,0xe4,0x8b,0xc4,0x25,0xd9,0x1,0x3f,0x65,0xd3,0x39,0xeb,0xba,0x16,0xf9,0xed,0x80,0xd7,0x6d,0xb,0x29,0x25,0xcc,0xc,0x33,0x23,0xa5,0xb4,0x1f,0x23,0x69,0x14,0x40,0x8,0xe1,0x28,0xe9,0xf0,0xcf,0x7b,0x2c,0xe7,0xfc,0xe4,0xbd,0x7f,0x51,0x71,0xe6,0x79,0xbe,0x37,0xb3,0x1,0xb8,0xdb,0x76,0x9f,0x24,0x8d,0x5d,0xd7,0x7d,0x2,0xfc,0x2,0xfb,0x83,0x50,0x87,0x89,0x31,0xee,0x78,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_node_selected_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x46, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc5, 0x24, 0x14, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xc4, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0xce, 0xb1, 0xd, 0x82, 0x40, 0x14, 0xc6, 0xf1, 0xef, 0x9d, 0x17, 0x43, 0x62, 0x2c, 0xc1, 0x1, 0xc0, 0x38, 0x86, 0x3, 0x58, 0x18, 0xd4, 0x1d, 0x64, 0x0, 0x1b, 0x77, 0x50, 0x4b, 0xb7, 0x80, 0xc4, 0xc2, 0x1, 0xec, 0x8c, 0x3d, 0x43, 0x40, 0x2b, 0x2a, 0x31, 0xc6, 0x67, 0xe3, 0x99, 0xd8, 0xc1, 0x89, 0xdd, 0xfb, 0xaa, 0x2b, 0xf8, 0xff, 0x1e, 0xc0, 0x8f, 0xa3, 0x34, 0xe5, 0x76, 0x51, 0x5c, 0x17, 0x4, 0xa, 0x1, 0x78, 0x15, 0xbb, 0x1c, 0x4c, 0x89, 0xd2, 0xce, 0x4a, 0xbf, 0xe3, 0x79, 0xcd, 0xc3, 0x1e, 0x88, 0xa3, 0xe7, 0xa3, 0x64, 0x5, 0xa6, 0x49, 0xcd, 0xf8, 0x33, 0x6, 0xcf, 0x14, 0x11, 0x5c, 0x5b, 0x80, 0x8, 0xae, 0xb2, 0x8d, 0xcd, 0x4, 0x10, 0x40, 0x0, 0x1, 0x1a, 0x3, 0xb4, 0x79, 0x4c, 0xc7, 0xc3, 0x7d, 0x9d, 0x30, 0xde, 0x1d, 0x46, 0x8d, 0xfc, 0x81, 0x0, 0x2, 0x8, 0x20, 0x80, 0x0, 0x2, 0x8, 0x20, 0x80, 0x0, 0x2, 0xfc, 0xd, 0xc8, 0x1, 0xc0, 0xf, 0xfa, 0xf7, 0xaa, 0x91, 0x1f, 0xc, 0xcc, 0xb7, 0x19, 0x9d, 0x8e, 0xb7, 0x25, 0x88, 0x23, 0x9b, 0xeb, 0xc, 0x6c, 0x75, 0xa7, 0xeb, 0xac, 0x2f, 0xe7, 0x12, 0x20, 0xe, 0x1, 0xf4, 0x2a, 0xb6, 0x19, 0x98, 0x92, 0x96, 0x76, 0x36, 0x36, 0x87, 0xbf, 0xf6, 0x2, 0x6c, 0x6e, 0x2d, 0xee, 0x58, 0x4d, 0xc1, 0x68, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char hseparator_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x2,0x3,0x0,0x0,0x0,0xb9,0x61,0x56,0x18,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xc,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x73,0x9b,0xaa,0xce,0xdc,0xe1,0xff,0xff,0xff,0x64,0x6c,0x1,0xd2,0x0,0x0,0x0,0x3,0x74,0x52,0x4e,0x53,0x0,0xb3,0xb3,0x67,0xf6,0xdb,0x93,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x3,0x11,0xc,0x4c,0xf2,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x10,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x64,0x60,0x60,0xc2,0x40,0x8c,0xc,0x0,0x0,0xc7,0x0,0xf,0xf5,0x92,0x2f,0xa7,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char graph_port_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xa, 0x8, 0x6, 0x0, 0x0, 0x0, 0x8d, 0x32, 0xcf, 0xbd, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xc6, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x6d, 0x90, 0x3d, 0x4e, 0xc4, 0x30, 0x14, 0x84, 0xbf, 0xb1, 0xa8, 0x92, 0x48, 0x39, 0x46, 0xe2, 0x9a, 0x9f, 0x12, 0xc1, 0xbd, 0x16, 0x25, 0x4b, 0x41, 0xb, 0x67, 0xa1, 0xa7, 0xa2, 0x63, 0xa1, 0x76, 0x94, 0x5b, 0x58, 0x72, 0x52, 0x3e, 0xd3, 0xc4, 0x11, 0xda, 0xe5, 0xab, 0x46, 0xa3, 0xd1, 0x68, 0xde, 0x13, 0x1b, 0x21, 0x84, 0x7, 0x49, 0x3, 0x70, 0xbb, 0x59, 0x5f, 0xc0, 0x5b, 0xdf, 0xf7, 0xef, 0x0, 0x2, 0x98, 0xa6, 0xe9, 0x0, 0x1c, 0x1, 0xc7, 0x19, 0x39, 0xe7, 0x67, 0xef, 0xfd, 0xa0, 0xad, 0xe9, 0x3, 0x70, 0x6d, 0xdb, 0x52, 0xd7, 0x35, 0x0, 0xcb, 0xb2, 0x10, 0x63, 0x4, 0x30, 0xe7, 0xdc, 0xe3, 0x95, 0xa4, 0xb1, 0x84, 0x9a, 0xa6, 0xd9, 0x9b, 0x8a, 0x8e, 0x31, 0x3a, 0x33, 0x1b, 0x1d, 0x70, 0xd, 0xec, 0x4d, 0x7f, 0xa9, 0xaa, 0xaa, 0xc8, 0x1b, 0x7, 0xe4, 0x8b, 0xc4, 0x25, 0xd9, 0x1, 0x3f, 0x65, 0xd3, 0x39, 0xeb, 0xba, 0x16, 0xf9, 0xed, 0x80, 0xd7, 0x6d, 0xb, 0x29, 0x25, 0xcc, 0xc, 0x33, 0x23, 0xa5, 0xb4, 0x1f, 0x23, 0x69, 0x14, 0x40, 0x8, 0xe1, 0x28, 0xe9, 0xf0, 0xcf, 0x7b, 0x2c, 0xe7, 0xfc, 0xe4, 0xbd, 0x7f, 0x51, 0x71, 0xe6, 0x79, 0xbe, 0x37, 0xb3, 0x1, 0xb8, 0xdb, 0x76, 0x9f, 0x24, 0x8d, 0x5d, 0xd7, 0x7d, 0x2, 0xfc, 0x2, 0xfb, 0x83, 0x50, 0x87, 0x89, 0x31, 0xee, 0x78, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char hslider_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x4e,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x40,0x3e,0x4a,0x2a,0x29,0x2f,0x20,0x20,0x24,0x3f,0x3e,0x49,0x1f,0x1f,0x24,0x20,0x20,0x24,0x4d,0x4b,0x59,0x3f,0x3e,0x49,0x3f,0x3e,0x49,0x1e,0x1e,0x23,0x1f,0x1f,0x23,0x20,0x20,0x25,0x22,0x22,0x27,0x23,0x23,0x27,0x23,0x23,0x28,0x25,0x25,0x2a,0xff,0xff,0xff,0x5f,0xd6,0x94,0x4d,0x0,0x0,0x0,0x12,0x74,0x52,0x4e,0x53,0x0,0x0,0x4,0x19,0x40,0x5d,0x66,0x68,0x28,0x93,0xf0,0xfc,0x94,0xfc,0xfd,0x1a,0x96,0x95,0x6b,0xe2,0xd5,0x49,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x19,0xec,0x6e,0xb5,0x88,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x65,0x49,0x44,0x41,0x54,0x18,0xd3,0x85,0xce,0xdd,0xe,0x80,0x20,0x8,0x5,0x60,0x54,0xb4,0x22,0xb5,0x34,0x7f,0x7a,0xff,0x27,0x8d,0xad,0xd6,0x6a,0x5c,0xf8,0xdd,0xc1,0x6,0xe7,0x0,0x8c,0xa9,0x1f,0x9e,0xb5,0x41,0xeb,0x26,0xe6,0x2c,0x1a,0xad,0x40,0xcf,0xb,0xad,0xf9,0x60,0x79,0xa5,0x65,0xd6,0x60,0x7c,0x28,0xb5,0x75,0xd6,0x6a,0x9,0xde,0x0,0x52,0xe9,0xe7,0xa3,0x17,0x42,0xb0,0xb1,0x9e,0xaf,0x1a,0xad,0x5c,0x88,0x93,0x6d,0xff,0x3e,0xdd,0x37,0x8e,0x4d,0x14,0xef,0xd8,0x48,0x89,0x63,0x45,0x31,0x51,0x7d,0xe8,0x2,0xf5,0xf,0x9,0x67,0xd9,0x88,0x8f,0x5b,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char hseparator_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x63, 0x60, 0x18, 0x5, 0xc, 0xc, 0xc, 0xc, 0x0, 0x1, 0x8, 0x0, 0x1, 0x7d, 0x41, 0xa5, 0xce, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char hslider_grabber_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x1,0x1d,0x49,0x44,0x41,0x54,0x28,0xcf,0x85,0xd1,0x3f,0x4b,0xc3,0x40,0x18,0xc7,0xf1,0xef,0x25,0xad,0x89,0xa9,0x70,0x83,0x43,0x5d,0xc4,0x21,0x6e,0x4a,0x7,0x47,0xdf,0x83,0x53,0x16,0x17,0xd7,0x4e,0xbe,0x2,0x5f,0x85,0x83,0xa0,0xb8,0x38,0xb8,0x88,0xd0,0x51,0x5d,0x1c,0x1c,0x1c,0x1c,0x2a,0xa2,0xe8,0x22,0x2d,0x82,0x2d,0x88,0x54,0xed,0x3f,0x1b,0x9a,0x78,0x49,0x1c,0x9a,0x54,0x4f,0x5,0x6f,0x3a,0xee,0xf9,0xf0,0x3c,0x3f,0x9e,0x83,0x7f,0x8e,0x18,0xdf,0x4c,0x1c,0x24,0x5,0x60,0x40,0x17,0x9f,0x48,0x7,0x26,0xd3,0xe5,0x55,0xd7,0x93,0x25,0xe8,0xde,0xd4,0x2b,0xbb,0x7,0xbc,0x8e,0x88,0x99,0x82,0xa9,0xf2,0xda,0xe2,0x86,0x58,0x78,0xb7,0x87,0xf6,0xc4,0xdc,0xcc,0xd2,0x6c,0xfb,0xf2,0x8e,0x10,0xc0,0x48,0x81,0x74,0x3d,0x55,0xf4,0x51,0x28,0x7c,0x54,0xd1,0xf5,0x90,0xa3,0x42,0x6,0xa,0xb2,0x14,0x90,0x0,0x90,0x10,0x20,0x4b,0x14,0x74,0x20,0x62,0xf1,0x3d,0x7b,0x24,0xb2,0x74,0x19,0x8,0x83,0x96,0x39,0x2e,0xb,0x82,0x37,0x94,0xe,0x6,0xbd,0xdb,0xfc,0x18,0xe4,0x49,0x9e,0xf0,0x75,0xd0,0xbf,0x3e,0xb6,0x22,0x23,0x7d,0x9a,0x4c,0xce,0xf6,0xe8,0xe9,0x20,0xb8,0xaa,0x6,0xcd,0x1c,0x0,0x39,0x3e,0x1e,0x4f,0xce,0x7f,0x76,0x88,0x1f,0x1a,0xcf,0xa7,0xe,0x6,0x6,0xe,0x8d,0x23,0xd5,0x22,0xd6,0x41,0x42,0x77,0x6b,0x33,0xaa,0x59,0x58,0xc4,0xf5,0x9d,0xed,0x6c,0xc0,0xd7,0x26,0x21,0xe,0x7,0x9d,0xda,0xf2,0x8a,0x1d,0x1f,0xae,0xdf,0x57,0x19,0xfe,0x6,0xa0,0x9a,0x2f,0xf3,0xed,0xfe,0xc5,0x7e,0x85,0xce,0x5f,0xbf,0x39,0xca,0x67,0x21,0x18,0x66,0x3b,0x0,0xf8,0x4,0x7e,0x5c,0x62,0x33,0x51,0xf0,0xbb,0xff,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char hslider_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x66, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0xd0, 0xab, 0xe, 0x83, 0x50, 0x10, 0x84, 0xe1, 0xf, 0x4e, 0x48, 0x4d, 0xd5, 0x31, 0x4d, 0xe0, 0xfd, 0x5f, 0xd, 0xc, 0xc5, 0x50, 0x87, 0x0, 0x73, 0xb8, 0x8, 0x1a, 0x8, 0x58, 0x7e, 0xb3, 0xc9, 0x24, 0x33, 0xbb, 0xb3, 0x3c, 0xdc, 0x26, 0xdb, 0xcc, 0x12, 0x11, 0xc5, 0x81, 0x67, 0x40, 0x87, 0x1a, 0x63, 0x48, 0x62, 0x85, 0xf, 0xc2, 0x3f, 0xd7, 0x86, 0x80, 0x37, 0x72, 0xf4, 0x79, 0x12, 0xe3, 0xf9, 0xa3, 0x17, 0xa2, 0x94, 0x72, 0x8b, 0x39, 0xa0, 0xbb, 0xe0, 0xfd, 0xb2, 0x76, 0xfe, 0xa5, 0xb0, 0x97, 0xe3, 0x3f, 0xc, 0x68, 0xd1, 0x5c, 0x58, 0xfa, 0xb0, 0xc7, 0x4, 0xc6, 0x95, 0xb, 0x14, 0x1e, 0x95, 0x6c, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char hslider_grabber_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xc6,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x83,0x83,0x60,0xaf,0xb1,0x65,0xbb,0xca,0x61,0xb3,0xc2,0x0,0x0,0x0,0x63,0xb7,0xc8,0x63,0xb7,0xc7,0x0,0x0,0x0,0x61,0xb3,0xbc,0x60,0xb1,0xbc,0x0,0x0,0x0,0x0,0x0,0x0,0x5b,0xa6,0xa5,0x63,0xb4,0xb6,0x0,0x0,0x0,0x0,0x0,0x0,0x3a,0x69,0x69,0x5e,0xb1,0xcd,0x5e,0xb0,0xcd,0x36,0x63,0x63,0x0,0x0,0x0,0x17,0x2a,0x29,0x60,0xb2,0xbd,0x62,0xb3,0xbf,0x3,0x5,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x55,0x9b,0x9a,0x52,0x96,0x95,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xf,0xf,0x62,0xb4,0xbd,0x63,0xb7,0xbf,0x0,0x0,0x0,0x27,0x48,0x47,0x68,0xc0,0xcf,0x68,0xc1,0xcf,0x2d,0x52,0x52,0x51,0x93,0x92,0x56,0x9d,0x9c,0x0,0x0,0x0,0x54,0xa2,0xc8,0x4c,0x94,0xc2,0x48,0x8e,0xc0,0x47,0x8c,0xbf,0x4b,0x93,0xc2,0x4b,0x92,0xc2,0x4f,0x98,0xc4,0x4d,0x96,0xc3,0x55,0xa3,0xc8,0x53,0x9f,0xc7,0x49,0x8f,0xc0,0x4e,0x97,0xc4,0x5a,0xab,0xcb,0x5a,0xac,0xcc,0x52,0x9e,0xc6,0x51,0x9d,0xc6,0xff,0xff,0xff,0x6b,0x1e,0xb5,0x61,0x0,0x0,0x0,0x31,0x74,0x52,0x4e,0x53,0x0,0x3,0xd,0x1c,0x27,0x16,0x6e,0xc1,0xef,0xe8,0x28,0xf0,0xf0,0x22,0xdb,0xde,0x24,0x17,0xaf,0xc5,0x1a,0xa,0x65,0xfc,0xfe,0x64,0xc,0x31,0xe0,0xe0,0x28,0x2,0x1,0x14,0x9c,0x95,0x13,0x5,0x2c,0xdb,0xdc,0xb,0x4f,0xf4,0xf7,0x55,0x73,0x7d,0x4,0x28,0xf1,0xfd,0xa1,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x41,0x89,0xde,0x6c,0x4e,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x9e,0x49,0x44,0x41,0x54,0x18,0xd3,0x6d,0xcf,0xd7,0x12,0x82,0x30,0x10,0x5,0x50,0x48,0x42,0x12,0xb0,0x77,0x8d,0xd,0xb,0x28,0x56,0x12,0x62,0xd,0x96,0xff,0xff,0x2a,0x61,0xc,0xe0,0x83,0xfb,0xb4,0xf7,0xcc,0xec,0xcc,0x5d,0xc3,0xf8,0x37,0x26,0x80,0x8,0x41,0x60,0xe6,0xd9,0xc2,0x84,0x52,0x82,0xad,0x4c,0x0,0xb6,0xb9,0x10,0xdc,0xc6,0x40,0x3,0x24,0x3c,0x92,0x32,0xe2,0x4,0x6a,0x40,0x54,0xc8,0x64,0x4,0x45,0x1a,0x9c,0xd2,0x29,0x85,0x73,0xd9,0xd1,0x50,0xa9,0x5e,0x52,0xb8,0xd6,0xea,0x1a,0x1a,0xcd,0x5b,0xa,0xf7,0x56,0x5b,0x43,0xa7,0xdb,0x53,0x52,0xaa,0xfe,0x80,0x65,0x3d,0x86,0xa3,0x58,0xca,0x78,0x3c,0x99,0x6a,0x70,0x67,0xf3,0x87,0x52,0xcf,0xc5,0x32,0xaf,0xee,0xf9,0xab,0xd7,0x7b,0xed,0x7b,0xc5,0x33,0xc1,0x66,0xbb,0xdb,0xb3,0x22,0x27,0x47,0x87,0xa3,0xe5,0xfe,0xfe,0x1b,0x6,0x2c,0xfc,0x6e,0x1f,0x93,0x2a,0x10,0x62,0x3,0x21,0x32,0x75,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char hslider_grabber_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xfd, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xad, 0x92, 0x31, 0x4e, 0xc3, 0x30, 0x18, 0x46, 0x9f, 0x7f, 0xc9, 0xde, 0x60, 0x83, 0xb, 0x50, 0xc8, 0x10, 0x45, 0x96, 0x72, 0x8d, 0x76, 0x84, 0x1e, 0x20, 0x7b, 0xb9, 0x4c, 0x66, 0xe, 0x80, 0x54, 0xb1, 0xb4, 0x5c, 0x23, 0x52, 0x32, 0x56, 0xf4, 0x2, 0x85, 0x85, 0x76, 0x8c, 0x94, 0x9f, 0x25, 0x89, 0xa2, 0x94, 0x56, 0xb5, 0xe0, 0x1b, 0x3f, 0xe9, 0xbd, 0xcf, 0xb6, 0xc, 0x7f, 0x8c, 0x19, 0x17, 0x65, 0x59, 0xde, 0x8a, 0xc8, 0x33, 0x30, 0x5, 0xee, 0x1, 0x54, 0x75, 0x3, 0xbc, 0xab, 0x6a, 0xee, 0xbd, 0xdf, 0x9d, 0x14, 0x54, 0x55, 0xf5, 0x64, 0x8c, 0x79, 0x1, 0xae, 0x4e, 0xc, 0x1e, 0x44, 0x24, 0x8b, 0xe3, 0x78, 0x79, 0x24, 0x68, 0xe1, 0xd7, 0xdf, 0x4e, 0x35, 0x8a, 0x8a, 0xc8, 0xbc, 0x93, 0x98, 0xc1, 0xb1, 0x3f, 0xce, 0x2c, 0x8f, 0xb3, 0xaf, 0xeb, 0x7a, 0x92, 0xa6, 0xe9, 0xa7, 0x0, 0xb4, 0x77, 0xbe, 0x14, 0x6, 0xb8, 0x76, 0xce, 0x2d, 0x0, 0xa4, 0x2d, 0x66, 0x1, 0x30, 0x0, 0x4d, 0xd3, 0xcc, 0x86, 0x82, 0xbb, 0x50, 0x81, 0x31, 0x66, 0x32, 0x14, 0x68, 0xa8, 0xa0, 0x63, 0x3a, 0xc1, 0x36, 0x98, 0x56, 0xdd, 0xf6, 0x2, 0x55, 0x5d, 0x87, 0xa, 0x44, 0x64, 0x35, 0x14, 0xe4, 0xc0, 0x21, 0x80, 0xff, 0xb6, 0xd6, 0xe6, 0xbd, 0xc0, 0x7b, 0xbf, 0x13, 0x91, 0x8c, 0xcb, 0xde, 0x42, 0x81, 0x2c, 0x8a, 0xa2, 0xaf, 0x5e, 0x0, 0x10, 0xc7, 0xf1, 0x52, 0x44, 0xe6, 0xc0, 0xfe, 0xdc, 0x32, 0xf0, 0x98, 0x24, 0xc9, 0x5b, 0x57, 0x1c, 0x7d, 0xdb, 0xa2, 0x28, 0x6e, 0x9c, 0x73, 0xb, 0x55, 0x9d, 0x2, 0xf, 0x6d, 0xbd, 0x31, 0xc6, 0xac, 0xad, 0xb5, 0x79, 0xb7, 0xfc, 0x6f, 0xf9, 0x1, 0x3c, 0x90, 0x4c, 0xcc, 0x74, 0x25, 0x3a, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char hslider_tick_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xc3,0x98,0xc3,0xc0,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x1e,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x38,0x55,0x5f,0x8c,0xac,0xb8,0x81,0xa2,0xad,0x98,0x98,0x98,0x4e,0x4e,0x4e,0x8d,0x8d,0x8d,0x82,0x82,0x82,0x4e,0x4e,0x4e,0xff,0xff,0xff,0xc1,0xc9,0xb1,0x80,0x0,0x0,0x0,0x9,0x74,0x52,0x4e,0x53,0x0,0x0,0x0,0x0,0x79,0x31,0x79,0x79,0x1c,0x7e,0xed,0x4b,0xf4,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x9,0xf1,0xd9,0xa5,0xec,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x21,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x9,0x60,0x60,0xb,0x60,0x60,0xf,0x60,0x60,0x6d,0x60,0x60,0x14,0x60,0xc0,0x4,0x4c,0x2,0xc,0xcc,0x2,0xc,0x30,0x65,0x0,0x46,0x9d,0x2,0xbe,0x9f,0x3a,0x6c,0xab,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char hslider_grabber_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf1, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xad, 0x92, 0x31, 0x4e, 0x2, 0x61, 0x10, 0x85, 0xbf, 0x37, 0xc6, 0x52, 0x3b, 0xbd, 0x0, 0xe8, 0x65, 0xa0, 0x54, 0xe, 0x40, 0xaf, 0x15, 0x64, 0xa3, 0x85, 0xf9, 0x2b, 0x4d, 0xa4, 0xdc, 0xda, 0x3, 0x98, 0x10, 0x1b, 0xf1, 0x32, 0x44, 0x2e, 0x0, 0x34, 0x42, 0xa9, 0x61, 0x2c, 0xfe, 0xdd, 0x65, 0xb3, 0xa, 0xba, 0xe8, 0xeb, 0x66, 0x92, 0xf7, 0xbd, 0x37, 0xc9, 0xc0, 0x1f, 0xa5, 0xea, 0x22, 0xf8, 0xe0, 0x78, 0xc5, 0xea, 0x12, 0xd4, 0x2, 0x4e, 0xe2, 0xd6, 0xc7, 0x42, 0x2f, 0x42, 0x69, 0x50, 0x7f, 0xba, 0x11, 0x70, 0xe3, 0xf7, 0xe7, 0xc0, 0x3, 0x70, 0xb0, 0x21, 0x70, 0x69, 0x78, 0x37, 0x28, 0x19, 0x7e, 0x1, 0x64, 0xe6, 0xc7, 0xef, 0x5a, 0x55, 0xe4, 0x86, 0x77, 0x72, 0x88, 0xd6, 0xb5, 0xfd, 0x75, 0x4b, 0x72, 0x55, 0x8b, 0x77, 0x3e, 0x9a, 0x77, 0xba, 0x9e, 0x19, 0x40, 0xbc, 0xf9, 0xd7, 0x66, 0x80, 0xc3, 0x7d, 0xf6, 0x2e, 0x0, 0x2c, 0xce, 0xd6, 0xae, 0x61, 0xce, 0xd5, 0x2e, 0x1, 0x68, 0xd4, 0xf7, 0xab, 0x59, 0x2, 0xb8, 0xef, 0xd0, 0xc0, 0xcb, 0xd, 0x26, 0x3b, 0xf8, 0x27, 0x5, 0x40, 0x30, 0xaa, 0x6b, 0x17, 0x7a, 0x2e, 0x1, 0x94, 0x2, 0xcb, 0x1a, 0xfe, 0x37, 0x61, 0x69, 0x1, 0x8, 0xea, 0x4f, 0xd, 0xef, 0x92, 0xdd, 0xf5, 0x83, 0x3c, 0x7e, 0x63, 0x6f, 0x5e, 0x0, 0x22, 0x24, 0x19, 0x1a, 0xde, 0x1, 0x16, 0xdb, 0x92, 0xd, 0x3f, 0xb, 0x4a, 0x9e, 0xd6, 0xa7, 0x54, 0x74, 0xe5, 0xb7, 0x47, 0xf1, 0x49, 0xd4, 0x2, 0x9d, 0x66, 0xa1, 0x63, 0xc1, 0x48, 0x58, 0x9a, 0x27, 0xff, 0x9b, 0x3e, 0x1, 0x5e, 0x62, 0x48, 0x81, 0x2e, 0xbf, 0x88, 0xea, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char hsplit_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x1,0x3,0x0,0x0,0x0,0xfe,0xc1,0x2c,0xc8,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0x27,0x27,0x29,0xff,0xff,0xff,0x11,0xab,0xb9,0xf3,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1,0xff,0x2,0x2d,0xde,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xb,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x40,0x5,0x0,0x0,0x10,0x0,0x1,0xa1,0xc5,0x21,0xc1,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char hslider_tick_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x10, 0x4, 0x3, 0x0, 0x0, 0x0, 0xc3, 0x98, 0xc3, 0xc0, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x1e, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x38, 0x55, 0x5f, 0x8c, 0xac, 0xb8, 0x81, 0xa2, 0xad, 0x98, 0x98, 0x98, 0x4e, 0x4e, 0x4e, 0x8d, 0x8d, 0x8d, 0x82, 0x82, 0x82, 0x4e, 0x4e, 0x4e, 0xff, 0xff, 0xff, 0xc1, 0xc9, 0xb1, 0x80, 0x0, 0x0, 0x0, 0x9, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x0, 0x0, 0x0, 0x79, 0x31, 0x79, 0x79, 0x1c, 0x7e, 0xed, 0x4b, 0xf4, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x9, 0xf1, 0xd9, 0xa5, 0xec, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0x21, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x63, 0x60, 0x9, 0x60, 0x60, 0xb, 0x60, 0x60, 0xf, 0x60, 0x60, 0x6d, 0x60, 0x60, 0x14, 0x60, 0xc0, 0x4, 0x4c, 0x2, 0xc, 0xcc, 0x2, 0xc, 0x30, 0x65, 0x0, 0x46, 0x9d, 0x2, 0xbe, 0x9f, 0x3a, 0x6c, 0xab, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char hsplitter_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x40,0x8,0x0,0x0,0x0,0x0,0x2,0x6f,0x69,0x56,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x74,0x52,0x4e,0x53,0x0,0x0,0x76,0x93,0xcd,0x38,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x27,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0x80,0x2,0x66,0x86,0x5,0xa2,0xe7,0x18,0x16,0x88,0x9e,0x63,0x66,0x10,0xbd,0xf6,0x98,0x41,0xf4,0xda,0x63,0x6,0xc,0x30,0xaa,0x66,0x54,0xd,0x9a,0x1a,0x0,0x5c,0x29,0x6a,0x81,0x90,0x8f,0x52,0x12,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char hsplit_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x15, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x63, 0x64, 0x60, 0x60, 0x30, 0x62, 0xc0, 0x3, 0x98, 0xf0, 0x49, 0xe, 0x1f, 0x5, 0x0, 0x3c, 0x10, 0x0, 0x42, 0xb5, 0xb3, 0xc, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_add_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x36,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0xa0,0x25,0x78,0xf0,0xe0,0xc1,0xff,0x7,0xf,0x1e,0xfc,0xc7,0xa7,0x86,0x89,0x52,0x4b,0x46,0xd,0x60,0x60,0x60,0x64,0x60,0x80,0x84,0x36,0x39,0x9a,0x15,0x14,0x14,0x18,0x29,0x76,0x1,0x5e,0x30,0x9a,0xe,0xe8,0x64,0x0,0xc5,0x0,0x0,0xc7,0x6e,0x12,0x94,0xf9,0x26,0x2e,0xdb,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char hsplitter_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x40, 0x8, 0x6, 0x0, 0x0, 0x0, 0x27, 0x4, 0x36, 0x8a, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x39, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0x63, 0x60, 0x20, 0x5, 0xfc, 0xff, 0xff, 0xdf, 0xe7, 0xff, 0xff, 0xff, 0x3e, 0xc8, 0x62, 0x2c, 0x68, 0x6a, 0x24, 0xd0, 0x35, 0x31, 0x11, 0x32, 0x75, 0x54, 0xc1, 0xa8, 0x82, 0x51, 0x5, 0xa3, 0xa, 0x46, 0x15, 0x8c, 0x2a, 0x18, 0x55, 0x40, 0x4f, 0x5, 0xe8, 0x75, 0xf7, 0xb, 0x42, 0x1a, 0x30, 0x0, 0x0, 0xf0, 0x37, 0x8, 0x11, 0x77, 0x42, 0x12, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_close_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x9b,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x31,0xe,0xc2,0x30,0x10,0x4,0x17,0xaa,0x3d,0x67,0xdb,0x58,0xd0,0xd3,0xf0,0xa3,0x7c,0x36,0x3c,0x82,0x48,0x44,0x22,0x6f,0xb1,0x4d,0x85,0x14,0x81,0xf,0x2c,0x28,0xe0,0xda,0xd5,0x8c,0x4e,0x77,0xb,0xfc,0xd5,0x98,0xd9,0x20,0x29,0x7a,0xb9,0xa4,0x68,0x66,0x83,0xb,0x93,0xcc,0x24,0xa7,0x9a,0x44,0x52,0x24,0x39,0x91,0xcc,0x55,0x89,0xa4,0xde,0xcc,0xce,0x24,0xb,0xc9,0x39,0x84,0xb0,0xf7,0xb2,0xae,0xeb,0x76,0xde,0x8a,0x4f,0x92,0x66,0xd8,0x91,0x5c,0x49,0x5e,0x9a,0xe1,0xb5,0x64,0x5,0x16,0x92,0x8b,0x7,0x6f,0x9b,0x8c,0x0,0x4a,0x29,0x9b,0x26,0x81,0xa4,0x3e,0xa5,0x34,0x2,0x38,0x2,0x58,0x0,0xcc,0x0,0xe,0x39,0xe7,0xd3,0xfa,0xb0,0xee,0xea,0x8f,0x7,0x7b,0xf5,0x9d,0xb7,0xb0,0x97,0x55,0x25,0x5f,0x17,0xe9,0x2e,0xf9,0xb8,0xca,0x3f,0x9b,0x1b,0x1a,0xe3,0x40,0x47,0xa0,0xda,0xda,0x61,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_add_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x36, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x60, 0xa0, 0x25, 0x78, 0xf0, 0xe0, 0xc1, 0xff, 0x7, 0xf, 0x1e, 0xfc, 0xc7, 0xa7, 0x86, 0x89, 0x52, 0x4b, 0x46, 0xd, 0x60, 0x60, 0x60, 0x64, 0x60, 0x80, 0x84, 0x36, 0x39, 0x9a, 0x15, 0x14, 0x14, 0x18, 0x29, 0x76, 0x1, 0x5e, 0x30, 0x9a, 0xe, 0xe8, 0x64, 0x0, 0xc5, 0x0, 0x0, 0xc7, 0x6e, 0x12, 0x94, 0xf9, 0x26, 0x2e, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_color_pick_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x1,0x55,0x49,0x44,0x41,0x54,0x38,0x8d,0xb5,0x92,0xb1,0x4a,0x3,0x41,0x14,0x45,0xef,0xdb,0x6c,0xac,0xf2,0x1,0xda,0xcd,0x40,0x4,0x25,0x11,0x4,0x8b,0x80,0x8d,0x20,0x88,0x5d,0x20,0x88,0x90,0x22,0x9d,0x9d,0xa0,0x85,0x58,0xeb,0x7,0x88,0xe0,0x7,0x58,0x8b,0x36,0x5a,0x88,0xa0,0xa5,0x85,0xa5,0x60,0x61,0xb0,0x70,0xb2,0xef,0x8d,0x44,0x41,0x21,0x1f,0x20,0x6c,0xf2,0x2c,0xcc,0xc2,0x12,0x92,0x8d,0x45,0xbc,0xe5,0xdc,0xb9,0x67,0xee,0xbc,0x19,0xe0,0xbf,0xe5,0xbd,0x2f,0x35,0x9b,0xcd,0x29,0x0,0x10,0x91,0x9a,0x88,0x7c,0x88,0xc8,0xa7,0x88,0xd4,0x0,0x80,0xb2,0xc2,0xcc,0x5c,0x21,0xa2,0x5b,0x22,0xba,0xef,0x76,0xbb,0x97,0x44,0x74,0x4a,0x44,0x61,0xdf,0xfe,0x32,0xc6,0x4c,0x87,0x59,0x0,0x0,0xdf,0x0,0x62,0x55,0xad,0x6,0x41,0x50,0x1d,0xf0,0x62,0x0,0x8,0xb2,0xd2,0xd6,0xda,0x27,0x0,0x27,0x83,0xeb,0xaa,0x1a,0x3,0xd8,0x19,0xb,0x60,0xe6,0x3a,0x80,0x6d,0x0,0xd,0x0,0x9d,0x14,0x60,0xcb,0x18,0x73,0x95,0x9,0x60,0xe6,0x3a,0x11,0x1d,0xc7,0x71,0xbc,0x6e,0x8c,0x39,0x53,0xd5,0xdd,0xc4,0xcb,0xe5,0x72,0x1b,0xc9,0x60,0x87,0x2,0xd2,0xe1,0x62,0xb1,0xf8,0xec,0xbd,0x2f,0x11,0xd1,0x51,0xaf,0xd7,0x3b,0x0,0xd0,0x51,0xd5,0x95,0x42,0xa1,0x30,0x3b,0xf2,0x64,0x11,0x79,0x77,0xce,0x95,0x81,0xdf,0x67,0x14,0x91,0x76,0xff,0x3a,0x60,0xe6,0x45,0x66,0xae,0xc,0xd,0x47,0x51,0xb4,0x29,0x22,0xed,0x56,0xab,0xb5,0xd0,0xdf,0x3c,0xe7,0xbd,0x7f,0x8b,0xa2,0xa8,0x31,0x7a,0x52,0x93,0x8,0x8b,0xc8,0x72,0xba,0xb6,0x73,0xae,0x9c,0xae,0x9d,0xa5,0x0,0x0,0x88,0x68,0xd,0xc0,0x8b,0xaa,0xbe,0x3a,0xe7,0xca,0x61,0x18,0xde,0xa9,0xea,0xbe,0xb5,0xf6,0x7c,0x1c,0x20,0xf9,0x89,0x4b,0x0,0x56,0xf3,0xf9,0xfc,0xd,0x80,0x79,0x55,0xdd,0xb3,0xd6,0x5e,0x8c,0xad,0x9e,0x0,0x54,0x75,0x86,0x88,0xae,0x1,0x3c,0x2,0x38,0x34,0xc6,0x3c,0xfc,0x25,0x3c,0x11,0xfd,0x0,0x28,0x54,0xbb,0xfe,0xad,0x99,0xe5,0xb8,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_close_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xbe, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xd5, 0x90, 0x3b, 0xe, 0xc2, 0x40, 0xc, 0x44, 0x9f, 0x9, 0x45, 0xf8, 0x14, 0x80, 0xb8, 0xf, 0x15, 0x8a, 0x8, 0x48, 0xdc, 0x94, 0x8a, 0x4, 0x85, 0x9a, 0xe3, 0x20, 0x48, 0xc3, 0xa7, 0x20, 0x32, 0x8d, 0x41, 0x8b, 0xc9, 0x4a, 0xb4, 0xb8, 0xda, 0x1d, 0x7b, 0x9e, 0x35, 0x86, 0xbf, 0x2f, 0x9, 0x3f, 0xaa, 0xba, 0x2, 0xba, 0x40, 0x25, 0x22, 0x37, 0xd7, 0xeb, 0x1, 0x19, 0xf0, 0x10, 0x91, 0xed, 0x4b, 0xef, 0x38, 0x60, 0x2, 0x4c, 0x81, 0xdc, 0xc, 0xa1, 0x39, 0xb7, 0x5e, 0x12, 0x1a, 0x3c, 0xa0, 0x2, 0x4e, 0xc0, 0x18, 0x58, 0xaa, 0x6a, 0x5f, 0x55, 0x53, 0x60, 0x61, 0x5a, 0xd, 0xec, 0xa3, 0x11, 0x6c, 0x5b, 0x6a, 0xdb, 0x26, 0xc0, 0xc5, 0xe4, 0x81, 0x99, 0xb, 0x1f, 0xed, 0xb, 0x10, 0x40, 0xd6, 0xc0, 0xcc, 0x66, 0xe, 0xc0, 0xc6, 0x9b, 0xdb, 0x22, 0xc4, 0x4a, 0x63, 0xcb, 0x7e, 0x89, 0xa0, 0xc0, 0xd0, 0x22, 0x94, 0x22, 0x72, 0x8d, 0x2, 0x9c, 0xb9, 0x6, 0xa, 0x3, 0x84, 0xda, 0x7, 0xc4, 0x47, 0xc8, 0x6c, 0xf0, 0x8c, 0x1d, 0x4c, 0x44, 0xee, 0xc0, 0xce, 0xb4, 0x11, 0x30, 0xf, 0xd, 0x1e, 0xd0, 0x0, 0x47, 0xdb, 0xf2, 0x3e, 0x98, 0xbd, 0x4b, 0xeb, 0x35, 0x6d, 0xb7, 0xf8, 0xe3, 0x7a, 0x2, 0x49, 0x7e, 0x47, 0x10, 0xc3, 0xf7, 0xae, 0x75, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_folder_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x5f,0x49,0x44,0x41,0x54,0x38,0x8d,0xed,0x8f,0xc1,0xd,0x80,0x30,0x8,0x45,0x9f,0x9d,0x84,0x39,0x4c,0x3b,0xbd,0x75,0x8f,0x32,0x9,0x5e,0xec,0xa5,0x9,0xa4,0xc6,0x26,0x5e,0x7c,0x17,0xe,0xc0,0xe3,0x3,0x5f,0xb3,0x1,0xb4,0xd6,0x4e,0x60,0x77,0x66,0xaa,0x88,0x14,0x4f,0x90,0xee,0xea,0x2d,0x3,0xe4,0x28,0x41,0x8a,0x9a,0x1d,0x55,0x75,0x25,0xfd,0x5,0x9b,0x11,0xd,0x54,0x11,0x29,0x53,0x9,0x1c,0x32,0x4c,0xbe,0x10,0xf1,0xb,0x16,0xa,0xea,0xd3,0x45,0x33,0x3b,0xde,0x1e,0x5f,0xc3,0x5,0x1f,0xc5,0x12,0x2c,0xc5,0x88,0xe1,0xb4,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_color_pick_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x55, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xb5, 0x92, 0xb1, 0x4a, 0x3, 0x41, 0x14, 0x45, 0xef, 0xdb, 0x6c, 0xac, 0xf2, 0x1, 0xda, 0xcd, 0x40, 0x4, 0x25, 0x11, 0x4, 0x8b, 0x80, 0x8d, 0x20, 0x88, 0x5d, 0x20, 0x88, 0x90, 0x22, 0x9d, 0x9d, 0xa0, 0x85, 0x58, 0xeb, 0x7, 0x88, 0xe0, 0x7, 0x58, 0x8b, 0x36, 0x5a, 0x88, 0xa0, 0xa5, 0x85, 0xa5, 0x60, 0x61, 0xb0, 0x70, 0xb2, 0xef, 0x8d, 0x44, 0x41, 0x21, 0x1f, 0x20, 0x6c, 0xf2, 0x2c, 0xcc, 0xc2, 0x12, 0x92, 0x8d, 0x45, 0xbc, 0xe5, 0xdc, 0xb9, 0x67, 0xee, 0xbc, 0x19, 0xe0, 0xbf, 0xe5, 0xbd, 0x2f, 0x35, 0x9b, 0xcd, 0x29, 0x0, 0x10, 0x91, 0x9a, 0x88, 0x7c, 0x88, 0xc8, 0xa7, 0x88, 0xd4, 0x0, 0x80, 0xb2, 0xc2, 0xcc, 0x5c, 0x21, 0xa2, 0x5b, 0x22, 0xba, 0xef, 0x76, 0xbb, 0x97, 0x44, 0x74, 0x4a, 0x44, 0x61, 0xdf, 0xfe, 0x32, 0xc6, 0x4c, 0x87, 0x59, 0x0, 0x0, 0xdf, 0x0, 0x62, 0x55, 0xad, 0x6, 0x41, 0x50, 0x1d, 0xf0, 0x62, 0x0, 0x8, 0xb2, 0xd2, 0xd6, 0xda, 0x27, 0x0, 0x27, 0x83, 0xeb, 0xaa, 0x1a, 0x3, 0xd8, 0x19, 0xb, 0x60, 0xe6, 0x3a, 0x80, 0x6d, 0x0, 0xd, 0x0, 0x9d, 0x14, 0x60, 0xcb, 0x18, 0x73, 0x95, 0x9, 0x60, 0xe6, 0x3a, 0x11, 0x1d, 0xc7, 0x71, 0xbc, 0x6e, 0x8c, 0x39, 0x53, 0xd5, 0xdd, 0xc4, 0xcb, 0xe5, 0x72, 0x1b, 0xc9, 0x60, 0x87, 0x2, 0xd2, 0xe1, 0x62, 0xb1, 0xf8, 0xec, 0xbd, 0x2f, 0x11, 0xd1, 0x51, 0xaf, 0xd7, 0x3b, 0x0, 0xd0, 0x51, 0xd5, 0x95, 0x42, 0xa1, 0x30, 0x3b, 0xf2, 0x64, 0x11, 0x79, 0x77, 0xce, 0x95, 0x81, 0xdf, 0x67, 0x14, 0x91, 0x76, 0xff, 0x3a, 0x60, 0xe6, 0x45, 0x66, 0xae, 0xc, 0xd, 0x47, 0x51, 0xb4, 0x29, 0x22, 0xed, 0x56, 0xab, 0xb5, 0xd0, 0xdf, 0x3c, 0xe7, 0xbd, 0x7f, 0x8b, 0xa2, 0xa8, 0x31, 0x7a, 0x52, 0x93, 0x8, 0x8b, 0xc8, 0x72, 0xba, 0xb6, 0x73, 0xae, 0x9c, 0xae, 0x9d, 0xa5, 0x0, 0x0, 0x88, 0x68, 0xd, 0xc0, 0x8b, 0xaa, 0xbe, 0x3a, 0xe7, 0xca, 0x61, 0x18, 0xde, 0xa9, 0xea, 0xbe, 0xb5, 0xf6, 0x7c, 0x1c, 0x20, 0xf9, 0x89, 0x4b, 0x0, 0x56, 0xf3, 0xf9, 0xfc, 0xd, 0x80, 0x79, 0x55, 0xdd, 0xb3, 0xd6, 0x5e, 0x8c, 0xad, 0x9e, 0x0, 0x54, 0x75, 0x86, 0x88, 0xae, 0x1, 0x3c, 0x2, 0x38, 0x34, 0xc6, 0x3c, 0xfc, 0x25, 0x3c, 0x11, 0xfd, 0x0, 0x28, 0x54, 0xbb, 0xfe, 0xad, 0x99, 0xe5, 0xb8, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_play_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xa2,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0x18,0xf2,0x80,0x11,0x99,0xf3,0xe0,0xc1,0x83,0xc3,0xc,0xc,0xc,0xc2,0xc,0xc,0xc,0xa5,0xa,0xa,0xa,0x5b,0xc9,0x31,0xe0,0x3f,0x5c,0x82,0x91,0x71,0x27,0x3,0x3,0x43,0x91,0xbc,0xbc,0xfc,0x35,0x7c,0x6,0x30,0xe1,0x92,0xf8,0xff,0xff,0xbf,0xfb,0xff,0xff,0xff,0x2f,0x3e,0x78,0xf0,0x60,0xca,0x93,0x27,0x4f,0x84,0x49,0x76,0x1,0x1a,0xf8,0xc0,0xc8,0xc8,0xd8,0xf1,0xeb,0xd7,0xaf,0x9,0xaa,0xaa,0xaa,0x3f,0x89,0x72,0x1,0x1a,0x10,0xf8,0xff,0xff,0x7f,0x7,0x2b,0x2b,0xeb,0x1e,0x74,0x9,0x62,0xd,0xc0,0x9,0x88,0x35,0xe0,0x3d,0x23,0x23,0x63,0xc5,0xef,0xdf,0xbf,0x5d,0xd0,0x25,0x58,0x8,0x68,0xfc,0xc3,0xc0,0xc0,0x30,0x93,0x85,0x85,0xa5,0x5e,0x46,0x46,0xe6,0x2d,0x36,0x5,0x38,0xd,0x20,0x36,0x1a,0xd1,0xd,0x38,0xc2,0x0,0x4d,0x48,0xf2,0xf2,0xf2,0x44,0x25,0xa4,0x61,0x0,0x0,0x1e,0x57,0x33,0x3c,0xcc,0xe7,0x34,0x69,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_folder_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x8f, 0xc1, 0xd, 0x80, 0x30, 0x8, 0x45, 0x9f, 0x9d, 0x84, 0x39, 0x4c, 0x3b, 0xbd, 0x75, 0x8f, 0x32, 0x9, 0x5e, 0xec, 0xa5, 0x9, 0xa4, 0xc6, 0x26, 0x5e, 0x7c, 0x17, 0xe, 0xc0, 0xe3, 0x3, 0x5f, 0xb3, 0x1, 0xb4, 0xd6, 0x4e, 0x60, 0x77, 0x66, 0xaa, 0x88, 0x14, 0x4f, 0x90, 0xee, 0xea, 0x2d, 0x3, 0xe4, 0x28, 0x41, 0x8a, 0x9a, 0x1d, 0x55, 0x75, 0x25, 0xfd, 0x5, 0x9b, 0x11, 0xd, 0x54, 0x11, 0x29, 0x53, 0x9, 0x1c, 0x32, 0x4c, 0xbe, 0x10, 0xf1, 0xb, 0x16, 0xa, 0xea, 0xd3, 0x45, 0x33, 0x3b, 0xde, 0x1e, 0x5f, 0xc3, 0x5, 0x1f, 0xc5, 0x12, 0x2c, 0xc5, 0x88, 0xe1, 0xb4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_reload_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x1,0x59,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x31,0x4b,0x3,0x31,0x18,0x86,0x9f,0x5c,0xe,0xec,0x20,0x76,0x70,0x39,0xd0,0xe3,0xba,0x74,0x51,0x41,0xdd,0xfc,0x7,0xba,0xb8,0x8,0x52,0xec,0x2e,0x4e,0x3a,0x88,0x3f,0xa3,0xa3,0x53,0x7,0x47,0x67,0x41,0x17,0xdd,0x9c,0x5c,0x3b,0xd8,0x82,0x64,0x68,0xca,0xd5,0x55,0x11,0x3c,0x1a,0x87,0x24,0x2e,0xd7,0x72,0x9e,0x9e,0xab,0xbe,0xd3,0xc7,0x1b,0x9e,0x37,0xf9,0xbe,0x7c,0xf0,0xd7,0x12,0x3f,0x99,0x4a,0xa9,0xb9,0x30,0xc,0x8f,0x84,0x10,0x7,0xc0,0x5a,0x6e,0x3f,0x3a,0xe7,0x2e,0xad,0xb5,0xdd,0x66,0xb3,0xf9,0x51,0x19,0x90,0xa6,0xe9,0x92,0xb5,0xf6,0x6,0x58,0xaf,0xb8,0xb4,0x27,0xa5,0xdc,0x8d,0xe3,0xf8,0x19,0x20,0x28,0xdf,0x5c,0x80,0x53,0x60,0xdf,0x18,0x53,0x37,0xc6,0xd4,0xbd,0xf7,0x7b,0xc0,0x13,0xb0,0x61,0xad,0xbd,0x56,0x4a,0xcd,0x1,0x84,0xc5,0x80,0x30,0xc,0x8f,0xa6,0xb0,0x94,0x72,0x33,0x8e,0xe3,0x97,0xc2,0xf1,0xd5,0x68,0x34,0xba,0xf7,0xde,0xf7,0x80,0xd,0x29,0xe5,0x21,0x70,0xfe,0xe5,0x5,0x42,0x88,0x76,0x5e,0x9e,0x96,0x60,0x0,0x92,0x24,0x79,0x75,0xce,0x9d,0x1,0x4,0x41,0xd0,0xfe,0xd6,0x2,0xb0,0x2,0x60,0x8c,0xb9,0xab,0xe8,0x1f,0x6b,0xed,0x6d,0x5e,0xae,0xce,0x2,0xb4,0xd6,0x17,0x5a,0x6b,0x7,0xcc,0x3,0xd4,0x6a,0xb5,0x37,0xad,0xf5,0xc5,0x4f,0x1,0x41,0x10,0x7c,0x19,0x7c,0x90,0x3,0xc7,0xc0,0xa0,0xe0,0xf,0x72,0xef,0x9b,0x84,0x10,0xdb,0x79,0xd9,0x9f,0x5,0x44,0x51,0x94,0x9,0x21,0x5a,0x40,0x6,0x64,0x42,0x88,0x56,0x14,0x45,0x59,0x19,0x1e,0x8f,0xc7,0x8b,0x52,0xca,0xe,0x80,0x73,0xee,0x12,0xa,0xbf,0x90,0x24,0x49,0x7f,0x38,0x1c,0x1e,0x3,0x34,0x1a,0x8d,0x7e,0x11,0x54,0x4a,0x2d,0x48,0x29,0x77,0xac,0xb5,0x1d,0xef,0xfd,0x32,0xd0,0x9b,0x4c,0x26,0x5d,0xa8,0xd8,0xc4,0xb2,0xf2,0xf9,0x4c,0x55,0xbd,0x48,0xbf,0xe8,0x1d,0x78,0x70,0xce,0x9d,0x64,0x59,0xb6,0x35,0x85,0xff,0x87,0x3e,0x1,0x53,0x7,0x87,0x11,0xd3,0x3a,0x9b,0x9e,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_play_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xa2, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x60, 0x18, 0xf2, 0x80, 0x11, 0x99, 0xf3, 0xe0, 0xc1, 0x83, 0xc3, 0xc, 0xc, 0xc, 0xc2, 0xc, 0xc, 0xc, 0xa5, 0xa, 0xa, 0xa, 0x5b, 0xc9, 0x31, 0xe0, 0x3f, 0x5c, 0x82, 0x91, 0x71, 0x27, 0x3, 0x3, 0x43, 0x91, 0xbc, 0xbc, 0xfc, 0x35, 0x7c, 0x6, 0x30, 0xe1, 0x92, 0xf8, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0x2f, 0x3e, 0x78, 0xf0, 0x60, 0xca, 0x93, 0x27, 0x4f, 0x84, 0x49, 0x76, 0x1, 0x1a, 0xf8, 0xc0, 0xc8, 0xc8, 0xd8, 0xf1, 0xeb, 0xd7, 0xaf, 0x9, 0xaa, 0xaa, 0xaa, 0x3f, 0x89, 0x72, 0x1, 0x1a, 0x10, 0xf8, 0xff, 0xff, 0x7f, 0x7, 0x2b, 0x2b, 0xeb, 0x1e, 0x74, 0x9, 0x62, 0xd, 0xc0, 0x9, 0x88, 0x35, 0xe0, 0x3d, 0x23, 0x23, 0x63, 0xc5, 0xef, 0xdf, 0xbf, 0x5d, 0xd0, 0x25, 0x58, 0x8, 0x68, 0xfc, 0xc3, 0xc0, 0xc0, 0x30, 0x93, 0x85, 0x85, 0xa5, 0x5e, 0x46, 0x46, 0xe6, 0x2d, 0x36, 0x5, 0x38, 0xd, 0x20, 0x36, 0x1a, 0xd1, 0xd, 0x38, 0xc2, 0x0, 0x4d, 0x48, 0xf2, 0xf2, 0xf2, 0x44, 0x25, 0xa4, 0x61, 0x0, 0x0, 0x1e, 0x57, 0x33, 0x3c, 0xcc, 0xe7, 0x34, 0x69, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_snap_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xc2,0x49,0x44,0x41,0x54,0x38,0x8d,0xad,0x90,0xbd,0xa,0xc2,0x30,0x14,0x85,0xbf,0x5b,0x5c,0x23,0xe8,0x6c,0x9f,0xc1,0xb7,0xd0,0x47,0xd1,0x47,0x70,0x48,0xa1,0x43,0x57,0xe9,0xd3,0x88,0x93,0xef,0xe0,0xea,0x5c,0x9d,0x1d,0xb2,0x96,0xc6,0xa1,0x9,0xd4,0xd8,0xd8,0x4a,0xfd,0x20,0x10,0xee,0xcf,0xe1,0xdc,0x3,0x1d,0x8c,0x31,0xd6,0x18,0x63,0x9,0x88,0xd5,0x1,0x92,0xbe,0xe2,0x2f,0x4c,0x16,0x90,0x98,0xb5,0x21,0x94,0x52,0xf2,0x17,0x7,0x6f,0x7c,0xb,0x2b,0xc6,0x64,0x7,0xb3,0xa1,0x1,0x5b,0x14,0x29,0x50,0x2,0x1b,0x0,0x44,0x2e,0x34,0xcd,0x41,0xb2,0xec,0x6,0x20,0xdd,0x61,0x6f,0xdf,0x7,0xe4,0x96,0xaf,0xc0,0x32,0xd0,0x7d,0x2,0x6b,0xd1,0xba,0x4a,0xfc,0xdd,0x91,0xdb,0x4b,0xb7,0x7c,0x2,0x56,0xd4,0x75,0xa,0x9c,0x81,0x5,0x70,0x84,0xe1,0xc,0x5a,0xdb,0x75,0xbd,0x17,0xad,0x1f,0x92,0xe7,0x77,0x60,0xe7,0x7a,0x5b,0x80,0x44,0x29,0x25,0xfe,0xf5,0x8,0x28,0x0,0xb7,0xd8,0x46,0xa0,0x75,0xe5,0xbe,0xf3,0x31,0xe,0x7e,0x23,0xcc,0xc2,0x3a,0xc2,0xb9,0x58,0xfd,0x83,0xc9,0x2,0x63,0x78,0x1,0x4a,0x50,0x70,0x86,0xcc,0x86,0x2,0x4,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_reload_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x59, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xcd, 0x92, 0x31, 0x4b, 0x3, 0x31, 0x18, 0x86, 0x9f, 0x5c, 0xe, 0xec, 0x20, 0x76, 0x70, 0x39, 0xd0, 0xe3, 0xba, 0x74, 0x51, 0x41, 0xdd, 0xfc, 0x7, 0xba, 0xb8, 0x8, 0x52, 0xec, 0x2e, 0x4e, 0x3a, 0x88, 0x3f, 0xa3, 0xa3, 0x53, 0x7, 0x47, 0x67, 0x41, 0x17, 0xdd, 0x9c, 0x5c, 0x3b, 0xd8, 0x82, 0x64, 0x68, 0xca, 0xd5, 0x55, 0x11, 0x3c, 0x1a, 0x87, 0x24, 0x2e, 0xd7, 0x72, 0x9e, 0x9e, 0xab, 0xbe, 0xd3, 0xc7, 0x1b, 0x9e, 0x37, 0xf9, 0xbe, 0x7c, 0xf0, 0xd7, 0x12, 0x3f, 0x99, 0x4a, 0xa9, 0xb9, 0x30, 0xc, 0x8f, 0x84, 0x10, 0x7, 0xc0, 0x5a, 0x6e, 0x3f, 0x3a, 0xe7, 0x2e, 0xad, 0xb5, 0xdd, 0x66, 0xb3, 0xf9, 0x51, 0x19, 0x90, 0xa6, 0xe9, 0x92, 0xb5, 0xf6, 0x6, 0x58, 0xaf, 0xb8, 0xb4, 0x27, 0xa5, 0xdc, 0x8d, 0xe3, 0xf8, 0x19, 0x20, 0x28, 0xdf, 0x5c, 0x80, 0x53, 0x60, 0xdf, 0x18, 0x53, 0x37, 0xc6, 0xd4, 0xbd, 0xf7, 0x7b, 0xc0, 0x13, 0xb0, 0x61, 0xad, 0xbd, 0x56, 0x4a, 0xcd, 0x1, 0x84, 0xc5, 0x80, 0x30, 0xc, 0x8f, 0xa6, 0xb0, 0x94, 0x72, 0x33, 0x8e, 0xe3, 0x97, 0xc2, 0xf1, 0xd5, 0x68, 0x34, 0xba, 0xf7, 0xde, 0xf7, 0x80, 0xd, 0x29, 0xe5, 0x21, 0x70, 0xfe, 0xe5, 0x5, 0x42, 0x88, 0x76, 0x5e, 0x9e, 0x96, 0x60, 0x0, 0x92, 0x24, 0x79, 0x75, 0xce, 0x9d, 0x1, 0x4, 0x41, 0xd0, 0xfe, 0xd6, 0x2, 0xb0, 0x2, 0x60, 0x8c, 0xb9, 0xab, 0xe8, 0x1f, 0x6b, 0xed, 0x6d, 0x5e, 0xae, 0xce, 0x2, 0xb4, 0xd6, 0x17, 0x5a, 0x6b, 0x7, 0xcc, 0x3, 0xd4, 0x6a, 0xb5, 0x37, 0xad, 0xf5, 0xc5, 0x4f, 0x1, 0x41, 0x10, 0x7c, 0x19, 0x7c, 0x90, 0x3, 0xc7, 0xc0, 0xa0, 0xe0, 0xf, 0x72, 0xef, 0x9b, 0x84, 0x10, 0xdb, 0x79, 0xd9, 0x9f, 0x5, 0x44, 0x51, 0x94, 0x9, 0x21, 0x5a, 0x40, 0x6, 0x64, 0x42, 0x88, 0x56, 0x14, 0x45, 0x59, 0x19, 0x1e, 0x8f, 0xc7, 0x8b, 0x52, 0xca, 0xe, 0x80, 0x73, 0xee, 0x12, 0xa, 0xbf, 0x90, 0x24, 0x49, 0x7f, 0x38, 0x1c, 0x1e, 0x3, 0x34, 0x1a, 0x8d, 0x7e, 0x11, 0x54, 0x4a, 0x2d, 0x48, 0x29, 0x77, 0xac, 0xb5, 0x1d, 0xef, 0xfd, 0x32, 0xd0, 0x9b, 0x4c, 0x26, 0x5d, 0xa8, 0xd8, 0xc4, 0xb2, 0xf2, 0xf9, 0x4c, 0x55, 0xbd, 0x48, 0xbf, 0xe8, 0x1d, 0x78, 0x70, 0xce, 0x9d, 0x64, 0x59, 0xb6, 0x35, 0x85, 0xff, 0x87, 0x3e, 0x1, 0x53, 0x7, 0x87, 0x11, 0xd3, 0x3a, 0x9b, 0x9e, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_stop_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x2b,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0x20,0xc,0x3e,0x30,0xe3,0x93,0x61,0x64,0x60,0x60,0x60,0x78,0xf8,0x1f,0xbb,0x2,0x79,0x46,0x6,0x6,0x26,0x42,0xe6,0x8f,0x2a,0xa0,0x96,0x2,0x6,0x42,0x91,0x45,0x10,0x0,0x0,0x95,0x31,0x5,0xe4,0xe,0x1,0x8e,0x3,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_snap_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xc2, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xad, 0x90, 0xbd, 0xa, 0xc2, 0x30, 0x14, 0x85, 0xbf, 0x5b, 0x5c, 0x23, 0xe8, 0x6c, 0x9f, 0xc1, 0xb7, 0xd0, 0x47, 0xd1, 0x47, 0x70, 0x48, 0xa1, 0x43, 0x57, 0xe9, 0xd3, 0x88, 0x93, 0xef, 0xe0, 0xea, 0x5c, 0x9d, 0x1d, 0xb2, 0x96, 0xc6, 0xa1, 0x9, 0xd4, 0xd8, 0xd8, 0x4a, 0xfd, 0x20, 0x10, 0xee, 0xcf, 0xe1, 0xdc, 0x3, 0x1d, 0x8c, 0x31, 0xd6, 0x18, 0x63, 0x9, 0x88, 0xd5, 0x1, 0x92, 0xbe, 0xe2, 0x2f, 0x4c, 0x16, 0x90, 0x98, 0xb5, 0x21, 0x94, 0x52, 0xf2, 0x17, 0x7, 0x6f, 0x7c, 0xb, 0x2b, 0xc6, 0x64, 0x7, 0xb3, 0xa1, 0x1, 0x5b, 0x14, 0x29, 0x50, 0x2, 0x1b, 0x0, 0x44, 0x2e, 0x34, 0xcd, 0x41, 0xb2, 0xec, 0x6, 0x20, 0xdd, 0x61, 0x6f, 0xdf, 0x7, 0xe4, 0x96, 0xaf, 0xc0, 0x32, 0xd0, 0x7d, 0x2, 0x6b, 0xd1, 0xba, 0x4a, 0xfc, 0xdd, 0x91, 0xdb, 0x4b, 0xb7, 0x7c, 0x2, 0x56, 0xd4, 0x75, 0xa, 0x9c, 0x81, 0x5, 0x70, 0x84, 0xe1, 0xc, 0x5a, 0xdb, 0x75, 0xbd, 0x17, 0xad, 0x1f, 0x92, 0xe7, 0x77, 0x60, 0xe7, 0x7a, 0x5b, 0x80, 0x44, 0x29, 0x25, 0xfe, 0xf5, 0x8, 0x28, 0x0, 0xb7, 0xd8, 0x46, 0xa0, 0x75, 0xe5, 0xbe, 0xf3, 0x31, 0xe, 0x7e, 0x23, 0xcc, 0xc2, 0x3a, 0xc2, 0xb9, 0x58, 0xfd, 0x83, 0xc9, 0x2, 0x63, 0x78, 0x1, 0x4a, 0x50, 0x70, 0x86, 0xcc, 0x86, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_zoom_less_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x25,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0x18,0x5,0xc3,0x0,0x30,0x32,0x30,0x30,0x30,0x3c,0x78,0xf0,0xe0,0x3f,0x39,0x9a,0x15,0x14,0x14,0x18,0x99,0xa8,0xeb,0x9e,0x51,0x30,0x44,0x1,0x0,0xff,0xa9,0x4,0x4,0x4a,0xae,0x20,0xfa,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_stop_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0xb5, 0xfa, 0x37, 0xea, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x4, 0x4e, 0x1d, 0x2, 0xaf, 0x0, 0x0, 0x0, 0x2b, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x63, 0x60, 0x20, 0xc, 0x3e, 0x30, 0xe3, 0x93, 0x61, 0x64, 0x60, 0x60, 0x60, 0x78, 0xf8, 0x1f, 0xbb, 0x2, 0x79, 0x46, 0x6, 0x6, 0x26, 0x42, 0xe6, 0x8f, 0x2a, 0xa0, 0x96, 0x2, 0x6, 0x42, 0x91, 0x45, 0x10, 0x0, 0x0, 0x95, 0x31, 0x5, 0xe4, 0xe, 0x1, 0x8e, 0x3, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_zoom_more_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x36,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0xa0,0x25,0x78,0xf0,0xe0,0xc1,0xff,0x7,0xf,0x1e,0xfc,0xc7,0xa7,0x86,0x89,0x52,0x4b,0x46,0xd,0x60,0x60,0x60,0x64,0x60,0x80,0x84,0x36,0x39,0x9a,0x15,0x14,0x14,0x18,0x29,0x76,0x1,0x5e,0x30,0x9a,0xe,0xe8,0x64,0x0,0xc5,0x0,0x0,0xc7,0x6e,0x12,0x94,0xf9,0x26,0x2e,0xdb,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_zoom_less_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x25, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x60, 0x18, 0x5, 0xc3, 0x0, 0x30, 0x32, 0x30, 0x30, 0x30, 0x3c, 0x78, 0xf0, 0xe0, 0x3f, 0x39, 0x9a, 0x15, 0x14, 0x14, 0x18, 0x99, 0xa8, 0xeb, 0x9e, 0x51, 0x30, 0x44, 0x1, 0x0, 0xff, 0xa9, 0x4, 0x4, 0x4a, 0xae, 0x20, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char icon_zoom_reset_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6f,0x49,0x44,0x41,0x54,0x38,0x8d,0xdd,0x91,0xbb,0xd,0x80,0x30,0x10,0x43,0x1f,0x11,0x23,0x20,0xea,0x4c,0xc5,0x62,0x48,0xec,0xc0,0x56,0x97,0x26,0x43,0xa4,0x31,0x15,0x12,0x45,0x72,0x8a,0x14,0xa,0x84,0xab,0xfb,0x58,0x3e,0xeb,0xc,0x83,0x98,0xee,0x22,0xa5,0xb4,0x49,0x3a,0x1,0x62,0x8c,0x53,0x8d,0x5c,0xe3,0x4,0x80,0x9c,0xf3,0x22,0x69,0xf7,0x2e,0xb5,0x38,0x1,0xa0,0x94,0x72,0x0,0xab,0x27,0xd0,0xc3,0xc1,0xcc,0x64,0x66,0x6a,0xf5,0xb5,0x59,0x70,0x15,0x3b,0x30,0x7b,0xcb,0xd6,0x33,0x9f,0x18,0x76,0xf0,0x71,0x81,0x5a,0xa,0xaf,0x3b,0xf8,0x41,0xa,0xc3,0xb8,0x0,0x6c,0x9c,0x3f,0xb8,0x84,0xfc,0x5b,0x85,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_zoom_more_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x36, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x60, 0xa0, 0x25, 0x78, 0xf0, 0xe0, 0xc1, 0xff, 0x7, 0xf, 0x1e, 0xfc, 0xc7, 0xa7, 0x86, 0x89, 0x52, 0x4b, 0x46, 0xd, 0x60, 0x60, 0x60, 0x64, 0x60, 0x80, 0x84, 0x36, 0x39, 0x9a, 0x15, 0x14, 0x14, 0x18, 0x29, 0x76, 0x1, 0x5e, 0x30, 0x9a, 0xe, 0xe8, 0x64, 0x0, 0xc5, 0x0, 0x0, 0xc7, 0x6e, 0x12, 0x94, 0xf9, 0x26, 0x2e, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char line_edit_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x4,0x3,0x0,0x0,0x0,0x7f,0x1c,0xd2,0x8e,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2a,0x50,0x4c,0x54,0x45,0x17,0x16,0x1a,0x1d,0x1c,0x21,0x20,0x1e,0x24,0x21,0x1f,0x25,0x1d,0x1c,0x21,0x20,0x1e,0x24,0x1d,0x1c,0x21,0x1d,0x1c,0x21,0x24,0x22,0x29,0x28,0x26,0x2d,0x28,0x26,0x2e,0x2b,0x2a,0x31,0x2c,0x2a,0x32,0xff,0xff,0xff,0xb9,0x11,0x56,0x3e,0x0,0x0,0x0,0x8,0x74,0x52,0x4e,0x53,0x6f,0xef,0xf7,0xf7,0xf0,0xf9,0xf1,0xee,0xcf,0x21,0xd2,0xdf,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xd,0xf6,0xb4,0x61,0xf5,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x2d,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x54,0x36,0x36,0x12,0x60,0xf0,0x98,0xb5,0x6a,0x65,0xb,0x43,0xe4,0x9e,0x33,0xa7,0xa7,0x32,0x58,0x9d,0x39,0x73,0x66,0x31,0x16,0x12,0x22,0xb,0x52,0xd9,0xc6,0xc0,0x2,0xd4,0x55,0x0,0x0,0xc,0x14,0x1a,0x90,0x55,0x1a,0xec,0xdb,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char icon_zoom_reset_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x6f, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xdd, 0x91, 0xbb, 0xd, 0x80, 0x30, 0x10, 0x43, 0x1f, 0x11, 0x23, 0x20, 0xea, 0x4c, 0xc5, 0x62, 0x48, 0xec, 0xc0, 0x56, 0x97, 0x26, 0x43, 0xa4, 0x31, 0x15, 0x12, 0x45, 0x72, 0x8a, 0x14, 0xa, 0x84, 0xab, 0xfb, 0x58, 0x3e, 0xeb, 0xc, 0x83, 0x98, 0xee, 0x22, 0xa5, 0xb4, 0x49, 0x3a, 0x1, 0x62, 0x8c, 0x53, 0x8d, 0x5c, 0xe3, 0x4, 0x80, 0x9c, 0xf3, 0x22, 0x69, 0xf7, 0x2e, 0xb5, 0x38, 0x1, 0xa0, 0x94, 0x72, 0x0, 0xab, 0x27, 0xd0, 0xc3, 0xc1, 0xcc, 0x64, 0x66, 0x6a, 0xf5, 0xb5, 0x59, 0x70, 0x15, 0x3b, 0x30, 0x7b, 0xcb, 0xd6, 0x33, 0x9f, 0x18, 0x76, 0xf0, 0x71, 0x81, 0x5a, 0xa, 0xaf, 0x3b, 0xf8, 0x41, 0xa, 0xc3, 0xb8, 0x0, 0x6c, 0x9c, 0x3f, 0xb8, 0x84, 0xfc, 0x5b, 0x85, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char line_edit_disabled_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x8,0x4,0x0,0x0,0x0,0x27,0x3b,0x7,0x36,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x64,0x49,0x44,0x41,0x54,0x8,0xd7,0x95,0xce,0x31,0x12,0x2,0x21,0x10,0x44,0xd1,0x3f,0x40,0xa1,0x44,0xa6,0x46,0xde,0x63,0x4f,0xe5,0x15,0x38,0xb2,0xd6,0x6,0xb0,0xc8,0x30,0x6,0x96,0xac,0x56,0x99,0xf8,0xb3,0x7e,0x51,0xcb,0xf9,0x1a,0xb3,0x3f,0xa,0xaf,0xc,0xad,0x2d,0xcb,0xe5,0x76,0x38,0x5,0x76,0xec,0x6c,0xf7,0xe0,0x53,0xe0,0x13,0xa1,0x27,0x27,0x43,0x26,0x81,0x20,0xc8,0x70,0xfc,0xe8,0xf,0x34,0x67,0xd8,0x9c,0x86,0x61,0x2e,0x68,0xe9,0x91,0xaf,0x4b,0x5a,0x7d,0x2a,0x2c,0x3,0xed,0xef,0x1e,0x6b,0xcb,0x4f,0xa6,0x66,0x2b,0x25,0x6,0x1,0x37,0x40,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char line_edit_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x4d, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xdd, 0x8f, 0xcd, 0x4a, 0x2, 0x61, 0x14, 0x86, 0xdf, 0x73, 0xbe, 0x51, 0x90, 0x71, 0x12, 0x4, 0x2b, 0x15, 0x61, 0xc, 0x9b, 0xd0, 0x74, 0xe1, 0x26, 0x97, 0xd6, 0xc2, 0x4d, 0x44, 0xd7, 0xe0, 0x2e, 0xda, 0x77, 0x1f, 0x5d, 0x42, 0xde, 0x40, 0xab, 0x68, 0x55, 0x11, 0xd2, 0xaa, 0x56, 0x81, 0xb6, 0x69, 0x35, 0xd0, 0x1f, 0x2a, 0xb8, 0x49, 0x1d, 0xc1, 0x71, 0x4e, 0xb, 0x43, 0x24, 0xa6, 0x14, 0xdc, 0xf5, 0xc2, 0x81, 0x6f, 0x71, 0xde, 0xe7, 0x7b, 0xe, 0xb0, 0x64, 0x68, 0xf6, 0x5d, 0x28, 0x95, 0xab, 0x10, 0xae, 0x8, 0x49, 0xcc, 0x77, 0x59, 0xa8, 0x3, 0xf2, 0xae, 0x1a, 0xf7, 0xf5, 0x1a, 0x0, 0x99, 0x5, 0x70, 0x7e, 0x67, 0xef, 0x2, 0x90, 0x7d, 0x22, 0x72, 0x41, 0xa4, 0xf9, 0x7e, 0x27, 0xe2, 0x8a, 0x88, 0x6, 0xd0, 0x65, 0xf3, 0xe1, 0xf6, 0x10, 0x80, 0xa7, 0x0, 0xa0, 0x50, 0x2a, 0x57, 0x1, 0x9c, 0x30, 0x6b, 0x50, 0x9a, 0xc6, 0xcc, 0xc, 0xff, 0x51, 0xc, 0x22, 0x88, 0x78, 0xd6, 0x5a, 0xc2, 0xb4, 0xdb, 0xef, 0xf6, 0x23, 0x4f, 0xc8, 0x5c, 0x21, 0x22, 0x97, 0x15, 0xcf, 0xbd, 0x99, 0x99, 0x41, 0x44, 0x63, 0x8f, 0xa4, 0x2, 0x0, 0x3c, 0x31, 0x93, 0x38, 0xf0, 0x8b, 0xb6, 0x6f, 0x48, 0x91, 0x50, 0x62, 0xa, 0x58, 0x26, 0xff, 0x5, 0x60, 0xe5, 0x8b, 0x49, 0x33, 0x93, 0x5b, 0xb8, 0x64, 0x66, 0x72, 0xb0, 0xf2, 0xc5, 0x24, 0x0, 0x68, 0x0, 0x10, 0x8d, 0xad, 0x7, 0x43, 0xba, 0x21, 0x2f, 0xf6, 0x33, 0xfd, 0x5d, 0xfd, 0x6, 0x6c, 0x65, 0x65, 0xd8, 0xfb, 0xc, 0x4c, 0xd, 0x9c, 0xfe, 0xe0, 0x46, 0xf, 0x1b, 0x94, 0x4a, 0x5b, 0x73, 0xcb, 0xa9, 0xf4, 0x26, 0x74, 0x7d, 0x85, 0x1c, 0xa7, 0x7f, 0x3d, 0x35, 0x78, 0x7b, 0xaa, 0x1f, 0xe9, 0x86, 0x71, 0xb0, 0x5d, 0x2c, 0xad, 0x9a, 0x56, 0x56, 0x9c, 0x5e, 0xdf, 0xd7, 0x24, 0x14, 0xe, 0x8b, 0xae, 0x1b, 0xd4, 0xed, 0xb4, 0x5b, 0xaf, 0x8d, 0xbb, 0x63, 0x0, 0x50, 0x0, 0x60, 0xdb, 0xb6, 0xb7, 0x11, 0x8f, 0x9c, 0x3a, 0x23, 0x4e, 0x42, 0x24, 0xaa, 0x5, 0x82, 0x1e, 0x2b, 0xe5, 0xfc, 0x9c, 0xd1, 0x70, 0xd0, 0xee, 0xb6, 0x3e, 0xce, 0xcf, 0x22, 0xee, 0xae, 0x5d, 0xab, 0x8d, 0x17, 0x39, 0x77, 0x6e, 0xbe, 0x0, 0xac, 0x8, 0x6b, 0x3c, 0x2d, 0x57, 0x1a, 0xdf, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char line_edit_focus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xab,0x50,0x4c,0x54,0x45,0x1b,0x17,0x18,0x1b,0x17,0x18,0x1b,0x17,0x18,0xc8,0x68,0x12,0xef,0xed,0xe7,0xef,0xed,0xe8,0xf0,0xed,0xe8,0xf0,0xee,0xe8,0xf0,0xed,0xe7,0xed,0xeb,0xe5,0xee,0xeb,0xe5,0xee,0xeb,0xe6,0xec,0xe9,0xe3,0xeb,0xe9,0xe3,0xeb,0xe9,0xe2,0xec,0xe9,0xe2,0xe9,0xe6,0xe0,0xea,0xe7,0xe0,0xea,0xe7,0xe1,0xe8,0xe4,0xdd,0xe8,0xe5,0xde,0xe8,0xe5,0xdd,0xe8,0xe4,0xde,0xe6,0xe2,0xdb,0xe6,0xe3,0xdb,0xe6,0xe3,0xdc,0xe7,0xe2,0xdb,0xe7,0xe3,0xdb,0xe4,0xe0,0xd8,0xe5,0xe0,0xd8,0xe5,0xe1,0xd9,0xe5,0xe0,0xd9,0xe4,0xe1,0xd9,0xe5,0xe1,0xd8,0xe4,0xe0,0xd9,0xe2,0xdf,0xd6,0xe3,0xdf,0xd6,0xe3,0xde,0xd6,0xe2,0xde,0xd6,0xe1,0xdc,0xd4,0xe1,0xdc,0xd3,0xe0,0xdc,0xd3,0xe1,0xdd,0xd3,0xe1,0xdd,0xd4,0xdf,0xda,0xd0,0xdf,0xda,0xd1,0xdf,0xdb,0xd1,0xe0,0xda,0xd1,0xdd,0xd8,0xcf,0xdd,0xd8,0xce,0xde,0xd9,0xce,0xde,0xd8,0xce,0xdd,0xd9,0xce,0xdc,0xd6,0xcc,0xdb,0xd6,0xcc,0xdc,0xd6,0xcb,0xff,0xff,0xff,0x73,0x72,0x65,0x6f,0x0,0x0,0x0,0x2,0x74,0x52,0x4e,0x53,0x36,0x61,0xc5,0x3a,0xd,0x83,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x38,0xa0,0x7,0xa5,0xd6,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x9e,0x49,0x44,0x41,0x54,0x18,0xd3,0x5d,0xcf,0xdb,0x16,0x82,0x20,0x10,0x85,0x61,0xb4,0xb4,0x13,0x1d,0x28,0x14,0xcb,0x4a,0x33,0xf,0x59,0x52,0x98,0x62,0xef,0xff,0x66,0xd1,0xf6,0xca,0xfe,0x19,0xd6,0x62,0x7d,0x77,0x43,0x88,0x3d,0x88,0x10,0x7b,0x34,0xc8,0x36,0x30,0x76,0x1c,0x77,0xe2,0x3a,0xee,0xd4,0x7c,0x0,0xb3,0x79,0x3f,0xa6,0x5,0x80,0xa2,0x25,0xa5,0xab,0x35,0x5,0x6c,0x18,0x63,0x5b,0xd6,0x7,0xd8,0x71,0xcf,0xe3,0x9c,0xfb,0x9c,0x7b,0x3e,0x40,0x4,0xfb,0xe0,0x10,0x84,0xa1,0x8,0x85,0x0,0x1c,0x4f,0xe7,0x28,0xbe,0x44,0x71,0x9c,0x24,0x67,0xc0,0x35,0x4d,0xb3,0x2c,0xcb,0xcd,0x4b,0x73,0x40,0x71,0x33,0x15,0xe5,0xfd,0x51,0x16,0x25,0xa0,0x92,0xf2,0xf9,0x92,0xbf,0x2a,0x9,0x50,0xaa,0x56,0xef,0x46,0xb5,0x4d,0x5b,0x37,0x0,0xdd,0x7d,0xb4,0x36,0xdb,0x69,0xad,0x1,0x7f,0xc7,0x59,0xc3,0xf3,0xad,0x2f,0x30,0x4f,0x11,0x50,0x3e,0x12,0x48,0xdb,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char line_edit_active_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x50, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xdd, 0x93, 0x4d, 0x4b, 0x2, 0x51, 0x14, 0x86, 0xdf, 0x73, 0x66, 0xc, 0x1d, 0x87, 0xa0, 0xa8, 0x4c, 0x27, 0x19, 0x49, 0xc, 0x84, 0x24, 0xda, 0xe4, 0x52, 0x22, 0xdc, 0x44, 0x44, 0x2d, 0x86, 0x5a, 0xba, 0xb1, 0x68, 0xef, 0xf, 0xf0, 0x6f, 0xb4, 0xab, 0x6d, 0x9b, 0x16, 0xe1, 0xaa, 0x24, 0x5a, 0x16, 0xf4, 0x69, 0x3f, 0xc0, 0x82, 0xd2, 0x8a, 0x8, 0x2, 0x47, 0xa1, 0x69, 0x4e, 0xb, 0x41, 0x5c, 0x4c, 0x29, 0xb8, 0xeb, 0x81, 0xb, 0x77, 0x71, 0xde, 0xe7, 0xbe, 0x67, 0x71, 0x81, 0x1, 0xa1, 0xee, 0x7b, 0x2a, 0x9d, 0xc9, 0x41, 0x38, 0x2b, 0x24, 0xe3, 0x9e, 0xc3, 0x42, 0x6f, 0x20, 0xf7, 0xb8, 0x72, 0x7e, 0xb6, 0x7, 0x40, 0xba, 0x5, 0x3c, 0xbb, 0xb0, 0x78, 0x4, 0xc8, 0x32, 0x11, 0x39, 0x20, 0x52, 0x3d, 0x9f, 0x13, 0x71, 0x44, 0x44, 0x5, 0xa8, 0x74, 0x7f, 0x71, 0xba, 0xa, 0xc0, 0x55, 0x0, 0x20, 0x95, 0xce, 0xe4, 0x0, 0x14, 0x98, 0x55, 0x28, 0xaa, 0xca, 0xcc, 0xc, 0xef, 0xa3, 0x30, 0x88, 0x20, 0xe2, 0xce, 0x84, 0x22, 0xb1, 0xea, 0xeb, 0x73, 0xf5, 0x86, 0xdb, 0x66, 0xce, 0x12, 0x91, 0xc3, 0xa, 0xf7, 0xdc, 0x99, 0x99, 0x41, 0x44, 0xdf, 0x2e, 0x49, 0x16, 0x0, 0xb8, 0xdd, 0x4c, 0xc2, 0xc0, 0x2f, 0xb5, 0x3d, 0x21, 0x85, 0x84, 0x22, 0x1d, 0xc1, 0x20, 0xfc, 0x17, 0x41, 0x32, 0x9f, 0x30, 0xe2, 0x96, 0xd9, 0x77, 0x28, 0x6e, 0x99, 0x48, 0xe6, 0x13, 0x6, 0x0, 0xa8, 0x0, 0x30, 0x36, 0x3f, 0x32, 0x14, 0x8, 0x69, 0x52, 0x3d, 0x7c, 0xa2, 0xbf, 0xa3, 0x6d, 0xa6, 0x37, 0x4c, 0x69, 0xd6, 0x6c, 0x5f, 0xa7, 0x41, 0xa3, 0xde, 0x2a, 0xeb, 0x51, 0x8d, 0xcc, 0x35, 0xa3, 0x67, 0x38, 0xb6, 0x6e, 0x40, 0x9f, 0xd2, 0xc8, 0xae, 0x37, 0x4f, 0x3a, 0xd, 0x1e, 0x2f, 0xef, 0xb6, 0xf5, 0x68, 0x70, 0x65, 0xae, 0x90, 0x9c, 0x88, 0x6f, 0x9a, 0x62, 0xd7, 0x9a, 0x9e, 0x4d, 0xb4, 0x88, 0x26, 0xba, 0x11, 0xa0, 0xf7, 0xdb, 0x8f, 0x97, 0x87, 0xab, 0xca, 0xe, 0xd0, 0xf5, 0x99, 0xac, 0x3, 0x4b, 0x9, 0xfa, 0xc3, 0xbb, 0x81, 0x49, 0xff, 0x92, 0x1a, 0xf4, 0xd, 0x7b, 0x9, 0x9c, 0xc6, 0xd7, 0xa7, 0x5d, 0x6b, 0x95, 0xf7, 0xaf, 0x47, 0xb7, 0x50, 0x2c, 0xba, 0xfd, 0xac, 0xdb, 0x93, 0x1f, 0xc, 0x91, 0x5f, 0xe7, 0xb9, 0x80, 0x59, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char logo_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x8,0x6,0x0,0x0,0x0,0xc3,0x3e,0x61,0xcb,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x2e,0x23,0x0,0x0,0x2e,0x23,0x1,0x78,0xa5,0x3f,0x76,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xdc,0x9,0x7,0x13,0x2,0x0,0x15,0xb9,0x53,0x97,0x0,0x0,0x21,0x58,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x7d,0x79,0x9c,0x1c,0x55,0xb5,0xff,0xf7,0x7b,0xab,0x7b,0x66,0x48,0x8,0x61,0xd1,0x90,0xb0,0x88,0x91,0x27,0x24,0x24,0x21,0x3b,0x8,0x4,0x42,0x58,0x54,0xe0,0x91,0x80,0x24,0x1,0x2,0x9,0x42,0x80,0x4,0x11,0x90,0x9f,0xf2,0xd3,0xa7,0xcf,0xe7,0xf3,0x3d,0x1f,0x1f,0x7f,0xea,0xd3,0x48,0x4c,0x8,0x61,0xd,0x49,0x64,0x89,0x82,0x40,0x58,0x4,0x64,0xb,0x44,0x25,0x9b,0xd9,0x51,0x14,0x41,0x3,0xc8,0x16,0x20,0xfb,0x4c,0x77,0xdd,0xef,0xef,0x8f,0xaa,0xea,0xae,0xee,0xa9,0xea,0x9e,0xee,0xae,0x99,0xe9,0xe0,0x9c,0xf9,0xd4,0x74,0xd5,0xad,0x5b,0x77,0x39,0xe7,0xdc,0x7b,0xcf,0x39,0xf7,0xdc,0x7b,0x81,0x2e,0xe8,0x82,0x2e,0xe8,0x82,0x2e,0xe8,0x82,0x2e,0xe8,0x82,0x2e,0xe8,0x82,0x2e,0xf8,0xe7,0x2,0x76,0x76,0x1,0xea,0x1,0xe,0xff,0xc2,0xcc,0xbd,0x60,0x5b,0x6e,0xb6,0xd6,0xf6,0x2,0xb8,0x8d,0xc6,0x6c,0x36,0x34,0x6f,0x81,0x7c,0x43,0x30,0x7f,0x27,0xcd,0xdf,0x8c,0xe3,0x6c,0xda,0x70,0xef,0xf4,0x37,0x3b,0xbb,0xac,0x49,0x43,0xaa,0xb3,0xb,0x50,0xf,0x20,0x9b,0xfd,0x96,0xcd,0xb6,0x4c,0x40,0xd0,0x20,0x2c,0xac,0x4b,0xb3,0x3,0xc0,0x36,0x80,0x5b,0x41,0x6c,0x75,0x5b,0xb8,0xed,0xb0,0x71,0xff,0xbb,0x83,0xc6,0x6c,0x26,0x9d,0x65,0x74,0xd2,0x4f,0x6e,0x5c,0x74,0xc5,0xba,0xce,0x2e,0x7b,0xad,0xf0,0x4f,0xdf,0x3,0xf4,0x9f,0x38,0xb7,0x5b,0x76,0xd7,0x7,0x2f,0xcb,0xda,0x3,0xc8,0x42,0x94,0x48,0x6a,0x15,0x9f,0x24,0x0,0xbe,0x43,0xe3,0xfc,0xc1,0x49,0x37,0x4d,0xdd,0xf8,0x8b,0x2b,0xff,0xde,0xd9,0x75,0xa8,0x5,0x76,0x2b,0x6,0xe8,0x37,0x7e,0xf6,0x18,0xeb,0xb6,0x9c,0x6,0x69,0xf,0x1a,0xf3,0xc1,0x1f,0xef,0xbb,0xe6,0xdb,0xb5,0xa4,0x37,0xf2,0x9a,0xa5,0xdc,0xb2,0x69,0xe5,0x69,0xca,0xec,0xf8,0xa5,0xa4,0x26,0x48,0xf2,0x29,0x8c,0x82,0x7b,0x40,0x3e,0xae,0xfc,0x5f,0x41,0x82,0x4d,0x37,0xf5,0x18,0xb7,0xd7,0xc1,0xc3,0x1f,0xfe,0xfd,0x4f,0x3e,0xa3,0x2a,0x8b,0xd0,0xe9,0x50,0xf7,0xc,0x70,0xf8,0x39,0xb3,0x3e,0x9,0xb9,0xa7,0x48,0xf6,0x70,0xb9,0xd9,0xd1,0x90,0x3b,0xd2,0x2b,0x39,0x9b,0x4d,0xaa,0x69,0xfa,0x1f,0xef,0xbb,0xfa,0x8e,0x5a,0xd2,0x3f,0x6c,0xdc,0x8f,0x9f,0x91,0xcd,0x8c,0x2,0xe9,0xe4,0x43,0x3,0x7a,0xc7,0x80,0x4,0x80,0xbb,0x9c,0x74,0xd3,0x77,0xdd,0xcc,0xce,0x1f,0xbc,0xfc,0xd0,0xd7,0x6d,0x67,0xe3,0xa9,0x5a,0xa8,0x5b,0x19,0xa0,0xdf,0xf8,0xd9,0x47,0x42,0xee,0x51,0x72,0x5b,0x3e,0x6b,0xdd,0xcc,0x69,0x0,0xf6,0xf4,0x8,0xe3,0x75,0xc3,0x92,0x1a,0x6d,0x66,0xd7,0x8f,0xfa,0x8d,0x9f,0xf5,0xe7,0x97,0x7e,0x71,0xe5,0xf3,0x55,0xe5,0x31,0xe1,0xc6,0x83,0xdc,0x5d,0x5b,0x46,0x3,0x7e,0xb3,0xce,0x51,0xbd,0x74,0xbb,0xf0,0x9b,0xbb,0x23,0xd9,0x23,0x59,0xf7,0x4d,0xa8,0x34,0xd4,0x1d,0x3,0xf4,0x3b,0x67,0xf6,0x20,0xc0,0x1d,0x65,0xb3,0xcd,0x67,0xc9,0xcd,0x9c,0xa,0x9f,0x1a,0xfe,0xd8,0x5b,0xd0,0x15,0xb,0xda,0xcf,0x66,0x9a,0x7f,0xd8,0x7f,0xc2,0x9c,0xb1,0x1b,0x17,0x4d,0x7f,0xa7,0x92,0x7c,0xe,0xff,0xc2,0xd,0x69,0x58,0x77,0x1c,0x40,0x17,0x84,0x3,0x54,0x48,0x4a,0xd2,0x91,0x75,0x7,0x38,0x4d,0x7b,0xef,0xd6,0x2c,0x50,0x37,0xc,0xd0,0x7f,0xc2,0x8d,0x7,0x3,0x1a,0x65,0x33,0xcd,0x97,0x58,0x9b,0x3d,0x5,0x0,0x40,0xe6,0x5a,0xa6,0x82,0x47,0xbf,0x13,0x0,0x21,0x82,0x90,0xdc,0xcf,0xc8,0x66,0xbe,0xd6,0x6f,0xfc,0xac,0xef,0xbc,0xf4,0x8b,0x2b,0x77,0xb5,0x35,0x3f,0x93,0x6a,0xb4,0x36,0xb3,0xe3,0x7c,0x1a,0xe3,0x8f,0xe9,0xe1,0x21,0x3f,0x4,0xe1,0xd1,0x40,0x80,0x24,0xd1,0x90,0x10,0x8c,0x64,0xf,0x31,0xa9,0xa6,0x2e,0x6,0x48,0x2,0x64,0xb3,0xdf,0xb0,0xd9,0xe6,0x2f,0x1,0x41,0x6b,0xf7,0x9,0x2f,0x91,0x1e,0x23,0x78,0x40,0x9f,0x8,0x34,0x41,0x90,0x75,0x33,0xbb,0xfe,0xaf,0xd3,0xd0,0x7d,0xd9,0x61,0xe3,0x7e,0x78,0xdf,0x9f,0x1e,0xb8,0x2e,0x72,0x3c,0x1e,0x30,0xe9,0xce,0x94,0xdb,0xb2,0x7d,0x1f,0xd2,0xf4,0x0,0x6c,0x1a,0xb2,0xbd,0x65,0xdd,0xcf,0x0,0x30,0x0,0x41,0x42,0x91,0xbd,0x0,0xb,0xef,0x49,0x52,0x9e,0x7a,0x40,0x48,0x7b,0xee,0x6,0x62,0x54,0x49,0xa8,0x1b,0x6,0xb0,0xd9,0xcc,0x39,0x7e,0x6b,0xb,0xda,0x5c,0xa8,0xeb,0x2f,0x4,0x7a,0x81,0x41,0x3c,0x3,0x10,0x36,0xbb,0xeb,0xc7,0x4e,0x43,0x8f,0xd7,0xfa,0x4f,0xb8,0x71,0x3,0x68,0xf6,0x7,0xb0,0x37,0x81,0x34,0x8,0xca,0xda,0x46,0xb7,0x65,0xeb,0x27,0x20,0x3b,0xd8,0x75,0xdd,0xbe,0x4,0xf6,0x83,0x74,0x30,0x80,0x40,0xf0,0x53,0x25,0x43,0x0,0xfd,0xff,0x22,0xad,0xcd,0xee,0xac,0x59,0x3,0xe8,0x7f,0xee,0x2d,0xdd,0x36,0xde,0x73,0xe9,0x8e,0xce,0xc0,0x7b,0xdd,0x30,0x0,0x8d,0xf3,0xb2,0xac,0x3e,0xe,0xc0,0x20,0x4e,0xc,0xf,0xc8,0x1e,0x3c,0xf9,0x8a,0x3a,0x49,0x40,0xf6,0x60,0xeb,0xb6,0xfc,0x1f,0xd2,0xac,0xb3,0xb6,0xf9,0x24,0x78,0xad,0xbb,0x9b,0x17,0xb5,0x90,0x46,0xca,0x25,0x46,0x85,0x52,0x8e,0xcb,0xa7,0x30,0xdc,0x4a,0xa0,0x21,0xe8,0x7d,0xed,0x36,0x6f,0xad,0x89,0x1,0x8e,0x38,0x77,0x6e,0x5f,0xeb,0xb6,0x9c,0xde,0x7f,0xc2,0x9c,0xe7,0x36,0x2e,0x9a,0xbe,0xb6,0xc3,0xf1,0xde,0xd1,0x19,0xc6,0x41,0xff,0x9,0xb3,0xbf,0x67,0x33,0xcd,0x5f,0x96,0x6c,0xcf,0x70,0xab,0x8f,0xa3,0x43,0x41,0xb8,0x4,0x90,0x16,0x80,0x41,0xd8,0x78,0x43,0x6,0xef,0x8a,0xf4,0x7a,0x9,0xf2,0xfa,0x7d,0xff,0xb1,0x40,0x0,0x60,0x51,0xde,0xc5,0xf9,0x11,0x39,0x23,0x51,0xd6,0x69,0xdc,0xf3,0x18,0xc9,0xbe,0x61,0x9c,0x86,0xad,0x1b,0xee,0x9e,0xba,0xb5,0xad,0xf5,0x3d,0xe2,0xbc,0x5b,0xbb,0xc1,0xba,0x9f,0xc8,0x66,0xb6,0x2f,0x86,0x74,0x28,0x80,0xb7,0x4d,0xba,0xdb,0xb9,0xc6,0x38,0x4b,0x37,0xdc,0x73,0x59,0x4b,0x47,0xe1,0xbd,0x6e,0x18,0xa0,0xdf,0x84,0x39,0xa7,0x2b,0xb3,0x73,0x2e,0xa0,0x3,0x81,0x60,0x9c,0x6f,0x73,0xb7,0x1c,0xc8,0xb,0x20,0xf3,0xad,0x3a,0xf4,0x9c,0x78,0x3d,0x95,0x37,0x13,0x92,0xc6,0xf9,0xb,0x9d,0xf4,0x22,0x63,0x52,0xb7,0x3,0x78,0x3d,0xdb,0xbc,0x6d,0xe7,0x9f,0x1e,0xf8,0x6a,0xac,0x6d,0xa0,0xff,0x84,0x39,0xfb,0x4b,0xee,0x14,0x9b,0x69,0xfe,0x41,0x90,0x9a,0x2f,0x5b,0xc0,0xa4,0x9b,0xfe,0xcd,0x18,0xe7,0x96,0xd,0xf7,0x4e,0x7f,0xb7,0x23,0xf0,0x5e,0x37,0xc,0xd0,0xff,0xdc,0x9b,0x3f,0x65,0x5b,0xb6,0x3f,0x21,0xd9,0x4f,0x41,0x8,0x24,0xed,0xb6,0x95,0x56,0x65,0xde,0x25,0x55,0x53,0x3f,0xad,0x9c,0x26,0xe0,0x3f,0x14,0xf4,0x1e,0x26,0x75,0x3f,0x9d,0x86,0x9f,0xd2,0x49,0xaf,0xec,0xd1,0xfb,0x88,0x6d,0xc5,0x56,0xc2,0xfe,0x13,0x6f,0x3a,0xcc,0x66,0x9b,0xe7,0x40,0xee,0x18,0x0,0x5e,0xaf,0x15,0x24,0x3,0x8,0x24,0x8d,0xd3,0x70,0x13,0x4c,0xea,0xfb,0x1b,0xef,0x9d,0xf6,0x6a,0x7b,0xe3,0xdd,0xb4,0x77,0x6,0x6d,0x85,0x8d,0xf7,0x5c,0xf6,0xa,0x69,0x9a,0x3d,0x51,0x3b,0xc0,0x26,0xfd,0xb,0xa5,0x9,0x58,0xaa,0xa3,0x28,0xf7,0x6d,0x25,0xe0,0xa7,0x95,0x27,0x3e,0x94,0xcf,0xc0,0xd3,0x26,0xad,0x9b,0x3d,0xdb,0x6d,0xd9,0xf1,0x8c,0x6d,0xd9,0xfe,0xdc,0x96,0xd7,0x57,0x9f,0x11,0xfe,0xfc,0x88,0x73,0xe7,0x9e,0xec,0xb6,0xec,0xd8,0x28,0xeb,0x8e,0xf1,0xbe,0xf5,0xf1,0x2f,0x88,0xa0,0xcf,0x48,0xb4,0xd6,0x6d,0x99,0x66,0xb3,0x2d,0xf3,0xfb,0x4f,0x9c,0x7b,0x5c,0x7b,0xe3,0xbd,0x6e,0x7a,0x0,0x0,0xe8,0x77,0xce,0xcf,0x9e,0xb3,0x6e,0xe6,0x78,0x20,0x5a,0xfa,0xaf,0x3f,0x8,0x86,0x81,0x7c,0x61,0xfd,0x91,0x41,0x64,0xa0,0x5a,0x38,0x2b,0x4c,0xba,0xf1,0x3b,0x4,0x7a,0x66,0x5b,0x76,0x2c,0xf4,0xf8,0xbb,0xd5,0xb0,0x54,0xd0,0x4f,0x5,0x6a,0x26,0x8d,0x79,0x8d,0x4e,0xd3,0xbf,0xbd,0xb4,0x68,0xda,0x5d,0xed,0x55,0x3,0xa7,0xf6,0x24,0x92,0x83,0x8f,0xf,0x1c,0x9b,0x2,0x34,0x9c,0x40,0x8f,0x78,0xcb,0x4c,0x3d,0x41,0xd0,0x45,0xf9,0xe0,0xcb,0x2d,0xbe,0xd5,0x92,0x14,0x24,0xa2,0xb7,0x6c,0x76,0x82,0xac,0x7b,0x16,0x29,0x27,0x50,0x21,0x1,0x85,0xba,0xba,0x5c,0x37,0xe2,0xdb,0xbb,0x72,0x36,0xb0,0xbd,0x61,0xdd,0x13,0xf7,0x3f,0xf2,0xec,0x96,0x77,0xd6,0x2f,0xfe,0x5d,0x7b,0xd4,0xa0,0x6e,0x86,0x0,0xaf,0x34,0xce,0x12,0x0,0xef,0x7b,0xf7,0x86,0xf9,0x21,0x60,0x37,0xb9,0x8c,0xf1,0x94,0xc3,0x80,0x71,0x69,0x40,0xd2,0x90,0x6c,0x0,0xd4,0x0,0x18,0x79,0x17,0x8,0x18,0x45,0xa4,0xe1,0x31,0x81,0x31,0xfe,0x7b,0x3,0x40,0xfb,0x65,0x33,0xbb,0xbe,0xde,0x6f,0xc2,0x9c,0xaf,0xb4,0x7,0xca,0xeb,0xa6,0x7,0xe8,0x3f,0x71,0xee,0x4,0x4f,0x38,0x52,0x3f,0xf8,0xb6,0x9e,0xd0,0xe8,0xba,0xfb,0x5c,0x44,0xae,0xfd,0xe7,0xee,0x1,0xbf,0x67,0x80,0x7f,0x11,0xa1,0x77,0x45,0xdf,0x93,0xa1,0x74,0x82,0x1e,0x61,0x4f,0xca,0xe,0xea,0x35,0xe8,0x2c,0xe7,0x9d,0xf5,0x8b,0x97,0x26,0x89,0xf7,0xba,0x30,0x4,0xf5,0x9f,0x78,0xd3,0x2c,0x9b,0xdd,0x75,0x36,0xa0,0x3e,0xde,0x18,0x69,0x24,0x28,0x6c,0x0,0xde,0x1d,0x81,0x31,0xf7,0x6d,0x6,0x6f,0x14,0xf4,0x70,0x21,0xb0,0x1b,0xc8,0xee,0x49,0x17,0xb2,0xd3,0x19,0xe0,0xf0,0x73,0x66,0x3d,0xad,0x6c,0xcb,0x48,0x0,0xdd,0xbd,0x39,0x1e,0xdf,0x74,0x53,0xef,0xc3,0x7f,0x87,0x40,0xce,0xe4,0xd,0x1a,0x67,0xb5,0x71,0xd2,0xd7,0x27,0x9d,0x43,0x62,0xc,0x70,0xc4,0xb9,0x73,0x7f,0x24,0x61,0x1b,0x8d,0xf3,0xd3,0xd,0x77,0x4f,0x7d,0xbf,0x5c,0xfc,0x81,0x93,0xee,0xd8,0x23,0xdb,0xb2,0xe3,0x31,0xd9,0xec,0x9,0x5e,0x3f,0x97,0x13,0x80,0xbb,0x88,0xef,0x83,0x6f,0xc0,0x24,0xe9,0xbc,0x63,0x9c,0xf4,0xe2,0x75,0x3f,0xbf,0x38,0x71,0xb,0x61,0x22,0x98,0x3e,0xe2,0xbc,0x5b,0x47,0xd8,0xcc,0xce,0x7,0x25,0x75,0xa3,0x71,0xd6,0x80,0xe6,0x75,0xd2,0xfc,0x99,0xc6,0x99,0xb7,0xe1,0xee,0xa9,0x7f,0x2e,0x8e,0xdf,0xff,0xdc,0x5b,0xe,0x95,0xdb,0x72,0x87,0x6c,0x76,0x14,0xe9,0xab,0xc2,0x5e,0x4d,0xe1,0x49,0xc7,0x51,0xc5,0x8c,0x33,0xb9,0x87,0xe7,0x85,0x54,0xe2,0x9b,0x62,0x3,0x6f,0xb9,0xb4,0x63,0xb5,0xb4,0x88,0xf0,0xa8,0xef,0x2a,0x29,0x6f,0xeb,0x6f,0x72,0xbe,0x67,0x0,0x41,0xe7,0x91,0x74,0xd3,0x9e,0xe3,0xd7,0x2e,0x98,0xb2,0xb3,0x1a,0xfa,0x94,0x82,0x9a,0x19,0xe0,0x88,0xf3,0xe7,0xf5,0x50,0x76,0xc7,0xc3,0xb2,0xee,0x71,0x80,0x42,0x5a,0x85,0xd9,0x42,0x63,0xd6,0x80,0xce,0x4a,0x1a,0xe7,0x77,0x26,0x95,0x7e,0x74,0xdd,0x82,0x29,0x1f,0x1c,0x71,0xfe,0x6d,0x43,0x6c,0x66,0xd7,0x4d,0x90,0x7b,0x54,0xa8,0x18,0xc2,0x6e,0x3e,0xe0,0x27,0xa,0xca,0xd9,0x1c,0x9,0x3a,0xaf,0x9a,0x54,0xc3,0xbf,0x6f,0xb8,0xfb,0xd2,0x85,0xed,0x91,0x55,0xcd,0x43,0x80,0xdc,0xe6,0x1f,0xcb,0xba,0xbe,0xf1,0xc6,0x84,0xed,0xf0,0x7b,0xc9,0xba,0xa3,0x0,0x77,0x94,0xac,0x73,0x86,0xac,0x3b,0xae,0xff,0xc4,0xb9,0x7f,0x57,0xb6,0x79,0x38,0x64,0x8f,0xf2,0x6c,0xf4,0xb9,0x7e,0xdf,0x17,0xf8,0xca,0xb5,0xe0,0xb6,0x98,0xf5,0x2b,0x69,0x95,0xc5,0x3e,0x9f,0xe1,0xfb,0x72,0x71,0xdb,0x52,0xd6,0xf0,0x77,0x71,0xe5,0x2c,0xec,0x11,0x3c,0xe9,0x97,0xb9,0xf9,0x26,0x1a,0xe7,0xa9,0xc6,0x6e,0x3d,0xef,0xa9,0x95,0x4e,0x71,0x50,0x53,0xab,0x1b,0x70,0xfe,0x6d,0x5f,0xb0,0x99,0x9d,0xbf,0x90,0x37,0x8b,0x9f,0xa3,0x62,0x48,0x82,0x97,0x82,0x3c,0xa,0x3c,0xee,0x68,0x25,0x85,0xad,0xfd,0x5d,0xad,0x3f,0x4,0x9e,0x25,0x90,0x34,0x4e,0xea,0x45,0x3a,0xd,0xd7,0xad,0xbf,0xeb,0xe2,0xe7,0xda,0x2b,0xaf,0xaa,0x7b,0x80,0x81,0x93,0xee,0x38,0xd8,0xcd,0xec,0xfc,0xbe,0x2,0xa3,0x95,0xef,0x58,0xc5,0x90,0xff,0x4e,0xce,0x98,0x27,0x8,0x26,0x4f,0x64,0x8f,0xf8,0x7e,0xb7,0x5f,0xcd,0x5c,0x5d,0x12,0xf3,0x7b,0xd5,0xb0,0x5e,0xa9,0x6f,0x8a,0x1c,0xc7,0x2b,0xae,0x47,0xe1,0x77,0xde,0x9d,0x71,0xee,0x69,0x4f,0xe2,0x3,0x55,0x5a,0x2,0x7,0x4c,0x9a,0xd7,0x60,0x6d,0xf6,0x5a,0x59,0xfb,0x69,0x7f,0xf2,0xc6,0x9b,0x5d,0x2f,0x12,0xdf,0x73,0xcf,0x45,0xe3,0xbb,0x37,0xe7,0x91,0x73,0xac,0xa9,0x1c,0x2a,0xfc,0x46,0x2a,0xe8,0x9f,0x15,0xfc,0x13,0x50,0xe0,0x3e,0x20,0x95,0x49,0xa8,0xd4,0xc4,0x12,0x8b,0x7e,0x2b,0xad,0x7,0x8b,0x5f,0x30,0x5e,0x8e,0x4c,0x10,0x2a,0x66,0x80,0x81,0x17,0xce,0x77,0x20,0x3b,0xda,0x66,0x5b,0xae,0xcd,0x9b,0xc1,0xc3,0x53,0x76,0x9d,0x7b,0x29,0x34,0x43,0xe7,0xdf,0xfb,0x73,0xed,0x1e,0x81,0x25,0xd0,0x37,0x34,0xe4,0xae,0xe0,0x1d,0xa3,0x6d,0x73,0xf2,0xd3,0xca,0xdd,0xb7,0xff,0xe5,0x33,0xa9,0xdc,0x2f,0xc,0x98,0x74,0xc7,0xf1,0xed,0xc9,0x0,0x15,0xb7,0xbf,0x41,0x17,0xce,0xef,0x93,0x6d,0xd9,0xf9,0x0,0xac,0x3b,0xd2,0xeb,0xc0,0xe3,0x54,0xb7,0x4a,0x8a,0x50,0x4a,0x65,0x2,0x4a,0xb,0x5c,0x39,0xc8,0x77,0xa2,0xa,0xd4,0xa7,0x82,0xb4,0x3e,0x0,0xf9,0x3e,0x80,0x6d,0x0,0x76,0x92,0xdc,0x5,0xd2,0x42,0x8,0xe4,0x91,0x14,0x80,0x26,0x9,0xdd,0x20,0xbb,0xf,0xa0,0x5e,0x90,0x6f,0x2a,0x67,0x4c,0x1e,0x35,0x6b,0x2e,0x11,0xf5,0x93,0xe7,0x13,0x0,0xc2,0x42,0x32,0x34,0xce,0x93,0x26,0xd5,0x78,0xd9,0xba,0x85,0x17,0xbd,0x5a,0x5b,0x5e,0xa5,0x4b,0xd0,0x26,0x18,0x7c,0xc5,0x33,0xcc,0x7e,0xf8,0xea,0x19,0x36,0xb3,0xf3,0x21,0x0,0x16,0x81,0x12,0x1f,0xae,0x8a,0xe2,0x13,0x2d,0x18,0xf2,0x22,0x4,0xe7,0x3c,0xef,0x7,0xe6,0xaf,0xfc,0x87,0xad,0xc8,0xee,0x8b,0x1d,0xa,0xd6,0x8a,0x84,0xe6,0x66,0xfd,0x98,0x2d,0x34,0xce,0x3f,0x24,0xbc,0x4d,0x9a,0x4d,0x30,0x66,0x1d,0xc0,0x97,0x48,0xfe,0x15,0xe0,0x3b,0x20,0xdf,0x23,0xd4,0xec,0x5a,0x65,0xd2,0xe9,0x86,0x46,0xeb,0x66,0xba,0x1,0xd8,0xd7,0x5a,0xdb,0x7,0xd2,0x0,0xc9,0x8e,0x24,0x74,0xb0,0xa4,0x8f,0x1,0x3a,0x0,0xb2,0xfb,0x86,0xab,0xc2,0x90,0xcf,0x7a,0x1,0x33,0xa8,0x75,0x7d,0xa,0xe4,0xfd,0x8,0x33,0x40,0x41,0x13,0xa,0x3b,0xc6,0x7a,0x35,0xb2,0x74,0x1a,0xe6,0x34,0xef,0xdc,0x7e,0xd5,0x5f,0x1e,0xb8,0x3a,0xf1,0x15,0x48,0x15,0x9,0x81,0xee,0x96,0xbf,0xd,0x92,0xdb,0xf2,0x7d,0x80,0xa0,0x6f,0xb0,0xf7,0xb0,0x9f,0x9b,0xb7,0x40,0xde,0x23,0xab,0x88,0x82,0xb9,0xa7,0xd0,0xff,0x1c,0xc5,0x43,0x2c,0xc3,0xa8,0xc6,0xdb,0x2a,0x2c,0xb0,0x93,0x4,0x62,0x86,0xfc,0x29,0x78,0x80,0x7c,0xf,0x30,0x9b,0x4,0xb3,0x96,0x4e,0x6a,0x71,0x3a,0xd5,0xf0,0xe0,0xea,0x3b,0x27,0x95,0x33,0xa0,0xb4,0x0,0xd8,0xa,0xe0,0x2d,0x0,0x1b,0x1,0x3c,0x15,0xbc,0x18,0x30,0xe9,0xce,0x7e,0xb2,0x99,0x89,0x80,0x8e,0x83,0xec,0xa1,0x92,0x3d,0x8,0x42,0x63,0xa0,0xc1,0x7a,0x79,0x2a,0x50,0x79,0x42,0x66,0xcc,0xbc,0xab,0x40,0x58,0xd,0xca,0xd7,0x3b,0xa8,0x17,0xfc,0x70,0xbf,0x4a,0xfe,0xa,0x88,0xc0,0x30,0x26,0xc1,0x48,0xee,0x99,0x4d,0xdd,0xf7,0x5a,0xe,0xe0,0xf6,0xa4,0x19,0xa0,0xa2,0x1e,0x60,0xe0,0x5,0x77,0x9e,0xea,0x66,0x76,0x3e,0x26,0xc9,0x84,0xb1,0xdf,0x91,0x10,0xb2,0x15,0xcb,0xd7,0x32,0x7c,0xe,0xe0,0xfb,0x24,0xdf,0xa2,0x49,0xdd,0x6c,0x1c,0x67,0xf6,0xda,0x5,0x53,0xda,0xbc,0x48,0xa4,0xad,0x30,0x60,0xd2,0xbc,0x43,0x21,0xf7,0xbb,0x92,0x1d,0x29,0xeb,0x7e,0x2,0x52,0x93,0xbf,0x4c,0x2d,0xd4,0x10,0x12,0xad,0x6b,0xde,0xa7,0x91,0xce,0x12,0xa6,0xf6,0x38,0x75,0xfd,0xc2,0xb,0x9a,0x93,0xcc,0xa3,0x32,0x6,0x98,0x7c,0x57,0xa3,0xcd,0x36,0x9f,0x23,0xb7,0xe5,0x4e,0x40,0x4e,0xe0,0x80,0xd9,0x51,0xf6,0xfb,0x80,0xf8,0x61,0x84,0x4b,0xd8,0x49,0x60,0x87,0x49,0x37,0x7e,0x7b,0xdd,0xc2,0x8b,0x6e,0x6c,0xf7,0x42,0x0,0x18,0x30,0xf9,0xee,0x94,0x32,0xdb,0xe7,0xca,0xba,0xa7,0x1,0xda,0x3f,0xb7,0x78,0x25,0xef,0x26,0x98,0x38,0x42,0x24,0xb9,0x34,0xa9,0x7b,0x36,0xdc,0x3d,0xf5,0x82,0x24,0xd3,0xad,0x5c,0x8,0x9c,0xbc,0x70,0xf,0xeb,0x66,0x2f,0xb3,0xd9,0xe6,0x19,0xf0,0xc7,0x5b,0x4f,0x14,0xc8,0x69,0x57,0x25,0xd2,0x2c,0x67,0x15,0xb,0xc7,0x29,0xf2,0xe5,0xf7,0xa7,0x46,0xe1,0x59,0x19,0xe1,0x79,0xd2,0x3a,0x5b,0x61,0x9c,0xdb,0x68,0x52,0x5f,0x5f,0xbf,0x70,0x72,0x87,0xb9,0x52,0x7,0x30,0x70,0xf2,0xcf,0xbb,0xb9,0x2d,0xdb,0x97,0x41,0xb6,0x2f,0xc0,0x3d,0x2,0xe7,0x64,0x32,0xf0,0x48,0xe,0x44,0xa4,0x52,0xe,0xe6,0xc5,0x78,0x88,0x14,0x72,0x25,0x89,0xa0,0x59,0xed,0xa4,0x1a,0x3f,0xb7,0x6e,0xe1,0x94,0xb7,0xc2,0x2f,0x47,0x5e,0xb3,0x94,0x3b,0xdf,0x7b,0xc5,0xd0,0x69,0xa0,0xcd,0x6c,0x27,0x4d,0x9a,0x0,0xdd,0x75,0xb,0x2e,0x70,0xcb,0xd5,0xa1,0x2a,0x2e,0x1d,0x34,0xf9,0xe7,0x7b,0x58,0xb7,0xe5,0xdb,0x36,0xdb,0xf2,0x75,0x2,0x26,0x34,0xf0,0x33,0x69,0x57,0xae,0x70,0x97,0xf,0x8f,0xf8,0x2,0x0,0x63,0xcc,0x66,0xa6,0x1a,0xc7,0xae,0x5b,0x30,0x39,0x51,0x7,0x89,0x6a,0x60,0xc0,0xa4,0x79,0xd7,0xd9,0x6c,0xf3,0x37,0x0,0xed,0xcb,0xb0,0x47,0x50,0x72,0x26,0xab,0x80,0xe9,0x41,0x93,0x7a,0x7e,0xc3,0xdd,0x53,0x8f,0x1f,0x34,0xe5,0xee,0x46,0x9b,0x6d,0xa6,0x71,0x1a,0x9a,0x24,0xb7,0x2f,0xa4,0x8f,0x9,0xea,0x49,0xa0,0x87,0xa4,0x3,0x69,0x9c,0x17,0x20,0xf7,0xf9,0x75,0xb,0x2f,0xca,0x94,0x4a,0xbc,0xea,0xc2,0xd,0xbc,0x70,0x61,0x83,0x6c,0xf6,0xdf,0xe5,0xb6,0x7c,0x13,0x64,0xb0,0x20,0x23,0xbf,0xd8,0x22,0x49,0x8,0x98,0x4a,0x82,0xa4,0xac,0x71,0x52,0xcf,0x3b,0xd,0xdd,0xce,0x5e,0x33,0xef,0xbc,0xf,0x92,0xcf,0xac,0x5a,0x7c,0x2c,0x18,0x63,0xb3,0xbb,0xe6,0xc9,0xda,0x83,0x3d,0x43,0x17,0x3,0x49,0xbe,0xf6,0x6,0x91,0x5f,0xdc,0x2,0x1,0xbb,0x48,0xf3,0x1a,0xa4,0xde,0x80,0x7a,0x2,0x28,0xd2,0x81,0x82,0x7b,0xae,0x34,0xa9,0xc6,0xeb,0xd6,0x2d,0x9c,0xfc,0x54,0xa9,0xa4,0xab,0xf6,0x9,0x5c,0xb7,0xe0,0x82,0x16,0xa7,0xb1,0xfb,0x7f,0x99,0x54,0xe3,0x75,0x4,0xb2,0x8,0x69,0x33,0x89,0x9b,0x45,0x7c,0x24,0x90,0xcc,0x1a,0x27,0xfd,0xf0,0xfa,0xbb,0x2e,0x19,0x53,0x4f,0xc4,0xf7,0xf0,0x71,0xe1,0xd3,0x26,0xd5,0x78,0xa,0xe9,0x6c,0x40,0x41,0xd9,0x6b,0x77,0x6d,0x43,0xe1,0x6f,0x23,0x64,0xf,0x3,0xb4,0x17,0x8a,0xde,0x15,0xde,0x6b,0x88,0xa0,0x7f,0x29,0x57,0xee,0x9a,0x9c,0x42,0xd7,0xdc,0x3e,0x3e,0xeb,0x34,0x74,0x9f,0x69,0x52,0x4d,0x53,0x4,0xbe,0xdf,0x76,0x8b,0x60,0x18,0x4a,0x85,0x31,0xc7,0xd6,0x5e,0xbf,0x9f,0x7a,0x72,0xfd,0x5d,0x17,0x9f,0x95,0x18,0xd5,0x12,0x86,0x75,0xb,0x26,0xff,0xc9,0x34,0x34,0x9d,0x49,0xe3,0x2c,0xf7,0x2d,0x8e,0xfe,0xf0,0x15,0x26,0x63,0x31,0x59,0x4b,0x85,0x79,0xcf,0x7e,0x7,0x2b,0xd2,0xc8,0xf3,0x31,0xd,0x2e,0x8a,0x34,0xc1,0xd4,0x51,0x51,0x47,0x6c,0xc,0x81,0x4f,0x7e,0xea,0xc2,0x87,0x4a,0xf6,0x3e,0x35,0x7b,0x5,0xaf,0xbe,0xfd,0x9c,0x2c,0x53,0xd,0xf7,0x93,0xdc,0x51,0x64,0xa,0x29,0x1,0x51,0xcc,0x50,0x18,0x26,0xbf,0x1f,0x83,0xe7,0x2b,0x0,0xe3,0xa4,0x9f,0x6c,0x49,0xf7,0x3a,0xbd,0xdd,0xa8,0x97,0x10,0xac,0x9b,0x7f,0xc1,0x2b,0x26,0xd5,0x38,0x85,0xc6,0x59,0x82,0xfc,0xec,0x28,0xa2,0x99,0x1c,0x65,0xc2,0xf2,0xcf,0xcc,0xdb,0xa9,0xc3,0xef,0x99,0x7f,0x95,0x8b,0x27,0x4f,0x39,0x12,0xac,0xcd,0x9e,0xd7,0x9d,0x1f,0x4e,0x2c,0x55,0xde,0x44,0xdc,0xc2,0x6d,0x36,0xd3,0xf,0x40,0xda,0xa3,0x17,0x13,0x71,0xe7,0x26,0xd,0x5,0x58,0x6f,0x4a,0x3c,0xfd,0xa8,0x93,0x6e,0x1a,0xff,0xf2,0xbc,0xd3,0x77,0x8b,0xcd,0x98,0xd6,0xce,0xbf,0x60,0x23,0x4c,0x6a,0x16,0xe9,0xbc,0xec,0x4d,0x31,0x18,0xc9,0x53,0x97,0x6a,0xc6,0x4b,0x1b,0x2e,0x6,0xb3,0x6d,0x90,0xfa,0xca,0xaa,0x7f,0xfb,0x33,0x80,0x9b,0x99,0x1,0x70,0xdf,0x9a,0x13,0x2a,0x4,0x1,0x34,0x34,0xce,0x5a,0x9a,0xf4,0xd,0x6b,0xe6,0x9d,0xf7,0x61,0x7b,0x11,0xac,0x3d,0x60,0xfd,0xc2,0xc9,0xf7,0xc0,0xa4,0x6e,0x7,0xb9,0xcd,0xb7,0x57,0x75,0x98,0xd1,0x2c,0xbc,0x48,0x56,0x50,0x8f,0x52,0x71,0x6b,0x66,0x80,0x23,0xa7,0xdc,0xb5,0x17,0x60,0x87,0x92,0x48,0xe5,0xf5,0xde,0x44,0xc4,0x1e,0x92,0xdc,0x42,0x93,0x5a,0xb0,0x76,0xfe,0xa4,0xc7,0x3a,0xa,0x79,0x49,0x82,0x31,0xce,0x2c,0x9a,0xd4,0xbd,0xbe,0x8d,0x3a,0x98,0x25,0x69,0xf7,0x19,0xc5,0x80,0xf8,0xbe,0xf6,0x7c,0xe4,0xc0,0xc9,0xb,0x87,0xc4,0x96,0xb1,0x96,0xa,0x1e,0x7d,0xed,0xef,0x8,0x72,0x38,0x80,0xb4,0x97,0xa1,0xd7,0xcd,0xd5,0xd2,0x83,0xf9,0x5,0xf7,0x2a,0xe0,0xa4,0x1e,0x0,0x4d,0xe2,0xf6,0xef,0x8e,0x82,0xb5,0xf3,0x27,0x6d,0x31,0x4e,0xfa,0x36,0x18,0x67,0x29,0xfc,0x3e,0xd9,0x9f,0xe9,0xab,0xc,0x27,0x11,0xf7,0x88,0x9,0xf7,0x47,0x1,0xff,0x3f,0x1,0x6b,0x4f,0x80,0x74,0x76,0x5c,0x19,0x6b,0x62,0x80,0x6d,0xff,0xd8,0x48,0xeb,0x66,0xcf,0x25,0x4d,0xca,0x2f,0x51,0xcd,0xeb,0x79,0x7c,0x75,0x9f,0xa0,0x79,0x15,0x30,0xf7,0xaf,0x9b,0x3f,0xa9,0xa2,0xdd,0xbf,0xea,0xd,0xd6,0xde,0x79,0xfe,0xb,0x34,0xa9,0xc5,0x0,0x0,0x1a,0x11,0xac,0x58,0x31,0x64,0xc4,0x3d,0x63,0xc2,0x8b,0xf0,0x28,0x92,0xd,0x24,0xfa,0xc6,0x95,0xaf,0x26,0x6,0x58,0x7f,0xd7,0xc5,0x56,0x6e,0x76,0x2c,0xa0,0x34,0x69,0xc2,0x5b,0xaf,0x54,0x7e,0x91,0x81,0xe4,0xef,0xf5,0x22,0xc6,0x59,0x44,0x63,0x1e,0xef,0x6c,0x2,0x26,0x1,0xa4,0x59,0x4c,0x93,0x7a,0x12,0xfe,0x7e,0x46,0x28,0x35,0xc,0xb0,0xb6,0x6,0x54,0x98,0x16,0x82,0x6e,0xb5,0xf1,0xd3,0xe3,0xe7,0x46,0xd2,0xba,0x26,0x6,0x18,0x74,0xd1,0x3d,0x7d,0x41,0xf4,0xf6,0xc4,0x76,0x28,0xa7,0xf2,0x56,0x39,0xec,0xfb,0x92,0x3f,0x49,0xf3,0x16,0x8d,0xf3,0xd4,0xda,0x3b,0xcf,0xdf,0xde,0xd9,0xc4,0x4b,0x2,0xd6,0xde,0x79,0xfe,0x5a,0x3a,0xa9,0xf9,0x5e,0x25,0x73,0xe,0x1f,0x25,0xc4,0x9f,0xda,0x2f,0xcf,0xaf,0xc4,0x50,0x9e,0xf5,0xb4,0x67,0x63,0xb7,0x1e,0x7,0x46,0x95,0xad,0x6a,0x6,0x18,0x7c,0xc9,0xfd,0x29,0x59,0x3b,0xa,0xa0,0x4d,0xa2,0xe4,0x81,0x1,0x3,0x20,0x68,0x9c,0xf9,0x34,0xce,0x8a,0xce,0x26,0x5c,0xa2,0x40,0xf3,0x57,0xd2,0xbc,0x8b,0x76,0x76,0x9f,0xb,0x5c,0xe2,0xfc,0x1d,0x67,0xe0,0x73,0xc3,0xc1,0x10,0x3e,0x1d,0x55,0xac,0xaa,0x19,0x60,0xf5,0x6d,0x67,0x67,0x9,0x7d,0x26,0x34,0xd3,0x55,0x93,0x9a,0xc3,0xdc,0x46,0x4e,0x0,0x4d,0x6a,0xd9,0x9a,0x3b,0x26,0xee,0xd6,0x63,0x7f,0x31,0x18,0x63,0xd6,0x9b,0x54,0xc3,0x6c,0xff,0x51,0x91,0x5b,0x91,0xd7,0x0,0x85,0x3e,0x9,0x9e,0x22,0xe8,0xd,0xa5,0xe6,0x15,0x3a,0xa9,0xfb,0x49,0xf3,0x46,0xd4,0x77,0x6d,0xf6,0x8,0x1a,0x74,0xd1,0xdd,0x4d,0xa4,0xb3,0xbf,0xac,0xed,0x2b,0xe8,0x40,0x2,0x7b,0x43,0xee,0x98,0xdc,0x86,0x8d,0xc9,0xa8,0xb9,0x24,0xb9,0x9,0xe0,0xa6,0x24,0x91,0x53,0xf,0xb0,0xfa,0xf6,0x9,0x9b,0x7,0x7f,0x71,0xd1,0x43,0x0,0xfe,0x3,0x0,0x61,0x12,0x30,0xc1,0x84,0x26,0x80,0x48,0x12,0xb2,0xca,0xeb,0x1,0x7c,0x97,0xc6,0x79,0x96,0x74,0x16,0x64,0x65,0x16,0x6f,0xb8,0x73,0x42,0x36,0x2a,0x89,0x58,0x6,0x18,0x74,0xd1,0xbd,0x3d,0x21,0x1d,0xe,0xe8,0x40,0x90,0x7b,0x41,0xea,0x25,0x65,0x8f,0x90,0x75,0x8f,0x83,0xf4,0xe9,0x60,0xe1,0x7a,0x68,0x51,0x67,0xad,0x1e,0x31,0x9e,0x3b,0x21,0x53,0x33,0x4,0xac,0x69,0x2f,0x42,0x74,0x26,0x8,0xb0,0xa0,0x79,0x1f,0xd2,0x3e,0x9,0x35,0x97,0xc0,0x21,0xc7,0x73,0x8e,0x1,0x29,0x70,0x33,0xc9,0x55,0x34,0xa9,0x87,0x8c,0x93,0x9a,0xbf,0xfa,0xf6,0xf1,0x9b,0x4b,0x25,0x11,0xc9,0x0,0x83,0xbf,0xb8,0x68,0x7f,0x2b,0xf7,0x7c,0x59,0x77,0x3a,0x64,0xf,0x2f,0xcc,0x33,0xa7,0xb0,0x7b,0x4e,0xa,0xf0,0xf9,0xad,0xb6,0x1e,0x20,0x67,0x2c,0x37,0x8e,0xf3,0xfc,0x9a,0x3b,0x26,0x6e,0x4b,0x8,0xe7,0x75,0x5,0x92,0xb6,0x3,0xf8,0x33,0x80,0x91,0x40,0xa2,0xdb,0xd7,0x51,0xe0,0x3f,0xe8,0x38,0xaf,0x11,0xe6,0x41,0x90,0x3f,0x5d,0x3b,0xef,0xdc,0x36,0x9,0xd0,0x31,0x3d,0x80,0xc6,0xcb,0x75,0xbf,0x5,0xe8,0x63,0x60,0xd8,0xf1,0xb3,0xc0,0x41,0x23,0x34,0x3f,0xd1,0x26,0xb7,0xed,0x92,0x15,0xc8,0xff,0x7c,0x74,0xd7,0x86,0x93,0x7c,0x1b,0x26,0xf5,0x88,0x6c,0x76,0x24,0x22,0x5d,0xca,0x83,0xa0,0x72,0x4b,0x90,0x82,0x77,0xca,0xe1,0x8d,0x4e,0xfa,0x47,0xae,0xab,0x19,0x1b,0x16,0x9c,0x57,0xd6,0xb,0x28,0xc,0x91,0x3,0x91,0x80,0x5e,0x0,0x1a,0xbc,0x42,0x7b,0x53,0x8f,0x79,0xe9,0xd2,0x14,0x49,0xb1,0x40,0xe9,0xe7,0x8a,0x6c,0x1,0xbb,0x4,0x54,0x54,0x81,0xdd,0x9,0xd6,0xdc,0x31,0xe1,0x7d,0x1a,0xe7,0x49,0x1f,0x47,0x11,0xb6,0x80,0x0,0x8a,0x9f,0x11,0xf3,0x2e,0xf7,0xed,0x7,0x80,0xb9,0xad,0x52,0xe2,0x3,0x31,0x3d,0x80,0x64,0xf,0x0,0xb0,0x97,0x37,0xbf,0xac,0xfc,0xc6,0x36,0xde,0x5b,0x54,0xd6,0x73,0xb5,0x69,0x95,0x6c,0xb0,0x2e,0xe7,0x1d,0x82,0x1d,0xee,0xdb,0xd7,0x91,0x40,0xf2,0x3d,0x1f,0xaf,0x3e,0x46,0x8b,0x5b,0x7d,0x2e,0x66,0x4c,0xa,0xa1,0xb5,0x29,0xc1,0xa2,0x8,0xc3,0xb4,0xe3,0x38,0x4d,0xd5,0x94,0x27,0x7a,0x8,0x10,0x7a,0xe6,0xed,0xcb,0xc5,0x63,0x55,0xa5,0x3d,0x74,0xb9,0xf8,0x61,0x2c,0xf0,0x75,0x10,0x89,0xbb,0x73,0xd7,0x15,0xd0,0x8,0x84,0x65,0x68,0x51,0x4d,0x8,0xf,0x6d,0x49,0x20,0x7f,0x97,0x1f,0x2d,0x53,0x81,0x3c,0x56,0x29,0x44,0x32,0x0,0x8d,0x69,0x90,0x6b,0xbd,0x1d,0x2c,0x3b,0x60,0x1a,0x33,0xe7,0xf2,0x47,0xf3,0x6,0xc0,0x8f,0x34,0x3,0x10,0x70,0x9,0xbe,0x2f,0x69,0xbf,0x4,0x51,0x9b,0xaa,0x56,0x9c,0x4c,0x68,0x9f,0xc0,0x72,0xe3,0x15,0x4b,0xbe,0xf3,0x1a,0x3,0x41,0xf2,0x4d,0x48,0x1f,0x69,0x6,0x10,0xe0,0xa,0xfc,0xb0,0xd0,0xc1,0x27,0x6a,0xfc,0x8f,0xc3,0x1d,0xc3,0x69,0xe5,0xce,0x2f,0xaa,0xd6,0x1b,0x37,0x46,0xb,0xc8,0xa9,0x7a,0x68,0xd5,0xfb,0xc7,0xa,0xf8,0x8c,0x7e,0x9f,0xb,0x63,0xc9,0xef,0xe5,0x2f,0xa2,0xfb,0xe8,0xea,0x0,0x7e,0x3d,0x73,0xf5,0x67,0xcc,0x6f,0x14,0xc4,0x31,0x41,0x58,0xbe,0xaa,0xe,0x71,0xd1,0x43,0x0,0x0,0x5,0xd4,0x8a,0xcc,0x3b,0x1c,0xa8,0x88,0xf7,0x25,0xca,0xcf,0xf0,0x4d,0x78,0x55,0x2c,0x1,0xe0,0x0,0xd0,0x54,0x25,0xcc,0xec,0x2e,0x40,0xd2,0x11,0xb0,0x77,0x69,0x7a,0x85,0x9,0x1c,0x77,0xf,0xd0,0x3f,0x5b,0x43,0x82,0x6b,0xad,0xad,0xca,0xb4,0x1c,0xad,0x5,0x0,0x2d,0x79,0xcb,0x5e,0x39,0x83,0x45,0x2d,0x4d,0xb6,0x90,0x91,0x8,0xf4,0x21,0xf9,0x91,0x67,0x0,0x92,0xfb,0xb4,0x6d,0xb9,0x0,0xdb,0x78,0xaf,0x6c,0xb5,0x64,0x88,0x1e,0x2,0xc8,0xf,0x19,0xd8,0xaa,0xb,0x8e,0xef,0x8,0xfa,0xe8,0xfc,0x26,0x56,0x5e,0x9c,0x10,0x8f,0x94,0xdd,0x46,0xa5,0x88,0x9f,0x7c,0x63,0xa6,0x9f,0xcf,0x81,0x0,0x1a,0x13,0xc1,0x74,0xdd,0x82,0xf2,0x7b,0xa9,0x28,0x68,0x5f,0xc5,0x50,0xac,0x71,0x17,0xf5,0x94,0x2c,0x5a,0x73,0xe,0x66,0x43,0x1b,0x74,0x55,0x4,0x91,0x42,0x20,0x61,0xde,0x20,0xb8,0x85,0xe1,0x15,0x27,0x40,0x91,0x5c,0x10,0xb2,0x7,0x15,0xcb,0x9,0xa5,0x64,0xc2,0xe2,0x97,0x21,0x9b,0xa2,0xa4,0x8f,0xeb,0x23,0xcf,0x0,0xec,0x5,0x20,0xd8,0x53,0x0,0x28,0x25,0xf4,0x15,0xc,0x97,0x21,0x9c,0x7,0x32,0x9a,0x2f,0x48,0x12,0xcc,0x0,0xa8,0xea,0xd0,0xa9,0x18,0x4b,0xa0,0xde,0x2,0xd9,0x82,0x60,0xc1,0x81,0xc7,0xb6,0x8,0x76,0x44,0x60,0x3b,0xfc,0xf9,0x5a,0x40,0x13,0xeb,0x68,0x3,0xeb,0xa4,0x61,0xf0,0xd4,0x5f,0xed,0x6b,0xad,0x7b,0x8a,0x8f,0x57,0x26,0x85,0x3b,0x49,0x7b,0x3,0xfa,0xe6,0xe0,0x8b,0x7f,0x51,0xb1,0x56,0x17,0xed,0x26,0xe4,0xa4,0x1e,0x4,0x9d,0x6f,0xd3,0x38,0xcf,0x6,0x3e,0x5a,0xde,0xaf,0xaf,0xaf,0x3,0x40,0xfe,0x8,0xc7,0x3c,0x37,0x16,0x34,0xee,0x98,0x6e,0x20,0x1c,0x3f,0xb0,0x68,0x41,0xa2,0x31,0x5,0x61,0x1f,0x45,0x20,0x4d,0x2f,0x40,0xa7,0xe5,0x10,0x17,0x65,0xd5,0xcd,0xbd,0x63,0x99,0x9e,0x34,0x7f,0x43,0x43,0xc8,0xba,0x97,0x3,0x7c,0x7a,0xf0,0x25,0xf7,0xfd,0xf7,0xe0,0xa9,0xf,0xec,0xdd,0xe6,0x32,0xc5,0xbd,0x18,0x3c,0xf5,0x57,0xdd,0x1,0xf6,0x85,0xec,0x41,0x20,0x7a,0x43,0x38,0x4,0xd0,0x27,0x25,0x7b,0x24,0x81,0x81,0xf0,0xe7,0xa,0x80,0xf0,0x36,0xaf,0x35,0x51,0xcf,0x3f,0xf,0x32,0xf5,0x75,0xe3,0xa4,0x6f,0x5c,0x75,0xf3,0xbf,0xb6,0xf9,0x4,0xae,0xdd,0x5,0x86,0x5c,0xfa,0xc0,0x30,0x9b,0x6d,0xf9,0xd,0x80,0xbd,0x93,0x30,0x2,0x85,0xf6,0xc7,0x9,0x6f,0xba,0xb9,0x85,0x34,0x2b,0x5,0x3e,0x44,0x63,0xee,0x5c,0x7d,0xeb,0x59,0x25,0xf,0x9f,0x6a,0x73,0x29,0x86,0x5d,0xfe,0x70,0xf,0x6b,0xdd,0x7d,0x65,0xed,0x1,0x34,0x66,0x7f,0x59,0xdb,0xb,0x72,0xaf,0x96,0x6c,0xff,0xd6,0x66,0xcd,0x1a,0x2a,0x44,0xbe,0xe9,0x38,0xd,0x13,0x56,0xdd,0x32,0xf6,0x85,0x24,0xd2,0xac,0x27,0x18,0x3c,0xf5,0x57,0x23,0xe5,0x66,0x5e,0xf4,0x77,0x15,0x49,0x62,0x15,0x7d,0xab,0xa3,0x66,0x82,0xd3,0xc7,0x4,0x6c,0x26,0xcd,0xb,0x34,0xce,0x42,0xc7,0x98,0xfb,0x56,0xde,0x3c,0x36,0x72,0x99,0x78,0x9b,0x3d,0x82,0x56,0xce,0x3d,0x63,0x2b,0xbc,0x7d,0x74,0x5e,0xb,0x55,0x68,0x20,0x2d,0xfa,0x79,0x25,0x49,0x64,0xd3,0x2c,0x1,0xe8,0x63,0xa5,0x83,0x6a,0xc5,0x4c,0xbd,0xc1,0xd0,0xcb,0x16,0xef,0x67,0x6d,0x76,0x9c,0x3f,0xcc,0x55,0x61,0x62,0x8f,0xd4,0xc6,0xb,0xf4,0xe8,0xd0,0xbe,0x8c,0x22,0xb0,0x2f,0xa0,0x33,0x61,0xdd,0xc1,0x2e,0x30,0x74,0xf0,0xd4,0x7,0x17,0xac,0xbe,0x75,0xec,0xba,0xe2,0x4,0xaa,0x6e,0xb9,0xc3,0xa6,0x3f,0x96,0x32,0x34,0xbf,0xf7,0x48,0xef,0x2f,0x45,0xaa,0x68,0xf6,0x37,0x34,0xce,0xf9,0xaa,0x65,0xde,0xb1,0x44,0x9f,0x19,0x7a,0xd9,0x83,0xfb,0x77,0x14,0x71,0x3a,0x6,0x34,0x0,0xd6,0x9d,0xee,0xf,0x94,0x2c,0xa8,0x7b,0x9b,0xfc,0x44,0x59,0x6,0x87,0x41,0xfb,0xcb,0x9d,0x5b,0x24,0x6f,0x22,0x4f,0x9f,0x80,0xec,0x38,0x52,0x7d,0xa2,0x4a,0x55,0x35,0x3,0xac,0x9c,0xf3,0xf9,0xac,0x80,0x17,0xe0,0x9f,0xa3,0x5a,0x9d,0xdc,0x9f,0x2f,0xb7,0xa7,0x6d,0x4,0x9a,0x86,0xbd,0x40,0xc2,0x88,0xce,0x26,0x59,0x92,0x20,0xd9,0x43,0x1,0xec,0x7,0x50,0x85,0xcb,0x3b,0xc2,0x78,0xa8,0x1c,0x87,0x28,0xfe,0xb6,0x50,0xbb,0xa0,0xdf,0xad,0xbe,0x4a,0xe3,0x6c,0x8c,0x2a,0x57,0x4d,0x63,0xf7,0x1f,0x6e,0x19,0xfb,0x2a,0x8d,0x79,0x33,0x98,0x32,0x8e,0x76,0x74,0x8d,0x9a,0xf4,0x88,0xb3,0x6d,0x53,0x0,0x5,0xe9,0xe3,0xb2,0xf6,0xe4,0x21,0x97,0x2d,0xee,0xd9,0xb9,0x64,0x4b,0x6,0x6,0x5f,0xfa,0xe0,0x60,0x59,0x4d,0xf6,0x55,0xdd,0xdc,0x36,0x37,0x49,0x40,0xac,0xd7,0x40,0xce,0x96,0xf,0x10,0xdc,0xd2,0xd0,0xfd,0x63,0xaf,0x47,0xc5,0xab,0x89,0x1,0x6,0x5f,0x72,0x9f,0x1,0xcc,0x3,0x2,0x32,0x2,0x90,0x53,0xe5,0xa,0x2e,0x14,0x75,0x61,0xc5,0x5d,0x5f,0x41,0x78,0x9e,0x71,0xa1,0xf1,0xb2,0xf6,0xd4,0xc4,0xa9,0xd1,0x9,0x40,0xe0,0xc,0xc0,0x8e,0xf1,0x1c,0xab,0x0,0x76,0xc0,0x89,0x68,0x34,0x39,0x5f,0x3e,0x90,0x66,0x57,0xf1,0x9,0xa6,0x1,0xd4,0xc4,0x0,0xd,0x3d,0x7a,0xb,0x34,0xf7,0x4a,0xc8,0xfa,0x54,0x8c,0x98,0x19,0x2a,0x35,0x25,0x5c,0x1c,0xb7,0x60,0x37,0xb0,0x83,0x49,0x9d,0x3d,0xe4,0xd2,0x87,0x7a,0x77,0x36,0x1,0x6b,0x81,0x21,0x97,0x3e,0x74,0x2,0x64,0xc7,0xe6,0x25,0xff,0xf0,0xa,0xea,0xb6,0xe0,0xaa,0x54,0x58,0xdc,0xb7,0x61,0x13,0x2d,0x77,0xd1,0x98,0x57,0xe2,0xca,0x57,0x13,0x3,0x2c,0xfb,0xe9,0xb1,0xa2,0x71,0x56,0x80,0x39,0x37,0x2e,0x86,0x57,0xf8,0xb4,0x86,0x52,0x52,0x8e,0xf7,0x3e,0xef,0x2e,0x45,0x48,0x1a,0x7,0xe0,0x92,0x76,0xa0,0x4b,0x87,0xc0,0xb0,0x69,0x8f,0xf4,0x4,0xf4,0x45,0x49,0x47,0x7b,0x92,0xbf,0x9,0x26,0x4f,0x22,0xf0,0x11,0x87,0xab,0x52,0x61,0xb1,0xd,0xcb,0x77,0x15,0x20,0x40,0x2e,0x91,0x70,0x7f,0x5c,0x19,0x6b,0xd6,0xdf,0x57,0xcd,0x3d,0x7d,0xab,0x31,0xce,0x8b,0x20,0x4b,0xc,0x3,0x95,0x76,0x5f,0x26,0x30,0x3e,0x76,0x87,0xec,0x85,0x43,0x2e,0x7d,0x68,0x6c,0x47,0x10,0x2c,0x69,0x90,0xb5,0x57,0x49,0xf6,0xdc,0xd0,0xce,0x1d,0x55,0xe2,0x4,0x95,0xc6,0xb,0xe5,0x65,0x56,0xff,0xe1,0x96,0x33,0x63,0xd7,0x59,0x24,0x62,0xc0,0x31,0x4e,0xea,0x1a,0x0,0x9b,0xdb,0xd2,0xc9,0xc7,0x89,0x7f,0x45,0xcf,0x7e,0x55,0x68,0x25,0xdb,0x1f,0xd0,0x15,0xc3,0xa7,0x3f,0xba,0x17,0x76,0x23,0x18,0x7a,0xf9,0xc3,0x17,0xc9,0xba,0x97,0x90,0xec,0xe6,0x1f,0x22,0xdb,0xca,0x15,0x24,0xa,0x3f,0xa5,0xde,0xb0,0x8d,0xf1,0x82,0x85,0x96,0xfe,0x53,0xc9,0x35,0x16,0xc9,0x30,0x80,0x49,0xfd,0x15,0x60,0x16,0x2c,0xa7,0xb4,0xb4,0x56,0x78,0xe2,0x9e,0x7d,0x7f,0x44,0x43,0x1a,0x40,0xfa,0xbc,0xeb,0x66,0xef,0x4e,0x88,0x36,0xed,0xe,0xc3,0xa6,0x3d,0x72,0x34,0x64,0xaf,0x4,0xd1,0x97,0x9e,0xda,0xc7,0xb0,0x7a,0x86,0x12,0xf8,0x29,0x3b,0x61,0x56,0x3e,0x9e,0x48,0xe3,0xef,0x4b,0x65,0x5e,0x26,0xcd,0xba,0x52,0x65,0xad,0x99,0x1,0x86,0x5f,0xf1,0x44,0xca,0x75,0x33,0x17,0x93,0xdc,0xb3,0x60,0x82,0xa3,0xc6,0x8b,0x86,0x14,0x4,0x1a,0x7a,0x9b,0x2b,0xc9,0x9e,0x36,0xf4,0xf2,0xc5,0x8b,0x3b,0x9b,0xb8,0xe5,0x60,0xd8,0xb4,0x47,0x87,0x59,0xd7,0x9d,0x2b,0xd9,0x91,0xb9,0x63,0x71,0x88,0xa,0x8d,0x64,0x85,0x97,0x2,0xa5,0x2e,0x3e,0x9d,0x70,0x78,0x4e,0x93,0x22,0x9d,0x7b,0xff,0x70,0xf3,0xbf,0xfe,0xb2,0x54,0x79,0x6b,0x62,0x80,0x61,0x57,0x3c,0x9e,0x92,0xcd,0x5c,0x27,0xeb,0xde,0x0,0xa0,0x67,0xc1,0x92,0xe4,0x4,0x2e,0x7f,0xdf,0x3b,0xfa,0x27,0x8c,0xc1,0xba,0xf6,0xb3,0x43,0x2e,0x5b,0x7c,0x7f,0x65,0xa5,0xec,0x38,0x18,0x7a,0xf9,0xa3,0x43,0x25,0xf7,0x2e,0x40,0x47,0xfa,0x36,0xd,0x86,0x7e,0x6b,0xc1,0x3,0xbd,0x65,0xfe,0x8,0x7e,0xc3,0x57,0xee,0x14,0x94,0xf0,0x5,0xc0,0xa5,0xe1,0xdf,0xca,0x95,0xb9,0x6a,0x6,0x18,0x7a,0xf9,0xa3,0xd,0x72,0x33,0xdf,0xb3,0xae,0xfb,0xdf,0x0,0xd3,0x5e,0x68,0xb4,0x64,0x5f,0x9d,0x2a,0xd3,0x3a,0xdc,0x18,0xa6,0x21,0x9d,0x39,0xe4,0xd2,0x87,0x7e,0x3b,0xf4,0xf2,0x47,0x92,0xde,0x95,0xac,0x26,0x18,0x36,0xed,0xb1,0x93,0xad,0xcd,0x3c,0x28,0xab,0xc3,0xa,0xd7,0x52,0x94,0xd2,0x7a,0xe2,0x70,0x81,0xd6,0x71,0xf3,0x9a,0xdd,0x2e,0x92,0x1b,0x40,0xf3,0xa6,0x84,0x5d,0xa,0xb6,0x53,0x4,0x43,0x62,0x86,0x27,0xfc,0x9,0x6c,0x75,0x68,0x67,0x31,0x54,0xc5,0x0,0xc3,0xaf,0x78,0xbc,0x1b,0xa0,0x1f,0x59,0x6b,0xaf,0x3,0xe1,0xd0,0x10,0xc1,0x21,0xc7,0x85,0x2b,0xc7,0xa2,0x18,0x9f,0x45,0xe1,0xcc,0x8b,0x2b,0x5,0x78,0x8,0xb8,0x9f,0xa1,0x74,0x9,0x10,0x46,0xd0,0xd1,0xd6,0xba,0x2f,0xf,0xb9,0xfc,0x91,0xe3,0x3a,0x8c,0xc2,0x25,0x60,0xc8,0x65,0xf,0xff,0xa7,0xb5,0xd9,0x45,0x24,0xf,0xa,0xd4,0x6f,0x1a,0xe3,0xf9,0x39,0x17,0x8a,0x3f,0x85,0xf5,0x46,0xc,0x2e,0xa,0xf1,0x26,0x3f,0x2e,0x7d,0x7c,0xac,0x5c,0x75,0xf3,0x99,0x3,0x8d,0x93,0xfe,0x94,0x49,0x35,0xee,0x63,0x52,0x4d,0x4d,0x26,0x95,0xee,0x63,0x9c,0xf4,0x20,0x3a,0xe9,0xd1,0x74,0xd2,0x67,0xd1,0x38,0x5f,0xa6,0x71,0xbe,0x44,0xf0,0xd9,0x72,0x65,0x2f,0x27,0xb8,0x47,0x10,0xff,0xd7,0x7b,0xca,0xda,0xaf,0x4a,0xf6,0x3b,0x8,0x56,0xa3,0xb0,0xd2,0x95,0xae,0x55,0x2d,0x8c,0xf5,0xd8,0x5b,0x62,0xc8,0xb9,0x70,0x2b,0x68,0x1e,0x4b,0x77,0xdb,0xe7,0xbc,0x17,0x67,0x1c,0xd3,0xe1,0x9b,0x48,0xe,0xbf,0xe2,0x89,0x46,0xeb,0x66,0xd6,0xca,0xba,0x7,0x91,0xdc,0x23,0x98,0x92,0x87,0xc4,0x44,0x71,0x12,0x78,0xe8,0x92,0xab,0x40,0xe7,0xe4,0x95,0x73,0x3e,0xf7,0x7e,0x71,0x94,0xa3,0xbe,0xf2,0x5b,0xb6,0x6c,0x7b,0x97,0x4e,0xba,0x81,0xb2,0xd6,0x48,0xd6,0x5d,0x35,0xf7,0x8c,0xb2,0x47,0xcc,0x54,0x44,0x85,0xa1,0xd3,0x1e,0xed,0xe,0x60,0x32,0xac,0x9d,0x5,0xf8,0x67,0xff,0xa1,0xe3,0xf,0x8c,0x40,0xe1,0x3c,0x78,0xb,0xc8,0xb7,0x4,0xde,0xea,0x66,0xb3,0xd7,0xaf,0xb9,0xf5,0xcc,0x4c,0xd,0x59,0xb4,0x9,0x86,0x5c,0xfe,0x48,0x9a,0xc0,0x22,0x12,0x47,0xc9,0xda,0xdc,0x2c,0x1b,0x2b,0x26,0x7a,0x25,0x55,0x46,0x56,0xe0,0x5d,0xab,0xe6,0x9e,0x3e,0x25,0xc9,0xba,0x54,0x54,0xd8,0x61,0xd3,0x1e,0x3b,0x49,0x72,0x7f,0xe3,0x89,0xb5,0x1e,0x9b,0xb7,0x4a,0x2d,0xee,0xec,0x87,0x70,0xcc,0xb8,0xc5,0x23,0x2c,0x8a,0xab,0xc8,0x38,0x91,0xa7,0x83,0x49,0xda,0x4a,0x9a,0xd7,0x40,0x2e,0x2,0xcc,0x4f,0x56,0xce,0xf9,0x6c,0xe2,0x1e,0x45,0xc3,0xaf,0x78,0x7c,0xa8,0xb5,0xee,0xb5,0xde,0xde,0x48,0x3a,0x88,0xa4,0xbf,0x3f,0x62,0x20,0xaa,0x7b,0xc7,0x27,0xb6,0xaa,0x53,0xb8,0x2e,0x51,0x38,0x2a,0xf6,0xa4,0x2e,0xc4,0x97,0xbf,0xf,0x3,0x9f,0x4d,0x35,0x34,0x7d,0x6e,0xd9,0xcf,0x4e,0x4a,0xf4,0xc8,0x98,0x8a,0xe,0x8d,0x12,0xf0,0x16,0xc0,0x55,0x20,0x86,0x12,0x85,0x47,0xb7,0x14,0x54,0xa8,0x18,0xca,0x59,0x7f,0xc2,0x61,0x2c,0xfb,0x5d,0x1e,0xb5,0xb9,0x19,0x70,0x89,0x64,0xf,0xc9,0xe,0x84,0x78,0x10,0xa9,0xb,0x87,0x4e,0x7b,0x74,0x29,0xc0,0xc5,0x0,0x9f,0x58,0x75,0xd3,0xe7,0x3e,0xac,0x16,0x41,0x43,0xa7,0x3d,0x76,0x24,0x81,0x33,0x41,0x9c,0x62,0xdd,0xec,0x27,0x1,0xf4,0x26,0xd1,0xe4,0x17,0x26,0xe7,0xa,0x17,0xb9,0x8c,0x92,0x6d,0xb8,0x8f,0x7f,0xe,0xed,0xba,0xc2,0xd7,0x68,0xcc,0x6d,0x49,0x13,0x3f,0x8e,0x14,0x25,0x61,0xd8,0xf4,0x5f,0x9f,0x2e,0xeb,0x3e,0xc,0x44,0xad,0x70,0xed,0x70,0x28,0x68,0x57,0xa1,0x1d,0x4b,0x20,0xa9,0x19,0xe4,0x3f,0x0,0xbc,0xb,0xe0,0x6d,0x80,0x7f,0x34,0xc6,0xbc,0x28,0x61,0x83,0x64,0x37,0x1b,0x63,0xb6,0x9,0xcc,0x2,0x70,0x8d,0x31,0x8e,0x9b,0xcd,0x34,0x2,0xec,0x66,0xc,0xf,0x4,0x74,0x8c,0xb5,0x3a,0xe,0xd0,0x1,0x0,0x7a,0xc8,0xda,0xde,0x24,0xf7,0xcb,0x21,0x2d,0x7c,0x42,0xa,0xa,0xfb,0xe9,0x44,0x2a,0x15,0x4a,0x4f,0x92,0x5,0xcd,0x8d,0x3d,0xf7,0xeb,0x73,0xd5,0x33,0xd7,0xf,0x4e,0x5c,0xce,0xa9,0xf8,0xec,0x60,0x9,0x2b,0x40,0xf3,0x2,0xa0,0xe3,0x2,0x4f,0x9e,0xf0,0x69,0xd1,0xed,0xf,0x5,0x63,0x49,0xee,0xc1,0x3b,0x69,0x3b,0x68,0x3a,0x10,0xd,0x1b,0x25,0x1c,0x2,0xe0,0x10,0x3f,0xc6,0x9,0x92,0x1d,0x27,0xe1,0x7d,0x48,0xcd,0x90,0xcd,0x10,0xb4,0x0,0xe4,0x66,0xb2,0x24,0xe9,0x0,0x4a,0x59,0xab,0xee,0x80,0xf6,0x7,0x90,0xf3,0x48,0xa,0x16,0xc9,0xf8,0xe,0xd1,0x2c,0x76,0xe7,0xab,0x9c,0xf8,0xc5,0xe3,0x40,0x1,0x7e,0x45,0x43,0x4a,0xb0,0x0,0xc,0x69,0x9e,0x14,0xf9,0x83,0xf6,0x20,0x3e,0x50,0x5,0x3,0x90,0x7c,0x17,0xe4,0x77,0x64,0xdd,0x27,0xdb,0xeb,0xb8,0xb4,0xa,0x4a,0x13,0x2a,0x57,0x48,0x81,0x24,0xc2,0x4e,0x97,0xc1,0x88,0xda,0x1d,0x40,0x5f,0x40,0x7d,0xc1,0x9c,0x4a,0x91,0x4b,0x26,0x70,0x79,0xf,0x8c,0x6e,0xc8,0x7f,0x9b,0xcb,0x28,0xbf,0x59,0x46,0xb2,0x65,0x2f,0xc4,0x6f,0xee,0x5c,0x24,0x43,0x72,0x9,0x8d,0xf3,0x5f,0x2b,0x67,0x9f,0x5a,0xd6,0xa0,0x53,0x2d,0x54,0xdc,0x85,0xaf,0x9c,0xf3,0x59,0x57,0x56,0xcf,0x1,0xe6,0x7,0xcc,0x4f,0x3b,0x29,0xce,0xae,0xf,0xc4,0xdb,0xb2,0x11,0x11,0x16,0xf5,0x1e,0x31,0xdf,0x44,0x7d,0xe7,0x3f,0x33,0x58,0x72,0xe,0x7f,0x5b,0x4e,0x7f,0x7e,0x1,0x86,0x6,0x86,0x26,0xbf,0xb6,0xda,0xf,0xf3,0xe6,0x1c,0x20,0xd2,0x0,0xfe,0x7d,0xb1,0x52,0x5e,0x6c,0xcf,0x47,0x4c,0x19,0x4b,0xc5,0x61,0x89,0xfa,0x86,0x5d,0xb9,0xe8,0x19,0x73,0x1e,0x58,0x31,0xfb,0xd4,0x76,0xf5,0x8e,0xae,0x6a,0xc,0x5f,0x75,0xd3,0xe7,0x32,0xc6,0x71,0x66,0xd0,0x98,0x3f,0x7a,0x1e,0x81,0xf0,0x14,0x83,0xbc,0xcd,0x1a,0xa0,0x77,0x94,0x27,0x3,0x79,0x3d,0xf8,0xf1,0xc3,0xe4,0x1b,0x11,0x7c,0xbb,0x49,0x7e,0x4d,0x8,0xb,0xc3,0xa,0xec,0x61,0x21,0x3b,0x49,0x2e,0x6e,0x48,0x78,0x6c,0x65,0x53,0x2a,0x8e,0x1b,0x32,0x52,0x79,0xc6,0x2b,0x22,0xbc,0xcd,0xa1,0x77,0xa,0x8b,0x1f,0x25,0x7c,0x5f,0x9c,0x6f,0x51,0x18,0x23,0xca,0x15,0x67,0xe3,0x29,0x28,0x77,0x44,0x1d,0xa,0x3b,0x6,0x56,0xdc,0x43,0x77,0x8,0x3,0x0,0xc0,0x8a,0xd9,0xa7,0xbc,0x9,0x98,0x6f,0x48,0xb0,0xc1,0x4a,0x97,0x90,0xcd,0x3a,0xa8,0x72,0x40,0x71,0xff,0x40,0x54,0x13,0xd8,0xaa,0x3d,0xd3,0x5e,0xb0,0xb5,0x1d,0x22,0x30,0x57,0x80,0xc5,0x8,0xec,0xc6,0xc5,0x47,0x1b,0xe2,0x17,0x7f,0xc7,0x32,0xf9,0x97,0xcb,0xaf,0x5c,0x1e,0x95,0x94,0xc5,0xbb,0xf7,0x27,0xc0,0x34,0x61,0xd8,0x15,0x4f,0x8c,0xa9,0x4b,0x6,0x0,0x80,0x15,0x37,0x9e,0xf2,0x2b,0x81,0x73,0xfd,0x59,0x89,0xe0,0xbc,0xdb,0x9c,0xdf,0xa3,0x1f,0x6,0x1,0xaf,0xd0,0x38,0xf3,0x40,0xf3,0x3d,0x90,0x8f,0xa3,0x50,0x4b,0x66,0x72,0x3e,0x92,0x9d,0x24,0x8a,0x24,0x8,0x61,0x1c,0x2,0x1a,0xe,0x60,0xca,0x51,0x57,0x3d,0x9d,0x6e,0xaf,0xfc,0x6a,0x56,0xe3,0x68,0x9c,0xaf,0xd2,0x38,0xbf,0x1,0xe8,0x2,0xc,0x66,0xa5,0x8,0xf0,0x3,0x81,0x4f,0x1,0x9c,0x4d,0x9a,0xff,0x30,0xc6,0x4c,0x5f,0x31,0xfb,0x94,0x6f,0x3,0xe6,0x6b,0xa0,0xf9,0x6d,0x28,0xae,0xef,0x27,0x17,0xb5,0x6d,0x5a,0xa5,0x17,0x6a,0xfc,0xbe,0xf3,0x2f,0x7f,0xd2,0x43,0x79,0xbc,0x68,0x8c,0x9b,0x75,0xcf,0x6b,0x2f,0x6,0x48,0xa4,0xc9,0x8c,0xb8,0xf2,0xa9,0x23,0x24,0xfb,0x6b,0x49,0x69,0x49,0x1b,0xc,0xb9,0x95,0xc6,0xac,0x0,0x78,0xf3,0xf2,0x59,0x27,0xbd,0x19,0x11,0xff,0x13,0xd6,0xba,0xf3,0x25,0x9d,0x60,0x72,0xaa,0x5b,0xe8,0xa0,0xe4,0x92,0xc5,0x6d,0x4b,0x6f,0xd1,0xd6,0x78,0x51,0x71,0xc3,0xcf,0x95,0xa4,0x53,0xd,0x4,0x55,0x8d,0xcd,0x43,0x5e,0x2f,0xca,0x47,0x68,0xcc,0xf8,0x95,0xb3,0x4f,0x2e,0x77,0xa,0x7a,0xd5,0x25,0xa8,0x19,0x46,0x5c,0xf9,0xd4,0xf5,0x92,0x5e,0x7,0x39,0x6f,0xc5,0xac,0x93,0xca,0x6e,0xf5,0x3a,0xfc,0x4b,0x4f,0x35,0x42,0xf6,0x69,0x41,0xc7,0x78,0x2,0x1e,0x73,0x15,0x66,0x58,0xa7,0x8b,0x41,0x51,0x78,0xc,0x29,0x45,0x22,0x96,0xf9,0xbe,0x38,0x4e,0x71,0xfc,0x28,0x4,0x29,0x26,0x8d,0xf6,0x60,0x15,0x7f,0x78,0x7c,0x97,0x34,0x3f,0x58,0x31,0xfb,0xe4,0x1f,0x26,0x9d,0x7e,0xa7,0xe,0x9a,0x23,0xaf,0x59,0x4a,0xb7,0x65,0xfb,0xe3,0x24,0x8e,0x6,0xd0,0xc3,0xdb,0x3c,0x23,0xd8,0x87,0x24,0x8a,0x5,0x18,0xf1,0x5c,0xe9,0xe4,0x43,0x5c,0xba,0xa5,0x58,0x24,0xa,0x65,0xc5,0xdf,0x95,0xcb,0x2f,0xae,0x4c,0x8c,0xf9,0x46,0xc1,0x7a,0x4b,0xff,0xe0,0x68,0x3e,0x63,0x85,0xcf,0xaf,0xba,0xf1,0x94,0x44,0xcd,0xc1,0x9d,0x6a,0xca,0x5d,0xf6,0xd3,0x63,0xb5,0xf2,0xc6,0x53,0x4f,0x25,0x53,0xb7,0x4a,0x7c,0xc3,0x57,0xd5,0x19,0xbd,0xce,0x90,0x31,0xcf,0x61,0x4d,0xa1,0x54,0xdc,0x8,0xbd,0x32,0x36,0x9d,0xb8,0x30,0x96,0xf8,0xae,0x5c,0x7e,0x71,0x71,0xe2,0xbe,0xf1,0xe4,0xe3,0x90,0x6e,0x3b,0x84,0xe4,0xb7,0x92,0xa6,0x41,0x67,0xdb,0xf2,0x1,0x0,0xcb,0x67,0x8d,0xb9,0x16,0x34,0xd7,0x4a,0x58,0xf,0xef,0x4,0x92,0x28,0x4a,0xed,0x56,0x57,0xb0,0xb7,0x72,0xb9,0xb0,0x52,0xdf,0x6,0x2e,0x71,0x7e,0xf8,0x36,0x0,0x1f,0x24,0x8d,0xfb,0xba,0xd2,0x9b,0x86,0x7f,0xe9,0xe9,0xde,0xa0,0x1e,0x25,0x30,0x24,0x5f,0xbc,0xb8,0x3d,0x74,0x6b,0x19,0x71,0x4b,0xa5,0xd1,0x16,0xa9,0x22,0x4e,0x7a,0xc8,0x7d,0x17,0xac,0x95,0xf4,0x67,0x2d,0x73,0x5d,0x9b,0xef,0xc9,0x62,0x5b,0x4f,0xa5,0x7,0xdd,0xbe,0xb7,0x4b,0x46,0xfe,0x5b,0x0,0x92,0x5e,0x27,0xf9,0xff,0x56,0xcc,0x3e,0x69,0x66,0xd2,0x38,0x6f,0x77,0x4b,0x53,0x25,0x60,0xc,0xcf,0x12,0xb0,0x7f,0xa1,0x46,0x10,0xc7,0xa3,0x49,0xf0,0x6e,0xb5,0x69,0xb3,0xd5,0x73,0x89,0x19,0x41,0x17,0x40,0xd6,0x6f,0xdc,0x8d,0x3e,0x81,0x63,0x36,0x88,0x28,0xdc,0x37,0xc0,0x8f,0xf3,0xf,0xc7,0x38,0xd7,0x2f,0xfb,0xd9,0x89,0xb3,0xd1,0xe,0x50,0x17,0x43,0x40,0x0,0x56,0x9a,0x2,0xb0,0x4f,0xcc,0xa0,0x19,0x46,0x54,0x95,0x57,0xf8,0xfb,0xa8,0xb4,0xa2,0xde,0x17,0x43,0x41,0x9a,0xf2,0xaf,0x90,0x15,0x34,0x6c,0x14,0x33,0x24,0xcd,0x12,0x63,0x9c,0x13,0x49,0x73,0xa9,0xf2,0x7b,0x39,0xd2,0x5b,0xff,0x58,0xd0,0xe5,0xe7,0xbc,0x87,0x83,0xd6,0xef,0xf9,0xf4,0xf3,0xb2,0xf6,0x22,0x3e,0x50,0x6f,0x3d,0x0,0xb9,0xb7,0x7f,0xab,0xe8,0xa6,0x5f,0x6b,0xab,0x2f,0x47,0xe4,0x36,0x30,0x41,0x99,0x11,0x42,0xc1,0xc6,0xf7,0xc4,0x12,0x49,0xff,0x43,0xf2,0xe9,0x65,0x33,0x47,0x67,0x0,0xfc,0x6e,0xe4,0x55,0xcf,0xbe,0x2d,0x6b,0x7f,0x9,0x61,0xcf,0x12,0xbe,0x23,0x16,0xa0,0x1,0xf9,0x24,0xc9,0x6f,0x2e,0x9b,0x39,0x7a,0x59,0x72,0x18,0x6e,0xd,0x75,0xd3,0x3,0xc,0xbf,0xf2,0x99,0x43,0xad,0xd4,0xd8,0x7a,0x7d,0x21,0x4a,0x48,0xe2,0x40,0xbc,0x74,0x8f,0x98,0x6f,0xa3,0x24,0x7d,0xc4,0xe4,0x17,0x91,0x6,0x10,0x78,0xfb,0x22,0x98,0xb4,0xb,0xc9,0x76,0xa4,0x31,0xf,0xd2,0x38,0xa3,0x40,0xf3,0x79,0x3a,0xd,0x4f,0x2c,0xff,0xd9,0x89,0x39,0x1f,0xc5,0x65,0x33,0x47,0x3f,0xe,0x9a,0xa1,0x2,0x7e,0xed,0x37,0x79,0x81,0x94,0x37,0xc9,0xc8,0x60,0x1,0x89,0x1,0x79,0x9b,0x80,0x69,0xed,0x4d,0x7c,0xa0,0x9e,0x7a,0x0,0xa2,0x1f,0xc1,0xc6,0xdc,0x53,0x4e,0xb2,0x2a,0xd7,0x52,0x5b,0x79,0xd0,0xf8,0xdd,0x27,0x83,0x77,0x88,0x77,0x57,0x60,0x44,0x7a,0xe5,0x7b,0x89,0xfc,0x9c,0x7d,0xe0,0xe,0x61,0xfe,0xa,0x70,0x11,0xa8,0x5b,0x1,0xbc,0xe,0x68,0xe7,0xf2,0x99,0xa3,0x23,0x3d,0x72,0x97,0xff,0x6c,0xf4,0x9f,0x47,0x5c,0xf5,0xec,0x64,0x8,0x93,0x24,0x3b,0x23,0xa8,0x82,0xef,0xdc,0x42,0x80,0x5f,0x3,0x79,0xc7,0x8a,0x99,0x27,0xbc,0xd7,0x11,0x68,0xaf,0x1f,0x6,0x0,0x8e,0x5,0xd8,0xc3,0xf7,0xc9,0xa8,0xc8,0xc9,0xc4,0x9f,0x7d,0xa,0x3c,0x68,0x2,0x46,0x0,0x80,0xd0,0x92,0x6c,0x0,0x21,0x71,0xbd,0x48,0x66,0xab,0xc6,0x9b,0x97,0x0,0xb2,0x20,0x7,0x81,0xdc,0x22,0x69,0xeb,0xf2,0x99,0xa3,0xdb,0xe4,0x88,0xba,0x7c,0xe6,0xe8,0x77,0x46,0x5e,0xbd,0x64,0x2e,0xc4,0xc5,0x90,0x9e,0x5,0x70,0xa0,0xa4,0x77,0x40,0x4e,0x4,0xf4,0xc2,0xa,0x6f,0xc8,0xe8,0x10,0xa8,0x1b,0x35,0x70,0xf8,0x97,0x9f,0x7d,0x9e,0xc4,0x31,0xbe,0x27,0x47,0x5b,0x9,0x92,0xd7,0xbb,0x3c,0xcf,0xd9,0xdb,0x1,0x2c,0x5,0x70,0x32,0xa0,0xb3,0x51,0x62,0xdb,0xd9,0x90,0xb7,0x50,0x45,0x6e,0xed,0x45,0xbd,0x4d,0x66,0xf9,0xcc,0xd1,0xd,0x6d,0xfa,0x30,0x6,0x46,0x5e,0xbd,0xe4,0x50,0x49,0xc3,0x0,0xac,0x5f,0x3e,0xf3,0x84,0xd,0xed,0x89,0xe3,0x48,0x3c,0x74,0x74,0x86,0x71,0x30,0xe2,0xaa,0xe7,0xde,0x2,0xd0,0x2b,0xbc,0xdf,0x50,0x29,0xa2,0x14,0xbf,0x97,0xf4,0x17,0x80,0x13,0x1,0xac,0xa1,0x77,0x9e,0x71,0x2f,0x0,0x7b,0x4a,0x6a,0x80,0x77,0xbc,0x7d,0xf,0x0,0x9f,0x2,0xd4,0x17,0xc0,0xbe,0x0,0x3e,0x9,0x78,0x1b,0x51,0x55,0xea,0xcf,0x1f,0xc,0x33,0x92,0x32,0xa4,0xe9,0xb6,0x7c,0xe6,0xf1,0xd9,0xb6,0x7e,0x1b,0x5,0x47,0x7f,0x65,0x69,0xea,0xf7,0x33,0x8e,0xad,0x29,0x8d,0x6a,0xa1,0x6e,0x86,0x0,0x82,0x3f,0x17,0xf4,0x15,0xf9,0xb,0xa1,0x3c,0xbf,0x48,0x8f,0x28,0x11,0x94,0xf1,0x37,0x44,0xf4,0x5,0x32,0x6f,0x14,0xb8,0xce,0xcd,0xba,0x7f,0x58,0x39,0xfb,0x44,0xb,0x60,0x93,0x7f,0xe5,0x60,0xc4,0xd5,0x2f,0x90,0xb0,0x3d,0x0,0xee,0x9,0x8f,0x21,0xfa,0xc8,0x6a,0x89,0x31,0x74,0x0,0x6f,0x71,0x65,0x5,0x83,0x8e,0x7f,0xca,0x6d,0x32,0xde,0x81,0x9d,0x45,0x7c,0xa0,0x8e,0x18,0x40,0xc0,0x8f,0x48,0xb3,0x44,0xb2,0x97,0x82,0x3c,0x2d,0x24,0x4,0x14,0xf4,0xba,0x7e,0x80,0xbf,0xf,0x1e,0x20,0x6b,0x9,0xe0,0xfb,0x12,0x1f,0xf5,0x89,0x1f,0x9,0xcb,0x6f,0x38,0x4e,0x0,0xb6,0xf8,0x17,0x46,0x5c,0xb5,0xe4,0x75,0x92,0xbf,0x15,0x70,0x1c,0x80,0x22,0x51,0xa1,0x75,0xe1,0x42,0x5c,0xa8,0xd0,0x9e,0x8c,0xdb,0xea,0xa8,0x13,0xad,0xa,0xea,0x46,0xd,0x5c,0x3e,0xf3,0xf8,0xd7,0x97,0xdd,0x30,0xea,0x3e,0x80,0xd7,0x1,0xbc,0x58,0xc2,0xaf,0x3,0xe7,0x92,0x22,0x87,0x11,0x92,0x46,0xa1,0x77,0xbf,0x7,0xf8,0xbf,0xcb,0x67,0x1e,0x5f,0xd1,0x59,0x43,0xc6,0x18,0xd2,0x98,0xbb,0x42,0xf6,0xf9,0x78,0x3b,0x7d,0xa1,0x4b,0x97,0x6f,0xac,0x81,0x5,0xf8,0x1a,0xda,0xd7,0x61,0xa0,0xdd,0xa1,0x6e,0xd9,0x77,0xc4,0x55,0x4b,0x8e,0x4,0x30,0x82,0xe4,0x89,0x0,0xc6,0x1,0x8,0x6f,0x11,0x13,0x8c,0xc1,0x9b,0x1,0x9c,0xb5,0x7c,0xe6,0xf1,0x4b,0xaa,0xc9,0x63,0xe4,0xd5,0x2f,0x1c,0x28,0xd9,0x4d,0xfe,0xb9,0x88,0xa5,0x5c,0x0,0xa,0xc0,0xd7,0x30,0x32,0x92,0x16,0x1,0x98,0xbc,0x7c,0xe6,0xf1,0x65,0x17,0x61,0xd6,0x2b,0xd4,0x2d,0x3,0x4,0x30,0xe2,0xea,0xe7,0xfb,0x0,0x38,0x3,0xc0,0xbf,0x10,0x3c,0xa,0xc0,0x18,0xdf,0x4a,0xb0,0x43,0xd0,0x95,0xcb,0x6f,0x18,0x75,0x47,0x8d,0xe9,0x3f,0x65,0x68,0x8e,0x87,0x77,0xf6,0x9e,0xe7,0x25,0x1c,0xc3,0xa,0xb2,0x5,0xea,0xc2,0x2e,0x2b,0xfb,0x9f,0x0,0x7e,0xb8,0xfc,0x86,0x51,0x5d,0xc,0xd0,0x11,0x70,0xd4,0x57,0x96,0xe,0x7,0x30,0x9,0x5e,0x6f,0xb0,0xe9,0xc5,0x19,0xc7,0x7e,0xb7,0x96,0xf4,0x46,0x5e,0xb3,0x94,0x92,0x3d,0x95,0xe4,0xaf,0x0,0xec,0x11,0xee,0x5,0x22,0xb4,0x90,0x9c,0xfc,0xe1,0x3f,0x5b,0x0,0x63,0x49,0xf3,0x48,0x67,0x2c,0x4d,0x4f,0xa,0x76,0x2b,0x6,0x68,0xf,0x18,0x79,0xcd,0xd2,0x3d,0x24,0xbd,0x4c,0xf2,0xc0,0x62,0xb5,0x33,0xce,0x5b,0x59,0xd2,0x26,0x92,0x2f,0x91,0xbc,0xf8,0xc5,0x19,0xc7,0x6c,0x6a,0x4b,0x3e,0xf5,0xa,0xff,0xf4,0xc,0x0,0x0,0x23,0xaf,0x7e,0xe1,0x7a,0x1a,0x5e,0x7,0x20,0xe5,0xfb,0x61,0x65,0x0,0xec,0x82,0xb0,0xb,0xc4,0xe,0x0,0x5b,0x24,0x6d,0x26,0xb9,0xd,0xc2,0x66,0x41,0x4b,0x8c,0x31,0xbf,0xfb,0xfd,0x4f,0x8e,0x59,0x57,0x63,0xd6,0x9d,0xe,0x75,0xa3,0x6,0x76,0x26,0xd0,0x98,0xff,0x91,0x74,0x8,0x80,0x1e,0x24,0xb7,0xc0,0xdb,0x5b,0x6f,0x33,0xd,0xdf,0x3,0xf0,0xb6,0xa4,0x57,0x1,0xbc,0xf4,0xe2,0x8c,0x63,0xdf,0xe9,0xec,0xb2,0x76,0x41,0x17,0x74,0x41,0x17,0x74,0x41,0x17,0x74,0x41,0x17,0x74,0x41,0x17,0x74,0x41,0x17,0xd4,0x6,0xff,0x1f,0x32,0x68,0x5,0x7e,0x99,0xd5,0x97,0x49,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char line_edit_disabled_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x3a, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xdd, 0x93, 0x31, 0x4b, 0x3, 0x41, 0x10, 0x85, 0xdf, 0xcc, 0xec, 0x6d, 0x8c, 0x26, 0x7a, 0x20, 0x51, 0x4c, 0x1a, 0x2b, 0x2b, 0xd3, 0x9a, 0x32, 0x88, 0xa4, 0x11, 0xb1, 0xbb, 0x3e, 0x95, 0x62, 0xef, 0x9f, 0xb1, 0xb3, 0xb4, 0x17, 0x41, 0xd0, 0x20, 0x16, 0x16, 0x5a, 0x9, 0xfa, 0x3, 0x52, 0x25, 0xa8, 0x9d, 0xa6, 0xb8, 0xdc, 0xed, 0xed, 0x58, 0x44, 0x42, 0x8a, 0xd3, 0x4, 0xd2, 0xf9, 0xc1, 0xc0, 0x14, 0xfb, 0xde, 0xbc, 0x57, 0x2c, 0x30, 0x27, 0x34, 0xb9, 0xd7, 0x1b, 0xcd, 0x36, 0x94, 0x5b, 0x4a, 0x5a, 0xc9, 0x7d, 0xac, 0xf4, 0x1, 0xf2, 0x37, 0x2f, 0x8f, 0xf7, 0xe7, 0x0, 0x74, 0xd2, 0x80, 0xb7, 0x77, 0x76, 0x2f, 0x1, 0xdd, 0x27, 0x22, 0x7, 0x22, 0x93, 0x7b, 0x4e, 0xd5, 0xa9, 0xaa, 0x1, 0xe8, 0xea, 0xf5, 0xe9, 0xee, 0x10, 0x80, 0x17, 0x0, 0xa8, 0x37, 0x9a, 0x6d, 0x0, 0xa7, 0xcc, 0x6, 0x62, 0xc, 0x33, 0x33, 0xf2, 0x47, 0x18, 0x44, 0x50, 0xf5, 0x5b, 0xeb, 0xd5, 0xcd, 0xee, 0x7b, 0xaf, 0xfb, 0xcc, 0x23, 0x67, 0x6e, 0x11, 0x91, 0x63, 0xe1, 0xa9, 0x9d, 0x99, 0x19, 0x44, 0x94, 0x79, 0xd2, 0x16, 0x0, 0xf0, 0x28, 0x99, 0x6e, 0x0, 0xbf, 0xc4, 0xce, 0x85, 0x84, 0x94, 0xaa, 0x63, 0x83, 0x79, 0xf8, 0x7, 0x6, 0x6, 0x0, 0x96, 0xc2, 0xd5, 0x9a, 0x7a, 0x45, 0x12, 0xf, 0x66, 0x12, 0x15, 0x4b, 0x21, 0x88, 0xa9, 0x36, 0x36, 0x8, 0xa, 0x8b, 0x56, 0x24, 0xd0, 0x24, 0x1e, 0xd0, 0xdf, 0xd2, 0x11, 0xb, 0xe5, 0x50, 0x35, 0x4d, 0x3, 0xe0, 0xa7, 0x42, 0x96, 0xba, 0x8e, 0x4, 0x96, 0x6c, 0xb1, 0x3c, 0x55, 0x5c, 0x28, 0x96, 0x61, 0x8c, 0x25, 0x9f, 0xb9, 0xdb, 0x71, 0x82, 0xc2, 0xb0, 0x7f, 0x9c, 0x58, 0x7b, 0x50, 0xa, 0x2b, 0x6b, 0xae, 0xb4, 0xa2, 0x3e, 0x73, 0xb9, 0x49, 0x44, 0x8c, 0x8a, 0xb1, 0x94, 0xc, 0xe3, 0xb7, 0x20, 0xee, 0x9f, 0x0, 0x13, 0x9f, 0x29, 0x8a, 0x22, 0xe9, 0x7d, 0x5, 0x67, 0x2c, 0xb2, 0x7, 0x23, 0xcb, 0xb9, 0xe7, 0x5d, 0xf6, 0xe9, 0xb3, 0xb4, 0xf3, 0x70, 0x7d, 0x71, 0x4, 0xc0, 0xcf, 0x52, 0x77, 0x2a, 0xdf, 0x87, 0x72, 0x62, 0x0, 0x51, 0xb5, 0x8, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char option_arrow_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x6,0x0,0x0,0x0,0x56,0x75,0x5c,0xe7,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x98,0x49,0x44,0x41,0x54,0x28,0x91,0xbd,0x91,0xb1,0xd,0xc2,0x30,0x10,0x45,0xdf,0xd1,0xb8,0xf0,0x2,0xee,0xdc,0x87,0x1,0xd8,0x24,0xb5,0xe9,0x19,0x87,0x1e,0xea,0x6c,0xc2,0x0,0xa4,0xb5,0xdc,0x79,0x1,0x17,0xae,0x8e,0x26,0x48,0x76,0x14,0x40,0x48,0x88,0xdf,0xfd,0xf7,0xef,0x4b,0x77,0x3a,0xf8,0x85,0x62,0x8c,0x21,0xc6,0x18,0xb6,0x32,0x59,0x83,0x94,0xd2,0x5e,0x55,0x6f,0x0,0x22,0x72,0xf0,0xde,0xdf,0xdb,0x7c,0xd7,0x9a,0x9c,0xb3,0x55,0xd5,0x9,0xb0,0x80,0x55,0xd5,0x29,0xe7,0x6c,0x5f,0x16,0x6a,0xad,0x67,0x60,0x68,0xd0,0xb0,0xb0,0x3f,0xaa,0x3b,0x3a,0xa5,0x74,0x51,0xd5,0xd0,0xd,0x88,0x5c,0xbd,0xf7,0xc7,0xa7,0xef,0x6e,0x30,0xc6,0x9c,0x80,0xb9,0x41,0xf3,0xc2,0xd8,0x2c,0x38,0xe7,0x8a,0x88,0x8c,0x40,0x1,0x8a,0x88,0x8c,0xce,0xb9,0xf2,0x71,0xcf,0x77,0x8f,0xfb,0x5a,0xf,0x28,0x4a,0x37,0xff,0x58,0x46,0x7b,0x50,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char line_edit_selected_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x50, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xdd, 0x93, 0x4d, 0x4b, 0x2, 0x51, 0x14, 0x86, 0xdf, 0x73, 0x66, 0xc, 0x1d, 0x87, 0xa0, 0xa8, 0x4c, 0x27, 0x19, 0x49, 0xc, 0x84, 0x24, 0xda, 0xe4, 0x52, 0x22, 0xdc, 0x44, 0x44, 0x2d, 0x86, 0x5a, 0xba, 0xb1, 0x68, 0xef, 0xf, 0xf0, 0x6f, 0xb4, 0xab, 0x6d, 0x9b, 0x16, 0xe1, 0xaa, 0x24, 0x5a, 0x16, 0xf4, 0x69, 0x3f, 0xc0, 0x82, 0xd2, 0x8a, 0x8, 0x2, 0x47, 0xa1, 0x69, 0x4e, 0xb, 0x41, 0x5c, 0x4c, 0x29, 0xb8, 0xeb, 0x81, 0xb, 0x77, 0x71, 0xde, 0xe7, 0xbe, 0x67, 0x71, 0x81, 0x1, 0xa1, 0xee, 0x7b, 0x2a, 0x9d, 0xc9, 0x41, 0x38, 0x2b, 0x24, 0xe3, 0x9e, 0xc3, 0x42, 0x6f, 0x20, 0xf7, 0xb8, 0x72, 0x7e, 0xb6, 0x7, 0x40, 0xba, 0x5, 0x3c, 0xbb, 0xb0, 0x78, 0x4, 0xc8, 0x32, 0x11, 0x39, 0x20, 0x52, 0x3d, 0x9f, 0x13, 0x71, 0x44, 0x44, 0x5, 0xa8, 0x74, 0x7f, 0x71, 0xba, 0xa, 0xc0, 0x55, 0x0, 0x20, 0x95, 0xce, 0xe4, 0x0, 0x14, 0x98, 0x55, 0x28, 0xaa, 0xca, 0xcc, 0xc, 0xef, 0xa3, 0x30, 0x88, 0x20, 0xe2, 0xce, 0x84, 0x22, 0xb1, 0xea, 0xeb, 0x73, 0xf5, 0x86, 0xdb, 0x66, 0xce, 0x12, 0x91, 0xc3, 0xa, 0xf7, 0xdc, 0x99, 0x99, 0x41, 0x44, 0xdf, 0x2e, 0x49, 0x16, 0x0, 0xb8, 0xdd, 0x4c, 0xc2, 0xc0, 0x2f, 0xb5, 0x3d, 0x21, 0x85, 0x84, 0x22, 0x1d, 0xc1, 0x20, 0xfc, 0x17, 0x41, 0x32, 0x9f, 0x30, 0xe2, 0x96, 0xd9, 0x77, 0x28, 0x6e, 0x99, 0x48, 0xe6, 0x13, 0x6, 0x0, 0xa8, 0x0, 0x30, 0x36, 0x3f, 0x32, 0x14, 0x8, 0x69, 0x52, 0x3d, 0x7c, 0xa2, 0xbf, 0xa3, 0x6d, 0xa6, 0x37, 0x4c, 0x69, 0xd6, 0x6c, 0x5f, 0xa7, 0x41, 0xa3, 0xde, 0x2a, 0xeb, 0x51, 0x8d, 0xcc, 0x35, 0xa3, 0x67, 0x38, 0xb6, 0x6e, 0x40, 0x9f, 0xd2, 0xc8, 0xae, 0x37, 0x4f, 0x3a, 0xd, 0x1e, 0x2f, 0xef, 0xb6, 0xf5, 0x68, 0x70, 0x65, 0xae, 0x90, 0x9c, 0x88, 0x6f, 0x9a, 0x62, 0xd7, 0x9a, 0x9e, 0x4d, 0xb4, 0x88, 0x26, 0xba, 0x11, 0xa0, 0xf7, 0xdb, 0x8f, 0x97, 0x87, 0xab, 0xca, 0xe, 0xd0, 0xf5, 0x99, 0xac, 0x3, 0x4b, 0x9, 0xfa, 0xc3, 0xbb, 0x81, 0x49, 0xff, 0x92, 0x1a, 0xf4, 0xd, 0x7b, 0x9, 0x9c, 0xc6, 0xd7, 0xa7, 0x5d, 0x6b, 0x95, 0xf7, 0xaf, 0x47, 0xb7, 0x50, 0x2c, 0xba, 0xfd, 0xac, 0xdb, 0x93, 0x1f, 0xc, 0x91, 0x5f, 0xe7, 0xb9, 0x80, 0x59, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char option_button_disabled_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x40,0xde,0x8d,0x6b,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x32,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x3f,0x3f,0x5a,0x5a,0x5a,0x2b,0x2b,0x31,0x2e,0x2e,0x34,0x59,0x59,0x59,0x2a,0x2a,0x30,0x4b,0x4b,0x4b,0x22,0x22,0x27,0x35,0x35,0x35,0x4a,0x4a,0x4a,0x24,0x24,0x28,0x24,0x24,0x29,0x56,0x56,0x56,0x62,0x62,0x62,0x2a,0x2a,0x31,0x2a,0x2a,0x30,0x2d,0x2d,0x34,0x2f,0x2f,0x36,0x2e,0x2e,0x35,0x2c,0x2c,0x32,0x48,0x48,0x48,0x44,0x44,0x44,0x43,0x43,0x43,0x54,0x54,0x54,0x26,0x26,0x2b,0x24,0x24,0x28,0x27,0x27,0x2d,0x29,0x29,0x2f,0x28,0x28,0x2e,0x25,0x25,0x2b,0x23,0x23,0x28,0x26,0x26,0x2c,0x25,0x25,0x2a,0x2a,0x2a,0x2f,0x2b,0x2b,0x31,0x22,0x22,0x26,0x52,0x52,0x52,0x42,0x42,0x42,0x2d,0x2d,0x33,0x22,0x22,0x27,0x51,0x51,0x51,0x40,0x40,0x40,0x27,0x27,0x2b,0x2e,0x2e,0x34,0x2c,0x2c,0x31,0x29,0x29,0x2e,0x4f,0x4f,0x4f,0x3f,0x3f,0x3f,0x4d,0x4d,0x4d,0x3e,0x3e,0x3e,0x24,0x24,0x2a,0x24,0x24,0x29,0x20,0x20,0x25,0x4c,0x4c,0x4c,0x3d,0x3d,0x3d,0x28,0x28,0x2d,0x2b,0x2b,0x30,0x29,0x29,0x2d,0x20,0x20,0x23,0x4a,0x4a,0x4a,0x3b,0x3b,0x3b,0x22,0x22,0x28,0x27,0x27,0x2c,0x1e,0x1e,0x22,0x49,0x49,0x49,0x3a,0x3a,0x3a,0x21,0x21,0x26,0x21,0x21,0x25,0x23,0x23,0x27,0x20,0x20,0x24,0x1d,0x1d,0x21,0x39,0x39,0x39,0x47,0x47,0x47,0x1f,0x1f,0x24,0x1f,0x1f,0x23,0x1e,0x1e,0x21,0x46,0x46,0x46,0xff,0xff,0xff,0xbd,0x3f,0x83,0xbb,0x0,0x0,0x0,0x24,0x74,0x52,0x4e,0x53,0x0,0x4,0xa,0x11,0x19,0x1f,0x22,0x24,0x1d,0x16,0xd,0x7,0x2,0x15,0x25,0x34,0x3f,0x46,0x47,0x48,0x43,0x3a,0x2d,0x1b,0x77,0xef,0xe6,0x49,0xef,0xe6,0xef,0xe7,0x77,0xef,0xe4,0x4a,0xba,0xea,0xc1,0xeb,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x65,0xb5,0xdd,0x88,0x9f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x1,0xb,0x49,0x44,0x41,0x54,0x28,0xcf,0x8d,0xd1,0xd9,0x56,0xc2,0x30,0x10,0x80,0x61,0xd6,0xa2,0xa8,0x6c,0x75,0xdf,0x10,0x54,0xa8,0x82,0x74,0xd2,0x4a,0x49,0x5b,0xa4,0xb5,0x5a,0x44,0x10,0x5c,0xd0,0xaa,0x80,0x8a,0xcb,0xfb,0x3f,0x83,0x21,0x24,0x1c,0x8e,0x5e,0xe8,0x77,0xfd,0x9f,0x93,0x99,0x89,0xcf,0x1f,0x8,0x86,0xc2,0x42,0x84,0x10,0x66,0x66,0xa3,0x73,0xf3,0xbe,0x9f,0x2,0xb,0xb1,0x78,0x22,0x99,0x12,0x45,0x71,0x71,0x69,0x79,0x25,0xea,0xff,0x15,0x4,0x63,0xab,0x6b,0x7b,0xcc,0x7e,0x2e,0x2f,0x1d,0x30,0x87,0x52,0x21,0xbf,0xbe,0x41,0x82,0x50,0x7c,0xb3,0x78,0x54,0x1a,0x93,0x1,0x29,0x2a,0x73,0xac,0x94,0x35,0x6d,0x8b,0x4,0xe1,0x84,0x5c,0xe2,0xe4,0xa,0xd6,0xb,0x8c,0xa1,0x2b,0xd8,0x54,0x48,0x20,0x24,0xab,0x27,0x5c,0xb5,0x2,0x39,0x89,0xa9,0x19,0x2a,0x58,0xa3,0x20,0x92,0xb2,0x4f,0x39,0xdb,0x1,0xe3,0x8c,0xa9,0x9d,0xbb,0x60,0x3a,0xa3,0x40,0xac,0x5f,0x70,0xf5,0xe9,0xc0,0x20,0x1,0xd0,0xa0,0x71,0xc9,0x35,0xca,0x4d,0x75,0x6a,0x86,0xd6,0x15,0xa6,0x4f,0xb4,0x3b,0x5c,0x1b,0xa1,0xeb,0x1b,0x46,0xbf,0x5,0xed,0xe,0xd1,0x21,0xbb,0xf7,0x5c,0xf7,0xc1,0xf2,0x26,0x6b,0x7a,0x4d,0xeb,0xd1,0xa2,0x6b,0x3e,0x3d,0x73,0xc5,0x5e,0x1f,0x7b,0xc,0xe0,0xc1,0xcb,0xab,0x49,0xf,0xb5,0xdd,0x79,0x63,0x86,0xbd,0x77,0xd,0x33,0xad,0x41,0xff,0xe3,0x33,0x4d,0x4f,0xbd,0x93,0x19,0x7e,0x8d,0xd9,0x0,0xee,0x64,0x6,0xd7,0x41,0xd9,0xdd,0xff,0x7c,0xd6,0x5f,0xdf,0xfd,0xd,0xbf,0xaa,0x55,0xdf,0x7c,0xb2,0x44,0x90,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char logo_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x80, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc3, 0x3e, 0x61, 0xcb, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xdc, 0x9, 0x7, 0x13, 0x2, 0x0, 0x15, 0xb9, 0x53, 0x97, 0x0, 0x0, 0x21, 0x58, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x7d, 0x79, 0x9c, 0x1c, 0x55, 0xb5, 0xff, 0xf7, 0x7b, 0xab, 0x7b, 0x66, 0x48, 0x8, 0x61, 0xd1, 0x90, 0xb0, 0x88, 0x91, 0x27, 0x24, 0x24, 0x21, 0x3b, 0x8, 0x4, 0x42, 0x58, 0x54, 0xe0, 0x91, 0x80, 0x24, 0x1, 0x2, 0x9, 0x42, 0x80, 0x4, 0x11, 0x90, 0x9f, 0xf2, 0xd3, 0xa7, 0xcf, 0xe7, 0xf3, 0x3d, 0x1f, 0x1f, 0x7f, 0xea, 0xd3, 0x48, 0x4c, 0x8, 0x61, 0xd, 0x49, 0x64, 0x89, 0x82, 0x40, 0x58, 0x4, 0x64, 0xb, 0x44, 0x25, 0x9b, 0xd9, 0x51, 0x14, 0x41, 0x3, 0xc8, 0x16, 0x20, 0xfb, 0x4c, 0x77, 0xdd, 0xef, 0xef, 0x8f, 0xaa, 0xea, 0xae, 0xee, 0xa9, 0xea, 0x9e, 0xee, 0xae, 0x99, 0xe9, 0xe0, 0x9c, 0xf9, 0xd4, 0x74, 0xd5, 0xad, 0x5b, 0x77, 0x39, 0xe7, 0xdc, 0x7b, 0xcf, 0x39, 0xf7, 0xdc, 0x7b, 0x81, 0x2e, 0xe8, 0x82, 0x2e, 0xe8, 0x82, 0x2e, 0xe8, 0x82, 0x2e, 0xe8, 0x82, 0x2e, 0xe8, 0x82, 0x2e, 0xf8, 0xe7, 0x2, 0x76, 0x76, 0x1, 0xea, 0x1, 0xe, 0xff, 0xc2, 0xcc, 0xbd, 0x60, 0x5b, 0x6e, 0xb6, 0xd6, 0xf6, 0x2, 0xb8, 0x8d, 0xc6, 0x6c, 0x36, 0x34, 0x6f, 0x81, 0x7c, 0x43, 0x30, 0x7f, 0x27, 0xcd, 0xdf, 0x8c, 0xe3, 0x6c, 0xda, 0x70, 0xef, 0xf4, 0x37, 0x3b, 0xbb, 0xac, 0x49, 0x43, 0xaa, 0xb3, 0xb, 0x50, 0xf, 0x20, 0x9b, 0xfd, 0x96, 0xcd, 0xb6, 0x4c, 0x40, 0xd0, 0x20, 0x2c, 0xac, 0x4b, 0xb3, 0x3, 0xc0, 0x36, 0x80, 0x5b, 0x41, 0x6c, 0x75, 0x5b, 0xb8, 0xed, 0xb0, 0x71, 0xff, 0xbb, 0x83, 0xc6, 0x6c, 0x26, 0x9d, 0x65, 0x74, 0xd2, 0x4f, 0x6e, 0x5c, 0x74, 0xc5, 0xba, 0xce, 0x2e, 0x7b, 0xad, 0xf0, 0x4f, 0xdf, 0x3, 0xf4, 0x9f, 0x38, 0xb7, 0x5b, 0x76, 0xd7, 0x7, 0x2f, 0xcb, 0xda, 0x3, 0xc8, 0x42, 0x94, 0x48, 0x6a, 0x15, 0x9f, 0x24, 0x0, 0xbe, 0x43, 0xe3, 0xfc, 0xc1, 0x49, 0x37, 0x4d, 0xdd, 0xf8, 0x8b, 0x2b, 0xff, 0xde, 0xd9, 0x75, 0xa8, 0x5, 0x76, 0x2b, 0x6, 0xe8, 0x37, 0x7e, 0xf6, 0x18, 0xeb, 0xb6, 0x9c, 0x6, 0x69, 0xf, 0x1a, 0xf3, 0xc1, 0x1f, 0xef, 0xbb, 0xe6, 0xdb, 0xb5, 0xa4, 0x37, 0xf2, 0x9a, 0xa5, 0xdc, 0xb2, 0x69, 0xe5, 0x69, 0xca, 0xec, 0xf8, 0xa5, 0xa4, 0x26, 0x48, 0xf2, 0x29, 0x8c, 0x82, 0x7b, 0x40, 0x3e, 0xae, 0xfc, 0x5f, 0x41, 0x82, 0x4d, 0x37, 0xf5, 0x18, 0xb7, 0xd7, 0xc1, 0xc3, 0x1f, 0xfe, 0xfd, 0x4f, 0x3e, 0xa3, 0x2a, 0x8b, 0xd0, 0xe9, 0x50, 0xf7, 0xc, 0x70, 0xf8, 0x39, 0xb3, 0x3e, 0x9, 0xb9, 0xa7, 0x48, 0xf6, 0x70, 0xb9, 0xd9, 0xd1, 0x90, 0x3b, 0xd2, 0x2b, 0x39, 0x9b, 0x4d, 0xaa, 0x69, 0xfa, 0x1f, 0xef, 0xbb, 0xfa, 0x8e, 0x5a, 0xd2, 0x3f, 0x6c, 0xdc, 0x8f, 0x9f, 0x91, 0xcd, 0x8c, 0x2, 0xe9, 0xe4, 0x43, 0x3, 0x7a, 0xc7, 0x80, 0x4, 0x80, 0xbb, 0x9c, 0x74, 0xd3, 0x77, 0xdd, 0xcc, 0xce, 0x1f, 0xbc, 0xfc, 0xd0, 0xd7, 0x6d, 0x67, 0xe3, 0xa9, 0x5a, 0xa8, 0x5b, 0x19, 0xa0, 0xdf, 0xf8, 0xd9, 0x47, 0x42, 0xee, 0x51, 0x72, 0x5b, 0x3e, 0x6b, 0xdd, 0xcc, 0x69, 0x0, 0xf6, 0xf4, 0x8, 0xe3, 0x75, 0xc3, 0x92, 0x1a, 0x6d, 0x66, 0xd7, 0x8f, 0xfa, 0x8d, 0x9f, 0xf5, 0xe7, 0x97, 0x7e, 0x71, 0xe5, 0xf3, 0x55, 0xe5, 0x31, 0xe1, 0xc6, 0x83, 0xdc, 0x5d, 0x5b, 0x46, 0x3, 0x7e, 0xb3, 0xce, 0x51, 0xbd, 0x74, 0xbb, 0xf0, 0x9b, 0xbb, 0x23, 0xd9, 0x23, 0x59, 0xf7, 0x4d, 0xa8, 0x34, 0xd4, 0x1d, 0x3, 0xf4, 0x3b, 0x67, 0xf6, 0x20, 0xc0, 0x1d, 0x65, 0xb3, 0xcd, 0x67, 0xc9, 0xcd, 0x9c, 0xa, 0x9f, 0x1a, 0xfe, 0xd8, 0x5b, 0xd0, 0x15, 0xb, 0xda, 0xcf, 0x66, 0x9a, 0x7f, 0xd8, 0x7f, 0xc2, 0x9c, 0xb1, 0x1b, 0x17, 0x4d, 0x7f, 0xa7, 0x92, 0x7c, 0xe, 0xff, 0xc2, 0xd, 0x69, 0x58, 0x77, 0x1c, 0x40, 0x17, 0x84, 0x3, 0x54, 0x48, 0x4a, 0xd2, 0x91, 0x75, 0x7, 0x38, 0x4d, 0x7b, 0xef, 0xd6, 0x2c, 0x50, 0x37, 0xc, 0xd0, 0x7f, 0xc2, 0x8d, 0x7, 0x3, 0x1a, 0x65, 0x33, 0xcd, 0x97, 0x58, 0x9b, 0x3d, 0x5, 0x0, 0x40, 0xe6, 0x5a, 0xa6, 0x82, 0x47, 0xbf, 0x13, 0x0, 0x21, 0x82, 0x90, 0xdc, 0xcf, 0xc8, 0x66, 0xbe, 0xd6, 0x6f, 0xfc, 0xac, 0xef, 0xbc, 0xf4, 0x8b, 0x2b, 0x77, 0xb5, 0x35, 0x3f, 0x93, 0x6a, 0xb4, 0x36, 0xb3, 0xe3, 0x7c, 0x1a, 0xe3, 0x8f, 0xe9, 0xe1, 0x21, 0x3f, 0x4, 0xe1, 0xd1, 0x40, 0x80, 0x24, 0xd1, 0x90, 0x10, 0x8c, 0x64, 0xf, 0x31, 0xa9, 0xa6, 0x2e, 0x6, 0x48, 0x2, 0x64, 0xb3, 0xdf, 0xb0, 0xd9, 0xe6, 0x2f, 0x1, 0x41, 0x6b, 0xf7, 0x9, 0x2f, 0x91, 0x1e, 0x23, 0x78, 0x40, 0x9f, 0x8, 0x34, 0x41, 0x90, 0x75, 0x33, 0xbb, 0xfe, 0xaf, 0xd3, 0xd0, 0x7d, 0xd9, 0x61, 0xe3, 0x7e, 0x78, 0xdf, 0x9f, 0x1e, 0xb8, 0x2e, 0x72, 0x3c, 0x1e, 0x30, 0xe9, 0xce, 0x94, 0xdb, 0xb2, 0x7d, 0x1f, 0xd2, 0xf4, 0x0, 0x6c, 0x1a, 0xb2, 0xbd, 0x65, 0xdd, 0xcf, 0x0, 0x30, 0x0, 0x41, 0x42, 0x91, 0xbd, 0x0, 0xb, 0xef, 0x49, 0x52, 0x9e, 0x7a, 0x40, 0x48, 0x7b, 0xee, 0x6, 0x62, 0x54, 0x49, 0xa8, 0x1b, 0x6, 0xb0, 0xd9, 0xcc, 0x39, 0x7e, 0x6b, 0xb, 0xda, 0x5c, 0xa8, 0xeb, 0x2f, 0x4, 0x7a, 0x81, 0x41, 0x3c, 0x3, 0x10, 0x36, 0xbb, 0xeb, 0xc7, 0x4e, 0x43, 0x8f, 0xd7, 0xfa, 0x4f, 0xb8, 0x71, 0x3, 0x68, 0xf6, 0x7, 0xb0, 0x37, 0x81, 0x34, 0x8, 0xca, 0xda, 0x46, 0xb7, 0x65, 0xeb, 0x27, 0x20, 0x3b, 0xd8, 0x75, 0xdd, 0xbe, 0x4, 0xf6, 0x83, 0x74, 0x30, 0x80, 0x40, 0xf0, 0x53, 0x25, 0x43, 0x0, 0xfd, 0xff, 0x22, 0xad, 0xcd, 0xee, 0xac, 0x59, 0x3, 0xe8, 0x7f, 0xee, 0x2d, 0xdd, 0x36, 0xde, 0x73, 0xe9, 0x8e, 0xce, 0xc0, 0x7b, 0xdd, 0x30, 0x0, 0x8d, 0xf3, 0xb2, 0xac, 0x3e, 0xe, 0xc0, 0x20, 0x4e, 0xc, 0xf, 0xc8, 0x1e, 0x3c, 0xf9, 0x8a, 0x3a, 0x49, 0x40, 0xf6, 0x60, 0xeb, 0xb6, 0xfc, 0x1f, 0xd2, 0xac, 0xb3, 0xb6, 0xf9, 0x24, 0x78, 0xad, 0xbb, 0x9b, 0x17, 0xb5, 0x90, 0x46, 0xca, 0x25, 0x46, 0x85, 0x52, 0x8e, 0xcb, 0xa7, 0x30, 0xdc, 0x4a, 0xa0, 0x21, 0xe8, 0x7d, 0xed, 0x36, 0x6f, 0xad, 0x89, 0x1, 0x8e, 0x38, 0x77, 0x6e, 0x5f, 0xeb, 0xb6, 0x9c, 0xde, 0x7f, 0xc2, 0x9c, 0xe7, 0x36, 0x2e, 0x9a, 0xbe, 0xb6, 0xc3, 0xf1, 0xde, 0xd1, 0x19, 0xc6, 0x41, 0xff, 0x9, 0xb3, 0xbf, 0x67, 0x33, 0xcd, 0x5f, 0x96, 0x6c, 0xcf, 0x70, 0xab, 0x8f, 0xa3, 0x43, 0x41, 0xb8, 0x4, 0x90, 0x16, 0x80, 0x41, 0xd8, 0x78, 0x43, 0x6, 0xef, 0x8a, 0xf4, 0x7a, 0x9, 0xf2, 0xfa, 0x7d, 0xff, 0xb1, 0x40, 0x0, 0x60, 0x51, 0xde, 0xc5, 0xf9, 0x11, 0x39, 0x23, 0x51, 0xd6, 0x69, 0xdc, 0xf3, 0x18, 0xc9, 0xbe, 0x61, 0x9c, 0x86, 0xad, 0x1b, 0xee, 0x9e, 0xba, 0xb5, 0xad, 0xf5, 0x3d, 0xe2, 0xbc, 0x5b, 0xbb, 0xc1, 0xba, 0x9f, 0xc8, 0x66, 0xb6, 0x2f, 0x86, 0x74, 0x28, 0x80, 0xb7, 0x4d, 0xba, 0xdb, 0xb9, 0xc6, 0x38, 0x4b, 0x37, 0xdc, 0x73, 0x59, 0x4b, 0x47, 0xe1, 0xbd, 0x6e, 0x18, 0xa0, 0xdf, 0x84, 0x39, 0xa7, 0x2b, 0xb3, 0x73, 0x2e, 0xa0, 0x3, 0x81, 0x60, 0x9c, 0x6f, 0x73, 0xb7, 0x1c, 0xc8, 0xb, 0x20, 0xf3, 0xad, 0x3a, 0xf4, 0x9c, 0x78, 0x3d, 0x95, 0x37, 0x13, 0x92, 0xc6, 0xf9, 0xb, 0x9d, 0xf4, 0x22, 0x63, 0x52, 0xb7, 0x3, 0x78, 0x3d, 0xdb, 0xbc, 0x6d, 0xe7, 0x9f, 0x1e, 0xf8, 0x6a, 0xac, 0x6d, 0xa0, 0xff, 0x84, 0x39, 0xfb, 0x4b, 0xee, 0x14, 0x9b, 0x69, 0xfe, 0x41, 0x90, 0x9a, 0x2f, 0x5b, 0xc0, 0xa4, 0x9b, 0xfe, 0xcd, 0x18, 0xe7, 0x96, 0xd, 0xf7, 0x4e, 0x7f, 0xb7, 0x23, 0xf0, 0x5e, 0x37, 0xc, 0xd0, 0xff, 0xdc, 0x9b, 0x3f, 0x65, 0x5b, 0xb6, 0x3f, 0x21, 0xd9, 0x4f, 0x41, 0x8, 0x24, 0xed, 0xb6, 0x95, 0x56, 0x65, 0xde, 0x25, 0x55, 0x53, 0x3f, 0xad, 0x9c, 0x26, 0xe0, 0x3f, 0x14, 0xf4, 0x1e, 0x26, 0x75, 0x3f, 0x9d, 0x86, 0x9f, 0xd2, 0x49, 0xaf, 0xec, 0xd1, 0xfb, 0x88, 0x6d, 0xc5, 0x56, 0xc2, 0xfe, 0x13, 0x6f, 0x3a, 0xcc, 0x66, 0x9b, 0xe7, 0x40, 0xee, 0x18, 0x0, 0x5e, 0xaf, 0x15, 0x24, 0x3, 0x8, 0x24, 0x8d, 0xd3, 0x70, 0x13, 0x4c, 0xea, 0xfb, 0x1b, 0xef, 0x9d, 0xf6, 0x6a, 0x7b, 0xe3, 0xdd, 0xb4, 0x77, 0x6, 0x6d, 0x85, 0x8d, 0xf7, 0x5c, 0xf6, 0xa, 0x69, 0x9a, 0x3d, 0x51, 0x3b, 0xc0, 0x26, 0xfd, 0xb, 0xa5, 0x9, 0x58, 0xaa, 0xa3, 0x28, 0xf7, 0x6d, 0x25, 0xe0, 0xa7, 0x95, 0x27, 0x3e, 0x94, 0xcf, 0xc0, 0xd3, 0x26, 0xad, 0x9b, 0x3d, 0xdb, 0x6d, 0xd9, 0xf1, 0x8c, 0x6d, 0xd9, 0xfe, 0xdc, 0x96, 0xd7, 0x57, 0x9f, 0x11, 0xfe, 0xfc, 0x88, 0x73, 0xe7, 0x9e, 0xec, 0xb6, 0xec, 0xd8, 0x28, 0xeb, 0x8e, 0xf1, 0xbe, 0xf5, 0xf1, 0x2f, 0x88, 0xa0, 0xcf, 0x48, 0xb4, 0xd6, 0x6d, 0x99, 0x66, 0xb3, 0x2d, 0xf3, 0xfb, 0x4f, 0x9c, 0x7b, 0x5c, 0x7b, 0xe3, 0xbd, 0x6e, 0x7a, 0x0, 0x0, 0xe8, 0x77, 0xce, 0xcf, 0x9e, 0xb3, 0x6e, 0xe6, 0x78, 0x20, 0x5a, 0xfa, 0xaf, 0x3f, 0x8, 0x86, 0x81, 0x7c, 0x61, 0xfd, 0x91, 0x41, 0x64, 0xa0, 0x5a, 0x38, 0x2b, 0x4c, 0xba, 0xf1, 0x3b, 0x4, 0x7a, 0x66, 0x5b, 0x76, 0x2c, 0xf4, 0xf8, 0xbb, 0xd5, 0xb0, 0x54, 0xd0, 0x4f, 0x5, 0x6a, 0x26, 0x8d, 0x79, 0x8d, 0x4e, 0xd3, 0xbf, 0xbd, 0xb4, 0x68, 0xda, 0x5d, 0xed, 0x55, 0x3, 0xa7, 0xf6, 0x24, 0x92, 0x83, 0x8f, 0xf, 0x1c, 0x9b, 0x2, 0x34, 0x9c, 0x40, 0x8f, 0x78, 0xcb, 0x4c, 0x3d, 0x41, 0xd0, 0x45, 0xf9, 0xe0, 0xcb, 0x2d, 0xbe, 0xd5, 0x92, 0x14, 0x24, 0xa2, 0xb7, 0x6c, 0x76, 0x82, 0xac, 0x7b, 0x16, 0x29, 0x27, 0x50, 0x21, 0x1, 0x85, 0xba, 0xba, 0x5c, 0x37, 0xe2, 0xdb, 0xbb, 0x72, 0x36, 0xb0, 0xbd, 0x61, 0xdd, 0x13, 0xf7, 0x3f, 0xf2, 0xec, 0x96, 0x77, 0xd6, 0x2f, 0xfe, 0x5d, 0x7b, 0xd4, 0xa0, 0x6e, 0x86, 0x0, 0xaf, 0x34, 0xce, 0x12, 0x0, 0xef, 0x7b, 0xf7, 0x86, 0xf9, 0x21, 0x60, 0x37, 0xb9, 0x8c, 0xf1, 0x94, 0xc3, 0x80, 0x71, 0x69, 0x40, 0xd2, 0x90, 0x6c, 0x0, 0xd4, 0x0, 0x18, 0x79, 0x17, 0x8, 0x18, 0x45, 0xa4, 0xe1, 0x31, 0x81, 0x31, 0xfe, 0x7b, 0x3, 0x40, 0xfb, 0x65, 0x33, 0xbb, 0xbe, 0xde, 0x6f, 0xc2, 0x9c, 0xaf, 0xb4, 0x7, 0xca, 0xeb, 0xa6, 0x7, 0xe8, 0x3f, 0x71, 0xee, 0x4, 0x4f, 0x38, 0x52, 0x3f, 0xf8, 0xb6, 0x9e, 0xd0, 0xe8, 0xba, 0xfb, 0x5c, 0x44, 0xae, 0xfd, 0xe7, 0xee, 0x1, 0xbf, 0x67, 0x80, 0x7f, 0x11, 0xa1, 0x77, 0x45, 0xdf, 0x93, 0xa1, 0x74, 0x82, 0x1e, 0x61, 0x4f, 0xca, 0xe, 0xea, 0x35, 0xe8, 0x2c, 0xe7, 0x9d, 0xf5, 0x8b, 0x97, 0x26, 0x89, 0xf7, 0xba, 0x30, 0x4, 0xf5, 0x9f, 0x78, 0xd3, 0x2c, 0x9b, 0xdd, 0x75, 0x36, 0xa0, 0x3e, 0xde, 0x18, 0x69, 0x24, 0x28, 0x6c, 0x0, 0xde, 0x1d, 0x81, 0x31, 0xf7, 0x6d, 0x6, 0x6f, 0x14, 0xf4, 0x70, 0x21, 0xb0, 0x1b, 0xc8, 0xee, 0x49, 0x17, 0xb2, 0xd3, 0x19, 0xe0, 0xf0, 0x73, 0x66, 0x3d, 0xad, 0x6c, 0xcb, 0x48, 0x0, 0xdd, 0xbd, 0x39, 0x1e, 0xdf, 0x74, 0x53, 0xef, 0xc3, 0x7f, 0x87, 0x40, 0xce, 0xe4, 0xd, 0x1a, 0x67, 0xb5, 0x71, 0xd2, 0xd7, 0x27, 0x9d, 0x43, 0x62, 0xc, 0x70, 0xc4, 0xb9, 0x73, 0x7f, 0x24, 0x61, 0x1b, 0x8d, 0xf3, 0xd3, 0xd, 0x77, 0x4f, 0x7d, 0xbf, 0x5c, 0xfc, 0x81, 0x93, 0xee, 0xd8, 0x23, 0xdb, 0xb2, 0xe3, 0x31, 0xd9, 0xec, 0x9, 0x5e, 0x3f, 0x97, 0x13, 0x80, 0xbb, 0x88, 0xef, 0x83, 0x6f, 0xc0, 0x24, 0xe9, 0xbc, 0x63, 0x9c, 0xf4, 0xe2, 0x75, 0x3f, 0xbf, 0x38, 0x71, 0xb, 0x61, 0x22, 0x98, 0x3e, 0xe2, 0xbc, 0x5b, 0x47, 0xd8, 0xcc, 0xce, 0x7, 0x25, 0x75, 0xa3, 0x71, 0xd6, 0x80, 0xe6, 0x75, 0xd2, 0xfc, 0x99, 0xc6, 0x99, 0xb7, 0xe1, 0xee, 0xa9, 0x7f, 0x2e, 0x8e, 0xdf, 0xff, 0xdc, 0x5b, 0xe, 0x95, 0xdb, 0x72, 0x87, 0x6c, 0x76, 0x14, 0xe9, 0xab, 0xc2, 0x5e, 0x4d, 0xe1, 0x49, 0xc7, 0x51, 0xc5, 0x8c, 0x33, 0xb9, 0x87, 0xe7, 0x85, 0x54, 0xe2, 0x9b, 0x62, 0x3, 0x6f, 0xb9, 0xb4, 0x63, 0xb5, 0xb4, 0x88, 0xf0, 0xa8, 0xef, 0x2a, 0x29, 0x6f, 0xeb, 0x6f, 0x72, 0xbe, 0x67, 0x0, 0x41, 0xe7, 0x91, 0x74, 0xd3, 0x9e, 0xe3, 0xd7, 0x2e, 0x98, 0xb2, 0xb3, 0x1a, 0xfa, 0x94, 0x82, 0x9a, 0x19, 0xe0, 0x88, 0xf3, 0xe7, 0xf5, 0x50, 0x76, 0xc7, 0xc3, 0xb2, 0xee, 0x71, 0x80, 0x42, 0x5a, 0x85, 0xd9, 0x42, 0x63, 0xd6, 0x80, 0xce, 0x4a, 0x1a, 0xe7, 0x77, 0x26, 0x95, 0x7e, 0x74, 0xdd, 0x82, 0x29, 0x1f, 0x1c, 0x71, 0xfe, 0x6d, 0x43, 0x6c, 0x66, 0xd7, 0x4d, 0x90, 0x7b, 0x54, 0xa8, 0x18, 0xc2, 0x6e, 0x3e, 0xe0, 0x27, 0xa, 0xca, 0xd9, 0x1c, 0x9, 0x3a, 0xaf, 0x9a, 0x54, 0xc3, 0xbf, 0x6f, 0xb8, 0xfb, 0xd2, 0x85, 0xed, 0x91, 0x55, 0xcd, 0x43, 0x80, 0xdc, 0xe6, 0x1f, 0xcb, 0xba, 0xbe, 0xf1, 0xc6, 0x84, 0xed, 0xf0, 0x7b, 0xc9, 0xba, 0xa3, 0x0, 0x77, 0x94, 0xac, 0x73, 0x86, 0xac, 0x3b, 0xae, 0xff, 0xc4, 0xb9, 0x7f, 0x57, 0xb6, 0x79, 0x38, 0x64, 0x8f, 0xf2, 0x6c, 0xf4, 0xb9, 0x7e, 0xdf, 0x17, 0xf8, 0xca, 0xb5, 0xe0, 0xb6, 0x98, 0xf5, 0x2b, 0x69, 0x95, 0xc5, 0x3e, 0x9f, 0xe1, 0xfb, 0x72, 0x71, 0xdb, 0x52, 0xd6, 0xf0, 0x77, 0x71, 0xe5, 0x2c, 0xec, 0x11, 0x3c, 0xe9, 0x97, 0xb9, 0xf9, 0x26, 0x1a, 0xe7, 0xa9, 0xc6, 0x6e, 0x3d, 0xef, 0xa9, 0x95, 0x4e, 0x71, 0x50, 0x53, 0xab, 0x1b, 0x70, 0xfe, 0x6d, 0x5f, 0xb0, 0x99, 0x9d, 0xbf, 0x90, 0x37, 0x8b, 0x9f, 0xa3, 0x62, 0x48, 0x82, 0x97, 0x82, 0x3c, 0xa, 0x3c, 0xee, 0x68, 0x25, 0x85, 0xad, 0xfd, 0x5d, 0xad, 0x3f, 0x4, 0x9e, 0x25, 0x90, 0x34, 0x4e, 0xea, 0x45, 0x3a, 0xd, 0xd7, 0xad, 0xbf, 0xeb, 0xe2, 0xe7, 0xda, 0x2b, 0xaf, 0xaa, 0x7b, 0x80, 0x81, 0x93, 0xee, 0x38, 0xd8, 0xcd, 0xec, 0xfc, 0xbe, 0x2, 0xa3, 0x95, 0xef, 0x58, 0xc5, 0x90, 0xff, 0x4e, 0xce, 0x98, 0x27, 0x8, 0x26, 0x4f, 0x64, 0x8f, 0xf8, 0x7e, 0xb7, 0x5f, 0xcd, 0x5c, 0x5d, 0x12, 0xf3, 0x7b, 0xd5, 0xb0, 0x5e, 0xa9, 0x6f, 0x8a, 0x1c, 0xc7, 0x2b, 0xae, 0x47, 0xe1, 0x77, 0xde, 0x9d, 0x71, 0xee, 0x69, 0x4f, 0xe2, 0x3, 0x55, 0x5a, 0x2, 0x7, 0x4c, 0x9a, 0xd7, 0x60, 0x6d, 0xf6, 0x5a, 0x59, 0xfb, 0x69, 0x7f, 0xf2, 0xc6, 0x9b, 0x5d, 0x2f, 0x12, 0xdf, 0x73, 0xcf, 0x45, 0xe3, 0xbb, 0x37, 0xe7, 0x91, 0x73, 0xac, 0xa9, 0x1c, 0x2a, 0xfc, 0x46, 0x2a, 0xe8, 0x9f, 0x15, 0xfc, 0x13, 0x50, 0xe0, 0x3e, 0x20, 0x95, 0x49, 0xa8, 0xd4, 0xc4, 0x12, 0x8b, 0x7e, 0x2b, 0xad, 0x7, 0x8b, 0x5f, 0x30, 0x5e, 0x8e, 0x4c, 0x10, 0x2a, 0x66, 0x80, 0x81, 0x17, 0xce, 0x77, 0x20, 0x3b, 0xda, 0x66, 0x5b, 0xae, 0xcd, 0x9b, 0xc1, 0xc3, 0x53, 0x76, 0x9d, 0x7b, 0x29, 0x34, 0x43, 0xe7, 0xdf, 0xfb, 0x73, 0xed, 0x1e, 0x81, 0x25, 0xd0, 0x37, 0x34, 0xe4, 0xae, 0xe0, 0x1d, 0xa3, 0x6d, 0x73, 0xf2, 0xd3, 0xca, 0xdd, 0xb7, 0xff, 0xe5, 0x33, 0xa9, 0xdc, 0x2f, 0xc, 0x98, 0x74, 0xc7, 0xf1, 0xed, 0xc9, 0x0, 0x15, 0xb7, 0xbf, 0x41, 0x17, 0xce, 0xef, 0x93, 0x6d, 0xd9, 0xf9, 0x0, 0xac, 0x3b, 0xd2, 0xeb, 0xc0, 0xe3, 0x54, 0xb7, 0x4a, 0x8a, 0x50, 0x4a, 0x65, 0x2, 0x4a, 0xb, 0x5c, 0x39, 0xc8, 0x77, 0xa2, 0xa, 0xd4, 0xa7, 0x82, 0xb4, 0x3e, 0x0, 0xf9, 0x3e, 0x80, 0x6d, 0x0, 0x76, 0x92, 0xdc, 0x5, 0xd2, 0x42, 0x8, 0xe4, 0x91, 0x14, 0x80, 0x26, 0x9, 0xdd, 0x20, 0xbb, 0xf, 0xa0, 0x5e, 0x90, 0x6f, 0x2a, 0x67, 0x4c, 0x1e, 0x35, 0x6b, 0x2e, 0x11, 0xf5, 0x93, 0xe7, 0x13, 0x0, 0xc2, 0x42, 0x32, 0x34, 0xce, 0x93, 0x26, 0xd5, 0x78, 0xd9, 0xba, 0x85, 0x17, 0xbd, 0x5a, 0x5b, 0x5e, 0xa5, 0x4b, 0xd0, 0x26, 0x18, 0x7c, 0xc5, 0x33, 0xcc, 0x7e, 0xf8, 0xea, 0x19, 0x36, 0xb3, 0xf3, 0x21, 0x0, 0x16, 0x81, 0x12, 0x1f, 0xae, 0x8a, 0xe2, 0x13, 0x2d, 0x18, 0xf2, 0x22, 0x4, 0xe7, 0x3c, 0xef, 0x7, 0xe6, 0xaf, 0xfc, 0x87, 0xad, 0xc8, 0xee, 0x8b, 0x1d, 0xa, 0xd6, 0x8a, 0x84, 0xe6, 0x66, 0xfd, 0x98, 0x2d, 0x34, 0xce, 0x3f, 0x24, 0xbc, 0x4d, 0x9a, 0x4d, 0x30, 0x66, 0x1d, 0xc0, 0x97, 0x48, 0xfe, 0x15, 0xe0, 0x3b, 0x20, 0xdf, 0x23, 0xd4, 0xec, 0x5a, 0x65, 0xd2, 0xe9, 0x86, 0x46, 0xeb, 0x66, 0xba, 0x1, 0xd8, 0xd7, 0x5a, 0xdb, 0x7, 0xd2, 0x0, 0xc9, 0x8e, 0x24, 0x74, 0xb0, 0xa4, 0x8f, 0x1, 0x3a, 0x0, 0xb2, 0xfb, 0x86, 0xab, 0xc2, 0x90, 0xcf, 0x7a, 0x1, 0x33, 0xa8, 0x75, 0x7d, 0xa, 0xe4, 0xfd, 0x8, 0x33, 0x40, 0x41, 0x13, 0xa, 0x3b, 0xc6, 0x7a, 0x35, 0xb2, 0x74, 0x1a, 0xe6, 0x34, 0xef, 0xdc, 0x7e, 0xd5, 0x5f, 0x1e, 0xb8, 0x3a, 0xf1, 0x15, 0x48, 0x15, 0x9, 0x81, 0xee, 0x96, 0xbf, 0xd, 0x92, 0xdb, 0xf2, 0x7d, 0x80, 0xa0, 0x6f, 0xb0, 0xf7, 0xb0, 0x9f, 0x9b, 0xb7, 0x40, 0xde, 0x23, 0xab, 0x88, 0x82, 0xb9, 0xa7, 0xd0, 0xff, 0x1c, 0xc5, 0x43, 0x2c, 0xc3, 0xa8, 0xc6, 0xdb, 0x2a, 0x2c, 0xb0, 0x93, 0x4, 0x62, 0x86, 0xfc, 0x29, 0x78, 0x80, 0x7c, 0xf, 0x30, 0x9b, 0x4, 0xb3, 0x96, 0x4e, 0x6a, 0x71, 0x3a, 0xd5, 0xf0, 0xe0, 0xea, 0x3b, 0x27, 0x95, 0x33, 0xa0, 0xb4, 0x0, 0xd8, 0xa, 0xe0, 0x2d, 0x0, 0x1b, 0x1, 0x3c, 0x15, 0xbc, 0x18, 0x30, 0xe9, 0xce, 0x7e, 0xb2, 0x99, 0x89, 0x80, 0x8e, 0x83, 0xec, 0xa1, 0x92, 0x3d, 0x8, 0x42, 0x63, 0xa0, 0xc1, 0x7a, 0x79, 0x2a, 0x50, 0x79, 0x42, 0x66, 0xcc, 0xbc, 0xab, 0x40, 0x58, 0xd, 0xca, 0xd7, 0x3b, 0xa8, 0x17, 0xfc, 0x70, 0xbf, 0x4a, 0xfe, 0xa, 0x88, 0xc0, 0x30, 0x26, 0xc1, 0x48, 0xee, 0x99, 0x4d, 0xdd, 0xf7, 0x5a, 0xe, 0xe0, 0xf6, 0xa4, 0x19, 0xa0, 0xa2, 0x1e, 0x60, 0xe0, 0x5, 0x77, 0x9e, 0xea, 0x66, 0x76, 0x3e, 0x26, 0xc9, 0x84, 0xb1, 0xdf, 0x91, 0x10, 0xb2, 0x15, 0xcb, 0xd7, 0x32, 0x7c, 0xe, 0xe0, 0xfb, 0x24, 0xdf, 0xa2, 0x49, 0xdd, 0x6c, 0x1c, 0x67, 0xf6, 0xda, 0x5, 0x53, 0xda, 0xbc, 0x48, 0xa4, 0xad, 0x30, 0x60, 0xd2, 0xbc, 0x43, 0x21, 0xf7, 0xbb, 0x92, 0x1d, 0x29, 0xeb, 0x7e, 0x2, 0x52, 0x93, 0xbf, 0x4c, 0x2d, 0xd4, 0x10, 0x12, 0xad, 0x6b, 0xde, 0xa7, 0x91, 0xce, 0x12, 0xa6, 0xf6, 0x38, 0x75, 0xfd, 0xc2, 0xb, 0x9a, 0x93, 0xcc, 0xa3, 0x32, 0x6, 0x98, 0x7c, 0x57, 0xa3, 0xcd, 0x36, 0x9f, 0x23, 0xb7, 0xe5, 0x4e, 0x40, 0x4e, 0xe0, 0x80, 0xd9, 0x51, 0xf6, 0xfb, 0x80, 0xf8, 0x61, 0x84, 0x4b, 0xd8, 0x49, 0x60, 0x87, 0x49, 0x37, 0x7e, 0x7b, 0xdd, 0xc2, 0x8b, 0x6e, 0x6c, 0xf7, 0x42, 0x0, 0x18, 0x30, 0xf9, 0xee, 0x94, 0x32, 0xdb, 0xe7, 0xca, 0xba, 0xa7, 0x1, 0xda, 0x3f, 0xb7, 0x78, 0x25, 0xef, 0x26, 0x98, 0x38, 0x42, 0x24, 0xb9, 0x34, 0xa9, 0x7b, 0x36, 0xdc, 0x3d, 0xf5, 0x82, 0x24, 0xd3, 0xad, 0x5c, 0x8, 0x9c, 0xbc, 0x70, 0xf, 0xeb, 0x66, 0x2f, 0xb3, 0xd9, 0xe6, 0x19, 0xf0, 0xc7, 0x5b, 0x4f, 0x14, 0xc8, 0x69, 0x57, 0x25, 0xd2, 0x2c, 0x67, 0x15, 0xb, 0xc7, 0x29, 0xf2, 0xe5, 0xf7, 0xa7, 0x46, 0xe1, 0x59, 0x19, 0xe1, 0x79, 0xd2, 0x3a, 0x5b, 0x61, 0x9c, 0xdb, 0x68, 0x52, 0x5f, 0x5f, 0xbf, 0x70, 0x72, 0x87, 0xb9, 0x52, 0x7, 0x30, 0x70, 0xf2, 0xcf, 0xbb, 0xb9, 0x2d, 0xdb, 0x97, 0x41, 0xb6, 0x2f, 0xc0, 0x3d, 0x2, 0xe7, 0x64, 0x32, 0xf0, 0x48, 0xe, 0x44, 0xa4, 0x52, 0xe, 0xe6, 0xc5, 0x78, 0x88, 0x14, 0x72, 0x25, 0x89, 0xa0, 0x59, 0xed, 0xa4, 0x1a, 0x3f, 0xb7, 0x6e, 0xe1, 0x94, 0xb7, 0xc2, 0x2f, 0x47, 0x5e, 0xb3, 0x94, 0x3b, 0xdf, 0x7b, 0xc5, 0xd0, 0x69, 0xa0, 0xcd, 0x6c, 0x27, 0x4d, 0x9a, 0x0, 0xdd, 0x75, 0xb, 0x2e, 0x70, 0xcb, 0xd5, 0xa1, 0x2a, 0x2e, 0x1d, 0x34, 0xf9, 0xe7, 0x7b, 0x58, 0xb7, 0xe5, 0xdb, 0x36, 0xdb, 0xf2, 0x75, 0x2, 0x26, 0x34, 0xf0, 0x33, 0x69, 0x57, 0xae, 0x70, 0x97, 0xf, 0x8f, 0xf8, 0x2, 0x0, 0x63, 0xcc, 0x66, 0xa6, 0x1a, 0xc7, 0xae, 0x5b, 0x30, 0x39, 0x51, 0x7, 0x89, 0x6a, 0x60, 0xc0, 0xa4, 0x79, 0xd7, 0xd9, 0x6c, 0xf3, 0x37, 0x0, 0xed, 0xcb, 0xb0, 0x47, 0x50, 0x72, 0x26, 0xab, 0x80, 0xe9, 0x41, 0x93, 0x7a, 0x7e, 0xc3, 0xdd, 0x53, 0x8f, 0x1f, 0x34, 0xe5, 0xee, 0x46, 0x9b, 0x6d, 0xa6, 0x71, 0x1a, 0x9a, 0x24, 0xb7, 0x2f, 0xa4, 0x8f, 0x9, 0xea, 0x49, 0xa0, 0x87, 0xa4, 0x3, 0x69, 0x9c, 0x17, 0x20, 0xf7, 0xf9, 0x75, 0xb, 0x2f, 0xca, 0x94, 0x4a, 0xbc, 0xea, 0xc2, 0xd, 0xbc, 0x70, 0x61, 0x83, 0x6c, 0xf6, 0xdf, 0xe5, 0xb6, 0x7c, 0x13, 0x64, 0xb0, 0x20, 0x23, 0xbf, 0xd8, 0x22, 0x49, 0x8, 0x98, 0x4a, 0x82, 0xa4, 0xac, 0x71, 0x52, 0xcf, 0x3b, 0xd, 0xdd, 0xce, 0x5e, 0x33, 0xef, 0xbc, 0xf, 0x92, 0xcf, 0xac, 0x5a, 0x7c, 0x2c, 0x18, 0x63, 0xb3, 0xbb, 0xe6, 0xc9, 0xda, 0x83, 0x3d, 0x43, 0x17, 0x3, 0x49, 0xbe, 0xf6, 0x6, 0x91, 0x5f, 0xdc, 0x2, 0x1, 0xbb, 0x48, 0xf3, 0x1a, 0xa4, 0xde, 0x80, 0x7a, 0x2, 0x28, 0xd2, 0x81, 0x82, 0x7b, 0xae, 0x34, 0xa9, 0xc6, 0xeb, 0xd6, 0x2d, 0x9c, 0xfc, 0x54, 0xa9, 0xa4, 0xab, 0xf6, 0x9, 0x5c, 0xb7, 0xe0, 0x82, 0x16, 0xa7, 0xb1, 0xfb, 0x7f, 0x99, 0x54, 0xe3, 0x75, 0x4, 0xb2, 0x8, 0x69, 0x33, 0x89, 0x9b, 0x45, 0x7c, 0x24, 0x90, 0xcc, 0x1a, 0x27, 0xfd, 0xf0, 0xfa, 0xbb, 0x2e, 0x19, 0x53, 0x4f, 0xc4, 0xf7, 0xf0, 0x71, 0xe1, 0xd3, 0x26, 0xd5, 0x78, 0xa, 0xe9, 0x6c, 0x40, 0x41, 0xd9, 0x6b, 0x77, 0x6d, 0x43, 0xe1, 0x6f, 0x23, 0x64, 0xf, 0x3, 0xb4, 0x17, 0x8a, 0xde, 0x15, 0xde, 0x6b, 0x88, 0xa0, 0x7f, 0x29, 0x57, 0xee, 0x9a, 0x9c, 0x42, 0xd7, 0xdc, 0x3e, 0x3e, 0xeb, 0x34, 0x74, 0x9f, 0x69, 0x52, 0x4d, 0x53, 0x4, 0xbe, 0xdf, 0x76, 0x8b, 0x60, 0x18, 0x4a, 0x85, 0x31, 0xc7, 0xd6, 0x5e, 0xbf, 0x9f, 0x7a, 0x72, 0xfd, 0x5d, 0x17, 0x9f, 0x95, 0x18, 0xd5, 0x12, 0x86, 0x75, 0xb, 0x26, 0xff, 0xc9, 0x34, 0x34, 0x9d, 0x49, 0xe3, 0x2c, 0xf7, 0x2d, 0x8e, 0xfe, 0xf0, 0x15, 0x26, 0x63, 0x31, 0x59, 0x4b, 0x85, 0x79, 0xcf, 0x7e, 0x7, 0x2b, 0xd2, 0xc8, 0xf3, 0x31, 0xd, 0x2e, 0x8a, 0x34, 0xc1, 0xd4, 0x51, 0x51, 0x47, 0x6c, 0xc, 0x81, 0x4f, 0x7e, 0xea, 0xc2, 0x87, 0x4a, 0xf6, 0x3e, 0x35, 0x7b, 0x5, 0xaf, 0xbe, 0xfd, 0x9c, 0x2c, 0x53, 0xd, 0xf7, 0x93, 0xdc, 0x51, 0x64, 0xa, 0x29, 0x1, 0x51, 0xcc, 0x50, 0x18, 0x26, 0xbf, 0x1f, 0x83, 0xe7, 0x2b, 0x0, 0xe3, 0xa4, 0x9f, 0x6c, 0x49, 0xf7, 0x3a, 0xbd, 0xdd, 0xa8, 0x97, 0x10, 0xac, 0x9b, 0x7f, 0xc1, 0x2b, 0x26, 0xd5, 0x38, 0x85, 0xc6, 0x59, 0x82, 0xfc, 0xec, 0x28, 0xa2, 0x99, 0x1c, 0x65, 0xc2, 0xf2, 0xcf, 0xcc, 0xdb, 0xa9, 0xc3, 0xef, 0x99, 0x7f, 0x95, 0x8b, 0x27, 0x4f, 0x39, 0x12, 0xac, 0xcd, 0x9e, 0xd7, 0x9d, 0x1f, 0x4e, 0x2c, 0x55, 0xde, 0x44, 0xdc, 0xc2, 0x6d, 0x36, 0xd3, 0xf, 0x40, 0xda, 0xa3, 0x17, 0x13, 0x71, 0xe7, 0x26, 0xd, 0x5, 0x58, 0x6f, 0x4a, 0x3c, 0xfd, 0xa8, 0x93, 0x6e, 0x1a, 0xff, 0xf2, 0xbc, 0xd3, 0x77, 0x8b, 0xcd, 0x98, 0xd6, 0xce, 0xbf, 0x60, 0x23, 0x4c, 0x6a, 0x16, 0xe9, 0xbc, 0xec, 0x4d, 0x31, 0x18, 0xc9, 0x53, 0x97, 0x6a, 0xc6, 0x4b, 0x1b, 0x2e, 0x6, 0xb3, 0x6d, 0x90, 0xfa, 0xca, 0xaa, 0x7f, 0xfb, 0x33, 0x80, 0x9b, 0x99, 0x1, 0x70, 0xdf, 0x9a, 0x13, 0x2a, 0x4, 0x1, 0x34, 0x34, 0xce, 0x5a, 0x9a, 0xf4, 0xd, 0x6b, 0xe6, 0x9d, 0xf7, 0x61, 0x7b, 0x11, 0xac, 0x3d, 0x60, 0xfd, 0xc2, 0xc9, 0xf7, 0xc0, 0xa4, 0x6e, 0x7, 0xb9, 0xcd, 0xb7, 0x57, 0x75, 0x98, 0xd1, 0x2c, 0xbc, 0x48, 0x56, 0x50, 0x8f, 0x52, 0x71, 0x6b, 0x66, 0x80, 0x23, 0xa7, 0xdc, 0xb5, 0x17, 0x60, 0x87, 0x92, 0x48, 0xe5, 0xf5, 0xde, 0x44, 0xc4, 0x1e, 0x92, 0xdc, 0x42, 0x93, 0x5a, 0xb0, 0x76, 0xfe, 0xa4, 0xc7, 0x3a, 0xa, 0x79, 0x49, 0x82, 0x31, 0xce, 0x2c, 0x9a, 0xd4, 0xbd, 0xbe, 0x8d, 0x3a, 0x98, 0x25, 0x69, 0xf7, 0x19, 0xc5, 0x80, 0xf8, 0xbe, 0xf6, 0x7c, 0xe4, 0xc0, 0xc9, 0xb, 0x87, 0xc4, 0x96, 0xb1, 0x96, 0xa, 0x1e, 0x7d, 0xed, 0xef, 0x8, 0x72, 0x38, 0x80, 0xb4, 0x97, 0xa1, 0xd7, 0xcd, 0xd5, 0xd2, 0x83, 0xf9, 0x5, 0xf7, 0x2a, 0xe0, 0xa4, 0x1e, 0x0, 0x4d, 0xe2, 0xf6, 0xef, 0x8e, 0x82, 0xb5, 0xf3, 0x27, 0x6d, 0x31, 0x4e, 0xfa, 0x36, 0x18, 0x67, 0x29, 0xfc, 0x3e, 0xd9, 0x9f, 0xe9, 0xab, 0xc, 0x27, 0x11, 0xf7, 0x88, 0x9, 0xf7, 0x47, 0x1, 0xff, 0x3f, 0x1, 0x6b, 0x4f, 0x80, 0x74, 0x76, 0x5c, 0x19, 0x6b, 0x62, 0x80, 0x6d, 0xff, 0xd8, 0x48, 0xeb, 0x66, 0xcf, 0x25, 0x4d, 0xca, 0x2f, 0x51, 0xcd, 0xeb, 0x79, 0x7c, 0x75, 0x9f, 0xa0, 0x79, 0x15, 0x30, 0xf7, 0xaf, 0x9b, 0x3f, 0xa9, 0xa2, 0xdd, 0xbf, 0xea, 0xd, 0xd6, 0xde, 0x79, 0xfe, 0xb, 0x34, 0xa9, 0xc5, 0x0, 0x0, 0x1a, 0x11, 0xac, 0x58, 0x31, 0x64, 0xc4, 0x3d, 0x63, 0xc2, 0x8b, 0xf0, 0x28, 0x92, 0xd, 0x24, 0xfa, 0xc6, 0x95, 0xaf, 0x26, 0x6, 0x58, 0x7f, 0xd7, 0xc5, 0x56, 0x6e, 0x76, 0x2c, 0xa0, 0x34, 0x69, 0xc2, 0x5b, 0xaf, 0x54, 0x7e, 0x91, 0x81, 0xe4, 0xef, 0xf5, 0x22, 0xc6, 0x59, 0x44, 0x63, 0x1e, 0xef, 0x6c, 0x2, 0x26, 0x1, 0xa4, 0x59, 0x4c, 0x93, 0x7a, 0x12, 0xfe, 0x7e, 0x46, 0x28, 0x35, 0xc, 0xb0, 0xb6, 0x6, 0x54, 0x98, 0x16, 0x82, 0x6e, 0xb5, 0xf1, 0xd3, 0xe3, 0xe7, 0x46, 0xd2, 0xba, 0x26, 0x6, 0x18, 0x74, 0xd1, 0x3d, 0x7d, 0x41, 0xf4, 0xf6, 0xc4, 0x76, 0x28, 0xa7, 0xf2, 0x56, 0x39, 0xec, 0xfb, 0x92, 0x3f, 0x49, 0xf3, 0x16, 0x8d, 0xf3, 0xd4, 0xda, 0x3b, 0xcf, 0xdf, 0xde, 0xd9, 0xc4, 0x4b, 0x2, 0xd6, 0xde, 0x79, 0xfe, 0x5a, 0x3a, 0xa9, 0xf9, 0x5e, 0x25, 0x73, 0xe, 0x1f, 0x25, 0xc4, 0x9f, 0xda, 0x2f, 0xcf, 0xaf, 0xc4, 0x50, 0x9e, 0xf5, 0xb4, 0x67, 0x63, 0xb7, 0x1e, 0x7, 0x46, 0x95, 0xad, 0x6a, 0x6, 0x18, 0x7c, 0xc9, 0xfd, 0x29, 0x59, 0x3b, 0xa, 0xa0, 0x4d, 0xa2, 0xe4, 0x81, 0x1, 0x3, 0x20, 0x68, 0x9c, 0xf9, 0x34, 0xce, 0x8a, 0xce, 0x26, 0x5c, 0xa2, 0x40, 0xf3, 0x57, 0xd2, 0xbc, 0x8b, 0x76, 0x76, 0x9f, 0xb, 0x5c, 0xe2, 0xfc, 0x1d, 0x67, 0xe0, 0x73, 0xc3, 0xc1, 0x10, 0x3e, 0x1d, 0x55, 0xac, 0xaa, 0x19, 0x60, 0xf5, 0x6d, 0x67, 0x67, 0x9, 0x7d, 0x26, 0x34, 0xd3, 0x55, 0x93, 0x9a, 0xc3, 0xdc, 0x46, 0x4e, 0x0, 0x4d, 0x6a, 0xd9, 0x9a, 0x3b, 0x26, 0xee, 0xd6, 0x63, 0x7f, 0x31, 0x18, 0x63, 0xd6, 0x9b, 0x54, 0xc3, 0x6c, 0xff, 0x51, 0x91, 0x5b, 0x91, 0xd7, 0x0, 0x85, 0x3e, 0x9, 0x9e, 0x22, 0xe8, 0xd, 0xa5, 0xe6, 0x15, 0x3a, 0xa9, 0xfb, 0x49, 0xf3, 0x46, 0xd4, 0x77, 0x6d, 0xf6, 0x8, 0x1a, 0x74, 0xd1, 0xdd, 0x4d, 0xa4, 0xb3, 0xbf, 0xac, 0xed, 0x2b, 0xe8, 0x40, 0x2, 0x7b, 0x43, 0xee, 0x98, 0xdc, 0x86, 0x8d, 0xc9, 0xa8, 0xb9, 0x24, 0xb9, 0x9, 0xe0, 0xa6, 0x24, 0x91, 0x53, 0xf, 0xb0, 0xfa, 0xf6, 0x9, 0x9b, 0x7, 0x7f, 0x71, 0xd1, 0x43, 0x0, 0xfe, 0x3, 0x0, 0x61, 0x12, 0x30, 0xc1, 0x84, 0x26, 0x80, 0x48, 0x12, 0xb2, 0xca, 0xeb, 0x1, 0x7c, 0x97, 0xc6, 0x79, 0x96, 0x74, 0x16, 0x64, 0x65, 0x16, 0x6f, 0xb8, 0x73, 0x42, 0x36, 0x2a, 0x89, 0x58, 0x6, 0x18, 0x74, 0xd1, 0xbd, 0x3d, 0x21, 0x1d, 0xe, 0xe8, 0x40, 0x90, 0x7b, 0x41, 0xea, 0x25, 0x65, 0x8f, 0x90, 0x75, 0x8f, 0x83, 0xf4, 0xe9, 0x60, 0xe1, 0x7a, 0x68, 0x51, 0x67, 0xad, 0x1e, 0x31, 0x9e, 0x3b, 0x21, 0x53, 0x33, 0x4, 0xac, 0x69, 0x2f, 0x42, 0x74, 0x26, 0x8, 0xb0, 0xa0, 0x79, 0x1f, 0xd2, 0x3e, 0x9, 0x35, 0x97, 0xc0, 0x21, 0xc7, 0x73, 0x8e, 0x1, 0x29, 0x70, 0x33, 0xc9, 0x55, 0x34, 0xa9, 0x87, 0x8c, 0x93, 0x9a, 0xbf, 0xfa, 0xf6, 0xf1, 0x9b, 0x4b, 0x25, 0x11, 0xc9, 0x0, 0x83, 0xbf, 0xb8, 0x68, 0x7f, 0x2b, 0xf7, 0x7c, 0x59, 0x77, 0x3a, 0x64, 0xf, 0x2f, 0xcc, 0x33, 0xa7, 0xb0, 0x7b, 0x4e, 0xa, 0xf0, 0xf9, 0xad, 0xb6, 0x1e, 0x20, 0x67, 0x2c, 0x37, 0x8e, 0xf3, 0xfc, 0x9a, 0x3b, 0x26, 0x6e, 0x4b, 0x8, 0xe7, 0x75, 0x5, 0x92, 0xb6, 0x3, 0xf8, 0x33, 0x80, 0x91, 0x40, 0xa2, 0xdb, 0xd7, 0x51, 0xe0, 0x3f, 0xe8, 0x38, 0xaf, 0x11, 0xe6, 0x41, 0x90, 0x3f, 0x5d, 0x3b, 0xef, 0xdc, 0x36, 0x9, 0xd0, 0x31, 0x3d, 0x80, 0xc6, 0xcb, 0x75, 0xbf, 0x5, 0xe8, 0x63, 0x60, 0xd8, 0xf1, 0xb3, 0xc0, 0x41, 0x23, 0x34, 0x3f, 0xd1, 0x26, 0xb7, 0xed, 0x92, 0x15, 0xc8, 0xff, 0x7c, 0x74, 0xd7, 0x86, 0x93, 0x7c, 0x1b, 0x26, 0xf5, 0x88, 0x6c, 0x76, 0x24, 0x22, 0x5d, 0xca, 0x83, 0xa0, 0x72, 0x4b, 0x90, 0x82, 0x77, 0xca, 0xe1, 0x8d, 0x4e, 0xfa, 0x47, 0xae, 0xab, 0x19, 0x1b, 0x16, 0x9c, 0x57, 0xd6, 0xb, 0x28, 0xc, 0x91, 0x3, 0x91, 0x80, 0x5e, 0x0, 0x1a, 0xbc, 0x42, 0x7b, 0x53, 0x8f, 0x79, 0xe9, 0xd2, 0x14, 0x49, 0xb1, 0x40, 0xe9, 0xe7, 0x8a, 0x6c, 0x1, 0xbb, 0x4, 0x54, 0x54, 0x81, 0xdd, 0x9, 0xd6, 0xdc, 0x31, 0xe1, 0x7d, 0x1a, 0xe7, 0x49, 0x1f, 0x47, 0x11, 0xb6, 0x80, 0x0, 0x8a, 0x9f, 0x11, 0xf3, 0x2e, 0xf7, 0xed, 0x7, 0x80, 0xb9, 0xad, 0x52, 0xe2, 0x3, 0x31, 0x3d, 0x80, 0x64, 0xf, 0x0, 0xb0, 0x97, 0x37, 0xbf, 0xac, 0xfc, 0xc6, 0x36, 0xde, 0x5b, 0x54, 0xd6, 0x73, 0xb5, 0x69, 0x95, 0x6c, 0xb0, 0x2e, 0xe7, 0x1d, 0x82, 0x1d, 0xee, 0xdb, 0xd7, 0x91, 0x40, 0xf2, 0x3d, 0x1f, 0xaf, 0x3e, 0x46, 0x8b, 0x5b, 0x7d, 0x2e, 0x66, 0x4c, 0xa, 0xa1, 0xb5, 0x29, 0xc1, 0xa2, 0x8, 0xc3, 0xb4, 0xe3, 0x38, 0x4d, 0xd5, 0x94, 0x27, 0x7a, 0x8, 0x10, 0x7a, 0xe6, 0xed, 0xcb, 0xc5, 0x63, 0x55, 0xa5, 0x3d, 0x74, 0xb9, 0xf8, 0x61, 0x2c, 0xf0, 0x75, 0x10, 0x89, 0xbb, 0x73, 0xd7, 0x15, 0xd0, 0x8, 0x84, 0x65, 0x68, 0x51, 0x4d, 0x8, 0xf, 0x6d, 0x49, 0x20, 0x7f, 0x97, 0x1f, 0x2d, 0x53, 0x81, 0x3c, 0x56, 0x29, 0x44, 0x32, 0x0, 0x8d, 0x69, 0x90, 0x6b, 0xbd, 0x1d, 0x2c, 0x3b, 0x60, 0x1a, 0x33, 0xe7, 0xf2, 0x47, 0xf3, 0x6, 0xc0, 0x8f, 0x34, 0x3, 0x10, 0x70, 0x9, 0xbe, 0x2f, 0x69, 0xbf, 0x4, 0x51, 0x9b, 0xaa, 0x56, 0x9c, 0x4c, 0x68, 0x9f, 0xc0, 0x72, 0xe3, 0x15, 0x4b, 0xbe, 0xf3, 0x1a, 0x3, 0x41, 0xf2, 0x4d, 0x48, 0x1f, 0x69, 0x6, 0x10, 0xe0, 0xa, 0xfc, 0xb0, 0xd0, 0xc1, 0x27, 0x6a, 0xfc, 0x8f, 0xc3, 0x1d, 0xc3, 0x69, 0xe5, 0xce, 0x2f, 0xaa, 0xd6, 0x1b, 0x37, 0x46, 0xb, 0xc8, 0xa9, 0x7a, 0x68, 0xd5, 0xfb, 0xc7, 0xa, 0xf8, 0x8c, 0x7e, 0x9f, 0xb, 0x63, 0xc9, 0xef, 0xe5, 0x2f, 0xa2, 0xfb, 0xe8, 0xea, 0x0, 0x7e, 0x3d, 0x73, 0xf5, 0x67, 0xcc, 0x6f, 0x14, 0xc4, 0x31, 0x41, 0x58, 0xbe, 0xaa, 0xe, 0x71, 0xd1, 0x43, 0x0, 0x0, 0x5, 0xd4, 0x8a, 0xcc, 0x3b, 0x1c, 0xa8, 0x88, 0xf7, 0x25, 0xca, 0xcf, 0xf0, 0x4d, 0x78, 0x55, 0x2c, 0x1, 0xe0, 0x0, 0xd0, 0x54, 0x25, 0xcc, 0xec, 0x2e, 0x40, 0xd2, 0x11, 0xb0, 0x77, 0x69, 0x7a, 0x85, 0x9, 0x1c, 0x77, 0xf, 0xd0, 0x3f, 0x5b, 0x43, 0x82, 0x6b, 0xad, 0xad, 0xca, 0xb4, 0x1c, 0xad, 0x5, 0x0, 0x2d, 0x79, 0xcb, 0x5e, 0x39, 0x83, 0x45, 0x2d, 0x4d, 0xb6, 0x90, 0x91, 0x8, 0xf4, 0x21, 0xf9, 0x91, 0x67, 0x0, 0x92, 0xfb, 0xb4, 0x6d, 0xb9, 0x0, 0xdb, 0x78, 0xaf, 0x6c, 0xb5, 0x64, 0x88, 0x1e, 0x2, 0xc8, 0xf, 0x19, 0xd8, 0xaa, 0xb, 0x8e, 0xef, 0x8, 0xfa, 0xe8, 0xfc, 0x26, 0x56, 0x5e, 0x9c, 0x10, 0x8f, 0x94, 0xdd, 0x46, 0xa5, 0x88, 0x9f, 0x7c, 0x63, 0xa6, 0x9f, 0xcf, 0x81, 0x0, 0x1a, 0x13, 0xc1, 0x74, 0xdd, 0x82, 0xf2, 0x7b, 0xa9, 0x28, 0x68, 0x5f, 0xc5, 0x50, 0xac, 0x71, 0x17, 0xf5, 0x94, 0x2c, 0x5a, 0x73, 0xe, 0x66, 0x43, 0x1b, 0x74, 0x55, 0x4, 0x91, 0x42, 0x20, 0x61, 0xde, 0x20, 0xb8, 0x85, 0xe1, 0x15, 0x27, 0x40, 0x91, 0x5c, 0x10, 0xb2, 0x7, 0x15, 0xcb, 0x9, 0xa5, 0x64, 0xc2, 0xe2, 0x97, 0x21, 0x9b, 0xa2, 0xa4, 0x8f, 0xeb, 0x23, 0xcf, 0x0, 0xec, 0x5, 0x20, 0xd8, 0x53, 0x0, 0x28, 0x25, 0xf4, 0x15, 0xc, 0x97, 0x21, 0x9c, 0x7, 0x32, 0x9a, 0x2f, 0x48, 0x12, 0xcc, 0x0, 0xa8, 0xea, 0xd0, 0xa9, 0x18, 0x4b, 0xa0, 0xde, 0x2, 0xd9, 0x82, 0x60, 0xc1, 0x81, 0xc7, 0xb6, 0x8, 0x76, 0x44, 0x60, 0x3b, 0xfc, 0xf9, 0x5a, 0x40, 0x13, 0xeb, 0x68, 0x3, 0xeb, 0xa4, 0x61, 0xf0, 0xd4, 0x5f, 0xed, 0x6b, 0xad, 0x7b, 0x8a, 0x8f, 0x57, 0x26, 0x85, 0x3b, 0x49, 0x7b, 0x3, 0xfa, 0xe6, 0xe0, 0x8b, 0x7f, 0x51, 0xb1, 0x56, 0x17, 0xed, 0x26, 0xe4, 0xa4, 0x1e, 0x4, 0x9d, 0x6f, 0xd3, 0x38, 0xcf, 0x6, 0x3e, 0x5a, 0xde, 0xaf, 0xaf, 0xaf, 0x3, 0x40, 0xfe, 0x8, 0xc7, 0x3c, 0x37, 0x16, 0x34, 0xee, 0x98, 0x6e, 0x20, 0x1c, 0x3f, 0xb0, 0x68, 0x41, 0xa2, 0x31, 0x5, 0x61, 0x1f, 0x45, 0x20, 0x4d, 0x2f, 0x40, 0xa7, 0xe5, 0x10, 0x17, 0x65, 0xd5, 0xcd, 0xbd, 0x63, 0x99, 0x9e, 0x34, 0x7f, 0x43, 0x43, 0xc8, 0xba, 0x97, 0x3, 0x7c, 0x7a, 0xf0, 0x25, 0xf7, 0xfd, 0xf7, 0xe0, 0xa9, 0xf, 0xec, 0xdd, 0xe6, 0x32, 0xc5, 0xbd, 0x18, 0x3c, 0xf5, 0x57, 0xdd, 0x1, 0xf6, 0x85, 0xec, 0x41, 0x20, 0x7a, 0x43, 0x38, 0x4, 0xd0, 0x27, 0x25, 0x7b, 0x24, 0x81, 0x81, 0xf0, 0xe7, 0xa, 0x80, 0xf0, 0x36, 0xaf, 0x35, 0x51, 0xcf, 0x3f, 0xf, 0x32, 0xf5, 0x75, 0xe3, 0xa4, 0x6f, 0x5c, 0x75, 0xf3, 0xbf, 0xb6, 0xf9, 0x4, 0xae, 0xdd, 0x5, 0x86, 0x5c, 0xfa, 0xc0, 0x30, 0x9b, 0x6d, 0xf9, 0xd, 0x80, 0xbd, 0x93, 0x30, 0x2, 0x85, 0xf6, 0xc7, 0x9, 0x6f, 0xba, 0xb9, 0x85, 0x34, 0x2b, 0x5, 0x3e, 0x44, 0x63, 0xee, 0x5c, 0x7d, 0xeb, 0x59, 0x25, 0xf, 0x9f, 0x6a, 0x73, 0x29, 0x86, 0x5d, 0xfe, 0x70, 0xf, 0x6b, 0xdd, 0x7d, 0x65, 0xed, 0x1, 0x34, 0x66, 0x7f, 0x59, 0xdb, 0xb, 0x72, 0xaf, 0x96, 0x6c, 0xff, 0xd6, 0x66, 0xcd, 0x1a, 0x2a, 0x44, 0xbe, 0xe9, 0x38, 0xd, 0x13, 0x56, 0xdd, 0x32, 0xf6, 0x85, 0x24, 0xd2, 0xac, 0x27, 0x18, 0x3c, 0xf5, 0x57, 0x23, 0xe5, 0x66, 0x5e, 0xf4, 0x77, 0x15, 0x49, 0x62, 0x15, 0x7d, 0xab, 0xa3, 0x66, 0x82, 0xd3, 0xc7, 0x4, 0x6c, 0x26, 0xcd, 0xb, 0x34, 0xce, 0x42, 0xc7, 0x98, 0xfb, 0x56, 0xde, 0x3c, 0x36, 0x72, 0x99, 0x78, 0x9b, 0x3d, 0x82, 0x56, 0xce, 0x3d, 0x63, 0x2b, 0xbc, 0x7d, 0x74, 0x5e, 0xb, 0x55, 0x68, 0x20, 0x2d, 0xfa, 0x79, 0x25, 0x49, 0x64, 0xd3, 0x2c, 0x1, 0xe8, 0x63, 0xa5, 0x83, 0x6a, 0xc5, 0x4c, 0xbd, 0xc1, 0xd0, 0xcb, 0x16, 0xef, 0x67, 0x6d, 0x76, 0x9c, 0x3f, 0xcc, 0x55, 0x61, 0x62, 0x8f, 0xd4, 0xc6, 0xb, 0xf4, 0xe8, 0xd0, 0xbe, 0x8c, 0x22, 0xb0, 0x2f, 0xa0, 0x33, 0x61, 0xdd, 0xc1, 0x2e, 0x30, 0x74, 0xf0, 0xd4, 0x7, 0x17, 0xac, 0xbe, 0x75, 0xec, 0xba, 0xe2, 0x4, 0xaa, 0x6e, 0xb9, 0xc3, 0xa6, 0x3f, 0x96, 0x32, 0x34, 0xbf, 0xf7, 0x48, 0xef, 0x2f, 0x45, 0xaa, 0x68, 0xf6, 0x37, 0x34, 0xce, 0xf9, 0xaa, 0x65, 0xde, 0xb1, 0x44, 0x9f, 0x19, 0x7a, 0xd9, 0x83, 0xfb, 0x77, 0x14, 0x71, 0x3a, 0x6, 0x34, 0x0, 0xd6, 0x9d, 0xee, 0xf, 0x94, 0x2c, 0xa8, 0x7b, 0x9b, 0xfc, 0x44, 0x59, 0x6, 0x87, 0x41, 0xfb, 0xcb, 0x9d, 0x5b, 0x24, 0x6f, 0x22, 0x4f, 0x9f, 0x80, 0xec, 0x38, 0x52, 0x7d, 0xa2, 0x4a, 0x55, 0x35, 0x3, 0xac, 0x9c, 0xf3, 0xf9, 0xac, 0x80, 0x17, 0xe0, 0x9f, 0xa3, 0x5a, 0x9d, 0xdc, 0x9f, 0x2f, 0xb7, 0xa7, 0x6d, 0x4, 0x9a, 0x86, 0xbd, 0x40, 0xc2, 0x88, 0xce, 0x26, 0x59, 0x92, 0x20, 0xd9, 0x43, 0x1, 0xec, 0x7, 0x50, 0x85, 0xcb, 0x3b, 0xc2, 0x78, 0xa8, 0x1c, 0x87, 0x28, 0xfe, 0xb6, 0x50, 0xbb, 0xa0, 0xdf, 0xad, 0xbe, 0x4a, 0xe3, 0x6c, 0x8c, 0x2a, 0x57, 0x4d, 0x63, 0xf7, 0x1f, 0x6e, 0x19, 0xfb, 0x2a, 0x8d, 0x79, 0x33, 0x98, 0x32, 0x8e, 0x76, 0x74, 0x8d, 0x9a, 0xf4, 0x88, 0xb3, 0x6d, 0x53, 0x0, 0x5, 0xe9, 0xe3, 0xb2, 0xf6, 0xe4, 0x21, 0x97, 0x2d, 0xee, 0xd9, 0xb9, 0x64, 0x4b, 0x6, 0x6, 0x5f, 0xfa, 0xe0, 0x60, 0x59, 0x4d, 0xf6, 0x55, 0xdd, 0xdc, 0x36, 0x37, 0x49, 0x40, 0xac, 0xd7, 0x40, 0xce, 0x96, 0xf, 0x10, 0xdc, 0xd2, 0xd0, 0xfd, 0x63, 0xaf, 0x47, 0xc5, 0xab, 0x89, 0x1, 0x6, 0x5f, 0x72, 0x9f, 0x1, 0xcc, 0x3, 0x2, 0x32, 0x2, 0x90, 0x53, 0xe5, 0xa, 0x2e, 0x14, 0x75, 0x61, 0xc5, 0x5d, 0x5f, 0x41, 0x78, 0x9e, 0x71, 0xa1, 0xf1, 0xb2, 0xf6, 0xd4, 0xc4, 0xa9, 0xd1, 0x9, 0x40, 0xe0, 0xc, 0xc0, 0x8e, 0xf1, 0x1c, 0xab, 0x0, 0x76, 0xc0, 0x89, 0x68, 0x34, 0x39, 0x5f, 0x3e, 0x90, 0x66, 0x57, 0xf1, 0x9, 0xa6, 0x1, 0xd4, 0xc4, 0x0, 0xd, 0x3d, 0x7a, 0xb, 0x34, 0xf7, 0x4a, 0xc8, 0xfa, 0x54, 0x8c, 0x98, 0x19, 0x2a, 0x35, 0x25, 0x5c, 0x1c, 0xb7, 0x60, 0x37, 0xb0, 0x83, 0x49, 0x9d, 0x3d, 0xe4, 0xd2, 0x87, 0x7a, 0x77, 0x36, 0x1, 0x6b, 0x81, 0x21, 0x97, 0x3e, 0x74, 0x2, 0x64, 0xc7, 0xe6, 0x25, 0xff, 0xf0, 0xa, 0xea, 0xb6, 0xe0, 0xaa, 0x54, 0x58, 0xdc, 0xb7, 0x61, 0x13, 0x2d, 0x77, 0xd1, 0x98, 0x57, 0xe2, 0xca, 0x57, 0x13, 0x3, 0x2c, 0xfb, 0xe9, 0xb1, 0xa2, 0x71, 0x56, 0x80, 0x39, 0x37, 0x2e, 0x86, 0x57, 0xf8, 0xb4, 0x86, 0x52, 0x52, 0x8e, 0xf7, 0x3e, 0xef, 0x2e, 0x45, 0x48, 0x1a, 0x7, 0xe0, 0x92, 0x76, 0xa0, 0x4b, 0x87, 0xc0, 0xb0, 0x69, 0x8f, 0xf4, 0x4, 0xf4, 0x45, 0x49, 0x47, 0x7b, 0x92, 0xbf, 0x9, 0x26, 0x4f, 0x22, 0xf0, 0x11, 0x87, 0xab, 0x52, 0x61, 0xb1, 0xd, 0xcb, 0x77, 0x15, 0x20, 0x40, 0x2e, 0x91, 0x70, 0x7f, 0x5c, 0x19, 0x6b, 0xd6, 0xdf, 0x57, 0xcd, 0x3d, 0x7d, 0xab, 0x31, 0xce, 0x8b, 0x20, 0x4b, 0xc, 0x3, 0x95, 0x76, 0x5f, 0x26, 0x30, 0x3e, 0x76, 0x87, 0xec, 0x85, 0x43, 0x2e, 0x7d, 0x68, 0x6c, 0x47, 0x10, 0x2c, 0x69, 0x90, 0xb5, 0x57, 0x49, 0xf6, 0xdc, 0xd0, 0xce, 0x1d, 0x55, 0xe2, 0x4, 0x95, 0xc6, 0xb, 0xe5, 0x65, 0x56, 0xff, 0xe1, 0x96, 0x33, 0x63, 0xd7, 0x59, 0x24, 0x62, 0xc0, 0x31, 0x4e, 0xea, 0x1a, 0x0, 0x9b, 0xdb, 0xd2, 0xc9, 0xc7, 0x89, 0x7f, 0x45, 0xcf, 0x7e, 0x55, 0x68, 0x25, 0xdb, 0x1f, 0xd0, 0x15, 0xc3, 0xa7, 0x3f, 0xba, 0x17, 0x76, 0x23, 0x18, 0x7a, 0xf9, 0xc3, 0x17, 0xc9, 0xba, 0x97, 0x90, 0xec, 0xe6, 0x1f, 0x22, 0xdb, 0xca, 0x15, 0x24, 0xa, 0x3f, 0xa5, 0xde, 0xb0, 0x8d, 0xf1, 0x82, 0x85, 0x96, 0xfe, 0x53, 0xc9, 0x35, 0x16, 0xc9, 0x30, 0x80, 0x49, 0xfd, 0x15, 0x60, 0x16, 0x2c, 0xa7, 0xb4, 0xb4, 0x56, 0x78, 0xe2, 0x9e, 0x7d, 0x7f, 0x44, 0x43, 0x1a, 0x40, 0xfa, 0xbc, 0xeb, 0x66, 0xef, 0x4e, 0x88, 0x36, 0xed, 0xe, 0xc3, 0xa6, 0x3d, 0x72, 0x34, 0x64, 0xaf, 0x4, 0xd1, 0x97, 0x9e, 0xda, 0xc7, 0xb0, 0x7a, 0x86, 0x12, 0xf8, 0x29, 0x3b, 0x61, 0x56, 0x3e, 0x9e, 0x48, 0xe3, 0xef, 0x4b, 0x65, 0x5e, 0x26, 0xcd, 0xba, 0x52, 0x65, 0xad, 0x99, 0x1, 0x86, 0x5f, 0xf1, 0x44, 0xca, 0x75, 0x33, 0x17, 0x93, 0xdc, 0xb3, 0x60, 0x82, 0xa3, 0xc6, 0x8b, 0x86, 0x14, 0x4, 0x1a, 0x7a, 0x9b, 0x2b, 0xc9, 0x9e, 0x36, 0xf4, 0xf2, 0xc5, 0x8b, 0x3b, 0x9b, 0xb8, 0xe5, 0x60, 0xd8, 0xb4, 0x47, 0x87, 0x59, 0xd7, 0x9d, 0x2b, 0xd9, 0x91, 0xb9, 0x63, 0x71, 0x88, 0xa, 0x8d, 0x64, 0x85, 0x97, 0x2, 0xa5, 0x2e, 0x3e, 0x9d, 0x70, 0x78, 0x4e, 0x93, 0x22, 0x9d, 0x7b, 0xff, 0x70, 0xf3, 0xbf, 0xfe, 0xb2, 0x54, 0x79, 0x6b, 0x62, 0x80, 0x61, 0x57, 0x3c, 0x9e, 0x92, 0xcd, 0x5c, 0x27, 0xeb, 0xde, 0x0, 0xa0, 0x67, 0xc1, 0x92, 0xe4, 0x4, 0x2e, 0x7f, 0xdf, 0x3b, 0xfa, 0x27, 0x8c, 0xc1, 0xba, 0xf6, 0xb3, 0x43, 0x2e, 0x5b, 0x7c, 0x7f, 0x65, 0xa5, 0xec, 0x38, 0x18, 0x7a, 0xf9, 0xa3, 0x43, 0x25, 0xf7, 0x2e, 0x40, 0x47, 0xfa, 0x36, 0xd, 0x86, 0x7e, 0x6b, 0xc1, 0x3, 0xbd, 0x65, 0xfe, 0x8, 0x7e, 0xc3, 0x57, 0xee, 0x14, 0x94, 0xf0, 0x5, 0xc0, 0xa5, 0xe1, 0xdf, 0xca, 0x95, 0xb9, 0x6a, 0x6, 0x18, 0x7a, 0xf9, 0xa3, 0xd, 0x72, 0x33, 0xdf, 0xb3, 0xae, 0xfb, 0xdf, 0x0, 0xd3, 0x5e, 0x68, 0xb4, 0x64, 0x5f, 0x9d, 0x2a, 0xd3, 0x3a, 0xdc, 0x18, 0xa6, 0x21, 0x9d, 0x39, 0xe4, 0xd2, 0x87, 0x7e, 0x3b, 0xf4, 0xf2, 0x47, 0x92, 0xde, 0x95, 0xac, 0x26, 0x18, 0x36, 0xed, 0xb1, 0x93, 0xad, 0xcd, 0x3c, 0x28, 0xab, 0xc3, 0xa, 0xd7, 0x52, 0x94, 0xd2, 0x7a, 0xe2, 0x70, 0x81, 0xd6, 0x71, 0xf3, 0x9a, 0xdd, 0x2e, 0x92, 0x1b, 0x40, 0xf3, 0xa6, 0x84, 0x5d, 0xa, 0xb6, 0x53, 0x4, 0x43, 0x62, 0x86, 0x27, 0xfc, 0x9, 0x6c, 0x75, 0x68, 0x67, 0x31, 0x54, 0xc5, 0x0, 0xc3, 0xaf, 0x78, 0xbc, 0x1b, 0xa0, 0x1f, 0x59, 0x6b, 0xaf, 0x3, 0xe1, 0xd0, 0x10, 0xc1, 0x21, 0xc7, 0x85, 0x2b, 0xc7, 0xa2, 0x18, 0x9f, 0x45, 0xe1, 0xcc, 0x8b, 0x2b, 0x5, 0x78, 0x8, 0xb8, 0x9f, 0xa1, 0x74, 0x9, 0x10, 0x46, 0xd0, 0xd1, 0xd6, 0xba, 0x2f, 0xf, 0xb9, 0xfc, 0x91, 0xe3, 0x3a, 0x8c, 0xc2, 0x25, 0x60, 0xc8, 0x65, 0xf, 0xff, 0xa7, 0xb5, 0xd9, 0x45, 0x24, 0xf, 0xa, 0xd4, 0x6f, 0x1a, 0xe3, 0xf9, 0x39, 0x17, 0x8a, 0x3f, 0x85, 0xf5, 0x46, 0xc, 0x2e, 0xa, 0xf1, 0x26, 0x3f, 0x2e, 0x7d, 0x7c, 0xac, 0x5c, 0x75, 0xf3, 0x99, 0x3, 0x8d, 0x93, 0xfe, 0x94, 0x49, 0x35, 0xee, 0x63, 0x52, 0x4d, 0x4d, 0x26, 0x95, 0xee, 0x63, 0x9c, 0xf4, 0x20, 0x3a, 0xe9, 0xd1, 0x74, 0xd2, 0x67, 0xd1, 0x38, 0x5f, 0xa6, 0x71, 0xbe, 0x44, 0xf0, 0xd9, 0x72, 0x65, 0x2f, 0x27, 0xb8, 0x47, 0x10, 0xff, 0xd7, 0x7b, 0xca, 0xda, 0xaf, 0x4a, 0xf6, 0x3b, 0x8, 0x56, 0xa3, 0xb0, 0xd2, 0x95, 0xae, 0x55, 0x2d, 0x8c, 0xf5, 0xd8, 0x5b, 0x62, 0xc8, 0xb9, 0x70, 0x2b, 0x68, 0x1e, 0x4b, 0x77, 0xdb, 0xe7, 0xbc, 0x17, 0x67, 0x1c, 0xd3, 0xe1, 0x9b, 0x48, 0xe, 0xbf, 0xe2, 0x89, 0x46, 0xeb, 0x66, 0xd6, 0xca, 0xba, 0x7, 0x91, 0xdc, 0x23, 0x98, 0x92, 0x87, 0xc4, 0x44, 0x71, 0x12, 0x78, 0xe8, 0x92, 0xab, 0x40, 0xe7, 0xe4, 0x95, 0x73, 0x3e, 0xf7, 0x7e, 0x71, 0x94, 0xa3, 0xbe, 0xf2, 0x5b, 0xb6, 0x6c, 0x7b, 0x97, 0x4e, 0xba, 0x81, 0xb2, 0xd6, 0x48, 0xd6, 0x5d, 0x35, 0xf7, 0x8c, 0xb2, 0x47, 0xcc, 0x54, 0x44, 0x85, 0xa1, 0xd3, 0x1e, 0xed, 0xe, 0x60, 0x32, 0xac, 0x9d, 0x5, 0xf8, 0x67, 0xff, 0xa1, 0xe3, 0xf, 0x8c, 0x40, 0xe1, 0x3c, 0x78, 0xb, 0xc8, 0xb7, 0x4, 0xde, 0xea, 0x66, 0xb3, 0xd7, 0xaf, 0xb9, 0xf5, 0xcc, 0x4c, 0xd, 0x59, 0xb4, 0x9, 0x86, 0x5c, 0xfe, 0x48, 0x9a, 0xc0, 0x22, 0x12, 0x47, 0xc9, 0xda, 0xdc, 0x2c, 0x1b, 0x2b, 0x26, 0x7a, 0x25, 0x55, 0x46, 0x56, 0xe0, 0x5d, 0xab, 0xe6, 0x9e, 0x3e, 0x25, 0xc9, 0xba, 0x54, 0x54, 0xd8, 0x61, 0xd3, 0x1e, 0x3b, 0x49, 0x72, 0x7f, 0xe3, 0x89, 0xb5, 0x1e, 0x9b, 0xb7, 0x4a, 0x2d, 0xee, 0xec, 0x87, 0x70, 0xcc, 0xb8, 0xc5, 0x23, 0x2c, 0x8a, 0xab, 0xc8, 0x38, 0x91, 0xa7, 0x83, 0x49, 0xda, 0x4a, 0x9a, 0xd7, 0x40, 0x2e, 0x2, 0xcc, 0x4f, 0x56, 0xce, 0xf9, 0x6c, 0xe2, 0x1e, 0x45, 0xc3, 0xaf, 0x78, 0x7c, 0xa8, 0xb5, 0xee, 0xb5, 0xde, 0xde, 0x48, 0x3a, 0x88, 0xa4, 0xbf, 0x3f, 0x62, 0x20, 0xaa, 0x7b, 0xc7, 0x27, 0xb6, 0xaa, 0x53, 0xb8, 0x2e, 0x51, 0x38, 0x2a, 0xf6, 0xa4, 0x2e, 0xc4, 0x97, 0xbf, 0xf, 0x3, 0x9f, 0x4d, 0x35, 0x34, 0x7d, 0x6e, 0xd9, 0xcf, 0x4e, 0x4a, 0xf4, 0xc8, 0x98, 0x8a, 0xe, 0x8d, 0x12, 0xf0, 0x16, 0xc0, 0x55, 0x20, 0x86, 0x12, 0x85, 0x47, 0xb7, 0x14, 0x54, 0xa8, 0x18, 0xca, 0x59, 0x7f, 0xc2, 0x61, 0x2c, 0xfb, 0x5d, 0x1e, 0xb5, 0xb9, 0x19, 0x70, 0x89, 0x64, 0xf, 0xc9, 0xe, 0x84, 0x78, 0x10, 0xa9, 0xb, 0x87, 0x4e, 0x7b, 0x74, 0x29, 0xc0, 0xc5, 0x0, 0x9f, 0x58, 0x75, 0xd3, 0xe7, 0x3e, 0xac, 0x16, 0x41, 0x43, 0xa7, 0x3d, 0x76, 0x24, 0x81, 0x33, 0x41, 0x9c, 0x62, 0xdd, 0xec, 0x27, 0x1, 0xf4, 0x26, 0xd1, 0xe4, 0x17, 0x26, 0xe7, 0xa, 0x17, 0xb9, 0x8c, 0x92, 0x6d, 0xb8, 0x8f, 0x7f, 0xe, 0xed, 0xba, 0xc2, 0xd7, 0x68, 0xcc, 0x6d, 0x49, 0x13, 0x3f, 0x8e, 0x14, 0x25, 0x61, 0xd8, 0xf4, 0x5f, 0x9f, 0x2e, 0xeb, 0x3e, 0xc, 0x44, 0xad, 0x70, 0xed, 0x70, 0x28, 0x68, 0x57, 0xa1, 0x1d, 0x4b, 0x20, 0xa9, 0x19, 0xe4, 0x3f, 0x0, 0xbc, 0xb, 0xe0, 0x6d, 0x80, 0x7f, 0x34, 0xc6, 0xbc, 0x28, 0x61, 0x83, 0x64, 0x37, 0x1b, 0x63, 0xb6, 0x9, 0xcc, 0x2, 0x70, 0x8d, 0x31, 0x8e, 0x9b, 0xcd, 0x34, 0x2, 0xec, 0x66, 0xc, 0xf, 0x4, 0x74, 0x8c, 0xb5, 0x3a, 0xe, 0xd0, 0x1, 0x0, 0x7a, 0xc8, 0xda, 0xde, 0x24, 0xf7, 0xcb, 0x21, 0x2d, 0x7c, 0x42, 0xa, 0xa, 0xfb, 0xe9, 0x44, 0x2a, 0x15, 0x4a, 0x4f, 0x92, 0x5, 0xcd, 0x8d, 0x3d, 0xf7, 0xeb, 0x73, 0xd5, 0x33, 0xd7, 0xf, 0x4e, 0x5c, 0xce, 0xa9, 0xf8, 0xec, 0x60, 0x9, 0x2b, 0x40, 0xf3, 0x2, 0xa0, 0xe3, 0x2, 0x4f, 0x9e, 0xf0, 0x69, 0xd1, 0xed, 0xf, 0x5, 0x63, 0x49, 0xee, 0xc1, 0x3b, 0x69, 0x3b, 0x68, 0x3a, 0x10, 0xd, 0x1b, 0x25, 0x1c, 0x2, 0xe0, 0x10, 0x3f, 0xc6, 0x9, 0x92, 0x1d, 0x27, 0xe1, 0x7d, 0x48, 0xcd, 0x90, 0xcd, 0x10, 0xb4, 0x0, 0xe4, 0x66, 0xb2, 0x24, 0xe9, 0x0, 0x4a, 0x59, 0xab, 0xee, 0x80, 0xf6, 0x7, 0x90, 0xf3, 0x48, 0xa, 0x16, 0xc9, 0xf8, 0xe, 0xd1, 0x2c, 0x76, 0xe7, 0xab, 0x9c, 0xf8, 0xc5, 0xe3, 0x40, 0x1, 0x7e, 0x45, 0x43, 0x4a, 0xb0, 0x0, 0xc, 0x69, 0x9e, 0x14, 0xf9, 0x83, 0xf6, 0x20, 0x3e, 0x50, 0x5, 0x3, 0x90, 0x7c, 0x17, 0xe4, 0x77, 0x64, 0xdd, 0x27, 0xdb, 0xeb, 0xb8, 0xb4, 0xa, 0x4a, 0x13, 0x2a, 0x57, 0x48, 0x81, 0x24, 0xc2, 0x4e, 0x97, 0xc1, 0x88, 0xda, 0x1d, 0x40, 0x5f, 0x40, 0x7d, 0xc1, 0x9c, 0x4a, 0x91, 0x4b, 0x26, 0x70, 0x79, 0xf, 0x8c, 0x6e, 0xc8, 0x7f, 0x9b, 0xcb, 0x28, 0xbf, 0x59, 0x46, 0xb2, 0x65, 0x2f, 0xc4, 0x6f, 0xee, 0x5c, 0x24, 0x43, 0x72, 0x9, 0x8d, 0xf3, 0x5f, 0x2b, 0x67, 0x9f, 0x5a, 0xd6, 0xa0, 0x53, 0x2d, 0x54, 0xdc, 0x85, 0xaf, 0x9c, 0xf3, 0x59, 0x57, 0x56, 0xcf, 0x1, 0xe6, 0x7, 0xcc, 0x4f, 0x3b, 0x29, 0xce, 0xae, 0xf, 0xc4, 0xdb, 0xb2, 0x11, 0x11, 0x16, 0xf5, 0x1e, 0x31, 0xdf, 0x44, 0x7d, 0xe7, 0x3f, 0x33, 0x58, 0x72, 0xe, 0x7f, 0x5b, 0x4e, 0x7f, 0x7e, 0x1, 0x86, 0x6, 0x86, 0x26, 0xbf, 0xb6, 0xda, 0xf, 0xf3, 0xe6, 0x1c, 0x20, 0xd2, 0x0, 0xfe, 0x7d, 0xb1, 0x52, 0x5e, 0x6c, 0xcf, 0x47, 0x4c, 0x19, 0x4b, 0xc5, 0x61, 0x89, 0xfa, 0x86, 0x5d, 0xb9, 0xe8, 0x19, 0x73, 0x1e, 0x58, 0x31, 0xfb, 0xd4, 0x76, 0xf5, 0x8e, 0xae, 0x6a, 0xc, 0x5f, 0x75, 0xd3, 0xe7, 0x32, 0xc6, 0x71, 0x66, 0xd0, 0x98, 0x3f, 0x7a, 0x1e, 0x81, 0xf0, 0x14, 0x83, 0xbc, 0xcd, 0x1a, 0xa0, 0x77, 0x94, 0x27, 0x3, 0x79, 0x3d, 0xf8, 0xf1, 0xc3, 0xe4, 0x1b, 0x11, 0x7c, 0xbb, 0x49, 0x7e, 0x4d, 0x8, 0xb, 0xc3, 0xa, 0xec, 0x61, 0x21, 0x3b, 0x49, 0x2e, 0x6e, 0x48, 0x78, 0x6c, 0x65, 0x53, 0x2a, 0x8e, 0x1b, 0x32, 0x52, 0x79, 0xc6, 0x2b, 0x22, 0xbc, 0xcd, 0xa1, 0x77, 0xa, 0x8b, 0x1f, 0x25, 0x7c, 0x5f, 0x9c, 0x6f, 0x51, 0x18, 0x23, 0xca, 0x15, 0x67, 0xe3, 0x29, 0x28, 0x77, 0x44, 0x1d, 0xa, 0x3b, 0x6, 0x56, 0xdc, 0x43, 0x77, 0x8, 0x3, 0x0, 0xc0, 0x8a, 0xd9, 0xa7, 0xbc, 0x9, 0x98, 0x6f, 0x48, 0xb0, 0xc1, 0x4a, 0x97, 0x90, 0xcd, 0x3a, 0xa8, 0x72, 0x40, 0x71, 0xff, 0x40, 0x54, 0x13, 0xd8, 0xaa, 0x3d, 0xd3, 0x5e, 0xb0, 0xb5, 0x1d, 0x22, 0x30, 0x57, 0x80, 0xc5, 0x8, 0xec, 0xc6, 0xc5, 0x47, 0x1b, 0xe2, 0x17, 0x7f, 0xc7, 0x32, 0xf9, 0x97, 0xcb, 0xaf, 0x5c, 0x1e, 0x95, 0x94, 0xc5, 0xbb, 0xf7, 0x27, 0xc0, 0x34, 0x61, 0xd8, 0x15, 0x4f, 0x8c, 0xa9, 0x4b, 0x6, 0x0, 0x80, 0x15, 0x37, 0x9e, 0xf2, 0x2b, 0x81, 0x73, 0xfd, 0x59, 0x89, 0xe0, 0xbc, 0xdb, 0x9c, 0xdf, 0xa3, 0x1f, 0x6, 0x1, 0xaf, 0xd0, 0x38, 0xf3, 0x40, 0xf3, 0x3d, 0x90, 0x8f, 0xa3, 0x50, 0x4b, 0x66, 0x72, 0x3e, 0x92, 0x9d, 0x24, 0x8a, 0x24, 0x8, 0x61, 0x1c, 0x2, 0x1a, 0xe, 0x60, 0xca, 0x51, 0x57, 0x3d, 0x9d, 0x6e, 0xaf, 0xfc, 0x6a, 0x56, 0xe3, 0x68, 0x9c, 0xaf, 0xd2, 0x38, 0xbf, 0x1, 0xe8, 0x2, 0xc, 0x66, 0xa5, 0x8, 0xf0, 0x3, 0x81, 0x4f, 0x1, 0x9c, 0x4d, 0x9a, 0xff, 0x30, 0xc6, 0x4c, 0x5f, 0x31, 0xfb, 0x94, 0x6f, 0x3, 0xe6, 0x6b, 0xa0, 0xf9, 0x6d, 0x28, 0xae, 0xef, 0x27, 0x17, 0xb5, 0x6d, 0x5a, 0xa5, 0x17, 0x6a, 0xfc, 0xbe, 0xf3, 0x2f, 0x7f, 0xd2, 0x43, 0x79, 0xbc, 0x68, 0x8c, 0x9b, 0x75, 0xcf, 0x6b, 0x2f, 0x6, 0x48, 0xa4, 0xc9, 0x8c, 0xb8, 0xf2, 0xa9, 0x23, 0x24, 0xfb, 0x6b, 0x49, 0x69, 0x49, 0x1b, 0xc, 0xb9, 0x95, 0xc6, 0xac, 0x0, 0x78, 0xf3, 0xf2, 0x59, 0x27, 0xbd, 0x19, 0x11, 0xff, 0x13, 0xd6, 0xba, 0xf3, 0x25, 0x9d, 0x60, 0x72, 0xaa, 0x5b, 0xe8, 0xa0, 0xe4, 0x92, 0xc5, 0x6d, 0x4b, 0x6f, 0xd1, 0xd6, 0x78, 0x51, 0x71, 0xc3, 0xcf, 0x95, 0xa4, 0x53, 0xd, 0x4, 0x55, 0x8d, 0xcd, 0x43, 0x5e, 0x2f, 0xca, 0x47, 0x68, 0xcc, 0xf8, 0x95, 0xb3, 0x4f, 0x2e, 0x77, 0xa, 0x7a, 0xd5, 0x25, 0xa8, 0x19, 0x46, 0x5c, 0xf9, 0xd4, 0xf5, 0x92, 0x5e, 0x7, 0x39, 0x6f, 0xc5, 0xac, 0x93, 0xca, 0x6e, 0xf5, 0x3a, 0xfc, 0x4b, 0x4f, 0x35, 0x42, 0xf6, 0x69, 0x41, 0xc7, 0x78, 0x2, 0x1e, 0x73, 0x15, 0x66, 0x58, 0xa7, 0x8b, 0x41, 0x51, 0x78, 0xc, 0x29, 0x45, 0x22, 0x96, 0xf9, 0xbe, 0x38, 0x4e, 0x71, 0xfc, 0x28, 0x4, 0x29, 0x26, 0x8d, 0xf6, 0x60, 0x15, 0x7f, 0x78, 0x7c, 0x97, 0x34, 0x3f, 0x58, 0x31, 0xfb, 0xe4, 0x1f, 0x26, 0x9d, 0x7e, 0xa7, 0xe, 0x9a, 0x23, 0xaf, 0x59, 0x4a, 0xb7, 0x65, 0xfb, 0xe3, 0x24, 0x8e, 0x6, 0xd0, 0xc3, 0xdb, 0x3c, 0x23, 0xd8, 0x87, 0x24, 0x8a, 0x5, 0x18, 0xf1, 0x5c, 0xe9, 0xe4, 0x43, 0x5c, 0xba, 0xa5, 0x58, 0x24, 0xa, 0x65, 0xc5, 0xdf, 0x95, 0xcb, 0x2f, 0xae, 0x4c, 0x8c, 0xf9, 0x46, 0xc1, 0x7a, 0x4b, 0xff, 0xe0, 0x68, 0x3e, 0x63, 0x85, 0xcf, 0xaf, 0xba, 0xf1, 0x94, 0x44, 0xcd, 0xc1, 0x9d, 0x6a, 0xca, 0x5d, 0xf6, 0xd3, 0x63, 0xb5, 0xf2, 0xc6, 0x53, 0x4f, 0x25, 0x53, 0xb7, 0x4a, 0x7c, 0xc3, 0x57, 0xd5, 0x19, 0xbd, 0xce, 0x90, 0x31, 0xcf, 0x61, 0x4d, 0xa1, 0x54, 0xdc, 0x8, 0xbd, 0x32, 0x36, 0x9d, 0xb8, 0x30, 0x96, 0xf8, 0xae, 0x5c, 0x7e, 0x71, 0x71, 0xe2, 0xbe, 0xf1, 0xe4, 0xe3, 0x90, 0x6e, 0x3b, 0x84, 0xe4, 0xb7, 0x92, 0xa6, 0x41, 0x67, 0xdb, 0xf2, 0x1, 0x0, 0xcb, 0x67, 0x8d, 0xb9, 0x16, 0x34, 0xd7, 0x4a, 0x58, 0xf, 0xef, 0x4, 0x92, 0x28, 0x4a, 0xed, 0x56, 0x57, 0xb0, 0xb7, 0x72, 0xb9, 0xb0, 0x52, 0xdf, 0x6, 0x2e, 0x71, 0x7e, 0xf8, 0x36, 0x0, 0x1f, 0x24, 0x8d, 0xfb, 0xba, 0xd2, 0x9b, 0x86, 0x7f, 0xe9, 0xe9, 0xde, 0xa0, 0x1e, 0x25, 0x30, 0x24, 0x5f, 0xbc, 0xb8, 0x3d, 0x74, 0x6b, 0x19, 0x71, 0x4b, 0xa5, 0xd1, 0x16, 0xa9, 0x22, 0x4e, 0x7a, 0xc8, 0x7d, 0x17, 0xac, 0x95, 0xf4, 0x67, 0x2d, 0x73, 0x5d, 0x9b, 0xef, 0xc9, 0x62, 0x5b, 0x4f, 0xa5, 0x7, 0xdd, 0xbe, 0xb7, 0x4b, 0x46, 0xfe, 0x5b, 0x0, 0x92, 0x5e, 0x27, 0xf9, 0xff, 0x56, 0xcc, 0x3e, 0x69, 0x66, 0xd2, 0x38, 0x6f, 0x77, 0x4b, 0x53, 0x25, 0x60, 0xc, 0xcf, 0x12, 0xb0, 0x7f, 0xa1, 0x46, 0x10, 0xc7, 0xa3, 0x49, 0xf0, 0x6e, 0xb5, 0x69, 0xb3, 0xd5, 0x73, 0x89, 0x19, 0x41, 0x17, 0x40, 0xd6, 0x6f, 0xdc, 0x8d, 0x3e, 0x81, 0x63, 0x36, 0x88, 0x28, 0xdc, 0x37, 0xc0, 0x8f, 0xf3, 0xf, 0xc7, 0x38, 0xd7, 0x2f, 0xfb, 0xd9, 0x89, 0xb3, 0xd1, 0xe, 0x50, 0x17, 0x43, 0x40, 0x0, 0x56, 0x9a, 0x2, 0xb0, 0x4f, 0xcc, 0xa0, 0x19, 0x46, 0x54, 0x95, 0x57, 0xf8, 0xfb, 0xa8, 0xb4, 0xa2, 0xde, 0x17, 0x43, 0x41, 0x9a, 0xf2, 0xaf, 0x90, 0x15, 0x34, 0x6c, 0x14, 0x33, 0x24, 0xcd, 0x12, 0x63, 0x9c, 0x13, 0x49, 0x73, 0xa9, 0xf2, 0x7b, 0x39, 0xd2, 0x5b, 0xff, 0x58, 0xd0, 0xe5, 0xe7, 0xbc, 0x87, 0x83, 0xd6, 0xef, 0xf9, 0xf4, 0xf3, 0xb2, 0xf6, 0x22, 0x3e, 0x50, 0x6f, 0x3d, 0x0, 0xb9, 0xb7, 0x7f, 0xab, 0xe8, 0xa6, 0x5f, 0x6b, 0xab, 0x2f, 0x47, 0xe4, 0x36, 0x30, 0x41, 0x99, 0x11, 0x42, 0xc1, 0xc6, 0xf7, 0xc4, 0x12, 0x49, 0xff, 0x43, 0xf2, 0xe9, 0x65, 0x33, 0x47, 0x67, 0x0, 0xfc, 0x6e, 0xe4, 0x55, 0xcf, 0xbe, 0x2d, 0x6b, 0x7f, 0x9, 0x61, 0xcf, 0x12, 0xbe, 0x23, 0x16, 0xa0, 0x1, 0xf9, 0x24, 0xc9, 0x6f, 0x2e, 0x9b, 0x39, 0x7a, 0x59, 0x72, 0x18, 0x6e, 0xd, 0x75, 0xd3, 0x3, 0xc, 0xbf, 0xf2, 0x99, 0x43, 0xad, 0xd4, 0xd8, 0x7a, 0x7d, 0x21, 0x4a, 0x48, 0xe2, 0x40, 0xbc, 0x74, 0x8f, 0x98, 0x6f, 0xa3, 0x24, 0x7d, 0xc4, 0xe4, 0x17, 0x91, 0x6, 0x10, 0x78, 0xfb, 0x22, 0x98, 0xb4, 0xb, 0xc9, 0x76, 0xa4, 0x31, 0xf, 0xd2, 0x38, 0xa3, 0x40, 0xf3, 0x79, 0x3a, 0xd, 0x4f, 0x2c, 0xff, 0xd9, 0x89, 0x39, 0x1f, 0xc5, 0x65, 0x33, 0x47, 0x3f, 0xe, 0x9a, 0xa1, 0x2, 0x7e, 0xed, 0x37, 0x79, 0x81, 0x94, 0x37, 0xc9, 0xc8, 0x60, 0x1, 0x89, 0x1, 0x79, 0x9b, 0x80, 0x69, 0xed, 0x4d, 0x7c, 0xa0, 0x9e, 0x7a, 0x0, 0xa2, 0x1f, 0xc1, 0xc6, 0xdc, 0x53, 0x4e, 0xb2, 0x2a, 0xd7, 0x52, 0x5b, 0x79, 0xd0, 0xf8, 0xdd, 0x27, 0x83, 0x77, 0x88, 0x77, 0x57, 0x60, 0x44, 0x7a, 0xe5, 0x7b, 0x89, 0xfc, 0x9c, 0x7d, 0xe0, 0xe, 0x61, 0xfe, 0xa, 0x70, 0x11, 0xa8, 0x5b, 0x1, 0xbc, 0xe, 0x68, 0xe7, 0xf2, 0x99, 0xa3, 0x23, 0x3d, 0x72, 0x97, 0xff, 0x6c, 0xf4, 0x9f, 0x47, 0x5c, 0xf5, 0xec, 0x64, 0x8, 0x93, 0x24, 0x3b, 0x23, 0xa8, 0x82, 0xef, 0xdc, 0x42, 0x80, 0x5f, 0x3, 0x79, 0xc7, 0x8a, 0x99, 0x27, 0xbc, 0xd7, 0x11, 0x68, 0xaf, 0x1f, 0x6, 0x0, 0x8e, 0x5, 0xd8, 0xc3, 0xf7, 0xc9, 0xa8, 0xc8, 0xc9, 0xc4, 0x9f, 0x7d, 0xa, 0x3c, 0x68, 0x2, 0x46, 0x0, 0x80, 0xd0, 0x92, 0x6c, 0x0, 0x21, 0x71, 0xbd, 0x48, 0x66, 0xab, 0xc6, 0x9b, 0x97, 0x0, 0xb2, 0x20, 0x7, 0x81, 0xdc, 0x22, 0x69, 0xeb, 0xf2, 0x99, 0xa3, 0xdb, 0xe4, 0x88, 0xba, 0x7c, 0xe6, 0xe8, 0x77, 0x46, 0x5e, 0xbd, 0x64, 0x2e, 0xc4, 0xc5, 0x90, 0x9e, 0x5, 0x70, 0xa0, 0xa4, 0x77, 0x40, 0x4e, 0x4, 0xf4, 0xc2, 0xa, 0x6f, 0xc8, 0xe8, 0x10, 0xa8, 0x1b, 0x35, 0x70, 0xf8, 0x97, 0x9f, 0x7d, 0x9e, 0xc4, 0x31, 0xbe, 0x27, 0x47, 0x5b, 0x9, 0x92, 0xd7, 0xbb, 0x3c, 0xcf, 0xd9, 0xdb, 0x1, 0x2c, 0x5, 0x70, 0x32, 0xa0, 0xb3, 0x51, 0x62, 0xdb, 0xd9, 0x90, 0xb7, 0x50, 0x45, 0x6e, 0xed, 0x45, 0xbd, 0x4d, 0x66, 0xf9, 0xcc, 0xd1, 0xd, 0x6d, 0xfa, 0x30, 0x6, 0x46, 0x5e, 0xbd, 0xe4, 0x50, 0x49, 0xc3, 0x0, 0xac, 0x5f, 0x3e, 0xf3, 0x84, 0xd, 0xed, 0x89, 0xe3, 0x48, 0x3c, 0x74, 0x74, 0x86, 0x71, 0x30, 0xe2, 0xaa, 0xe7, 0xde, 0x2, 0xd0, 0x2b, 0xbc, 0xdf, 0x50, 0x29, 0xa2, 0x14, 0xbf, 0x97, 0xf4, 0x17, 0x80, 0x13, 0x1, 0xac, 0xa1, 0x77, 0x9e, 0x71, 0x2f, 0x0, 0x7b, 0x4a, 0x6a, 0x80, 0x77, 0xbc, 0x7d, 0xf, 0x0, 0x9f, 0x2, 0xd4, 0x17, 0xc0, 0xbe, 0x0, 0x3e, 0x9, 0x78, 0x1b, 0x51, 0x55, 0xea, 0xcf, 0x1f, 0xc, 0x33, 0x92, 0x32, 0xa4, 0xe9, 0xb6, 0x7c, 0xe6, 0xf1, 0xd9, 0xb6, 0x7e, 0x1b, 0x5, 0x47, 0x7f, 0x65, 0x69, 0xea, 0xf7, 0x33, 0x8e, 0xad, 0x29, 0x8d, 0x6a, 0xa1, 0x6e, 0x86, 0x0, 0x82, 0x3f, 0x17, 0xf4, 0x15, 0xf9, 0xb, 0xa1, 0x3c, 0xbf, 0x48, 0x8f, 0x28, 0x11, 0x94, 0xf1, 0x37, 0x44, 0xf4, 0x5, 0x32, 0x6f, 0x14, 0xb8, 0xce, 0xcd, 0xba, 0x7f, 0x58, 0x39, 0xfb, 0x44, 0xb, 0x60, 0x93, 0x7f, 0xe5, 0x60, 0xc4, 0xd5, 0x2f, 0x90, 0xb0, 0x3d, 0x0, 0xee, 0x9, 0x8f, 0x21, 0xfa, 0xc8, 0x6a, 0x89, 0x31, 0x74, 0x0, 0x6f, 0x71, 0x65, 0x5, 0x83, 0x8e, 0x7f, 0xca, 0x6d, 0x32, 0xde, 0x81, 0x9d, 0x45, 0x7c, 0xa0, 0x8e, 0x18, 0x40, 0xc0, 0x8f, 0x48, 0xb3, 0x44, 0xb2, 0x97, 0x82, 0x3c, 0x2d, 0x24, 0x4, 0x14, 0xf4, 0xba, 0x7e, 0x80, 0xbf, 0xf, 0x1e, 0x20, 0x6b, 0x9, 0xe0, 0xfb, 0x12, 0x1f, 0xf5, 0x89, 0x1f, 0x9, 0xcb, 0x6f, 0x38, 0x4e, 0x0, 0xb6, 0xf8, 0x17, 0x46, 0x5c, 0xb5, 0xe4, 0x75, 0x92, 0xbf, 0x15, 0x70, 0x1c, 0x80, 0x22, 0x51, 0xa1, 0x75, 0xe1, 0x42, 0x5c, 0xa8, 0xd0, 0x9e, 0x8c, 0xdb, 0xea, 0xa8, 0x13, 0xad, 0xa, 0xea, 0x46, 0xd, 0x5c, 0x3e, 0xf3, 0xf8, 0xd7, 0x97, 0xdd, 0x30, 0xea, 0x3e, 0x80, 0xd7, 0x1, 0xbc, 0x58, 0xc2, 0xaf, 0x3, 0xe7, 0x92, 0x22, 0x87, 0x11, 0x92, 0x46, 0xa1, 0x77, 0xbf, 0x7, 0xf8, 0xbf, 0xcb, 0x67, 0x1e, 0x5f, 0xd1, 0x59, 0x43, 0xc6, 0x18, 0xd2, 0x98, 0xbb, 0x42, 0xf6, 0xf9, 0x78, 0x3b, 0x7d, 0xa1, 0x4b, 0x97, 0x6f, 0xac, 0x81, 0x5, 0xf8, 0x1a, 0xda, 0xd7, 0x61, 0xa0, 0xdd, 0xa1, 0x6e, 0xd9, 0x77, 0xc4, 0x55, 0x4b, 0x8e, 0x4, 0x30, 0x82, 0xe4, 0x89, 0x0, 0xc6, 0x1, 0x8, 0x6f, 0x11, 0x13, 0x8c, 0xc1, 0x9b, 0x1, 0x9c, 0xb5, 0x7c, 0xe6, 0xf1, 0x4b, 0xaa, 0xc9, 0x63, 0xe4, 0xd5, 0x2f, 0x1c, 0x28, 0xd9, 0x4d, 0xfe, 0xb9, 0x88, 0xa5, 0x5c, 0x0, 0xa, 0xc0, 0xd7, 0x30, 0x32, 0x92, 0x16, 0x1, 0x98, 0xbc, 0x7c, 0xe6, 0xf1, 0x65, 0x17, 0x61, 0xd6, 0x2b, 0xd4, 0x2d, 0x3, 0x4, 0x30, 0xe2, 0xea, 0xe7, 0xfb, 0x0, 0x38, 0x3, 0xc0, 0xbf, 0x10, 0x3c, 0xa, 0xc0, 0x18, 0xdf, 0x4a, 0xb0, 0x43, 0xd0, 0x95, 0xcb, 0x6f, 0x18, 0x75, 0x47, 0x8d, 0xe9, 0x3f, 0x65, 0x68, 0x8e, 0x87, 0x77, 0xf6, 0x9e, 0xe7, 0x25, 0x1c, 0xc3, 0xa, 0xb2, 0x5, 0xea, 0xc2, 0x2e, 0x2b, 0xfb, 0x9f, 0x0, 0x7e, 0xb8, 0xfc, 0x86, 0x51, 0x5d, 0xc, 0xd0, 0x11, 0x70, 0xd4, 0x57, 0x96, 0xe, 0x7, 0x30, 0x9, 0x5e, 0x6f, 0xb0, 0xe9, 0xc5, 0x19, 0xc7, 0x7e, 0xb7, 0x96, 0xf4, 0x46, 0x5e, 0xb3, 0x94, 0x92, 0x3d, 0x95, 0xe4, 0xaf, 0x0, 0xec, 0x11, 0xee, 0x5, 0x22, 0xb4, 0x90, 0x9c, 0xfc, 0xe1, 0x3f, 0x5b, 0x0, 0x63, 0x49, 0xf3, 0x48, 0x67, 0x2c, 0x4d, 0x4f, 0xa, 0x76, 0x2b, 0x6, 0x68, 0xf, 0x18, 0x79, 0xcd, 0xd2, 0x3d, 0x24, 0xbd, 0x4c, 0xf2, 0xc0, 0x62, 0xb5, 0x33, 0xce, 0x5b, 0x59, 0xd2, 0x26, 0x92, 0x2f, 0x91, 0xbc, 0xf8, 0xc5, 0x19, 0xc7, 0x6c, 0x6a, 0x4b, 0x3e, 0xf5, 0xa, 0xff, 0xf4, 0xc, 0x0, 0x0, 0x23, 0xaf, 0x7e, 0xe1, 0x7a, 0x1a, 0x5e, 0x7, 0x20, 0xe5, 0xfb, 0x61, 0x65, 0x0, 0xec, 0x82, 0xb0, 0xb, 0xc4, 0xe, 0x0, 0x5b, 0x24, 0x6d, 0x26, 0xb9, 0xd, 0xc2, 0x66, 0x41, 0x4b, 0x8c, 0x31, 0xbf, 0xfb, 0xfd, 0x4f, 0x8e, 0x59, 0x57, 0x63, 0xd6, 0x9d, 0xe, 0x75, 0xa3, 0x6, 0x76, 0x26, 0xd0, 0x98, 0xff, 0x91, 0x74, 0x8, 0x80, 0x1e, 0x24, 0xb7, 0xc0, 0xdb, 0x5b, 0x6f, 0x33, 0xd, 0xdf, 0x3, 0xf0, 0xb6, 0xa4, 0x57, 0x1, 0xbc, 0xf4, 0xe2, 0x8c, 0x63, 0xdf, 0xe9, 0xec, 0xb2, 0x76, 0x41, 0x17, 0x74, 0x41, 0x17, 0x74, 0x41, 0x17, 0x74, 0x41, 0x17, 0x74, 0x41, 0x17, 0x74, 0x41, 0x17, 0xd4, 0x6, 0xff, 0x1f, 0x32, 0x68, 0x5, 0x7e, 0x99, 0xd5, 0x97, 0x49, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char option_button_focus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xb4,0x50,0x4c,0x54,0x45,0x95,0xa9,0xb0,0x92,0xa7,0xae,0x8e,0xa2,0xa9,0x8a,0x9d,0xa4,0x85,0x98,0x9f,0x80,0x93,0x9b,0x7b,0x8f,0x96,0x77,0x8a,0x92,0x72,0x86,0x8c,0x6e,0x80,0x88,0x69,0x7c,0x84,0x64,0x77,0x7f,0x60,0x72,0x7a,0x5b,0x6e,0x75,0x56,0x69,0x71,0xc8,0xe3,0xe7,0xc8,0xe2,0xe7,0xca,0xe3,0xe7,0xce,0xe6,0xe9,0xce,0xe6,0xea,0xd0,0xe6,0xe9,0xce,0xe5,0xea,0xd0,0xe6,0xea,0xce,0xe5,0xe9,0xd0,0xe5,0xe9,0xd3,0xe7,0xeb,0xd4,0xe7,0xeb,0xd9,0xea,0xed,0xd7,0xe9,0xed,0xd7,0xea,0xed,0xdc,0xec,0xef,0xdc,0xeb,0xef,0xe0,0xed,0xf1,0xdf,0xee,0xf1,0xdf,0xed,0xf1,0xe0,0xee,0xf1,0xe3,0xf0,0xf2,0xe2,0xef,0xf2,0xe3,0xef,0xf2,0xe6,0xf1,0xf3,0xe8,0xf2,0xf5,0xe8,0xf3,0xf4,0xe8,0xf2,0xf4,0xe8,0xf3,0xf5,0xd6,0x5a,0x5b,0xd4,0x57,0x58,0xe5,0x89,0x89,0xd5,0x57,0x59,0xd5,0x58,0x59,0xd5,0x59,0x5a,0xd6,0x59,0x5a,0xd6,0x5a,0x5c,0xd7,0x5b,0x5c,0xd7,0x5b,0x5d,0xd8,0x5c,0x5d,0xd8,0x5c,0x5e,0xd8,0x5d,0x5f,0xd9,0x5d,0x5f,0xe8,0x6c,0x6e,0xff,0xff,0xff,0xa1,0xe,0x37,0x8c,0x0,0x0,0x0,0x2c,0x74,0x52,0x4e,0x53,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0xac,0x80,0x68,0x47,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x3b,0x39,0xe,0xf4,0x6c,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xa3,0x49,0x44,0x41,0x54,0x18,0xd3,0x5d,0xce,0xdb,0x16,0x42,0x60,0x18,0x84,0xe1,0x4f,0x8,0x65,0x57,0x2a,0x45,0xd9,0x15,0xf9,0xa3,0x89,0x28,0xea,0xfe,0x2f,0x2c,0x4e,0x2c,0x79,0xd6,0xbc,0xe7,0x43,0x34,0xc5,0xe5,0x7f,0x38,0x9a,0xdd,0x31,0x72,0x9f,0x11,0xff,0x80,0x61,0x18,0xa6,0x69,0xac,0xba,0x50,0xf0,0x24,0x14,0x58,0x5b,0x9b,0xed,0xce,0xb6,0x6d,0x6b,0x8f,0x42,0x20,0xb1,0xc4,0xc1,0x71,0xe,0x7d,0x8e,0x83,0x52,0xa4,0xf9,0x13,0xae,0x7b,0x74,0x7b,0xa7,0x13,0x9e,0x73,0x92,0x72,0x78,0xbe,0xef,0x75,0x7c,0xcf,0x47,0x2e,0x91,0x5c,0x21,0x8,0xc2,0x20,0x8c,0x82,0x73,0x18,0xa1,0x92,0x49,0xa9,0x71,0x89,0xe3,0x38,0x49,0xba,0x25,0xa8,0x15,0x5a,0xbc,0x70,0x1d,0xe0,0xb5,0xa0,0xe5,0x1b,0x69,0xca,0xd8,0x8d,0x31,0x96,0x65,0x68,0x96,0xa4,0x36,0x60,0x3,0x34,0x2a,0x69,0xed,0xf8,0x7a,0xab,0x91,0xfe,0xf9,0x8e,0x7c,0x74,0xd2,0x27,0x7e,0x7e,0x46,0x20,0x17,0xe,0x2d,0x4e,0x9,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char option_arrow_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x82, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xcd, 0x90, 0x31, 0xa, 0xc2, 0x50, 0x10, 0x44, 0xdf, 0x4f, 0x95, 0x46, 0xc8, 0xc7, 0xdc, 0x40, 0x1b, 0xbd, 0x9a, 0xc7, 0x89, 0xb1, 0xb0, 0x48, 0x44, 0xb0, 0xf0, 0x26, 0x5e, 0x42, 0xd0, 0x5e, 0xcf, 0xf0, 0x6c, 0xb6, 0xf8, 0x1, 0xd1, 0x36, 0x53, 0xce, 0xbe, 0x59, 0x86, 0x81, 0x79, 0x4a, 0x3d, 0xa8, 0xa3, 0xda, 0x7c, 0xb9, 0x35, 0xea, 0xa0, 0x1e, 0x1, 0xaa, 0xf0, 0x6b, 0x60, 0x3, 0xf4, 0x6a, 0x2e, 0x61, 0xa0, 0x3, 0xb6, 0xc1, 0x4c, 0xbe, 0x5c, 0xd4, 0x9b, 0x7a, 0x55, 0x5b, 0x75, 0xa1, 0x9e, 0x4a, 0xf, 0x20, 0x15, 0xa1, 0xc, 0xec, 0x81, 0x15, 0x70, 0x7, 0x4, 0xd6, 0xc0, 0x3, 0xd8, 0xa5, 0x94, 0xde, 0x93, 0x40, 0x51, 0xa1, 0x8f, 0x10, 0xc0, 0x33, 0xe0, 0xd7, 0xaf, 0x1, 0x72, 0x54, 0x39, 0xab, 0xcb, 0x7f, 0x83, 0xcd, 0x40, 0x1f, 0xb6, 0x77, 0x59, 0xce, 0xb2, 0xbd, 0x7f, 0xb8, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char option_button_hover_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x40,0xde,0x8d,0x6b,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x44,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x42,0x40,0x4b,0x5f,0x5a,0x6c,0x2b,0x2b,0x31,0x2e,0x2e,0x34,0x5f,0x5a,0x6b,0x2a,0x2a,0x30,0x56,0x53,0x64,0x22,0x22,0x27,0x3e,0x3b,0x46,0x57,0x53,0x63,0x24,0x24,0x28,0x24,0x24,0x29,0x5b,0x57,0x68,0x5a,0x56,0x67,0x67,0x63,0x76,0x2a,0x2a,0x31,0x2a,0x2a,0x30,0x2d,0x2d,0x34,0x2f,0x2f,0x36,0x2e,0x2e,0x35,0x2c,0x2c,0x32,0x4d,0x4a,0x57,0x49,0x46,0x52,0x48,0x45,0x51,0x5a,0x56,0x65,0x26,0x26,0x2b,0x24,0x24,0x28,0x27,0x27,0x2d,0x29,0x29,0x2f,0x28,0x28,0x2e,0x25,0x25,0x2b,0x23,0x23,0x28,0x5b,0x57,0x66,0x26,0x26,0x2c,0x25,0x25,0x2a,0x2a,0x2a,0x2f,0x2b,0x2b,0x31,0x22,0x22,0x26,0x59,0x55,0x64,0x47,0x44,0x50,0x2d,0x2d,0x33,0x22,0x22,0x27,0x58,0x54,0x64,0x46,0x43,0x50,0x27,0x27,0x2b,0x2e,0x2e,0x34,0x2c,0x2c,0x31,0x29,0x29,0x2e,0x56,0x53,0x63,0x45,0x42,0x4f,0x56,0x53,0x62,0x45,0x42,0x4e,0x24,0x24,0x2a,0x24,0x24,0x29,0x20,0x20,0x25,0x55,0x51,0x62,0x44,0x41,0x4e,0x28,0x28,0x2d,0x2b,0x2b,0x30,0x29,0x29,0x2d,0x20,0x20,0x23,0x55,0x51,0x60,0x44,0x41,0x4d,0x22,0x22,0x28,0x27,0x27,0x2c,0x1e,0x1e,0x22,0x43,0x40,0x4c,0x54,0x50,0x5f,0x21,0x21,0x26,0x21,0x21,0x25,0x23,0x23,0x27,0x20,0x20,0x24,0x1d,0x1d,0x21,0x47,0x43,0x51,0x43,0x3f,0x4d,0x42,0x3f,0x4c,0x53,0x4f,0x5f,0x1f,0x1f,0x24,0x1f,0x1f,0x23,0x1e,0x1e,0x21,0x53,0x50,0x5f,0x53,0x4f,0x5e,0x5f,0x5a,0x6c,0xff,0xff,0xff,0xd1,0x85,0xc5,0x5,0x0,0x0,0x0,0x24,0x74,0x52,0x4e,0x53,0x0,0x4,0xa,0x11,0x19,0x1f,0x22,0x24,0x1d,0x16,0xd,0x7,0x2,0x15,0x25,0x34,0x3f,0x46,0x47,0x48,0x43,0x3a,0x2d,0x1b,0x77,0xef,0xe6,0x49,0xef,0xe6,0xef,0xe7,0x77,0xef,0xe4,0x4a,0xba,0xea,0xc1,0xeb,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x6b,0x52,0x65,0xa5,0x98,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x1,0x10,0x49,0x44,0x41,0x54,0x28,0xcf,0x8d,0xd1,0xd9,0x52,0xc2,0x30,0x14,0x80,0x61,0xd6,0xa2,0xa8,0x6c,0x75,0xdf,0x77,0xa8,0xa2,0x70,0xd2,0x4a,0x25,0x6d,0x81,0x62,0xa1,0x88,0x20,0x6e,0xc5,0xaa,0x80,0xfb,0xfa,0xfe,0xf,0x60,0x49,0x13,0x86,0xd1,0xb,0xfd,0x6e,0xf3,0xcf,0xe4,0x24,0xc7,0xe3,0xf5,0xf9,0x3,0x41,0x2e,0xe4,0xe0,0x46,0x46,0xc3,0x63,0xe3,0x9e,0x9f,0x7c,0x13,0x91,0x68,0x2c,0x9e,0xe0,0x79,0x7e,0x72,0x6a,0x7a,0x26,0xec,0xfd,0x15,0xf8,0x23,0xb3,0x73,0x9b,0x5b,0xae,0xed,0x64,0x4a,0xd8,0xa1,0x76,0x85,0x74,0x6a,0x7e,0xc1,0x9,0x2,0xd1,0xc5,0xbd,0xfd,0x8c,0x2b,0xb,0x48,0x94,0xa8,0x3,0x31,0x27,0xcb,0x4b,0x4e,0x10,0x8c,0x1d,0xb2,0xf3,0x4c,0x36,0x8f,0x95,0x34,0xa5,0x2a,0x22,0xd6,0x44,0x27,0xe0,0xe2,0x85,0x22,0x53,0xc8,0x43,0x52,0xa0,0x4a,0xaa,0x4,0x7a,0x3f,0x8,0x25,0xca,0x47,0x4c,0xd9,0x0,0xb5,0x42,0x95,0xaa,0x26,0x68,0x46,0x3f,0xe0,0x6b,0xc7,0x4c,0x6d,0x38,0x50,0x9d,0x0,0x48,0x50,0x3f,0x61,0xea,0xb9,0x86,0x34,0x34,0x43,0xf3,0x14,0x93,0x2b,0x5a,0x67,0x4c,0xb,0xa1,0xf3,0xb,0x4a,0xb9,0x4,0xf9,0xa,0x91,0x21,0xad,0x36,0x63,0x5d,0xeb,0xf6,0xe0,0x99,0x76,0x43,0xbf,0xd1,0xc9,0x33,0xad,0xf6,0x2d,0x75,0xd7,0xe9,0x62,0x9b,0x2,0xdc,0xbb,0x7f,0xd0,0xc8,0x47,0x2d,0x3f,0x3e,0x3d,0xbb,0x5e,0x3a,0xaf,0x32,0xa6,0x9a,0xbd,0xee,0xdb,0xfb,0xa,0xf9,0xea,0xd5,0xb5,0x8f,0x4f,0xd7,0x17,0x80,0x39,0x98,0xc1,0x34,0xd0,0xfa,0xc6,0x7f,0x96,0xf5,0xd7,0xba,0xbf,0x1,0xfe,0x22,0x58,0x7c,0xf4,0xd2,0xd1,0x68,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char option_button_disabled_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x77, 0x0, 0x7d, 0x59, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0xf, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0xed, 0xd5, 0x31, 0x4a, 0x3, 0x41, 0x18, 0x86, 0xe1, 0xf7, 0x9f, 0xd9, 0x94, 0xda, 0x27, 0x17, 0x30, 0x27, 0xb0, 0x15, 0xa2, 0x57, 0xd0, 0x4d, 0x20, 0xeb, 0x5, 0x9c, 0x68, 0x50, 0xc4, 0x80, 0x8, 0x8b, 0x6b, 0xa2, 0x85, 0x85, 0xa2, 0x37, 0x70, 0x5, 0x41, 0x4, 0x4b, 0x2d, 0x52, 0xe4, 0x18, 0xf6, 0x41, 0x6b, 0x4d, 0x17, 0x76, 0x66, 0x2c, 0x24, 0x51, 0x82, 0x8d, 0xc5, 0xae, 0x4d, 0xbe, 0xea, 0x9f, 0xea, 0x7d, 0xba, 0x81, 0x7f, 0x9e, 0x4c, 0x8e, 0x86, 0xe9, 0x55, 0x9d, 0x64, 0x67, 0x38, 0xa9, 0x21, 0x2c, 0xe4, 0x52, 0xf3, 0x8c, 0x10, 0xfa, 0x4e, 0xd3, 0xb9, 0xbf, 0x3c, 0x7a, 0x99, 0x2, 0x1a, 0xa6, 0x57, 0xb5, 0xd8, 0x81, 0x8, 0xe7, 0x25, 0xad, 0xd2, 0xf4, 0xe2, 0xf0, 0x2d, 0x8f, 0x7e, 0xb3, 0xdd, 0x2d, 0x8f, 0x33, 0x1f, 0x9, 0x7e, 0xd7, 0x69, 0x56, 0x26, 0x8, 0xc2, 0xd6, 0xf1, 0x63, 0xd8, 0x4a, 0xf6, 0xf3, 0x88, 0xfe, 0xb6, 0xfa, 0x56, 0x72, 0x10, 0x9a, 0xe4, 0x1, 0x40, 0x1, 0xe0, 0xa4, 0x56, 0xd2, 0x2a, 0x2d, 0xa, 0x80, 0xd8, 0x1b, 0x60, 0x6d, 0xfa, 0xe, 0x4d, 0xe2, 0xb, 0x8b, 0xcf, 0x34, 0x55, 0xd1, 0xe1, 0xd9, 0xcd, 0x1, 0x73, 0xc0, 0x17, 0xc0, 0x33, 0x6a, 0xb6, 0xbb, 0xe5, 0xa2, 0xa2, 0x75, 0x13, 0x57, 0x80, 0xf7, 0x6f, 0x80, 0xd0, 0x1f, 0x67, 0x3e, 0x2a, 0xa, 0xe0, 0x9, 0x36, 0x45, 0x78, 0x6, 0x8, 0x0, 0x9c, 0xa6, 0xa3, 0xac, 0x1f, 0x6c, 0x98, 0x13, 0x14, 0x59, 0x7a, 0x77, 0x1d, 0xbf, 0xe6, 0x11, 0xae, 0x9b, 0xb8, 0x82, 0xd7, 0x91, 0xc3, 0x6f, 0x7, 0xd8, 0x65, 0xf8, 0xf1, 0x19, 0xad, 0xef, 0x24, 0x4b, 0x62, 0xfd, 0xa9, 0x20, 0xab, 0xc0, 0x62, 0x1e, 0x0, 0xe0, 0x43, 0x84, 0x27, 0x8d, 0xdd, 0xbb, 0xbd, 0x8a, 0x87, 0x39, 0x35, 0xfe, 0xb6, 0x4f, 0xcf, 0xae, 0x53, 0xd0, 0x62, 0x78, 0xc7, 0x3a, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char option_button_normal_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x40,0xde,0x8d,0x6b,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x44,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x3a,0x44,0x56,0x53,0x61,0x2b,0x2b,0x31,0x2e,0x2e,0x34,0x56,0x52,0x60,0x2a,0x2a,0x30,0x47,0x44,0x52,0x22,0x22,0x27,0x33,0x31,0x39,0x47,0x44,0x50,0x24,0x24,0x28,0x24,0x24,0x29,0x52,0x50,0x5d,0x51,0x4f,0x5d,0x5d,0x5a,0x6a,0x2a,0x2a,0x31,0x2a,0x2a,0x30,0x2d,0x2d,0x34,0x2f,0x2f,0x36,0x2e,0x2e,0x35,0x2c,0x2c,0x32,0x46,0x42,0x4e,0x42,0x3e,0x4a,0x41,0x3e,0x49,0x51,0x4e,0x5b,0x26,0x26,0x2b,0x24,0x24,0x28,0x27,0x27,0x2d,0x29,0x29,0x2f,0x28,0x28,0x2e,0x25,0x25,0x2b,0x23,0x23,0x28,0x40,0x3e,0x48,0x50,0x4e,0x5a,0x26,0x26,0x2c,0x25,0x25,0x2a,0x2a,0x2a,0x2f,0x2b,0x2b,0x31,0x22,0x22,0x26,0x4f,0x4c,0x59,0x3f,0x3d,0x47,0x2d,0x2d,0x33,0x22,0x22,0x27,0x4e,0x4a,0x58,0x3e,0x3b,0x46,0x27,0x27,0x2b,0x2e,0x2e,0x34,0x2c,0x2c,0x31,0x29,0x29,0x2e,0x4b,0x49,0x55,0x3c,0x3a,0x44,0x4a,0x47,0x54,0x3b,0x39,0x43,0x24,0x24,0x2a,0x24,0x24,0x29,0x20,0x20,0x25,0x49,0x46,0x53,0x3a,0x38,0x42,0x28,0x28,0x2d,0x2b,0x2b,0x30,0x29,0x29,0x2d,0x20,0x20,0x23,0x47,0x45,0x50,0x39,0x37,0x40,0x22,0x22,0x28,0x27,0x27,0x2c,0x1e,0x1e,0x22,0x47,0x43,0x50,0x38,0x35,0x3f,0x46,0x42,0x4f,0x21,0x21,0x26,0x21,0x21,0x25,0x23,0x23,0x27,0x20,0x20,0x24,0x1d,0x1d,0x21,0x36,0x34,0x3e,0x44,0x41,0x4e,0x1f,0x1f,0x24,0x1f,0x1f,0x23,0x1e,0x1e,0x21,0x44,0x42,0x4d,0x44,0x41,0x4c,0x4e,0x4b,0x58,0xff,0xff,0xff,0xd7,0xc8,0xfe,0x88,0x0,0x0,0x0,0x24,0x74,0x52,0x4e,0x53,0x0,0x4,0xa,0x11,0x19,0x1f,0x22,0x24,0x1d,0x16,0xd,0x7,0x2,0x15,0x25,0x34,0x3f,0x46,0x47,0x48,0x43,0x3a,0x2d,0x1b,0x77,0xef,0xe6,0x49,0xef,0xe6,0xef,0xe7,0x77,0xef,0xe4,0x4a,0xba,0xea,0xc1,0xeb,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x6b,0x52,0x65,0xa5,0x98,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x1,0xe,0x49,0x44,0x41,0x54,0x28,0xcf,0x8d,0xd1,0xd7,0x56,0xc2,0x40,0x10,0x80,0x61,0x6a,0x50,0x54,0x5a,0xec,0xbd,0x43,0x14,0x85,0xdd,0x44,0xa2,0x6c,0x12,0x20,0x18,0xd,0x22,0x8,0x16,0x34,0x16,0xc0,0x5e,0xde,0xff,0x1,0x5c,0x36,0xb3,0x1c,0x8e,0x5e,0xe8,0x77,0xfd,0x9f,0xb3,0x33,0xb3,0x1e,0xaf,0xcf,0x1f,0x8,0xa,0x21,0x4a,0x18,0x1a,0xe,0x8f,0x8c,0x7a,0x7e,0xf2,0x8d,0x45,0xa2,0xb1,0x78,0x42,0x14,0xc5,0xf1,0x89,0xc9,0xa9,0xb0,0xf7,0x57,0xe0,0x8f,0x4c,0xcf,0xac,0x6f,0xb8,0x36,0x93,0x29,0x69,0xb,0x6c,0x4b,0xe9,0xd4,0xec,0x1c,0xd,0x2,0xd1,0xf9,0x9d,0xdd,0x8c,0x2b,0x8b,0xb0,0xac,0x80,0x3d,0x39,0xa7,0xaa,0xb,0x34,0x8,0xc6,0xb2,0x99,0x7d,0x70,0x90,0x27,0x5a,0x1a,0xe8,0x9a,0x4c,0xc,0x99,0x6,0x42,0xbc,0x50,0xe4,0xa,0x79,0x94,0x94,0x40,0x49,0x57,0x90,0xd9,0xb,0x42,0x89,0xf2,0x21,0x57,0xb6,0x90,0x7e,0x4,0x4a,0xc7,0x36,0x32,0xac,0x5e,0x20,0x56,0x4e,0xb8,0xca,0x60,0xa0,0xd3,0x0,0xb1,0xa0,0x7a,0xca,0x55,0x73,0x35,0x65,0x60,0x86,0xfa,0x19,0x61,0x4f,0x34,0x9a,0x5c,0x3,0xe3,0xf3,0xb,0xa0,0x5d,0x22,0xf5,0xa,0xb3,0x21,0x5b,0xd7,0x5c,0xeb,0xc6,0x74,0xfa,0x6b,0x3a,0x35,0xf3,0xd6,0x64,0x6b,0xde,0xdd,0x73,0xf,0xed,0xe,0x71,0x0,0x22,0xdd,0xc7,0x27,0x83,0x1d,0x6a,0xb1,0xf9,0xc,0x5e,0xda,0xaf,0x2a,0x1,0xf5,0x6e,0xe7,0xed,0x7d,0x89,0x9d,0x7a,0x79,0xe5,0xe3,0xd3,0xf5,0x85,0x90,0xdd,0x9f,0xc1,0xb6,0xf0,0xea,0xda,0x7f,0x3e,0xeb,0xaf,0xef,0xfe,0x6,0x1a,0x96,0x59,0x89,0x91,0xf7,0xf1,0x7b,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char option_button_hover_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x77, 0x0, 0x7d, 0x59, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf5, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0xed, 0xd5, 0x31, 0x4e, 0xc3, 0x40, 0x10, 0x46, 0xe1, 0x37, 0xbb, 0xdb, 0x42, 0x9f, 0xf4, 0x8, 0x8b, 0x3, 0x50, 0x82, 0x30, 0x88, 0x5b, 0x98, 0x23, 0x50, 0x80, 0x10, 0xb9, 0x1, 0x14, 0xb9, 0x5, 0x6e, 0x91, 0x28, 0x21, 0x8a, 0x13, 0x25, 0x87, 0x88, 0xec, 0x84, 0x12, 0x41, 0xd, 0xe9, 0xa2, 0xac, 0x87, 0xca, 0xc8, 0x8a, 0x68, 0x28, 0x76, 0x69, 0xf2, 0x57, 0xd3, 0xbd, 0xaf, 0x1b, 0xf8, 0xe7, 0x49, 0x73, 0x8c, 0x2b, 0x4d, 0xbc, 0xe1, 0x5e, 0x20, 0x5, 0x76, 0x2, 0xf5, 0x96, 0x40, 0x21, 0x9e, 0x5e, 0x9a, 0x48, 0xf5, 0x3, 0x18, 0x57, 0x9a, 0xd4, 0x86, 0x89, 0x28, 0x7d, 0xb7, 0x26, 0x3f, 0x3a, 0x90, 0x8f, 0x10, 0xf5, 0xe9, 0x4c, 0x3b, 0x2b, 0x47, 0x26, 0xc2, 0x95, 0x78, 0x8e, 0x1b, 0x4, 0xc3, 0x85, 0x3e, 0x8d, 0xe6, 0x7a, 0x13, 0x22, 0xfa, 0xdb, 0x8a, 0x85, 0xde, 0x16, 0xaf, 0xfa, 0x8, 0x60, 0x0, 0x4, 0x52, 0xb7, 0x26, 0x8f, 0x5, 0xf0, 0x9e, 0x7, 0x94, 0xb3, 0xb6, 0x48, 0x63, 0xc5, 0x37, 0x9b, 0x26, 0x76, 0x78, 0x73, 0x5b, 0xc0, 0x16, 0xd0, 0x0, 0x96, 0xd3, 0x99, 0x76, 0x62, 0x45, 0x7, 0xa5, 0x76, 0x81, 0xcf, 0x36, 0xa0, 0x58, 0x39, 0xb2, 0x58, 0x0, 0x6b, 0xb9, 0x0, 0x5e, 0x0, 0x1c, 0x80, 0x78, 0x7a, 0x58, 0x26, 0xc3, 0xb9, 0x52, 0xd7, 0xe4, 0xe7, 0x89, 0xbc, 0x87, 0x8, 0xf, 0x4a, 0xed, 0x5a, 0x4b, 0xa6, 0xc2, 0xa5, 0x55, 0xe, 0xa1, 0xf5, 0x8c, 0x46, 0xa5, 0xee, 0xab, 0xe1, 0xe, 0xe1, 0x14, 0xd8, 0xd, 0x1, 0x0, 0xbe, 0x80, 0x67, 0x3, 0xd7, 0x27, 0x7b, 0xf2, 0x16, 0xa8, 0xf1, 0xb7, 0x7d, 0x3, 0x6a, 0x72, 0x53, 0x9c, 0x5f, 0x1a, 0xab, 0xcf, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char option_button_pressed_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x40,0xde,0x8d,0x6b,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x4d,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x31,0x2f,0x37,0x46,0x43,0x4f,0x2b,0x2b,0x31,0x2e,0x2e,0x34,0x47,0x44,0x50,0x2a,0x2a,0x30,0x55,0x52,0x5f,0x22,0x22,0x27,0x3d,0x3a,0x45,0x56,0x52,0x60,0x24,0x24,0x28,0x24,0x24,0x29,0x43,0x40,0x4c,0x42,0x40,0x4b,0x4c,0x49,0x56,0x2a,0x2a,0x31,0x2a,0x2a,0x30,0x2d,0x2d,0x34,0x2f,0x2f,0x36,0x2e,0x2e,0x35,0x2c,0x2c,0x32,0x3a,0x38,0x41,0x36,0x34,0x3d,0x44,0x41,0x4c,0x26,0x26,0x2b,0x24,0x24,0x28,0x27,0x27,0x2d,0x29,0x29,0x2f,0x28,0x28,0x2e,0x25,0x25,0x2b,0x23,0x23,0x28,0x44,0x42,0x4e,0x36,0x34,0x3e,0x44,0x41,0x4e,0x26,0x26,0x2c,0x25,0x25,0x2a,0x2a,0x2a,0x2f,0x2b,0x2b,0x31,0x22,0x22,0x26,0x46,0x42,0x4f,0x38,0x35,0x3f,0x2d,0x2d,0x33,0x22,0x22,0x27,0x47,0x45,0x50,0x39,0x37,0x40,0x27,0x27,0x2b,0x2e,0x2e,0x34,0x2c,0x2c,0x31,0x29,0x29,0x2e,0x49,0x46,0x53,0x3a,0x38,0x42,0x4a,0x47,0x54,0x3b,0x39,0x43,0x24,0x24,0x2a,0x24,0x24,0x29,0x20,0x20,0x25,0x4b,0x49,0x55,0x3c,0x3a,0x44,0x28,0x28,0x2d,0x2b,0x2b,0x30,0x29,0x29,0x2d,0x20,0x20,0x23,0x4e,0x4a,0x58,0x3e,0x3b,0x46,0x22,0x22,0x28,0x27,0x27,0x2c,0x1e,0x1e,0x22,0x50,0x4d,0x5a,0x3f,0x3d,0x48,0x3f,0x3d,0x47,0x4f,0x4c,0x59,0x21,0x21,0x26,0x21,0x21,0x25,0x23,0x23,0x27,0x20,0x20,0x24,0x1d,0x1d,0x21,0x45,0x42,0x4d,0x41,0x3e,0x49,0x40,0x3e,0x48,0x50,0x4e,0x5a,0x1f,0x1f,0x24,0x1f,0x1f,0x23,0x1e,0x1e,0x21,0x52,0x4e,0x5c,0x51,0x4e,0x5b,0x5d,0x59,0x69,0xff,0xff,0xff,0x2,0x4e,0xff,0xf1,0x0,0x0,0x0,0x24,0x74,0x52,0x4e,0x53,0x0,0x4,0xa,0x11,0x19,0x1f,0x22,0x24,0x1d,0x16,0xd,0x7,0x2,0x15,0x25,0x34,0x3f,0x46,0x47,0x48,0x43,0x3a,0x2d,0x1b,0x77,0xef,0xe6,0x49,0xef,0xe6,0xef,0xe7,0x77,0xef,0xe4,0x4a,0xba,0xea,0xc1,0xeb,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x6e,0x22,0xf,0x51,0x17,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x1,0xe,0x49,0x44,0x41,0x54,0x28,0xcf,0x8d,0xd1,0x57,0x53,0xc2,0x40,0x10,0xc0,0x71,0x6a,0x50,0x54,0x5a,0xec,0xbd,0x43,0x14,0xf5,0x2e,0x91,0xa8,0x5c,0x12,0x20,0x18,0xd,0x22,0x88,0xd,0x8d,0xd,0xb0,0xd7,0xef,0xff,0xea,0x71,0xd9,0x63,0x18,0x7d,0xd0,0xdf,0xf3,0x7f,0xe6,0x76,0xf7,0x3c,0x5e,0x9f,0x3f,0x10,0x14,0x42,0x94,0xd0,0xd3,0x1b,0xee,0xeb,0xf7,0xfc,0xe4,0x1b,0x88,0x44,0x63,0xf1,0x84,0x28,0x8a,0x83,0x43,0xc3,0x23,0x61,0xef,0xaf,0xc0,0x1f,0x19,0x1d,0x5b,0x5c,0x72,0x2d,0x27,0x53,0xd2,0xa,0x58,0x95,0xd2,0xa9,0xf1,0x9,0x1a,0x4,0xa2,0x93,0x6b,0xeb,0x60,0x3,0x61,0x59,0x1,0x9b,0x72,0x46,0x55,0xa7,0x68,0x10,0x8c,0x6d,0x6d,0x73,0x3b,0x59,0xa2,0xa5,0x81,0xae,0xc9,0xc4,0x90,0x69,0x20,0xc4,0x73,0x79,0x2e,0x97,0x45,0x49,0x9,0x14,0x74,0x5,0x99,0xed,0x20,0x94,0x28,0xee,0x72,0x45,0xb,0xe9,0x7b,0xa0,0xb0,0x6f,0x23,0xc3,0x6a,0x7,0x62,0xe9,0x80,0x2b,0x75,0x7,0x3a,0xd,0x10,0xb,0xca,0x87,0x5c,0x39,0x53,0x51,0xba,0x66,0xa8,0x1e,0x11,0xf6,0x44,0xed,0x98,0xab,0x61,0x7c,0x72,0xa,0xb4,0x33,0xa4,0x9e,0x63,0x36,0x64,0xfd,0x82,0xab,0x5f,0x9a,0x4e,0x67,0x4d,0xa7,0x62,0x5e,0x99,0x6c,0xcd,0xeb,0x9b,0x5b,0x70,0xd7,0x68,0x12,0x7,0x20,0xd2,0xba,0x7f,0x30,0xd8,0xa1,0xa6,0x1f,0x9f,0x9e,0x5d,0x2f,0x8d,0x57,0x95,0x80,0x6a,0xab,0xf9,0xf6,0x3e,0xc3,0x4e,0x3d,0x3b,0xf7,0xf1,0xe9,0xfa,0x42,0xc8,0xee,0xcc,0x60,0x5b,0x78,0x7e,0xe1,0x3f,0x9f,0xf5,0xd7,0x77,0x7f,0x3,0x1c,0x7f,0x59,0xc2,0x5e,0xdd,0xbf,0x43,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char option_button_normal_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x1c, 0x8, 0x6, 0x0, 0x0, 0x0, 0x0, 0xc2, 0xbd, 0x22, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x19, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0xed, 0xc1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x82, 0x20, 0xff, 0xaf, 0x6e, 0x48, 0x40, 0x1, 0x0, 0x0, 0xf0, 0x6e, 0xe, 0x1c, 0x0, 0x1, 0xe8, 0x20, 0x47, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char panel_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x1,0x3,0x0,0x0,0x0,0xfe,0xc1,0x2c,0xc8,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0x25,0x25,0x2a,0x35,0x32,0x3b,0x4a,0x73,0x58,0x4a,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1,0xff,0x2,0x2d,0xde,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xb,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x40,0x5,0x0,0x0,0x10,0x0,0x1,0xa1,0xc5,0x21,0xc1,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char option_button_pressed_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x77, 0x0, 0x7d, 0x59, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf3, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0xed, 0xd5, 0x31, 0x4a, 0x3, 0x41, 0x18, 0x86, 0xe1, 0xf7, 0x9f, 0x95, 0x74, 0xda, 0x27, 0x17, 0xd0, 0x13, 0xd8, 0xa, 0xd1, 0x6b, 0xac, 0x47, 0x10, 0x54, 0x64, 0x43, 0x30, 0xcb, 0x14, 0xa2, 0xce, 0x1a, 0xc8, 0x21, 0xdc, 0x56, 0xb0, 0xd4, 0x22, 0x45, 0x8e, 0x61, 0x2f, 0x5a, 0x6b, 0xca, 0xc4, 0xfd, 0x2c, 0xcc, 0x86, 0x20, 0x82, 0x58, 0xcc, 0xda, 0xe4, 0xab, 0x86, 0x61, 0xe0, 0x7d, 0xba, 0x81, 0x7f, 0x9e, 0xd5, 0x7, 0xaf, 0xe1, 0x4e, 0x45, 0x75, 0xd, 0x74, 0x81, 0xcd, 0x48, 0xbd, 0xa9, 0x60, 0x2c, 0xd4, 0xbb, 0xb0, 0xec, 0x69, 0x9, 0x58, 0xc4, 0x27, 0xa0, 0xe1, 0x9c, 0x56, 0x79, 0x69, 0xc7, 0xaf, 0x31, 0xea, 0x7d, 0x8d, 0xda, 0x9, 0xb3, 0xd4, 0xe0, 0xa4, 0x42, 0x7b, 0x35, 0x82, 0x5c, 0xc5, 0x7d, 0xae, 0x70, 0x16, 0x23, 0xfa, 0xd3, 0x72, 0x85, 0x6c, 0xa0, 0x9b, 0x3b, 0x0, 0xb7, 0xb8, 0xeb, 0xce, 0x69, 0x95, 0x4d, 0x1, 0x1c, 0xdc, 0x1a, 0x3a, 0x58, 0x11, 0x15, 0x6a, 0x2a, 0xfe, 0xbd, 0xe9, 0x7e, 0x7b, 0x18, 0x7b, 0x6b, 0xc0, 0x1a, 0x50, 0x3, 0xa6, 0x7d, 0x8d, 0xda, 0x4d, 0x45, 0xbd, 0x42, 0x7, 0x78, 0x5b, 0x2, 0x4, 0xe3, 0x84, 0x59, 0xda, 0x14, 0xe0, 0x3, 0x3b, 0x34, 0xf4, 0x8, 0xb0, 0xf1, 0x5, 0x50, 0xcf, 0x61, 0x93, 0x81, 0xa, 0x12, 0x54, 0x7a, 0xcb, 0x5e, 0x62, 0x84, 0xbd, 0x42, 0xa7, 0x82, 0x14, 0x74, 0x64, 0xb0, 0xb, 0x2b, 0x9f, 0xd1, 0xb9, 0xc2, 0xb6, 0xc3, 0xae, 0x80, 0x7d, 0x60, 0x2b, 0x6, 0x0, 0x78, 0x37, 0xf4, 0x60, 0x70, 0xea, 0x2d, 0x7b, 0x8e, 0xd4, 0xf8, 0xdb, 0x3e, 0x1, 0x97, 0xcd, 0x54, 0x90, 0xa4, 0x27, 0x1c, 0xb4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char popup_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xa5,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3b,0x3b,0x43,0x42,0x42,0x4b,0x3e,0x3e,0x47,0x3e,0x3e,0x46,0x41,0x41,0x4a,0x0,0x0,0x0,0x3d,0x3d,0x45,0x3b,0x3b,0x43,0x3a,0x3a,0x42,0x38,0x38,0x41,0x37,0x37,0x3e,0x36,0x36,0x3d,0x35,0x35,0x3c,0x0,0x0,0x0,0x38,0x38,0x40,0x38,0x38,0x40,0x31,0x31,0x38,0x34,0x34,0x3b,0x34,0x34,0x3b,0x39,0x39,0x3f,0x31,0x31,0x38,0x2f,0x2f,0x36,0x2d,0x2d,0x33,0x2c,0x2c,0x32,0x2b,0x2b,0x31,0x2a,0x2a,0x31,0x2a,0x2a,0x30,0x29,0x29,0x30,0x29,0x29,0x2f,0x28,0x28,0x2e,0x28,0x28,0x2d,0x27,0x27,0x2d,0x27,0x27,0x2c,0x29,0x29,0x2e,0x26,0x26,0x2c,0x35,0x32,0x3b,0xf,0xeb,0x7f,0x60,0x0,0x0,0x0,0x28,0x74,0x52,0x4e,0x53,0x0,0x1,0x3,0x5,0x8,0xa,0xb,0x4,0x13,0x19,0x1f,0x22,0x23,0x16,0x27,0x35,0x3f,0x45,0x46,0x94,0xf5,0xfa,0xfb,0xf5,0x40,0xfc,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0x1a,0xf5,0xf6,0x95,0xfa,0xfb,0xf4,0x94,0x71,0xda,0xac,0x92,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x36,0x47,0xbf,0x88,0xd1,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xaf,0x49,0x44,0x41,0x54,0x18,0xd3,0x65,0xcf,0xc9,0x12,0x82,0x30,0x10,0x4,0xd0,0x1,0x12,0xb6,0x0,0x21,0x2c,0xb2,0xaa,0xa0,0xa8,0x80,0x88,0x8,0xf8,0xff,0xbf,0x66,0x98,0x93,0xa5,0xef,0xd8,0x55,0xd3,0xd5,0x3,0xa0,0xa8,0x1a,0xa1,0xba,0x44,0x89,0xa6,0x2a,0x0,0x8a,0x41,0x4d,0xcb,0x66,0x8e,0xc3,0x6c,0xcb,0xa4,0x86,0x2,0x2a,0x75,0x3d,0xee,0x8b,0x20,0x10,0x3e,0xf7,0x5c,0xaa,0x82,0x66,0x7a,0x61,0x14,0xef,0xa4,0x38,0xa,0x3d,0x53,0x3,0x62,0xf1,0xa4,0xed,0x50,0x9b,0x70,0x8b,0x0,0xb5,0xd3,0xac,0xeb,0x51,0x97,0xa5,0x36,0x5,0x9d,0x89,0xbc,0xbf,0xa3,0x3e,0x17,0x4c,0x7,0xdd,0x9,0x8a,0xe1,0x81,0x86,0x22,0x70,0x30,0x28,0xc7,0x27,0x1a,0x4b,0xc,0x98,0xd8,0x4f,0x2f,0x34,0xed,0xb7,0x13,0x59,0x7a,0x98,0x17,0x34,0x1f,0xb7,0x52,0x52,0xf1,0x7a,0x5d,0xde,0xd2,0xb2,0x9e,0x78,0x45,0xb6,0x61,0xe7,0xba,0xb9,0x48,0xcd,0xf5,0xb6,0xd,0xc3,0xe9,0xe9,0xd7,0xf4,0xbf,0xe7,0x7e,0xdf,0xff,0x0,0xda,0x19,0x15,0x34,0xd5,0xa4,0x90,0x50,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char panel_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x2, 0x0, 0x0, 0x0, 0x4b, 0x6d, 0x29, 0xdc, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x14, 0x49, 0x44, 0x41, 0x54, 0x8, 0x99, 0x63, 0x54, 0xd6, 0x32, 0x62, 0xc0, 0x6, 0x98, 0xb0, 0x8a, 0xe, 0x5a, 0x9, 0x0, 0x69, 0x33, 0x0, 0x8f, 0xd7, 0xa0, 0x34, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char popup_bg_disabled_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x7b,0x50,0x4c,0x54,0x45,0xff,0x0,0xff,0x67,0x7a,0x85,0x66,0x7a,0x86,0x68,0x7b,0x86,0x57,0x51,0x51,0x4c,0x42,0x40,0x4d,0x43,0x41,0x56,0x4c,0x4b,0x4d,0x44,0x41,0x4e,0x44,0x42,0x4f,0x45,0x43,0x67,0x7b,0x87,0x4f,0x44,0x43,0x50,0x45,0x44,0x52,0x46,0x44,0x51,0x46,0x45,0x4b,0x40,0x3f,0x51,0x47,0x45,0x52,0x48,0x46,0x53,0x48,0x47,0x4b,0x41,0x3f,0x54,0x49,0x46,0x55,0x4a,0x47,0x55,0x49,0x47,0x68,0x7c,0x88,0x4a,0x40,0x3e,0x55,0x4b,0x49,0x56,0x4d,0x4b,0x53,0x49,0x47,0x50,0x46,0x44,0x4a,0x41,0x3e,0x48,0x3e,0x3c,0x4b,0x42,0x3f,0x49,0x3f,0x3d,0x46,0x3d,0x3c,0x47,0x3d,0x3b,0x47,0x3e,0x3b,0x49,0x40,0x3d,0x45,0x3c,0x3b,0x46,0x3c,0x3a,0xff,0xff,0xff,0x2e,0x48,0xbd,0x3e,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x28,0xbd,0xb0,0xb5,0xb2,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xb3,0x49,0x44,0x41,0x54,0x18,0xd3,0x2d,0x8f,0xdb,0x16,0x82,0x20,0x10,0x45,0x11,0x19,0x12,0x91,0x54,0x44,0x93,0xb2,0x48,0xa1,0xfc,0xff,0x3f,0xec,0xa0,0xed,0xb7,0xd9,0x73,0xd6,0x5c,0x18,0x3,0x5,0x2f,0x1,0x2f,0xd8,0x49,0xc1,0x5,0x49,0x40,0xe2,0x54,0xc5,0x85,0x2a,0xa9,0x80,0xac,0x48,0x64,0xc3,0x89,0x64,0x7d,0x20,0x89,0x34,0x2,0x82,0x48,0x35,0xe6,0x7a,0x6d,0x1b,0x45,0x39,0xc2,0x3b,0x92,0x4d,0x6f,0x87,0xc1,0xf6,0x30,0x4e,0x33,0xed,0xb2,0x18,0xa7,0xdb,0x64,0x8d,0x24,0x37,0x33,0xed,0x9d,0xac,0xfb,0xf1,0xfe,0x18,0x97,0xa7,0x3a,0xc4,0xcb,0x51,0x16,0xf7,0xc9,0x42,0x78,0x88,0xf0,0x76,0xca,0xb4,0xcb,0x62,0xd,0x2,0x2b,0xc4,0x16,0x7c,0x5e,0x63,0x9e,0x35,0x75,0x6b,0xd4,0x58,0x9b,0x3e,0x98,0x8b,0xbb,0xd0,0x8f,0xa2,0x64,0x88,0xc4,0xb0,0x7a,0xe7,0x3a,0x1f,0x12,0x2,0xf9,0xb2,0x6f,0x8c,0x31,0x84,0x18,0xd3,0x26,0xf8,0xf1,0x8c,0x16,0xfb,0x9e,0xd2,0xbe,0xb,0x5d,0xfe,0xff,0xe5,0x7a,0x6,0x67,0xf9,0x3,0x92,0x36,0xd,0x2d,0xc1,0xf2,0x6d,0x3c,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char popup_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x5e, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x93, 0x31, 0x4b, 0x1c, 0x51, 0x14, 0x85, 0xbf, 0x77, 0x67, 0xde, 0x9b, 0x85, 0x71, 0x58, 0xc, 0x51, 0xc2, 0x16, 0x6, 0x2c, 0x42, 0x48, 0x29, 0x81, 0x5d, 0x42, 0x8, 0xb6, 0x8a, 0x42, 0xba, 0x74, 0xfe, 0x87, 0xfc, 0x92, 0x14, 0xf9, 0x15, 0x69, 0x55, 0x4c, 0x17, 0xb6, 0x58, 0xc2, 0x6, 0xf6, 0x17, 0xb8, 0xcd, 0x36, 0x2e, 0xc2, 0x80, 0xb2, 0x98, 0x31, 0x99, 0x37, 0x33, 0xf7, 0xa5, 0x30, 0x85, 0xc8, 0xae, 0x2e, 0xd6, 0x1e, 0x38, 0xe5, 0x77, 0xb8, 0xf7, 0xc0, 0x31, 0xdc, 0x48, 0x80, 0x17, 0xc0, 0x33, 0xc0, 0x71, 0xbf, 0x3c, 0x70, 0x1, 0x9c, 0x3, 0x6a, 0xfe, 0xc3, 0xaf, 0x80, 0xf4, 0xed, 0xf6, 0xde, 0x7e, 0x9a, 0x65, 0x5d, 0x91, 0x78, 0x75, 0x1e, 0xa9, 0x5a, 0x5f, 0x16, 0x57, 0x57, 0xbf, 0x46, 0xfd, 0xe3, 0x23, 0xa0, 0x0, 0x4e, 0xd, 0xd0, 0xb1, 0xd6, 0x76, 0xde, 0xed, 0x7c, 0xfa, 0xe2, 0x5c, 0xf2, 0x5e, 0x55, 0x9b, 0x10, 0x34, 0x9a, 0x17, 0x60, 0x8c, 0x34, 0x22, 0x12, 0x79, 0x5f, 0xe, 0x7e, 0x7e, 0xff, 0xf6, 0xb9, 0xaa, 0xaa, 0x69, 0x4, 0xbc, 0xdc, 0xfa, 0xb0, 0xfb, 0x71, 0x25, 0x6b, 0x1f, 0x94, 0x7f, 0xaf, 0x29, 0xff, 0x5c, 0x4b, 0x5d, 0x79, 0xe6, 0xb9, 0xf2, 0xa5, 0x84, 0x10, 0x48, 0x92, 0xd6, 0x46, 0xfb, 0xf9, 0xfa, 0x74, 0x3a, 0x19, 0x4f, 0x4, 0xb0, 0x69, 0x96, 0x75, 0x55, 0xb5, 0xa9, 0xbc, 0x7f, 0xe0, 0x7d, 0xa8, 0x7c, 0x49, 0x50, 0x6d, 0xd2, 0xb4, 0xdd, 0x3, 0xac, 0x0, 0x46, 0x24, 0x5e, 0x5b, 0x74, 0xf6, 0xdc, 0x2e, 0x82, 0x46, 0x12, 0xc7, 0x6b, 0x80, 0x91, 0x65, 0xa1, 0x45, 0x7a, 0xa, 0xb8, 0x9, 0x8, 0x5a, 0xd7, 0xb9, 0x31, 0xd2, 0x2c, 0xb, 0x19, 0x23, 0x8d, 0xd6, 0x75, 0xe, 0x4, 0x1, 0xaa, 0xa2, 0x98, 0xd, 0x45, 0x24, 0xb2, 0x2e, 0x79, 0x10, 0xb6, 0x2e, 0x41, 0x44, 0xa2, 0xa2, 0x98, 0xd, 0x1, 0x1f, 0x1, 0x71, 0x7e, 0x36, 0x39, 0xef, 0x6c, 0xbe, 0x7e, 0x93, 0x24, 0xad, 0x8d, 0xd8, 0xba, 0x26, 0xb6, 0x56, 0xac, 0x73, 0xdc, 0xb5, 0x4b, 0x5a, 0x8d, 0xb5, 0x4e, 0xbc, 0x2f, 0x7, 0xa3, 0x1f, 0x87, 0x5f, 0x55, 0x35, 0xbf, 0x33, 0xa6, 0xdd, 0xbd, 0x34, 0x6d, 0xf7, 0x24, 0x5e, 0x30, 0xa6, 0xba, 0xbe, 0x2c, 0x8a, 0xd9, 0x70, 0xd4, 0x3f, 0x39, 0x6, 0x7e, 0x3, 0x63, 0x73, 0xab, 0x8b, 0x47, 0xcd, 0xf9, 0x1f, 0x55, 0x2d, 0x97, 0x76, 0x54, 0xe2, 0xdb, 0x90, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char popup_checked_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x6,0x0,0x0,0x0,0xc4,0xf,0xbe,0x8b,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xa3,0x49,0x44,0x41,0x54,0x18,0x95,0x85,0xcd,0xa1,0xa,0xc2,0x50,0x0,0x85,0xe1,0xff,0xdc,0x5d,0xd8,0x14,0x4,0xab,0x69,0x37,0xac,0x98,0xd5,0x27,0xb0,0x89,0x16,0x8b,0xd5,0xf7,0xd0,0xec,0x73,0xf8,0x4,0x16,0x61,0x4d,0x10,0xc,0x16,0xa3,0x61,0x71,0xab,0x16,0xeb,0x84,0x3b,0xae,0x45,0x8b,0xa,0x9e,0x78,0xce,0x7,0x7,0xfe,0x44,0xbf,0xca,0xa2,0x28,0x3a,0x71,0x1c,0x1f,0x24,0x3d,0xcc,0xe7,0x18,0x42,0x50,0x92,0x24,0x5b,0x49,0x23,0xa0,0xfd,0x5,0xaa,0xaa,0x5a,0x1,0x73,0xe0,0x1e,0x45,0xd1,0x42,0x65,0x59,0x9e,0x80,0x96,0xf7,0x7e,0x62,0xad,0x1d,0x2,0xfb,0x97,0x9d,0x39,0xe7,0x72,0x1b,0x42,0x88,0x25,0xd,0xac,0xb5,0x47,0xa0,0x7,0x18,0x60,0xed,0x9c,0xcb,0x1,0x4c,0xd3,0x34,0x53,0xe0,0xa,0xf4,0x81,0x2e,0xb0,0x4b,0xd3,0x74,0xf3,0xbe,0x34,0x59,0x96,0xdd,0xbc,0xf7,0x63,0xe0,0x2,0x9c,0xeb,0xba,0x5e,0x4a,0xa,0x6f,0xf0,0x4,0x57,0x3d,0x2c,0x27,0x2b,0xe9,0x62,0x6b,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char popup_bg_disabled_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x7b, 0x50, 0x4c, 0x54, 0x45, 0xff, 0x0, 0xff, 0x67, 0x7a, 0x85, 0x66, 0x7a, 0x86, 0x68, 0x7b, 0x86, 0x57, 0x51, 0x51, 0x4c, 0x42, 0x40, 0x4d, 0x43, 0x41, 0x56, 0x4c, 0x4b, 0x4d, 0x44, 0x41, 0x4e, 0x44, 0x42, 0x4f, 0x45, 0x43, 0x67, 0x7b, 0x87, 0x4f, 0x44, 0x43, 0x50, 0x45, 0x44, 0x52, 0x46, 0x44, 0x51, 0x46, 0x45, 0x4b, 0x40, 0x3f, 0x51, 0x47, 0x45, 0x52, 0x48, 0x46, 0x53, 0x48, 0x47, 0x4b, 0x41, 0x3f, 0x54, 0x49, 0x46, 0x55, 0x4a, 0x47, 0x55, 0x49, 0x47, 0x68, 0x7c, 0x88, 0x4a, 0x40, 0x3e, 0x55, 0x4b, 0x49, 0x56, 0x4d, 0x4b, 0x53, 0x49, 0x47, 0x50, 0x46, 0x44, 0x4a, 0x41, 0x3e, 0x48, 0x3e, 0x3c, 0x4b, 0x42, 0x3f, 0x49, 0x3f, 0x3d, 0x46, 0x3d, 0x3c, 0x47, 0x3d, 0x3b, 0x47, 0x3e, 0x3b, 0x49, 0x40, 0x3d, 0x45, 0x3c, 0x3b, 0x46, 0x3c, 0x3a, 0xff, 0xff, 0xff, 0x2e, 0x48, 0xbd, 0x3e, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x28, 0xbd, 0xb0, 0xb5, 0xb2, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0xb3, 0x49, 0x44, 0x41, 0x54, 0x18, 0xd3, 0x2d, 0x8f, 0xdb, 0x16, 0x82, 0x20, 0x10, 0x45, 0x11, 0x19, 0x12, 0x91, 0x54, 0x44, 0x93, 0xb2, 0x48, 0xa1, 0xfc, 0xff, 0x3f, 0xec, 0xa0, 0xed, 0xb7, 0xd9, 0x73, 0xd6, 0x5c, 0x18, 0x3, 0x5, 0x2f, 0x1, 0x2f, 0xd8, 0x49, 0xc1, 0x5, 0x49, 0x40, 0xe2, 0x54, 0xc5, 0x85, 0x2a, 0xa9, 0x80, 0xac, 0x48, 0x64, 0xc3, 0x89, 0x64, 0x7d, 0x20, 0x89, 0x34, 0x2, 0x82, 0x48, 0x35, 0xe6, 0x7a, 0x6d, 0x1b, 0x45, 0x39, 0xc2, 0x3b, 0x92, 0x4d, 0x6f, 0x87, 0xc1, 0xf6, 0x30, 0x4e, 0x33, 0xed, 0xb2, 0x18, 0xa7, 0xdb, 0x64, 0x8d, 0x24, 0x37, 0x33, 0xed, 0x9d, 0xac, 0xfb, 0xf1, 0xfe, 0x18, 0x97, 0xa7, 0x3a, 0xc4, 0xcb, 0x51, 0x16, 0xf7, 0xc9, 0x42, 0x78, 0x88, 0xf0, 0x76, 0xca, 0xb4, 0xcb, 0x62, 0xd, 0x2, 0x2b, 0xc4, 0x16, 0x7c, 0x5e, 0x63, 0x9e, 0x35, 0x75, 0x6b, 0xd4, 0x58, 0x9b, 0x3e, 0x98, 0x8b, 0xbb, 0xd0, 0x8f, 0xa2, 0x64, 0x88, 0xc4, 0xb0, 0x7a, 0xe7, 0x3a, 0x1f, 0x12, 0x2, 0xf9, 0xb2, 0x6f, 0x8c, 0x31, 0x84, 0x18, 0xd3, 0x26, 0xf8, 0xf1, 0x8c, 0x16, 0xfb, 0x9e, 0xd2, 0xbe, 0xb, 0x5d, 0xfe, 0xff, 0xe5, 0x7a, 0x6, 0x67, 0xf9, 0x3, 0x92, 0x36, 0xd, 0x2d, 0xc1, 0xf2, 0x6d, 0x3c, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char popup_hover_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x30,0x50,0x4c,0x54,0x45,0xff,0x0,0xff,0x20,0x2e,0x31,0x83,0xae,0xb7,0xb3,0xd8,0xe1,0xaf,0xd5,0xde,0xac,0xd2,0xdb,0xa9,0xcf,0xd8,0xa5,0xcc,0xd5,0xa2,0xc9,0xd2,0x9e,0xc6,0xcf,0x9b,0xc3,0xcc,0x97,0xc0,0xc9,0x94,0xbd,0xc6,0x91,0xba,0xc3,0x8d,0xb7,0xc0,0xff,0xff,0xff,0x73,0xd4,0x4e,0xcb,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xf,0x18,0xba,0x0,0xd9,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x4c,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x14,0x4,0x3,0x1,0x6,0x21,0x25,0x30,0x50,0x64,0x10,0x32,0x6,0x3,0x20,0xc3,0x5,0xc,0x80,0x8c,0x50,0x30,0x0,0x32,0xd2,0xc0,0x0,0xc8,0x28,0x7,0x3,0x20,0xa3,0x3,0xc,0x80,0x8c,0x99,0x60,0x0,0x64,0xac,0x2,0x3,0x20,0x63,0x37,0x18,0x0,0x19,0x67,0xc0,0x0,0xc8,0xb8,0xb,0x6,0x40,0xc6,0x3b,0x30,0x50,0x44,0x58,0xa,0x73,0x6,0x0,0xe9,0xb4,0x2d,0xf5,0x51,0xd4,0xb8,0xa1,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char popup_checked_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xa3, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x85, 0xcd, 0xa1, 0xa, 0xc2, 0x50, 0x0, 0x85, 0xe1, 0xff, 0xdc, 0x5d, 0xd8, 0x14, 0x4, 0xab, 0x69, 0x37, 0xac, 0x98, 0xd5, 0x27, 0xb0, 0x89, 0x16, 0x8b, 0xd5, 0xf7, 0xd0, 0xec, 0x73, 0xf8, 0x4, 0x16, 0x61, 0x4d, 0x10, 0xc, 0x16, 0xa3, 0x61, 0x71, 0xab, 0x16, 0xeb, 0x84, 0x3b, 0xae, 0x45, 0x8b, 0xa, 0x9e, 0x78, 0xce, 0x7, 0x7, 0xfe, 0x44, 0xbf, 0xca, 0xa2, 0x28, 0x3a, 0x71, 0x1c, 0x1f, 0x24, 0x3d, 0xcc, 0xe7, 0x18, 0x42, 0x50, 0x92, 0x24, 0x5b, 0x49, 0x23, 0xa0, 0xfd, 0x5, 0xaa, 0xaa, 0x5a, 0x1, 0x73, 0xe0, 0x1e, 0x45, 0xd1, 0x42, 0x65, 0x59, 0x9e, 0x80, 0x96, 0xf7, 0x7e, 0x62, 0xad, 0x1d, 0x2, 0xfb, 0x97, 0x9d, 0x39, 0xe7, 0x72, 0x1b, 0x42, 0x88, 0x25, 0xd, 0xac, 0xb5, 0x47, 0xa0, 0x7, 0x18, 0x60, 0xed, 0x9c, 0xcb, 0x1, 0x4c, 0xd3, 0x34, 0x53, 0xe0, 0xa, 0xf4, 0x81, 0x2e, 0xb0, 0x4b, 0xd3, 0x74, 0xf3, 0xbe, 0x34, 0x59, 0x96, 0xdd, 0xbc, 0xf7, 0x63, 0xe0, 0x2, 0x9c, 0xeb, 0xba, 0x5e, 0x4a, 0xa, 0x6f, 0xf0, 0x4, 0x57, 0x3d, 0x2c, 0x27, 0x2b, 0xe9, 0x62, 0x6b, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char popup_unchecked_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x1,0x3,0x0,0x0,0x0,0xfe,0xc1,0x2c,0xc8,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0xff,0x0,0xff,0xff,0xff,0xff,0x9f,0x18,0x32,0xe0,0x0,0x0,0x0,0x1,0x74,0x52,0x4e,0x53,0x0,0x40,0xe6,0xd8,0x66,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1,0xff,0x2,0x2d,0xde,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0xb,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x40,0x5,0x0,0x0,0x10,0x0,0x1,0xa1,0xc5,0x21,0xc1,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char popup_window_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x14, 0x0, 0x0, 0x0, 0x24, 0x8, 0x6, 0x0, 0x0, 0x0, 0x89, 0xf3, 0x1a, 0xa0, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0xb7, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0xed, 0x96, 0x31, 0x6f, 0xd3, 0x40, 0x18, 0x86, 0x9f, 0xfb, 0x62, 0x27, 0x71, 0x2, 0x49, 0x93, 0x3a, 0x48, 0x91, 0x80, 0x2e, 0x1d, 0x2a, 0x48, 0xa5, 0x22, 0x41, 0xc5, 0x42, 0x18, 0x18, 0x18, 0x18, 0xf9, 0x2b, 0xfc, 0xd, 0xfe, 0x9, 0x7f, 0x80, 0x91, 0x46, 0x95, 0x10, 0xa8, 0x62, 0x48, 0x51, 0x18, 0x58, 0x0, 0x75, 0xa9, 0x4b, 0x1a, 0x2c, 0x48, 0x1a, 0x9f, 0x73, 0xc7, 0x10, 0x87, 0x18, 0xe4, 0x88, 0x56, 0xca, 0xe8, 0x57, 0xba, 0xe1, 0x24, 0xbf, 0xcf, 0xdd, 0x77, 0x5e, 0x1e, 0x58, 0x73, 0x54, 0xc6, 0xbe, 0x5, 0x34, 0x0, 0xf, 0x90, 0x15, 0x3d, 0x3, 0x4c, 0x80, 0x21, 0x70, 0x6, 0xd8, 0x2c, 0xa0, 0xb, 0x6c, 0x27, 0xc0, 0x4d, 0xa0, 0x9c, 0x71, 0xe0, 0x22, 0x36, 0x5, 0xc, 0x80, 0xcf, 0x80, 0x6, 0x70, 0x52, 0xe0, 0x6d, 0x60, 0xb, 0xd8, 0xbc, 0xfb, 0xe0, 0x71, 0xb7, 0xde, 0xf4, 0x3b, 0x8e, 0xe3, 0xd6, 0xb2, 0x68, 0x71, 0xac, 0xc3, 0x1f, 0xc3, 0xb3, 0xe3, 0x8f, 0xef, 0xdf, 0x1c, 0x24, 0x93, 0x0, 0x7c, 0x2, 0xec, 0xe2, 0x6, 0x37, 0x80, 0x9d, 0x42, 0xa1, 0x70, 0xeb, 0xe1, 0xd3, 0xe7, 0x2f, 0x2a, 0x95, 0xeb, 0x7b, 0xc6, 0x18, 0x63, 0xad, 0xc9, 0x1c, 0x59, 0x29, 0x31, 0x22, 0x22, 0xe3, 0xf1, 0xcf, 0xf, 0x6f, 0x5f, 0xbf, 0x7a, 0x39, 0x9b, 0xcd, 0xbe, 0x1, 0x3, 0x20, 0x28, 0x24, 0xdf, 0xdc, 0x4, 0xb6, 0xee, 0xdc, 0xef, 0x3e, 0x69, 0xb6, 0xda, 0xcf, 0xa6, 0x17, 0x63, 0xa6, 0x93, 0xb1, 0x8a, 0x75, 0x44, 0xd6, 0xd2, 0xd1, 0x54, 0x59, 0x6b, 0xf1, 0xbc, 0x6a, 0xbb, 0x5c, 0xad, 0x6, 0xa7, 0x27, 0x5f, 0x4e, 0x80, 0x5f, 0xc0, 0xf7, 0xc5, 0xd, 0x3c, 0xa0, 0x5c, 0x6f, 0xfa, 0x1d, 0x63, 0x8c, 0xd1, 0x51, 0xb4, 0xe2, 0xe9, 0x96, 0xd1, 0xd1, 0x14, 0x6b, 0x8c, 0xa9, 0x6d, 0xb4, 0x76, 0x99, 0xbf, 0xb7, 0x7, 0xcb, 0xbf, 0x28, 0x80, 0x72, 0x1c, 0xb7, 0xb1, 0x6a, 0xcc, 0xac, 0x18, 0x6b, 0xc4, 0x71, 0xdd, 0x46, 0xd2, 0x97, 0x34, 0x70, 0x6d, 0xc9, 0x81, 0x39, 0x30, 0x7, 0xe6, 0xc0, 0x1c, 0x98, 0x3, 0xd7, 0xd, 0x34, 0x80, 0x8d, 0xb5, 0x3e, 0x57, 0x4a, 0xcc, 0x65, 0xcb, 0x4a, 0x89, 0x89, 0xb5, 0x3e, 0x4f, 0xfa, 0xb3, 0x34, 0x70, 0x2, 0x4c, 0xc2, 0x51, 0xd0, 0x17, 0x11, 0x71, 0x8b, 0xa5, 0xff, 0xc2, 0xdc, 0x62, 0x9, 0x11, 0x91, 0x70, 0x14, 0xf4, 0x81, 0x8b, 0x64, 0xfd, 0x71, 0x9b, 0x21, 0x30, 0x1c, 0x1c, 0x1d, 0xf6, 0xea, 0x7e, 0x7b, 0xbf, 0x52, 0xb9, 0x76, 0xcf, 0x2d, 0x96, 0x2e, 0xa5, 0x22, 0x83, 0xa3, 0xc3, 0xde, 0xa2, 0xf, 0x4b, 0xbb, 0x52, 0xc0, 0xe, 0x70, 0x1b, 0xf0, 0x3b, 0xfb, 0xdd, 0x47, 0xb5, 0x8d, 0xd6, 0xae, 0xe3, 0xae, 0x90, 0x25, 0xad, 0xc3, 0x70, 0x14, 0xf4, 0x8f, 0xdf, 0x1d, 0xf4, 0x98, 0xeb, 0xdc, 0x57, 0xfe, 0x91, 0x25, 0xf8, 0x5b, 0xe7, 0x9a, 0xcc, 0xd5, 0xe2, 0xca, 0x3a, 0x97, 0x25, 0x9c, 0x7e, 0xa, 0x78, 0x65, 0xe1, 0x5c, 0x7b, 0x7e, 0x3, 0x2f, 0x8a, 0xb1, 0xd0, 0xbc, 0xa4, 0x7e, 0x33, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char popup_window_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0x46,0x8,0x3,0x0,0x0,0x0,0x8d,0x2b,0xf6,0x48,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x6e,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0xe8,0xe5,0xf1,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x1d,0x22,0x0,0x0,0x0,0x1a,0x19,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x1e,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x1d,0x21,0x17,0x16,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x21,0x1f,0x24,0x1b,0x1a,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x21,0x1f,0x24,0x1e,0x1c,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x22,0x20,0x25,0x20,0x1e,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x21,0x1f,0x24,0x0,0x0,0x0,0x21,0x1f,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x22,0x20,0x25,0x0,0x0,0x0,0x20,0x20,0x25,0x20,0x1d,0x25,0x20,0x1d,0x22,0x1d,0x1d,0x22,0x1d,0x1d,0x20,0x1d,0x1a,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x32,0x30,0x38,0xe8,0xe5,0xf1,0xe5,0xe2,0xeb,0xe3,0xe1,0xe8,0xe1,0xdf,0xe7,0xe0,0xde,0xe6,0xdf,0xdd,0xe5,0xde,0xdc,0xe4,0xdd,0xdb,0xe3,0xdc,0xda,0xe2,0xda,0xd8,0xe0,0xd9,0xd7,0xdf,0xd7,0xd6,0xdf,0xd6,0xd4,0xdd,0xd5,0xd3,0xdc,0xd4,0xd1,0xdb,0xd3,0xd0,0xda,0xd1,0xce,0xd8,0xd0,0xcd,0xd7,0xcf,0xcd,0xd7,0xe2,0xdf,0xeb,0x48,0x46,0x51,0x42,0x40,0x4b,0x40,0x3e,0x48,0x40,0x3d,0x48,0x48,0x45,0x50,0x42,0x3f,0x4a,0x3f,0x3d,0x48,0x47,0x44,0x50,0x41,0x3f,0x4a,0x3f,0x3d,0x47,0x41,0x3e,0x49,0x3f,0x3c,0x47,0x46,0x43,0x4f,0x3e,0x3c,0x46,0x40,0x3e,0x49,0x3d,0x3b,0x46,0x45,0x43,0x4e,0x3d,0x3b,0x45,0x44,0x42,0x4d,0x3d,0x3a,0x45,0x3e,0x3c,0x47,0x3c,0x3a,0x44,0x43,0x42,0x4c,0x43,0x40,0x4c,0x3e,0x3b,0x46,0x3b,0x39,0x43,0x43,0x3f,0x4c,0x43,0x3f,0x4b,0x3a,0x38,0x42,0x42,0x3e,0x4b,0x42,0x3e,0x49,0x3a,0x37,0x41,0x39,0x37,0x41,0x3f,0x3e,0x48,0x39,0x37,0x40,0x38,0x36,0x40,0x3e,0x3d,0x48,0x38,0x36,0x3f,0x3e,0x3d,0x47,0x3a,0x38,0x41,0x38,0x35,0x3f,0x37,0x35,0x3e,0x39,0x36,0x40,0x37,0x34,0x3e,0x3d,0x3a,0x46,0x36,0x34,0x3d,0x3d,0x3a,0x44,0x37,0x35,0x3f,0x35,0x33,0x3c,0x46,0x44,0x4f,0xff,0xff,0xff,0x7e,0xde,0x1d,0x81,0x0,0x0,0x0,0x33,0x74,0x52,0x4e,0x53,0x0,0xa2,0x3,0x9,0x17,0xc,0x20,0xf,0x2a,0x5e,0x12,0x30,0x68,0x46,0x20,0x4e,0xa2,0x7d,0x3a,0x4f,0xa4,0x7d,0x3f,0x25,0x60,0xc0,0xb8,0x57,0x1d,0xba,0x59,0xbd,0x5b,0x22,0xbf,0x5e,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xa1,0x9f,0x9e,0x52,0x92,0x15,0x44,0x7e,0xd8,0x5,0xc7,0xf4,0xac,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x79,0xa1,0xdc,0xd4,0xd0,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x1,0xe8,0x49,0x44,0x41,0x54,0x48,0xc7,0xd5,0xd6,0xd9,0x53,0xd3,0x60,0x14,0xc6,0xe1,0x92,0x5a,0xa3,0x44,0xa3,0xd6,0x85,0xa0,0xb1,0x5a,0xcb,0xda,0xbd,0x7c,0xb8,0xef,0x2b,0x69,0x21,0xd0,0xda,0x22,0x25,0xd,0x69,0x20,0x60,0x69,0x11,0x2a,0x22,0xcb,0x9f,0xef,0x78,0x97,0x7e,0xe7,0x3d,0x33,0x1d,0xbd,0x70,0xfc,0x5d,0x3f,0x77,0xe7,0xe2,0x3d,0x91,0xc8,0x7f,0xd8,0x88,0x60,0x1a,0x21,0x54,0xcc,0x3f,0x84,0xcd,0xb,0x4a,0x1f,0x31,0xfd,0x1d,0x7d,0xcc,0x4,0xe8,0x13,0x26,0x40,0x9f,0x32,0x1,0xfa,0x8c,0x9,0xd0,0xe7,0x4c,0x80,0xbe,0x60,0x2,0xf4,0x25,0x13,0xa0,0xaf,0x98,0x0,0x7d,0xcd,0x44,0xa8,0x22,0xde,0x30,0x49,0x54,0x89,0x9e,0x13,0x6f,0x99,0x64,0x1a,0x3b,0x2f,0xde,0x31,0x49,0x54,0xbd,0x70,0x51,0xbc,0x67,0x92,0xe8,0xa8,0x76,0x49,0x7c,0x60,0x12,0x97,0xf5,0x68,0x88,0xea,0x57,0xae,0x8a,0x8f,0x4c,0xe2,0x5a,0x7c,0x34,0x4c,0xaf,0xdf,0x10,0x9f,0x98,0xc4,0xcd,0x5b,0x21,0xaa,0x8c,0x19,0xe3,0xb,0x56,0x19,0x66,0x2d,0xdc,0xbe,0x63,0x2a,0x43,0xd2,0xbb,0x9,0x7d,0x58,0x7a,0xef,0x7e,0x72,0x58,0xfa,0x20,0x35,0x36,0x2c,0x1d,0x37,0x8,0xad,0xc0,0x0,0x5d,0x5c,0xb2,0x61,0x4b,0x8b,0x32,0x9d,0x58,0x5e,0xa9,0xc2,0x56,0x96,0x27,0x8,0xad,0x7d,0x86,0xd5,0x28,0xad,0xd7,0x1a,0xb0,0x5a,0x9d,0xd2,0x55,0x4c,0x57,0x1,0xad,0x7c,0x81,0x55,0x8,0x9d,0x5c,0xb3,0x9b,0x30,0x7b,0x6d,0x52,0xa2,0x53,0xeb,0x55,0x7,0x56,0x5d,0x9f,0x22,0xb4,0xe5,0xc2,0x5a,0x94,0x6e,0x34,0x30,0x6d,0x6c,0x10,0xea,0xb5,0x7d,0x58,0xdb,0x93,0xe9,0xf4,0x66,0x13,0xd3,0xe6,0xe6,0xb4,0x4c,0xb7,0x9c,0x0,0xe6,0x6c,0x11,0xba,0xed,0x62,0xea,0x6e,0x13,0xba,0xe3,0x7e,0x85,0xb9,0x3b,0x84,0x96,0xfd,0xe,0xcc,0x2f,0x13,0xba,0xeb,0x77,0x61,0xfe,0x2e,0xa1,0x76,0xd0,0x83,0x5,0x36,0xa1,0x7b,0xc1,0x37,0x58,0xb0,0x27,0xd3,0x99,0xfd,0x83,0x3e,0xec,0x60,0x7f,0x46,0xa2,0xb3,0xad,0xce,0x77,0x58,0xa7,0x35,0x2b,0xd3,0xf6,0x21,0xa6,0x87,0x6d,0x40,0x7f,0xc0,0x0,0x3d,0xea,0xfd,0x84,0xf5,0x8e,0x8,0x75,0xfa,0x98,0xf6,0x1d,0x42,0x8f,0x39,0x7a,0x4c,0xe9,0xc9,0x29,0xec,0x64,0x90,0x46,0x92,0xa9,0xb4,0x75,0xca,0x64,0xa5,0x53,0xc9,0xc8,0x1f,0xd2,0xc,0x4f,0x33,0x3,0x54,0x4f,0x64,0x79,0x9a,0x4d,0xe8,0x21,0x6a,0xe6,0xf2,0x1e,0x47,0xbd,0x7c,0xce,0xc,0xd1,0x42,0xb1,0x54,0xef,0x62,0xd9,0x3d,0x2b,0x15,0xb,0x21,0xaa,0x6a,0xc6,0xdc,0x99,0x67,0x81,0xbc,0xfa,0x9c,0xa1,0xa9,0x21,0x1a,0x35,0xe3,0x46,0x29,0x9f,0xcd,0xa4,0xa5,0x32,0xd9,0x7c,0xc9,0x88,0x9b,0xe1,0xe1,0x54,0x62,0xa6,0x56,0xcc,0x25,0x52,0xa4,0x44,0xae,0xa8,0x99,0xb1,0xd0,0x5,0x7e,0x3f,0x4,0x6a,0xc1,0xd4,0x93,0x24,0xdd,0x2c,0xa8,0xd1,0x1,0xf9,0xf,0xfb,0x5,0x66,0x6f,0x2a,0x9a,0xa8,0x51,0x81,0xce,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char progress_bar_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x12, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x60, 0x18, 0x5, 0xa3, 0x60, 0x14, 0x8c, 0x2, 0x8, 0x0, 0x0, 0x4, 0x10, 0x0, 0x1, 0x7f, 0x4d, 0x78, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char progress_bar_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x33,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2d,0x2c,0x2f,0x48,0x46,0x4a,0x4c,0x4a,0x4e,0x48,0x46,0x4a,0x40,0x3e,0x42,0x38,0x36,0x3a,0x27,0x27,0x27,0xe1,0x1d,0x66,0x4d,0x0,0x0,0x0,0xc,0x74,0x52,0x4e,0x53,0xa,0x1a,0x26,0x29,0x2a,0x48,0x65,0x6d,0x6e,0x66,0xf5,0xfe,0xb7,0x4a,0xbe,0x33,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x10,0x95,0xb2,0xd,0x2c,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x44,0x49,0x44,0x41,0x54,0x18,0xd3,0xc5,0xcf,0x31,0x16,0x0,0x10,0xc,0x44,0xc1,0x4d,0x84,0x4,0xc1,0xfd,0x6f,0xab,0xc9,0x53,0x70,0x0,0x53,0x6e,0xb5,0x1f,0x20,0x4e,0x12,0x12,0x13,0x40,0xb9,0xa8,0x5,0x2d,0x99,0xc0,0xb5,0x75,0xf,0xbd,0x55,0x86,0xe8,0x98,0x2b,0xcc,0xa1,0x2,0x31,0x5f,0x87,0xdb,0xbf,0xe1,0x3e,0xf6,0x5c,0x7f,0xe2,0xee,0xfc,0xd,0x60,0x3b,0xa,0x1d,0x9e,0x6a,0x29,0x33,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char progress_fill_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xea, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xcd, 0x92, 0x31, 0x6e, 0xc2, 0x40, 0x10, 0x45, 0xdf, 0xd8, 0x96, 0x70, 0xe9, 0xd4, 0xb9, 0x41, 0x14, 0x29, 0x74, 0xe4, 0x10, 0x3e, 0x1, 0xd4, 0x88, 0xca, 0x14, 0x6e, 0xd3, 0xd0, 0xd0, 0x52, 0xe0, 0xce, 0x35, 0x1c, 0x21, 0x67, 0x0, 0x3a, 0x17, 0x28, 0x37, 0xa0, 0x76, 0x83, 0x40, 0x1b, 0xc9, 0x99, 0x14, 0xb1, 0x2d, 0x2b, 0xc6, 0xc9, 0x52, 0xc1, 0x97, 0xb6, 0xd8, 0xaf, 0xff, 0xdf, 0x8c, 0x56, 0xb, 0xb7, 0x96, 0xfc, 0x36, 0x22, 0x5d, 0xf6, 0x2, 0xcc, 0x44, 0xd0, 0x21, 0xf0, 0x5c, 0xda, 0x7b, 0x60, 0x9d, 0xe3, 0xa7, 0x89, 0x4c, 0x4d, 0x27, 0xe0, 0x4d, 0x17, 0x8f, 0x2e, 0xc5, 0x3b, 0xe8, 0x4b, 0xc7, 0xc0, 0xac, 0xc0, 0xb, 0xe7, 0x12, 0x1f, 0x5a, 0x80, 0x48, 0x97, 0xbd, 0x7, 0xcc, 0xee, 0x8f, 0x72, 0xd, 0xc9, 0xf1, 0x5f, 0xab, 0x4d, 0x9c, 0xca, 0xd, 0x30, 0x13, 0x8b, 0x32, 0x40, 0x3f, 0xe0, 0x3c, 0xae, 0x2e, 0x35, 0x40, 0xd0, 0x91, 0x45, 0xb9, 0xcc, 0x4a, 0x9d, 0x75, 0x1a, 0xf6, 0x93, 0x2d, 0x0, 0xa4, 0x7a, 0xdc, 0x26, 0xe0, 0x1a, 0xe9, 0xd7, 0x5, 0x80, 0x7e, 0x5c, 0x41, 0xa8, 0xb3, 0xcd, 0xd, 0x56, 0xd6, 0xf3, 0xd1, 0x75, 0xb, 0x90, 0xe3, 0xa7, 0x40, 0x66, 0xd1, 0xcf, 0x5c, 0xce, 0x69, 0xb, 0x90, 0xc8, 0xd4, 0x14, 0x78, 0xe1, 0x3f, 0x90, 0xac, 0xc0, 0xb, 0x67, 0x32, 0xfb, 0x6c, 0x1, 0x0, 0xe6, 0x12, 0x1f, 0x1c, 0x4e, 0x3, 0x45, 0x23, 0x60, 0xb, 0x72, 0xfc, 0x39, 0x6c, 0x14, 0x8d, 0x1c, 0x4e, 0x83, 0xe6, 0x2f, 0xbc, 0xf, 0x7d, 0x3, 0xd2, 0x20, 0x45, 0xab, 0xcc, 0x7a, 0x21, 0xba, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char progress_fill_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0x26,0x78,0x80,0xa6,0xcf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x60,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0x18,0x78,0xc0,0x8,0x63,0x38,0x58,0x7c,0xde,0xf8,0x45,0xc,0xc2,0xe6,0x79,0xc5,0xeb,0x7f,0xe0,0x4,0x9a,0x2,0xe3,0x97,0x1f,0xb9,0xff,0x70,0x43,0xd8,0x2c,0x5f,0xf9,0xbf,0x9e,0x15,0x87,0xb2,0x61,0xa,0xbe,0x88,0xfd,0x81,0x1b,0xfb,0x87,0xfb,0xb,0x37,0x8c,0xcd,0x44,0xc8,0xd,0x54,0x54,0xc0,0xf3,0x8a,0xe5,0x2b,0x8c,0xcd,0xf2,0x95,0xe7,0x15,0x86,0x2,0x5e,0x7f,0xfe,0xaf,0xec,0xc,0x10,0xc8,0xff,0x95,0xd7,0x9f,0xe6,0x1,0x4c,0x2,0x0,0x0,0x68,0x3f,0x16,0xd7,0xea,0x7c,0xdd,0x1a,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char radio_checked_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x6e, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xc5, 0x52, 0xb1, 0x4e, 0x1b, 0x41, 0x14, 0x9c, 0x59, 0xe1, 0xf5, 0x5a, 0x72, 0x89, 0x23, 0xb9, 0x31, 0x82, 0x8, 0x17, 0x88, 0xd2, 0x88, 0x9e, 0x6, 0x92, 0x8a, 0x54, 0x40, 0x41, 0x93, 0xce, 0xb4, 0x14, 0x28, 0x1f, 0x41, 0x84, 0xf8, 0x0, 0xe8, 0x5d, 0xb9, 0x33, 0xe4, 0xb, 0x12, 0xc9, 0x1f, 0x80, 0xac, 0x88, 0x28, 0xd7, 0x58, 0xd6, 0xc9, 0xad, 0xa5, 0xdb, 0xd3, 0xdd, 0xd0, 0xec, 0x21, 0xc3, 0x1d, 0xb5, 0x5f, 0xb3, 0xa3, 0xd1, 0x7b, 0xf3, 0x66, 0xdf, 0x7b, 0xc0, 0xaa, 0x83, 0xef, 0x9, 0x49, 0xb5, 0x28, 0x8a, 0xbe, 0x49, 0x3a, 0x4, 0xb0, 0x15, 0xe8, 0x67, 0x92, 0xf, 0x9d, 0x4e, 0x67, 0x48, 0x32, 0xfd, 0x50, 0x60, 0x3a, 0x9d, 0xb6, 0xbc, 0xf7, 0x3f, 0x25, 0x6d, 0x57, 0x76, 0x23, 0x27, 0xd6, 0xda, 0xcb, 0x76, 0xbb, 0x1d, 0x17, 0x9c, 0x59, 0xee, 0x5c, 0x14, 0x93, 0x9c, 0x1, 0xf8, 0x61, 0xad, 0x3d, 0xb0, 0xd6, 0x1e, 0x48, 0xba, 0x22, 0xf9, 0x5f, 0x52, 0xd7, 0x7b, 0x7f, 0x2d, 0xa9, 0x56, 0x12, 0x8, 0xb6, 0xb7, 0x49, 0xce, 0x16, 0x8b, 0xc5, 0x77, 0x63, 0xcc, 0x4e, 0x9a, 0xa6, 0x3, 0xef, 0xfd, 0x80, 0xe4, 0xae, 0x31, 0xa6, 0x4f, 0x72, 0x26, 0xa9, 0x1b, 0x45, 0xd1, 0x71, 0x95, 0x83, 0xa3, 0xf0, 0xde, 0x34, 0x1a, 0x8d, 0xd3, 0x3c, 0xcf, 0xcf, 0x25, 0xad, 0x3, 0x58, 0x7, 0x70, 0x9e, 0x65, 0xd9, 0x19, 0x80, 0xdb, 0x90, 0x73, 0x58, 0x12, 0x0, 0xb0, 0x9, 0x0, 0xd6, 0xda, 0x3f, 0x24, 0xbf, 0x54, 0x8c, 0xe0, 0x6b, 0xbd, 0x5e, 0xff, 0x1d, 0x70, 0x31, 0xdc, 0x37, 0x2, 0xaf, 0x21, 0xa9, 0x8a, 0xce, 0xe7, 0xf3, 0x79, 0x69, 0x6b, 0xcb, 0x2, 0xff, 0x0, 0x20, 0x49, 0x92, 0x3d, 0x0, 0xa3, 0xa, 0x81, 0x51, 0xb3, 0xd9, 0xdc, 0xf, 0xf8, 0xb9, 0x20, 0xd7, 0xa, 0x40, 0x72, 0x24, 0x69, 0xc7, 0x18, 0x73, 0x61, 0x8c, 0xe9, 0x67, 0x59, 0x6, 0x0, 0xc5, 0x57, 0x46, 0x49, 0x92, 0xc, 0x9c, 0x73, 0x77, 0x21, 0xf7, 0xb1, 0xe4, 0x20, 0x1c, 0xc9, 0x44, 0xd2, 0x46, 0x9e, 0xe7, 0xf7, 0x24, 0x9f, 0x9c, 0x73, 0x27, 0xce, 0xb9, 0x93, 0x80, 0xef, 0x24, 0x7d, 0x22, 0x39, 0x89, 0xe3, 0x78, 0xf8, 0xda, 0x78, 0xd9, 0x63, 0x38, 0xa4, 0x6b, 0x49, 0xdd, 0xaa, 0x21, 0x54, 0x1d, 0x52, 0x69, 0x28, 0xe3, 0xf1, 0xb8, 0xd6, 0x6a, 0xb5, 0x8e, 0xc3, 0xaa, 0x3e, 0x87, 0xc2, 0xbf, 0x0, 0x7e, 0xc5, 0x71, 0x3c, 0xec, 0xf5, 0x7a, 0xe9, 0xfb, 0x9a, 0xd5, 0xc6, 0xb, 0x17, 0xe, 0xab, 0x4e, 0xf1, 0x77, 0xc8, 0x31, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char radio_checked_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x45,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x4,0x3,0x4,0x9,0x9,0x9,0x6,0x6,0x6,0xa,0xa,0xb,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x7f,0x7f,0x82,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,0x47,0x47,0x48,0xd3,0xd3,0xd3,0xa2,0xa2,0xa2,0x79,0x79,0x79,0x73,0x73,0x73,0x1c,0x1c,0x1c,0x3,0x3,0x3,0x0,0x0,0x0,0xff,0xff,0xff,0xa,0x69,0x4,0xd4,0x0,0x0,0x0,0xb,0x74,0x52,0x4e,0x53,0x0,0x0,0x0,0x0,0x0,0x1b,0x88,0xd1,0xf7,0x64,0xf6,0x2,0xb3,0xed,0xd7,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x16,0x7c,0xd1,0xa8,0x19,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x69,0x49,0x44,0x41,0x54,0x18,0xd3,0x6d,0x8f,0xdb,0xe,0xc0,0x20,0x8,0x43,0xdd,0xc5,0x3b,0x9d,0xa8,0xec,0xff,0x7f,0x75,0x6a,0x96,0x2c,0x8b,0xf6,0xad,0x27,0x14,0x8a,0x52,0x2b,0x69,0x63,0x9d,0xb3,0x46,0xbf,0x76,0xf3,0x21,0x12,0x40,0x31,0xf8,0x7d,0x0,0x7f,0x35,0xdb,0x45,0x97,0x1f,0xf3,0x81,0x90,0x38,0x67,0x4e,0xa0,0xd0,0x53,0x26,0x22,0x95,0x2a,0x52,0x4b,0x42,0x34,0xd,0x58,0x2,0xd7,0xbb,0xa9,0x32,0xc8,0x36,0xe0,0x80,0x2c,0x1d,0x48,0x6,0xdc,0xa,0x4c,0x91,0x69,0xe9,0x74,0x76,0x2a,0xa6,0x8e,0xaf,0xfa,0xb9,0x7e,0xee,0xaf,0x7,0xb9,0xfb,0x8,0xe7,0x90,0x1c,0x65,0x49,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char radio_unchecked_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x4b, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xcd, 0x52, 0x3d, 0x4b, 0x3, 0x41, 0x10, 0x7d, 0x73, 0x98, 0x4d, 0x73, 0x62, 0xb5, 0x42, 0x9a, 0x80, 0xca, 0xdd, 0x2f, 0x88, 0x68, 0x9d, 0x26, 0x96, 0xf1, 0x7, 0x58, 0xd9, 0xd9, 0xa4, 0xb0, 0x10, 0x7f, 0x44, 0x44, 0xd2, 0xdb, 0xd9, 0xd9, 0xa4, 0xf3, 0xa3, 0xb3, 0x53, 0x8, 0xfe, 0x80, 0x60, 0x22, 0x5e, 0x13, 0xc2, 0x92, 0x46, 0x21, 0x70, 0x9b, 0xe2, 0xd9, 0xec, 0x86, 0xcb, 0xdd, 0x5, 0x4b, 0x9d, 0x66, 0x87, 0x61, 0xdf, 0x7b, 0xf3, 0x66, 0x6, 0xf8, 0xeb, 0x90, 0x7c, 0x81, 0x64, 0x25, 0x49, 0x92, 0x63, 0x92, 0x2d, 0x0, 0xbb, 0xae, 0x3c, 0x16, 0x91, 0x87, 0x7a, 0xbd, 0xde, 0x17, 0x91, 0xc5, 0x5a, 0x82, 0xc9, 0x64, 0xa2, 0xad, 0xb5, 0x57, 0x24, 0xa3, 0x52, 0x35, 0x91, 0xa1, 0x52, 0xea, 0xbc, 0x56, 0xab, 0x19, 0x5f, 0xb, 0xb2, 0xca, 0x1e, 0x2c, 0x22, 0x53, 0x0, 0x97, 0x4a, 0xa9, 0xa6, 0x52, 0xaa, 0x49, 0xf2, 0x42, 0x44, 0x3e, 0x49, 0xc6, 0xd6, 0xda, 0x2e, 0xc9, 0x8a, 0xc7, 0x6d, 0xf8, 0xc4, 0xb5, 0x1d, 0x89, 0xc8, 0xd4, 0x5a, 0x7b, 0x12, 0x45, 0xd1, 0x57, 0x46, 0xfc, 0xd9, 0x18, 0xf3, 0x36, 0x9f, 0xcf, 0x6f, 0x49, 0xc6, 0x49, 0x92, 0xb4, 0x1, 0xdc, 0xe5, 0x3b, 0x38, 0x72, 0xef, 0x75, 0xe, 0xc, 0x0, 0xd0, 0x5a, 0x7f, 0x3, 0xe8, 0xb9, 0x3f, 0xad, 0x82, 0x5, 0x0, 0x3b, 0x0, 0xa0, 0x94, 0x7a, 0x2d, 0xf3, 0xf, 0x0, 0xd5, 0x6a, 0xf5, 0xc5, 0xa5, 0x7e, 0xb8, 0x2b, 0x4, 0xbf, 0xc6, 0x6c, 0x36, 0x2b, 0x6c, 0x2d, 0x4b, 0xf0, 0x1, 0x0, 0x69, 0x9a, 0xee, 0xaf, 0x23, 0x8, 0xc3, 0xf0, 0xc0, 0xa5, 0xe3, 0x2, 0x81, 0x88, 0xdc, 0x3, 0x40, 0x10, 0x4, 0x67, 0xc6, 0x98, 0xcd, 0x3c, 0x78, 0x34, 0x1a, 0x6d, 0x1, 0xe8, 0xb8, 0xbf, 0x8f, 0x4b, 0x9c, 0x4f, 0xdc, 0x1, 0xdd, 0x90, 0x8c, 0xdd, 0x1a, 0x7b, 0xde, 0x73, 0x9a, 0xa6, 0x87, 0x0, 0x3a, 0x24, 0xb7, 0x45, 0x64, 0x68, 0x8c, 0x39, 0x6d, 0x34, 0x1a, 0x8b, 0x15, 0x2, 0x60, 0x79, 0x48, 0x5d, 0x92, 0x71, 0x99, 0x85, 0xb2, 0x43, 0x2a, 0xc, 0x65, 0x30, 0x18, 0x54, 0xb4, 0xd6, 0x6d, 0xb7, 0xaa, 0x3d, 0x7, 0x7c, 0x7, 0xf0, 0x64, 0x8c, 0xe9, 0x7b, 0xe5, 0xff, 0x13, 0x3f, 0xc5, 0x34, 0x9d, 0x5, 0x4, 0x6a, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char radio_unchecked_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2d,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x4,0x3,0x4,0x9,0x9,0x9,0x6,0x6,0x6,0xa,0xa,0xb,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x7f,0x7f,0x82,0xd9,0xd9,0xd9,0x47,0x47,0x48,0xff,0xff,0xff,0xbd,0x7d,0x89,0x66,0x0,0x0,0x0,0xb,0x74,0x52,0x4e,0x53,0x0,0x0,0x0,0x0,0x0,0x1b,0x88,0xd1,0xf7,0x64,0xf6,0x2,0xb3,0xed,0xd7,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xe,0x6f,0xbd,0x30,0x4f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x4a,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x40,0x80,0xb0,0x8a,0xf6,0x54,0x10,0x2d,0xb9,0xfa,0xcc,0x99,0x5d,0x93,0x80,0x8c,0xb9,0x67,0x80,0xe0,0x26,0x3,0x3,0xeb,0x1a,0x10,0xe3,0x54,0x0,0x3,0xdb,0x1e,0x10,0xe3,0x74,0x2,0x3,0xfb,0x19,0x30,0x28,0x60,0xe0,0x80,0x30,0x1a,0x10,0xc,0xb8,0x14,0x5c,0x31,0x5c,0x3b,0xdc,0x40,0x6,0x4b,0x90,0x15,0x53,0x90,0x2d,0x85,0x2,0x0,0x37,0xca,0x3d,0x81,0xc4,0xfc,0x38,0x7b,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char reference_border_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x4, 0x3, 0x0, 0x0, 0x0, 0xed, 0xdd, 0xe2, 0x52, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0xf, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0xff, 0xd1, 0xd1, 0xff, 0xb7, 0xb7, 0xff, 0x41, 0x41, 0xff, 0xff, 0xff, 0xd5, 0xfa, 0x24, 0x40, 0x0, 0x0, 0x0, 0x2, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x0, 0x76, 0x93, 0xcd, 0x38, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x4, 0x8f, 0x68, 0xd9, 0x51, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0x27, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x63, 0x50, 0x32, 0x6, 0x3, 0x25, 0x6, 0x5, 0x6, 0x30, 0x60, 0x62, 0x30, 0x10, 0x4, 0x3, 0x66, 0x6, 0x3, 0x1, 0x90, 0x0, 0x23, 0x2d, 0x18, 0x30, 0x2b, 0xe0, 0x96, 0xc2, 0x9c, 0x1, 0x0, 0x5, 0x29, 0x7, 0xb, 0xf6, 0x43, 0xc2, 0xd4, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char reference_border_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xf,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0xff,0xd1,0xd1,0xff,0xb7,0xb7,0xff,0x41,0x41,0xff,0xff,0xff,0xd5,0xfa,0x24,0x40,0x0,0x0,0x0,0x2,0x74,0x52,0x4e,0x53,0x0,0x0,0x76,0x93,0xcd,0x38,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x4,0x8f,0x68,0xd9,0x51,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x27,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x50,0x32,0x6,0x3,0x25,0x6,0x5,0x6,0x30,0x60,0x62,0x30,0x10,0x4,0x3,0x66,0x6,0x3,0x1,0x90,0x0,0x23,0x2d,0x18,0x30,0x2b,0xe0,0x96,0xc2,0x9c,0x1,0x0,0x5,0x29,0x7,0xb,0xf6,0x43,0xc2,0xd4,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0x63, 0x60, 0x18, 0x5, 0xa3, 0x80, 0x3a, 0x0, 0x0, 0x2, 0x4c, 0x0, 0x1, 0x4e, 0x94, 0x8c, 0x4d, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x3,0x0,0x0,0x0,0x61,0xab,0xac,0xd5,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x48,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x40,0x3e,0x4a,0x2a,0x29,0x2f,0x20,0x20,0x24,0x3f,0x3e,0x49,0x1f,0x1f,0x24,0x20,0x20,0x24,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x3f,0x3e,0x49,0x3f,0x3e,0x49,0x1e,0x1e,0x23,0x20,0x20,0x25,0x22,0x22,0x27,0x23,0x23,0x27,0x23,0x23,0x28,0x25,0x25,0x2a,0xff,0xff,0xff,0x34,0x3f,0xa6,0x65,0x0,0x0,0x0,0x11,0x74,0x52,0x4e,0x53,0x0,0x4,0x19,0x40,0x5d,0x66,0x28,0x93,0xf0,0xfc,0x94,0xfc,0xfd,0x67,0x1a,0x96,0x95,0x1c,0xf0,0x43,0x52,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x17,0xb,0xd6,0x98,0x8f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x5c,0x49,0x44,0x41,0x54,0x8,0xd7,0x55,0x8e,0x49,0xe,0xc0,0x20,0xc,0x3,0x3,0x61,0x9,0x3b,0x61,0xfb,0xff,0x53,0x4b,0x5b,0x55,0x15,0x73,0x1b,0xc9,0xb2,0xd,0x20,0x24,0x2a,0xad,0x15,0x4a,0x1,0x20,0x8c,0x25,0xc7,0xec,0xc8,0x1a,0x1,0xd2,0x87,0xd6,0xc7,0xe8,0x2d,0x78,0x9,0x48,0x6d,0xae,0xcd,0x6c,0x84,0xa0,0x62,0x5f,0xf,0x3d,0x2a,0x48,0x3c,0x5e,0x19,0x9c,0x4e,0x39,0x62,0x47,0x41,0x2e,0x5f,0x75,0xc9,0x7b,0xb4,0x52,0x64,0x8e,0x54,0xcd,0x7d,0xe1,0xbf,0x73,0x1,0x30,0x2f,0x7,0x53,0x16,0x34,0xbd,0xfa,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_button_down_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x70, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xd5, 0xcf, 0x31, 0xe, 0xc2, 0x50, 0xc, 0x3, 0xd0, 0xe7, 0x76, 0x5, 0xe, 0xd0, 0x1b, 0x20, 0xb1, 0xf7, 0xfe, 0x33, 0x23, 0x48, 0x48, 0x1d, 0x19, 0x38, 0x1, 0x6b, 0x9, 0x4b, 0x2b, 0x7d, 0x2a, 0xb1, 0x83, 0x97, 0x28, 0x89, 0x63, 0xc7, 0xfc, 0x3f, 0x2, 0x55, 0x35, 0xa2, 0xc3, 0x25, 0xc9, 0xb3, 0x25, 0x54, 0xd5, 0xe, 0x27, 0xcc, 0x49, 0xce, 0x5d, 0xb3, 0xdb, 0x63, 0xac, 0xaa, 0xa1, 0x21, 0xf, 0x18, 0x71, 0x58, 0xc5, 0x57, 0x87, 0x1e, 0x47, 0xac, 0xe4, 0xc7, 0x52, 0xdb, 0xfe, 0x96, 0x64, 0xce, 0xc6, 0x7e, 0x58, 0xe, 0xfb, 0x65, 0xf4, 0xc2, 0x94, 0xe4, 0xfe, 0x91, 0xe1, 0xcb, 0xcf, 0x70, 0xdd, 0x66, 0xfa, 0x41, 0xbc, 0x1, 0xb0, 0x67, 0x22, 0xbf, 0x25, 0xb5, 0x86, 0x91, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_button_down_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x21,0x50,0x4c,0x54,0x45,0x2d,0x2c,0x2f,0x48,0x46,0x4a,0x2d,0x2c,0x2f,0x2d,0x2c,0x2f,0x2d,0x2c,0x2f,0x4c,0x4a,0x4e,0x48,0x46,0x4a,0x40,0x3e,0x42,0x38,0x36,0x3a,0xc3,0xc3,0xc3,0x59,0x59,0x59,0xb3,0x52,0xf2,0x5,0x0,0x0,0x0,0x5,0x74,0x52,0x4e,0x53,0x8,0xfe,0x9,0xd,0x19,0x4a,0xb6,0xc1,0xe6,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xa,0x68,0xd0,0xf4,0x56,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x33,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc,0x5,0x3,0x21,0x86,0xf4,0xe,0x30,0x28,0x63,0x88,0x80,0x30,0x5a,0xf1,0x33,0x66,0x2,0x1,0x2a,0xa3,0x73,0xe6,0xcc,0x19,0x10,0x35,0x40,0x1,0x8,0xa3,0x73,0x6,0x1,0x73,0xe0,0x96,0x1a,0x42,0x9c,0x21,0x2,0x0,0x5a,0xfa,0x3d,0xf9,0xfa,0xe2,0x64,0xe2,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_button_down_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x93, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xd5, 0x8f, 0x3d, 0xe, 0x1, 0x51, 0x18, 0x45, 0xcf, 0x7d, 0x44, 0xc1, 0x52, 0x14, 0xa, 0xb, 0x20, 0xb6, 0x21, 0xf1, 0xa6, 0xd7, 0x33, 0xcd, 0x4c, 0x31, 0x1a, 0x19, 0x95, 0xc2, 0xb4, 0x7e, 0x96, 0xf3, 0x7a, 0x4b, 0x31, 0xd1, 0xf0, 0x69, 0x5e, 0x18, 0x62, 0x1, 0xdc, 0xf2, 0xe6, 0xe6, 0xe4, 0x5c, 0xf8, 0xff, 0x8, 0x20, 0xb7, 0x32, 0x80, 0x3a, 0xc6, 0x6d, 0xba, 0x52, 0x7a, 0x6e, 0xe, 0x32, 0x5b, 0xf7, 0x85, 0x3b, 0x82, 0x5d, 0xa, 0x2d, 0x47, 0x2e, 0xf6, 0x6, 0x36, 0x10, 0x2e, 0x64, 0x56, 0x26, 0xaf, 0x71, 0x99, 0x8, 0x17, 0x80, 0x21, 0xa8, 0x5, 0xd0, 0x6, 0xa8, 0xd1, 0xa4, 0xb, 0x3b, 0x30, 0x2f, 0xd8, 0xe7, 0xb6, 0x19, 0x47, 0x8e, 0x8f, 0x1a, 0x7, 0x51, 0xcf, 0x9f, 0x4a, 0xd, 0xe2, 0x4c, 0x50, 0x1, 0xbd, 0x58, 0x5d, 0x81, 0xb4, 0xd0, 0x62, 0xfb, 0xf6, 0xe1, 0x8b, 0xf3, 0x9, 0x30, 0xe3, 0xee, 0x3f, 0x3f, 0xfd, 0x60, 0x1e, 0x29, 0x1e, 0x2d, 0x53, 0x18, 0xb0, 0x91, 0xaf, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_button_down_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x21,0x50,0x4c,0x54,0x45,0x3d,0x3b,0x3f,0x60,0x5d,0x62,0x3d,0x3b,0x3f,0x3d,0x3b,0x3f,0x3d,0x3b,0x3f,0x65,0x62,0x67,0x60,0x5d,0x62,0x56,0x53,0x58,0x4b,0x49,0x4e,0xce,0xce,0xce,0x59,0x59,0x59,0xb8,0xf5,0x6d,0x48,0x0,0x0,0x0,0x5,0x74,0x52,0x4e,0x53,0x7,0xfe,0xc,0x9,0x1c,0xda,0x2b,0xa5,0x57,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xa,0x68,0xd0,0xf4,0x56,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x33,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc,0x5,0x3,0x21,0x86,0xf4,0xe,0x30,0x28,0x63,0x88,0x80,0x30,0x5a,0xf1,0x33,0x66,0x2,0x1,0x2a,0xa3,0x73,0xe6,0xcc,0x19,0x10,0x35,0x40,0x1,0x8,0xa3,0x73,0x6,0x1,0x73,0xe0,0x96,0x1a,0x42,0x9c,0x21,0x2,0x0,0x5a,0xfa,0x3d,0xf9,0xfa,0xe2,0x64,0xe2,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_button_left_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x84, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0x95, 0x8f, 0x31, 0x12, 0x41, 0x41, 0x10, 0x44, 0x5f, 0xfb, 0x32, 0x94, 0x7c, 0x5d, 0x0, 0x45, 0xe6, 0xfe, 0x7, 0x90, 0x7e, 0x85, 0xb, 0xd8, 0xb, 0x90, 0xd2, 0x92, 0xd, 0xd4, 0xfa, 0xf3, 0x97, 0xce, 0x7a, 0x5e, 0xf5, 0x4c, 0xf, 0xfc, 0x29, 0xd, 0xd, 0x6d, 0x77, 0xc0, 0x1, 0xb0, 0xa4, 0xe3, 0x27, 0x9b, 0x4, 0x8b, 0x36, 0xc0, 0x12, 0xe8, 0x6a, 0xf0, 0x15, 0xb0, 0xbd, 0x2, 0x12, 0xf0, 0x2, 0x4e, 0xa3, 0x1, 0xdb, 0x73, 0x60, 0x5d, 0xec, 0x59, 0xd2, 0xbd, 0x75, 0x61, 0x5f, 0x6a, 0x64, 0x49, 0x79, 0xa8, 0x6b, 0xf4, 0x43, 0xa8, 0x3a, 0xd0, 0x3, 0x4f, 0x20, 0xd9, 0x4e, 0xcd, 0x80, 0xa4, 0x7, 0x70, 0x2d, 0x76, 0x6b, 0x7b, 0xd1, 0xac, 0x24, 0xe9, 0x6, 0xe4, 0xc2, 0x76, 0x35, 0x9f, 0x6, 0x55, 0x2f, 0xc0, 0xc, 0x70, 0xc0, 0x7f, 0xd7, 0x1b, 0x9c, 0x80, 0x1f, 0x32, 0x93, 0x39, 0x2b, 0x5, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_button_left_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x30,0x50,0x4c,0x54,0x45,0x2d,0x2c,0x2f,0x48,0x46,0x4a,0x2d,0x2c,0x2f,0x2d,0x2c,0x2f,0x2d,0x2c,0x2f,0x4c,0x4a,0x4e,0x48,0x46,0x4a,0x40,0x3e,0x42,0x38,0x36,0x3a,0xc3,0xc3,0xc3,0xc2,0xc2,0xc2,0xc1,0xc1,0xc1,0xc0,0xc0,0xc0,0xbf,0xbf,0xbf,0xbe,0xbe,0xbe,0x59,0x59,0x59,0x8e,0x47,0x76,0xf1,0x0,0x0,0x0,0x5,0x74,0x52,0x4e,0x53,0x8,0xfe,0x9,0xd,0x19,0x4a,0xb6,0xc1,0xe6,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xf,0x18,0xba,0x0,0xd9,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x3e,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc,0x5,0x3,0x21,0x86,0xf4,0xe,0x30,0x28,0x63,0x88,0x80,0x30,0x5a,0x51,0x19,0x33,0xa1,0x8c,0xae,0x55,0x50,0xc6,0x2e,0x28,0xa3,0x7b,0xf7,0x6e,0x8,0xa3,0xe7,0xcc,0x19,0xa8,0x14,0x9c,0xd1,0x7b,0x17,0xa6,0xfd,0x1d,0x86,0x81,0x60,0x6,0xdc,0x52,0x43,0x88,0x33,0x44,0x0,0xcc,0x4e,0x3f,0xd1,0x4,0x90,0xbf,0x60,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_button_left_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xa9, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0x95, 0x8f, 0x3d, 0xe, 0x82, 0x60, 0x10, 0x44, 0xdf, 0x82, 0x85, 0xf9, 0x8c, 0xf7, 0x30, 0xb1, 0xb0, 0xb4, 0xf2, 0x24, 0x16, 0x48, 0xad, 0xa5, 0x7f, 0xd, 0x16, 0xd0, 0x20, 0xd6, 0xc6, 0x52, 0x29, 0x3c, 0x86, 0x17, 0xb0, 0xf7, 0x2a, 0xc4, 0x84, 0x90, 0xb5, 0xa0, 0x51, 0xfc, 0x0, 0x9d, 0x72, 0x67, 0x27, 0xf3, 0x6, 0xfe, 0x94, 0xd8, 0x8e, 0x4b, 0x3d, 0xf4, 0xc, 0x7a, 0x3, 0xc9, 0x43, 0x59, 0x4d, 0xde, 0x3d, 0xc7, 0x16, 0x30, 0x70, 0x4, 0xc6, 0x40, 0xbf, 0xea, 0x7d, 0x5, 0x76, 0xba, 0xf7, 0x41, 0x3d, 0xe0, 0xa9, 0x14, 0x5e, 0x23, 0x52, 0xa0, 0xf1, 0x50, 0x70, 0xee, 0x80, 0x51, 0xf0, 0x23, 0x59, 0x5f, 0x1a, 0x1b, 0x4, 0xf7, 0x5a, 0x12, 0x49, 0x6a, 0x7b, 0xae, 0xdd, 0xd0, 0xa4, 0x8f, 0x80, 0x52, 0x4c, 0x81, 0xc, 0xd4, 0xb, 0x34, 0x99, 0xb5, 0x6, 0x22, 0xd9, 0x3e, 0x40, 0x17, 0x25, 0x1e, 0xa7, 0x40, 0xe3, 0x51, 0x2b, 0x52, 0x28, 0x9b, 0x33, 0x48, 0xa, 0x74, 0x5, 0x37, 0xad, 0xfa, 0x1d, 0x5b, 0x6d, 0x6, 0x73, 0x3, 0x3, 0x20, 0xaf, 0x5f, 0xf3, 0xa3, 0x5e, 0xf4, 0x92, 0x29, 0x8d, 0x1, 0xf8, 0x4f, 0x56, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_button_left_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x33,0x50,0x4c,0x54,0x45,0x3d,0x3b,0x3f,0x60,0x5d,0x62,0x3d,0x3b,0x3f,0x3d,0x3b,0x3f,0x3d,0x3b,0x3f,0x65,0x62,0x67,0x60,0x5d,0x62,0x56,0x53,0x58,0x4b,0x49,0x4e,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc6,0xc6,0xc6,0xc7,0xc7,0xc7,0xc5,0xc5,0xc5,0xc4,0xc4,0xc4,0xc3,0xc3,0xc3,0x59,0x59,0x59,0x2a,0x13,0xff,0x12,0x0,0x0,0x0,0x5,0x74,0x52,0x4e,0x53,0x7,0xfe,0xc,0x9,0x1c,0xda,0x2b,0xa5,0x57,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x10,0x95,0xb2,0xd,0x2c,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x4c,0x49,0x44,0x41,0x54,0x18,0xd3,0x85,0xcf,0xcb,0xe,0x80,0x20,0xc,0x44,0xd1,0xa2,0x96,0x47,0x7,0xe4,0xff,0xff,0x16,0xdc,0x90,0xe,0xc6,0x78,0x97,0x27,0x69,0xd3,0x8a,0x4,0x75,0x85,0x43,0x62,0xca,0xae,0x14,0x45,0x33,0xa5,0xdf,0x50,0xa,0x83,0x99,0x11,0xa0,0xa2,0x7a,0x0,0xd0,0xe0,0xa1,0x3d,0xd1,0xc8,0x3d,0xe3,0xa5,0xbd,0x6f,0x30,0xe5,0xef,0xb0,0x5,0xaf,0xe7,0x4e,0x7e,0xff,0x1a,0xb,0x26,0x7,0xac,0xd9,0xa3,0x51,0xe3,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_button_right_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x82, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0x95, 0x90, 0x3b, 0xe, 0xc2, 0x40, 0x10, 0x43, 0x9f, 0x49, 0xb, 0xa2, 0xdf, 0x5c, 0x80, 0x8f, 0x68, 0xb9, 0xff, 0x1, 0xe8, 0x50, 0x2, 0x17, 0x60, 0x7b, 0x4, 0xed, 0x62, 0xa, 0xb6, 0x8a, 0x46, 0x59, 0xe2, 0x6e, 0x3c, 0x7a, 0x63, 0x6b, 0x60, 0xa1, 0x34, 0x35, 0x6c, 0x9f, 0xab, 0x7f, 0x91, 0x54, 0xa6, 0xfb, 0x55, 0x70, 0xa4, 0x3, 0xb6, 0xc0, 0x3e, 0x4a, 0x88, 0x80, 0x2b, 0x50, 0x80, 0x64, 0x3b, 0x35, 0x1, 0x49, 0x6f, 0xe0, 0x5e, 0xc7, 0x83, 0xed, 0x4d, 0x2b, 0x1, 0x49, 0xf, 0x20, 0xd7, 0xfd, 0xb1, 0x9, 0xcc, 0x29, 0x4, 0x6c, 0xf7, 0x40, 0x2, 0x3e, 0xc0, 0x30, 0xb, 0xd8, 0x5e, 0x3, 0xbb, 0x3a, 0x8e, 0x92, 0x5e, 0xad, 0x84, 0x13, 0xbf, 0xd7, 0x66, 0x49, 0xf9, 0x9f, 0x4a, 0x5, 0x78, 0x2, 0xb7, 0xa8, 0xee, 0x62, 0x7d, 0x1, 0x99, 0xba, 0x20, 0x14, 0x78, 0xfe, 0x46, 0x82, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_button_right_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x30,0x50,0x4c,0x54,0x45,0x2d,0x2c,0x2f,0x48,0x46,0x4a,0x2d,0x2c,0x2f,0x2d,0x2c,0x2f,0x2d,0x2c,0x2f,0x4c,0x4a,0x4e,0x48,0x46,0x4a,0x40,0x3e,0x42,0x38,0x36,0x3a,0xc3,0xc3,0xc3,0xc2,0xc2,0xc2,0xc1,0xc1,0xc1,0xc0,0xc0,0xc0,0xbf,0xbf,0xbf,0xbe,0xbe,0xbe,0x59,0x59,0x59,0x8e,0x47,0x76,0xf1,0x0,0x0,0x0,0x5,0x74,0x52,0x4e,0x53,0x8,0xfe,0x9,0xd,0x19,0x4a,0xb6,0xc1,0xe6,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xf,0x18,0xba,0x0,0xd9,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x40,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc,0x5,0x3,0x21,0x86,0xf4,0xe,0x30,0x28,0x63,0x88,0x80,0x30,0x5a,0x51,0x18,0x33,0x61,0x8c,0x59,0x2b,0xa0,0x8c,0x5d,0xab,0xa0,0x8c,0xdd,0xbb,0x77,0x40,0x18,0x67,0xce,0x9c,0x80,0x31,0xa0,0x52,0x77,0x6f,0x40,0x19,0xef,0x30,0xc,0x84,0x30,0xe0,0x96,0x1a,0x42,0x9c,0x21,0x2,0x0,0xfd,0x36,0x40,0x93,0xf1,0x83,0x5f,0xf2,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_button_right_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xa8, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0x95, 0x90, 0x2b, 0xe, 0xc2, 0x50, 0x10, 0x45, 0xcf, 0x3c, 0x4, 0xa4, 0x61, 0x27, 0x8, 0x14, 0xb, 0x60, 0x1f, 0x24, 0xb4, 0x41, 0x82, 0xe5, 0x63, 0x5e, 0x5, 0x35, 0xe5, 0x63, 0x9, 0x8a, 0x50, 0x4, 0x2b, 0x41, 0x81, 0x67, 0x29, 0x7d, 0x41, 0x75, 0x30, 0x8, 0xd2, 0x6f, 0x7a, 0xe5, 0xdc, 0x39, 0x33, 0x77, 0x6, 0x5a, 0x4a, 0xf2, 0x85, 0x50, 0xf, 0xf, 0xd0, 0xae, 0x43, 0xc6, 0x47, 0x59, 0xa6, 0x79, 0xdf, 0x14, 0x67, 0x68, 0x1f, 0x18, 0x79, 0x70, 0x2a, 0xdb, 0x50, 0x0, 0x94, 0x6c, 0x2, 0x38, 0xd0, 0xa9, 0xd5, 0xbd, 0xdf, 0x8, 0x44, 0xb2, 0x79, 0x83, 0x2e, 0x7e, 0x79, 0xcf, 0x56, 0xe3, 0x61, 0x43, 0x24, 0xd8, 0xca, 0xfa, 0x2a, 0x90, 0x0, 0x3d, 0xc1, 0x5c, 0x1a, 0x81, 0x3a, 0x95, 0x2, 0xa1, 0xee, 0x2, 0x5, 0x1f, 0xf8, 0x28, 0xd9, 0xec, 0xdf, 0x2b, 0xbc, 0xd5, 0x6a, 0x3c, 0x10, 0xcc, 0xb, 0xf0, 0x14, 0x82, 0x48, 0x56, 0x49, 0xed, 0x6, 0xa1, 0x73, 0x7, 0x3c, 0x90, 0x5b, 0xbe, 0xb9, 0x2a, 0x52, 0xa, 0x3c, 0x1d, 0xcc, 0xab, 0x2f, 0x69, 0xa1, 0x2f, 0x8b, 0xc4, 0x2c, 0x1a, 0xc7, 0x92, 0x74, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_button_right_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x36,0x50,0x4c,0x54,0x45,0x3d,0x3b,0x3f,0x60,0x5d,0x62,0x3d,0x3b,0x3f,0x3d,0x3b,0x3f,0x3d,0x3b,0x3f,0x65,0x62,0x67,0x60,0x5d,0x62,0x56,0x53,0x58,0x4b,0x49,0x4e,0xc9,0xc9,0xc9,0xc8,0xc8,0xc8,0xc6,0xc6,0xc6,0xc7,0xc7,0xc7,0xc5,0xc5,0xc5,0xc4,0xc4,0xc4,0xc3,0xc3,0xc3,0xc2,0xc2,0xc2,0x59,0x59,0x59,0x56,0xec,0x9e,0xdc,0x0,0x0,0x0,0x5,0x74,0x52,0x4e,0x53,0x7,0xfe,0xc,0x9,0x1c,0xda,0x2b,0xa5,0x57,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x11,0xe2,0xb5,0x3d,0xba,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x4c,0x49,0x44,0x41,0x54,0x18,0xd3,0x85,0xcf,0xcb,0xe,0x80,0x30,0x8,0x44,0x51,0xaa,0xd2,0x7,0xb4,0xd2,0xff,0xff,0xda,0xea,0x6e,0x46,0x63,0xbc,0xcb,0x93,0x40,0x40,0x24,0x29,0x94,0x36,0xc9,0xa5,0x42,0x25,0x8b,0x56,0x4a,0xbf,0xa0,0xb5,0x7,0x98,0x19,0x83,0x77,0xef,0xc,0x3e,0xdc,0x11,0xc6,0x1d,0xc2,0x79,0x45,0x23,0x11,0xc1,0x4b,0xe7,0xfc,0x3b,0xc,0xe0,0xf5,0xdc,0xce,0xef,0x1f,0xb,0xc,0x30,0x7,0xaf,0x1f,0x5b,0x76,0x12,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
-};
-
-
-static const unsigned char scroll_button_up_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x21,0x50,0x4c,0x54,0x45,0x2d,0x2c,0x2f,0x48,0x46,0x4a,0x2d,0x2c,0x2f,0x2d,0x2c,0x2f,0x2d,0x2c,0x2f,0x4c,0x4a,0x4e,0x48,0x46,0x4a,0x40,0x3e,0x42,0x38,0x36,0x3a,0xc3,0xc3,0xc3,0x59,0x59,0x59,0xb3,0x52,0xf2,0x5,0x0,0x0,0x0,0x5,0x74,0x52,0x4e,0x53,0x8,0xfe,0x9,0xd,0x19,0x4a,0xb6,0xc1,0xe6,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xa,0x68,0xd0,0xf4,0x56,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x36,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc,0x5,0x3,0x21,0x86,0xf4,0xe,0x30,0x28,0x63,0x88,0x80,0x30,0x5a,0xb1,0x33,0x3a,0x67,0x40,0x19,0x33,0x67,0x42,0x18,0x9d,0x33,0x67,0xce,0x0,0x33,0x66,0x2,0x1,0x2a,0x3,0x9f,0x39,0x10,0x6,0xdc,0x52,0x43,0x88,0x33,0x44,0x0,0x59,0xc8,0x3d,0xf9,0xf,0x68,0xc5,0xa9,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_button_up_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x73, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xd5, 0x90, 0xb1, 0xa, 0xc3, 0x40, 0xc, 0x43, 0x9f, 0xb8, 0x8c, 0x81, 0xee, 0xf7, 0x7, 0x81, 0xec, 0xfd, 0xff, 0x35, 0x6b, 0xb, 0x81, 0x8e, 0x1d, 0x6e, 0xe, 0x49, 0xd7, 0x44, 0x59, 0x5c, 0xb8, 0x96, 0x36, 0x73, 0xab, 0xc5, 0x48, 0xb6, 0xb0, 0x6c, 0xf8, 0x39, 0xe8, 0x5d, 0xb0, 0xdd, 0x2, 0x7d, 0xd0, 0xab, 0xa4, 0xc7, 0x57, 0x83, 0xed, 0xc, 0x74, 0x40, 0xa, 0x69, 0x3, 0x6e, 0x92, 0xee, 0x2f, 0x6, 0xdb, 0x29, 0x6, 0x73, 0xe8, 0x25, 0x6a, 0xcd, 0x47, 0x49, 0xeb, 0xd3, 0x70, 0x6, 0x4e, 0xc0, 0x1a, 0x8d, 0xf2, 0x61, 0xe3, 0x24, 0x69, 0x68, 0xaa, 0x44, 0xb, 0x70, 0xa9, 0x33, 0x4b, 0x2a, 0xb6, 0xe7, 0xb8, 0xc9, 0x47, 0xcf, 0xf8, 0x27, 0xec, 0x8c, 0xe8, 0x25, 0xc9, 0x7b, 0x5, 0xa, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_button_up_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x21,0x50,0x4c,0x54,0x45,0x3d,0x3b,0x3f,0x60,0x5d,0x62,0x3d,0x3b,0x3f,0x3d,0x3b,0x3f,0x3d,0x3b,0x3f,0x65,0x62,0x67,0x60,0x5d,0x62,0x56,0x53,0x58,0x4b,0x49,0x4e,0xce,0xce,0xce,0x59,0x59,0x59,0xb8,0xf5,0x6d,0x48,0x0,0x0,0x0,0x5,0x74,0x52,0x4e,0x53,0x7,0xfe,0xc,0x9,0x1c,0xda,0x2b,0xa5,0x57,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xa,0x68,0xd0,0xf4,0x56,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x36,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc,0x5,0x3,0x21,0x86,0xf4,0xe,0x30,0x28,0x63,0x88,0x80,0x30,0x5a,0xb1,0x33,0x3a,0x67,0x40,0x19,0x33,0x67,0x42,0x18,0x9d,0x33,0x67,0xce,0x0,0x33,0x66,0x2,0x1,0x2a,0x3,0x9f,0x39,0x10,0x6,0xdc,0x52,0x43,0x88,0x33,0x44,0x0,0x59,0xc8,0x3d,0xf9,0xf,0x68,0xc5,0xa9,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_button_up_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x9d, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xcd, 0x90, 0x2b, 0xe, 0xc2, 0x50, 0x14, 0x44, 0xcf, 0xbc, 0xa0, 0xca, 0x3a, 0x50, 0x38, 0x48, 0xaa, 0x58, 0xb, 0xc5, 0x57, 0x60, 0xa0, 0xc1, 0x40, 0x9a, 0x3c, 0x43, 0x8a, 0xae, 0x7f, 0xb0, 0x10, 0x82, 0x25, 0x1, 0x81, 0x60, 0x2b, 0x55, 0xa4, 0x17, 0xd1, 0x12, 0x7e, 0xa, 0xc7, 0x98, 0xc9, 0x9d, 0xb9, 0xc9, 0x49, 0x6, 0xfe, 0x4e, 0xfa, 0xc, 0x96, 0xb6, 0xee, 0xb, 0xb7, 0x3, 0xcc, 0xa8, 0x13, 0xaf, 0xc5, 0xf5, 0xb5, 0x77, 0xef, 0xcf, 0xc5, 0x58, 0xb8, 0x23, 0x30, 0x0, 0x86, 0xc2, 0x9d, 0x56, 0x56, 0x4c, 0xbf, 0x8, 0x33, 0xdb, 0x74, 0x23, 0x28, 0xc1, 0x92, 0x36, 0xde, 0x36, 0xde, 0xdc, 0x82, 0x20, 0xaa, 0x34, 0x57, 0x5e, 0x75, 0x0, 0x22, 0x6c, 0xf, 0xc4, 0x40, 0x65, 0x90, 0x7a, 0xcd, 0x43, 0x4b, 0x3c, 0x8, 0x4a, 0x83, 0x89, 0x11, 0xf5, 0x80, 0x91, 0x7b, 0x92, 0x74, 0x31, 0xea, 0xd8, 0x2b, 0xb, 0xf, 0xbc, 0x57, 0x16, 0x8c, 0x3a, 0x6, 0xce, 0xc0, 0xed, 0xe7, 0x85, 0xfe, 0x54, 0x77, 0x8c, 0xb2, 0x2f, 0x36, 0xd, 0xf7, 0x95, 0x26, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_grabber_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x3,0x0,0x0,0x0,0x61,0xab,0xac,0xd5,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x60,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x5b,0x59,0x61,0x5b,0x59,0x61,0x5a,0x58,0x60,0x59,0x57,0x5f,0x5a,0x58,0x60,0x5a,0x58,0x60,0x57,0x56,0x5e,0x58,0x56,0x5e,0x56,0x55,0x5d,0x57,0x55,0x5d,0x57,0x55,0x5d,0x55,0x53,0x5b,0x55,0x53,0x5b,0x54,0x53,0x5b,0x55,0x54,0x5c,0x54,0x52,0x5a,0x55,0x53,0x5b,0x5a,0x58,0x60,0x56,0x54,0x5c,0x54,0x53,0x5a,0x55,0x53,0x5b,0x53,0x51,0x59,0x52,0x51,0x59,0x52,0x50,0x58,0x51,0x50,0x58,0x51,0x4f,0x57,0x50,0x4e,0x56,0x4f,0x4d,0x55,0x50,0x4f,0x57,0x54,0x52,0x5a,0xff,0xff,0xff,0xc7,0x51,0xc2,0xf2,0x0,0x0,0x0,0x12,0x74,0x52,0x4e,0x53,0x0,0x2c,0xb8,0xf4,0x2e,0xf2,0xb8,0xf4,0xf5,0xf4,0xf5,0xb8,0x2f,0xf2,0x2e,0xb8,0xf4,0xb8,0x66,0xf6,0xf7,0x12,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1f,0x5,0xd,0x10,0xbd,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x50,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc0,0x7,0x18,0x99,0x98,0x85,0x98,0x18,0x21,0x6c,0x16,0x56,0x61,0x11,0x11,0x61,0x56,0x16,0x30,0x87,0x4d,0x54,0xc,0x8,0x44,0xd9,0xc0,0x1c,0x76,0x71,0x9,0x20,0x10,0xe7,0x0,0x73,0x38,0x25,0xa5,0x80,0x40,0x92,0xb,0xcc,0xe1,0x96,0x90,0x6,0x2,0x9,0x6e,0x30,0x87,0x87,0x57,0x4a,0x46,0x46,0x96,0x97,0x7,0x62,0x1c,0x1f,0xbf,0x80,0x9c,0x20,0x1f,0x5e,0xdb,0x1,0x23,0xfd,0x4,0x11,0x2d,0x48,0xcb,0xd2,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_grabber_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x48, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xd5, 0xcc, 0xb1, 0xd, 0x80, 0x40, 0x10, 0x3, 0xc1, 0x39, 0x12, 0x68, 0x80, 0x22, 0xa0, 0xff, 0x5a, 0xbe, 0xa, 0xa, 0x20, 0x3b, 0x92, 0xf, 0x0, 0x9d, 0x90, 0x8, 0x7f, 0x25, 0x27, 0xb6, 0xd6, 0x8c, 0x4f, 0xbc, 0x8b, 0xcc, 0x5c, 0xb1, 0x23, 0xd1, 0x22, 0xe2, 0xb8, 0xef, 0x53, 0x71, 0xb2, 0x61, 0xc6, 0xd2, 0xc5, 0x7, 0x95, 0xf0, 0x49, 0x25, 0x34, 0x9c, 0x3d, 0xed, 0xef, 0xe1, 0x8, 0x5c, 0x37, 0x9a, 0xa, 0x6, 0x38, 0xcd, 0xba, 0x62, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char scroll_grabber_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xc,0x8,0x3,0x0,0x0,0x0,0x61,0xab,0xac,0xd5,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6c,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x97,0xd0,0xdf,0x92,0xcb,0xdc,0x84,0xbb,0xd4,0x92,0xca,0xdc,0x95,0xd0,0xdd,0x83,0xbb,0xd3,0x8b,0xc8,0xd7,0x79,0xb5,0xcb,0x78,0xb4,0xca,0x73,0xb0,0xc7,0x73,0xb0,0xc7,0x7b,0xc0,0xcf,0x79,0xc5,0xd1,0x6b,0xae,0xc1,0x75,0xc6,0xcf,0x70,0xbc,0xca,0x64,0xa6,0xbc,0x71,0xbc,0xc9,0x82,0xba,0xd4,0x6a,0xa2,0xc6,0x62,0x9a,0xc2,0x61,0x9a,0xc1,0x68,0x9f,0xc2,0x5d,0x92,0xbb,0x5c,0x92,0xb8,0x58,0x8d,0xb6,0x59,0x8e,0xb3,0x56,0x89,0xb0,0x5c,0x91,0xb2,0x53,0x84,0xa9,0x58,0x8f,0xae,0x54,0x83,0xa4,0x57,0x8e,0xad,0x64,0xa5,0xba,0xff,0xff,0xff,0xbb,0x65,0x65,0x27,0x0,0x0,0x0,0x13,0x74,0x52,0x4e,0x53,0x0,0x25,0xad,0xf1,0xad,0x27,0xef,0xad,0xf1,0xf3,0xf1,0xf3,0xad,0x28,0xef,0x27,0xad,0xf2,0xad,0xcd,0x8a,0x27,0xfe,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x23,0x2a,0x62,0x6c,0x3a,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x50,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc0,0x7,0x18,0x99,0x98,0x85,0x59,0x18,0x21,0x6c,0x56,0x36,0x11,0x51,0x31,0x11,0x36,0x56,0x30,0x87,0x5d,0x5c,0x2,0x8,0xc4,0xd9,0xc1,0x1c,0xe,0x49,0x29,0x20,0x90,0xe4,0x4,0x73,0xb8,0xa4,0x65,0x80,0x40,0x9a,0x1b,0xcc,0xe1,0x91,0x95,0x3,0x2,0x59,0x1e,0x30,0x87,0x97,0x4f,0x5e,0x41,0x41,0x91,0x8f,0x17,0x62,0x1c,0xbf,0x80,0xa0,0x92,0x10,0x3f,0x5e,0xdb,0x1,0x41,0x87,0x4,0x7d,0x15,0xc4,0xfd,0x6a,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char scroll_grabber_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x56, 0x75, 0x5c, 0xe7, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x71, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xcd, 0x8f, 0x3b, 0xe, 0x83, 0x30, 0x10, 0x44, 0xdf, 0x5a, 0x88, 0x2, 0xce, 0x8, 0xdc, 0x82, 0x50, 0x11, 0xb, 0x8e, 0xc2, 0x19, 0xdd, 0x20, 0xe1, 0xa1, 0x88, 0xac, 0xd8, 0x4, 0xa5, 0x66, 0xba, 0x59, 0xcd, 0x6f, 0xe1, 0x71, 0xb0, 0x9c, 0x78, 0xf9, 0x5a, 0x34, 0xab, 0x50, 0x7, 0x26, 0xb0, 0xcd, 0x11, 0x66, 0x6f, 0x7e, 0x4f, 0x9a, 0x2a, 0x37, 0x44, 0xda, 0x5, 0x34, 0x7e, 0x73, 0xf4, 0x8a, 0xb4, 0x0, 0x53, 0xd2, 0xb8, 0xb2, 0x30, 0xf6, 0xbf, 0x23, 0x34, 0xe4, 0xec, 0x62, 0x30, 0xdd, 0xcc, 0x3e, 0xfe, 0x19, 0xb6, 0xab, 0xda, 0xa0, 0xb8, 0x15, 0x3f, 0x38, 0xc2, 0xfc, 0xd9, 0xac, 0x2e, 0x5, 0x18, 0xe1, 0x7d, 0xd3, 0xfa, 0x24, 0x9c, 0x8, 0xa7, 0x1c, 0xfa, 0x20, 0xb5, 0xcd, 0xac, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char selection_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2d,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfd,0xfb,0xff,0xfd,0xf7,0xff,0xfd,0xf7,0xff,0xfd,0xf7,0xff,0xfd,0xf6,0xff,0xf6,0xf4,0xff,0x15,0x15,0x17,0xff,0x70,0xc0,0x21,0x0,0x0,0x0,0xe,0x74,0x52,0x4e,0x53,0x6,0xf,0x16,0x18,0x2a,0x3b,0x40,0x3c,0x6,0x3d,0x44,0x3e,0x31,0x25,0x8,0x3d,0x16,0xb4,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xe,0x6f,0xbd,0x30,0x4f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x37,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x54,0x36,0x6,0x2,0x23,0x1,0x6,0x91,0xb0,0x34,0x20,0x48,0x75,0x64,0x50,0xef,0x5c,0x5,0x4,0x33,0x8a,0x18,0xcc,0xf6,0xdc,0x5,0x82,0xd3,0xc9,0xc,0x66,0x6b,0x41,0x8c,0x5b,0x94,0x33,0x60,0x6,0xc2,0xad,0x80,0x5b,0xa,0x73,0x6,0x0,0x45,0x34,0x48,0x41,0xa3,0xc5,0x91,0x23,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char selection_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xba, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xc5, 0xd2, 0xc1, 0x4a, 0x43, 0x31, 0x10, 0x85, 0xe1, 0x6f, 0x42, 0xdd, 0x15, 0xb, 0x15, 0x14, 0xe9, 0x23, 0xb4, 0xd7, 0xf7, 0x7f, 0x8e, 0x56, 0x17, 0xdd, 0x8b, 0x16, 0xc1, 0x82, 0xc5, 0xdd, 0x15, 0xc6, 0x45, 0x73, 0xe5, 0x6e, 0xaa, 0x91, 0x22, 0x9e, 0xcd, 0x64, 0x92, 0xfc, 0x73, 0x48, 0x38, 0xfc, 0xb7, 0x62, 0x58, 0x64, 0xe6, 0xd, 0x56, 0xb8, 0xc2, 0xe4, 0xc4, 0xfd, 0xf, 0xbc, 0x62, 0x1b, 0x11, 0x8f, 0x5f, 0x3, 0x32, 0x73, 0x85, 0x6e, 0x3c, 0xb0, 0x41, 0xf7, 0x11, 0xb1, 0x9e, 0x54, 0xe7, 0xae, 0x6e, 0x3e, 0xe1, 0xf0, 0x3, 0x38, 0xc5, 0x2, 0xcb, 0xcc, 0xdc, 0x95, 0x91, 0xf3, 0x73, 0x3, 0xc, 0xef, 0xd8, 0x55, 0xa6, 0x2b, 0x98, 0xd7, 0x83, 0x16, 0x78, 0xd0, 0x5b, 0xad, 0xf3, 0xe2, 0xf4, 0x87, 0xb5, 0xe8, 0xa2, 0x9c, 0x1, 0x83, 0x82, 0xfe, 0xc, 0xbe, 0x2f, 0xd8, 0xd7, 0x66, 0xfa, 0xb, 0xf0, 0xb2, 0xd6, 0x7d, 0xc1, 0xb6, 0x36, 0xb, 0xcc, 0x1a, 0xe0, 0x19, 0x6e, 0x91, 0xd8, 0xc, 0x41, 0xba, 0xc3, 0x52, 0x7b, 0x90, 0x12, 0xeb, 0x88, 0x78, 0x18, 0x47, 0xf9, 0xda, 0x31, 0x13, 0xdf, 0x45, 0xb9, 0x77, 0x7c, 0xf2, 0x26, 0x22, 0x5e, 0x1a, 0xcd, 0xfe, 0x58, 0x9f, 0x3f, 0x85, 0x2f, 0x71, 0xd3, 0xd7, 0x3f, 0x66, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char selection_oof_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x4,0x3,0x0,0x0,0x0,0xed,0xdd,0xe2,0x52,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x30,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2c,0x2,0xfd,0xfb,0xff,0xfd,0xfb,0xff,0xfd,0xfb,0xff,0xfd,0xfb,0xff,0x15,0x15,0x17,0xe9,0x54,0x1,0x21,0x0,0x0,0x0,0xf,0x74,0x52,0x4e,0x53,0xa,0x1a,0x26,0x29,0x2a,0x48,0x65,0x6d,0x6e,0x66,0x3,0x20,0x25,0x16,0xc,0x1f,0x74,0xbf,0x74,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xf,0x18,0xba,0x0,0xd9,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x38,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x54,0x76,0x1,0x2,0x23,0x1,0x6,0xd1,0xf4,0xe,0x20,0x28,0xb,0x64,0xd0,0x5c,0x7d,0x6,0x8,0x76,0x4d,0x62,0x70,0xdf,0xfb,0xe,0x8,0x6e,0x97,0x30,0x78,0x9c,0x3,0x31,0xde,0xb4,0x50,0xca,0x80,0x1b,0x8,0xb7,0x2,0x6e,0x29,0xcc,0x19,0x0,0x1a,0x23,0x52,0x59,0xa4,0x2f,0x3d,0xa7,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
-};
-
-
-static const unsigned char spinbox_updown_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xcd,0x49,0x44,0x41,0x54,0x38,0x8d,0xe5,0x53,0x31,0xe,0x82,0x40,0x10,0x9c,0x5d,0x22,0x3e,0x80,0x86,0xc4,0x0,0xe1,0xf,0x16,0x5a,0x58,0xf9,0x5,0xe3,0x13,0xd0,0xc2,0xc4,0xcf,0xd8,0xf0,0x5,0xe3,0x1f,0x2c,0x2c,0x6c,0xf8,0x1,0xc5,0x72,0x85,0x9,0xd,0xf,0x10,0x43,0xce,0x86,0x82,0xe0,0xe9,0x19,0x8d,0x95,0x53,0xce,0xce,0x6e,0x26,0x99,0x59,0xe0,0x97,0x10,0x91,0x95,0x52,0x2a,0x79,0xa5,0xa1,0x67,0x83,0xa2,0x28,0xa6,0x0,0x8e,0x0,0x98,0x99,0xe7,0x61,0x18,0x9e,0xde,0x3e,0x20,0x22,0x3e,0x11,0x65,0x0,0x46,0x2d,0x55,0x3a,0x8e,0x33,0xe,0x82,0xe0,0xd2,0xd7,0x72,0x9f,0xc8,0xb2,0x6c,0x0,0x60,0xdf,0x59,0x6,0x0,0xbf,0x69,0x9a,0x43,0x9e,0xe7,0x43,0xeb,0x1,0xcf,0xf3,0x76,0x44,0x34,0x33,0x18,0x9b,0xb8,0xae,0x9b,0x9a,0x1c,0xff,0x3b,0x1e,0x62,0x14,0x91,0x94,0x88,0x8c,0xe5,0x21,0xa2,0x34,0x8a,0xa2,0x75,0x97,0x7b,0x48,0xa1,0xaa,0xaa,0x8d,0xd6,0xda,0x54,0x9a,0x73,0x5d,0xd7,0x5b,0xab,0x83,0xd6,0xc5,0xe7,0x45,0x2,0x80,0x38,0x8e,0x4b,0xad,0xf5,0x2,0xc0,0x15,0xc0,0x8d,0x99,0x97,0xa6,0x65,0x2b,0x94,0x52,0x89,0xed,0x99,0xbe,0xc6,0x1d,0x31,0x1f,0x40,0xdc,0x74,0x8a,0x5b,0xc1,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
-};
-
-
-static const unsigned char submenu_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x6,0x0,0x0,0x0,0xc4,0xf,0xbe,0x8b,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x64,0x49,0x44,0x41,0x54,0x18,0x95,0x7d,0xca,0x21,0x12,0x80,0x20,0x14,0x45,0xd1,0xf7,0x2d,0x4,0x36,0x40,0x63,0xa8,0xba,0x1f,0xbb,0x9d,0xe5,0xb8,0x0,0xb3,0xfb,0xd1,0xc,0x8d,0xd,0x10,0x48,0xcf,0x22,0x6,0xc7,0xef,0x6d,0x77,0xe6,0x8,0x0,0xa4,0x94,0x88,0x3b,0x92,0x4b,0x8,0x61,0xeb,0x3f,0xe0,0x95,0x88,0xac,0x39,0xe7,0x49,0x5,0x0,0x2c,0xc9,0xbd,0x94,0x62,0x35,0x0,0x0,0x63,0x6b,0x6d,0xfd,0x3,0x4f,0x1a,0x38,0x8d,0x31,0x51,0x3,0x55,0x44,0x66,0xe7,0x5c,0xfd,0x4,0x24,0xa3,0xf7,0xfe,0xe8,0x7f,0x1,0xe,0xc2,0x1e,0x10,0xa,0xf0,0x33,0x4c,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char selection_oof_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xb6, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0xd3, 0xbd, 0x4a, 0x43, 0x41, 0x10, 0xc5, 0xf1, 0xdf, 0x2c, 0xb1, 0xb, 0x6, 0x22, 0x28, 0x92, 0x47, 0x48, 0xae, 0xef, 0xff, 0x1c, 0x89, 0x16, 0xe9, 0x45, 0x83, 0x60, 0xc0, 0x60, 0x77, 0x85, 0xb1, 0xb8, 0x7b, 0x43, 0xa, 0x3f, 0x56, 0xd2, 0x7a, 0x9a, 0xe1, 0xec, 0xf0, 0x9f, 0x61, 0x7, 0x4e, 0xa8, 0xca, 0xcc, 0x1b, 0xac, 0x70, 0x85, 0x89, 0xaf, 0xf5, 0x81, 0x57, 0x6c, 0x23, 0xe2, 0x11, 0xa2, 0xc2, 0x2b, 0x74, 0xa3, 0x6f, 0xd4, 0x7d, 0x44, 0xac, 0x27, 0x75, 0x73, 0x57, 0x1f, 0x9f, 0x70, 0xf8, 0x5, 0x9c, 0x62, 0x81, 0x65, 0x66, 0xee, 0xca, 0xc9, 0xe6, 0xe7, 0x6, 0x18, 0xde, 0xb1, 0xab, 0x4c, 0x57, 0x30, 0xaf, 0x8d, 0x16, 0x78, 0xd4, 0x5b, 0xad, 0xf3, 0xe2, 0xfb, 0x83, 0xb5, 0xe8, 0xa2, 0x9c, 0x1, 0x83, 0xff, 0x1, 0xc3, 0x80, 0xfe, 0xc, 0xbe, 0x2f, 0xd8, 0x57, 0x33, 0xfd, 0x3, 0x78, 0x59, 0xeb, 0xbe, 0x60, 0x5b, 0xcd, 0x2, 0xb3, 0x6, 0x78, 0x86, 0x5b, 0x24, 0x36, 0x63, 0x98, 0xee, 0xb0, 0xd4, 0x1e, 0xa6, 0xc4, 0x3a, 0x22, 0x1e, 0x8e, 0x40, 0x66, 0x5e, 0x1b, 0x72, 0xf1, 0x53, 0x9c, 0x7b, 0xc3, 0x97, 0x37, 0x11, 0xf1, 0x2, 0x9f, 0x25, 0x19, 0x2f, 0x79, 0x66, 0x8a, 0x69, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tab_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x8,0x4,0x0,0x0,0x0,0x6e,0x6,0x76,0x0,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0x0,0xaa,0x8d,0x23,0x32,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x1f,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0xc0,0x4,0xff,0x23,0xff,0x8b,0xfc,0x17,0xf9,0x1f,0x49,0xac,0x10,0x13,0x3,0x3,0x61,0x53,0xb0,0x98,0x80,0xc,0x0,0xa8,0x3e,0x18,0x31,0xbe,0x78,0xfc,0x7a,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char spinbox_updown_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0xe, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xc5, 0x53, 0xc1, 0x4a, 0xc3, 0x40, 0x14, 0x9c, 0x79, 0x90, 0xd4, 0xa3, 0x1, 0x8f, 0x81, 0xa5, 0xe4, 0x50, 0xff, 0x4c, 0xb1, 0x45, 0xd0, 0xbf, 0xd0, 0x83, 0x7a, 0x88, 0xd0, 0x4f, 0x6b, 0xf, 0xa1, 0xbc, 0xbb, 0xa5, 0x1e, 0xa5, 0x98, 0x37, 0x5e, 0xc, 0xc4, 0xd0, 0x68, 0xa1, 0x7, 0xe7, 0xb4, 0xfb, 0x96, 0x9d, 0x19, 0x66, 0x67, 0x81, 0x13, 0xc1, 0xb1, 0x3, 0x77, 0x2f, 0x24, 0x3d, 0x90, 0xcc, 0x0, 0xdc, 0xa7, 0x94, 0x76, 0x47, 0x13, 0x6c, 0x36, 0x9b, 0x73, 0x92, 0xaf, 0x0, 0x2a, 0x0, 0x90, 0xe4, 0xfb, 0xfd, 0x7e, 0x3e, 0x9b, 0xcd, 0xde, 0xfe, 0x24, 0x70, 0xf7, 0x82, 0x64, 0x1d, 0x11, 0x95, 0x99, 0x35, 0x0, 0xd0, 0xad, 0x25, 0x2d, 0x86, 0x4e, 0x6c, 0xa8, 0x2c, 0xa9, 0x8e, 0x88, 0x4a, 0x92, 0x9b, 0xd9, 0x6d, 0xdb, 0xb6, 0x73, 0x0, 0x4d, 0x44, 0x54, 0x11, 0xb1, 0x5c, 0xaf, 0xd7, 0x17, 0xa3, 0x4, 0x66, 0xf6, 0xc, 0xa0, 0x32, 0xb3, 0xc6, 0xcc, 0xae, 0xcb, 0xb2, 0xdc, 0x4e, 0xa7, 0xd3, 0x77, 0x92, 0xb, 0x33, 0x6b, 0x48, 0xa6, 0xc9, 0x64, 0xf2, 0x38, 0x4a, 0x20, 0xa9, 0x25, 0xb9, 0x1a, 0x5a, 0x4d, 0x29, 0xed, 0x24, 0x2d, 0x48, 0xae, 0x0, 0xc4, 0xa1, 0xdc, 0xfe, 0xf, 0x3f, 0x5e, 0xc1, 0xdd, 0x97, 0x0, 0xce, 0x0, 0xdc, 0xd, 0xd3, 0x76, 0xf7, 0x22, 0x22, 0x5e, 0xcc, 0xec, 0x23, 0xa5, 0x74, 0xd5, 0xcd, 0x87, 0x19, 0xe4, 0x92, 0x2e, 0x49, 0xd6, 0xee, 0x5e, 0xf4, 0x2f, 0x93, 0xac, 0x49, 0xce, 0x24, 0x65, 0xa3, 0xe, 0xfa, 0x5, 0xea, 0xca, 0x93, 0xe7, 0xf9, 0x67, 0x7f, 0x96, 0x65, 0xd9, 0x4d, 0x59, 0x96, 0xdb, 0x83, 0x4, 0x7d, 0xb5, 0x63, 0x8b, 0x74, 0x74, 0x95, 0x87, 0xca, 0xbf, 0x12, 0x74, 0x4e, 0x0, 0x3c, 0x7d, 0x6f, 0x47, 0x3f, 0xd3, 0xc9, 0xf8, 0x2, 0x8c, 0x16, 0xa2, 0xfd, 0x26, 0x18, 0xca, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tab_behind_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x5a,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x2e,0x36,0x43,0x40,0x4d,0x0,0x0,0x0,0x43,0x40,0x4c,0x3e,0x3c,0x47,0x3e,0x3b,0x46,0x31,0x2f,0x38,0x2d,0x2b,0x33,0x3f,0x3c,0x47,0x35,0x32,0x3b,0x5b,0xb0,0x1,0xb7,0x0,0x0,0x0,0x18,0x74,0x52,0x4e,0x53,0x0,0x1,0x3,0x5,0x8,0xa,0xb,0xc,0x4,0x11,0x19,0x1f,0x22,0x24,0x15,0x25,0x34,0x3f,0x46,0x47,0x77,0xf3,0x7,0xef,0xd3,0x51,0x5e,0xca,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1d,0xeb,0x3,0x71,0x91,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x6e,0x49,0x44,0x41,0x54,0x18,0xd3,0xb5,0xcc,0x49,0xe,0x80,0x20,0x10,0x44,0xd1,0x2,0x6c,0x90,0x49,0x26,0x27,0xd4,0xfb,0x9f,0x53,0x63,0x34,0x2e,0x58,0xfb,0x97,0x2f,0xa9,0x2,0x18,0x17,0x1d,0x49,0xa5,0x24,0x75,0x82,0x33,0x80,0xf5,0xa4,0x8d,0x75,0xde,0x3b,0x6b,0x34,0xf5,0xc,0x9c,0x86,0x10,0x53,0x2e,0x25,0xa7,0x18,0x6,0xe2,0x10,0x3a,0x8c,0xd3,0x5a,0xaf,0xd6,0x69,0xc,0x5a,0x60,0x36,0x71,0xd9,0xf6,0xbb,0x6d,0x89,0x66,0x6,0xd9,0x74,0xec,0x4f,0x47,0xb2,0x4,0xe9,0x72,0x7d,0xa1,0x66,0x27,0xa1,0x7c,0xf9,0xa0,0x78,0xd5,0x42,0x33,0x69,0x4e,0xff,0x80,0x13,0xce,0x8,0x12,0xa9,0x90,0xd8,0x47,0x93,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char submenu_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x8e, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x75, 0xcf, 0x31, 0xa, 0xc2, 0x50, 0x10, 0x4, 0xd0, 0x99, 0x8d, 0x62, 0x4a, 0x5, 0xcb, 0xc0, 0x27, 0xa4, 0xf1, 0x70, 0xbf, 0x51, 0xbc, 0x85, 0x60, 0x95, 0x42, 0x6f, 0x66, 0x8a, 0x10, 0xf6, 0x4, 0x49, 0x2f, 0xec, 0xd8, 0x18, 0x31, 0xa0, 0x53, 0x2d, 0xc3, 0x63, 0x61, 0x88, 0x77, 0xdc, 0xfd, 0xe, 0x60, 0x3, 0xe0, 0x98, 0x52, 0x1a, 0xe7, 0xde, 0xe6, 0x43, 0xd2, 0x5a, 0xd2, 0x81, 0x64, 0xeb, 0xee, 0xbb, 0x5f, 0xe0, 0x4, 0xa0, 0x8f, 0x88, 0x26, 0x22, 0x6e, 0x5d, 0xd7, 0xed, 0x17, 0xa0, 0xae, 0xeb, 0x89, 0x64, 0x36, 0xb3, 0x9e, 0x64, 0x2a, 0xcb, 0xf2, 0xb2, 0x0, 0xff, 0xf2, 0x1, 0xc3, 0x30, 0x6c, 0x25, 0xb5, 0x11, 0xd1, 0x48, 0xf2, 0xa2, 0x28, 0xce, 0x0, 0xb0, 0x9a, 0x1, 0xc9, 0x2b, 0x80, 0xc6, 0xcc, 0x7a, 0x49, 0xb9, 0xaa, 0xaa, 0x71, 0xf1, 0x81, 0xe4, 0x93, 0xe4, 0x43, 0x52, 0xfe, 0x9e, 0xf9, 0x2, 0x35, 0xca, 0x3a, 0xf, 0x29, 0x4, 0xd0, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tab_close_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xfa,0x49,0x44,0x41,0x54,0x38,0x8d,0xcd,0x92,0x5f,0x4a,0xc4,0x30,0x10,0x87,0xbf,0xb1,0xb9,0xc2,0x16,0x7c,0x6b,0xc1,0xa2,0x85,0x7a,0x4,0x2d,0xfe,0x39,0xc4,0x9e,0x70,0x4f,0x61,0xc5,0x3d,0x83,0x5,0x95,0x4,0xd2,0x37,0x5,0x8f,0x90,0x94,0xf1,0xc5,0x4a,0x76,0xcd,0x22,0xf8,0xa2,0xf3,0x38,0xc3,0xef,0x9b,0xe4,0x4b,0xe0,0x5f,0x95,0xf7,0x7e,0xed,0x9c,0x2b,0xf,0xcd,0x9d,0x73,0xa5,0xf7,0x7e,0x9d,0xf6,0x8e,0xd2,0xb0,0x88,0x6c,0x8c,0x31,0x43,0xe,0xe2,0x9c,0x2b,0x8d,0x31,0x83,0x88,0x6c,0x52,0xc8,0x17,0x20,0xc6,0x38,0xa8,0xea,0x8,0x74,0xc6,0x98,0xed,0x34,0x4d,0xc7,0xcb,0xcc,0x5a,0xbb,0x2a,0x8a,0xe2,0xe,0xe8,0x80,0x17,0xe0,0x61,0x99,0x49,0xba,0xc5,0x5a,0xbb,0xfa,0xdc,0x72,0xe,0x3c,0x3,0xd7,0x21,0x84,0x98,0xf6,0x54,0xf5,0xaa,0xae,0xeb,0xb7,0x2c,0x60,0x1f,0x22,0x22,0x56,0x55,0x23,0xd0,0xe6,0xc2,0x59,0x40,0x2,0xd9,0x8a,0x48,0xbb,0x28,0x50,0xd5,0x8b,0xfd,0xf0,0x8e,0x83,0x9f,0x4a,0x44,0xb2,0xcb,0xbe,0x1,0x92,0x2b,0xb4,0xaa,0x6a,0x81,0x27,0xe0,0x4,0xb8,0x4f,0xc5,0x66,0x1,0x19,0x89,0x97,0x21,0x84,0x5e,0x55,0x1f,0x81,0xb3,0x1c,0x44,0xe,0x85,0x53,0x61,0xb9,0xd7,0xa9,0xaa,0xea,0x75,0xe7,0x4,0xc6,0x98,0x1b,0x11,0xe9,0x80,0x31,0xc6,0xd8,0xa7,0xc2,0x9a,0xa6,0x79,0x9f,0xe7,0xf9,0x16,0x18,0x81,0x53,0x55,0xed,0xb3,0xa2,0x7e,0xf3,0x95,0xff,0xbe,0x3e,0x0,0xbd,0x2c,0x93,0xec,0xb,0xe5,0x4f,0xb1,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tab_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x53, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x75, 0x8f, 0x31, 0xe, 0x80, 0x30, 0xc, 0x3, 0xcf, 0xa5, 0x73, 0xbb, 0xf0, 0xff, 0x3f, 0xc2, 0xa, 0xd4, 0x2c, 0x54, 0xa, 0x11, 0xdc, 0xe8, 0x58, 0x3e, 0x45, 0x4, 0x6c, 0x77, 0x40, 0xc0, 0x2e, 0x69, 0x0, 0x14, 0xde, 0x8, 0xa8, 0x40, 0xb7, 0x5d, 0x66, 0x10, 0x17, 0xa, 0xd0, 0x9e, 0xd2, 0x5, 0x6c, 0xb2, 0xbd, 0xf2, 0xcf, 0x91, 0x15, 0x19, 0x7d, 0x29, 0x3a, 0xb0, 0x4c, 0x45, 0x5e, 0x68, 0xf1, 0x28, 0x69, 0xd4, 0x54, 0x30, 0x70, 0x12, 0xde, 0xbc, 0x1, 0x5f, 0x4b, 0x1d, 0x1b, 0xbf, 0xb6, 0xb, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tab_container_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x8a,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x3a,0x44,0x56,0x53,0x61,0x56,0x52,0x60,0x47,0x44,0x52,0x33,0x31,0x39,0x47,0x44,0x50,0x47,0x44,0x51,0x52,0x50,0x5d,0x51,0x4f,0x5d,0x46,0x42,0x4e,0x42,0x3e,0x4a,0x41,0x3e,0x49,0x51,0x4e,0x5b,0x40,0x3e,0x48,0x4f,0x4c,0x59,0x3f,0x3d,0x47,0x4e,0x4a,0x58,0x3e,0x3b,0x46,0x4b,0x49,0x55,0x3c,0x3a,0x44,0x4a,0x47,0x54,0x3b,0x39,0x43,0x49,0x46,0x53,0x3a,0x38,0x42,0x47,0x45,0x50,0x39,0x37,0x40,0x47,0x43,0x50,0x38,0x35,0x3f,0x36,0x34,0x3e,0x44,0x42,0x4d,0x44,0x41,0x4c,0xff,0xff,0xff,0xe5,0x37,0x10,0x78,0x0,0x0,0x0,0x15,0x74,0x52,0x4e,0x53,0x4,0xa,0x11,0x19,0x1f,0x22,0x24,0x15,0x25,0x34,0x3f,0x46,0x47,0x48,0x77,0xef,0xef,0xef,0x77,0xef,0xed,0xe8,0xff,0x76,0xed,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x2d,0xcd,0xda,0x41,0x3d,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x93,0x49,0x44,0x41,0x54,0x18,0xd3,0x65,0xcf,0x47,0x12,0x82,0x40,0x10,0x5,0xd0,0x9e,0xc8,0x44,0x92,0x22,0x41,0x54,0x44,0x40,0x14,0xef,0x7f,0x3e,0x7,0x8a,0xea,0x85,0xbe,0xe5,0xaf,0xea,0xf0,0x1,0x8,0x65,0x5c,0xc8,0x40,0x70,0x46,0x9,0x0,0x89,0x94,0x36,0xd6,0x79,0xef,0xac,0xd1,0x2a,0x22,0x40,0x55,0x9c,0x14,0xa7,0x4d,0x91,0xc4,0x8a,0x2,0xd3,0x69,0x59,0xd5,0x9b,0xaa,0x4c,0x35,0x3,0x6e,0x9a,0xfa,0xbc,0xab,0x1b,0xc3,0x41,0xd8,0xf6,0x82,0x5a,0x2b,0x40,0xba,0xeb,0xd,0x5d,0x9d,0x4,0xe9,0xbb,0x3b,0xea,0xfc,0x1a,0xf4,0xf,0xd4,0xaf,0x81,0x1b,0x46,0x34,0x84,0x11,0x61,0xa7,0x27,0x9a,0xc2,0x52,0x6e,0xe6,0x17,0x9a,0xc3,0x59,0xa6,0xb3,0xf1,0xbd,0x1b,0xb3,0xf0,0x18,0x55,0xf9,0x61,0xf9,0x6c,0x96,0x63,0x1e,0x5e,0xff,0x2b,0xf7,0x5b,0xff,0xb,0x69,0x5a,0x14,0xfa,0x84,0xf6,0xc2,0x8,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tab_behind_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x12, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x60, 0x18, 0x5, 0xa3, 0x60, 0x14, 0x8c, 0x2, 0x8, 0x0, 0x0, 0x4, 0x10, 0x0, 0x1, 0x7f, 0x4d, 0x78, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tab_current_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x9c,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x3d,0x48,0x5b,0x58,0x66,0x5b,0x57,0x65,0x57,0x54,0x62,0x55,0x53,0x62,0x4a,0x46,0x52,0x46,0x41,0x4e,0x45,0x41,0x4d,0x55,0x52,0x60,0x44,0x41,0x4c,0x53,0x50,0x5e,0x43,0x40,0x4b,0x52,0x4e,0x5d,0x41,0x3e,0x4a,0x4f,0x4d,0x5a,0x3f,0x3d,0x48,0x4e,0x4b,0x59,0x3e,0x3c,0x47,0x4d,0x4a,0x58,0x3d,0x3b,0x46,0x4b,0x49,0x54,0x3c,0x3a,0x44,0x4b,0x47,0x54,0x3b,0x39,0x43,0x3b,0x39,0x42,0x3b,0x38,0x43,0x3b,0x38,0x42,0x3a,0x37,0x41,0x39,0x37,0x41,0x3a,0x38,0x41,0x39,0x36,0x3f,0x38,0x36,0x3f,0x39,0x36,0x40,0x38,0x36,0x40,0x37,0x35,0x3e,0x37,0x34,0x3e,0x36,0x35,0x3d,0x35,0x32,0x3b,0x59,0xdd,0xd3,0xff,0x0,0x0,0x0,0x11,0x74,0x52,0x4e,0x53,0x4,0xa,0x11,0x19,0x1f,0x22,0x24,0x15,0x25,0x34,0x3f,0x46,0x47,0x48,0x77,0xef,0xef,0xa3,0x31,0x6b,0xc2,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x33,0x37,0xd5,0x7c,0x5e,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xa2,0x49,0x44,0x41,0x54,0x18,0xd3,0x45,0xcd,0xd9,0x12,0x82,0x30,0xc,0x40,0xd1,0x0,0x2d,0x4b,0x5b,0x36,0x59,0x44,0x44,0x44,0xa4,0x68,0x59,0x54,0xfc,0xff,0x8f,0x33,0x30,0x4c,0x3d,0x93,0xa7,0x3b,0x93,0x4,0xc0,0x30,0x2d,0x42,0x6d,0x44,0x89,0x65,0x1a,0x0,0x86,0xe3,0x7a,0x8c,0xb,0xdf,0x17,0x9c,0x79,0xae,0x63,0x80,0xe9,0x6,0x61,0x7c,0xd8,0xc4,0x61,0xe0,0x9a,0x60,0x79,0x51,0x92,0x66,0x9b,0x34,0x89,0x3c,0xb,0x8,0xcb,0xb3,0xe3,0x2e,0xcb,0x19,0x1,0xca,0x8b,0x93,0x56,0x70,0xa,0xb6,0x28,0xcf,0x5a,0x29,0x6c,0xb0,0xfd,0xea,0xa2,0x55,0xfe,0x1a,0xea,0xab,0x56,0xaf,0x41,0x34,0x37,0xad,0xc1,0x15,0xca,0xdb,0xbb,0xd6,0xe2,0x51,0xc2,0xba,0x7f,0xe8,0xf0,0x2d,0x6,0x29,0xfb,0x5e,0xca,0xc7,0x53,0xca,0x3d,0xa8,0x61,0x50,0xc3,0xa8,0xc6,0x41,0xed,0x61,0x9a,0xa6,0x19,0xbd,0xe6,0xf7,0x1e,0x3e,0xcb,0x82,0x83,0xbe,0x18,0x7e,0xa1,0xe5,0x17,0x1f,0xcf,0x5d,0x82,0x6b,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tab_close_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xbe, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xd5, 0x90, 0x3b, 0xe, 0xc2, 0x40, 0xc, 0x44, 0x9f, 0x9, 0x45, 0xf8, 0x14, 0x80, 0xb8, 0xf, 0x15, 0x8a, 0x8, 0x48, 0xdc, 0x94, 0x8a, 0x4, 0x85, 0x9a, 0xe3, 0x20, 0x48, 0xc3, 0xa7, 0x20, 0x32, 0x8d, 0x41, 0x8b, 0xc9, 0x4a, 0xb4, 0xb8, 0xda, 0x1d, 0x7b, 0x9e, 0x35, 0x86, 0xbf, 0x2f, 0x9, 0x3f, 0xaa, 0xba, 0x2, 0xba, 0x40, 0x25, 0x22, 0x37, 0xd7, 0xeb, 0x1, 0x19, 0xf0, 0x10, 0x91, 0xed, 0x4b, 0xef, 0x38, 0x60, 0x2, 0x4c, 0x81, 0xdc, 0xc, 0xa1, 0x39, 0xb7, 0x5e, 0x12, 0x1a, 0x3c, 0xa0, 0x2, 0x4e, 0xc0, 0x18, 0x58, 0xaa, 0x6a, 0x5f, 0x55, 0x53, 0x60, 0x61, 0x5a, 0xd, 0xec, 0xa3, 0x11, 0x6c, 0x5b, 0x6a, 0xdb, 0x26, 0xc0, 0xc5, 0xe4, 0x81, 0x99, 0xb, 0x1f, 0xed, 0xb, 0x10, 0x40, 0xd6, 0xc0, 0xcc, 0x66, 0xe, 0xc0, 0xc6, 0x9b, 0xdb, 0x22, 0xc4, 0x4a, 0x63, 0xcb, 0x7e, 0x89, 0xa0, 0xc0, 0xd0, 0x22, 0x94, 0x22, 0x72, 0x8d, 0x2, 0x9c, 0xb9, 0x6, 0xa, 0x3, 0x84, 0xda, 0x7, 0xc4, 0x47, 0xc8, 0x6c, 0xf0, 0x8c, 0x1d, 0x4c, 0x44, 0xee, 0xc0, 0xce, 0xb4, 0x11, 0x30, 0xf, 0xd, 0x1e, 0xd0, 0x0, 0x47, 0xdb, 0xf2, 0x3e, 0x98, 0xbd, 0x4b, 0xeb, 0x35, 0x6d, 0xb7, 0xf8, 0xe3, 0x7a, 0x2, 0x49, 0x7e, 0x47, 0x10, 0xc3, 0xf7, 0xae, 0x75, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-static const unsigned char tab_disabled_png[] = {
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x12,0x0,0x0,0xb,0x12,0x1,0xd2,0xdd,0x7e,0xfc,0x0,0x0,0x0,0xd2,0x49,0x44,0x41,0x54,0x38,0xcb,0xd5,0x90,0x51,0xa,0xc2,0x30,0xc,0x86,0xd3,0x2e,0xdb,0x4,0x1f,0xb6,0x57,0x75,0x77,0xd9,0x1d,0x3c,0x8d,0x47,0xd8,0x69,0xbc,0x81,0xf,0xbb,0xcb,0xf0,0x6d,0xa8,0xa0,0xa0,0x6b,0xd7,0x9a,0x40,0x26,0xa,0xdb,0x98,0x22,0x88,0x81,0xf,0x92,0xf2,0xe7,0x4f,0x13,0x5,0x0,0x48,0x44,0x44,0x4c,0xcc,0x24,0xf,0x8,0xd,0xaf,0xe1,0x88,0x96,0x68,0x88,0x2b,0x71,0xe3,0xbc,0x6b,0x9e,0x13,0x29,0x91,0x48,0xce,0x66,0x4a,0xe0,0xf0,0x2,0x37,0x5d,0x88,0x13,0x71,0x4,0x99,0xce,0xe2,0x34,0xcf,0xf3,0x75,0xb6,0xcc,0xa,0xd3,0x1a,0x18,0x8b,0x30,0x8,0xa1,0xda,0x57,0x9b,0xb2,0x2c,0xb7,0x54,0x5a,0x94,0x6f,0x27,0xab,0xc5,0xaa,0xa8,0xf,0x35,0x58,0x6b,0xc1,0x7b,0xdf,0xdb,0xac,0x94,0x2,0x44,0x4,0xd6,0x52,0xb9,0x23,0xce,0x8f,0x15,0x1a,0xdb,0x80,0x31,0xe3,0xd3,0xd9,0x98,0x35,0xac,0x95,0x55,0x23,0x2d,0x7,0x8b,0x87,0xa6,0xe,0x19,0xc9,0xea,0x1,0xca,0xb5,0x15,0x3f,0x4e,0x35,0x11,0x1d,0x1f,0x58,0x63,0xb7,0xde,0x87,0x6,0x80,0xcf,0x8f,0x6f,0x1a,0xc0,0x77,0xd,0x9c,0x73,0x93,0xd,0x58,0xdb,0x85,0xee,0x73,0xfd,0xcd,0xa,0xff,0x6b,0x70,0x7,0xd6,0xd5,0x90,0x3b,0x10,0xe9,0x51,0x80,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tab_container_backup_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x88, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x92, 0xb1, 0xd, 0xc2, 0x40, 0xc, 0x45, 0x9f, 0xcf, 0x91, 0x4e, 0x99, 0x21, 0x7, 0xb, 0x65, 0x5, 0x3a, 0xa4, 0x5b, 0x3, 0xb1, 0x5, 0x81, 0x9a, 0x19, 0x18, 0x28, 0xd9, 0x1, 0xa5, 0x48, 0x4c, 0xc3, 0x45, 0x54, 0x58, 0x14, 0x28, 0x14, 0xfc, 0xca, 0x67, 0xfb, 0x3d, 0xb9, 0x38, 0x58, 0x3b, 0x52, 0x8a, 0xdd, 0xfe, 0xd8, 0x9a, 0x58, 0x7, 0x34, 0xe, 0x33, 0x20, 0x92, 0xaf, 0x97, 0xc3, 0xd, 0xa0, 0x2a, 0x5d, 0x13, 0x3b, 0x8d, 0xe3, 0xbd, 0x99, 0xa7, 0xe9, 0x2d, 0x1d, 0x54, 0x53, 0x8c, 0x75, 0x7, 0x6c, 0x1, 0xc2, 0xcb, 0x2c, 0x79, 0x30, 0xc0, 0x73, 0x67, 0xb3, 0x8, 0x5d, 0xc2, 0xc9, 0x5f, 0xf0, 0x6b, 0x82, 0x21, 0xa8, 0xfa, 0x40, 0x50, 0x80, 0xbe, 0xbc, 0x97, 0x9f, 0x88, 0x48, 0x8e, 0xb1, 0x3e, 0x3, 0xc9, 0x71, 0xf4, 0x62, 0xe4, 0x8f, 0xce, 0xfc, 0x6a, 0x1e, 0x1b, 0xcd, 0x1d, 0x1e, 0xc0, 0x10, 0x6, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tab_menu_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6f,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0x18,0x5,0xa3,0x80,0x81,0x81,0x11,0x5d,0xe0,0xc1,0x83,0x7,0xff,0xf1,0x69,0x50,0x50,0x50,0x40,0xd1,0xc3,0x44,0xa9,0xb,0xa8,0x6f,0x0,0x23,0x23,0x63,0x3c,0x3,0x3,0xc3,0x57,0x2c,0x6a,0xbf,0x33,0x32,0x32,0xa6,0x63,0xa8,0xc7,0x66,0xea,0xfd,0xfb,0xf7,0x35,0x18,0x18,0x18,0x56,0x31,0x32,0x32,0xea,0x42,0x85,0x6e,0x30,0x33,0x33,0x87,0xc9,0xca,0xca,0x5e,0x26,0xca,0x0,0x6,0x6,0x6,0x86,0x17,0x2f,0x5e,0x70,0xff,0xfc,0xf9,0x73,0xa,0x3,0x3,0x3,0x3,0x3b,0x3b,0x7b,0x8e,0x84,0x84,0x4,0x36,0x57,0xd,0x2,0x0,0x0,0x67,0xf2,0x14,0xc2,0xc2,0xbe,0xf5,0xb5,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tab_container_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x1, 0x0, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x93, 0x31, 0x4a, 0x43, 0x51, 0x10, 0x45, 0xcf, 0x7d, 0xef, 0x83, 0x2b, 0x50, 0x88, 0x8d, 0x9d, 0xbd, 0xa9, 0x52, 0x44, 0xbb, 0x8f, 0x62, 0xe1, 0x16, 0xcc, 0x22, 0x5c, 0x40, 0x96, 0xa2, 0xd9, 0x82, 0x4, 0x94, 0xdf, 0x19, 0x1b, 0x9b, 0x8f, 0xb, 0xb0, 0x10, 0x91, 0x8, 0xba, 0x84, 0xbc, 0xf7, 0xae, 0x8d, 0x86, 0x20, 0x3f, 0x28, 0xa4, 0xf5, 0xc2, 0xc0, 0x14, 0x33, 0x67, 0xee, 0xc, 0xc, 0x6c, 0x28, 0xad, 0xe6, 0xfd, 0xe1, 0xf1, 0x48, 0x52, 0x6d, 0xd8, 0x5e, 0x53, 0xfc, 0x61, 0xbb, 0x69, 0xef, 0x6f, 0x2f, 0x1, 0xaf, 0x0, 0xc6, 0xe1, 0xe0, 0xe8, 0xe1, 0x5a, 0xf6, 0xa9, 0xa4, 0x84, 0x54, 0x75, 0x8e, 0xb3, 0x93, 0xed, 0xa, 0x31, 0x6d, 0xef, 0x6, 0x67, 0x30, 0x2e, 0x11, 0xa0, 0x3f, 0xdc, 0x1a, 0x9, 0x2e, 0x62, 0xac, 0x8, 0xb1, 0xa, 0x21, 0x4, 0xba, 0x23, 0x6, 0x4, 0x2e, 0xde, 0xef, 0xed, 0xbd, 0x3e, 0xbf, 0xbd, 0x3c, 0x3d, 0x6, 0x0, 0x49, 0xb5, 0xa4, 0xa4, 0x10, 0x7e, 0xdd, 0x39, 0x84, 0x88, 0xa4, 0x6c, 0xab, 0x6, 0x8, 0x0, 0x5, 0x7a, 0x6b, 0x6d, 0x77, 0x1e, 0x43, 0x11, 0x79, 0x77, 0x9, 0xd8, 0x44, 0xff, 0x80, 0x6f, 0x80, 0x35, 0xc7, 0x4e, 0x7f, 0xee, 0xb2, 0x13, 0xd6, 0x7c, 0x9, 0x90, 0xdc, 0xd8, 0xae, 0x4a, 0xc9, 0xbf, 0xf6, 0x96, 0x92, 0xb1, 0x5d, 0x49, 0x6e, 0x96, 0x80, 0x76, 0x36, 0x98, 0x20, 0xa6, 0x25, 0x67, 0x72, 0x5a, 0xa4, 0x9c, 0x13, 0x9d, 0x91, 0x16, 0xa9, 0xe4, 0xc, 0x62, 0xda, 0xce, 0x6, 0x13, 0xf8, 0xf9, 0x4c, 0x87, 0x27, 0xe7, 0xb6, 0x6a, 0xc9, 0x3b, 0xdd, 0xce, 0xf5, 0x2e, 0xb9, 0x69, 0x67, 0x37, 0x57, 0x7c, 0x3d, 0xd3, 0xc6, 0xfa, 0x4, 0xa9, 0xb7, 0x78, 0x10, 0x23, 0xd5, 0x4b, 0x13, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tab_menu_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x6f,0x49,0x44,0x41,0x54,0x38,0x8d,0x63,0x60,0x18,0x5,0xa3,0x80,0x81,0x81,0x11,0x5d,0xe0,0xc1,0x83,0x7,0xff,0xf1,0x69,0x50,0x50,0x50,0x40,0xd1,0xc3,0x44,0xa9,0xb,0xa8,0x6f,0x0,0x23,0x23,0x63,0x3c,0x3,0x3,0xc3,0x57,0x2c,0x6a,0xbf,0x33,0x32,0x32,0xa6,0x63,0xa8,0xc7,0x66,0xea,0xfd,0xfb,0xf7,0x35,0x18,0x18,0x18,0x56,0x31,0x32,0x32,0xea,0x42,0x85,0x6e,0x30,0x33,0x33,0x87,0xc9,0xca,0xca,0x5e,0x26,0xca,0x0,0x6,0x6,0x6,0x86,0x17,0x2f,0x5e,0x70,0xff,0xfc,0xf9,0x73,0xa,0x3,0x3,0x3,0x3,0x3b,0x3b,0x7b,0x8e,0x84,0x84,0x4,0x36,0x57,0xd,0x2,0x0,0x0,0x67,0xf2,0x14,0xc2,0xc2,0xbe,0xf5,0xb5,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tab_current_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xb5, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0xcf, 0x21, 0x6e, 0x2, 0x61, 0x10, 0xc5, 0xf1, 0xff, 0x7b, 0x1f, 0x88, 0x1e, 0x0, 0x1, 0xa2, 0x8e, 0x3, 0xac, 0x22, 0x4d, 0x36, 0xa8, 0x35, 0x88, 0xde, 0x81, 0x9e, 0x81, 0xb, 0xec, 0x55, 0xb8, 0x3, 0xc1, 0xd4, 0x11, 0xc, 0x6, 0xb8, 0x0, 0x82, 0x56, 0x20, 0x7a, 0x85, 0xe5, 0x1b, 0x5c, 0xa9, 0x58, 0x52, 0x1, 0x92, 0x97, 0x4c, 0x32, 0x62, 0xf2, 0x9b, 0x19, 0xb8, 0x33, 0xba, 0xb6, 0xb5, 0x8b, 0x72, 0x33, 0xb5, 0xa2, 0xa, 0xe8, 0xdd, 0x18, 0xfe, 0x89, 0x88, 0xcf, 0xed, 0xfa, 0x6d, 0xe, 0x75, 0xfe, 0x3, 0xd4, 0x2e, 0xc6, 0x9b, 0x85, 0x22, 0x26, 0x12, 0xd, 0x72, 0xa7, 0x75, 0x5d, 0xe4, 0x26, 0x82, 0x4e, 0x48, 0xcb, 0xdd, 0x6a, 0xf4, 0xe, 0x75, 0x4e, 0x0, 0x45, 0xf9, 0xf2, 0x21, 0x62, 0xe6, 0x94, 0x48, 0xa9, 0x6b, 0xdb, 0xb4, 0x57, 0xb2, 0x24, 0x22, 0xe7, 0x61, 0xff, 0xf5, 0xfb, 0x78, 0xfa, 0x3a, 0xec, 0xd, 0x60, 0x45, 0x25, 0xa9, 0xb1, 0xd3, 0xff, 0x3f, 0xdb, 0x48, 0x3a, 0x7, 0xae, 0x0, 0xc, 0x90, 0xa1, 0x8f, 0xd4, 0x7e, 0x76, 0xab, 0xa2, 0x84, 0x62, 0xf0, 0xb, 0xdc, 0x93, 0x27, 0xf0, 0x4, 0x1e, 0x2, 0x5c, 0x0, 0x20, 0x84, 0x2f, 0x10, 0x74, 0xfb, 0x66, 0x2f, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char toggle_off_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x20,0x8,0x3,0x0,0x0,0x0,0x95,0x43,0x8e,0xb6,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x7a,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x14,0x17,0x20,0x20,0x25,0x24,0x24,0x28,0x24,0x24,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x13,0x22,0x22,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x19,0x19,0x1c,0x1a,0x1a,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x14,0x12,0x12,0x14,0x23,0x23,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x15,0x15,0x18,0x20,0x20,0x25,0x20,0x20,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x24,0x28,0x0,0x0,0x0,0x24,0x24,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x24,0x27,0x15,0x15,0x18,0x23,0x23,0x28,0x12,0x12,0x14,0x0,0x0,0x0,0x1a,0x1a,0x1e,0x0,0x0,0x0,0x11,0x11,0x13,0x22,0x22,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x24,0x29,0x25,0x25,0x2a,0x24,0x24,0x28,0x25,0x25,0x28,0x25,0x25,0x29,0x25,0x25,0x27,0x2d,0x26,0x2c,0x4d,0x2b,0x37,0x63,0x2f,0x3f,0x6e,0x31,0x43,0x71,0x32,0x44,0x6c,0x31,0x42,0x51,0x2c,0x39,0x47,0x2a,0x35,0x66,0x30,0x40,0x4d,0x2b,0x38,0x32,0x26,0x2e,0x26,0x25,0x2a,0x2e,0x25,0x2c,0x3c,0x28,0x31,0x52,0x2c,0x39,0x68,0x30,0x40,0x27,0x25,0x2a,0x50,0x2c,0x38,0x5f,0x2e,0x3d,0x35,0x27,0x2f,0x38,0x27,0x30,0x5e,0x2e,0x3d,0x43,0x2a,0x34,0x5f,0x2f,0x3e,0x2f,0x25,0x2c,0x44,0x2a,0x34,0x2b,0x26,0x2c,0x64,0x2f,0x3f,0x36,0x27,0x30,0x37,0x27,0x30,0x66,0x2f,0x40,0x2c,0x26,0x2c,0x46,0x2a,0x35,0x53,0x2c,0x39,0x40,0x40,0x44,0xad,0xad,0xaf,0xff,0xff,0xff,0xf2,0xf2,0xf2,0x77,0x77,0x7a,0x5b,0x5b,0x5f,0x32,0x32,0x37,0x5d,0x2e,0x3d,0x3e,0x29,0x32,0xc9,0xc9,0xca,0xbb,0xbb,0xbd,0x69,0x69,0x6c,0x69,0x30,0x41,0x2f,0x26,0x2d,0x84,0x84,0x87,0xd6,0xd6,0xd7,0x92,0x92,0x94,0xa0,0xa0,0xa2,0x4e,0x4e,0x52,0x48,0x2b,0x36,0x2c,0x26,0x2b,0x97,0xb0,0x86,0xb4,0x0,0x0,0x0,0x41,0x74,0x52,0x4e,0x53,0x0,0x1,0x2,0x3,0x4,0x9,0xe,0x13,0x16,0x18,0x19,0xa,0x26,0x36,0x44,0x4d,0x52,0x54,0x55,0x6,0x12,0x27,0x43,0x98,0xe5,0xfa,0xfe,0x8,0x17,0x35,0x86,0xf3,0x7,0x3a,0xb4,0xb9,0xb,0x28,0x8a,0x8b,0xf6,0x45,0x5,0x9b,0xe6,0xe6,0x37,0xf,0xfb,0x4c,0xfe,0x4e,0x4f,0x50,0xfb,0x9c,0xf6,0x8c,0x3b,0xbb,0x3c,0x87,0xf3,0x53,0x14,0xe5,0x7c,0xf3,0x66,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x6b,0x52,0x65,0xa5,0x98,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x2,0x47,0x49,0x44,0x41,0x54,0x48,0xc7,0xd5,0x55,0xfb,0x5b,0x93,0x50,0x18,0x96,0x3,0xc,0x48,0x60,0xde,0x70,0x9b,0x43,0x37,0x75,0xa6,0x9b,0xb5,0xad,0x56,0x59,0x99,0xe9,0xc6,0x39,0xb3,0x56,0x59,0xcd,0x4c,0xbb,0xd9,0x3d,0xdb,0xd,0x74,0xa6,0xa3,0xdb,0xff,0x1e,0x70,0x68,0x6e,0xc0,0xe0,0xe9,0xe9,0x97,0x7a,0x79,0x9e,0x3,0xf,0x7c,0xdf,0xcb,0x7b,0xbe,0xf3,0x5d,0x86,0x86,0xfe,0x21,0x10,0x80,0x24,0xa9,0x40,0x90,0x24,0x20,0x3c,0xdd,0x1,0x45,0x87,0x18,0x96,0x3b,0x17,0x0,0x8e,0x65,0x42,0x34,0x5,0xdc,0x7f,0xa7,0x86,0x59,0x5e,0x10,0xc3,0x23,0xa3,0x63,0xbe,0x18,0x1d,0x9,0x8b,0x2,0xcf,0xe,0x53,0xe,0x15,0x60,0x7c,0x42,0x9a,0x8c,0x44,0x63,0x53,0xc5,0x52,0x0,0x8a,0x53,0xb1,0x68,0x64,0x52,0x9a,0x18,0xef,0x13,0x1,0xe2,0xf2,0xf4,0x4c,0x42,0x81,0x10,0x21,0x84,0xed,0x90,0x9,0x88,0xca,0xc8,0x93,0x24,0x31,0x33,0x2d,0xc7,0x7b,0x18,0x88,0x24,0x37,0x3b,0xa7,0xc0,0xcd,0x3b,0x77,0x2b,0xf7,0x30,0xee,0x3f,0xd8,0xb4,0x58,0xca,0x70,0x80,0x8e,0xb9,0x59,0x2e,0x49,0x9c,0xed,0x9f,0x11,0xe6,0x15,0xb4,0xf5,0xf0,0xd1,0xe3,0xaa,0xf5,0xb9,0xba,0xfd,0x64,0xe7,0xe9,0xd6,0xae,0xa5,0x64,0xd0,0x4e,0xe6,0x5,0xa6,0x1b,0x7,0x90,0x5a,0x38,0xaf,0xa0,0xbd,0x67,0xcf,0x7b,0x2d,0x5e,0xbc,0xdc,0xdb,0xf5,0x8d,0xc5,0xe2,0x42,0xea,0xf7,0x26,0x28,0x59,0x5c,0x82,0xaf,0xf6,0xb7,0xfb,0x2d,0x5e,0xef,0xbf,0xa9,0xfa,0x31,0x2c,0xa5,0xe5,0xc,0x96,0x40,0xd0,0xfc,0x32,0x7c,0xfb,0xee,0xbd,0xd3,0xe2,0xc3,0xc7,0x4f,0xbe,0xe7,0xb1,0xcc,0xd3,0x98,0x0,0x84,0x84,0xb,0xf0,0x60,0xc7,0x6d,0xf1,0xf9,0xc0,0x7e,0xa8,0xd5,0x1b,0xcd,0x56,0x49,0x6d,0x18,0xb0,0x16,0xcd,0x7a,0x7b,0x31,0x9b,0xc3,0x7b,0x20,0x19,0x31,0x86,0xe,0x8f,0xdc,0x4,0x47,0x87,0xf6,0x43,0xfb,0xb8,0xf6,0xa5,0x51,0x53,0x4d,0x47,0xd5,0xf6,0x36,0x90,0x4f,0x33,0x24,0x26,0x60,0x2f,0x5d,0x46,0x27,0xa7,0x6e,0x82,0xd3,0x13,0x5b,0x80,0xe9,0x74,0xdc,0x51,0x75,0x93,0x40,0xef,0x12,0x14,0xb,0x2c,0x85,0x9,0xe4,0x2b,0xa,0xaa,0x78,0x4,0xac,0x5a,0xc1,0x77,0x55,0x37,0x96,0xaf,0x75,0xb5,0xdd,0x6e,0x6b,0xd6,0x62,0x7f,0xbf,0x2a,0xdb,0x4,0x6c,0x58,0xf1,0x55,0xa0,0x99,0xa,0xea,0xdf,0x54,0xd3,0x53,0x6d,0x7b,0x28,0x60,0xc4,0x6b,0xd0,0x37,0x6,0x7a,0xa7,0xa4,0x35,0x5b,0x4e,0x82,0x6e,0xc,0x40,0x28,0x1b,0x70,0xa,0x6a,0x53,0x6f,0xd6,0x4b,0x4e,0x82,0xee,0x29,0x18,0x79,0xb0,0x12,0x90,0x7,0x5a,0xe7,0xbb,0x11,0xcb,0x96,0x66,0x2f,0x18,0x2b,0x92,0x9d,0x7,0x66,0x26,0x5e,0x47,0x7f,0x91,0x89,0x66,0x2d,0x2c,0xfe,0x79,0x2d,0xdc,0x38,0xab,0x5,0xef,0x6a,0xfc,0xe1,0xef,0xdf,0x5b,0x8d,0x66,0x3f,0xb8,0xb9,0xaa,0xc0,0x9f,0xce,0x7e,0xe0,0xe3,0xbf,0x7a,0xab,0xa7,0x1f,0x98,0x1d,0x89,0x13,0xd6,0x6e,0xc3,0x32,0xc4,0xd,0x9,0xd9,0x80,0xc6,0xe5,0xe9,0x9f,0x58,0x13,0xb8,0x78,0x7f,0x4f,0x4b,0x32,0x92,0x18,0x89,0xe6,0x3,0x5b,0xa2,0xf1,0xf3,0x7c,0x34,0x22,0x4a,0x4c,0xd2,0xd1,0x98,0x9,0x2a,0xc5,0xf2,0xd9,0x74,0x61,0x7d,0x2c,0x0,0xeb,0x85,0x74,0x96,0x67,0x53,0x94,0x6b,0x36,0x10,0x20,0x43,0xe7,0x36,0xe4,0xe0,0xb9,0x20,0x6f,0xe4,0xe8,0x8c,0xf7,0x6c,0x31,0x26,0x53,0xf0,0x60,0x32,0x46,0xd3,0x80,0xc9,0xf4,0xff,0xe2,0x17,0x82,0xde,0x40,0xde,0x2d,0xc3,0x2a,0xca,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tab_menu_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x47, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x64, 0xc0, 0x1, 0xfe, 0xff, 0xff, 0x2f, 0xcb, 0xc0, 0xc0, 0x60, 0x3, 0xe5, 0x1e, 0x61, 0x64, 0x64, 0x7c, 0x8c, 0x4d, 0x1d, 0x13, 0x2e, 0x3, 0xa0, 0x9a, 0xb9, 0xa1, 0xd8, 0x6, 0x97, 0x22, 0x7c, 0x6, 0x10, 0x5, 0xf0, 0x19, 0x70, 0x84, 0x81, 0x81, 0xe1, 0x2b, 0x14, 0x1f, 0xa6, 0xd4, 0x22, 0xda, 0x1, 0x46, 0x5c, 0x12, 0xa3, 0xb1, 0x40, 0x47, 0x30, 0x1a, 0xb, 0xc, 0xc, 0x0, 0xfd, 0x7d, 0x1b, 0x13, 0xc4, 0xa1, 0x25, 0x31, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char toggle_on_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x20,0x8,0x3,0x0,0x0,0x0,0x95,0x43,0x8e,0xb6,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x1,0x74,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xd,0xf,0x1a,0x1a,0x1e,0x20,0x20,0x24,0x22,0x22,0x27,0x24,0x24,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0xa,0xc,0x1d,0x1d,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x14,0x23,0x23,0x28,0x12,0x12,0x15,0x0,0x0,0x0,0x0,0x0,0x0,0xb,0xb,0xd,0x23,0x23,0x28,0xb,0xb,0xd,0x1e,0x1e,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0xe,0x10,0x1a,0x1a,0x1e,0x1a,0x1a,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0xe,0x10,0xb,0xb,0xd,0x0,0x0,0x0,0x13,0x13,0x15,0x0,0x0,0x0,0xb,0xb,0xc,0x1d,0x1d,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x25,0x25,0x2a,0x24,0x24,0x29,0x25,0x2c,0x36,0x27,0x49,0x65,0x29,0x5d,0x85,0x2a,0x66,0x95,0x2a,0x68,0x99,0x29,0x64,0x92,0x28,0x4c,0x6b,0x25,0x27,0x2d,0x27,0x43,0x5c,0x29,0x5f,0x89,0x27,0x49,0x66,0x25,0x30,0x3e,0x25,0x26,0x2d,0x25,0x25,0x2b,0x25,0x26,0x2c,0x25,0x2d,0x38,0x25,0x3a,0x4c,0x27,0x4d,0x6b,0x29,0x60,0x8c,0x27,0x44,0x5c,0x27,0x4b,0x69,0x28,0x59,0x7f,0x25,0x34,0x43,0x25,0x35,0x45,0x28,0x58,0x7f,0x25,0x26,0x2b,0x27,0x40,0x57,0x27,0x41,0x57,0x25,0x2a,0x33,0x29,0x5d,0x87,0x25,0x34,0x44,0x25,0x2b,0x34,0x40,0x40,0x44,0xad,0xad,0xaf,0xff,0xff,0xff,0xf2,0xf2,0xf2,0x77,0x77,0x7a,0x5b,0x5b,0x5f,0x4e,0x4e,0x52,0xc9,0xc9,0xca,0x27,0x43,0x5b,0x27,0x4d,0x6c,0x27,0x4e,0x6d,0xbb,0xbb,0xbd,0x69,0x69,0x6c,0x28,0x56,0x7b,0x26,0x3b,0x4e,0x26,0x3a,0x4e,0x32,0x32,0x37,0x84,0x84,0x87,0xd6,0xd6,0xd7,0x29,0x61,0x8d,0x25,0x2e,0x39,0x92,0x92,0x94,0xa0,0xa0,0xa2,0xe4,0xe4,0xe5,0x27,0x44,0x5d,0xdd,0xc9,0xf2,0x7e,0x0,0x0,0x0,0x41,0x74,0x52,0x4e,0x53,0x0,0x1,0x2,0x3,0x4,0x9,0xe,0x13,0x16,0x18,0x19,0xa,0x26,0x36,0x44,0x4d,0x52,0x54,0x55,0x6,0x12,0x27,0x43,0x80,0xc5,0xe7,0xf5,0xfe,0x8,0x17,0x35,0x73,0xd9,0x7,0x3a,0x96,0xf9,0x9a,0xb,0x28,0x76,0xfb,0x77,0xde,0x45,0x5,0x82,0xc6,0xc6,0x37,0xf,0xe9,0x4c,0x4e,0x4f,0x50,0x83,0x78,0x3b,0x9c,0x3c,0x74,0xda,0x53,0x14,0x37,0x21,0x5a,0x6c,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x65,0xb5,0xdd,0x88,0x9f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x2,0x28,0x49,0x44,0x41,0x54,0x48,0xc7,0xd5,0x55,0x69,0x57,0xd3,0x40,0x14,0x25,0x93,0xa4,0x49,0x24,0x49,0xd9,0x42,0xd7,0x0,0x85,0x50,0x2c,0xb4,0x68,0x5b,0xab,0x28,0xb2,0xc,0x4b,0x95,0x82,0x56,0xab,0x42,0x45,0x5c,0x9b,0xad,0x45,0x11,0x6d,0x3,0xa8,0x7f,0xde,0xc4,0x94,0x26,0x69,0x30,0x89,0xc7,0x2f,0x7a,0x3f,0xe4,0x9c,0xcc,0x3b,0xef,0xce,0x7d,0x6f,0xde,0x32,0x30,0xf0,0xf,0x1,0x1,0x28,0x8a,0xf9,0x2,0x45,0x1,0x72,0xa5,0x3b,0xc0,0xf0,0x10,0x41,0x52,0xd7,0x7c,0x40,0x91,0x44,0x8,0xc7,0x80,0xfb,0x76,0x6c,0x90,0xa4,0x19,0x36,0x3c,0x34,0x3c,0xe2,0x89,0xe1,0xa1,0x30,0xcb,0xd0,0xe4,0x20,0xd6,0xa7,0x2,0x8c,0x8e,0x71,0xe3,0x91,0x68,0x2c,0x9e,0x80,0x3e,0x48,0xc4,0x63,0xd1,0xc8,0x38,0x37,0x36,0xea,0x10,0x1,0x92,0xfc,0xc4,0xe4,0xd4,0x86,0x9f,0xf3,0x25,0x36,0xa6,0x26,0x27,0xf8,0xa4,0x8d,0x1,0x49,0x51,0xd3,0x33,0x82,0xa7,0xcf,0xe6,0xd6,0x76,0xf9,0x81,0x89,0x87,0x3b,0x9b,0x50,0x98,0x99,0xa6,0x52,0x88,0x15,0x3f,0xc1,0xcc,0x7a,0x6a,0xaf,0xec,0xee,0x3d,0x7a,0x5c,0x7d,0x62,0xe0,0x69,0xed,0xd9,0xf3,0x17,0xfb,0x95,0xc4,0x2c,0x43,0xf4,0xf2,0x0,0xd2,0x73,0xd7,0x33,0x9e,0xfe,0x7,0xf5,0x97,0xf6,0xff,0xc3,0x57,0x7,0x95,0xcc,0xfc,0x5c,0xfa,0x32,0x8,0x8c,0x67,0x17,0xbc,0xfc,0x8f,0x5e,0xd7,0x6b,0xce,0x93,0x5a,0xfd,0xcd,0xd1,0x42,0x96,0xcf,0x99,0x12,0x10,0x9c,0x5e,0xf4,0x8c,0xff,0xed,0xbb,0xf7,0xfd,0x47,0x87,0x7b,0x1f,0xe0,0x22,0x8d,0x9b,0x4,0x20,0xc4,0xdc,0xb0,0x4c,0xd,0x51,0x92,0x15,0xa8,0x4a,0x4d,0xa8,0xb6,0xba,0x47,0xc7,0x1f,0xdd,0xa4,0x9f,0x8e,0xe1,0xcd,0x7c,0xc1,0x8c,0x1,0x25,0xd8,0x98,0x65,0x69,0x9d,0x34,0x3e,0x4b,0xd,0x55,0x6a,0x59,0x4,0xa7,0x5f,0xdc,0x4,0x5f,0x4f,0x61,0x31,0x4b,0xa0,0x26,0x1,0x79,0x2b,0x6e,0x9,0x90,0xda,0x10,0x9e,0x74,0x54,0x4d,0x56,0x7b,0x4,0x67,0xe7,0x6e,0x82,0xf3,0x33,0x28,0x94,0x48,0xcc,0x24,0xe0,0x6f,0x5b,0x6f,0xa8,0x6a,0xfa,0xe7,0x42,0x54,0x5b,0x17,0x5a,0x8f,0xa0,0x5c,0x75,0x13,0x54,0xcb,0x10,0xde,0xe1,0xbb,0x4,0x64,0xd8,0x2a,0xa2,0xb6,0xa1,0x40,0xfc,0xa6,0x3b,0x7f,0x17,0x3,0x2b,0x20,0xd8,0xa2,0x65,0xd1,0x3a,0xb0,0x2d,0x2b,0x3a,0x81,0x22,0x5,0xcd,0x1,0x8,0xe5,0x6d,0xaf,0xa0,0xca,0x9a,0x2c,0xfe,0x4a,0xa0,0x16,0xf4,0x15,0xf4,0x3a,0x58,0xb2,0x99,0xda,0x9d,0xa6,0x9e,0x4b,0x5,0xc2,0xa6,0xe2,0x5d,0x7,0x4b,0x5c,0xb7,0xe,0xfe,0xba,0x12,0x8d,0x5e,0x98,0xff,0xf3,0x5e,0xb8,0x6b,0xf5,0x42,0x80,0x6e,0xdc,0x77,0x76,0xe3,0xf,0x67,0x37,0x1a,0xf3,0xe0,0xde,0xb2,0xa7,0x86,0xfe,0x79,0x90,0x59,0xbe,0x6f,0x9b,0x7,0xc6,0x44,0xa2,0x98,0x95,0x55,0x18,0x18,0xab,0x2b,0xc,0x95,0x74,0xce,0xb4,0x14,0xc1,0xb1,0x91,0x68,0x51,0xf0,0x77,0x16,0x8a,0xd1,0x8,0xcb,0x11,0xa9,0xbe,0xc1,0x8c,0x60,0x69,0x92,0xce,0x67,0x4b,0x6b,0x23,0x3e,0x58,0x2b,0x65,0xf3,0x34,0x99,0xc6,0x5c,0xbb,0x1,0x1,0x39,0xbc,0xb0,0xce,0xfb,0xef,0x5,0x7e,0xbd,0x80,0xe7,0xae,0xde,0x2d,0xfa,0x66,0xf2,0x5f,0x4c,0xfa,0x6a,0xfa,0xcd,0x66,0xfa,0x7f,0xf1,0x13,0xb7,0x71,0x36,0xc6,0x87,0x41,0xd4,0x5,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tab_menu_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x47, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x64, 0xc0, 0x1, 0xfe, 0xff, 0xff, 0x2f, 0xcb, 0xc0, 0xc0, 0x60, 0x3, 0xe5, 0x1e, 0x61, 0x64, 0x64, 0x7c, 0x8c, 0x4d, 0x1d, 0x13, 0x2e, 0x3, 0xa0, 0x9a, 0xb9, 0xa1, 0xd8, 0x6, 0x97, 0x22, 0x7c, 0x6, 0x10, 0x5, 0xf0, 0x19, 0x70, 0x84, 0x81, 0x81, 0xe1, 0x2b, 0x14, 0x1f, 0xa6, 0xd4, 0x22, 0xda, 0x1, 0x46, 0x5c, 0x12, 0xa3, 0xb1, 0x40, 0x47, 0x30, 0x1a, 0xb, 0xc, 0xc, 0x0, 0xfd, 0x7d, 0x1b, 0x13, 0xc4, 0xa1, 0x25, 0x31, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tool_button_pressed_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x2,0x1,0x50,0x4c,0x54,0x45,0x29,0x3a,0x40,0x2d,0x3e,0x44,0x26,0x34,0x3b,0x24,0x34,0x39,0x23,0x31,0x38,0x22,0x31,0x37,0x22,0x31,0x37,0x22,0x30,0x36,0x22,0x31,0x36,0x26,0x34,0x3c,0x32,0x44,0x4c,0x26,0x34,0x39,0x23,0x31,0x36,0x21,0x2e,0x34,0x1f,0x2c,0x30,0x1f,0x2b,0x2f,0x1f,0x2a,0x2e,0x1e,0x2b,0x2f,0x1f,0x2b,0x2e,0x36,0x4b,0x52,0x25,0x33,0x38,0x20,0x2f,0x32,0x1c,0x29,0x2e,0x1b,0x26,0x2a,0x1a,0x23,0x26,0x18,0x22,0x26,0x19,0x22,0x26,0x19,0x23,0x26,0x19,0x26,0x29,0x20,0x2d,0x32,0x25,0x31,0x38,0x3c,0x51,0x59,0x23,0x31,0x37,0x1f,0x2b,0x31,0x1a,0x25,0x2b,0x17,0x20,0x24,0x15,0x1c,0x21,0x14,0x1b,0x21,0x14,0x1c,0x21,0x13,0x1b,0x21,0x15,0x1d,0x21,0x1a,0x25,0x2a,0x40,0x57,0x60,0x23,0x31,0x36,0x1f,0x2b,0x31,0x1b,0x25,0x29,0x16,0x1e,0x23,0x14,0x1b,0x1d,0x12,0x19,0x1d,0x12,0x1b,0x1d,0x14,0x1a,0x1d,0x45,0x5e,0x67,0x22,0x32,0x37,0x20,0x2d,0x31,0x1a,0x26,0x2a,0x15,0x1f,0x25,0x14,0x1c,0x1f,0x12,0x1b,0x1f,0x12,0x1b,0x20,0x14,0x1b,0x1f,0x15,0x1e,0x24,0x1a,0x25,0x29,0x4b,0x64,0x6d,0x23,0x32,0x38,0x20,0x2e,0x32,0x1b,0x27,0x2b,0x17,0x22,0x27,0x16,0x1e,0x23,0x14,0x1e,0x23,0x16,0x20,0x24,0x14,0x1e,0x22,0x15,0x1e,0x22,0x17,0x21,0x27,0x1c,0x27,0x2c,0x4f,0x6a,0x75,0x21,0x2f,0x33,0x1d,0x29,0x2d,0x19,0x23,0x2a,0x18,0x22,0x27,0x16,0x21,0x27,0x18,0x23,0x29,0x17,0x21,0x26,0x19,0x23,0x29,0x1c,0x28,0x2d,0x21,0x2e,0x33,0x54,0x70,0x7c,0x23,0x33,0x38,0x22,0x30,0x34,0x1e,0x2a,0x2f,0x1a,0x26,0x2d,0x1a,0x25,0x2b,0x19,0x25,0x2b,0x1a,0x26,0x2d,0x1a,0x26,0x2c,0x18,0x25,0x2a,0x1a,0x24,0x2a,0x1a,0x25,0x2c,0x1d,0x2a,0x2f,0x22,0x2f,0x34,0x59,0x77,0x82,0x23,0x33,0x39,0x22,0x30,0x35,0x1f,0x2c,0x31,0x1c,0x28,0x30,0x1c,0x28,0x2e,0x1b,0x29,0x2f,0x1c,0x2a,0x31,0x1b,0x28,0x2f,0x1c,0x28,0x2d,0x1b,0x27,0x2f,0x1f,0x2b,0x31,0x5e,0x7d,0x8a,0x24,0x34,0x39,0x21,0x2f,0x37,0x20,0x2d,0x34,0x1d,0x2b,0x33,0x1d,0x2b,0x32,0x1d,0x2d,0x35,0x1e,0x2e,0x36,0x1f,0x2e,0x36,0x1d,0x2b,0x34,0x1d,0x2b,0x31,0x1d,0x2b,0x32,0x20,0x2d,0x32,0x21,0x2f,0x36,0x63,0x83,0x90,0x25,0x34,0x39,0x21,0x31,0x36,0x1f,0x2e,0x34,0x1f,0x2e,0x34,0x1f,0x2e,0x36,0x20,0x31,0x39,0x21,0x33,0x3b,0x21,0x32,0x3b,0x1f,0x30,0x37,0x1f,0x2e,0x35,0x1e,0x2d,0x33,0x1f,0x2d,0x33,0x21,0x30,0x36,0x67,0x8a,0x97,0x24,0x33,0x39,0x20,0x30,0x36,0x1f,0x2f,0x35,0x21,0x30,0x37,0x22,0x32,0x39,0x21,0x35,0x3e,0x24,0x37,0x41,0x24,0x36,0x41,0x21,0x33,0x3c,0x21,0x31,0x38,0x1e,0x2f,0x35,0x1e,0x2e,0x35,0x20,0x2e,0x35,0x24,0x31,0x39,0x6c,0x90,0x9e,0x22,0x30,0x36,0x1f,0x2e,0x36,0x20,0x30,0x36,0x20,0x31,0x39,0x23,0x34,0x3d,0x23,0x37,0x41,0x26,0x3c,0x47,0x26,0x3b,0x46,0x22,0x35,0x3f,0x22,0x32,0x3b,0x1f,0x30,0x37,0x1f,0x2e,0x35,0x1f,0x2d,0x35,0x21,0x30,0x36,0x72,0x96,0xa5,0x72,0x96,0xa5,0xe8,0x14,0xaa,0x3f,0x0,0x0,0x0,0xaa,0x74,0x52,0x4e,0x53,0xc3,0xc3,0xe6,0xd7,0xcb,0xc3,0xbf,0xbe,0xbd,0xe5,0xc3,0xd7,0xc0,0xac,0xa0,0x9a,0x98,0x98,0x98,0xc3,0xcb,0xac,0x92,0x82,0x7b,0x78,0x78,0x7b,0x82,0xac,0xcb,0xc3,0xc3,0xa0,0x82,0x6f,0x67,0x64,0x63,0x64,0x67,0x82,0xc3,0xbf,0x9a,0x7a,0x67,0x5e,0x5b,0x5a,0x5e,0xc3,0xbd,0x98,0x78,0x64,0x5b,0x57,0x57,0x5b,0x64,0x78,0xc3,0xbd,0x98,0x78,0x63,0x5a,0x57,0x56,0x57,0x5a,0x63,0x77,0xc3,0x98,0x78,0x63,0x5a,0x57,0x56,0x5a,0x63,0x77,0x98,0xc3,0xbd,0x98,0x78,0x63,0x5a,0x57,0x56,0x56,0x57,0x5a,0x63,0x77,0x98,0xc3,0xbd,0x98,0x77,0x63,0x5a,0x57,0x56,0x57,0x5a,0x63,0x77,0xc3,0xbb,0x96,0x76,0x63,0x5a,0x57,0x56,0x56,0x57,0x5a,0x63,0x76,0x96,0xc3,0xb5,0x92,0x75,0x62,0x5a,0x57,0x56,0x56,0x57,0x59,0x62,0x74,0x92,0xc3,0xa9,0x8b,0x71,0x61,0x59,0x57,0x56,0x56,0x57,0x59,0x61,0x71,0x8b,0xa9,0xc3,0x95,0x7e,0x6b,0x5e,0x59,0x57,0x56,0x56,0x57,0x59,0x5e,0x6b,0x7e,0x95,0xc3,0x4f,0x78,0x99,0x30,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xa9,0x27,0xf,0x6,0x4,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xff,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0x40,0x7,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,0x1c,0x1c,0x1c,0x6c,0xac,0x2c,0xcc,0x9c,0x8c,0xc,0x5c,0xdc,0x3c,0xbc,0x7c,0xfc,0x2,0x82,0x82,0x42,0xfc,0x7c,0xbc,0x3c,0xdc,0x5c,0xc,0xc2,0x22,0xa2,0x62,0xe2,0x12,0x92,0x52,0x52,0x92,0xd2,0x32,0x62,0xb2,0x72,0xc2,0xc,0xf2,0xa,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0x6a,0xea,0x1a,0xca,0x9a,0x8a,0xa,0xf2,0xc,0x5a,0xda,0x3a,0xba,0x7a,0xfa,0x6,0x86,0x86,0x6,0x46,0x7a,0xba,0x3a,0xda,0x5a,0xc,0xc6,0x26,0xa6,0x66,0xe6,0x16,0x96,0x56,0x56,0x96,0xd6,0x36,0xb6,0xa6,0x26,0xc6,0xc,0x76,0xf6,0xe,0x8e,0x4e,0xce,0x2e,0xae,0xae,0x6e,0xee,0x1e,0x9e,0xe,0x26,0x76,0xc,0x5e,0xf6,0xde,0x3e,0xbe,0x7e,0xfe,0x1,0x1,0xfe,0x81,0x41,0xc1,0x21,0xf6,0x5e,0xc,0xa1,0x61,0xe1,0x11,0x91,0x51,0xd1,0x31,0xb1,0x71,0xf1,0x9,0x89,0x49,0x61,0xa1,0xc,0xc9,0x29,0xa9,0x69,0xe9,0x19,0x99,0x59,0x59,0xd9,0x39,0xb9,0x79,0xa9,0x29,0xc9,0xc,0xf9,0x5,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5,0x15,0x95,0x55,0xd5,0x35,0x5,0xf9,0xc,0xb5,0x75,0xf5,0xd,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed,0x1d,0x9d,0x5d,0x75,0xb5,0xc,0xdd,0x3d,0xbd,0x7d,0xfd,0x13,0x26,0x4e,0x9a,0x3c,0x65,0xea,0xb4,0xe9,0x33,0x66,0x76,0x33,0xcc,0x9a,0x3d,0x67,0xee,0xbc,0xf9,0xb,0x16,0x2e,0x5a,0xbc,0x64,0xe9,0xb2,0xe5,0x2b,0x66,0x31,0xac,0x44,0x3,0x0,0xa4,0xd7,0x4d,0x73,0x12,0x21,0x19,0xde,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char toggle_off_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x20, 0x8, 0x6, 0x0, 0x0, 0x0, 0xa2, 0x9d, 0x7e, 0x84, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x2, 0x73, 0x49, 0x44, 0x41, 0x54, 0x68, 0x81, 0xed, 0x98, 0x4d, 0x4b, 0x1b, 0x51, 0x14, 0x86, 0x1f, 0x33, 0x38, 0xa9, 0x2d, 0xc6, 0x14, 0x46, 0xd2, 0x66, 0xba, 0x2a, 0xae, 0xba, 0xae, 0xa5, 0x3b, 0xd7, 0x11, 0xa4, 0x24, 0x6b, 0x21, 0xbf, 0xa0, 0x83, 0xc5, 0x75, 0x77, 0x5d, 0xdb, 0x45, 0x83, 0x4b, 0x5, 0x51, 0x68, 0x83, 0x20, 0x45, 0xa6, 0x4b, 0x77, 0xa5, 0x98, 0xfe, 0x6, 0x5d, 0x94, 0x99, 0x90, 0x81, 0x91, 0xaa, 0x83, 0xa6, 0xc9, 0x94, 0x4c, 0x17, 0x93, 0x94, 0x50, 0x6d, 0x31, 0xf7, 0x8c, 0x6d, 0xc1, 0x79, 0xe0, 0x2e, 0xcf, 0x79, 0xcf, 0x7d, 0xef, 0x7, 0xe7, 0x5e, 0x48, 0x49, 0x49, 0x49, 0x49, 0xb9, 0xb9, 0x8c, 0x5d, 0x43, 0xbe, 0x7c, 0x7f, 0x4c, 0x0, 0x3a, 0x90, 0x11, 0xe6, 0xec, 0x1, 0x5d, 0xa0, 0xd, 0x1c, 0xf7, 0x47, 0x24, 0xcc, 0xf9, 0x93, 0x24, 0xd, 0xc8, 0x3, 0x26, 0x90, 0x4d, 0x30, 0xe7, 0x65, 0x74, 0x0, 0x97, 0xd8, 0x8, 0x31, 0x49, 0x18, 0x30, 0x6, 0x14, 0x81, 0x2, 0x80, 0x65, 0x59, 0x33, 0xa5, 0x52, 0xa9, 0x6c, 0x18, 0xc6, 0xac, 0xae, 0xeb, 0x45, 0x80, 0x6e, 0xb7, 0xdb, 0xf4, 0x7d, 0xbf, 0x61, 0xdb, 0xf6, 0x4e, 0xad, 0x56, 0x3b, 0x48, 0x40, 0x13, 0xc0, 0x23, 0x36, 0x42, 0x44, 0x12, 0x6, 0x98, 0x40, 0xc1, 0x34, 0x4d, 0x7d, 0x6d, 0x6d, 0x6d, 0xb9, 0x58, 0x2c, 0x56, 0xf8, 0xfd, 0xb6, 0xef, 0xb9, 0xae, 0xbb, 0x5d, 0xad, 0x56, 0x57, 0x3c, 0xcf, 0xb, 0x13, 0xd0, 0x16, 0x9b, 0x20, 0x35, 0x20, 0xf, 0x3c, 0x34, 0x4d, 0x53, 0xaf, 0xd7, 0xeb, 0x6f, 0x72, 0xb9, 0xdc, 0xe3, 0xab, 0x4, 0x9d, 0x9e, 0x9e, 0x7e, 0xae, 0x54, 0x2a, 0xcf, 0x13, 0x32, 0xe1, 0x10, 0xc1, 0x71, 0x90, 0x5c, 0x50, 0x63, 0xc4, 0xab, 0xcf, 0xfa, 0xfa, 0xfa, 0xf2, 0x55, 0x27, 0xf, 0x90, 0xcb, 0xe5, 0x66, 0x37, 0x36, 0x36, 0x5e, 0x8, 0xb4, 0x87, 0x79, 0x80, 0x60, 0x21, 0x35, 0x81, 0xf0, 0x5d, 0xc0, 0xb0, 0x2c, 0x6b, 0x66, 0x6e, 0x6e, 0xee, 0xe5, 0xa8, 0x45, 0x4c, 0x4e, 0x4e, 0x3e, 0xd2, 0x34, 0x6d, 0xaf, 0xd1, 0x68, 0x7c, 0x15, 0xd4, 0x0, 0xf1, 0x1c, 0xbe, 0xf5, 0xc7, 0xc8, 0x48, 0x76, 0x40, 0x1e, 0xa0, 0x54, 0x2a, 0x95, 0x15, 0xf3, 0x64, 0xe6, 0xe7, 0xe7, 0x9f, 0x9, 0xf4, 0x87, 0x99, 0x52, 0xd, 0x94, 0x18, 0x70, 0x1b, 0xc0, 0x30, 0x8c, 0x27, 0xaa, 0x9, 0xa6, 0xa7, 0xa7, 0x9f, 0xa, 0xf4, 0x2f, 0xd4, 0xa2, 0x82, 0xc4, 0x80, 0x71, 0x0, 0x5d, 0xd7, 0xef, 0x29, 0x27, 0x18, 0x1f, 0xbf, 0x2f, 0xd0, 0x1f, 0x46, 0x57, 0xd, 0x94, 0x76, 0x69, 0x44, 0x91, 0xa8, 0x29, 0x4b, 0xaa, 0xa3, 0x53, 0xce, 0x23, 0x31, 0x20, 0x4, 0x8, 0xc3, 0xb0, 0xa5, 0x9c, 0x40, 0x10, 0x7b, 0x59, 0x2d, 0x2a, 0x48, 0xc, 0x38, 0x7, 0xf0, 0x7d, 0x7f, 0x5f, 0x35, 0x81, 0xef, 0xfb, 0x9f, 0x4, 0xfa, 0x17, 0x6a, 0x51, 0x41, 0x62, 0xc0, 0x31, 0x80, 0x6d, 0xdb, 0x3b, 0xc4, 0xf, 0x96, 0x51, 0xe9, 0xed, 0xee, 0xee, 0xbe, 0x17, 0xe8, 0x5f, 0xa8, 0x45, 0x5, 0xa9, 0x1, 0x9d, 0x5a, 0xad, 0x76, 0xe0, 0xba, 0xee, 0xf6, 0xa8, 0xc1, 0x8e, 0xe3, 0xd4, 0x57, 0x57, 0x57, 0xf, 0x5, 0xfa, 0x3, 0x3a, 0xc0, 0x89, 0x6a, 0xb0, 0xc4, 0x80, 0x88, 0x7e, 0x1f, 0x5e, 0xad, 0x56, 0x57, 0x82, 0x20, 0x68, 0x5c, 0x35, 0x30, 0x8, 0x82, 0xfd, 0xc5, 0xc5, 0xc5, 0xd7, 0x2, 0xed, 0x61, 0x1c, 0xfe, 0xd1, 0x25, 0x8, 0xf1, 0x2e, 0xf0, 0x3c, 0xcf, 0xb, 0xcb, 0xe5, 0xb2, 0xd5, 0x6c, 0x36, 0xdf, 0xf1, 0xe7, 0xe3, 0xd0, 0x73, 0x1c, 0xe7, 0xed, 0xc2, 0xc2, 0x82, 0x75, 0x74, 0x74, 0xf4, 0x5d, 0xa8, 0xd, 0xf1, 0x63, 0x48, 0x79, 0xf5, 0x41, 0xd6, 0xa, 0xf, 0x8, 0x80, 0xcc, 0xd9, 0xd9, 0xd9, 0xc4, 0xe6, 0xe6, 0xe6, 0x47, 0x4d, 0xd3, 0xf6, 0xa, 0x85, 0x42, 0x37, 0x9b, 0xcd, 0xde, 0xc9, 0x64, 0x32, 0xb7, 0xa2, 0x28, 0xa, 0x3b, 0x9d, 0xce, 0x97, 0x56, 0xab, 0xf5, 0x61, 0x6b, 0x6b, 0xeb, 0xd5, 0xd2, 0xd2, 0x92, 0xdd, 0x6e, 0xb7, 0x55, 0xee, 0x8c, 0x5f, 0xf9, 0x6f, 0x9e, 0xc3, 0x3, 0xfe, 0xe6, 0x87, 0x88, 0x83, 0x70, 0xe5, 0x7, 0x5c, 0xd7, 0x97, 0xd8, 0x14, 0x71, 0x7b, 0x9a, 0xe4, 0x97, 0xd8, 0x39, 0xf1, 0x91, 0x3b, 0x21, 0xc1, 0x2f, 0xb1, 0x94, 0x94, 0x94, 0x94, 0x94, 0x9b, 0xcc, 0xf, 0x49, 0x2b, 0xc7, 0x9a, 0xce, 0xd2, 0xbd, 0x5d, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tooltip_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x33,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2d,0x2c,0x2f,0x48,0x46,0x4a,0xdd,0xdd,0xdd,0x4c,0x4a,0x4e,0x48,0x46,0x4a,0x40,0x3e,0x42,0xdd,0xdd,0xdd,0xfe,0x3f,0x83,0xa9,0x0,0x0,0x0,0xd,0x74,0x52,0x4e,0x53,0xa,0x1a,0x26,0x29,0x2a,0x48,0x65,0x6d,0x6e,0x66,0xf5,0xfe,0xcc,0xff,0xb7,0x4a,0xbe,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xc,0x81,0xb3,0x51,0x63,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x44,0x49,0x44,0x41,0x54,0x18,0xd3,0xc5,0xcf,0xbb,0x15,0x0,0x20,0x8,0x43,0xd1,0x80,0x28,0xf8,0x41,0xf7,0xdf,0xd6,0x86,0x63,0xa1,0x3,0x78,0xcb,0x54,0x79,0x0,0x71,0x92,0x90,0x98,0x0,0xca,0x45,0x2d,0x68,0xc9,0x4,0xae,0xad,0x7b,0xe8,0xad,0x32,0x44,0xe7,0x1a,0x61,0x4d,0x15,0x88,0xf9,0x38,0xdc,0xfe,0xd,0xf7,0xb1,0xe7,0xfa,0x13,0x77,0xe7,0x6f,0xdc,0x6c,0x9,0x25,0x82,0x67,0x68,0x78,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char toggle_on_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x20, 0x8, 0x6, 0x0, 0x0, 0x0, 0xa2, 0x9d, 0x7e, 0x84, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x2, 0x97, 0x49, 0x44, 0x41, 0x54, 0x68, 0x81, 0xed, 0x98, 0x4f, 0x48, 0x14, 0x51, 0x1c, 0xc7, 0x3f, 0xb3, 0xbb, 0xed, 0x9f, 0xdc, 0x76, 0x47, 0x9, 0xf2, 0x4f, 0x91, 0x44, 0x4, 0x2d, 0x6c, 0x8, 0x66, 0x4, 0xe1, 0xa1, 0x53, 0x97, 0x20, 0xf4, 0xe4, 0xa1, 0x43, 0x75, 0x49, 0x88, 0x88, 0xf0, 0x6a, 0xd4, 0xa1, 0x8e, 0x19, 0x25, 0x52, 0xd1, 0x45, 0x8a, 0x10, 0x43, 0x90, 0xe, 0x85, 0x78, 0x58, 0x8c, 0xfe, 0xa1, 0x41, 0x4a, 0xe1, 0x51, 0xc5, 0xb2, 0x34, 0x2, 0x1b, 0x77, 0xcd, 0x71, 0xdc, 0x75, 0xa6, 0xc3, 0x8c, 0x5b, 0x7, 0x3, 0x77, 0x7e, 0x63, 0x4, 0xce, 0x7, 0x1e, 0xec, 0x83, 0xf7, 0xfd, 0xbd, 0xdf, 0xfb, 0xce, 0xbe, 0xc7, 0xef, 0x3d, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xd9, 0xba, 0x28, 0x9b, 0x10, 0x4f, 0x75, 0x5a, 0xc, 0x8, 0x3, 0x1, 0x61, 0x4c, 0x13, 0x58, 0x1, 0x74, 0x40, 0x73, 0x9a, 0x25, 0x8c, 0x59, 0xc4, 0x4b, 0x3, 0x54, 0xa0, 0x6, 0x88, 0x78, 0x18, 0x73, 0x3d, 0xc, 0xe0, 0xb, 0xb6, 0x11, 0x62, 0xbc, 0x30, 0x40, 0x1, 0xaa, 0x81, 0x5d, 0x1e, 0xc4, 0xe2, 0xf8, 0x8d, 0x13, 0xfb, 0xd3, 0x2d, 0x75, 0x4d, 0xf1, 0xaa, 0x44, 0x43, 0x30, 0x12, 0xaa, 0x6, 0x58, 0x35, 0xa, 0x5f, 0x73, 0xb3, 0xb9, 0x91, 0xf1, 0x9e, 0xb1, 0xfe, 0x4c, 0xfb, 0xc0, 0x84, 0x33, 0xf4, 0x1b, 0xb6, 0x11, 0x22, 0xbc, 0x30, 0xa0, 0x6, 0xf, 0x16, 0x9f, 0xa8, 0xad, 0x8, 0x9f, 0x19, 0x3a, 0xdf, 0xa6, 0xee, 0x2d, 0x6f, 0xe6, 0x6f, 0xdb, 0xc6, 0xb2, 0x4c, 0x6d, 0x5a, 0xeb, 0xeb, 0x6e, 0xec, 0xea, 0xc8, 0xce, 0x64, 0xf3, 0x78, 0x60, 0x82, 0xd4, 0x0, 0x15, 0xd8, 0x27, 0x8c, 0x41, 0xa2, 0xb6, 0x22, 0xdc, 0x3a, 0x7a, 0xa9, 0x33, 0xaa, 0xc6, 0xe, 0x6f, 0x64, 0xbc, 0xae, 0xe9, 0xef, 0xee, 0xa7, 0x6f, 0x5e, 0x74, 0x4c, 0x98, 0x44, 0xb0, 0x1d, 0x24, 0x7, 0x94, 0x82, 0xfd, 0xf5, 0xc5, 0x9c, 0x7b, 0xd1, 0xda, 0xb6, 0xd1, 0xc5, 0x3, 0xc4, 0xd4, 0x58, 0xc3, 0xd9, 0x97, 0x17, 0x2e, 0x3b, 0xdd, 0xdd, 0x8, 0x3e, 0x64, 0xd0, 0xad, 0x10, 0x28, 0x7, 0x76, 0xa, 0xf4, 0x80, 0xbd, 0xe7, 0xf, 0x9c, 0x4c, 0x5d, 0xa1, 0xc4, 0x45, 0x44, 0x93, 0xd1, 0x14, 0x1, 0x25, 0x33, 0x3d, 0x34, 0x99, 0x5, 0x96, 0x9d, 0x56, 0x32, 0x92, 0x7f, 0x80, 0x2a, 0xd0, 0x16, 0x49, 0xb7, 0xd4, 0x35, 0xb9, 0xca, 0x43, 0x51, 0x2, 0x87, 0x4e, 0xd7, 0x9f, 0x72, 0x7a, 0x49, 0xb7, 0xf3, 0x4b, 0xc, 0xd8, 0x2e, 0xd0, 0x16, 0x29, 0xab, 0x4a, 0x1c, 0x71, 0xab, 0x8d, 0x57, 0xc6, 0x8f, 0x4a, 0x73, 0x91, 0x18, 0xb0, 0x4d, 0xa0, 0x2d, 0x12, 0x8a, 0x84, 0x2a, 0x5, 0xda, 0x2a, 0xe7, 0x67, 0xd8, 0x6d, 0xc, 0x69, 0x95, 0x26, 0xc7, 0x72, 0x5f, 0xd4, 0x59, 0xbf, 0x2b, 0x42, 0xd7, 0x41, 0x24, 0x6, 0xe4, 0x5, 0xda, 0x22, 0x85, 0x95, 0xd5, 0x39, 0xb7, 0xda, 0x55, 0xa3, 0xb0, 0xa6, 0x75, 0x9d, 0x8b, 0xc4, 0x80, 0x25, 0x81, 0xb6, 0xc8, 0xe2, 0x6c, 0x6e, 0xd8, 0xad, 0xf6, 0xe7, 0x5c, 0xee, 0xad, 0x34, 0x17, 0x89, 0x1, 0x9e, 0xd4, 0xe2, 0xe3, 0x3d, 0x63, 0xfd, 0x58, 0x96, 0x59, 0xb2, 0xd0, 0xb2, 0xcc, 0xf, 0x8f, 0x46, 0x9f, 0x4a, 0x73, 0x91, 0x1a, 0x60, 0x8, 0xf4, 0x0, 0x64, 0xda, 0x7, 0x26, 0xb4, 0x69, 0xad, 0xaf, 0xe4, 0xc9, 0xa7, 0xe6, 0x9f, 0xc, 0x5d, 0x1b, 0x9c, 0x74, 0x72, 0x58, 0x70, 0x3b, 0xbf, 0xc4, 0x0, 0xb, 0xf, 0x2e, 0x23, 0x0, 0xdd, 0x8d, 0x5d, 0x1d, 0xcb, 0x9a, 0x3e, 0xb2, 0xd1, 0xf1, 0xfa, 0xf, 0x7d, 0xf8, 0xc1, 0xb1, 0xbb, 0xb7, 0x9c, 0xee, 0xc, 0x82, 0x43, 0x50, 0x52, 0x9, 0x82, 0x5d, 0x7d, 0x5, 0x80, 0xb8, 0x24, 0x88, 0x91, 0x35, 0xcc, 0x8f, 0x8f, 0xdf, 0xf, 0x1e, 0x6c, 0x4e, 0xef, 0x88, 0x26, 0xa3, 0x29, 0x14, 0x65, 0xfd, 0xaa, 0xd0, 0xb2, 0x4c, 0x6d, 0x6a, 0xbe, 0xf7, 0x5e, 0xfd, 0x9d, 0xab, 0xfa, 0x5c, 0xb6, 0x80, 0x7d, 0x19, 0xfa, 0x2e, 0x99, 0x5b, 0x6a, 0x0, 0x40, 0xe, 0x8f, 0x4c, 0x18, 0xbe, 0xfd, 0xea, 0x35, 0x1, 0x25, 0x93, 0xdc, 0x53, 0xbe, 0x12, 0x8a, 0x4, 0xcb, 0x2, 0xc1, 0x40, 0x14, 0x8b, 0x7c, 0x41, 0xcf, 0x7f, 0xca, 0x7d, 0xd6, 0x9e, 0x8f, 0x74, 0xbe, 0xb9, 0xde, 0xdb, 0xfc, 0xf0, 0x59, 0x61, 0xd1, 0x30, 0xf9, 0x8f, 0xae, 0xc3, 0x6b, 0xfc, 0xcb, 0x7, 0x91, 0x19, 0x4, 0xfb, 0xfe, 0x4f, 0x36, 0xeb, 0x49, 0x2c, 0x89, 0x5d, 0x9e, 0x7a, 0xf9, 0x24, 0xb6, 0x84, 0x7d, 0xf0, 0x2e, 0xe0, 0xe1, 0x93, 0x98, 0x8f, 0x8f, 0x8f, 0x8f, 0xcf, 0x56, 0xe6, 0x17, 0xc3, 0x92, 0xcd, 0xe2, 0x0, 0xde, 0xae, 0x9b, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tree_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0xa,0x4,0x3,0x0,0x0,0x0,0x7f,0x1c,0xd2,0x8e,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2a,0x50,0x4c,0x54,0x45,0x17,0x16,0x1a,0x1d,0x1c,0x21,0x20,0x1e,0x24,0x21,0x1f,0x25,0x1d,0x1c,0x21,0x20,0x1e,0x24,0x1d,0x1c,0x21,0x1d,0x1c,0x21,0x24,0x22,0x29,0x28,0x26,0x2d,0x28,0x26,0x2e,0x2b,0x2a,0x31,0x2c,0x2a,0x32,0xff,0xff,0xff,0xb9,0x11,0x56,0x3e,0x0,0x0,0x0,0x8,0x74,0x52,0x4e,0x53,0x6f,0xef,0xf7,0xf7,0xf0,0xf9,0xf1,0xee,0xcf,0x21,0xd2,0xdf,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0xd,0xf6,0xb4,0x61,0xf5,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x2d,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x54,0x36,0x36,0x12,0x60,0xf0,0x98,0xb5,0x6a,0x65,0xb,0x43,0xe4,0x9e,0x33,0xa7,0xa7,0x32,0x58,0x9d,0x39,0x73,0x66,0x31,0x16,0x12,0x22,0xb,0x52,0xd9,0xc6,0xc0,0x2,0xd4,0x55,0x0,0x0,0xc,0x14,0x1a,0x90,0x55,0x1a,0xec,0xdb,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tooltip_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x77, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x93, 0xc1, 0xd, 0x40, 0x40, 0x14, 0x44, 0xdf, 0xa, 0x15, 0x50, 0x86, 0x42, 0xe8, 0x81, 0xb3, 0x3, 0x15, 0x71, 0xa3, 0x5, 0x89, 0x46, 0x94, 0xb1, 0x6a, 0x18, 0x97, 0xdd, 0x10, 0x71, 0xd8, 0x75, 0x36, 0xa7, 0xff, 0x93, 0x79, 0xf3, 0xe7, 0xf2, 0x8d, 0xa4, 0xc, 0xe8, 0x80, 0xa, 0x28, 0x8, 0x93, 0x5, 0x36, 0x60, 0x34, 0x92, 0x6, 0xa0, 0x9, 0x4, 0x9f, 0x5a, 0x8c, 0xa4, 0xd5, 0x5d, 0xde, 0x81, 0x3c, 0x10, 0x3c, 0x80, 0x12, 0xb0, 0x9, 0x57, 0xed, 0x50, 0xf8, 0xee, 0x2d, 0x92, 0x8, 0xe8, 0x55, 0x7f, 0xc0, 0x1f, 0xe0, 0x3, 0xac, 0x9b, 0x8f, 0x8, 0xce, 0x33, 0xd6, 0x48, 0xea, 0x81, 0xf6, 0x63, 0x81, 0x39, 0x5, 0x46, 0xb7, 0xd4, 0xc4, 0xbf, 0xf3, 0x74, 0x2, 0x7e, 0x1c, 0x1c, 0xd5, 0x3c, 0x27, 0x88, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tree_bg_focus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xdb,0xb,0x4,0x12,0x2d,0x3a,0xb5,0x1b,0x14,0x49,0x0,0x0,0x2,0xd9,0x49,0x44,0x41,0x54,0x58,0xc3,0xc5,0x57,0x31,0x8e,0x14,0x31,0x10,0xac,0xea,0x3d,0x11,0x91,0xdf,0x49,0xf7,0xf,0x78,0x1,0xf,0x40,0x84,0x44,0x10,0xf2,0x20,0x42,0x62,0x12,0xc4,0x3,0x78,0x1,0xff,0x21,0x42,0xb8,0x8a,0xc0,0x1e,0x4f,0xdb,0xe3,0xb9,0xbb,0x45,0x20,0x7c,0x1a,0xdd,0x8c,0xec,0xed,0xae,0xae,0xea,0xee,0xe9,0xe1,0xfd,0xed,0xdd,0xb,0x0,0xdf,0xf1,0x7f,0xd6,0x4b,0xde,0xdf,0xde,0xf9,0xcb,0xeb,0x9f,0xff,0xc5,0xfb,0x9b,0xaf,0xcf,0x70,0xb3,0x3d,0x3c,0xff,0xf0,0xd,0x24,0x11,0x71,0x1,0x49,0x90,0x4,0x0,0x4,0xd3,0x2f,0xb6,0x7b,0xf,0xff,0x86,0x2d,0x8c,0x47,0x60,0x1b,0x0,0x61,0x1b,0xb6,0x21,0x15,0xd8,0xc6,0x8f,0x8f,0xaf,0x0,0x60,0x7,0x0,0xa2,0x2,0x20,0x11,0x41,0x30,0xa2,0x2,0xc1,0xb5,0x0,0x8c,0x79,0xd9,0x80,0x24,0x48,0x0,0x48,0x28,0x9d,0xb9,0xd9,0xd,0xb0,0x31,0x40,0x5c,0x2e,0x1,0x46,0x0,0xd,0xd0,0xb6,0xef,0x35,0x8e,0x13,0x6,0xbc,0x33,0x60,0xa3,0x9a,0x11,0x6c,0x82,0xe6,0xa,0x0,0x86,0xe8,0x2f,0x71,0xa9,0xf7,0x9c,0x4d,0x1f,0x69,0x5e,0x1,0xd8,0xa3,0x37,0xa4,0xa,0x27,0x1a,0x13,0x79,0x25,0x9,0xaa,0xe3,0xd8,0x9c,0x5f,0xea,0x7d,0x67,0x80,0xd7,0x31,0x20,0xab,0x3,0x20,0x5,0x20,0x2a,0x13,0x41,0x40,0x2b,0x0,0x76,0x22,0xb9,0xb1,0xd1,0x92,0x91,0x5d,0x86,0xf3,0x35,0xef,0x5,0xa3,0x25,0x60,0xd,0x6e,0x66,0xe5,0x0,0xc0,0xa8,0x54,0x1,0x6,0xe9,0x16,0x9f,0x4f,0xdc,0x1c,0x13,0xed,0xb1,0x55,0x31,0x78,0x70,0x8e,0xca,0xcb,0x8e,0x6a,0xbe,0x56,0x88,0x67,0x38,0xdb,0x75,0x58,0x76,0xdf,0x1b,0x6c,0x7a,0xc,0x6c,0x90,0x0,0xfd,0xe0,0xe8,0x98,0xe4,0x4,0xe2,0x69,0xc,0xe4,0x40,0xaa,0xf9,0x63,0x70,0xbb,0x4,0x16,0x9c,0x12,0xa7,0x3e,0xe7,0x38,0xb3,0x4,0x2b,0x6f,0xc7,0x23,0xbb,0xc3,0x66,0xdb,0x38,0x7,0x0,0xcf,0x32,0x34,0xb6,0x52,0xb4,0x3c,0xf7,0x35,0x10,0xd9,0xf7,0x6,0x56,0x93,0x4,0x4b,0x0,0x43,0x28,0xf9,0x4a,0x3d,0x6e,0xb0,0x3e,0x9,0x31,0xa9,0x62,0xd6,0xc4,0x36,0x9c,0xf2,0xd9,0xbd,0x41,0x2d,0x24,0x68,0xc7,0x1f,0x62,0x60,0x6a,0xc1,0x7f,0x95,0x81,0xaa,0x13,0x61,0x9,0xa6,0xf6,0x1c,0x30,0x17,0x11,0x6f,0x48,0x12,0x3b,0xf3,0x7b,0xc2,0xeb,0xca,0x92,0xb7,0x72,0x5f,0x31,0x90,0x11,0x4e,0x48,0xb3,0x13,0xa6,0xcc,0x3e,0x51,0x60,0x91,0x53,0x55,0x87,0xf3,0x2a,0x98,0xff,0x7c,0x6c,0x1a,0xf9,0xec,0xda,0xeb,0x94,0x13,0x43,0xdd,0x3f,0x2a,0x41,0xd2,0xb,0x27,0x65,0xe8,0x13,0x20,0x29,0x3f,0xc6,0x7c,0x48,0x65,0x8,0x41,0xda,0xa4,0xd5,0x11,0xc0,0x2a,0x61,0xce,0x18,0x58,0xd2,0xbe,0x98,0x48,0x96,0xdd,0xf5,0xbc,0x11,0x65,0xb6,0x12,0x55,0xcb,0xde,0xb3,0x78,0x27,0x78,0xdc,0xcb,0x72,0xe6,0xd7,0x8a,0x27,0xe6,0x52,0x1f,0x10,0xe0,0xb8,0x92,0x81,0xb4,0x3f,0x1,0x1d,0xed,0x6c,0xd4,0xef,0x12,0x2f,0x73,0xa0,0xe,0xf,0x42,0x24,0x20,0xf,0x91,0xbf,0x6e,0x44,0xfb,0xde,0xa1,0x4,0xa5,0x7,0xaa,0xa0,0x23,0xad,0xd4,0x4b,0xaa,0x73,0x0,0xb7,0xa1,0x82,0x87,0x46,0x74,0x9a,0xf,0x48,0x5d,0xb3,0xd,0xa2,0xb0,0x96,0xe5,0x7d,0xc8,0x81,0x19,0xf1,0x36,0x2b,0xba,0xbd,0x5e,0xb3,0xb7,0x55,0x12,0x76,0x90,0xc4,0x3a,0x1,0xa7,0x66,0xbc,0x3,0x90,0xe0,0x8,0xc8,0x42,0x29,0xa5,0x7b,0xa2,0x63,0x9f,0x88,0x26,0xa,0x9c,0x85,0x6f,0x7b,0x2b,0x0,0x92,0x51,0x4a,0x81,0x5c,0x2a,0xcb,0x2a,0x47,0x0,0xb0,0x2b,0x8,0x11,0x62,0x20,0x58,0x20,0x47,0x77,0x5a,0xe5,0x98,0x43,0x3f,0x2,0xd8,0xc1,0xa5,0x39,0x40,0x82,0xb5,0xd9,0xd7,0x5a,0x2,0x59,0x80,0x9,0x8a,0x0,0x7f,0x1,0x8,0x44,0x8,0x64,0xe0,0xe8,0x6e,0x4b,0xb4,0x87,0xa6,0xc4,0x3d,0x17,0x24,0xa3,0xa8,0xc0,0x32,0x8a,0xea,0x33,0x67,0x0,0x6e,0xc,0x94,0x5e,0xe2,0x46,0x11,0x3a,0x0,0x82,0x57,0x1,0x98,0xbf,0xb,0xa4,0xf6,0x55,0xd4,0x2a,0xe1,0x0,0x40,0xf5,0xf3,0xa5,0xd3,0x16,0x6a,0xb4,0xa7,0x19,0xfa,0x4f,0x18,0xe8,0x2c,0x34,0xfb,0x92,0x20,0xbb,0xf,0xa3,0x1d,0xc0,0xcd,0xe7,0xb7,0x83,0xf9,0xf2,0x24,0xd3,0xd7,0xaf,0x40,0x9a,0x84,0x1,0xf0,0xfe,0xf6,0xee,0x1d,0x80,0x4f,0xff,0xc8,0xdf,0x63,0xeb,0xfd,0x6f,0x3,0x74,0x35,0xa7,0x2a,0xf0,0x17,0xed,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tree_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xe5, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x93, 0x31, 0x4a, 0x43, 0x41, 0x18, 0x84, 0xbf, 0xd9, 0x7f, 0xdf, 0x9, 0x24, 0x1, 0x5, 0xcb, 0xd8, 0xa5, 0x35, 0x5e, 0x20, 0x8d, 0x82, 0x57, 0xd0, 0x43, 0x78, 0x20, 0xbd, 0x82, 0x62, 0xf5, 0x2e, 0xa0, 0x56, 0x81, 0x94, 0x69, 0x2c, 0xc4, 0x22, 0x82, 0x27, 0xd8, 0xb7, 0xbf, 0xc5, 0x3e, 0x49, 0x94, 0x95, 0x28, 0xaf, 0xf5, 0x87, 0x85, 0x2d, 0x76, 0x66, 0xfe, 0x61, 0x67, 0x60, 0xe0, 0x68, 0xfb, 0x3e, 0x99, 0xce, 0x2e, 0x11, 0x73, 0x60, 0xf4, 0xc3, 0xfb, 0x37, 0x9c, 0x76, 0xb5, 0x7c, 0xbc, 0x6, 0x7c, 0x9b, 0x20, 0x4c, 0xa6, 0xb3, 0x3b, 0xc4, 0x69, 0x90, 0x92, 0x4b, 0xb1, 0xaa, 0xe6, 0x9e, 0xb2, 0x7b, 0xc4, 0xfd, 0x7e, 0xb5, 0x7c, 0x3a, 0x7, 0xb2, 0x1, 0xf4, 0xca, 0x57, 0x16, 0x1b, 0x62, 0xd3, 0x4, 0x33, 0xa3, 0x76, 0x82, 0xc5, 0x20, 0x89, 0xec, 0xf9, 0x68, 0x6f, 0x7c, 0xf8, 0xfc, 0xbe, 0x7e, 0x59, 0x84, 0xde, 0xc8, 0x3c, 0x48, 0xc9, 0xcc, 0x76, 0x7a, 0xe, 0x66, 0x48, 0xea, 0x7a, 0xab, 0x14, 0x2, 0x67, 0x1f, 0xea, 0x6b, 0x57, 0xad, 0x20, 0xc3, 0xfd, 0x60, 0x43, 0x30, 0x60, 0xfe, 0x9, 0x3e, 0x9, 0xa4, 0x57, 0xf0, 0xf4, 0x7b, 0x98, 0xa7, 0x82, 0xd9, 0x7c, 0x63, 0x9b, 0xdd, 0x63, 0xee, 0xba, 0x9d, 0xd0, 0xdc, 0x75, 0x94, 0x34, 0xd2, 0xc2, 0x97, 0x28, 0x1f, 0xdf, 0x22, 0x9d, 0xfd, 0x35, 0xca, 0xdf, 0xca, 0x74, 0x72, 0x51, 0x12, 0xe6, 0xe3, 0xba, 0xbe, 0xd6, 0xa5, 0x4c, 0xf, 0x37, 0xf4, 0x65, 0x1a, 0x3c, 0x1f, 0xbb, 0xac, 0x55, 0xac, 0xed, 0xfe, 0xe5, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tree_cursor_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xe,0x8,0x3,0x0,0x0,0x0,0x28,0x96,0xdd,0xe3,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xc6,0x50,0x4c,0x54,0x45,0xd4,0xab,0x9e,0xd3,0xaa,0x9d,0xd4,0xab,0x9e,0xd3,0xaa,0x9d,0xd4,0xab,0x9c,0xd4,0xac,0x9e,0xd5,0xaf,0xa3,0xd5,0xb0,0xa3,0xd5,0xaf,0xa3,0xd5,0xad,0xa1,0xd5,0xaf,0xa3,0xd5,0xad,0xa1,0xd5,0xb0,0xa3,0xd6,0xad,0xa0,0xd6,0xad,0xa0,0xd5,0xb0,0xa3,0xd7,0xb1,0xa5,0xd7,0xb1,0xa7,0xd7,0xb1,0xa7,0xd7,0xb1,0xa7,0xd7,0xb1,0xa7,0xd7,0xb1,0xa5,0xd7,0xb1,0xa5,0xd8,0xb3,0xa8,0xd8,0xb5,0xaa,0xda,0xb3,0xa8,0xda,0xb3,0xa8,0xd8,0xb3,0xa8,0xd8,0xb5,0xaa,0xda,0xb3,0xa8,0xd8,0xb3,0xa8,0xdb,0xb7,0xad,0xda,0xb8,0xae,0xdb,0xb9,0xad,0xdb,0xb9,0xad,0xdb,0xb7,0xad,0xdd,0xba,0xb1,0xdd,0xbb,0xb1,0xdd,0xbd,0xb1,0xdd,0xbf,0xb3,0xdd,0xbd,0xb3,0xdf,0xc1,0xb7,0xdf,0xc0,0xb5,0xdf,0xbf,0xb5,0xe1,0xc3,0xb9,0xe1,0xc3,0xbb,0xe1,0xc5,0xbb,0xe2,0xc7,0xbe,0xe1,0xc5,0xbd,0xe4,0xcb,0xc2,0xe3,0xca,0xc1,0xe3,0xcb,0xc3,0xe6,0xce,0xc6,0xe6,0xd0,0xc6,0xe8,0xd1,0xca,0xe8,0xd1,0xca,0xe8,0xd0,0xca,0xe8,0xcf,0xca,0xb7,0x7d,0x69,0xb1,0x77,0x63,0xac,0x73,0x5c,0xa6,0x69,0x56,0x9c,0x67,0x54,0x93,0x62,0x51,0x88,0x60,0x50,0x0,0x0,0x0,0x39,0x76,0x1d,0xc2,0x0,0x0,0x0,0x3a,0x74,0x52,0x4e,0x53,0x32,0x2f,0x30,0x33,0x38,0x40,0x32,0x2f,0x2f,0x2f,0x31,0x33,0x33,0x33,0x36,0x38,0x31,0x2f,0x30,0x31,0x33,0x33,0x35,0x2f,0x2f,0x2f,0x30,0x32,0x33,0x33,0x33,0x2f,0x2f,0x2f,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x32,0x2f,0x2f,0x2f,0xb8,0xf,0x95,0x41,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x41,0x89,0xde,0x6c,0x4e,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x9e,0x49,0x44,0x41,0x54,0x8,0xd7,0x55,0xcf,0x5b,0x17,0x81,0x40,0x14,0x5,0xe0,0xe3,0x9a,0x4b,0x2e,0x31,0x14,0x62,0x22,0x53,0x4d,0x83,0x44,0xc,0xa6,0xa9,0xf9,0xff,0xbf,0xca,0xd4,0x5a,0x1e,0x7c,0xfb,0xec,0xb5,0x9f,0xf,0x7c,0xfe,0x80,0x80,0x86,0xd6,0x6c,0x69,0xed,0x8e,0x80,0xbc,0x6b,0x18,0xbd,0xfe,0x60,0x68,0x9a,0xa3,0xf1,0x24,0x7,0x39,0xb5,0x2c,0x6b,0x36,0x47,0x68,0x81,0xd0,0x52,0x42,0x61,0x3b,0xb6,0xb3,0x72,0xd6,0x1b,0x77,0xeb,0xee,0xa,0x28,0x31,0xc6,0x9e,0x87,0x3d,0xbc,0x3f,0xf8,0x7e,0x9,0xea,0x48,0x8,0x9,0xc2,0x28,0x22,0x21,0x9,0x14,0x28,0x1a,0x33,0x16,0xd3,0x98,0xb2,0x98,0x51,0x5,0xe5,0x49,0x3b,0xeb,0x5e,0x74,0x4a,0x28,0x92,0xca,0xb5,0xbe,0xa4,0x0,0x99,0xde,0xd2,0xca,0xbd,0x5a,0x9,0x79,0x96,0x3d,0xb2,0x9f,0x1c,0xc4,0x93,0xf3,0x17,0xaf,0xfb,0xe6,0x2,0xfe,0x5f,0xf8,0x2,0x30,0xbc,0x1f,0xb4,0x2b,0xfc,0x80,0xca,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tree_cursor_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0xe, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x96, 0xdd, 0xe3, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0xc6, 0x50, 0x4c, 0x54, 0x45, 0xd4, 0xab, 0x9e, 0xd3, 0xaa, 0x9d, 0xd4, 0xab, 0x9e, 0xd3, 0xaa, 0x9d, 0xd4, 0xab, 0x9c, 0xd4, 0xac, 0x9e, 0xd5, 0xaf, 0xa3, 0xd5, 0xb0, 0xa3, 0xd5, 0xaf, 0xa3, 0xd5, 0xad, 0xa1, 0xd5, 0xaf, 0xa3, 0xd5, 0xad, 0xa1, 0xd5, 0xb0, 0xa3, 0xd6, 0xad, 0xa0, 0xd6, 0xad, 0xa0, 0xd5, 0xb0, 0xa3, 0xd7, 0xb1, 0xa5, 0xd7, 0xb1, 0xa7, 0xd7, 0xb1, 0xa7, 0xd7, 0xb1, 0xa7, 0xd7, 0xb1, 0xa7, 0xd7, 0xb1, 0xa5, 0xd7, 0xb1, 0xa5, 0xd8, 0xb3, 0xa8, 0xd8, 0xb5, 0xaa, 0xda, 0xb3, 0xa8, 0xda, 0xb3, 0xa8, 0xd8, 0xb3, 0xa8, 0xd8, 0xb5, 0xaa, 0xda, 0xb3, 0xa8, 0xd8, 0xb3, 0xa8, 0xdb, 0xb7, 0xad, 0xda, 0xb8, 0xae, 0xdb, 0xb9, 0xad, 0xdb, 0xb9, 0xad, 0xdb, 0xb7, 0xad, 0xdd, 0xba, 0xb1, 0xdd, 0xbb, 0xb1, 0xdd, 0xbd, 0xb1, 0xdd, 0xbf, 0xb3, 0xdd, 0xbd, 0xb3, 0xdf, 0xc1, 0xb7, 0xdf, 0xc0, 0xb5, 0xdf, 0xbf, 0xb5, 0xe1, 0xc3, 0xb9, 0xe1, 0xc3, 0xbb, 0xe1, 0xc5, 0xbb, 0xe2, 0xc7, 0xbe, 0xe1, 0xc5, 0xbd, 0xe4, 0xcb, 0xc2, 0xe3, 0xca, 0xc1, 0xe3, 0xcb, 0xc3, 0xe6, 0xce, 0xc6, 0xe6, 0xd0, 0xc6, 0xe8, 0xd1, 0xca, 0xe8, 0xd1, 0xca, 0xe8, 0xd0, 0xca, 0xe8, 0xcf, 0xca, 0xb7, 0x7d, 0x69, 0xb1, 0x77, 0x63, 0xac, 0x73, 0x5c, 0xa6, 0x69, 0x56, 0x9c, 0x67, 0x54, 0x93, 0x62, 0x51, 0x88, 0x60, 0x50, 0x0, 0x0, 0x0, 0x39, 0x76, 0x1d, 0xc2, 0x0, 0x0, 0x0, 0x3a, 0x74, 0x52, 0x4e, 0x53, 0x32, 0x2f, 0x30, 0x33, 0x38, 0x40, 0x32, 0x2f, 0x2f, 0x2f, 0x31, 0x33, 0x33, 0x33, 0x36, 0x38, 0x31, 0x2f, 0x30, 0x31, 0x33, 0x33, 0x35, 0x2f, 0x2f, 0x2f, 0x30, 0x32, 0x33, 0x33, 0x33, 0x2f, 0x2f, 0x2f, 0x30, 0x30, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x32, 0x2f, 0x2f, 0x2f, 0xb8, 0xf, 0x95, 0x41, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x41, 0x89, 0xde, 0x6c, 0x4e, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x4, 0x4e, 0x1d, 0x2, 0xaf, 0x0, 0x0, 0x0, 0x9e, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x55, 0xcf, 0x5b, 0x17, 0x81, 0x40, 0x14, 0x5, 0xe0, 0xe3, 0x9a, 0x4b, 0x2e, 0x31, 0x14, 0x62, 0x22, 0x53, 0x4d, 0x83, 0x44, 0xc, 0xa6, 0xa9, 0xf9, 0xff, 0xbf, 0xca, 0xd4, 0x5a, 0x1e, 0x7c, 0xfb, 0xec, 0xb5, 0x9f, 0xf, 0x7c, 0xfe, 0x80, 0x80, 0x86, 0xd6, 0x6c, 0x69, 0xed, 0x8e, 0x80, 0xbc, 0x6b, 0x18, 0xbd, 0xfe, 0x60, 0x68, 0x9a, 0xa3, 0xf1, 0x24, 0x7, 0x39, 0xb5, 0x2c, 0x6b, 0x36, 0x47, 0x68, 0x81, 0xd0, 0x52, 0x42, 0x61, 0x3b, 0xb6, 0xb3, 0x72, 0xd6, 0x1b, 0x77, 0xeb, 0xee, 0xa, 0x28, 0x31, 0xc6, 0x9e, 0x87, 0x3d, 0xbc, 0x3f, 0xf8, 0x7e, 0x9, 0xea, 0x48, 0x8, 0x9, 0xc2, 0x28, 0x22, 0x21, 0x9, 0x14, 0x28, 0x1a, 0x33, 0x16, 0xd3, 0x98, 0xb2, 0x98, 0x51, 0x5, 0xe5, 0x49, 0x3b, 0xeb, 0x5e, 0x74, 0x4a, 0x28, 0x92, 0xca, 0xb5, 0xbe, 0xa4, 0x0, 0x99, 0xde, 0xd2, 0xca, 0xbd, 0x5a, 0x9, 0x79, 0x96, 0x3d, 0xb2, 0x9f, 0x1c, 0xc4, 0x93, 0xf3, 0x17, 0xaf, 0xfb, 0xe6, 0x2, 0xfe, 0x5f, 0xf8, 0x2, 0x30, 0xbc, 0x1f, 0xb4, 0x2b, 0xfc, 0x80, 0xca, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe, 0x17, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tree_cursor_unfocus_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xe,0x8,0x3,0x0,0x0,0x0,0x28,0x96,0xdd,0xe3,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x99,0x50,0x4c,0x54,0x45,0xc0,0xb5,0xb2,0xbf,0xb4,0xb1,0xc0,0xb5,0xb2,0xbf,0xb4,0xb1,0xbf,0xb5,0xb1,0xc0,0xb5,0xb2,0xc3,0xb8,0xb5,0xc3,0xb8,0xb5,0xc2,0xb7,0xb4,0xc3,0xb8,0xb5,0xc2,0xb7,0xb4,0xc3,0xb8,0xb5,0xc2,0xb7,0xb4,0xc3,0xb8,0xb5,0xc5,0xba,0xb7,0xc5,0xbc,0xb9,0xc5,0xbc,0xb9,0xc5,0xbc,0xb9,0xc5,0xbc,0xb9,0xc5,0xba,0xb7,0xc5,0xba,0xb7,0xc6,0xbd,0xba,0xc7,0xbe,0xbb,0xc7,0xbe,0xbb,0xc6,0xbd,0xba,0xc7,0xbe,0xbb,0xc6,0xbd,0xba,0xca,0xc1,0xbe,0xca,0xc1,0xbe,0xcd,0xc4,0xc1,0xcd,0xc6,0xc3,0xd0,0xc9,0xc6,0xcf,0xc8,0xc5,0xd2,0xcb,0xc8,0xd3,0xcb,0xc9,0xd3,0xcc,0xc9,0xd5,0xcd,0xcb,0xd4,0xcc,0xca,0xd7,0xd1,0xcf,0xd6,0xd0,0xce,0xda,0xd4,0xd2,0xdd,0xd7,0xd5,0xdd,0xd7,0xd5,0x9a,0x8b,0x86,0x94,0x85,0x80,0x8e,0x80,0x7a,0x88,0x79,0x74,0x81,0x75,0x6f,0x7a,0x6f,0x6a,0x73,0x69,0x65,0x0,0x0,0x0,0xfb,0x87,0x71,0x8e,0x0,0x0,0x0,0x2b,0x74,0x52,0x4e,0x53,0x32,0x2f,0x30,0x33,0x38,0x40,0x32,0x2f,0x2f,0x31,0x33,0x33,0x36,0x38,0x31,0x2f,0x30,0x31,0x33,0x33,0x35,0x2f,0x2f,0x30,0x32,0x33,0x33,0x2f,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x32,0x2f,0x82,0xd8,0x8a,0x2f,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x32,0x40,0xd2,0x4c,0xc8,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x82,0x49,0x44,0x41,0x54,0x8,0xd7,0x55,0xcf,0xe9,0x16,0xc1,0x30,0x14,0x4,0xe0,0xb1,0x96,0x16,0x25,0x34,0x84,0x26,0x2d,0xaa,0xb6,0xac,0xef,0xff,0x72,0x6e,0x38,0xe,0xfd,0xe6,0xce,0x99,0xdf,0x17,0xcf,0xe,0x68,0xf4,0x48,0x7f,0x40,0x86,0x23,0xd,0x33,0x4e,0x92,0x64,0x32,0x4d,0xb3,0x2c,0x9d,0xcd,0xd,0xec,0x22,0xcf,0xf3,0xe5,0x8a,0xb1,0x35,0x63,0x1b,0xb,0x57,0xf0,0x82,0x73,0xbe,0xdd,0x9,0x21,0xf6,0xe,0xfe,0xf0,0x55,0x96,0xa5,0x47,0x90,0x91,0x52,0x4a,0x2a,0x29,0x3,0x42,0x55,0x93,0xaa,0x8e,0x53,0x5,0xf8,0x23,0x39,0x51,0xcf,0x14,0xf,0xd7,0x44,0x97,0xf7,0x35,0xe,0xb6,0xbd,0xb6,0x1f,0xb4,0x16,0xe6,0xf6,0xc7,0x40,0xdf,0x1f,0x3f,0x1a,0xdd,0x17,0x5e,0xc0,0x36,0x18,0x83,0x7f,0x54,0x76,0x87,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tree_cursor_unfocus_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0xe, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x96, 0xdd, 0xe3, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x99, 0x50, 0x4c, 0x54, 0x45, 0xc0, 0xb5, 0xb2, 0xbf, 0xb4, 0xb1, 0xc0, 0xb5, 0xb2, 0xbf, 0xb4, 0xb1, 0xbf, 0xb5, 0xb1, 0xc0, 0xb5, 0xb2, 0xc3, 0xb8, 0xb5, 0xc3, 0xb8, 0xb5, 0xc2, 0xb7, 0xb4, 0xc3, 0xb8, 0xb5, 0xc2, 0xb7, 0xb4, 0xc3, 0xb8, 0xb5, 0xc2, 0xb7, 0xb4, 0xc3, 0xb8, 0xb5, 0xc5, 0xba, 0xb7, 0xc5, 0xbc, 0xb9, 0xc5, 0xbc, 0xb9, 0xc5, 0xbc, 0xb9, 0xc5, 0xbc, 0xb9, 0xc5, 0xba, 0xb7, 0xc5, 0xba, 0xb7, 0xc6, 0xbd, 0xba, 0xc7, 0xbe, 0xbb, 0xc7, 0xbe, 0xbb, 0xc6, 0xbd, 0xba, 0xc7, 0xbe, 0xbb, 0xc6, 0xbd, 0xba, 0xca, 0xc1, 0xbe, 0xca, 0xc1, 0xbe, 0xcd, 0xc4, 0xc1, 0xcd, 0xc6, 0xc3, 0xd0, 0xc9, 0xc6, 0xcf, 0xc8, 0xc5, 0xd2, 0xcb, 0xc8, 0xd3, 0xcb, 0xc9, 0xd3, 0xcc, 0xc9, 0xd5, 0xcd, 0xcb, 0xd4, 0xcc, 0xca, 0xd7, 0xd1, 0xcf, 0xd6, 0xd0, 0xce, 0xda, 0xd4, 0xd2, 0xdd, 0xd7, 0xd5, 0xdd, 0xd7, 0xd5, 0x9a, 0x8b, 0x86, 0x94, 0x85, 0x80, 0x8e, 0x80, 0x7a, 0x88, 0x79, 0x74, 0x81, 0x75, 0x6f, 0x7a, 0x6f, 0x6a, 0x73, 0x69, 0x65, 0x0, 0x0, 0x0, 0xfb, 0x87, 0x71, 0x8e, 0x0, 0x0, 0x0, 0x2b, 0x74, 0x52, 0x4e, 0x53, 0x32, 0x2f, 0x30, 0x33, 0x38, 0x40, 0x32, 0x2f, 0x2f, 0x31, 0x33, 0x33, 0x36, 0x38, 0x31, 0x2f, 0x30, 0x31, 0x33, 0x33, 0x35, 0x2f, 0x2f, 0x30, 0x32, 0x33, 0x33, 0x2f, 0x30, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x32, 0x2f, 0x82, 0xd8, 0x8a, 0x2f, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x32, 0x40, 0xd2, 0x4c, 0xc8, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x4, 0x4e, 0x1d, 0x2, 0xaf, 0x0, 0x0, 0x0, 0x82, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x55, 0xcf, 0xe9, 0x16, 0xc1, 0x30, 0x14, 0x4, 0xe0, 0xb1, 0x96, 0x16, 0x25, 0x34, 0x84, 0x26, 0x2d, 0xaa, 0xb6, 0xac, 0xef, 0xff, 0x72, 0x6e, 0x38, 0xe, 0xfd, 0xe6, 0xce, 0x99, 0xdf, 0x17, 0xcf, 0xe, 0x68, 0xf4, 0x48, 0x7f, 0x40, 0x86, 0x23, 0xd, 0x33, 0x4e, 0x92, 0x64, 0x32, 0x4d, 0xb3, 0x2c, 0x9d, 0xcd, 0xd, 0xec, 0x22, 0xcf, 0xf3, 0xe5, 0x8a, 0xb1, 0x35, 0x63, 0x1b, 0xb, 0x57, 0xf0, 0x82, 0x73, 0xbe, 0xdd, 0x9, 0x21, 0xf6, 0xe, 0xfe, 0xf0, 0x55, 0x96, 0xa5, 0x47, 0x90, 0x91, 0x52, 0x4a, 0x2a, 0x29, 0x3, 0x42, 0x55, 0x93, 0xaa, 0x8e, 0x53, 0x5, 0xf8, 0x23, 0x39, 0x51, 0xcf, 0x14, 0xf, 0xd7, 0x44, 0x97, 0xf7, 0x35, 0xe, 0xb6, 0xbd, 0xb6, 0x1f, 0xb4, 0x16, 0xe6, 0xf6, 0xc7, 0x40, 0xdf, 0x1f, 0x3f, 0x1a, 0xdd, 0x17, 0x5e, 0xc0, 0x36, 0x18, 0x83, 0x7f, 0x54, 0x76, 0x87, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe, 0x17, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tree_title_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x1,0x3,0x0,0x0,0x0,0x25,0x3d,0x6d,0x22,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0x25,0x23,0x25,0x4c,0x4a,0x4e,0x1,0xf9,0x98,0x2e,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1,0xff,0x2,0x2d,0xde,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xc,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x20,0xd,0x0,0x0,0x0,0x30,0x0,0x1,0xc7,0xaa,0x85,0x8e,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tree_title_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x1d, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x64, 0x60, 0x60, 0x30, 0x62, 0xa0, 0x0, 0x30, 0x51, 0xa2, 0x79, 0xd4, 0x80, 0x51, 0x3, 0x46, 0xd, 0x18, 0x4c, 0x6, 0x0, 0x0, 0xf, 0x77, 0x0, 0x52, 0xbd, 0x9b, 0x8a, 0x28, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char tree_title_pressed_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x1,0x3,0x0,0x0,0x0,0x25,0x3d,0x6d,0x22,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0x36,0x34,0x36,0x4c,0x4a,0x4e,0x14,0xd7,0x5b,0xf8,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1,0xff,0x2,0x2d,0xde,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xc,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x20,0xd,0x0,0x0,0x0,0x30,0x0,0x1,0xc7,0xaa,0x85,0x8e,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char tree_title_pressed_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x1d, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x64, 0x60, 0x60, 0x70, 0x63, 0xa0, 0x0, 0x30, 0x51, 0xa2, 0x79, 0xd4, 0x80, 0x51, 0x3, 0x46, 0xd, 0x18, 0x4c, 0x6, 0x0, 0x0, 0x60, 0x67, 0x0, 0x66, 0xf1, 0xae, 0x47, 0x48, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char unchecked_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x36,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x38,0x37,0x40,0x20,0x20,0x24,0x20,0x20,0x24,0x38,0x36,0x40,0x20,0x20,0x25,0x1e,0x1e,0x22,0x1f,0x1f,0x23,0x20,0x20,0x24,0x22,0x22,0x27,0x23,0x23,0x28,0x25,0x25,0x2a,0xff,0xff,0xff,0xf7,0x93,0x46,0x7a,0x0,0x0,0x0,0xb,0x74,0x52,0x4e,0x53,0x0,0x7,0x27,0x50,0x66,0x68,0xb4,0xfa,0xfb,0xb4,0xfa,0xa4,0x7f,0xe1,0x5a,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x11,0xe2,0xb5,0x3d,0xba,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x53,0x49,0x44,0x41,0x54,0x18,0xd3,0xb5,0xcf,0xc1,0x12,0x80,0x20,0x8,0x45,0x51,0x5,0x14,0xd,0x5,0xff,0xff,0x6b,0x23,0x27,0x67,0x9a,0x6c,0xdb,0x5d,0x9e,0xd,0x8f,0x10,0xb6,0x22,0x20,0xa5,0x19,0x21,0x44,0x7,0xc8,0x2c,0x6d,0x26,0x9c,0xc1,0x1,0xb9,0xab,0xcd,0xb4,0x33,0x3a,0x90,0xe8,0xb8,0x53,0x21,0x87,0xd4,0x6c,0x81,0xb5,0xf4,0x17,0x6c,0x67,0x9f,0xc3,0xca,0x35,0xc,0x6a,0x59,0xd3,0x8f,0xa,0x5f,0xcf,0xbd,0x3a,0x1,0x93,0xe2,0x8,0xa4,0xb1,0xeb,0xd3,0x56,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char unchecked_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x9c, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0x52, 0xbb, 0xd, 0xc2, 0x30, 0x10, 0x7d, 0x2f, 0xc7, 0xa, 0x84, 0xd6, 0x52, 0xa4, 0x2c, 0xc1, 0x2e, 0xac, 0x41, 0x36, 0xf0, 0x1e, 0x59, 0x86, 0x1d, 0x90, 0x2c, 0x25, 0x65, 0xb2, 0x83, 0xf5, 0x68, 0x30, 0x8a, 0x48, 0x1c, 0x8b, 0x6, 0x1a, 0x5e, 0x75, 0x77, 0xef, 0x73, 0x57, 0x1c, 0xf0, 0x6b, 0x30, 0x15, 0xe3, 0x38, 0x9e, 0x25, 0x75, 0x0, 0x8e, 0xbb, 0x6, 0x72, 0x96, 0xe4, 0x9d, 0x73, 0x37, 0x0, 0xa8, 0x16, 0xdc, 0xb5, 0x64, 0x6, 0x0, 0x49, 0x35, 0xc9, 0x2e, 0xf5, 0x87, 0x25, 0x1, 0x0, 0x31, 0xc6, 0x4b, 0xd3, 0x34, 0xf7, 0x2d, 0x73, 0x8, 0xa1, 0x35, 0xb3, 0x5e, 0xd2, 0x29, 0xcd, 0xaa, 0x77, 0x51, 0xce, 0x9c, 0xe3, 0x56, 0x1, 0x9f, 0xe2, 0x1f, 0xb0, 0x11, 0x10, 0x42, 0x68, 0x73, 0xe2, 0x2d, 0xee, 0xf5, 0x7, 0xcf, 0xf, 0xab, 0xcd, 0xac, 0x1f, 0x86, 0x61, 0x77, 0x2b, 0xc9, 0x69, 0x75, 0x81, 0x24, 0x4f, 0x72, 0x2e, 0x9d, 0x4c, 0x72, 0x32, 0x33, 0x5f, 0xd2, 0x7d, 0xf, 0xf, 0x38, 0xc7, 0x34, 0x81, 0x1c, 0x84, 0x6d, 0x22, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char updown_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x2b,0x8a,0x3e,0x7d,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0xff,0x0,0xff,0x0,0xff,0xa0,0xbd,0xa7,0x93,0x0,0x0,0x0,0xa6,0x49,0x44,0x41,0x54,0x28,0x91,0xa5,0x90,0x21,0xe,0xc2,0x50,0x10,0x44,0xdf,0x27,0x9b,0x10,0x2e,0xc0,0x9,0xd6,0x81,0xe3,0x6,0xe0,0xa0,0xd7,0x2d,0xae,0x18,0x24,0x95,0xc5,0x7d,0x51,0xdd,0xb,0x60,0xf6,0x67,0x31,0xfb,0x49,0xc1,0x20,0x3a,0x6a,0x93,0x99,0x9d,0xcc,0xc,0x2c,0x45,0xaa,0x47,0xce,0x79,0x2b,0x22,0x2d,0x80,0x99,0x5d,0x54,0x75,0xfa,0x8,0x82,0xec,0x80,0x7d,0xe8,0x7,0x33,0x3b,0xa9,0xea,0x94,0x82,0xbc,0x1,0x3b,0x60,0x8,0xc1,0x1e,0x78,0x9a,0xd9,0x51,0xc2,0x76,0x57,0xbf,0x0,0xaa,0x9b,0x88,0xb4,0x2b,0x77,0x7f,0x1,0x7d,0xb5,0x54,0xd5,0x29,0x84,0x7d,0x70,0x4b,0x6b,0x8e,0xe3,0x78,0x7,0x36,0x66,0x76,0xae,0xd5,0x22,0xf8,0x15,0x78,0x89,0xbb,0xaf,0x53,0x4a,0x7,0x11,0xe9,0x72,0xce,0x5f,0x21,0xdd,0xfd,0x21,0xa5,0x94,0x66,0x96,0xba,0x9b,0xd5,0x1c,0x4a,0x29,0xcd,0xff,0xa1,0x7e,0xa6,0xbe,0xc6,0xd4,0x9f,0x3c,0xcb,0xf1,0x6,0x8e,0x4e,0x65,0x44,0x6f,0x74,0x5c,0xa1,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char updown_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x2b, 0x8a, 0x3e, 0x7d, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x8b, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xad, 0x90, 0x31, 0xe, 0xc2, 0x50, 0xc, 0x43, 0x5f, 0x2a, 0x55, 0xcc, 0xbd, 0x2, 0x2c, 0xed, 0xd9, 0x60, 0xe1, 0x24, 0x2c, 0xed, 0xc0, 0x54, 0x6e, 0xf5, 0x27, 0x7a, 0x85, 0xce, 0x9d, 0xcc, 0x80, 0xf3, 0x85, 0x58, 0x18, 0x8a, 0xa5, 0x2c, 0xb1, 0x63, 0xc5, 0x86, 0xbf, 0x41, 0x52, 0x27, 0x69, 0xf6, 0x74, 0xb9, 0x8f, 0x24, 0x81, 0x11, 0x38, 0x79, 0xff, 0x4, 0x2e, 0x11, 0xb1, 0x86, 0xc9, 0x9, 0x38, 0x9a, 0xc0, 0xc2, 0x5, 0x38, 0x87, 0xa4, 0x19, 0x18, 0xf2, 0xca, 0x82, 0x74, 0x2b, 0xd, 0xb0, 0x1, 0xa5, 0x5a, 0x46, 0xac, 0x16, 0x16, 0x73, 0x3b, 0x11, 0x92, 0xee, 0xc0, 0x1, 0xb8, 0xda, 0x3e, 0x53, 0xdd, 0x80, 0xad, 0x1, 0x5a, 0xa0, 0x7, 0x46, 0x77, 0x91, 0x91, 0x7b, 0xa0, 0x8d, 0xaf, 0xe, 0x3e, 0x63, 0xbe, 0xbb, 0xf8, 0x55, 0x54, 0x7d, 0xc6, 0xf6, 0xf, 0x4f, 0xad, 0x7a, 0x3f, 0x5e, 0x1d, 0x33, 0x50, 0xfd, 0xb1, 0xf2, 0xd7, 0xa2, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char vseparator_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x2,0x3,0x0,0x0,0x0,0xb9,0x61,0x56,0x18,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0xc,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x73,0x9b,0xaa,0xce,0xdc,0xe1,0xff,0xff,0xff,0x64,0x6c,0x1,0xd2,0x0,0x0,0x0,0x3,0x74,0x52,0x4e,0x53,0x0,0xb3,0xb3,0x67,0xf6,0xdb,0x93,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x3,0x11,0xc,0x4c,0xf2,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x10,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x80,0x81,0xac,0x95,0xc,0x48,0x0,0x0,0xe,0x79,0x1,0x14,0xa1,0xc9,0x59,0x2,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char vseparator_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x63, 0x60, 0x18, 0x5, 0xc, 0xc, 0xc, 0xc, 0x0, 0x1, 0x8, 0x0, 0x1, 0x7d, 0x41, 0xa5, 0xce, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char vslider_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x54,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x4d,0x4b,0x59,0x34,0x33,0x3a,0x2d,0x2c,0x32,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x4d,0x4b,0x59,0x3f,0x3e,0x49,0x2a,0x29,0x2f,0x20,0x20,0x24,0x3f,0x3e,0x49,0x3f,0x3e,0x49,0x1f,0x1f,0x24,0x40,0x3e,0x4a,0x20,0x20,0x24,0x34,0x33,0x3a,0x20,0x20,0x25,0x22,0x22,0x27,0x23,0x23,0x28,0x25,0x25,0x2a,0x1e,0x1e,0x23,0x23,0x23,0x27,0x2d,0x2c,0x32,0x1f,0x1f,0x23,0xff,0xff,0xff,0x3,0x35,0xf1,0x5f,0x0,0x0,0x0,0x13,0x74,0x52,0x4e,0x53,0x0,0x0,0x0,0x0,0x4,0x1a,0x40,0x5d,0x19,0x28,0x96,0xf0,0xfd,0x94,0x95,0xfc,0x93,0xfc,0xc0,0x0,0xb4,0xa,0x5f,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1b,0x2,0x60,0xd4,0xa4,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x64,0x49,0x44,0x41,0x54,0x18,0xd3,0x9d,0xcf,0x39,0x2,0x80,0x20,0x10,0x3,0xc0,0xe5,0x90,0x43,0x50,0x94,0x1b,0xfe,0xff,0x50,0x5,0x69,0x94,0xce,0x94,0x53,0xec,0x26,0x0,0x0,0x88,0x2e,0x8c,0x73,0x26,0x28,0x82,0x1e,0x44,0xe5,0xaa,0xb4,0x56,0x9b,0x1c,0x82,0xc4,0x6e,0x9c,0xf7,0xce,0x1c,0x62,0x0,0x53,0x2e,0xc4,0x18,0x9c,0x62,0x3,0xb8,0xf6,0xf1,0x8e,0x3f,0xf9,0x3,0xd8,0xa6,0xdc,0x20,0x27,0x8b,0x3b,0x90,0x52,0x43,0x83,0x50,0xb,0xf9,0xb,0xd3,0xd1,0xe9,0xed,0x5c,0x6c,0xaa,0xfe,0x1d,0xf7,0x9e,0x7f,0x1,0x89,0x5c,0xa,0x6b,0x1f,0xe5,0xca,0x60,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char vslider_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x69, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0xd3, 0xa1, 0xe, 0x83, 0x40, 0x14, 0x5, 0xd1, 0x3, 0xa4, 0xc1, 0xa0, 0x30, 0x4d, 0xe8, 0xff, 0xff, 0x1a, 0x18, 0xc0, 0x80, 0x6b, 0xd2, 0x62, 0x56, 0x11, 0x1e, 0xd9, 0x4, 0x83, 0xe0, 0xba, 0x9d, 0x37, 0x19, 0xb7, 0x5c, 0x5c, 0x71, 0xc2, 0x3b, 0xb4, 0xe9, 0x3d, 0xa3, 0xc7, 0x7f, 0x2f, 0x56, 0x41, 0xe0, 0x83, 0x77, 0xba, 0x57, 0x68, 0x50, 0x62, 0xd9, 0x8b, 0x65, 0x10, 0x68, 0x33, 0x59, 0x18, 0x78, 0x65, 0xb2, 0x30, 0x90, 0xbd, 0x27, 0x70, 0xe7, 0xc0, 0x37, 0x93, 0x85, 0x81, 0xf9, 0x80, 0x4d, 0x47, 0x62, 0xf4, 0x17, 0xd6, 0x14, 0xaf, 0xf1, 0xc3, 0x88, 0x21, 0x70, 0xaf, 0x6d, 0x3, 0x2b, 0xaa, 0xc, 0x24, 0xe2, 0x1d, 0xb9, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char vslider_grabber_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x4,0x0,0x0,0x0,0xb5,0xfa,0x37,0xea,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xb7,0xff,0x88,0x5,0x1d,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe1,0x1,0x12,0x1,0x36,0x8,0x50,0xb9,0xa7,0x53,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0xf6,0x49,0x44,0x41,0x54,0x28,0xcf,0xbd,0x90,0xb1,0x4a,0x42,0x51,0x0,0x86,0xbf,0x73,0x8e,0x71,0xe5,0x9a,0x5c,0x41,0xd0,0x66,0x6b,0x33,0x1c,0x7c,0x80,0xa0,0xa5,0x17,0x8,0xa2,0x2d,0x84,0xf0,0x1,0xa2,0x25,0xf1,0x9,0x9a,0x1c,0xda,0x5b,0xb2,0x47,0xa8,0xa5,0xc1,0xa0,0x51,0x88,0xa2,0x29,0xa,0xc1,0x84,0x8,0x43,0xf4,0x96,0x17,0xcf,0xed,0xde,0x73,0x9c,0xcc,0x5c,0xda,0xea,0x9f,0x3f,0xfe,0x9f,0xef,0x87,0x3f,0x8f,0x0,0x40,0xe1,0xe2,0x91,0x42,0x10,0x32,0xe6,0x3,0x8d,0xc1,0xce,0x1,0x45,0xb6,0xba,0xbb,0xba,0xed,0x95,0x8c,0xd0,0x7d,0xff,0xe1,0xee,0xe2,0xb6,0xdd,0x79,0x61,0xc4,0xd7,0xc,0x48,0x57,0x2b,0xeb,0xb5,0x28,0xaf,0x1,0xc5,0x12,0x4e,0xac,0x7b,0x6f,0x57,0x27,0x8d,0xcf,0xe,0x1,0x56,0x1,0xb9,0x9d,0xba,0x28,0x6,0x18,0xc,0x31,0x21,0x5a,0xda,0x4c,0xb6,0xbc,0xb9,0x35,0x7c,0xea,0xbd,0x13,0x4a,0x20,0xe5,0x95,0xf4,0x6c,0x12,0x30,0x84,0xf8,0x44,0x6b,0xfb,0xcd,0x83,0x3d,0x1c,0xf9,0x8b,0x80,0x4a,0xba,0x88,0x4,0x30,0x1e,0xdd,0x3b,0x1b,0xf1,0x77,0x87,0x24,0x81,0x8b,0x79,0x3e,0x3b,0x6a,0x5d,0x33,0x51,0x80,0x2d,0x38,0x2b,0x65,0xb5,0x6c,0x91,0x28,0x92,0xa4,0xad,0xec,0x76,0xcf,0x8f,0xf,0x1f,0xdb,0xc,0x31,0xb,0x9a,0xb1,0xd0,0x3,0xfb,0xda,0x3a,0xbd,0xbc,0x89,0xfa,0xf8,0x73,0xcd,0x9f,0x47,0x45,0x4,0xf8,0x4,0x18,0xfe,0x2f,0x53,0x8,0x62,0x5c,0xcf,0x1f,0x5f,0xcb,0x2c,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char vslider_grabber_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xfd, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xad, 0x92, 0x31, 0x4e, 0xc3, 0x30, 0x18, 0x46, 0x9f, 0x7f, 0xc9, 0xde, 0x60, 0x83, 0xb, 0x50, 0xc8, 0x10, 0x45, 0x96, 0x72, 0x8d, 0x76, 0x84, 0x1e, 0x20, 0x7b, 0xb9, 0x4c, 0x66, 0xe, 0x80, 0x54, 0xb1, 0xb4, 0x5c, 0x23, 0x52, 0x32, 0x56, 0xf4, 0x2, 0x85, 0x85, 0x76, 0x8c, 0x94, 0x9f, 0x25, 0x89, 0xa2, 0x94, 0x56, 0xb5, 0xe0, 0x1b, 0x3f, 0xe9, 0xbd, 0xcf, 0xb6, 0xc, 0x7f, 0x8c, 0x19, 0x17, 0x65, 0x59, 0xde, 0x8a, 0xc8, 0x33, 0x30, 0x5, 0xee, 0x1, 0x54, 0x75, 0x3, 0xbc, 0xab, 0x6a, 0xee, 0xbd, 0xdf, 0x9d, 0x14, 0x54, 0x55, 0xf5, 0x64, 0x8c, 0x79, 0x1, 0xae, 0x4e, 0xc, 0x1e, 0x44, 0x24, 0x8b, 0xe3, 0x78, 0x79, 0x24, 0x68, 0xe1, 0xd7, 0xdf, 0x4e, 0x35, 0x8a, 0x8a, 0xc8, 0xbc, 0x93, 0x98, 0xc1, 0xb1, 0x3f, 0xce, 0x2c, 0x8f, 0xb3, 0xaf, 0xeb, 0x7a, 0x92, 0xa6, 0xe9, 0xa7, 0x0, 0xb4, 0x77, 0xbe, 0x14, 0x6, 0xb8, 0x76, 0xce, 0x2d, 0x0, 0xa4, 0x2d, 0x66, 0x1, 0x30, 0x0, 0x4d, 0xd3, 0xcc, 0x86, 0x82, 0xbb, 0x50, 0x81, 0x31, 0x66, 0x32, 0x14, 0x68, 0xa8, 0xa0, 0x63, 0x3a, 0xc1, 0x36, 0x98, 0x56, 0xdd, 0xf6, 0x2, 0x55, 0x5d, 0x87, 0xa, 0x44, 0x64, 0x35, 0x14, 0xe4, 0xc0, 0x21, 0x80, 0xff, 0xb6, 0xd6, 0xe6, 0xbd, 0xc0, 0x7b, 0xbf, 0x13, 0x91, 0x8c, 0xcb, 0xde, 0x42, 0x81, 0x2c, 0x8a, 0xa2, 0xaf, 0x5e, 0x0, 0x10, 0xc7, 0xf1, 0x52, 0x44, 0xe6, 0xc0, 0xfe, 0xdc, 0x32, 0xf0, 0x98, 0x24, 0xc9, 0x5b, 0x57, 0x1c, 0x7d, 0xdb, 0xa2, 0x28, 0x6e, 0x9c, 0x73, 0xb, 0x55, 0x9d, 0x2, 0xf, 0x6d, 0xbd, 0x31, 0xc6, 0xac, 0xad, 0xb5, 0x79, 0xb7, 0xfc, 0x6f, 0xf9, 0x1, 0x3c, 0x90, 0x4c, 0xcc, 0x74, 0x25, 0x3a, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char vslider_grabber_hl_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,0x0,0x0,0x0,0xc3,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17,0x2a,0x29,0x3a,0x69,0x69,0x5b,0xa6,0xa5,0x61,0xb3,0xbc,0x63,0xb7,0xc8,0x65,0xbb,0xca,0x60,0xaf,0xb1,0x48,0x83,0x83,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xf,0xf,0x55,0x9b,0x9a,0x60,0xb2,0xbd,0x5e,0xb1,0xcd,0x61,0xb3,0xc2,0x0,0x0,0x0,0x27,0x48,0x47,0x62,0xb4,0xbd,0x51,0x93,0x92,0x68,0xc0,0xcf,0x0,0x0,0x0,0x56,0x9d,0x9c,0x68,0xc1,0xcf,0x2d,0x52,0x52,0x63,0xb7,0xbf,0x52,0x96,0x95,0x62,0xb3,0xbf,0x5e,0xb0,0xcd,0x0,0x0,0x0,0x3,0x5,0x5,0x36,0x63,0x63,0x63,0xb4,0xb6,0x60,0xb1,0xbc,0x63,0xb7,0xc7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x55,0xa3,0xc8,0x4f,0x98,0xc4,0x4b,0x93,0xc2,0x4c,0x94,0xc2,0x54,0xa2,0xc8,0x5a,0xab,0xcb,0x4e,0x97,0xc4,0x49,0x8f,0xc0,0x47,0x8c,0xbf,0x48,0x8e,0xc0,0x52,0x9e,0xc6,0x51,0x9d,0xc6,0x5a,0xac,0xcc,0x53,0x9f,0xc7,0x4d,0x96,0xc3,0x4b,0x92,0xc2,0xff,0xff,0xff,0x76,0xbd,0x27,0x7a,0x0,0x0,0x0,0x1,0x74,0x52,0x4e,0x53,0x0,0x40,0xe6,0xd8,0x66,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x0,0x88,0x5,0x1d,0x48,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe1,0x1,0x12,0x1,0x36,0x11,0x34,0xd2,0xf,0x93,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x48,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0xa0,0x12,0x10,0x14,0xe0,0xe7,0xe3,0x45,0xe2,0x4b,0x9a,0x18,0x1b,0x19,0x1a,0x48,0x88,0x8b,0xc1,0xe4,0x4d,0x2c,0x2d,0x80,0xc0,0xdc,0xcc,0x54,0x6,0x22,0x20,0x60,0x6c,0x1,0x1,0xe6,0x56,0x72,0x68,0x2,0xd6,0x8a,0xa8,0x5a,0x6c,0x94,0x11,0x86,0xda,0xdb,0xd9,0xaa,0xa9,0xaa,0x20,0x59,0xab,0xa3,0xad,0xc5,0x40,0x3d,0x0,0x0,0xbf,0x8e,0xc,0xed,0xed,0xc7,0x67,0x72,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char vslider_grabber_hl_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0xf1, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0xad, 0x92, 0x31, 0x4e, 0x2, 0x61, 0x10, 0x85, 0xbf, 0x37, 0xc6, 0x52, 0x3b, 0xbd, 0x0, 0xe8, 0x65, 0xa0, 0x54, 0xe, 0x40, 0xaf, 0x15, 0x64, 0xa3, 0x85, 0xf9, 0x2b, 0x4d, 0xa4, 0xdc, 0xda, 0x3, 0x98, 0x10, 0x1b, 0xf1, 0x32, 0x44, 0x2e, 0x0, 0x34, 0x42, 0xa9, 0x61, 0x2c, 0xfe, 0xdd, 0x65, 0xb3, 0xa, 0xba, 0xe8, 0xeb, 0x66, 0x92, 0xf7, 0xbd, 0x37, 0xc9, 0xc0, 0x1f, 0xa5, 0xea, 0x22, 0xf8, 0xe0, 0x78, 0xc5, 0xea, 0x12, 0xd4, 0x2, 0x4e, 0xe2, 0xd6, 0xc7, 0x42, 0x2f, 0x42, 0x69, 0x50, 0x7f, 0xba, 0x11, 0x70, 0xe3, 0xf7, 0xe7, 0xc0, 0x3, 0x70, 0xb0, 0x21, 0x70, 0x69, 0x78, 0x37, 0x28, 0x19, 0x7e, 0x1, 0x64, 0xe6, 0xc7, 0xef, 0x5a, 0x55, 0xe4, 0x86, 0x77, 0x72, 0x88, 0xd6, 0xb5, 0xfd, 0x75, 0x4b, 0x72, 0x55, 0x8b, 0x77, 0x3e, 0x9a, 0x77, 0xba, 0x9e, 0x19, 0x40, 0xbc, 0xf9, 0xd7, 0x66, 0x80, 0xc3, 0x7d, 0xf6, 0x2e, 0x0, 0x2c, 0xce, 0xd6, 0xae, 0x61, 0xce, 0xd5, 0x2e, 0x1, 0x68, 0xd4, 0xf7, 0xab, 0x59, 0x2, 0xb8, 0xef, 0xd0, 0xc0, 0xcb, 0xd, 0x26, 0x3b, 0xf8, 0x27, 0x5, 0x40, 0x30, 0xaa, 0x6b, 0x17, 0x7a, 0x2e, 0x1, 0x94, 0x2, 0xcb, 0x1a, 0xfe, 0x37, 0x61, 0x69, 0x1, 0x8, 0xea, 0x4f, 0xd, 0xef, 0x92, 0xdd, 0xf5, 0x83, 0x3c, 0x7e, 0x63, 0x6f, 0x5e, 0x0, 0x22, 0x24, 0x19, 0x1a, 0xde, 0x1, 0x16, 0xdb, 0x92, 0xd, 0x3f, 0xb, 0x4a, 0x9e, 0xd6, 0xa7, 0x54, 0x74, 0xe5, 0xb7, 0x47, 0xf1, 0x49, 0xd4, 0x2, 0x9d, 0x66, 0xa1, 0x63, 0xc1, 0x48, 0x58, 0x9a, 0x27, 0xff, 0x9b, 0x3e, 0x1, 0x5e, 0x62, 0x48, 0x81, 0x2e, 0xbf, 0x88, 0xea, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char vslider_tick_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x4,0x4,0x3,0x0,0x0,0x0,0x75,0x9a,0xa2,0xdf,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x1e,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x81,0xa2,0xad,0x8c,0xac,0xb8,0x38,0x55,0x5f,0x82,0x82,0x82,0x8d,0x8d,0x8d,0x98,0x98,0x98,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xff,0xff,0xff,0xe1,0x56,0x59,0xc8,0x0,0x0,0x0,0x9,0x74,0x52,0x4e,0x53,0x0,0x0,0x0,0x0,0x79,0x79,0x79,0x31,0x1c,0x18,0xed,0xfe,0x2b,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x9,0xf1,0xd9,0xa5,0xec,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x1d,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x80,0x1,0xd7,0x44,0x5,0x6,0x6,0xe6,0x92,0x30,0x86,0xf2,0x62,0x3,0x20,0xa3,0xbd,0x1c,0x2e,0x3,0x0,0x3f,0xce,0x3,0xaf,0xf9,0x94,0x50,0x96,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char vslider_tick_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x4, 0x4, 0x3, 0x0, 0x0, 0x0, 0x75, 0x9a, 0xa2, 0xdf, 0x0, 0x0, 0x0, 0x4, 0x67, 0x41, 0x4d, 0x41, 0x0, 0x0, 0xb1, 0x8f, 0xb, 0xfc, 0x61, 0x5, 0x0, 0x0, 0x0, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x0, 0x0, 0x7a, 0x26, 0x0, 0x0, 0x80, 0x84, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, 0x80, 0xe8, 0x0, 0x0, 0x75, 0x30, 0x0, 0x0, 0xea, 0x60, 0x0, 0x0, 0x3a, 0x98, 0x0, 0x0, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x0, 0x0, 0x0, 0x1e, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x81, 0xa2, 0xad, 0x8c, 0xac, 0xb8, 0x38, 0x55, 0x5f, 0x82, 0x82, 0x82, 0x8d, 0x8d, 0x8d, 0x98, 0x98, 0x98, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0xff, 0xff, 0xff, 0xe1, 0x56, 0x59, 0xc8, 0x0, 0x0, 0x0, 0x9, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x0, 0x0, 0x0, 0x79, 0x79, 0x79, 0x31, 0x1c, 0x18, 0xed, 0xfe, 0x2b, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x9, 0xf1, 0xd9, 0xa5, 0xec, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe0, 0x6, 0x16, 0x12, 0x2b, 0x5, 0x39, 0x1a, 0x32, 0x39, 0x0, 0x0, 0x0, 0x1d, 0x49, 0x44, 0x41, 0x54, 0x8, 0xd7, 0x63, 0x60, 0x80, 0x1, 0xd7, 0x44, 0x5, 0x6, 0x6, 0xe6, 0x92, 0x30, 0x86, 0xf2, 0x62, 0x3, 0x20, 0xa3, 0xbd, 0x1c, 0x2e, 0x3, 0x0, 0x3f, 0xce, 0x3, 0xaf, 0xf9, 0x94, 0x50, 0x96, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xc9, 0xad, 0xc8, 0x52, 0x0, 0x0, 0x0, 0x25, 0x74, 0x45, 0x58, 0x74, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x32, 0x54, 0x32, 0x30, 0x3a, 0x33, 0x39, 0x3a, 0x32, 0x36, 0x2b, 0x30, 0x32, 0x3a, 0x30, 0x30, 0xb8, 0xf0, 0x70, 0xee, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char vsplit_bg_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x1,0x3,0x0,0x0,0x0,0xfe,0xc1,0x2c,0xc8,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0x27,0x27,0x29,0xff,0xff,0xff,0x11,0xab,0xb9,0xf3,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x1,0xff,0x2,0x2d,0xde,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0xb,0x49,0x44,0x41,0x54,0x8,0xd7,0x63,0x60,0x40,0x5,0x0,0x0,0x10,0x0,0x1,0xa1,0xc5,0x21,0xc1,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char vsplit_bg_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x15, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x63, 0x64, 0x60, 0x60, 0x90, 0x64, 0xc0, 0x3, 0x98, 0xf0, 0x49, 0xe, 0x1f, 0x5, 0x0, 0x22, 0xac, 0x0, 0x29, 0x2d, 0xd1, 0x16, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char vsplitter_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x8,0x8,0x0,0x0,0x0,0x0,0x6c,0x9,0xa6,0x3,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x26,0x0,0x0,0x80,0x84,0x0,0x0,0xfa,0x0,0x0,0x0,0x80,0xe8,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x70,0x9c,0xba,0x51,0x3c,0x0,0x0,0x0,0x2,0x74,0x52,0x4e,0x53,0x0,0x0,0x76,0x93,0xcd,0x38,0x0,0x0,0x0,0x2,0x62,0x4b,0x47,0x44,0x0,0xff,0x87,0x8f,0xcc,0xbf,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x5,0x39,0x1a,0x32,0x39,0x0,0x0,0x0,0x1f,0x49,0x44,0x41,0x54,0x28,0xcf,0x63,0x60,0xa0,0x10,0x30,0x33,0x2c,0x10,0x3d,0x47,0x9,0x66,0x66,0x10,0xbd,0xf6,0x98,0x22,0x3c,0xe0,0x60,0x18,0x84,0x1,0x0,0x59,0x34,0x6a,0x2d,0x64,0xeb,0x72,0x24,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x63,0x72,0x65,0x61,0x74,0x65,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xc9,0xad,0xc8,0x52,0x0,0x0,0x0,0x25,0x74,0x45,0x58,0x74,0x64,0x61,0x74,0x65,0x3a,0x6d,0x6f,0x64,0x69,0x66,0x79,0x0,0x32,0x30,0x31,0x36,0x2d,0x30,0x36,0x2d,0x32,0x32,0x54,0x32,0x30,0x3a,0x33,0x39,0x3a,0x32,0x36,0x2b,0x30,0x32,0x3a,0x30,0x30,0xb8,0xf0,0x70,0xee,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char vsplitter_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0x49, 0x62, 0xf9, 0xdf, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x2f, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0xed, 0xce, 0x41, 0x1, 0x0, 0x20, 0x0, 0x2, 0xb1, 0xc3, 0x14, 0x86, 0x32, 0xae, 0xa1, 0x6c, 0x81, 0x2d, 0xe4, 0x21, 0x4b, 0x30, 0xa8, 0xfa, 0x9a, 0x0, 0x6c, 0x2f, 0x60, 0x86, 0x2f, 0xaf, 0x1d, 0x49, 0x7b, 0xa4, 0x17, 0x55, 0x15, 0x75, 0x1, 0x7e, 0xa6, 0x5, 0x4, 0x90, 0x92, 0x89, 0x73, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-static const unsigned char window_resizer_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x19,0x11,0x33,0x13,0xaa,0xc0,0xf,0x5f,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x2f,0x49,0x44,0x41,0x54,0x38,0xcb,0x63,0x60,0x18,0x5,0x24,0x81,0x17,0x2f,0x5e,0xf4,0xa3,0x8b,0x31,0x91,0xa2,0xb9,0xb9,0xb9,0x99,0x7c,0x9b,0xb3,0xb3,0xb3,0xfb,0x87,0x81,0x66,0x6c,0x81,0x48,0x92,0x66,0xa2,0x5c,0x43,0x91,0xe6,0x11,0xa,0x0,0x73,0x5b,0x34,0x19,0x10,0xa0,0xb6,0x7d,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+static const unsigned char window_resizer_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, 0x61, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x3f, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x63, 0x60, 0x18, 0x32, 0xe0, 0xff, 0xff, 0xff, 0x29, 0x14, 0x69, 0xfe, 0xff, 0xff, 0xff, 0x9, 0x6c, 0x72, 0x4c, 0x44, 0xda, 0x8c, 0xd3, 0x76, 0xbc, 0x6, 0x10, 0xd2, 0x8c, 0xd7, 0x0, 0x62, 0x34, 0xe3, 0x34, 0x80, 0x58, 0xcd, 0x58, 0xd, 0x20, 0x45, 0x33, 0x86, 0x1, 0xa4, 0x6a, 0x46, 0x31, 0x80, 0x1c, 0xcd, 0xa3, 0x80, 0x4a, 0x0, 0x0, 0x6, 0xc5, 0x24, 0xf9, 0xe8, 0x3d, 0x88, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
-
-
-
-
+// shaders block
diff --git a/scene/resources/default_theme/toggle_off.png b/scene/resources/default_theme/toggle_off.png
index 71cd64b001..5537d00a4a 100644
--- a/scene/resources/default_theme/toggle_off.png
+++ b/scene/resources/default_theme/toggle_off.png
Binary files differ
diff --git a/scene/resources/default_theme/toggle_on.png b/scene/resources/default_theme/toggle_on.png
index 6ea1b589c7..77e4601205 100644
--- a/scene/resources/default_theme/toggle_on.png
+++ b/scene/resources/default_theme/toggle_on.png
Binary files differ
diff --git a/scene/resources/default_theme/tool_button_pressed.png b/scene/resources/default_theme/tool_button_pressed.png
deleted file mode 100644
index bcf70b486d..0000000000
--- a/scene/resources/default_theme/tool_button_pressed.png
+++ /dev/null
Binary files differ
diff --git a/scene/resources/default_theme/tooltip_bg.png b/scene/resources/default_theme/tooltip_bg.png
index eca0675a98..7ca3567788 100644
--- a/scene/resources/default_theme/tooltip_bg.png
+++ b/scene/resources/default_theme/tooltip_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/tree_bg.png b/scene/resources/default_theme/tree_bg.png
index 839a6a272a..0be4f628a9 100644
--- a/scene/resources/default_theme/tree_bg.png
+++ b/scene/resources/default_theme/tree_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/tree_bg_focus.png b/scene/resources/default_theme/tree_bg_focus.png
deleted file mode 100644
index 692cf71926..0000000000
--- a/scene/resources/default_theme/tree_bg_focus.png
+++ /dev/null
Binary files differ
diff --git a/scene/resources/default_theme/tree_title.png b/scene/resources/default_theme/tree_title.png
index b0ddcffbbe..7f81acd89e 100644
--- a/scene/resources/default_theme/tree_title.png
+++ b/scene/resources/default_theme/tree_title.png
Binary files differ
diff --git a/scene/resources/default_theme/tree_title_pressed.png b/scene/resources/default_theme/tree_title_pressed.png
index 746d10039e..b09604015b 100644
--- a/scene/resources/default_theme/tree_title_pressed.png
+++ b/scene/resources/default_theme/tree_title_pressed.png
Binary files differ
diff --git a/scene/resources/default_theme/unchecked.png b/scene/resources/default_theme/unchecked.png
index d6f790cbc2..8341cdc643 100644
--- a/scene/resources/default_theme/unchecked.png
+++ b/scene/resources/default_theme/unchecked.png
Binary files differ
diff --git a/scene/resources/default_theme/updown.png b/scene/resources/default_theme/updown.png
index 916284a3cf..efcb04fde6 100644
--- a/scene/resources/default_theme/updown.png
+++ b/scene/resources/default_theme/updown.png
Binary files differ
diff --git a/scene/resources/default_theme/vseparator.png b/scene/resources/default_theme/vseparator.png
index 498768c05b..88165ea6b2 100644
--- a/scene/resources/default_theme/vseparator.png
+++ b/scene/resources/default_theme/vseparator.png
Binary files differ
diff --git a/scene/resources/default_theme/vslider_bg.png b/scene/resources/default_theme/vslider_bg.png
index 8d9ead3c5a..b88582ba36 100644
--- a/scene/resources/default_theme/vslider_bg.png
+++ b/scene/resources/default_theme/vslider_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/vslider_grabber.png b/scene/resources/default_theme/vslider_grabber.png
index afc490be45..c8be897e07 100644
--- a/scene/resources/default_theme/vslider_grabber.png
+++ b/scene/resources/default_theme/vslider_grabber.png
Binary files differ
diff --git a/scene/resources/default_theme/vslider_grabber_hl.png b/scene/resources/default_theme/vslider_grabber_hl.png
index 548972e115..1639776a28 100644
--- a/scene/resources/default_theme/vslider_grabber_hl.png
+++ b/scene/resources/default_theme/vslider_grabber_hl.png
Binary files differ
diff --git a/scene/resources/default_theme/vsplit_bg.png b/scene/resources/default_theme/vsplit_bg.png
index 7dd1d48b29..0c29b1e35c 100644
--- a/scene/resources/default_theme/vsplit_bg.png
+++ b/scene/resources/default_theme/vsplit_bg.png
Binary files differ
diff --git a/scene/resources/default_theme/vsplitter.png b/scene/resources/default_theme/vsplitter.png
index ec5542bf69..56fb20bc3f 100644
--- a/scene/resources/default_theme/vsplitter.png
+++ b/scene/resources/default_theme/vsplitter.png
Binary files differ
diff --git a/scene/resources/default_theme/window_resizer.png b/scene/resources/default_theme/window_resizer.png
index ed51968c4e..baa3f30e5b 100644
--- a/scene/resources/default_theme/window_resizer.png
+++ b/scene/resources/default_theme/window_resizer.png
Binary files differ
diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp
index 6a5c4b97fc..d2848076a0 100644
--- a/scene/resources/dynamic_font.cpp
+++ b/scene/resources/dynamic_font.cpp
@@ -569,7 +569,7 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
//blit to image and texture
{
- Image img(tex.texture_size, tex.texture_size, 0, Image::FORMAT_LA8, tex.imgdata);
+ Ref<Image> img = memnew(Image(tex.texture_size, tex.texture_size, 0, Image::FORMAT_LA8, tex.imgdata));
if (tex.texture.is_null()) {
tex.texture.instance();
diff --git a/scene/resources/dynamic_font_stb.cpp b/scene/resources/dynamic_font_stb.cpp
index 0a784c6496..397349bbf9 100644
--- a/scene/resources/dynamic_font_stb.cpp
+++ b/scene/resources/dynamic_font_stb.cpp
@@ -33,7 +33,6 @@
#define STB_TRUETYPE_IMPLEMENTATION
#include "os/file_access.h"
-#include "stb_truetype.h"
void DynamicFontData::lock() {
diff --git a/scene/resources/dynamic_font_stb.h b/scene/resources/dynamic_font_stb.h
index 3862607ab5..a2c081a925 100644
--- a/scene/resources/dynamic_font_stb.h
+++ b/scene/resources/dynamic_font_stb.h
@@ -34,7 +34,8 @@
#include "font.h"
#include "io/resource_loader.h"
-#include "stb_truetype.h"
+
+#include "thirdparty/misc/stb_truetype.h"
class DynamicFontAtSize;
class DynamicFont;
diff --git a/scene/resources/sky_box.cpp b/scene/resources/sky_box.cpp
index 241675569f..2fd074de0f 100644
--- a/scene/resources/sky_box.cpp
+++ b/scene/resources/sky_box.cpp
@@ -88,24 +88,25 @@ void ImageSkyBox::set_image_path(ImagePath p_image, const String &p_path) {
if (all_ok) {
- Image images[IMAGE_PATH_MAX];
+ Ref<Image> images[IMAGE_PATH_MAX];
int w = 0, h = 0;
Image::Format format;
for (int i = 0; i < IMAGE_PATH_MAX; i++) {
- Error err = ImageLoader::load_image(image_path[i], &images[i]);
+ images[i].instance();
+ Error err = ImageLoader::load_image(image_path[i], images[i]);
if (err) {
ERR_PRINTS("Error loading image for skybox: " + image_path[i]);
return;
}
if (i == 0) {
- w = images[0].get_width();
- h = images[0].get_height();
- format = images[0].get_format();
+ w = images[0]->get_width();
+ h = images[0]->get_height();
+ format = images[0]->get_format();
} else {
- if (images[i].get_width() != w || images[i].get_height() != h || images[i].get_format() != format) {
- ERR_PRINTS("Image size mismatch (" + itos(images[i].get_width()) + "," + itos(images[i].get_height()) + ":" + Image::get_format_name(images[i].get_format()) + " when it should be " + itos(w) + "," + itos(h) + ":" + Image::get_format_name(format) + "): " + image_path[i]);
+ if (images[i]->get_width() != w || images[i]->get_height() != h || images[i]->get_format() != format) {
+ ERR_PRINTS("Image size mismatch (" + itos(images[i]->get_width()) + "," + itos(images[i]->get_height()) + ":" + Image::get_format_name(images[i]->get_format()) + " when it should be " + itos(w) + "," + itos(h) + ":" + Image::get_format_name(format) + "): " + image_path[i]);
return;
}
}
diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp
index 35158806ca..13529c8572 100644
--- a/scene/resources/style_box.cpp
+++ b/scene/resources/style_box.cpp
@@ -138,6 +138,11 @@ void StyleBoxTexture::draw(RID p_canvas_item, const Rect2 &p_rect) const {
texture->get_rect_region(rect, src_rect, rect, src_rect);
+ rect.pos.x -= expand_margin[MARGIN_LEFT];
+ rect.pos.y -= expand_margin[MARGIN_TOP];
+ rect.size.x += expand_margin[MARGIN_LEFT] + expand_margin[MARGIN_RIGHT];
+ rect.size.y += expand_margin[MARGIN_TOP] + expand_margin[MARGIN_BOTTOM];
+
VisualServer::get_singleton()->canvas_item_add_nine_patch(p_canvas_item, rect, src_rect, texture->get_rid(), Vector2(margin[MARGIN_LEFT], margin[MARGIN_TOP]), Vector2(margin[MARGIN_RIGHT], margin[MARGIN_BOTTOM]), VS::NINE_PATCH_STRETCH, VS::NINE_PATCH_STRETCH, draw_center, modulate);
}
diff --git a/scene/resources/surface_tool.h b/scene/resources/surface_tool.h
index 6e52db218d..b143086e11 100644
--- a/scene/resources/surface_tool.h
+++ b/scene/resources/surface_tool.h
@@ -30,9 +30,10 @@
#ifndef SURFACE_TOOL_H
#define SURFACE_TOOL_H
-#include "mikktspace.h"
#include "scene/resources/mesh.h"
+#include "thirdparty/misc/mikktspace.h"
+
class SurfaceTool : public Reference {
GDCLASS(SurfaceTool, Reference);
diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp
index 0889306bad..ff80aa4284 100644
--- a/scene/resources/texture.cpp
+++ b/scene/resources/texture.cpp
@@ -91,9 +91,10 @@ void ImageTexture::reload_from_file() {
return;
uint32_t flags = get_flags();
- Image img;
+ Ref<Image> img;
+ img.instance();
- Error err = ImageLoader::load_image(path, &img);
+ Error err = ImageLoader::load_image(path, img);
ERR_FAIL_COND(err != OK);
create_from_image(img, flags);
@@ -101,7 +102,7 @@ void ImageTexture::reload_from_file() {
bool ImageTexture::_set(const StringName &p_name, const Variant &p_value) {
- if (p_name == "image" && p_value.get_type() == Variant::IMAGE)
+ if (p_name == "image")
create_from_image(p_value, flags);
else if (p_name == "flags")
if (w * h == 0)
@@ -155,7 +156,7 @@ void ImageTexture::_get_property_list(List<PropertyInfo> *p_list) const {
}
p_list->push_back(PropertyInfo(Variant::INT, "flags", PROPERTY_HINT_FLAGS, "Mipmaps,Repeat,Filter,Anisotropic,sRGB,Mirrored Repeat"));
- p_list->push_back(PropertyInfo(Variant::IMAGE, "image", img_hint, String::num(lossy_storage_quality)));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "image", PROPERTY_HINT_RESOURCE_TYPE, "Image"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "size", PROPERTY_HINT_NONE, ""));
p_list->push_back(PropertyInfo(Variant::INT, "storage", PROPERTY_HINT_ENUM, "Uncompressed,Compress Lossy,Compress Lossless"));
p_list->push_back(PropertyInfo(Variant::REAL, "lossy_quality", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"));
@@ -167,8 +168,9 @@ void ImageTexture::_reload_hook(const RID &p_hook) {
if (!path.is_resource_file())
return;
- Image img;
- Error err = ImageLoader::load_image(path, &img);
+ Ref<Image> img;
+ img.instance();
+ Error err = ImageLoader::load_image(path, img);
ERR_FAIL_COND(err != OK);
@@ -185,14 +187,14 @@ void ImageTexture::create(int p_width, int p_height, Image::Format p_format, uin
w = p_width;
h = p_height;
}
-void ImageTexture::create_from_image(const Image &p_image, uint32_t p_flags) {
+void ImageTexture::create_from_image(const Ref<Image> &p_image, uint32_t p_flags) {
flags = p_flags;
- w = p_image.get_width();
- h = p_image.get_height();
- format = p_image.get_format();
+ w = p_image->get_width();
+ h = p_image->get_height();
+ format = p_image->get_format();
- VisualServer::get_singleton()->texture_allocate(texture, p_image.get_width(), p_image.get_height(), p_image.get_format(), p_flags);
+ VisualServer::get_singleton()->texture_allocate(texture, p_image->get_width(), p_image->get_height(), p_image->get_format(), p_flags);
VisualServer::get_singleton()->texture_set_data(texture, p_image);
_change_notify();
}
@@ -220,12 +222,13 @@ Image::Format ImageTexture::get_format() const {
void ImageTexture::load(const String &p_path) {
- Image img;
- img.load(p_path);
+ Ref<Image> img;
+ img.instance();
+ img->load(p_path);
create_from_image(img);
}
-void ImageTexture::set_data(const Image &p_image) {
+void ImageTexture::set_data(const Ref<Image> &p_image) {
VisualServer::get_singleton()->texture_set_data(texture, p_image);
@@ -237,7 +240,7 @@ void ImageTexture::_resource_path_changed() {
String path = get_path();
}
-Image ImageTexture::get_data() const {
+Ref<Image> ImageTexture::get_data() const {
return VisualServer::get_singleton()->texture_get_data(texture);
}
@@ -257,42 +260,6 @@ RID ImageTexture::get_rid() const {
return texture;
}
-void ImageTexture::fix_alpha_edges() {
-
- if (format == Image::FORMAT_RGBA8 /*&& !(flags&FLAG_CUBEMAP)*/) {
-
- Image img = get_data();
- img.fix_alpha_edges();
- set_data(img);
- }
-}
-
-void ImageTexture::premultiply_alpha() {
-
- if (format == Image::FORMAT_RGBA8 /*&& !(flags&FLAG_CUBEMAP)*/) {
-
- Image img = get_data();
- img.premultiply_alpha();
- set_data(img);
- }
-}
-
-void ImageTexture::normal_to_xy() {
-
- Image img = get_data();
- img.normalmap_to_xy();
- create_from_image(img, flags);
-}
-
-void ImageTexture::shrink_x2_and_keep_size() {
-
- Size2 sizeov = get_size();
- Image img = get_data();
- img.resize(img.get_width() / 2, img.get_height() / 2, Image::INTERPOLATE_BILINEAR);
- create_from_image(img, flags);
- set_size_override(sizeov);
-}
-
bool ImageTexture::has_alpha() const {
return (format == Image::FORMAT_LA8 || format == Image::FORMAT_RGBA8);
@@ -358,7 +325,8 @@ float ImageTexture::get_lossy_storage_quality() const {
void ImageTexture::_set_data(Dictionary p_data) {
- Image img = p_data["image"];
+ Ref<Image> img = p_data["image"];
+ ERR_FAIL_COND(!img.is_valid());
uint32_t flags = p_data["flags"];
create_from_image(img, flags);
@@ -372,19 +340,15 @@ void ImageTexture::_set_data(Dictionary p_data) {
void ImageTexture::_bind_methods() {
ClassDB::bind_method(D_METHOD("create", "width", "height", "format", "flags"), &ImageTexture::create, DEFVAL(FLAGS_DEFAULT));
- ClassDB::bind_method(D_METHOD("create_from_image", "image", "flags"), &ImageTexture::create_from_image, DEFVAL(FLAGS_DEFAULT));
+ ClassDB::bind_method(D_METHOD("create_from_image", "image:Image", "flags"), &ImageTexture::create_from_image, DEFVAL(FLAGS_DEFAULT));
ClassDB::bind_method(D_METHOD("get_format"), &ImageTexture::get_format);
ClassDB::bind_method(D_METHOD("load", "path"), &ImageTexture::load);
- ClassDB::bind_method(D_METHOD("set_data", "image"), &ImageTexture::set_data);
- ClassDB::bind_method(D_METHOD("get_data", "cube_side"), &ImageTexture::get_data);
+ ClassDB::bind_method(D_METHOD("set_data", "image:Image"), &ImageTexture::set_data);
+ ClassDB::bind_method(D_METHOD("get_data:Image", "cube_side"), &ImageTexture::get_data);
ClassDB::bind_method(D_METHOD("set_storage", "mode"), &ImageTexture::set_storage);
ClassDB::bind_method(D_METHOD("get_storage"), &ImageTexture::get_storage);
ClassDB::bind_method(D_METHOD("set_lossy_storage_quality", "quality"), &ImageTexture::set_lossy_storage_quality);
ClassDB::bind_method(D_METHOD("get_lossy_storage_quality"), &ImageTexture::get_lossy_storage_quality);
- ClassDB::bind_method(D_METHOD("fix_alpha_edges"), &ImageTexture::fix_alpha_edges);
- ClassDB::bind_method(D_METHOD("premultiply_alpha"), &ImageTexture::premultiply_alpha);
- ClassDB::bind_method(D_METHOD("normal_to_xy"), &ImageTexture::normal_to_xy);
- ClassDB::bind_method(D_METHOD("shrink_x2_and_keep_size"), &ImageTexture::shrink_x2_and_keep_size);
ClassDB::bind_method(D_METHOD("set_size_override", "size"), &ImageTexture::set_size_override);
ClassDB::set_method_flags(get_class_static(), _scs_create("fix_alpha_edges"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR);
@@ -442,7 +406,9 @@ Image::Format StreamTexture::get_format() const {
return format;
}
-Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &flags, Image &image, int p_size_limit) {
+Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &flags, Ref<Image> image, int p_size_limit) {
+
+ ERR_FAIL_COND_V(image.is_null(), ERR_INVALID_PARAMETER);
FileAccess *f = FileAccess::open(p_path, FileAccess::READ);
ERR_FAIL_COND_V(!f, ERR_CANT_OPEN);
@@ -459,25 +425,27 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
flags = f->get_32(); //texture flags!
uint32_t df = f->get_32(); //data format
+ /*
print_line("width: " + itos(tw));
print_line("height: " + itos(th));
print_line("flags: " + itos(flags));
print_line("df: " + itos(df));
+ */
if (request_3d_callback && df & FORMAT_BIT_DETECT_3D) {
- print_line("request detect 3D at " + p_path);
+ //print_line("request detect 3D at " + p_path);
VS::get_singleton()->texture_set_detect_3d_callback(texture, _requested_3d, this);
} else {
- print_line("not requesting detect 3D at " + p_path);
+ //print_line("not requesting detect 3D at " + p_path);
VS::get_singleton()->texture_set_detect_3d_callback(texture, NULL, NULL);
}
if (request_srgb_callback && df & FORMAT_BIT_DETECT_SRGB) {
- print_line("request detect srgb at " + p_path);
+ //print_line("request detect srgb at " + p_path);
VS::get_singleton()->texture_set_detect_srgb_callback(texture, _requested_srgb, this);
} else {
+ //print_line("not requesting detect srgb at " + p_path);
VS::get_singleton()->texture_set_detect_srgb_callback(texture, NULL, NULL);
- print_line("not requesting detect srgb at " + p_path);
}
if (!(df & FORMAT_BIT_STREAM)) {
@@ -493,7 +461,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
uint32_t mipmaps = f->get_32();
uint32_t size = f->get_32();
- print_line("mipmaps: " + itos(mipmaps));
+ //print_line("mipmaps: " + itos(mipmaps));
while (mipmaps > 1 && p_size_limit > 0 && (sw > p_size_limit || sh > p_size_limit)) {
@@ -507,7 +475,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
}
//mipmaps need to be read independently, they will be later combined
- Vector<Image> mipmap_images;
+ Vector<Ref<Image> > mipmap_images;
int total_size = 0;
for (int i = 0; i < mipmaps; i++) {
@@ -523,23 +491,23 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
f->get_buffer(w.ptr(), size);
}
- Image img;
+ Ref<Image> img;
if (df & FORMAT_BIT_LOSSLESS) {
img = Image::lossless_unpacker(pv);
} else {
img = Image::lossy_unpacker(pv);
}
- if (img.empty()) {
+ if (img.is_null()) {
memdelete(f);
- ERR_FAIL_COND_V(img.empty(), ERR_FILE_CORRUPT);
+ ERR_FAIL_COND_V(img->empty(), ERR_FILE_CORRUPT);
}
- total_size += img.get_data().size();
+ total_size += img->get_data().size();
mipmap_images.push_back(img);
}
- print_line("mipmap read total: " + itos(mipmap_images.size()));
+ //print_line("mipmap read total: " + itos(mipmap_images.size()));
memdelete(f); //no longer needed
@@ -558,7 +526,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
int ofs = 0;
for (int i = 0; i < mipmap_images.size(); i++) {
- PoolVector<uint8_t> id = mipmap_images[i].get_data();
+ PoolVector<uint8_t> id = mipmap_images[i]->get_data();
int len = id.size();
PoolVector<uint8_t>::Read r = id.read();
copymem(&w[ofs], r.ptr(), len);
@@ -566,7 +534,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
}
}
- image = Image(sw, sh, true, mipmap_images[0].get_format(), img_data);
+ image->create(sw, sh, true, mipmap_images[0]->get_format(), img_data);
return OK;
}
@@ -589,7 +557,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
memdelete(f);
- image = Image(tw, th, false, format, img_data);
+ image->create(tw, th, false, format, img_data);
return OK;
} else {
@@ -626,7 +594,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
{
PoolVector<uint8_t>::Write w = img_data.write();
int bytes = f->get_buffer(w.ptr(), total_size - ofs);
- print_line("requested read: " + itos(total_size - ofs) + " but got: " + itos(bytes));
+ //print_line("requested read: " + itos(total_size - ofs) + " but got: " + itos(bytes));
memdelete(f);
@@ -635,7 +603,7 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
}
}
- image = Image(sw, sh, true, format, img_data);
+ image->create(sw, sh, true, format, img_data);
return OK;
}
@@ -647,19 +615,20 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla
Error StreamTexture::load(const String &p_path) {
int lw, lh, lflags;
- Image image;
+ Ref<Image> image;
+ image.instance();
Error err = _load_data(p_path, lw, lh, lflags, image);
if (err)
return err;
- VS::get_singleton()->texture_allocate(texture, image.get_width(), image.get_height(), image.get_format(), lflags);
+ VS::get_singleton()->texture_allocate(texture, image->get_width(), image->get_height(), image->get_format(), lflags);
VS::get_singleton()->texture_set_data(texture, image);
w = lw;
h = lh;
flags = lflags;
path_to_file = p_path;
- format = image.get_format();
+ format = image->get_format();
return OK;
}
@@ -705,7 +674,7 @@ bool StreamTexture::has_alpha() const {
return false;
}
-Image StreamTexture::get_data() const {
+Ref<Image> StreamTexture::get_data() const {
return VS::get_singleton()->texture_get_data(texture);
}
@@ -1173,25 +1142,25 @@ uint32_t CubeMap::get_flags() const {
return flags;
}
-void CubeMap::set_side(Side p_side, const Image &p_image) {
+void CubeMap::set_side(Side p_side, const Ref<Image> &p_image) {
- ERR_FAIL_COND(p_image.empty());
+ ERR_FAIL_COND(p_image->empty());
ERR_FAIL_INDEX(p_side, 6);
if (!_is_valid()) {
- format = p_image.get_format();
- w = p_image.get_width();
- h = p_image.get_height();
- VS::get_singleton()->texture_allocate(cubemap, w, h, p_image.get_format(), flags | VS::TEXTURE_FLAG_CUBEMAP);
+ format = p_image->get_format();
+ w = p_image->get_width();
+ h = p_image->get_height();
+ VS::get_singleton()->texture_allocate(cubemap, w, h, p_image->get_format(), flags | VS::TEXTURE_FLAG_CUBEMAP);
}
VS::get_singleton()->texture_set_data(cubemap, p_image, VS::CubeMapSide(p_side));
valid[p_side] = true;
}
-Image CubeMap::get_side(Side p_side) const {
+Ref<Image> CubeMap::get_side(Side p_side) const {
if (!valid[p_side])
- return Image();
+ return Ref<Image>();
return VS::get_singleton()->texture_get_data(cubemap, VS::CubeMapSide(p_side));
}
@@ -1304,14 +1273,12 @@ void CubeMap::_get_property_list(List<PropertyInfo> *p_list) const {
}
p_list->push_back(PropertyInfo(Variant::INT, "flags", PROPERTY_HINT_FLAGS, "Mipmaps,Repeat,Filter"));
- p_list->push_back(PropertyInfo(Variant::IMAGE, "side/left", img_hint, String::num(lossy_storage_quality)));
- p_list->push_back(PropertyInfo(Variant::IMAGE, "side/right", img_hint, String::num(lossy_storage_quality)));
- p_list->push_back(PropertyInfo(Variant::IMAGE, "side/bottom", img_hint, String::num(lossy_storage_quality)));
- p_list->push_back(PropertyInfo(Variant::IMAGE, "side/top", img_hint, String::num(lossy_storage_quality)));
- p_list->push_back(PropertyInfo(Variant::IMAGE, "side/front", img_hint, String::num(lossy_storage_quality)));
- p_list->push_back(PropertyInfo(Variant::IMAGE, "side/back", img_hint, String::num(lossy_storage_quality)));
- p_list->push_back(PropertyInfo(Variant::INT, "storage", PROPERTY_HINT_ENUM, "Uncompressed,Compress Lossy,Compress Lossless", PROPERTY_USAGE_EDITOR));
- p_list->push_back(PropertyInfo(Variant::REAL, "lossy_quality", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "side/left", PROPERTY_HINT_RESOURCE_TYPE, "Image"));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "side/right", PROPERTY_HINT_RESOURCE_TYPE, "Image"));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "side/bottom", PROPERTY_HINT_RESOURCE_TYPE, "Image"));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "side/top", PROPERTY_HINT_RESOURCE_TYPE, "Image"));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "side/front", PROPERTY_HINT_RESOURCE_TYPE, "Image"));
+ p_list->push_back(PropertyInfo(Variant::OBJECT, "side/back", PROPERTY_HINT_RESOURCE_TYPE, "Image"));
}
void CubeMap::_bind_methods() {
@@ -1601,7 +1568,7 @@ void CurveTexture::set_points(const PoolVector<Vector2> &p_points) {
}
}
- Image image(width, 1, false, Image::FORMAT_RF, data);
+ Ref<Image> image = memnew(Image(width, 1, false, Image::FORMAT_RF, data));
VS::get_singleton()->texture_allocate(texture, width, 1, Image::FORMAT_RF, VS::TEXTURE_FLAG_FILTER);
VS::get_singleton()->texture_set_data(texture, image);
@@ -1713,7 +1680,7 @@ void GradientTexture::_update() {
}
}
- Image image(width, 1, false, Image::FORMAT_RGBA8, data);
+ Ref<Image> image = memnew(Image(width, 1, false, Image::FORMAT_RGBA8, data));
VS::get_singleton()->texture_allocate(texture, width, 1, Image::FORMAT_RGBA8, VS::TEXTURE_FLAG_FILTER);
VS::get_singleton()->texture_set_data(texture, image);
diff --git a/scene/resources/texture.h b/scene/resources/texture.h
index a6ea163813..3aa007fa00 100644
--- a/scene/resources/texture.h
+++ b/scene/resources/texture.h
@@ -73,7 +73,7 @@ public:
virtual void draw_rect_region(RID p_canvas_item, const Rect2 &p_rect, const Rect2 &p_src_rect, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false) const;
virtual bool get_rect_region(const Rect2 &p_rect, const Rect2 &p_src_rect, Rect2 &r_rect, Rect2 &r_src_rect) const;
- virtual Image get_data() const { return Image(); }
+ virtual Ref<Image> get_data() const { return Ref<Image>(); }
Texture();
};
@@ -116,14 +116,14 @@ protected:
public:
void create(int p_width, int p_height, Image::Format p_format, uint32_t p_flags = FLAGS_DEFAULT);
- void create_from_image(const Image &p_image, uint32_t p_flags = FLAGS_DEFAULT);
+ void create_from_image(const Ref<Image> &p_image, uint32_t p_flags = FLAGS_DEFAULT);
void set_flags(uint32_t p_flags);
uint32_t get_flags() const;
Image::Format get_format() const;
void load(const String &p_path);
- void set_data(const Image &p_image);
- Image get_data() const;
+ void set_data(const Ref<Image> &p_image);
+ Ref<Image> get_data() const;
int get_width() const;
int get_height() const;
@@ -140,11 +140,6 @@ public:
void set_lossy_storage_quality(float p_lossy_storage_quality);
float get_lossy_storage_quality() const;
- void fix_alpha_edges();
- void premultiply_alpha();
- void normal_to_xy();
- void shrink_x2_and_keep_size();
-
void set_size_override(const Size2 &p_size);
virtual void set_path(const String &p_path, bool p_take_over = false);
@@ -175,7 +170,7 @@ public:
};
private:
- Error _load_data(const String &p_path, int &tw, int &th, int &flags, Image &image, int p_size_limit = 0);
+ Error _load_data(const String &p_path, int &tw, int &th, int &flags, Ref<Image> image, int p_size_limit = 0);
String path_to_file;
RID texture;
Image::Format format;
@@ -212,7 +207,7 @@ public:
virtual bool has_alpha() const;
virtual void set_flags(uint32_t p_flags);
- virtual Image get_data() const;
+ virtual Ref<Image> get_data() const;
StreamTexture();
~StreamTexture();
@@ -370,8 +365,8 @@ protected:
public:
void set_flags(uint32_t p_flags);
uint32_t get_flags() const;
- void set_side(Side p_side, const Image &p_image);
- Image get_side(Side p_side) const;
+ void set_side(Side p_side, const Ref<Image> &p_image);
+ Ref<Image> get_side(Side p_side) const;
Image::Format get_format() const;
int get_width() const;
diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp
index f3bba4ae90..095e66ed37 100644
--- a/servers/audio_server.cpp
+++ b/servers/audio_server.cpp
@@ -1012,6 +1012,7 @@ AudioServer::AudioServer() {
AudioServer::~AudioServer() {
memdelete(audio_data_lock);
+ singleton = NULL;
}
/////////////////////////////////
diff --git a/servers/physics/body_sw.cpp b/servers/physics/body_sw.cpp
index 9def425f28..715f93c1c1 100644
--- a/servers/physics/body_sw.cpp
+++ b/servers/physics/body_sw.cpp
@@ -495,7 +495,7 @@ void BodySW::integrate_forces(real_t p_step) {
Vector3 axis;
real_t angle;
- rot.get_axis_and_angle(axis, angle);
+ rot.get_axis_angle(axis, angle);
axis.normalize();
angular_velocity = axis.normalized() * (angle / p_step);
@@ -638,7 +638,7 @@ void BodySW::simulate_motion(const Transform& p_xform,real_t p_step) {
Vector3 axis;
real_t angle;
- rot.get_axis_and_angle(axis,angle);
+ rot.get_axis_angle(axis,angle);
axis.normalize();
angular_velocity=axis.normalized() * (angle/p_step);
linear_velocity = (p_xform.origin - get_transform().origin)/p_step;
diff --git a/servers/physics/gjk_epa.cpp b/servers/physics/gjk_epa.cpp
index 2819aa7ca0..ab2a9b507a 100644
--- a/servers/physics/gjk_epa.cpp
+++ b/servers/physics/gjk_epa.cpp
@@ -34,6 +34,31 @@
/*************** Bullet's GJK-EPA2 IMPLEMENTATION *******************/
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2008 Erwin Coumans http://continuousphysics.com/Bullet/
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the
+use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+claim that you wrote the original software. If you use this software in a
+product, an acknowledgment in the product documentation would be appreciated
+but is not required.
+2. Altered source versions must be plainly marked as such, and must not be
+misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+/*
+GJK-EPA collision solver by Nathanael Presson, 2008
+*/
+
// Config
/* GJK */
diff --git a/servers/physics/joints/cone_twist_joint_sw.cpp b/servers/physics/joints/cone_twist_joint_sw.cpp
index d94618fd9f..7e13909592 100644
--- a/servers/physics/joints/cone_twist_joint_sw.cpp
+++ b/servers/physics/joints/cone_twist_joint_sw.cpp
@@ -30,7 +30,23 @@
/*
Adapted to Godot from the Bullet library.
-See corresponding header file for licensing info.
+*/
+
+/*
+Bullet Continuous Collision Detection and Physics Library
+ConeTwistJointSW is Copyright (c) 2007 Starbreeze Studios
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+
+Written by: Marcus Hennix
*/
#include "cone_twist_joint_sw.h"
diff --git a/servers/physics/joints/generic_6dof_joint_sw.cpp b/servers/physics/joints/generic_6dof_joint_sw.cpp
index a1d0360db6..e4349bda9a 100644
--- a/servers/physics/joints/generic_6dof_joint_sw.cpp
+++ b/servers/physics/joints/generic_6dof_joint_sw.cpp
@@ -30,7 +30,28 @@
/*
Adapted to Godot from the Bullet library.
-See corresponding header file for licensing info.
+*/
+
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+/*
+2007-09-09
+Generic6DOFJointSW Refactored by Francisco Le?n
+email: projectileman@yahoo.com
+http://gimpact.sf.net
*/
#include "generic_6dof_joint_sw.h"
diff --git a/servers/physics/joints/hinge_joint_sw.cpp b/servers/physics/joints/hinge_joint_sw.cpp
index b63fcaecd1..3938427cea 100644
--- a/servers/physics/joints/hinge_joint_sw.cpp
+++ b/servers/physics/joints/hinge_joint_sw.cpp
@@ -30,7 +30,21 @@
/*
Adapted to Godot from the Bullet library.
-See corresponding header file for licensing info.
+*/
+
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
*/
#include "hinge_joint_sw.h"
diff --git a/servers/physics/joints/pin_joint_sw.cpp b/servers/physics/joints/pin_joint_sw.cpp
index 80a4bd7f44..0792ffeecd 100644
--- a/servers/physics/joints/pin_joint_sw.cpp
+++ b/servers/physics/joints/pin_joint_sw.cpp
@@ -30,7 +30,21 @@
/*
Adapted to Godot from the Bullet library.
-See corresponding header file for licensing info.
+*/
+
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
*/
#include "pin_joint_sw.h"
diff --git a/servers/physics/joints/slider_joint_sw.cpp b/servers/physics/joints/slider_joint_sw.cpp
index ecc4be3b5e..947f46e960 100644
--- a/servers/physics/joints/slider_joint_sw.cpp
+++ b/servers/physics/joints/slider_joint_sw.cpp
@@ -30,7 +30,27 @@
/*
Adapted to Godot from the Bullet library.
-See corresponding header file for licensing info.
+*/
+
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+/*
+Added by Roman Ponomarev (rponom@gmail.com)
+April 04, 2008
+
*/
#include "slider_joint_sw.h"
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h
index ff679bc15f..624bd1dad7 100644
--- a/servers/visual/rasterizer.h
+++ b/servers/visual/rasterizer.h
@@ -163,8 +163,8 @@ public:
virtual RID texture_create() = 0;
virtual void texture_allocate(RID p_texture, int p_width, int p_height, Image::Format p_format, uint32_t p_flags = VS::TEXTURE_FLAGS_DEFAULT) = 0;
- virtual void texture_set_data(RID p_texture, const Image &p_image, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) = 0;
- virtual Image texture_get_data(RID p_texture, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) const = 0;
+ virtual void texture_set_data(RID p_texture, const Ref<Image> &p_image, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) = 0;
+ virtual Ref<Image> texture_get_data(RID p_texture, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) const = 0;
virtual void texture_set_flags(RID p_texture, uint32_t p_flags) = 0;
virtual uint32_t texture_get_flags(RID p_texture) const = 0;
virtual Image::Format texture_get_format(RID p_texture) const = 0;
@@ -931,7 +931,7 @@ public:
virtual RasterizerCanvas *get_canvas() = 0;
virtual RasterizerScene *get_scene() = 0;
- virtual void set_boot_image(const Image &p_image, const Color &p_color, bool p_scale) = 0;
+ virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) = 0;
virtual void initialize() = 0;
virtual void begin_frame() = 0;
diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp
index dd653ea891..9fe92f0fec 100644
--- a/servers/visual/shader_language.cpp
+++ b/servers/visual/shader_language.cpp
@@ -3751,7 +3751,7 @@ String ShaderLanguage::get_shader_type(const String &p_code) {
String cur_identifier;
- for (int i = 0; i < p_code.length() + 1; i++) {
+ for (int i = 0; i < p_code.length(); i++) {
if (p_code[i] == ';') {
break;
diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp
index 5ba975d193..2fdff29f0a 100644
--- a/servers/visual/visual_server_raster.cpp
+++ b/servers/visual/visual_server_raster.cpp
@@ -121,7 +121,7 @@ int VisualServerRaster::get_render_info(RenderInfo p_info) {
/* TESTING */
-void VisualServerRaster::set_boot_image(const Image &p_image, const Color &p_color, bool p_scale) {
+void VisualServerRaster::set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) {
redraw_request();
VSG::rasterizer->set_boot_image(p_image, p_color, p_scale);
diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h
index 7de497d529..db3c7f822a 100644
--- a/servers/visual/visual_server_raster.h
+++ b/servers/visual/visual_server_raster.h
@@ -623,8 +623,8 @@ public:
BIND0R(RID, texture_create)
BIND5(texture_allocate, RID, int, int, Image::Format, uint32_t)
- BIND3(texture_set_data, RID, const Image &, CubeMapSide)
- BIND2RC(Image, texture_get_data, RID, CubeMapSide)
+ BIND3(texture_set_data, RID, const Ref<Image> &, CubeMapSide)
+ BIND2RC(Ref<Image>, texture_get_data, RID, CubeMapSide)
BIND2(texture_set_flags, RID, uint32_t)
BIND1RC(uint32_t, texture_get_flags, RID)
BIND1RC(Image::Format, texture_get_format, RID)
@@ -1109,7 +1109,7 @@ public:
/* TESTING */
- virtual void set_boot_image(const Image &p_image, const Color &p_color, bool p_scale);
+ virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale);
virtual void set_default_clear_color(const Color &p_color);
virtual bool has_feature(Features p_feature) const;
diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp
index 5a7ae93a31..5df1ca456b 100644
--- a/servers/visual_server.cpp
+++ b/servers/visual_server.cpp
@@ -68,10 +68,11 @@ VisualServer *VisualServer::create() {
return NULL;
}
-RID VisualServer::texture_create_from_image(const Image &p_image, uint32_t p_flags) {
+RID VisualServer::texture_create_from_image(const Ref<Image> &p_image, uint32_t p_flags) {
+ ERR_FAIL_COND_V(!p_image.is_valid(), RID());
RID texture = texture_create();
- texture_allocate(texture, p_image.get_width(), p_image.get_height(), p_image.get_format(), p_flags); //if it has mipmaps, use, else generate
+ texture_allocate(texture, p_image->get_width(), p_image->get_height(), p_image->get_format(), p_flags); //if it has mipmaps, use, else generate
ERR_FAIL_COND_V(!texture.is_valid(), texture);
texture_set_data(texture, p_image);
@@ -120,12 +121,12 @@ RID VisualServer::get_test_texture() {
}
}
- Image data(TEST_TEXTURE_SIZE, TEST_TEXTURE_SIZE, false, Image::FORMAT_RGB8, test_data);
+ Ref<Image> data = memnew(Image(TEST_TEXTURE_SIZE, TEST_TEXTURE_SIZE, false, Image::FORMAT_RGB8, test_data));
test_texture = texture_create_from_image(data);
return test_texture;
-};
+}
void VisualServer::_free_internal_rids() {
@@ -324,7 +325,7 @@ RID VisualServer::get_white_texture() {
for (int i = 0; i < 16 * 3; i++)
w[i] = 255;
}
- Image white(4, 4, 0, Image::FORMAT_RGB8, wt);
+ Ref<Image> white = memnew(Image(4, 4, 0, Image::FORMAT_RGB8, wt));
white_texture = texture_create();
texture_allocate(white_texture, 4, 4, Image::FORMAT_RGB8);
texture_set_data(white_texture, white);
diff --git a/servers/visual_server.h b/servers/visual_server.h
index 7accc7d904..28f21a36eb 100644
--- a/servers/visual_server.h
+++ b/servers/visual_server.h
@@ -32,6 +32,7 @@
#include "bsp_tree.h"
#include "geometry.h"
+#include "image.h"
#include "math_2d.h"
#include "object.h"
#include "rid.h"
@@ -106,10 +107,10 @@ public:
};
virtual RID texture_create() = 0;
- RID texture_create_from_image(const Image &p_image, uint32_t p_flags = TEXTURE_FLAGS_DEFAULT); // helper
+ RID texture_create_from_image(const Ref<Image> &p_image, uint32_t p_flags = TEXTURE_FLAGS_DEFAULT); // helper
virtual void texture_allocate(RID p_texture, int p_width, int p_height, Image::Format p_format, uint32_t p_flags = TEXTURE_FLAGS_DEFAULT) = 0;
- virtual void texture_set_data(RID p_texture, const Image &p_image, CubeMapSide p_cube_side = CUBEMAP_LEFT) = 0;
- virtual Image texture_get_data(RID p_texture, CubeMapSide p_cube_side = CUBEMAP_LEFT) const = 0;
+ virtual void texture_set_data(RID p_texture, const Ref<Image> &p_image, CubeMapSide p_cube_side = CUBEMAP_LEFT) = 0;
+ virtual Ref<Image> texture_get_data(RID p_texture, CubeMapSide p_cube_side = CUBEMAP_LEFT) const = 0;
virtual void texture_set_flags(RID p_texture, uint32_t p_flags) = 0;
virtual uint32_t texture_get_flags(RID p_texture) const = 0;
virtual Image::Format texture_get_format(RID p_texture) const = 0;
@@ -884,7 +885,7 @@ public:
virtual void mesh_add_surface_from_mesh_data(RID p_mesh, const Geometry::MeshData &p_mesh_data);
virtual void mesh_add_surface_from_planes(RID p_mesh, const PoolVector<Plane> &p_planes);
- virtual void set_boot_image(const Image &p_image, const Color &p_color, bool p_scale) = 0;
+ virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale) = 0;
virtual void set_default_clear_color(const Color &p_color) = 0;
enum Features {
diff --git a/thirdparty/README.md b/thirdparty/README.md
index f6edff490f..1c4bad4836 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -1,6 +1,13 @@
# Third party libraries
+## b2d_convexdecomp
+
+- Upstream: https://github.com/erincatto/Box2D (Contributions/Utilities/ConvexDecomposition)
+- Version: TBD
+- License: zlib
+
+
## certs
- Upstream: ?
@@ -142,6 +149,91 @@ changes to ensure they build for Javascript/HTML5. Those
changes are marked with `// -- GODOT --` comments.
+## minizip
+
+- Upstream: http://www.zlib.net
+- Version: 1.2.4 (zlib contrib)
+- License: zlib
+
+Files extracted from the upstream source:
+
+- contrib/minizip/{crypt.h,ioapi.{c,h},zip.{c,h},unzip.{c,h}}
+
+Important: Some files have Godot-made changes for use in core/io.
+TODO: Properly sync with version 1.2.4 and document changes.
+
+
+## misc
+
+Collection of single-file libraries used in Godot components.
+
+### core
+
+- `aes256.{cpp,h}`
+ * Upstream: http://www.literatecode.com/aes256
+ * Version: latest, as of April 2017
+ * License: ISC
+- `base64.{c,h}`
+ * Upstream: http://episec.com/people/edelkind/c.html
+ * Version: latest, as of April 2017
+ * License: Public Domain
+- `fastlz.{c,h}`
+ * Upstream: https://code.google.com/archive/p/fastlz
+ * Version: svn (r12)
+ * License: MIT
+- `hq2x.{cpp,h}`
+ * Upstream: https://github.com/brunexgeek/hqx
+ * Version: TBD, file structure differs
+ * License: Apache 2.0
+- `md5.{cpp,h}`
+ * Upstream: http://www.efgh.com/software/md5.htm
+ * Version: TBD, might not be latest from above URL
+ * License: RSA Message-Digest License
+- `pcg.{cpp,h}`
+ * Upstream: http://www.pcg-random.org
+ * Version: minimal C implemention, http://www.pcg-random.org/download.html
+ * License: Apache 2.0
+- `sha256.{c,h}`
+ * Upstream: https://github.com/ilvn/SHA256
+ * Version: git (35ff823, 2015)
+ * License: ISC
+- `smaz.{c,h}`
+ * Upstream: https://github.com/antirez/smaz
+ * Version: git (150e125, 2009)
+ * License: BSD 3-clause
+ * Modifications: use `const char*` instead of `char*` for input string
+- `triangulator.{cpp,h}`
+ * Upstream: https://github.com/ivanfratric/polypartition (`src/polypartition.cpp`)
+ * Version: TBD, class was renamed
+ * License: MIT
+
+### modules
+
+- `curl_hostcheck.{c,h}`
+ * Upstream: https://curl.haxx.se/
+ * Version: ? (2013)
+ * License: MIT
+- `yuv2rgb.h`
+ * Upstream: http://wss.co.uk/pinknoise/yuv2rgb/ (to check)
+ * Version: ?
+ * License: BSD
+
+### scene
+
+- `mikktspace.{c,h}`
+ * Upstream: https://wiki.blender.org/index.php/Dev:Shading/Tangent_Space_Normal_Maps
+ * Version: 1.0
+ * License: zlib
+- `stb_truetype.h`
+ * Upstream: https://github.com/nothings/stb
+ * Version: 1.11
+ * License: Public Domain (Unlicense) or MIT
+- `stb_vorbis.c`
+ * Upstream: https://github.com/nothings/stb
+ * Version: 1.09
+ * License: Public Domain (Unlicense) or MIT
+
+
## openssl
- Upstream: https://www.openssl.org
diff --git a/drivers/convex_decomp/b2Glue.h b/thirdparty/b2d_convexdecomp/b2Glue.h
index 425486356e..425486356e 100644
--- a/drivers/convex_decomp/b2Glue.h
+++ b/thirdparty/b2d_convexdecomp/b2Glue.h
diff --git a/drivers/convex_decomp/b2Polygon.cpp b/thirdparty/b2d_convexdecomp/b2Polygon.cpp
index b6ead62c63..b6ead62c63 100644
--- a/drivers/convex_decomp/b2Polygon.cpp
+++ b/thirdparty/b2d_convexdecomp/b2Polygon.cpp
diff --git a/drivers/convex_decomp/b2Polygon.h b/thirdparty/b2d_convexdecomp/b2Polygon.h
index c466e28f7e..c466e28f7e 100644
--- a/drivers/convex_decomp/b2Polygon.h
+++ b/thirdparty/b2d_convexdecomp/b2Polygon.h
diff --git a/drivers/convex_decomp/b2Triangle.cpp b/thirdparty/b2d_convexdecomp/b2Triangle.cpp
index a0a30b9407..a0a30b9407 100644
--- a/drivers/convex_decomp/b2Triangle.cpp
+++ b/thirdparty/b2d_convexdecomp/b2Triangle.cpp
diff --git a/drivers/convex_decomp/b2Triangle.h b/thirdparty/b2d_convexdecomp/b2Triangle.h
index 99ab5cba69..99ab5cba69 100644
--- a/drivers/convex_decomp/b2Triangle.h
+++ b/thirdparty/b2d_convexdecomp/b2Triangle.h
diff --git a/core/io/LICENSE-InfoZip.txt b/thirdparty/minizip/LICENSE-InfoZip.txt
index bcfe47e978..bcfe47e978 100644
--- a/core/io/LICENSE-InfoZip.txt
+++ b/thirdparty/minizip/LICENSE-InfoZip.txt
diff --git a/core/io/LICENSE-MiniZip.txt b/thirdparty/minizip/LICENSE-MiniZip.txt
index 0e8950f86f..0e8950f86f 100644
--- a/core/io/LICENSE-MiniZip.txt
+++ b/thirdparty/minizip/LICENSE-MiniZip.txt
diff --git a/core/io/crypt.h b/thirdparty/minizip/crypt.h
index a01d08d932..a01d08d932 100644
--- a/core/io/crypt.h
+++ b/thirdparty/minizip/crypt.h
diff --git a/core/io/ioapi.c b/thirdparty/minizip/ioapi.c
index d6063a5fe6..d6063a5fe6 100644
--- a/core/io/ioapi.c
+++ b/thirdparty/minizip/ioapi.c
diff --git a/core/io/ioapi.h b/thirdparty/minizip/ioapi.h
index cb6cb7e766..cb6cb7e766 100644
--- a/core/io/ioapi.h
+++ b/thirdparty/minizip/ioapi.h
diff --git a/core/io/unzip.c b/thirdparty/minizip/unzip.c
index 7aa0a86d13..7aa0a86d13 100644
--- a/core/io/unzip.c
+++ b/thirdparty/minizip/unzip.c
diff --git a/core/io/unzip.h b/thirdparty/minizip/unzip.h
index f67c3b2fa8..f67c3b2fa8 100644
--- a/core/io/unzip.h
+++ b/thirdparty/minizip/unzip.h
diff --git a/core/io/zip.c b/thirdparty/minizip/zip.c
index 27a3d3cdc1..27a3d3cdc1 100644
--- a/core/io/zip.c
+++ b/thirdparty/minizip/zip.c
diff --git a/core/io/zip.h b/thirdparty/minizip/zip.h
index 37478b34c0..37478b34c0 100644
--- a/core/io/zip.h
+++ b/thirdparty/minizip/zip.h
diff --git a/core/io/aes256.cpp b/thirdparty/misc/aes256.cpp
index dc271928b4..dc271928b4 100644
--- a/core/io/aes256.cpp
+++ b/thirdparty/misc/aes256.cpp
diff --git a/core/io/aes256.h b/thirdparty/misc/aes256.h
index 8fcc25a4de..8fcc25a4de 100644
--- a/core/io/aes256.h
+++ b/thirdparty/misc/aes256.h
diff --git a/core/io/base64.c b/thirdparty/misc/base64.c
index 0929ae5db5..0929ae5db5 100644
--- a/core/io/base64.c
+++ b/thirdparty/misc/base64.c
diff --git a/core/io/base64.h b/thirdparty/misc/base64.h
index 456ef1811b..456ef1811b 100644
--- a/core/io/base64.h
+++ b/thirdparty/misc/base64.h
diff --git a/modules/openssl/curl_hostcheck.c b/thirdparty/misc/curl_hostcheck.c
index feef232619..feef232619 100644
--- a/modules/openssl/curl_hostcheck.c
+++ b/thirdparty/misc/curl_hostcheck.c
diff --git a/modules/openssl/curl_hostcheck.h b/thirdparty/misc/curl_hostcheck.h
index 1b7fbe81e3..1b7fbe81e3 100644
--- a/modules/openssl/curl_hostcheck.h
+++ b/thirdparty/misc/curl_hostcheck.h
diff --git a/core/io/fastlz.c b/thirdparty/misc/fastlz.c
index 508f6ea2ae..508f6ea2ae 100644
--- a/core/io/fastlz.c
+++ b/thirdparty/misc/fastlz.c
diff --git a/core/io/fastlz.h b/thirdparty/misc/fastlz.h
index e5ca8dfc02..e5ca8dfc02 100644
--- a/core/io/fastlz.h
+++ b/thirdparty/misc/fastlz.h
diff --git a/core/hq2x.cpp b/thirdparty/misc/hq2x.cpp
index 7ebb505d64..7ebb505d64 100644
--- a/core/hq2x.cpp
+++ b/thirdparty/misc/hq2x.cpp
diff --git a/core/hq2x.h b/thirdparty/misc/hq2x.h
index 8f119d2a01..8f119d2a01 100644
--- a/core/hq2x.h
+++ b/thirdparty/misc/hq2x.h
diff --git a/core/io/md5.cpp b/thirdparty/misc/md5.cpp
index 5a88328dd4..1653ab0be5 100644
--- a/core/io/md5.cpp
+++ b/thirdparty/misc/md5.cpp
@@ -1,5 +1,3 @@
-#include "md5.h"
-
/*
**********************************************************************
** md5.c **
@@ -34,7 +32,7 @@
*/
/* -- include the following line if the md5.h header file is separate -- */
-/* #include "md5.h" */
+#include "md5.h"
/* forward declaration */
static void Transform (uint32_t *buf, uint32_t *in);
diff --git a/core/io/md5.h b/thirdparty/misc/md5.h
index e99d58b443..e99d58b443 100644
--- a/core/io/md5.h
+++ b/thirdparty/misc/md5.h
diff --git a/scene/resources/mikktspace.c b/thirdparty/misc/mikktspace.c
index 62aa2da251..62aa2da251 100644
--- a/scene/resources/mikktspace.c
+++ b/thirdparty/misc/mikktspace.c
diff --git a/scene/resources/mikktspace.h b/thirdparty/misc/mikktspace.h
index 52c44a713c..52c44a713c 100644
--- a/scene/resources/mikktspace.h
+++ b/thirdparty/misc/mikktspace.h
diff --git a/core/math/pcg.cpp b/thirdparty/misc/pcg.cpp
index eac3b36d36..eac3b36d36 100644
--- a/core/math/pcg.cpp
+++ b/thirdparty/misc/pcg.cpp
diff --git a/core/math/pcg.h b/thirdparty/misc/pcg.h
index 81f4c9770e..81f4c9770e 100644
--- a/core/math/pcg.h
+++ b/thirdparty/misc/pcg.h
diff --git a/core/io/sha256.c b/thirdparty/misc/sha256.c
index 68a4339af9..68a4339af9 100644
--- a/core/io/sha256.c
+++ b/thirdparty/misc/sha256.c
diff --git a/core/io/sha256.h b/thirdparty/misc/sha256.h
index e19e56b4cc..e19e56b4cc 100644
--- a/core/io/sha256.h
+++ b/thirdparty/misc/sha256.h
diff --git a/thirdparty/misc/smaz.c b/thirdparty/misc/smaz.c
new file mode 100644
index 0000000000..555dfea844
--- /dev/null
+++ b/thirdparty/misc/smaz.c
@@ -0,0 +1,207 @@
+/*
+Copyright (c) 2006-2009, Salvatore Sanfilippo
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the name of Smaz nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <string.h>
+
+/* Our compression codebook, used for compression */
+static const char *Smaz_cb[241] = {
+"\002s,\266", "\003had\232\002leW", "\003on \216", "", "\001yS",
+"\002ma\255\002li\227", "\003or \260", "", "\002ll\230\003s t\277",
+"\004fromg\002mel", "", "\003its\332", "\001z\333", "\003ingF", "\001>\336",
+"\001 \000\003 (\002nc\344", "\002nd=\003 on\312",
+"\002ne\213\003hat\276\003re q", "", "\002ngT\003herz\004have\306\003s o\225",
+"", "\003ionk\003s a\254\002ly\352", "\003hisL\003 inN\003 be\252", "",
+"\003 fo\325\003 of \003 ha\311", "", "\002of\005",
+"\003 co\241\002no\267\003 ma\370", "", "", "\003 cl\356\003enta\003 an7",
+"\002ns\300\001\"e", "\003n t\217\002ntP\003s, \205",
+"\002pe\320\003 we\351\002om\223", "\002on\037", "", "\002y G", "\003 wa\271",
+"\003 re\321\002or*", "", "\002=\"\251\002ot\337", "\003forD\002ou[",
+"\003 toR", "\003 th\r", "\003 it\366",
+"\003but\261\002ra\202\003 wi\363\002</\361", "\003 wh\237", "\002 4",
+"\003nd ?", "\002re!", "", "\003ng c", "",
+"\003ly \307\003ass\323\001a\004\002rir", "", "", "", "\002se_", "\003of \"",
+"\003div\364\002ros\003ere\240", "", "\002ta\310\001bZ\002si\324", "",
+"\003and\a\002rs\335", "\002rt\362", "\002teE", "\003ati\316", "\002so\263",
+"\002th\021", "\002tiJ\001c\034\003allp", "\003ate\345", "\002ss\246",
+"\002stM", "", "\002><\346", "\002to\024", "\003arew", "\001d\030",
+"\002tr\303", "", "\001\n1\003 a \222", "\003f tv\002veo", "\002un\340", "",
+"\003e o\242", "\002a \243\002wa\326\001e\002", "\002ur\226\003e a\274",
+"\002us\244\003\n\r\n\247", "\002ut\304\003e c\373", "\002we\221", "", "",
+"\002wh\302", "\001f,", "", "", "", "\003d t\206", "", "", "\003th \343",
+"\001g;", "", "", "\001\r9\003e s\265", "\003e t\234", "", "\003to Y",
+"\003e\r\n\236", "\002d \036\001h\022", "", "\001,Q", "\002 a\031", "\002 b^",
+"\002\r\n\025\002 cI", "\002 d\245", "\002 e\253", "\002 fh\001i\b\002e \v",
+"", "\002 hU\001-\314", "\002 i8", "", "", "\002 l\315", "\002 m{",
+"\002f :\002 n\354", "\002 o\035", "\002 p}\001.n\003\r\n\r\250", "",
+"\002 r\275", "\002 s>", "\002 t\016", "", "\002g \235\005which+\003whi\367",
+"\002 w5", "\001/\305", "\003as \214", "\003at \207", "", "\003who\331", "",
+"\001l\026\002h \212", "", "\002, $", "", "\004withV", "", "", "", "\001m-", "",
+"", "\002ac\357", "\002ad\350", "\003TheH", "", "", "\004this\233\001n\t",
+"", "\002. y", "", "\002alX\003e, \365", "\003tio\215\002be\\",
+"\002an\032\003ver\347", "", "\004that0\003tha\313\001o\006", "\003was2",
+"\002arO", "\002as.", "\002at'\003the\001\004they\200\005there\322\005theird",
+"\002ce\210", "\004were]", "", "\002ch\231\002l \264\001p<", "", "",
+"\003one\256", "", "\003he \023\002dej", "\003ter\270", "\002cou", "",
+"\002by\177\002di\201\002eax", "", "\002ec\327", "\002edB", "\002ee\353", "",
+"", "\001r\f\002n )", "", "", "", "\002el\262", "", "\003in i\002en3", "",
+"\002o `\001s\n", "", "\002er\033", "\003is t\002es6", "", "\002ge\371",
+"\004.com\375", "\002fo\334\003our\330", "\003ch \301\001t\003", "\002hab", "",
+"\003men\374", "", "\002he\020", "", "", "\001u&", "\002hif", "",
+"\003not\204\002ic\203", "\003ed @\002id\355", "", "", "\002ho\273",
+"\002r K\001vm", "", "", "", "\003t t\257\002il\360", "\002im\342",
+"\003en \317\002in\017", "\002io\220", "\002s \027\001wA", "", "\003er |",
+"\003es ~\002is%", "\002it/", "", "\002iv\272", "",
+"\002t #\ahttp://C\001x\372", "\002la\211", "\001<\341", "\003, a\224"
+};
+
+/* Reverse compression codebook, used for decompression */
+static char *Smaz_rcb[254] = {
+" ", "the", "e", "t", "a", "of", "o", "and", "i", "n", "s", "e ", "r", " th",
+" t", "in", "he", "th", "h", "he ", "to", "\r\n", "l", "s ", "d", " a", "an",
+"er", "c", " o", "d ", "on", " of", "re", "of ", "t ", ", ", "is", "u", "at",
+" ", "n ", "or", "which", "f", "m", "as", "it", "that", "\n", "was", "en",
+" ", " w", "es", " an", " i", "\r", "f ", "g", "p", "nd", " s", "nd ", "ed ",
+"w", "ed", "http://", "for", "te", "ing", "y ", "The", " c", "ti", "r ", "his",
+"st", " in", "ar", "nt", ",", " to", "y", "ng", " h", "with", "le", "al", "to ",
+"b", "ou", "be", "were", " b", "se", "o ", "ent", "ha", "ng ", "their", "\"",
+"hi", "from", " f", "in ", "de", "ion", "me", "v", ".", "ve", "all", "re ",
+"ri", "ro", "is ", "co", "f t", "are", "ea", ". ", "her", " m", "er ", " p",
+"es ", "by", "they", "di", "ra", "ic", "not", "s, ", "d t", "at ", "ce", "la",
+"h ", "ne", "as ", "tio", "on ", "n t", "io", "we", " a ", "om", ", a", "s o",
+"ur", "li", "ll", "ch", "had", "this", "e t", "g ", "e\r\n", " wh", "ere",
+" co", "e o", "a ", "us", " d", "ss", "\n\r\n", "\r\n\r", "=\"", " be", " e",
+"s a", "ma", "one", "t t", "or ", "but", "el", "so", "l ", "e s", "s,", "no",
+"ter", " wa", "iv", "ho", "e a", " r", "hat", "s t", "ns", "ch ", "wh", "tr",
+"ut", "/", "have", "ly ", "ta", " ha", " on", "tha", "-", " l", "ati", "en ",
+"pe", " re", "there", "ass", "si", " fo", "wa", "ec", "our", "who", "its", "z",
+"fo", "rs", ">", "ot", "un", "<", "im", "th ", "nc", "ate", "><", "ver", "ad",
+" we", "ly", "ee", " n", "id", " cl", "ac", "il", "</", "rt", " wi", "div",
+"e, ", " it", "whi", " ma", "ge", "x", "e c", "men", ".com"
+};
+
+int smaz_compress(const char *in, int inlen, char *out, int outlen) {
+ unsigned int h1,h2,h3=0;
+ int verblen = 0, _outlen = outlen;
+ char verb[256], *_out = out;
+
+ while(inlen) {
+ int j = 7, needed;
+ char *flush = NULL;
+ char *slot;
+
+ h1 = h2 = in[0]<<3;
+ if (inlen > 1) h2 += in[1];
+ if (inlen > 2) h3 = h2^in[2];
+ if (j > inlen) j = inlen;
+
+ /* Try to lookup substrings into the hash table, starting from the
+ * longer to the shorter substrings */
+ for (; j > 0; j--) {
+ switch(j) {
+ case 1: slot = Smaz_cb[h1%241]; break;
+ case 2: slot = Smaz_cb[h2%241]; break;
+ default: slot = Smaz_cb[h3%241]; break;
+ }
+ while(slot[0]) {
+ if (slot[0] == j && memcmp(slot+1,in,j) == 0) {
+ /* Match found in the hash table,
+ * prepare a verbatim bytes flush if needed */
+ if (verblen) {
+ needed = (verblen == 1) ? 2 : 2+verblen;
+ flush = out;
+ out += needed;
+ outlen -= needed;
+ }
+ /* Emit the byte */
+ if (outlen <= 0) return _outlen+1;
+ out[0] = slot[slot[0]+1];
+ out++;
+ outlen--;
+ inlen -= j;
+ in += j;
+ goto out;
+ } else {
+ slot += slot[0]+2;
+ }
+ }
+ }
+ /* Match not found - add the byte to the verbatim buffer */
+ verb[verblen] = in[0];
+ verblen++;
+ inlen--;
+ in++;
+out:
+ /* Prepare a flush if we reached the flush length limit, and there
+ * is not already a pending flush operation. */
+ if (!flush && (verblen == 256 || (verblen > 0 && inlen == 0))) {
+ needed = (verblen == 1) ? 2 : 2+verblen;
+ flush = out;
+ out += needed;
+ outlen -= needed;
+ if (outlen < 0) return _outlen+1;
+ }
+ /* Perform a verbatim flush if needed */
+ if (flush) {
+ if (verblen == 1) {
+ flush[0] = (signed char)254;
+ flush[1] = verb[0];
+ } else {
+ flush[0] = (signed char)255;
+ flush[1] = (signed char)(verblen-1);
+ memcpy(flush+2,verb,verblen);
+ }
+ flush = NULL;
+ verblen = 0;
+ }
+ }
+ return out-_out;
+}
+
+int smaz_decompress(const char *in, int inlen, char *out, int outlen) {
+ unsigned char *c = (unsigned char*) in;
+ char *_out = out;
+ int _outlen = outlen;
+
+ while(inlen) {
+ if (*c == 254) {
+ /* Verbatim byte */
+ if (outlen < 1) return _outlen+1;
+ *out = *(c+1);
+ out++;
+ outlen--;
+ c += 2;
+ inlen -= 2;
+ } else if (*c == 255) {
+ /* Verbatim string */
+ int len = (*(c+1))+1;
+ if (outlen < len) return _outlen+1;
+ memcpy(out,c+2,len);
+ out += len;
+ outlen -= len;
+ c += 2+len;
+ inlen -= 2+len;
+ } else {
+ /* Codebook entry */
+ const char *s = Smaz_rcb[*c];
+ int len = strlen(s);
+
+ if (outlen < len) return _outlen+1;
+ memcpy(out,s,len);
+ out += len;
+ outlen -= len;
+ c++;
+ inlen--;
+ }
+ }
+ return out-_out;
+}
diff --git a/thirdparty/misc/smaz.h b/thirdparty/misc/smaz.h
new file mode 100644
index 0000000000..a9d8a337a7
--- /dev/null
+++ b/thirdparty/misc/smaz.h
@@ -0,0 +1,20 @@
+/*
+Copyright (c) 2006-2009, Salvatore Sanfilippo
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Neither the name of Smaz nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef _SMAZ_H
+#define _SMAZ_H
+
+int smaz_compress(const char *in, int inlen, char *out, int outlen);
+int smaz_decompress(const char *in, int inlen, char *out, int outlen);
+
+#endif
diff --git a/scene/resources/stb_truetype.h b/thirdparty/misc/stb_truetype.h
index 016972785a..016972785a 100644
--- a/scene/resources/stb_truetype.h
+++ b/thirdparty/misc/stb_truetype.h
diff --git a/thirdparty/stb_vorbis/stb_vorbis.c b/thirdparty/misc/stb_vorbis.c
index c4f24d5898..c4f24d5898 100644
--- a/thirdparty/stb_vorbis/stb_vorbis.c
+++ b/thirdparty/misc/stb_vorbis.c
diff --git a/core/math/triangulator.cpp b/thirdparty/misc/triangulator.cpp
index 75b2b064c4..75b2b064c4 100644
--- a/core/math/triangulator.cpp
+++ b/thirdparty/misc/triangulator.cpp
diff --git a/core/math/triangulator.h b/thirdparty/misc/triangulator.h
index b6dd7e8236..b6dd7e8236 100644
--- a/core/math/triangulator.h
+++ b/thirdparty/misc/triangulator.h
diff --git a/modules/theora/yuv2rgb.h b/thirdparty/misc/yuv2rgb.h
index a9bef76da8..d0c2813a75 100644
--- a/modules/theora/yuv2rgb.h
+++ b/thirdparty/misc/yuv2rgb.h
@@ -1,5 +1,28 @@
/* Thirdparty code presumably from http://wss.co.uk/pinknoise/yuv2rgb/ */
-/* FIXME: Move to thirdparty dir */
+
+/*
+This YUV2RGB code is Copyright (C) 2008-11 Robin Watts
+<theorarm@wss.co.uk>.
+
+The software is released under the BSD license.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+In particular, I warrant absolutely nothing about how patent free
+this method is. It is your responsibility to ensure that this code
+does not infringe any patents that apply in your area before you
+ship it.
+*/
#ifndef YUV2RGB_H
#define YUV2RGB_H