Terminal: Try to fix colours on mac, fix launcher and in-game windows overlapping each other

This commit is contained in:
UnknownShadow200 2024-06-11 22:54:59 +10:00
parent 0927f33763
commit 1668edf45a
8 changed files with 96 additions and 104 deletions

View File

@ -107,7 +107,7 @@
fmov.s fr3,@-r5 ! LS, dst->c = C
fneg fr7 ! LS, W = -W
fmov.s fr2,@-r5 ! LS, dst->v = V
fcmp/gt fr7,fr6 ! CO, T = Z > W (i.e. Z > -W)
fcmp/gt fr7,fr6 ! FE, T = Z > W (i.e. Z > -W)
fmov.s fr1,@-r5 ! LS, dst->u = U
movt r0 ! EX, CLIPFLAGS = T
fmov.s fr6,@-r5 ! LS, dst->z = Z
@ -121,7 +121,7 @@
fmov.s fr3,@-r5 ! LS, dst->c = C
fneg fr7 ! LS, W = -W
fmov.s fr2,@-r5 ! LS, dst->v = V
fcmp/gt fr7,fr6 ! CO, T = Z > W (i.e. Z > -W)
fcmp/gt fr7,fr6 ! FE, T = Z > W (i.e. Z > -W)
fmov.s fr1,@-r5 ! LS, dst->u = U
movt r2 ! EX, tmp = T
fmov.s fr6,@-r5 ! LS, dst->z = Z
@ -137,7 +137,7 @@
fmov.s fr3,@-r5 ! LS, dst->c = C
fneg fr7 ! LS, W = -W
fmov.s fr2,@-r5 ! LS, dst->v = V
fcmp/gt fr7,fr6 ! CO, T = Z > W (i.e. Z > -W)
fcmp/gt fr7,fr6 ! FE, T = Z > W (i.e. Z > -W)
fmov.s fr1,@-r5 ! LS, dst->u = U
movt r2 ! EX, tmp = T
fmov.s fr6,@-r5 ! LS, dst->z = Z
@ -153,7 +153,7 @@
fmov.s fr3,@-r5 ! LS, dst->c = C
fneg fr7 ! LS, W = -W
fmov.s fr2,@-r5 ! LS, dst->v = V
fcmp/gt fr7,fr6 ! CO, T = Z > W (i.e. Z > -W)
fcmp/gt fr7,fr6 ! FE, T = Z > W (i.e. Z > -W)
fmov.s fr1,@-r5 ! LS, dst->u = U
movt r2 ! EX, tmp = T
fmov.s fr6,@-r5 ! LS, dst->z = Z
@ -184,13 +184,13 @@
!fr10 = VIEWPORT_X_PLUS_HWIDTH
!fr11 = VIEWPORT_Y_PLUS_HHEIGHT
.macro ViewportTransformSetup viewport_addr
mova \viewport_addr, r0 ! EX, r0 = &VIEWPORT
.macro ViewportTransformSetup vp_addr
mova \vp_addr, r0 ! EX, r0 = &VIEWPORT
fmov.s @r0+,fr8 ! LS, fr8 = VIEWPORT_HWIDTH
fmov.s @r0+,fr9 ! LS, fr9 = VIEWPORT_HHEIGHT
fmov.s @r0+,fr10 ! LS, fr10 = VIEWPORT_X_PLUS_HWIDTH
fmov.s @r0+,fr11 ! LS, fr11 = VIEWPORT_Y_PLUS_HHEIGHT
nop ! MT, align to even instructions
nop ! MT (align to even instructions boundary)
.endm
.macro ViewportTransformVertex

View File

