From c0099ab36bf9606c5503ceb0fa0d5b64f71c7203 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 17 Apr 2024 09:54:17 +0200 Subject: Unrelated: These changes are important but related to nothing. - Window now becomes Wm, as in Window manager. - Fix entrypoint for FragLib. - Remove CoreEvents to be replaced with Event Server, reworked Display Server. Signed-off-by: Amlal El Mahrouss --- Public/Developer/SystemLib/Sources/App.c | 29 +++++++ Public/Developer/SystemLib/Sources/Application.c | 25 ------ Public/Developer/SystemLib/Sources/File.c | 35 ++++---- Public/Developer/SystemLib/Sources/Heap.c | 7 ++ Public/Developer/SystemLib/Sources/Math.c | 7 ++ Public/Developer/SystemLib/Sources/Window.c | 76 ----------------- Public/Developer/SystemLib/Sources/Wm.c | 103 +++++++++++++++++++++++ 7 files changed, 164 insertions(+), 118 deletions(-) create mode 100644 Public/Developer/SystemLib/Sources/App.c delete mode 100644 Public/Developer/SystemLib/Sources/Application.c create mode 100644 Public/Developer/SystemLib/Sources/Math.c delete mode 100644 Public/Developer/SystemLib/Sources/Window.c create mode 100644 Public/Developer/SystemLib/Sources/Wm.c (limited to 'Public/Developer/SystemLib/Sources') diff --git a/Public/Developer/SystemLib/Sources/App.c b/Public/Developer/SystemLib/Sources/App.c new file mode 100644 index 00000000..9d390795 --- /dev/null +++ b/Public/Developer/SystemLib/Sources/App.c @@ -0,0 +1,29 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + +------------------------------------------- */ + +#include + +/// @brief Main Application object, retrieved from the RtGetAppPointer symbol. +ApplicationRef kSharedApplication = NullPtr; + +/// @brief Gets the app arguments count. +/// @param void no arguments. +/// @return +CA_EXTERN_C SizeType RtGetAppArgumentsCount(VoidType) { + CA_MUST_PASS(kSharedApplication); + + return kSharedApplication->Invoke(kSharedApplication, kCallGetArgsCount); +} + +/// @brief Gets the app arguments pointer. +/// @param void no arguments. +/// @return +CA_EXTERN_C CharacterTypeUTF8** RtGetAppArgumentsPtr(VoidType) { + CA_MUST_PASS(kSharedApplication); + + return (CharacterTypeUTF8**)kSharedApplication->Invoke(kSharedApplication, + kCallGetArgsPtr); +} diff --git a/Public/Developer/SystemLib/Sources/Application.c b/Public/Developer/SystemLib/Sources/Application.c deleted file mode 100644 index 69f178af..00000000 --- a/Public/Developer/SystemLib/Sources/Application.c +++ /dev/null @@ -1,25 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#include - -/// @brief Main Application object, retrieved from the RtGetApp symbol. -ApplicationRef kSharedApplication = NullPtr; - -/// @brief Gets the app arguments count. -/// @param void no arguments. -/// @return -CA_EXTERN_C SizeType RtGetAppArgumentsCount(VoidType) { - return kSharedApplication->Invoke(kSharedApplication, kCallGetArgsCount); -} - -/// @brief Gets the app arguments pointer. -/// @param void no arguments. -/// @return -CA_EXTERN_C CharacterTypeUTF8** RtGetAppArgumentsPtr(VoidType) { - return (CharacterTypeUTF8**)kSharedApplication->Invoke(kSharedApplication, - kCallGetArgsPtr); -} diff --git a/Public/Developer/SystemLib/Sources/File.c b/Public/Developer/SystemLib/Sources/File.c index ca23d9f7..39a4aff0 100644 --- a/Public/Developer/SystemLib/Sources/File.c +++ b/Public/Developer/SystemLib/Sources/File.c @@ -8,31 +8,32 @@ #include enum FileOp { - kFlushFile, - kReadFork, - kWriteFork, - kOpenFork, - kCloseFork, + kFlushFile, + kReadFork, + kWriteFork, + kOpenFork, + kCloseFork, }; /// @brief Opens a new file. /// @param path where to find it. -/// @param r the restrict (rw, rwe, r+, w+, r, w) -/// @return -CA_EXTERN_C FSRef FsOpenFile(const CharacterTypeUTF8* path, const CharacterTypeUTF8* r) { - CA_MUST_PASS(kSharedApplication); - CA_MUST_PASS(path); - CA_MUST_PASS(r); - - return kSharedApplication->Invoke(kSharedApplication, kCallOpenFile, path, r); +/// @param rest the restrict (rw, rwe, r+, w+, r, w) +/// @return FSRef the file. +CA_EXTERN_C FSRef FsOpenFile(const CharacterTypeUTF8* path, + const CharacterTypeUTF8* rest) { + CA_MUST_PASS(kSharedApplication); + CA_MUST_PASS(path && FsIsValidPath(path) == Yes); + CA_MUST_PASS(rest); + + return kSharedApplication->Invoke(kSharedApplication, kCallOpenFile, path, rest); } /// @brief Closes the file and flushes it to the said file. /// @param refFs the filesystem reference. -/// @return +/// @return CA_EXTERN_C VoidType FsCloseFile(FSRef refFs) { - CA_MUST_PASS(kSharedApplication); + CA_MUST_PASS(kSharedApplication); - kSharedApplication->Invoke(kSharedApplication, refFs, kFlushFile); - kSharedApplication->Invoke(kSharedApplication, kCallCloseFile, refFs); + kSharedApplication->Invoke(kSharedApplication, refFs, kFlushFile); + kSharedApplication->Invoke(kSharedApplication, kCallCloseFile, refFs); } diff --git a/Public/Developer/SystemLib/Sources/Heap.c b/Public/Developer/SystemLib/Sources/Heap.c index 041c5764..3db7a374 100644 --- a/Public/Developer/SystemLib/Sources/Heap.c +++ b/Public/Developer/SystemLib/Sources/Heap.c @@ -12,6 +12,7 @@ /// @param flags flags. /// @return CA_EXTERN_C PtrVoidType RtTlsAllocate(QWordType sz, DWordType flags) { + CA_MUST_PASS(kSharedApplication); CA_MUST_PASS(sz); CA_MUST_PASS(flags); @@ -22,7 +23,9 @@ CA_EXTERN_C PtrVoidType RtTlsAllocate(QWordType sz, DWordType flags) { /// @brief Free pointer from the user's heap. /// @param ptr the pointer to free. CA_EXTERN_C VoidType RtTlsFree(PtrVoidType ptr) { + CA_MUST_PASS(kSharedApplication); CA_MUST_PASS(ptr); + CA_UNREFERENCED_PARAMETER( kSharedApplication->Invoke(kSharedApplication, kCallFreePtr, ptr)); } @@ -31,6 +34,8 @@ CA_EXTERN_C VoidType RtTlsFree(PtrVoidType ptr) { /// @param ptr the pointer to find. /// @return the size. CA_EXTERN_C QWordType RtTlsGetSize(PtrVoidType ptr) { + CA_MUST_PASS(kSharedApplication); + CA_MUST_PASS(ptr); return kSharedApplication->Invoke(kSharedApplication, kCallSizePtr, ptr); } @@ -39,6 +44,8 @@ CA_EXTERN_C QWordType RtTlsGetSize(PtrVoidType ptr) { /// @param ptr the pointer to check. /// @return if it exists CA_EXTERN_C BooleanType RtTlsPtrExists(PtrVoidType ptr) { + CA_MUST_PASS(kSharedApplication); + CA_MUST_PASS(ptr); return kSharedApplication->Invoke(kSharedApplication, kCallCheckPtr, ptr); } diff --git a/Public/Developer/SystemLib/Sources/Math.c b/Public/Developer/SystemLib/Sources/Math.c new file mode 100644 index 00000000..20919711 --- /dev/null +++ b/Public/Developer/SystemLib/Sources/Math.c @@ -0,0 +1,7 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + +------------------------------------------- */ + +#include diff --git a/Public/Developer/SystemLib/Sources/Window.c b/Public/Developer/SystemLib/Sources/Window.c deleted file mode 100644 index 196ac537..00000000 --- a/Public/Developer/SystemLib/Sources/Window.c +++ /dev/null @@ -1,76 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#include - -/// invalid resource handle, they always start from 1. -#define kInvalidRsrc (0U) - -/// @brief Color refs. - -const ColorRef kRgbRed = 0x000000FF; -const ColorRef kRgbGreen = 0x0000FF00; -const ColorRef kRgbBlue = 0x00FF0000; -const ColorRef kRgbBlack = 0x00000000; -const ColorRef kRgbWhite = 0xFFFFFFFF; - -///////////////////////////////////////////////////////////////////////// - -CA_EXTERN_C WindowPort* WmCreateWindow(const CharacterTypeUTF8* name, - const DWordType rsrcId) { - CA_MUST_PASS(name); - CA_MUST_PASS(rsrcId != kInvalidRsrc); - - if (!name) return NullPtr; - if (rsrcId == kInvalidRsrc) return NullPtr; - - return (WindowPort*)kSharedApplication->Invoke( - kSharedApplication, kCallCreateWindow, name, rsrcId); -} - -///////////////////////////////////////////////////////////////////////// - -CA_EXTERN_C VoidType WmReleaseWindow(WindowPort* winPort) { - CA_MUST_PASS(winPort); - if (!winPort) return; - - kSharedApplication->Invoke(kSharedApplication, kCallCloseWindow, winPort); -} - -///////////////////////////////////////////////////////////////////////// - -CA_EXTERN_C WindowPort* WmCreateMenu(const CharacterTypeUTF8* name, - const DWordType rsrcId) { - CA_MUST_PASS(name); - CA_MUST_PASS(rsrcId != kInvalidRsrc); - - if (!name) return NullPtr; - if (rsrcId == kInvalidRsrc) return NullPtr; - - return (WindowPort*)kSharedApplication->Invoke(kSharedApplication, - kCallCreateMenu, name, rsrcId); -} - -///////////////////////////////////////////////////////////////////////// - -CA_EXTERN_C VoidType WmReleaseMenu(WindowPort* winPort) { - CA_MUST_PASS(winPort); - - if (!winPort) return; - kSharedApplication->Invoke(kSharedApplication, kCallCloseMenu, winPort); -} - -///////////////////////////////////////////////////////////////////////// - -CA_EXTERN_C Int32Type WmMoveWindow(WindowPort* id, WmPoint where) { - if (!id) return kWmErrInvalidArg; - - id->windowPosition.X = where.X; - id->windowPosition.Y = where.Y; - id->windowMoving = True; - - return 0; -} diff --git a/Public/Developer/SystemLib/Sources/Wm.c b/Public/Developer/SystemLib/Sources/Wm.c new file mode 100644 index 00000000..79eda22a --- /dev/null +++ b/Public/Developer/SystemLib/Sources/Wm.c @@ -0,0 +1,103 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + +------------------------------------------- */ + +#include +#include + +/// invalid resource handle, they always start from 1. +#define kInvalidRsrc (0U) + +/// @brief Color refs. + +const ColorRef kRgbRed = 0x000000FF; +const ColorRef kRgbGreen = 0x0000FF00; +const ColorRef kRgbBlue = 0x00FF0000; +const ColorRef kRgbBlack = 0x00000000; +const ColorRef kRgbWhite = 0xFFFFFFFF; + +///////////////////////////////////////////////////////////////////////// + +CA_EXTERN_C WindowPort* WmCreateWindow(const CharacterTypeUTF8* name, + const DWordType rsrcId) { + CA_MUST_PASS(name); + CA_MUST_PASS(rsrcId != kInvalidRsrc); + + if (!name) return NullPtr; + if (rsrcId == kInvalidRsrc) return NullPtr; + + return (WindowPort*)kSharedApplication->Invoke( + kSharedApplication, kCallCreateWindow, name, rsrcId); +} + +///////////////////////////////////////////////////////////////////////// + +CA_EXTERN_C VoidType WmReleaseWindow(WindowPort* winPort) { + CA_MUST_PASS(winPort); + if (!winPort) return; + + kSharedApplication->Invoke(kSharedApplication, kCallCloseWindow, winPort); +} + +///////////////////////////////////////////////////////////////////////// + +CA_EXTERN_C WindowPort* WmCreateMenu(const CharacterTypeUTF8* name, + const DWordType rsrcId) { + CA_MUST_PASS(name); + CA_MUST_PASS(rsrcId != kInvalidRsrc); + + if (!name) return NullPtr; + if (rsrcId == kInvalidRsrc) return NullPtr; + + return (WindowPort*)kSharedApplication->Invoke(kSharedApplication, + kCallCreateMenu, name, rsrcId); +} + +///////////////////////////////////////////////////////////////////////// + +CA_EXTERN_C VoidType WmReleaseMenu(WindowPort* winPort) { + CA_MUST_PASS(winPort); + + if (!winPort) return; + kSharedApplication->Invoke(kSharedApplication, kCallCloseMenu, winPort); +} + +///////////////////////////////////////////////////////////////////////// + +CA_EXTERN_C Int32Type WmMoveWindow(WindowPort* wndPort, WmPoint where) { + if (!wndPort) return kWmErrInvalidArg; + + wndPort->windowPosition.X = where.X; + wndPort->windowPosition.Y = where.Y; + wndPort->windowMoving = True; + + return 0; +} + +/// @brief Draws a blur effect on the window. +/// @param wndPort the window port. +CA_EXTERN_C VoidType WmBlur(WindowPort* wndPort) { + if (wndPort != NullPtr) { + WmGFXRef refGfx = wndPort->windowGfx; + + UInt32Type lookupTbl[4] = {0.21336, 0.41336, 0.61336, 0.81336}; + + for (SizeType width = 0; width < refGfx->DataFrameWidth; ++width) { + for (SizeType height = 0; height < refGfx->DataFrameHeight; ++height) { + refGfx->DataFrame[width * height] = + refGfx->DataFrame[width * height] * lookupTbl[MathRand() % 4]; + } + } + } +} + +/// @brief Causes the window to invalidate and redraw. +/// @param wndPort The Window port. +/// @return nothing. +CA_EXTERN_C VoidType WmInvalidateGfx(WindowPort* wndPort) { + if (wndPort) { + wndPort->windowInvalidate = Yes; + } +} \ No newline at end of file -- cgit v1.2.3