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 000000000..e328bc4fe Binary files /dev/null and b/datafiles/Welcome files.zip differ 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);