@ -27,16 +27,12 @@ void Platform_Log(const char* msg, int len) {
/*########################################################################################################################*
*-----------------------------------------------------Process/Module------------------------------------------------------*
*#########################################################################################################################*/
static char gameArgs[GAME_MAX_CMDARGS][STRING_SIZE];
static int gameNumArgs;
cc_result Process_StartGame2(const cc_string* args, int numArgs) {
for (int i = 0; i < numArgs; i++) {
String_CopyToRawArray(gameArgs[i], &args[i]);
}
return SetGameArgs(args, numArgs);
}
gameNumArgs = numArgs;
return 0;
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* args) {
return GetGameArgs(args);
}
cc_result Process_StartOpen(const cc_string* args) {
@ -102,17 +98,6 @@ void Directory_GetCachePath(cc_string* path) {
/*########################################################################################################################*
*-----------------------------------------------------Configuration-------------------------------------------------------*
*#########################################################################################################################*/
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* args) {
int count = gameNumArgs;
for (int i = 0; i < count; i++) {
args[i] = String_FromRawArray(gameArgs[i]);
}
// clear arguments so after game is closed, launcher is started
gameNumArgs = 0;
return count;
}
#include "Window.h"
cc_result Platform_SetDefaultCurrentDirectory(int argc, char **argv) {
cc_string dir; char dirBuffer[FILENAME_SIZE + 1];

View File

@ -756,13 +756,16 @@ cc_result Process_StartGame2(const cc_string* args, int numArgs) {
char path[NATIVE_STR_LEN];
int i, j, len = 0;
char* argv[15];
cc_result res;
if (Platform_SingleProcess) return SetGameArgs(args, numArgs);
cc_result res = Process_RawGetExePath(path, &len);
res = Process_RawGetExePath(path, &len);
if (res) return res;
path[len] = '\0';
argv[0] = path;
for (i = 0, j = 1; i < numArgs; i++, j++) {
for (i = 0, j = 1; i < numArgs; i++, j++)
{
String_EncodeUtf8(raw[i], &args[i]);
argv[j] = raw[i];
}
@ -1490,7 +1493,7 @@ cc_result Platform_Decrypt(const void* data, int len, cc_string* dst) {
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* args) {
int i, count;
argc--; argv++; /* skip executable path argument */
if (Platform_SingleProcess) return GetGameArgs(args);
#if defined CC_BUILD_MACOS
/* Sometimes a "-psn_0_[number]" argument is added before actual args */

View File

@ -707,6 +707,7 @@ cc_result Process_StartGame2(const cc_string* args, int numArgs) {
cc_result res;
int len, i;
if (Platform_SingleProcess) return SetGameArgs(args, numArgs);
if ((res = Process_RawGetExePath(&path, &len))) return res;
si.wide.cb = sizeof(STARTUPINFOW);
@ -1079,8 +1080,10 @@ int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* arg
cc_string cmdArgs = String_FromReadonly(GetCommandLineA());
int i;
Platform_NextArg(&cmdArgs); /* skip exe path */
if (Platform_SingleProcess) return GetGameArgs(args);
for (i = 0; i < GAME_MAX_CMDARGS; i++) {
for (i = 0; i < GAME_MAX_CMDARGS; i++)
{
args[i] = Platform_NextArg(&cmdArgs);
if (!args[i].length) break;

View File

@ -25,9 +25,6 @@
#include <sys/kd.h>
#include <linux/keyboard.h>
#endif
#ifdef CC_BUILD_MACOS
#define ONLY_256
#endif
/*########################################################################################################################*
@ -41,8 +38,18 @@
#define BOX_CHAR "\xE2\x96\x84"
#endif
#define CHARS_PER_CELL 2
#ifdef CC_BUILD_MACOS
// iTerm only displays trucolour properly with :
#define SEP_STR ":"
#define SEP_CHAR ':'
#else
#define SEP_STR ";"
#define SEP_CHAR ';'
#endif
static cc_bool pendingResize, pendingClose;
static int supportsTruecolor;
#define CHARS_PER_CELL 2
#define CSI "\x1B["
#define ERASE_CMD(cmd) CSI cmd "J"
@ -89,6 +96,7 @@ static void HookTerminal(void) {
// https://stackoverflow.com/questions/37069599/cant-read-mouse-event-use-readconsoleinput-in-c
SetConsoleMode(hStdin, ENABLE_EXTENDED_FLAGS | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | ENABLE_PROCESSED_INPUT);
SetConsoleMode(hStdout, ENABLE_VIRTUAL_TERMINAL_PROCESSING | ENABLE_PROCESSED_OUTPUT);
supportsTruecolor = true;
}
static void UnhookTerminal(void) {
@ -144,6 +152,8 @@ static void HookTerminal(void) {
OutputConst(DEC_PM_SET("1015")); // Ps = 1 0 1 5 ⇒ Enable urxvt Mouse Mode.
OutputConst(DEC_PM_SET("1006")); // Ps = 1 0 0 6 ⇒ Enable SGR Mouse Mode, xterm.
OutputConst(DEC_PM_RESET("25")); // Ps = 2 5 ⇒ Show cursor (DECTCEM), VT220.
supportsTruecolor = true;
}
static void UnhookTerminal(void) {
@ -212,8 +222,7 @@ static int MapNativeKey(DWORD vk_key) {
return key;
}
static void KeyEventProc(KEY_EVENT_RECORD ker)
{
static void KeyEventProc(KEY_EVENT_RECORD ker) {
int key = MapNativeKey(ker.wVirtualKeyCode);
int uni = ker.uChar.UnicodeChar;
@ -394,6 +403,7 @@ void Window_Init(void) {
HookTerminal();
UpdateDimensions();
HookSignals();
Platform_SingleProcess = true;
}
void Window_Free(void) {
@ -582,31 +592,31 @@ void Window_DrawFramebuffer(Rect2D r, struct Bitmap* bmp) {
// https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
str.length = 0;
#ifndef ONLY_256
String_AppendConst(&str, CSI "48;2;");
String_AppendInt( &str, BitmapCol_R(top));
String_Append( &str, ';');
String_AppendInt( &str, BitmapCol_G(top));
String_Append( &str, ';');
String_AppendInt( &str, BitmapCol_B(top));
String_Append( &str, 'm');
String_AppendConst(&str, CSI "38;2;");
String_AppendInt( &str, BitmapCol_R(bot));
String_Append( &str, ';');
String_AppendInt( &str, BitmapCol_G(bot));
String_Append( &str, ';');
String_AppendInt( &str, BitmapCol_B(bot));
String_Append( &str, 'm');
#else
String_AppendConst(&str, CSI "48;5;");
String_AppendInt( &str, CalcIndex(top));
String_Append( &str, 'm');
String_AppendConst(&str, CSI "38;5;");
String_AppendInt( &str, CalcIndex(bot));
String_Append( &str, 'm');
#endif
if (supportsTruecolor) {
String_AppendConst(&str, CSI "48" SEP_STR "2" SEP_STR);
String_AppendInt( &str, BitmapCol_R(top));
String_Append( &str, SEP_CHAR);
String_AppendInt( &str, BitmapCol_G(top));
String_Append( &str, SEP_CHAR);
String_AppendInt( &str, BitmapCol_B(top));
String_Append( &str, 'm');
String_AppendConst(&str, CSI "38" SEP_STR "2" SEP_STR);
String_AppendInt( &str, BitmapCol_R(bot));
String_Append( &str, SEP_CHAR);
String_AppendInt( &str, BitmapCol_G(bot));
String_Append( &str, SEP_CHAR);
String_AppendInt( &str, BitmapCol_B(bot));
String_Append( &str, 'm');
} else {
String_AppendConst(&str, CSI "48" SEP_STR "5" SEP_STR);
String_AppendInt( &str, CalcIndex(top));
String_Append( &str, 'm');
String_AppendConst(&str, CSI "38" SEP_STR "5" SEP_STR);
String_AppendInt( &str, CalcIndex(bot));
String_Append( &str, 'm');
}
String_AppendConst(&str, BOX_CHAR);
OutputConsole(buf, str.length);

View File

@ -80,6 +80,37 @@ void Platform_LogConst(const char* message) {
Platform_Log(message, String_Length(message));
}
/*########################################################################################################################*
*-----------------------------------------------------Process/Module------------------------------------------------------*
*#########################################################################################################################*/
static char gameArgs[GAME_MAX_CMDARGS][STRING_SIZE];
static int gameNumArgs;
static cc_bool gameHasArgs;
static cc_result SetGameArgs(const cc_string* args, int numArgs) {
int i;
for (i = 0; i < numArgs; i++)
{
String_CopyToRawArray(gameArgs[i], &args[i]);
}
gameHasArgs = true;
gameNumArgs = numArgs;
return 0;
}
static int GetGameArgs(cc_string* args) {
int i, count = gameNumArgs;
for (i = 0; i < count; i++)
{
args[i] = String_FromRawArray(gameArgs[i]);
}
/* clear arguments so after game is closed, launcher is started */
gameNumArgs = 0;
return count;
}
/*########################################################################################################################*
*----------------------------------------------------------Misc-----------------------------------------------------------*

View File

@ -36,32 +36,9 @@ void Directory_GetCachePath(cc_string* path) { }
/*########################################################################################################################*
*-----------------------------------------------------Process/Module------------------------------------------------------*
*#########################################################################################################################*/
static char gameArgs[GAME_MAX_CMDARGS][STRING_SIZE];
static int gameNumArgs;
static cc_bool gameHasArgs;
cc_result Process_StartGame2(const cc_string* args, int numArgs) {
for (int i = 0; i < numArgs; i++)
{
String_CopyToRawArray(gameArgs[i], &args[i]);
}
Platform_LogConst("START CLASSICUBE");
gameHasArgs = true;
gameNumArgs = numArgs;
return 0;
}
static int GetGameArgs(cc_string* args) {
int count = gameNumArgs;
for (int i = 0; i < count; i++)
{
args[i] = String_FromRawArray(gameArgs[i]);
}
// clear arguments so after game is closed, launcher is started
gameNumArgs = 0;
return count;
return SetGameArgs(args, numArgs);
}
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* args) {

View File

@ -871,9 +871,6 @@ cc_result Updater_SetNewBuildTime(cc_uint64 t) { return ERR_NOT_SUPPORTED; }
/*########################################################################################################################*
*--------------------------------------------------------Platform--------------------------------------------------------*
*#########################################################################################################################*/
static char gameArgs[GAME_MAX_CMDARGS][STRING_SIZE];
static int gameNumArgs;
cc_result Process_StartOpen(const cc_string* args) {
// openURL - iOS 2.0 (deprecated)
NSString* str = ToNSString(args);
@ -884,25 +881,11 @@ cc_result Process_StartOpen(const cc_string* args) {
}
cc_result Process_StartGame2(const cc_string* args, int numArgs) {
for (int i = 0; i < numArgs; i++)
{
String_CopyToRawArray(gameArgs[i], &args[i]);
}
gameNumArgs = numArgs;
return 0;
return SetGameArgs(args, numArgs);
}
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* args) {
int count = gameNumArgs;
for (int i = 0; i < count; i++)
{
args[i] = String_FromRawArray(gameArgs[i]);
}
// clear arguments so after game is closed, launcher is started
gameNumArgs = 0;
return count;
return GetGameArgs(args);
}
cc_result Platform_SetDefaultCurrentDirectory(int argc, char **argv) {