mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-11 16:45:48 -04:00
Terminal: Try to fix colours on mac, fix launcher and in-game windows overlapping each other
This commit is contained in:
parent
0927f33763
commit
1668edf45a
@ -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
|
||||
|
@ -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];
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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-----------------------------------------------------------*
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user