From b72516568ecce51e189930f44895a3f84f1b9969 Mon Sep 17 00:00:00 2001 From: Tanasart <22589759+Ttanasart-pt@users.noreply.github.com> Date: Wed, 8 Mar 2023 18:14:01 +0700 Subject: [PATCH] Mac attempt 1 --- PixelComposer.resource_order | 3 + PixelComposer.yyp | 8 +- datafiles/Welcome files.zip | Bin 0 -> 88259 bytes objects/o_dialog_color_selector/Draw_64.gml | 4 +- objects/o_dialog_gradient/Draw_64.gml | 4 +- objects/o_dialog_migration/Draw_64.gml | 6 +- objects/o_dialog_palette/Draw_64.gml | 4 +- objects/o_main/Create_0.gml | 36 +++-- objects/o_main/Draw_64.gml | 4 +- objects/o_main/Other_2.gml | 2 +- objects/o_main/Other_3.gml | 3 +- objects/o_main/Step_0.gml | 18 ++- objects/o_main/Step_1.gml | 2 +- options/mac/options_mac.yy | 16 +-- scripts/assets_data/assets_data.gml | 2 +- scripts/collection_data/collection_data.gml | 2 +- scripts/directory_object/directory_object.gml | 10 +- scripts/fontScrollBox/fontScrollBox.gml | 2 +- scripts/globals/globals.gml | 2 + .../gradients_function/gradients_function.gml | 2 +- scripts/locale_data/locale_data.gml | 4 +- scripts/mac_window_init/mac_window_init.gml | 57 ++++++++ scripts/mac_window_init/mac_window_init.yy | 11 ++ scripts/mac_window_step/mac_window_step.gml | 76 +++++++++++ scripts/mac_window_step/mac_window_step.yy | 11 ++ .../migration_function/migration_function.gml | 2 +- scripts/node_3d_obj/node_3D_obj.gml | 2 +- scripts/node_export/node_export.gml | 26 ++-- scripts/node_gradient/node_gradient.gml | 9 +- .../node_gradient_shift.gml | 6 +- scripts/node_guide/node_guide.gml | 14 +- scripts/node_registry/node_registry.gml | 2 +- scripts/node_value/node_value.gml | 2 +- scripts/panel_collection/panel_collection.gml | 4 +- scripts/panel_graph/panel_graph.gml | 2 +- scripts/panel_menu/panel_menu.gml | 123 ++++++++++++------ scripts/path_parser/path_parser.gml | 2 +- scripts/preset_data/preset_data.gml | 2 +- scripts/sample_projects/sample_projects.gml | 10 +- scripts/sprite_loader/sprite_loader.gml | 2 +- .../steam_ugc_functions.gml | 12 +- 41 files changed, 384 insertions(+), 125 deletions(-) create mode 100644 datafiles/Welcome files.zip create mode 100644 scripts/mac_window_init/mac_window_init.gml create mode 100644 scripts/mac_window_init/mac_window_init.yy create mode 100644 scripts/mac_window_step/mac_window_step.gml create mode 100644 scripts/mac_window_step/mac_window_step.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 1ff6c3db9..d2cf7f37d 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -119,6 +119,8 @@ {"name":"gameframe","order":2,"path":"folders/sprites/gameframe.yy",}, {"name":"widgets","order":5,"path":"folders/widgets.yy",}, {"name":"guide","order":12,"path":"folders/dialog/guide.yy",}, + {"name":"MAC","order":13,"path":"folders/Extensions/MAC.yy",}, + {"name":"window","order":29,"path":"folders/functions/window.yy",}, ], "ResourceOrderSettings": [ {"name":"s_node_corner","order":14,"path":"sprites/s_node_corner/s_node_corner.yy",}, @@ -975,6 +977,7 @@ {"name":"s_node_cache","order":27,"path":"sprites/s_node_cache/s_node_cache.yy",}, {"name":"node_repeat","order":26,"path":"scripts/node_repeat/node_repeat.yy",}, {"name":"sh_fd_advect_velocity_1_glsl","order":7,"path":"shaders/sh_fd_advect_velocity_1_glsl/sh_fd_advect_velocity_1_glsl.yy",}, + {"name":"mac_window_step","order":1,"path":"scripts/mac_window_step/mac_window_step.yy",}, {"name":"s_node_image","order":4,"path":"sprites/s_node_image/s_node_image.yy",}, {"name":"__node_value_processor","order":7,"path":"scripts/__node_value_processor/__node_value_processor.yy",}, {"name":"s_node_group_input","order":16,"path":"sprites/s_node_group_input/s_node_group_input.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index fee50ab4e..8dddcb1af 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -148,6 +148,8 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"UGC","folderPath":"folders/Steamworks/UGC.yy","order":0,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy","order":5,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"guide","folderPath":"folders/dialog/guide.yy","order":0,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"MAC","folderPath":"folders/Extensions/MAC.yy","order":0,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"window","folderPath":"folders/functions/window.yy","order":0,}, ], "IncludedFiles": [ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Assets.zip","CopyToMask":-1,"filePath":"datafiles/data",}, @@ -413,7 +415,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_textbox_code_line.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_textbox_strip4.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_widget_highlight.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, - {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"tooltip.zip","CopyToMask":-1,"filePath":"datafiles/data",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"tooltip.zip","CopyToMask":3035426170322551022,"filePath":"datafiles/data",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"0 introduction.png","CopyToMask":-1,"filePath":"datafiles/Getting started",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"0 introduction.pxc","CopyToMask":-1,"filePath":"datafiles/Getting started",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"1 image import.png","CopyToMask":-1,"filePath":"datafiles/Getting started",}, @@ -481,6 +483,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics x2.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_node_use_global.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"default.zip","CopyToMask":-1,"filePath":"datafiles/data/themes",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Welcome files.zip","CopyToMask":-1,"filePath":"datafiles",}, ], "isEcma": false, "MetaData": { @@ -925,6 +928,7 @@ {"id":{"name":"boneObject","path":"scripts/boneObject/boneObject.yy",},"order":0,}, {"id":{"name":"sh_fd_advect_material_a_8_glsl","path":"shaders/sh_fd_advect_material_a_8_glsl/sh_fd_advect_material_a_8_glsl.yy",},"order":3,}, {"id":{"name":"node_color_remove","path":"scripts/node_color_remove/node_color_remove.yy",},"order":2,}, + {"id":{"name":"FileDropper","path":"extensions/FileDropper/FileDropper.yy",},"order":0,}, {"id":{"name":"spr_gameframe_pixel","path":"sprites/spr_gameframe_pixel/spr_gameframe_pixel.yy",},"order":3,}, {"id":{"name":"s_node_radial","path":"sprites/s_node_radial/s_node_radial.yy",},"order":51,}, {"id":{"name":"s_node_grid","path":"sprites/s_node_grid/s_node_grid.yy",},"order":3,}, @@ -1129,6 +1133,7 @@ {"id":{"name":"s_node_path_builder","path":"sprites/s_node_path_builder/s_node_path_builder.yy",},"order":0,}, {"id":{"name":"s_node_noise","path":"sprites/s_node_noise/s_node_noise.yy",},"order":8,}, {"id":{"name":"sh_erode","path":"shaders/sh_erode/sh_erode.yy",},"order":17,}, + {"id":{"name":"mac_window_init","path":"scripts/mac_window_init/mac_window_init.yy",},"order":0,}, {"id":{"name":"fd_rectangle_get_velocity_dissipation_value","path":"scripts/fd_rectangle_get_velocity_dissipation_value/fd_rectangle_get_velocity_dissipation_value.yy",},"order":21,}, {"id":{"name":"node_pixel_cloud","path":"scripts/node_pixel_cloud/node_pixel_cloud.yy",},"order":15,}, {"id":{"name":"s_node_crop_content","path":"sprites/s_node_crop_content/s_node_crop_content.yy",},"order":13,}, @@ -1457,6 +1462,7 @@ {"id":{"name":"node_logic_operate","path":"scripts/node_logic_operate/node_logic_operate.yy",},"order":0,}, {"id":{"name":"node_repeat","path":"scripts/node_repeat/node_repeat.yy",},"order":26,}, {"id":{"name":"sh_fd_advect_velocity_1_glsl","path":"shaders/sh_fd_advect_velocity_1_glsl/sh_fd_advect_velocity_1_glsl.yy",},"order":7,}, + {"id":{"name":"mac_window_step","path":"scripts/mac_window_step/mac_window_step.yy",},"order":0,}, {"id":{"name":"s_node_image","path":"sprites/s_node_image/s_node_image.yy",},"order":4,}, {"id":{"name":"__node_value_processor","path":"scripts/__node_value_processor/__node_value_processor.yy",},"order":7,}, {"id":{"name":"s_node_group_input","path":"sprites/s_node_group_input/s_node_group_input.yy",},"order":16,}, diff --git a/datafiles/Welcome files.zip b/datafiles/Welcome files.zip new file mode 100644 index 0000000000000000000000000000000000000000..e328bc4fe43a1400e0b0a43eba0064716eb9ed6f GIT binary patch literal 88259 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 literal 0 HcmV?d00001 diff --git a/objects/o_dialog_color_selector/Draw_64.gml b/objects/o_dialog_color_selector/Draw_64.gml index 14f79af3f..b04446a82 100644 --- a/objects/o_dialog_color_selector/Draw_64.gml +++ b/objects/o_dialog_color_selector/Draw_64.gml @@ -44,8 +44,8 @@ if !ready exit; bx -= ui(32); if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, get_text("color_selector_open_palette", "Open palette folder"), THEME.folder) == 2) { - var _realpath = environment_get_variable("LOCALAPPDATA") + "\\Pixels_Composer\\Palettes"; - var _windir = environment_get_variable("WINDIR") + "\\explorer.exe"; + var _realpath = environment_get_variable("LOCALAPPDATA") + "/Pixels_Composer/Palettes"; + var _windir = environment_get_variable("WINDIR") + "/explorer.exe"; execute_shell(_windir, _realpath); } bx -= ui(32); diff --git a/objects/o_dialog_gradient/Draw_64.gml b/objects/o_dialog_gradient/Draw_64.gml index 44204e6c6..bdc4d6a5c 100644 --- a/objects/o_dialog_gradient/Draw_64.gml +++ b/objects/o_dialog_gradient/Draw_64.gml @@ -73,8 +73,8 @@ if !ready exit; bx -= ui(32); if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, "Open gradient folder", THEME.folder) == 2) { - var _realpath = environment_get_variable("LOCALAPPDATA") + "\\Pixels_Composer\\Gradients"; - var _windir = environment_get_variable("WINDIR") + "\\explorer.exe"; + var _realpath = environment_get_variable("LOCALAPPDATA") + "/Pixels_Composer/Gradients"; + var _windir = environment_get_variable("WINDIR") + "/explorer.exe"; execute_shell(_windir, _realpath); } bx -= ui(32); diff --git a/objects/o_dialog_migration/Draw_64.gml b/objects/o_dialog_migration/Draw_64.gml index 7247f63d0..4fec3b92a 100644 --- a/objects/o_dialog_migration/Draw_64.gml +++ b/objects/o_dialog_migration/Draw_64.gml @@ -37,11 +37,11 @@ draw_set_alpha(1); var b = buttonInstant(THEME.button, bx0, by0, bw, bh, mouse_ui, sFOCUS, sHOVER); draw_text(bx0 + bw / 2, by0 + bh / 2, get_text("migrate_files", "Migrate files")); if(b == 2) { - var oldDir = environment_get_variable("userprofile") + "\\AppData\\Local\\Pixels_Composer\\"; + var oldDir = environment_get_variable("userprofile") + "/AppData/Local/Pixels_Composer/"; var folders = [ "Assets", "Collections", "Fonts", "Gradients", "Palettes", "Presets", "Themes"]; for( var i = 0; i < array_length(folders); i++ ) { - var o = oldDir + folders[i] + "\\"; - var n = DIRECTORY + folders[i] + "\\"; + var o = oldDir + folders[i] + "/"; + var n = DIRECTORY + folders[i] + "/"; if(directory_exists(o)) { var shell = "/E /I " + o + " " + n; diff --git a/objects/o_dialog_palette/Draw_64.gml b/objects/o_dialog_palette/Draw_64.gml index de07dba6d..ad6e1d003 100644 --- a/objects/o_dialog_palette/Draw_64.gml +++ b/objects/o_dialog_palette/Draw_64.gml @@ -66,8 +66,8 @@ if palette == 0 exit; bx -= ui(32); if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, sFOCUS, sHOVER, get_text("color_selector_open_palette", "Open palette folder"), THEME.folder) == 2) { - var _realpath = environment_get_variable("LOCALAPPDATA") + "\\Pixels_Composer\\Palettes"; - var _windir = environment_get_variable("WINDIR") + "\\explorer.exe"; + var _realpath = environment_get_variable("LOCALAPPDATA") + "/Pixels_Composer/Palettes"; + var _windir = environment_get_variable("WINDIR") + "/explorer.exe"; execute_shell(_windir, _realpath); } draw_sprite_ui_uniform(THEME.folder, 0, bx + ui(14), by + ui(14), 1, COLORS._main_icon); diff --git a/objects/o_main/Create_0.gml b/objects/o_main/Create_0.gml index 801c73040..63136e02c 100644 --- a/objects/o_main/Create_0.gml +++ b/objects/o_main/Create_0.gml @@ -10,16 +10,23 @@ gpu_set_tex_mip_enable(mip_off); gc_enable(true); gc_target_frame_time(100); + + window_set_min_width(480) + window_set_min_height(480); #endregion #region window - gameframe_init(); - //gameframe_can_input = false; - gameframe_set_cursor = false; - gameframe_caption_height_normal = ui(40); - gameframe_button_array = [ game_frame_button_create("", s_kenney, 0, function() {}), - game_frame_button_create("", s_kenney, 0, function() {}), - ]; + if(OS == os_windows) { + gameframe_init(); + //gameframe_can_input = false; + gameframe_set_cursor = false; + gameframe_caption_height_normal = ui(40); + gameframe_button_array = [ game_frame_button_create("", s_kenney, 0, function() {}), + game_frame_button_create("", s_kenney, 0, function() {}), + ]; + } else if(OS == os_macosx) { + mac_window_init(); + } depth = 0; win_wp = WIN_W; @@ -90,7 +97,20 @@ #endregion #region file drop - file_dropper_init(); + if(OS == os_windows) { + file_dropper_init(); + } else if(OS == os_macosx) { + file_dnd_set_hwnd(window_handle()); + file_dnd_set_enabled(true); + + _file_dnd_filelist = ""; + file_dnd_filelist = ""; + file_dnd_pattern = "*.*"; + file_dnd_allowfiles = true; + file_dnd_allowdirs = true; + file_dnd_allowmulti = true; + } + drop_path = []; function load_file_path(path) { diff --git a/objects/o_main/Draw_64.gml b/objects/o_main/Draw_64.gml index 2e0519fda..e83151627 100644 --- a/objects/o_main/Draw_64.gml +++ b/objects/o_main/Draw_64.gml @@ -1,7 +1,9 @@ /// @description init -if(gameframe_is_minimized()) { +if(OS == os_windows && gameframe_is_minimized()) { gameframe_update(); exit; +} else if(OS == os_macosx) { + mac_window_step(); } #region widget scroll diff --git a/objects/o_main/Other_2.gml b/objects/o_main/Other_2.gml index cc557110a..2a817d9f1 100644 --- a/objects/o_main/Other_2.gml +++ b/objects/o_main/Other_2.gml @@ -6,7 +6,7 @@ print("===== Game Start Begin ====="); DIRECTORY = ""; if(OS == os_windows) - DIRECTORY = environment_get_variable("userprofile") + "\\AppData\\Local\\PixelComposer\\"; + DIRECTORY = environment_get_variable("userprofile") + "/AppData/Local/PixelComposer/"; else if(OS == os_macosx) DIRECTORY = environment_get_variable("HOME") + "/PixelComposer/"; show_debug_message(DIRECTORY); diff --git a/objects/o_main/Other_3.gml b/objects/o_main/Other_3.gml index 5c0d7c293..c4400d903 100644 --- a/objects/o_main/Other_3.gml +++ b/objects/o_main/Other_3.gml @@ -5,7 +5,6 @@ #endregion #region steam - if(STEAM_ENABLED) { + if(STEAM_ENABLED) steam_shutdown(); - } #endregion \ No newline at end of file diff --git a/objects/o_main/Step_0.gml b/objects/o_main/Step_0.gml index ecb228666..bdadc135b 100644 --- a/objects/o_main/Step_0.gml +++ b/objects/o_main/Step_0.gml @@ -82,9 +82,21 @@ #endregion #region file drop - if(array_length(drop_path)) { - load_file_path(drop_path); - drop_path = []; + if(OS == os_windows) { + if(array_length(drop_path)) { + load_file_path(drop_path); + drop_path = []; + } + } else if(OS == os_macosx) { + file_dnd_set_files(file_dnd_pattern, file_dnd_allowfiles, file_dnd_allowdirs, file_dnd_allowmulti); + file_dnd_filelist = file_dnd_get_files(); + + if(file_dnd_filelist != "" && _file_dnd_filelist != file_dnd_filelist) { + var path = string_trim(file_dnd_filelist); + load_file_path(string_splice(path, "\n")); + } + + _file_dnd_filelist = file_dnd_filelist; } #endregion diff --git a/objects/o_main/Step_1.gml b/objects/o_main/Step_1.gml index ecad83774..e49b726a8 100644 --- a/objects/o_main/Step_1.gml +++ b/objects/o_main/Step_1.gml @@ -32,7 +32,7 @@ if(PREF_MAP[? "auto_save_time"] > 0 && AUTO_SAVE_TIMER > PREF_MAP[? "auto_save_time"]) { AUTO_SAVE_TIMER = 0; - var loc = DIRECTORY + "Autosave\\"; + var loc = DIRECTORY + "Autosave/"; if(!directory_exists(loc)) directory_create(loc); diff --git a/options/mac/options_mac.yy b/options/mac/options_mac.yy index 2f6c37e9d..e2da46a13 100644 --- a/options/mac/options_mac.yy +++ b/options/mac/options_mac.yy @@ -3,14 +3,14 @@ "resourceVersion": "1.0", "name": "macOS", "option_mac_allow_fullscreen": true, - "option_mac_allow_incoming_network": false, - "option_mac_allow_outgoing_network": false, - "option_mac_app_category": "Games", - "option_mac_app_id": "MakhamDev", + "option_mac_allow_incoming_network": true, + "option_mac_allow_outgoing_network": true, + "option_mac_app_category": "Productivity", + "option_mac_app_id": "com.MakhamDev.PixelComposer", "option_mac_apple_sign_in": false, "option_mac_arm64": true, "option_mac_build_app_store": false, - "option_mac_copyright": "", + "option_mac_copyright": "(c) 2023 MakhamDev", "option_mac_disable_sandbox": true, "option_mac_display_cursor": true, "option_mac_display_name": "Pixel Composer", @@ -21,15 +21,15 @@ "option_mac_interpolate_pixels": false, "option_mac_menu_dock": true, "option_mac_min_version": "10.10", - "option_mac_output_dir": "~/gamemakerstudio2", + "option_mac_output_dir": "~/PixelComposer", "option_mac_resize_window": true, "option_mac_scale": 1, - "option_mac_signing_identity": "Developer ID Application:", + "option_mac_signing_identity": "MakhamDev", "option_mac_splash_png": "${base_options_dir}/mac/splash/splash.png", "option_mac_start_fullscreen": false, "option_mac_team_id": "", "option_mac_texture_page": "2048x2048", - "option_mac_version": "1.13.7", + "option_mac_version": "1.13.8", "option_mac_vsync": false, "option_mac_x86_64": true, } \ No newline at end of file diff --git a/scripts/assets_data/assets_data.gml b/scripts/assets_data/assets_data.gml index a1049c07d..9cde70072 100644 --- a/scripts/assets_data/assets_data.gml +++ b/scripts/assets_data/assets_data.gml @@ -9,7 +9,7 @@ if(!directory_exists(root)) directory_create(root); - var _l = root + "\\version"; + var _l = root + "/version"; if(file_exists(_l)) { var res = json_load_struct(_l); if(!is_struct(res) || !struct_has(res, "version") || res.version < VERSION) diff --git a/scripts/collection_data/collection_data.gml b/scripts/collection_data/collection_data.gml index e231e34e8..db80d9b98 100644 --- a/scripts/collection_data/collection_data.gml +++ b/scripts/collection_data/collection_data.gml @@ -8,7 +8,7 @@ function __initCollection() { if(!directory_exists(root)) directory_create(root); - var _l = root + "\\version"; + var _l = root + "/version"; if(file_exists(_l)) { var res = json_load_struct(_l); if(!is_struct(res) || !struct_has(res, "version") || res.version < VERSION) diff --git a/scripts/directory_object/directory_object.gml b/scripts/directory_object/directory_object.gml index c702262ed..8a2101c8c 100644 --- a/scripts/directory_object/directory_object.gml +++ b/scripts/directory_object/directory_object.gml @@ -99,24 +99,24 @@ function DirectoryObject(name, path) constructor { for( var i = 0; i < ds_list_size(_temp_name); i++ ) { var file = _temp_name[| i]; - if(directory_exists(path + "\\" + file)) { - var _fol_path = path + "\\" + file; + if(directory_exists(path + "/" + file)) { + var _fol_path = path + "/" + file; var fol = new DirectoryObject(file, _fol_path); fol.scan(file_type); ds_list_add(subDir, fol); } else if(array_exists(file_type, filename_ext(file))) { - var f = new FileObject(string_replace(file, filename_ext(file), ""), path + "\\" + file); + var f = new FileObject(string_replace(file, filename_ext(file), ""), path + "/" + file); ds_list_add(content, f); if(string_lower(filename_ext(file)) == ".png") { - var icon_path = path + "\\" + file; + var icon_path = path + "/" + file; var amo = 1; var p = string_pos("strip", icon_path); if(p) amo = toNumber(string_copy(icon_path, p, string_length(icon_path) - p + 1)); f.spr_path = [icon_path, amo, false]; } else { - var icon_path = path + "\\" + filename_change_ext(file, ".png"); + var icon_path = path + "/" + filename_change_ext(file, ".png"); if(!file_exists(icon_path)) continue; var _temp = sprite_add(icon_path, 0, false, false, 0, 0); diff --git a/scripts/fontScrollBox/fontScrollBox.gml b/scripts/fontScrollBox/fontScrollBox.gml index 31b82a448..feebd63a2 100644 --- a/scripts/fontScrollBox/fontScrollBox.gml +++ b/scripts/fontScrollBox/fontScrollBox.gml @@ -6,7 +6,7 @@ function fontScrollBox(_onModify) : widget() constructor { open_ry = 0; align = fa_center; - extra_button = button(function() { shellOpenExplorer(DIRECTORY + "Fonts\\"); } ) + extra_button = button(function() { shellOpenExplorer(DIRECTORY + "Fonts/"); } ) .setTooltip("Open font folder") .setIcon(THEME.folder_content, 0, COLORS._main_icon); diff --git a/scripts/globals/globals.gml b/scripts/globals/globals.gml index d9a6d54bb..a06564388 100644 --- a/scripts/globals/globals.gml +++ b/scripts/globals/globals.gml @@ -75,6 +75,8 @@ #macro mouse_mx device_mouse_x_to_gui(0) #macro mouse_my device_mouse_y_to_gui(0) + #macro mouse_raw_x (device_mouse_raw_x(0) + window_get_x()) + #macro mouse_raw_y (device_mouse_raw_y(0) + window_get_y()) #macro mouse_ui [device_mouse_x_to_gui(0), device_mouse_y_to_gui(0)] #macro sFOCUS FOCUS == self.id diff --git a/scripts/gradients_function/gradients_function.gml b/scripts/gradients_function/gradients_function.gml index 5f3a7cfed..4075bf2fa 100644 --- a/scripts/gradients_function/gradients_function.gml +++ b/scripts/gradients_function/gradients_function.gml @@ -129,7 +129,7 @@ function gradientObject(color = c_black) constructor { _grad_color[i * 4 + 1] = color_get_green(keys[i].value) / 255; _grad_color[i * 4 + 2] = color_get_blue(keys[i].value) / 255; _grad_color[i * 4 + 3] = 1; - _grad_time[i] = keys[i].time; + _grad_time[i] = keys[i].time; } return [ _grad_color, _grad_time ]; diff --git a/scripts/locale_data/locale_data.gml b/scripts/locale_data/locale_data.gml index 327e8cd17..90ef2ce85 100644 --- a/scripts/locale_data/locale_data.gml +++ b/scripts/locale_data/locale_data.gml @@ -3,9 +3,9 @@ LOCALE = {} function __initLocale() { - var lfile = "data\\locale\\en.json"; + var lfile = "data/locale/en.json"; var root = DIRECTORY + "Locale"; - var path = root + "\\en.json"; + var path = root + "/en.json"; if(!directory_exists(root)) directory_create(root); diff --git a/scripts/mac_window_init/mac_window_init.gml b/scripts/mac_window_init/mac_window_init.gml new file mode 100644 index 000000000..743539d0d --- /dev/null +++ b/scripts/mac_window_init/mac_window_init.gml @@ -0,0 +1,57 @@ +enum WINDOW_DRAG_MODE { + move = 1 << 0, + resize_n = 1 << 1, + resize_e = 1 << 2, + resize_s = 1 << 3, + resize_w = 1 << 4, +} + +function mac_window_init() { + globalvar __win_is_maximized, __win_min_x, __win_min_y, __win_min_w, __win_min_h; + + __win_is_dragging = 0; + __win_drag_mx = 0; + __win_drag_my = 0; + __win_drag_sx = 0; + __win_drag_sy = 0; + __win_drag_sw = 0; + __win_drag_sh = 0; + + __win_is_maximized = false; + __win_min_x = 0; + __win_min_y = 0; + __win_min_w = 0; + __win_min_h = 0; +} + +function mac_window_maximize() { + if(__win_is_maximized) return; + + __win_is_maximized = true; + __win_min_x = window_get_x(); + __win_min_y = window_get_y(); + __win_min_w = window_get_width(); + __win_min_h = window_get_height(); + + var _w = display_get_width(); + var _h = display_get_height(); + + room_width = _w; + room_height = _h; + + display_set_gui_size(_w, _h); + window_set_rectangle(0, 0, _w, _h); + + display_refresh(); +} + +function mac_window_minimize() { + if(!__win_is_maximized) return; + + __win_is_maximized = false; + + window_set_position(__win_min_x, __win_min_y); + window_set_size(__win_min_w, __win_min_h); + + display_refresh(); +} \ No newline at end of file diff --git a/scripts/mac_window_init/mac_window_init.yy b/scripts/mac_window_init/mac_window_init.yy new file mode 100644 index 000000000..ca34a3394 --- /dev/null +++ b/scripts/mac_window_init/mac_window_init.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "mac_window_init", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "window", + "path": "folders/functions/window.yy", + }, +} \ No newline at end of file diff --git a/scripts/mac_window_step/mac_window_step.gml b/scripts/mac_window_step/mac_window_step.gml new file mode 100644 index 000000000..3dd5b2b9f --- /dev/null +++ b/scripts/mac_window_step/mac_window_step.gml @@ -0,0 +1,76 @@ +function mac_window_step() { + var _mx = mouse_raw_x; + var _my = mouse_raw_y; + + if(__win_is_dragging) { + if(__win_is_dragging == WINDOW_DRAG_MODE.move) + window_set_position(__win_drag_sx + (_mx - __win_drag_mx), __win_drag_sy + (_my - __win_drag_my)); + else { + if((__win_is_dragging & WINDOW_DRAG_MODE.resize_n) != 0) { + window_set_size(__win_drag_sw, __win_drag_sh - (_my - __win_drag_my)); + window_set_position(__win_drag_sx, __win_drag_sy + (_my - __win_drag_my)); + } else if((__win_is_dragging & WINDOW_DRAG_MODE.resize_s) != 0) + window_set_size(__win_drag_sw, __win_drag_sh + (_my - __win_drag_my)); + + if((__win_is_dragging & WINDOW_DRAG_MODE.resize_w) != 0) { + window_set_size(__win_drag_sw - (_mx - __win_drag_mx), __win_drag_sh); + window_set_position(__win_drag_sx + (_mx - __win_drag_mx), __win_drag_sy); + } else if((__win_is_dragging & WINDOW_DRAG_MODE.resize_e) != 0) + window_set_size(__win_drag_sw + (_mx - __win_drag_mx), __win_drag_sh); + } + + if(mouse_release(mb_left)) + __win_is_dragging = 0; + } + + if(__win_is_dragging == 0) { + if(point_in_rectangle(mouse_mx, mouse_my, 0, 0, ui(144), ui(40))) return; + + if(point_in_rectangle(mouse_mx, mouse_my, 6, 6, WIN_W - 6, ui(40))) { + if(mouse_press(mb_left)) { + __win_is_dragging = WINDOW_DRAG_MODE.move; + __win_drag_mx = mouse_raw_x; + __win_drag_my = mouse_raw_y; + __win_drag_sx = window_get_x(); + __win_drag_sy = window_get_y(); + __win_drag_sw = window_get_width(); + __win_drag_sh = window_get_height(); + } + } else { + var hover = 0; + + if(mouse_mx > WIN_W - 6) + hover |= WINDOW_DRAG_MODE.resize_e; + else if(mouse_mx < 6) + hover |= WINDOW_DRAG_MODE.resize_w; + + if(mouse_my > WIN_H - 6) + hover |= WINDOW_DRAG_MODE.resize_s; + else if(mouse_my < 6) + hover |= WINDOW_DRAG_MODE.resize_n; + + if(hover == WINDOW_DRAG_MODE.resize_n || hover == WINDOW_DRAG_MODE.resize_s) + CURSOR = cr_size_ns; + else if(hover == WINDOW_DRAG_MODE.resize_w || hover == WINDOW_DRAG_MODE.resize_e) + CURSOR = cr_size_we; + else if(hover == (WINDOW_DRAG_MODE.resize_n | WINDOW_DRAG_MODE.resize_e)) + CURSOR = cr_size_nesw; + else if(hover == (WINDOW_DRAG_MODE.resize_s | WINDOW_DRAG_MODE.resize_w)) + CURSOR = cr_size_nesw; + else if(hover == (WINDOW_DRAG_MODE.resize_n | WINDOW_DRAG_MODE.resize_w)) + CURSOR = cr_size_nwse; + else if(hover == (WINDOW_DRAG_MODE.resize_s | WINDOW_DRAG_MODE.resize_e)) + CURSOR = cr_size_nwse; + + if(hover > 0 && mouse_press(mb_left)) { + __win_is_dragging = hover; + __win_drag_mx = mouse_raw_x; + __win_drag_my = mouse_raw_y; + __win_drag_sx = window_get_x(); + __win_drag_sy = window_get_y(); + __win_drag_sw = window_get_width(); + __win_drag_sh = window_get_height(); + } + } + } +} \ No newline at end of file diff --git a/scripts/mac_window_step/mac_window_step.yy b/scripts/mac_window_step/mac_window_step.yy new file mode 100644 index 000000000..2da2ed4fd --- /dev/null +++ b/scripts/mac_window_step/mac_window_step.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "mac_window_step", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "window", + "path": "folders/functions/window.yy", + }, +} \ No newline at end of file diff --git a/scripts/migration_function/migration_function.gml b/scripts/migration_function/migration_function.gml index 311e1435e..938f556a8 100644 --- a/scripts/migration_function/migration_function.gml +++ b/scripts/migration_function/migration_function.gml @@ -1,5 +1,5 @@ function __migration_check() { - var oldDir = environment_get_variable("userprofile") + "\\AppData\\Local\\Pixels_Composer\\"; + var oldDir = environment_get_variable("userprofile") + "/AppData/Local/Pixels_Composer/"; if(!directory_exists(oldDir)) return; var mig = oldDir + "migration"; diff --git a/scripts/node_3d_obj/node_3D_obj.gml b/scripts/node_3d_obj/node_3D_obj.gml index 6260ecb87..34e5cab0d 100644 --- a/scripts/node_3d_obj/node_3D_obj.gml +++ b/scripts/node_3d_obj/node_3D_obj.gml @@ -158,7 +158,7 @@ function Node_3D_Obj(_x, _y, _group = noone) : Node(_x, _y, _group) constructor materialIndex = _v.material_index; use_normal = _v.use_normal; if(_v.mtl_path != "") - _pathMtl = _dir + "\\" + _v.mtl_path; + _pathMtl = _dir + "/" + _v.mtl_path; } if(updateMat) { diff --git a/scripts/node_export/node_export.gml b/scripts/node_export/node_export.gml index 468e77b16..b051192b7 100644 --- a/scripts/node_export/node_export.gml +++ b/scripts/node_export/node_export.gml @@ -89,10 +89,10 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor ["Settings", false], 8, 5, 6, 7, 10, 11, ]; - directory = DIRECTORY + "temp\\" + string(irandom_range(100000, 999999)); - converter = working_directory + "ImageMagick\\convert.exe"; - magick = working_directory + "ImageMagick\\magick.exe"; - webp = working_directory + "webp\\webpmux.exe"; + directory = DIRECTORY + "temp/" + string(irandom_range(100000, 999999)); + converter = working_directory + "ImageMagick/convert.exe"; + magick = working_directory + "ImageMagick/magick.exe"; + webp = working_directory + "webp/webpmux.exe"; static onValueUpdate = function(_index) { var form = inputs[| 3].getValue(); @@ -204,15 +204,15 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor res = true; break; case "d" : - var dir = filename_dir(path) + "\\"; + var dir = filename_dir(path) + "/"; var float_str = string_digits(str); if(float_str != "") { var float_val = string_digits(float_str); var dir_s = ""; - var sep = string_splice(dir, "\\"); + var sep = string_splice(dir, "/"); for(var j = 0; j < array_length(sep) - float_val; j++) { - dir_s += sep[j] + "\\"; + dir_s += sep[j] + "/"; } s += dir_s; } else @@ -254,7 +254,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var ext = array_safe_get(format_image, extd, ".png"); var _pathOut = _path; - var _pathTemp = directory + "\\" + string(irandom_range(10000, 99999)) + ".png"; + var _pathTemp = directory + "/" + string(irandom_range(10000, 99999)) + ".png"; switch(ext) { case ".png": @@ -299,7 +299,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(!is_surface(_surf)) continue; if(form == NODE_EXPORT_FORMAT.gif) { - p = directory + "\\" + string(i) + "\\" + string_lead_zero(ANIMATOR.current_frame, 5) + ".png"; + p = directory + "/" + string(i) + "/" + string_lead_zero(ANIMATOR.current_frame, 5) + ".png"; } else { if(is_array(path) && array_length(path) == array_length(surf)) p = pathString(path[ safe_mod(i, array_length(path)) ], suff, i); @@ -322,7 +322,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(is_array(path)) p = path[0]; if(form == NODE_EXPORT_FORMAT.gif) - p = directory + "\\" + string_lead_zero(ANIMATOR.current_frame, 5) + ".png"; + p = directory + "/" + string_lead_zero(ANIMATOR.current_frame, 5) + ".png"; else p = pathString(p, suff); @@ -453,7 +453,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(is_array(surf)) { for(var i = 0; i < array_length(surf); i++) { - temp_path = directory + "\\" + string(i) + "\\" + "*.png"; + temp_path = directory + "/" + string(i) + "/" + "*.png"; if(is_array(path)) target_path = pathString(path[ safe_mod(i, array_length(path)) ], suff, i); else @@ -472,10 +472,10 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(extd == 0) { target_path = string_replace(target_path, ".png", ".gif"); - renderGif("\"" + directory + "\\*.png\"", "\"" + target_path + "\""); + renderGif("\"" + directory + "/*.png\"", "\"" + target_path + "\""); } else if(extd == 1) { target_path = string_replace(target_path, ".png", ".webp"); - renderWebp(directory + "\\", target_path); + renderWebp(directory + "/", target_path); } } diff --git a/scripts/node_gradient/node_gradient.gml b/scripts/node_gradient/node_gradient.gml index bea34b3d0..0f184b158 100644 --- a/scripts/node_gradient/node_gradient.gml +++ b/scripts/node_gradient/node_gradient.gml @@ -40,11 +40,14 @@ function Node_Gradient(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) inputs[| 8] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); + inputs[| 9] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) + .setDisplay(VALUE_DISPLAY.slider, [0, 2, 0.01]); + outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); input_display_list = [ ["Output", true], 0, 8, - ["Gradient", false], 1, 5, 7, + ["Gradient", false], 1, 5, 9, 7, ["Shape", false], 2, 3, 4, 6 ]; @@ -66,11 +69,15 @@ function Node_Gradient(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) var _cnt = _data[6]; var _lop = _data[7]; var _msk = _data[8]; + var _sca = _data[9]; var _grad = _gra.toArray(); var _grad_color = _grad[0]; var _grad_time = _grad[1]; + for( var i = 0; i < array_length(_grad_time); i++ ) + _grad_time[i] = 0.5 + (_grad_time[i] - 0.5) * _sca; + if(_typ == 0 || _typ == 2) { inputs[| 3].setVisible(true); inputs[| 4].setVisible(false); diff --git a/scripts/node_gradient_shift/node_gradient_shift.gml b/scripts/node_gradient_shift/node_gradient_shift.gml index e78f73904..7bbf96ec2 100644 --- a/scripts/node_gradient_shift/node_gradient_shift.gml +++ b/scripts/node_gradient_shift/node_gradient_shift.gml @@ -13,6 +13,9 @@ function Node_Gradient_Shift(_x, _y, _group = noone) : Node_Processor(_x, _y, _g inputs[| 2] = nodeValue("Wrap", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false) + inputs[| 3] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) + .setDisplay(VALUE_DISPLAY.slider, [0, 2, 0.01]); + outputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, new gradientObject(c_white) ) .setDisplay(VALUE_DISPLAY.gradient); @@ -22,13 +25,14 @@ function Node_Gradient_Shift(_x, _y, _group = noone) : Node_Processor(_x, _y, _g var pal = _data[0]; var sft = _data[1]; var lop = _data[2]; + var sca = _data[3]; _outSurf = new gradientObject(); _outSurf.keys = []; for( var i = 0; i < array_length(pal.keys); i++ ) { var k = pal.keys[i]; - var key = new gradientKey(k.time + sft, k.value); + var key = new gradientKey((0.5 + (k.time - 0.5) * sca) + sft, k.value); if(lop) { var t = frac(key.time); diff --git a/scripts/node_guide/node_guide.gml b/scripts/node_guide/node_guide.gml index 21bc82b4f..af961d17b 100644 --- a/scripts/node_guide/node_guide.gml +++ b/scripts/node_guide/node_guide.gml @@ -4,7 +4,7 @@ function __generate_node_data() { CLONING = true; - var dir = DIRECTORY + "Nodes\\"; + var dir = DIRECTORY + "Nodes//"; if(!directory_exists(dir)) directory_create(dir); repeat(amo) { @@ -52,7 +52,7 @@ function __generate_node_data() { function __init_node_data() { global.NODE_GUIDE = {}; - var dir = DIRECTORY + "Nodes\\"; + var dir = DIRECTORY + "Nodes/"; if(!directory_exists(dir)) directory_create(dir); @@ -68,14 +68,16 @@ function __init_node_data() { f = file_find_next(); } - //var _l = dir + "\\version"; + //var _l = dir + "/version"; //if(file_exists(_l)) { // var res = json_load_struct(_l); // if(res.version >= VERSION) return; //} //json_save_struct(_l, { version: VERSION }); - var tooltipDir = DIRECTORY + "Nodes\\"; - if(file_exists("data\\tooltip.zip")) - zip_unzip("data\\tooltip.zip", tooltipDir); + var tooltipDir = DIRECTORY + "Nodes/"; + if(file_exists("data/tooltip.zip")) + zip_unzip("data/tooltip.zip", tooltipDir); + else + noti_status("Tooltip image file not found.") } \ No newline at end of file diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 640fdf6e4..c0706c53e 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -7,7 +7,7 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { tooltip = ""; - var pth = DIRECTORY + "Nodes\\tooltip\\" + node + ".png"; + var pth = DIRECTORY + "Nodes/tooltip/" + node + ".png"; if(file_exists(pth)) tooltip_spr = sprite_add(pth, 0, false, false, 0, 0); else diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index 23f90ceb1..0ea5ecc02 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -686,7 +686,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru editWidget = new fontScrollBox( function(val) { MODIFIED = true; - return setValueDirect(DIRECTORY + "Fonts\\" + FONT_INTERNAL[val]); + return setValueDirect(DIRECTORY + "Fonts/" + FONT_INTERNAL[val]); } ); break; diff --git a/scripts/panel_collection/panel_collection.gml b/scripts/panel_collection/panel_collection.gml index d892ae15e..67986459a 100644 --- a/scripts/panel_collection/panel_collection.gml +++ b/scripts/panel_collection/panel_collection.gml @@ -314,7 +314,7 @@ function Panel_Collection() : PanelContent() constructor { function saveCollection(_name, save_surface = true, metadata = noone) { if(PANEL_INSPECTOR.inspecting == noone) return; - var _pre_name = (data_path == ""? "" : data_path + "\\") + _name; + var _pre_name = (data_path == ""? "" : data_path + "/") + _name; var ext = filename_ext(_pre_name); var _path = ext == ".pxcc"? _pre_name : _pre_name + ".pxcc"; @@ -426,7 +426,7 @@ function Panel_Collection() : PanelContent() constructor { directory_create(txt); refreshContext(); }; - dia.path = context.path + "\\"; + dia.path = context.path + "/"; } draw_sprite_ui_uniform(THEME.folder_add, 0, bx + ui(12), by + ui(12), 1, COLORS._main_icon); draw_sprite_ui_uniform(THEME.folder_add, 1, bx + ui(12), by + ui(12), 1, COLORS._main_value_positive); diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index 79e4a462b..9d14591e4 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -979,7 +979,7 @@ function Panel_Graph() : PanelContent() constructor { return; } - var path = DIRECTORY + "temp\\url_pasted_" + string(irandom_range(100000, 999999)) + ".png"; + var path = DIRECTORY + "temp/url_pasted_" + string(irandom_range(100000, 999999)) + ".png"; var img = http_get_file(txt, path); CLONING = true; var node = Node_create_Image(0, 0); diff --git a/scripts/panel_menu/panel_menu.gml b/scripts/panel_menu/panel_menu.gml index f4eba8875..88b2d0728 100644 --- a/scripts/panel_menu/panel_menu.gml +++ b/scripts/panel_menu/panel_menu.gml @@ -7,6 +7,11 @@ function Panel_Menu() : PanelContent() constructor { noti_icon_show = 0; noti_icon_time = 0; + if(OS == os_windows) + action_buttons = ["exit", "maximize", "minimize", "fullscreen"]; + else if(OS == os_macosx) + action_buttons = ["exit", "minimize", "maximize", "fullscreen"]; + menu_file = [ menuItem(get_text("panel_menu_new", "New"), function() { NEW(); }, THEME.new_file, ["", "New file"]), menuItem(get_text("panel_menu_open", "Open") + "...", function() { LOAD(); }, THEME.noti_icon_file_load, ["", "Open"]), @@ -69,7 +74,7 @@ function Panel_Menu() : PanelContent() constructor { shellOpenExplorer(DIRECTORY); }, THEME.folder), menuItem(get_text("panel_menu_directory", "Open autosave directory"), function() { - shellOpenExplorer(DIRECTORY + "autosave\\"); + shellOpenExplorer(DIRECTORY + "autosave/"); }, THEME.folder), menuItem(get_text("panel_menu_reset_default", "Reset default collection, assets"), function() { zip_unzip("data/Collections.zip", DIRECTORY + "Collections"); @@ -221,16 +226,28 @@ function Panel_Menu() : PanelContent() constructor { menus[6][1] = STEAM_ENABLED? menu_help_steam : menu_help; var xx = ui(40); - if(OS == os_windows) xx = ui(24); - else if(OS == os_macosx) xx = ui(156); + if(OS == os_windows) + xx = ui(24); + else if(OS == os_macosx) { + xx = ui(140); + draw_set_color(COLORS._main_icon_dark); + draw_line_round(xx, ui(8), xx, h - ui(8), 3); + } - draw_sprite_ui_uniform(THEME.icon_24, 0, xx, h / 2, 1, c_white); - if(pHOVER && point_in_rectangle(mx, my, xx - ui(16), 0, xx + ui(16), ui(32))) { + var bx = xx; + if(OS == os_macosx) + bx = w - ui(24); + + draw_sprite_ui_uniform(THEME.icon_24, 0, bx, h / 2, 1, c_white); + if(pHOVER && point_in_rectangle(mx, my, bx - ui(16), 0, bx + ui(16), ui(32))) { if(mouse_press(mb_left, pFOCUS)) dialogCall(o_dialog_about); } - xx += ui(20); + if(OS == os_windows) + xx += ui(20); + else if(OS == os_macosx) + xx += ui(8); for(var i = 0; i < array_length(menus); i++) { draw_set_text(f_p1, fa_center, fa_center, COLORS._main_text); @@ -337,42 +354,70 @@ function Panel_Menu() : PanelContent() constructor { #region actions var bs = ui(28); - if(buttonInstant(THEME.button_hide_fill, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_exit, 0, COLORS._main_accent) == 2) { - window_close(); + for( var i = 0; i < array_length(action_buttons); i++ ) { + var action = action_buttons[i]; + + switch(action) { + case "exit": + if(buttonInstant(THEME.button_hide_fill, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_exit, 0, COLORS._main_accent) == 2) + window_close(); + break; + case "maximize": + var win_max = gameframe_is_maximized() || gameframe_is_fullscreen_window(); + if(OS == os_macosx) + win_max = __win_is_maximized; + + if(buttonInstant(THEME.button_hide_fill, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_maximize, win_max, [ COLORS._main_icon, CDEF.lime ]) == 2) { + if(OS == os_windows) { + if(gameframe_is_fullscreen_window()) { + gameframe_set_fullscreen(0); + gameframe_restore(); + } else if(gameframe_is_maximized()) + gameframe_restore(); + else + gameframe_maximize(); + } else if(OS == os_macosx) { + if(__win_is_maximized) mac_window_minimize(); + else mac_window_maximize(); + } + } + break; + case "minimize": + if(OS == os_windows) + if(buttonInstant(THEME.button_hide_fill, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_minimize, 0, [ COLORS._main_icon, CDEF.yellow ]) == -2) { + if(OS == os_windows) + gameframe_minimize(); + else if(OS == os_macosx) { + + } + } + + if(OS == os_macosx) { + buttonInstant(THEME.button_hide, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_minimize, 0, [ COLORS._main_icon, COLORS._main_icon ]); + } + break; + case "fullscreen": + var win_full = OS == os_windows? gameframe_is_fullscreen_window() : window_get_fullscreen(); + if(buttonInstant(THEME.button_hide_fill, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_fullscreen, win_full, [ COLORS._main_icon, CDEF.cyan ]) == 2) { + if(OS == os_windows) + gameframe_set_fullscreen(gameframe_is_fullscreen_window()? 0 : 2); + else if(OS == os_macosx) { + if(window_get_fullscreen()) { + window_set_fullscreen(false); + mac_window_minimize(); + } else + window_set_fullscreen(true); + } + } + break; + } + + if(OS == os_windows) x1 -= bs + ui(4); + else if(OS == os_macosx) x1 += bs + ui(4); } - if(OS == os_windows) x1 -= bs + ui(4); - else if(OS == os_macosx) x1 += bs + ui(4); - - var win_max = gameframe_is_maximized() || gameframe_is_fullscreen_window(); - if(buttonInstant(THEME.button_hide_fill, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_maximize, win_max, [ COLORS._main_icon, CDEF.lime ]) == 2) { - if(gameframe_is_fullscreen_window()) { - gameframe_set_fullscreen(0); - gameframe_restore(); - } else if(gameframe_is_maximized()) - gameframe_restore(); - else - gameframe_maximize(); - } - if(OS == os_windows) x1 -= bs + ui(4); - else if(OS == os_macosx) x1 += bs + ui(4); - - if(buttonInstant(THEME.button_hide_fill, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_minimize, 0, [ COLORS._main_icon, CDEF.yellow ]) == -2) { - gameframe_minimize(); - } - if(OS == os_windows) x1 -= bs + ui(4); - else if(OS == os_macosx) x1 += bs + ui(4); - - if(buttonInstant(THEME.button_hide_fill, x1 - bs, ui(6), bs, bs, [mx, my], pFOCUS, pHOVER,, THEME.window_fullscreen, gameframe_is_fullscreen_window(), [ COLORS._main_icon, CDEF.cyan ]) == 2) { - if(gameframe_is_fullscreen_window()) - gameframe_set_fullscreen(0); - else - gameframe_set_fullscreen(2); - } - if(OS == os_windows) x1 -= bs + ui(4); - else if(OS == os_macosx) x1 += bs + ui(4); #endregion - if(OS == os_macosx) x1 = w - ui(8); + if(OS == os_macosx) x1 = w - ui(40); #region version draw_set_text(f_p0, fa_right, fa_center, COLORS._main_text_sub); diff --git a/scripts/path_parser/path_parser.gml b/scripts/path_parser/path_parser.gml index 85140dfce..155813dc1 100644 --- a/scripts/path_parser/path_parser.gml +++ b/scripts/path_parser/path_parser.gml @@ -2,7 +2,7 @@ function try_get_path(path) { if(file_exists(path)) return path; - var local_path = filename_dir(CURRENT_PATH) + "\\" + path; + var local_path = filename_dir(CURRENT_PATH) + "/" + path; if(file_exists(local_path)) return local_path; diff --git a/scripts/preset_data/preset_data.gml b/scripts/preset_data/preset_data.gml index 40f89bbed..40db8a41f 100644 --- a/scripts/preset_data/preset_data.gml +++ b/scripts/preset_data/preset_data.gml @@ -8,7 +8,7 @@ if(!directory_exists(root)) directory_create(root); - var _l = root + "\\version"; + var _l = root + "/version"; if(file_exists(_l)) { var res = json_load_struct(_l); if(!is_struct(res) || !struct_has(res, "version") || res.version < VERSION) diff --git a/scripts/sample_projects/sample_projects.gml b/scripts/sample_projects/sample_projects.gml index 9fb350d52..650e95c21 100644 --- a/scripts/sample_projects/sample_projects.gml +++ b/scripts/sample_projects/sample_projects.gml @@ -4,13 +4,13 @@ #endregion function LOAD_FOLDER(list, folder) { - var path = directory_get_current_working() + folder; + var path = DIRECTORY + "Welcome files/" + folder; var file = file_find_first(path + "/*", fa_directory); - while(file != "") { + while(file != "") { if(filename_ext(file) == ".pxc") { - var full_path = path + "\\" + file; - var f = new FileObject(string_replace(filename_name(file), filename_ext(file), ""), full_path); + var full_path = path + "/" + file; + var f = new FileObject(filename_name_only(file), full_path); var icon_path = string_replace(full_path, filename_ext(full_path), ".png"); if(file_exists(icon_path)) { @@ -30,6 +30,8 @@ function LOAD_FOLDER(list, folder) { function LOAD_SAMPLE() { ds_list_clear(SAMPLE_PROJECTS); + zip_unzip("Welcome files.zip", DIRECTORY + "Welcome files") + LOAD_FOLDER(SAMPLE_PROJECTS, "Getting started"); LOAD_FOLDER(SAMPLE_PROJECTS, "Sample Projects"); } \ No newline at end of file diff --git a/scripts/sprite_loader/sprite_loader.gml b/scripts/sprite_loader/sprite_loader.gml index ce5018bc5..f1e0caa8d 100644 --- a/scripts/sprite_loader/sprite_loader.gml +++ b/scripts/sprite_loader/sprite_loader.gml @@ -3,7 +3,7 @@ function __init_theme() { if(!directory_exists(root)) directory_create(root); - //var _l = root + "\\version"; + //var _l = root + "/version"; //if(file_exists(_l)) { // var res = json_load_struct(_l); // if(res.version >= VERSION) return; diff --git a/scripts/steam_ugc_functions/steam_ugc_functions.gml b/scripts/steam_ugc_functions/steam_ugc_functions.gml index c306a0d69..ad9b7f6e7 100644 --- a/scripts/steam_ugc_functions/steam_ugc_functions.gml +++ b/scripts/steam_ugc_functions/steam_ugc_functions.gml @@ -48,14 +48,14 @@ function steamUCGload() { function __loadSteamUGC(file_id, item_map) { var _path = item_map[? "folder"]; - var f = file_find_first(_path + "\\*.pxcc", 0); + var f = file_find_first(_path + "/*.pxcc", 0); file_find_close(); if(f != "") { __loadSteamUGCCollection(file_id, f, _path); return; } - var p = file_find_first(_path + "\\*.pxc", 0); + var p = file_find_first(_path + "/*.pxc", 0); file_find_close(); if(p != "") { __loadSteamUGCProject(file_id, p, _path); @@ -65,8 +65,8 @@ function __loadSteamUGC(file_id, item_map) { function __loadSteamUGCCollection(file_id, f, path) { var name = string_replace(filename_name(f), ".pxcc", ""); - var file = new FileObject(name, path + "\\" + f); - var icon_path = string_replace(path + "\\" + f, ".pxcc", ".png"); + var file = new FileObject(name, path + "/" + f); + var icon_path = string_replace(path + "/" + f, ".pxcc", ".png"); if(file_exists(icon_path)) { var _temp = sprite_add(icon_path, 0, false, false, 0, 0); var ww = sprite_get_width(_temp); @@ -85,8 +85,8 @@ function __loadSteamUGCCollection(file_id, f, path) { function __loadSteamUGCProject(file_id, f, path) { var name = string_replace(filename_name(f), ".pxc", ""); - var file = new FileObject(name, path + "\\" + f); - var icon_path = path + "\\thumbnail.png"; + var file = new FileObject(name, path + "/" + f); + var icon_path = path + "/thumbnail.png"; file.spr_path = [icon_path, 1, false]; ds_list_add(STEAM_PROJECTS, file);