Mac attempt 1

This commit is contained in:
Tanasart 2023-03-08 18:14:01 +07:00
parent 1fcc07a729
commit b72516568e
41 changed files with 384 additions and 125 deletions

View file

@ -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",},

View file

@ -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,},

BIN
datafiles/Welcome files.zip Normal file

Binary file not shown.

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -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);

View file

@ -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) {

View file

@ -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

View file

@ -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);

View file

@ -5,7 +5,6 @@
#endregion
#region steam
if(STEAM_ENABLED) {
if(STEAM_ENABLED)
steam_shutdown();
}
#endregion

View file

@ -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

View file

@ -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);

View file

@ -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,
}

View file

@ -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)

View file

@ -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)

View file

@ -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);

View file

@ -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);

View file

@ -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

View file

@ -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 ];

View file

@ -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);

View file

@ -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();
}

View file

@ -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",
},
}

View file

@ -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();
}
}
}
}

View file

@ -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",
},
}

View file

@ -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";

View file

@ -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) {

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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);

View file

@ -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.")
}

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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);

View file

@ -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();
}
if(OS == os_windows) x1 -= bs + ui(4);
else if(OS == os_macosx) x1 += bs + ui(4);
for( var i = 0; i < array_length(action_buttons); i++ ) {
var action = action_buttons[i];
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);
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_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_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(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_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);
#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);

View file

@ -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;

View file

@ -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)

View file

@ -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 != "") {
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");
}

View file

@ -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;

View file

@ -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);