summaryrefslogtreecommitdiffhomepage
path: root/Public/Kits/System.Graphics
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-10 15:41:08 +0100
committerAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-10 15:41:08 +0100
commit5468ca71a59c9e24c1d392554e8f97f0c1705394 (patch)
tree1e8af47da852d4ad02a2ea48a967694c7bfc19c3 /Public/Kits/System.Graphics
parent94d7585ae766d777f41d07b1a98051d12a6a0256 (diff)
Kernel: Reworked StorageKit to add AHCI support.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'Public/Kits/System.Graphics')
-rw-r--r--Public/Kits/System.Graphics/.gitkeep0
-rw-r--r--Public/Kits/System.Graphics/Core.cxx14
-rw-r--r--Public/Kits/System.Graphics/Core.hxx185
-rw-r--r--Public/Kits/System.Graphics/Dim2d.cxx20
-rw-r--r--Public/Kits/System.Graphics/Dim2d.hxx38
-rw-r--r--Public/Kits/System.Graphics/Frame.cxx18
-rw-r--r--Public/Kits/System.Graphics/Frame.hxx59
-rw-r--r--Public/Kits/System.Graphics/Makefile20
-rw-r--r--Public/Kits/System.Graphics/Stylesheet.hxx49
-rw-r--r--Public/Kits/System.Graphics/compile_flags.txt4
10 files changed, 407 insertions, 0 deletions
diff --git a/Public/Kits/System.Graphics/.gitkeep b/Public/Kits/System.Graphics/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/Public/Kits/System.Graphics/.gitkeep
diff --git a/Public/Kits/System.Graphics/Core.cxx b/Public/Kits/System.Graphics/Core.cxx
new file mode 100644
index 00000000..9a218f88
--- /dev/null
+++ b/Public/Kits/System.Graphics/Core.cxx
@@ -0,0 +1,14 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: Core.cpp
+ Purpose:
+
+ Revision History:
+
+ 31/01/24: Added file (amlel)
+
+------------------------------------------- */
+
+#include <System.Graphics/Core.hxx>
diff --git a/Public/Kits/System.Graphics/Core.hxx b/Public/Kits/System.Graphics/Core.hxx
new file mode 100644
index 00000000..db9aa36f
--- /dev/null
+++ b/Public/Kits/System.Graphics/Core.hxx
@@ -0,0 +1,185 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: Core.hxx
+ Purpose:
+
+ Revision History:
+
+ 31/01/24: Added file (amlel)
+ 08/02/24: Update Form to GForm. (amlel)
+
+------------------------------------------- */
+
+#pragma once
+
+#include <CompilerKit/CompilerKit.hpp>
+#include <NewKit/Array.hpp>
+#include <NewKit/Defines.hpp>
+#include <NewKit/Ref.hpp>
+#include <NewKit/String.hpp>
+
+#define $() HCore::GApplication::Shared()->Document()
+
+#ifdef __IMPORT_LIB
+#define G_API __attribute__((pef_container(".IMPORT")))
+#else
+#define G_API __attribute__((pef_container(".EXPORT")))
+#endif // ifdef __EXPORT_LIB
+
+namespace HCore {
+template <typename... T>
+class GAction;
+
+class GString;
+class GNumber;
+class GVector2;
+class GBoolean;
+class GDocument;
+class GApplication;
+class GFrame;
+
+class G_API GBoolean {
+ private:
+ explicit GBoolean() : m_Value(false) {}
+
+ HCore::Boolean m_Value;
+
+ friend class GForm;
+
+ public:
+ static const GBoolean Construct(HCore::StringView& sw, HCore::Boolean value) {
+ GBoolean boolean;
+ boolean.m_Value = value;
+
+ return boolean;
+ }
+};
+
+template <typename... T>
+class G_API GAction {
+ explicit GAction(HCore::StringView& sw) { m_Name = sw; }
+
+ HCore::StringView m_Name;
+ void (*m_Action)(T&&... args);
+
+ friend class GForm;
+
+ public:
+ static const GAction Construct(HCore::StringView& sw,
+ void (*action)(T&&... args)) {
+ GAction actcls{sw};
+ actcls.m_Action = action;
+
+ return actcls;
+ }
+};
+
+class G_API GVector2 {
+ explicit GVector2(HCore::StringView& sw) : m_Vec2() {}
+
+ HCore::Array<HCore::Int, 3> m_Vec2;
+
+ friend class GForm;
+
+ public:
+ static const GVector2 Construct(HCore::StringView& sw,
+ HCore::Array<HCore::Int, 3>& vec2) {
+ GVector2 vec{sw};
+ vec.m_Vec2 = vec2;
+
+ return vec;
+ }
+};
+
+class G_API GNumber {
+ HCore::Int m_Number{0};
+ friend class GForm;
+
+ public:
+ static const GNumber Construct(HCore::Int& number) {
+ GNumber num;
+ num.m_Number = number;
+
+ return num;
+ }
+};
+
+class G_API GString {
+ explicit GString(HCore::StringView& content) {
+ m_Content = new HCore::StringView();
+ *m_Content = content;
+ }
+
+ HCore::StringView* m_Content;
+
+ friend class GForm;
+
+ public:
+ static const GString Construct(HCore::StringView& value) {
+ GString str{value};
+ return str;
+ }
+};
+
+class G_API GApplication final {
+ public:
+ explicit GApplication() = default;
+ ~GApplication() = default;
+
+ HCORE_COPY_DEFAULT(GApplication);
+
+ GDocument* Document() noexcept { return nullptr; }
+
+ static GApplication* Shared() noexcept {
+ STATIC GApplication* kApp = nullptr;
+
+ if (!kApp) kApp = new GApplication();
+
+ return kApp;
+ }
+};
+
+class G_API GDocument final {
+ public:
+ explicit GDocument(StringView& sv) : mString(GString::Construct(sv)) {}
+ ~GDocument() = default;
+
+ HCORE_COPY_DEFAULT(GDocument);
+
+ GFrame** GetAddressOf() noexcept { return &mFrame; }
+ GFrame* Get() noexcept { return mFrame; }
+
+ GString& Name() { return mString; }
+
+ private:
+ GFrame* mFrame{nullptr};
+ GString mString;
+};
+
+class GException final {
+ public:
+ explicit GException() = default;
+ ~GException() = default;
+
+ public:
+ HCORE_COPY_DEFAULT(GException);
+
+ public:
+ const char* Name() { return "GUI Error"; }
+ const char* Reason() { return mReason; }
+
+ private:
+ const char* mReason{"CoreAPI: GUI Exception!"};
+};
+
+template <typename GFrameType, typename GFrameBase>
+inline GFrameType* frame_cast(GFrameBase* Frame) {
+ if (!dynamic_cast<GFrameType*>(Frame)) {
+ throw GException();
+ }
+
+ return dynamic_cast<GFrameType*>(Frame);
+}
+} // namespace HCore
diff --git a/Public/Kits/System.Graphics/Dim2d.cxx b/Public/Kits/System.Graphics/Dim2d.cxx
new file mode 100644
index 00000000..8623a0e1
--- /dev/null
+++ b/Public/Kits/System.Graphics/Dim2d.cxx
@@ -0,0 +1,20 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: Dim2d.cpp
+ Purpose:
+
+ Revision History:
+
+ 31/01/24: Added file (amlel)
+
+------------------------------------------- */
+
+#include <System.Graphics/Dim2d.hxx>
+
+namespace HCore {
+HCore::UInt& Dim2d::X() { return m_X; }
+
+HCore::UInt& Dim2d::Y() { return m_Y; }
+} // namespace HCore
diff --git a/Public/Kits/System.Graphics/Dim2d.hxx b/Public/Kits/System.Graphics/Dim2d.hxx
new file mode 100644
index 00000000..a4f5fa8d
--- /dev/null
+++ b/Public/Kits/System.Graphics/Dim2d.hxx
@@ -0,0 +1,38 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: Dim2d.hpp
+ Purpose:
+
+ Revision History:
+
+ 31/01/24: Added file (amlel)
+ 3/10/24: Remname extension to .hxx
+
+------------------------------------------- */
+
+#ifndef __DIM2D__
+#define __DIM2D__
+
+#include <System.Graphics/Core.hxx>
+
+namespace HCore {
+class G_API Dim2d final {
+ public:
+ explicit Dim2d() = delete;
+ explicit Dim2d(const HCore::UInt& x, const HCore::UInt& y) : m_X(x), m_Y(y) {}
+
+ Dim2d& operator=(const Dim2d&) = default;
+ Dim2d(const Dim2d&) = default;
+
+ HCore::UInt& X();
+ HCore::UInt& Y();
+
+ private:
+ HCore::UInt m_X{0};
+ HCore::UInt m_Y{0};
+};
+} // namespace HCore
+
+#endif /* ifndef __DIM2D__ */
diff --git a/Public/Kits/System.Graphics/Frame.cxx b/Public/Kits/System.Graphics/Frame.cxx
new file mode 100644
index 00000000..10726b57
--- /dev/null
+++ b/Public/Kits/System.Graphics/Frame.cxx
@@ -0,0 +1,18 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: Frame.cpp
+ Purpose:
+
+ Revision History:
+
+ 31/01/24: Added file (amlel)
+
+------------------------------------------- */
+
+#include <System.Graphics/Frame.hxx>
+
+namespace HCore {
+
+} // namespace HCore
diff --git a/Public/Kits/System.Graphics/Frame.hxx b/Public/Kits/System.Graphics/Frame.hxx
new file mode 100644
index 00000000..e0d52a4c
--- /dev/null
+++ b/Public/Kits/System.Graphics/Frame.hxx
@@ -0,0 +1,59 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: Frame.hxx
+ Purpose:
+
+ Revision History:
+
+ 31/01/24: Added file (amlel)
+
+------------------------------------------- */
+
+#pragma once
+
+#include <System.Graphics/Core.hxx>
+#include <System.Graphics/Dim2d.hxx>
+#include <NewKit/MutableArray.hpp>
+
+namespace HCore {
+class G_API GFrame {
+ public:
+ explicit GFrame(GFrame* parent = nullptr) : m_ParentFrame(parent) {}
+ ~GFrame() {}
+
+ GFrame& operator=(const GFrame&) = default;
+ GFrame(const GFrame&) = default;
+
+ virtual void Update() {
+ if (m_Frames.Count() == 0) return;
+
+ for (int x = 0; x < m_Frames.Count(); ++x) {
+ if (!m_Frames[x]->ShouldBeUpdated()) continue;
+
+ m_Frames[x]->Update();
+ }
+
+ this->Paint();
+ }
+
+ virtual void UpdateInput() {
+ if (m_Frames.Count() == 0) return;
+
+ for (int x = 0; x < m_Frames.Count(); ++x) {
+ if (!m_Frames[x]->ShouldBeUpdated()) continue;
+
+ m_Frames[x]->UpdateInput();
+ }
+ }
+
+ virtual bool ShouldBeUpdated() { return false; }
+
+ virtual void Paint() = 0;
+
+ private:
+ HCore::MutableArray<GFrame*> m_Frames;
+ GFrame* m_ParentFrame{nullptr};
+};
+} // namespace HCore
diff --git a/Public/Kits/System.Graphics/Makefile b/Public/Kits/System.Graphics/Makefile
new file mode 100644
index 00000000..c049857f
--- /dev/null
+++ b/Public/Kits/System.Graphics/Makefile
@@ -0,0 +1,20 @@
+##################################################
+# ; (C) Mahrouss Logic, 2024, all rights reserved.
+# This is the System.Graphics Makefile.
+##################################################
+
+CC=x86_64-w64-mingw32-g++
+CCFLAGS=-shared -ffreestanding -fno-rtti -fno-exceptions -std=c++20
+OUTPUT=System.Graphics.dll
+
+.PHONY: build-gkit
+build-gkit:
+ $(CC) -I../ -I$(HOME) -I../../../Private/ $(CCFLAGS) *.cxx -o $(OUTPUT)
+
+.PHONY: all
+all: build-gkit
+ @echo "[System.Graphics.dll] Build done."
+
+.PHONY: clean
+clean:
+ rm -f *.o
diff --git a/Public/Kits/System.Graphics/Stylesheet.hxx b/Public/Kits/System.Graphics/Stylesheet.hxx
new file mode 100644
index 00000000..79efbcf4
--- /dev/null
+++ b/Public/Kits/System.Graphics/Stylesheet.hxx
@@ -0,0 +1,49 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: Stylesheet.hxx
+ Purpose:
+
+ Revision History:
+
+ 08/02/24: Added file (amlel)
+
+------------------------------------------- */
+
+#pragma once
+
+/// TODO: Stylesheets for GUI.
+
+#include <System.Graphics/Core.hxx>
+#include <System.Graphics/Dim2d.hxx>
+#include <NewKit/MutableArray.hpp>
+
+namespace HCore {
+class G_API GStylesheet final {
+ public:
+ explicit GStylesheet() = default;
+ ~GStylesheet() = default;
+
+ HCORE_COPY_DEFAULT(GStylesheet);
+
+ MutableArray<StringView>& Props() { return mProps; }
+
+ private:
+ MutableArray<StringView> mProps;
+};
+
+class StylesheetParser final {
+ public:
+ static MutableArray<GStylesheet> FromBlob(WideChar* Blob, SizeT BlobSz) {
+ MutableArray<GStylesheet> stylesheet;
+
+ if (!Blob || BlobSz < 1) return stylesheet;
+
+ for (auto BlobIndex = 0UL; BlobIndex < BlobSz; ++BlobIndex) {
+ }
+
+ return stylesheet;
+ }
+};
+} // namespace HCore
diff --git a/Public/Kits/System.Graphics/compile_flags.txt b/Public/Kits/System.Graphics/compile_flags.txt
new file mode 100644
index 00000000..6e721e73
--- /dev/null
+++ b/Public/Kits/System.Graphics/compile_flags.txt
@@ -0,0 +1,4 @@
+-I./
+-I../
+-I../../../Private
+-std=c++20