Author SHA1 Message Date
tobid7 4488425a94 Bring back global lithium pools
why?
cause sorting around the global driver pool would basically use more cpu power then just copy data sequences into the right order
And sorting data references costs 0 performance at all
2026-09-05 22:52:59 +02:00
tobid7 eafe5c9be5 Add Drawlist Vertex and Indexcount geteter (for debugging usage only) 2026-09-05 21:28:09 +02:00
tobid7 d18e397eaf Fix The rest of UI7 Mem leaks
Throw OneFrame living objs into a pool
2026-09-05 18:06:59 +02:00
tobid7 fc5a357caa stop leaking idobj memory (and coloredit layout mem) 2026-09-05 18:06:12 +02:00
tobid7 a1cb3bf290 dx9: update device size on window size change 2026-09-05 17:18:21 +02:00
tobid7 8c1063640c format documents 2026-09-05 17:04:28 +02:00
tobid7 85f50df154 unload debugfont and add Gfx debug menu 2026-09-05 17:03:17 +02:00
tobid7 32c94e0776 fix random garbage ptr issues 2026-09-05 17:02:58 +02:00
tobid7 6b5f30b334 Fix Indexorder issues and patchfixsomehow dx9 tex filtering 2026-09-05 17:02:37 +02:00
tobid7 42cb7ce2ed No big update without msvc compiler errors :/ 2026-09-05 16:29:53 +02:00
tobid7 26a8c230c6 More timings 2026-09-05 15:10:48 +02:00
tobid7 0a5a86459b UI7 is BACK!
took me about a full week to get something to render again withour shared_ptrs
as of now this is very unstable, untested and lacking a lot of features due to lithium is lacking the base for that
Added JetBrainsMono font as debug font for the metrics
2026-09-05 14:48:03 +02:00
tobid7 0f25a70901 Add missing GetDriverName to Os 2026-09-05 14:47:41 +02:00
tobid7 6a22b26a3d Draw the line (oder so) 2026-09-05 14:46:51 +02:00
tobid7 245cc0f314 Load the font async for now 2026-09-05 11:56:41 +02:00
tobid7 cb437d41a0 n3ds-boost 2026-09-05 11:56:26 +02:00
tobid7 322ce785b9 SDF & MONOSPACE FONT RENDERING 2026-09-05 11:56:13 +02:00
tobid7 b29e298d55 save 75% of font memory 2026-09-03 09:36:41 +02:00
tobid7 2801b876e6 Upload pools once per Gfx::Draw and FIX DX9 2026-09-03 09:18:49 +02:00
tobid7 f1540f0098 reset pools on newframe 2026-09-03 08:12:34 +02:00
tobid7 54584728c3 move global pools into gfx driver
prevents double copy problems
saves memory
(needs to be optimized...)
2026-09-02 08:04:50 +02:00
tobid7 daaf473af7 faster rect command creation 2026-09-01 21:21:40 +02:00
tobid7 9ed3ed233d cache ascii chars directly 2026-09-01 21:20:52 +02:00
tobid7 dd97aab749 insane performance boost (on 3ds) 2026-09-01 21:16:23 +02:00
tobid7 0746295013 time trace is back 2026-09-01 10:02:54 +02:00
tobid7 2984354884 implement Image::Convert and Image::Flip 2026-09-01 08:15:03 +02:00
tobid7 4d2470b0c6 pool append move and copy 2026-08-31 08:59:41 +02:00
tobid7 cfb6a9b3dd # small fixes
- Fix Os::GetTimeNano()
- only build tests on non vendored usage
2026-07-19 14:27:48 +02:00
tobid7 799e779fe6 Fix 2026-04-30 12:38:35 +02:00
tobid7 7f708a565e Fix 3ds build and update libpicasso 2026-04-25 00:01:06 +02:00
tobid7 280ce524bf remove poc func 2026-04-18 14:34:45 +02:00
tobid7 b99fc39444 Add support for rotated gradients 2026-04-18 14:33:31 +02:00
tobid7 6dbf5a4812 Add stick and trigger input support 2026-04-09 21:51:38 +02:00
tobid7 ff3b241dd2 Fix clang warning 2026-04-05 04:31:50 +02:00
tobid7 7a1751589e fix preset names for Selection Views 2026-04-05 04:31:22 +02:00
tobid7 8a4b3c119d Add NX Hid Driver Template
- Add WIP HidNX Driver (clangd not working with devkitpro for switch on windows)
- Add default-release as default search path for compile_commands.json
- remove mingw preset (casue its exactly the default target)
- Move Mouse pos cycle into HidDriver::Update
- Test around with HidGlfw on Nintendo switch
2026-04-05 04:20:32 +02:00
tobid7 1f7d96a455 Add proper Gamepad support (WIP) 2026-04-05 00:26:00 +02:00
tobid7 c9768010f2 allo wPD::Color in Drawlist 2026-04-04 17:44:05 +02:00
tobid7 679de3ae94 Add Input functionality to Ultra
- Add point InSpace check to PD::Li::Math
- Add Universal AlignmentCenter flag for Horizontal and and Vertical Alignment
-  Add Fallbackfont to Layout (if you dont want to set font per object)
- Add Button Object WIP
- Rename OnHover to OnFocus and add OnUnfocus
- Move font and FontScale to ElementBase (for fallback logic etc)
- Add UpdateInput func to ElementBase
- Corectly Set fontScale in Text Rendering
- Update ecample
2026-04-03 15:17:43 +02:00
tobid7 af7fc026df Allow implicit usage of "#ffffffff" etc 2026-04-03 14:22:51 +02:00
tobid7 5bc8046ebe Add HidDriver base and small HidGLFW driver 2026-04-03 14:12:42 +02:00
tobid7 8215baac99 rename PDBackendFlags to PDGfxBackendFlags 2026-04-03 12:52:30 +02:00
tobid7 a776addf11 Implement VCanvas and Update TextElem
- Text now requires a font and is able to take an individual scale
- Container requires &ref for Elements to make sure they always exist
- SetViewport now sets the canvas as well
- SetBaseViewport Sets the Virtual Canvas Size
- Layout Now requires a Drawlist reference in Render function
- main.cpp: updated the template
2026-04-03 12:43:49 +02:00
tobid7 1cf3b6f8e6 Actually implement ultra-rendering 2026-04-02 23:29:53 +02:00
tobid7 b5321ca1a1 Rework Project Ultra
- Added container
- Made container the base of Layout
- Set Containers theirself as pParent for Elements on Push
2026-03-29 04:28:45 +02:00
tobid7 4498c2c0fb Fix path rects 2026-03-29 04:27:37 +02:00
tobid7 818b086f08 Fixing riunded rects 2026-03-29 01:08:02 +01:00
tobid7 e560496512 Add a default preset (for linux/macos default builds) 2026-03-28 13:59:42 +01:00
tobid7 7b6e611f12 Add cmake presets
- MSVC requires cmake for Windows
- mingw only builds when GLSLANG is excluded due to wrong header generation
2026-03-28 13:53:55 +01:00
tobid7 72deaad28d build 3dsx and nro in ALL stage 2026-03-28 13:52:59 +01:00
tobid7 2e652a3c24 More stuff done at Project Ultra
- Added renderspace
- Revision System (to not always update pRenderspace
- added some test scene
2026-03-28 13:52:36 +01:00
tobid7 784421fa6c WIP (Codename Ultra) UI lib 2026-03-26 21:02:10 +01:00
tobid7 bc06a3fee8 implement font deletion 2026-03-26 21:01:43 +01:00
tobid7 d2ab60c824 Fix font bugs 2026-03-25 22:24:54 +01:00
tobid7 a8fe58ef0f Add debug getters (and somehow text is not rendering :/) 2026-03-25 20:27:23 +01:00
tobid7 eea0e9844f Fix Vertex Alloc usage at Index Alloc 2026-03-24 22:20:41 +01:00
tobid7 4777c85f9a Readd font support (not workign yet) 2026-03-22 21:50:53 +01:00
tobid7 b49c0bd3dc Update lazyvec / vec api as well as rect are mostly constexpr now 2026-03-22 00:15:14 +01:00
tobid7 4db5d98cb2 Always disable glslang build for NintendoSwitch on Windows 2026-03-21 19:28:59 +01:00
tobid7 794e06b890 Present DX9 Frames ... 2026-03-21 16:47:16 +01:00
tobid7 d8efcd41b1 Add a PositionTranslate func and add Errors for TextureSize mismatch 2026-03-21 16:39:55 +01:00
tobid7 4dab1987d1 Add PD::Image and add a setter for logfilter 2026-03-21 15:52:09 +01:00
tobid7 6fab4a07a9 Forgot about dx9 (UNTESTED!!!) 2026-03-21 14:48:48 +01:00
tobid7 baad2ce15c Add Os Bridge into test framework 2026-03-21 14:43:16 +01:00
tobid7 a86c13b9a3 Refactor PD::Li Pools system, Upgrade PD::Pool and add better logging
- Add ResetFast to Pool using c++20 concept
- Add Put function to Pool
- Use Pool Index instead of pointers in Command
- Add accessor to Li Pools to prevent wrong command usage
- Add Command Formatter
- Use ResetFast for all Pools
- Add Reset func to Li::Vertex (for ResetFast)
- Add Pool Expandor and Put funcs to Lithium pools
- Add getters for GfxDriverBase to PD::Li Pools
2026-03-21 13:35:16 +01:00
tobid7 3b0b103eb3 Add nintendo switch support 2026-03-21 10:18:01 +01:00
tobid7 6beef97cdf Remove Gfx Driver Vertex and IndexBuffer size config 2026-03-21 10:11:10 +01:00
tobid7 afe30a5dbd Add Drawlist
- Add Pool iterator support
- Add Pool Expandability
- Add Pool::Push
- Add Lithium Maths API
- Remove InitPools
- update spirv-helper
2026-03-19 22:06:58 +01:00
tobid7 e6cd8b7d24 Merge branch 'dev-0.7-rewrite' of ssh://dev.npid7.de:222/tobid7/palladium into dev-0.7-rewrite 2026-03-19 16:26:07 +01:00
tobid7 66602a79e0 Replace spirv-helper stuff with a library that combines everything 2026-03-19 15:54:01 +01:00
tobid7 a28b7318d2 Add the shaders 2026-03-19 09:22:46 +01:00
tobid7 71563e8979 Add pdsg (palladium spirv-generator)
- remove glslang from pd-system
- use spirv blobs instead of glsl 460
- Use Legacy shaders for OpenGL2 backend
- add devnotes
2026-03-18 21:21:00 +01:00
tobid7 7d89ab1c47 Add SpirvHelper (Shader cross compilation)
- Make OpenGL2 and OpenGL3 use the same base shaders (using SpirvHelper)
- Add Transpose func to Mat4
2026-03-18 15:17:48 +01:00
tobid7 186fce803e Add missing sources 2026-03-18 11:37:44 +01:00
tobid7 66412ca8e0 Full 3ds support and fix dx9 2026-03-18 11:34:36 +01:00
tobid7 e04046720b Work at 3ds support and backend upgrades
- Track textures (not sure if this is done tbh)
- Add lithium formatters and move TextureID, TextureFormat and TextureFilter to lithium
- Only include gl-helper if any glDriver is included
- Add Li::Rect for UV stuff
- Add Li::Texture as Info holder (still thinking of making them to ptrs
- Add Check if textures are still loaded on exit
2026-03-18 09:31:47 +01:00
tobid7 d4c59e5b61 Add backends
- Renamed GfxOpenGL to GfxOPenGL2
- Added GfxOpenGL3 backend for OpenGL 3.3+
- Added WIP DirectX9 backend
- Added structure for Citro3D
- Added linear Allocator
2026-03-17 16:47:19 +01:00
tobid7 fe9194b907 More work to drivers
- Add gfx_test
- add texture loading to GfxOpenGL
- add full submit code
- add debug logging
- add construct and destroy functionality to Pool
- add command functionality
- add vertex and index pools to lithium (static and not threadsafe yet)
- Update GfxDriver Matrix with SetViewPort
- Add glfw (only dependency of gfx_test) maybe later required for input driver
2026-03-16 17:33:46 +01:00
tobid7 4924d86bc0 # Work at gfx driver system
- Update pool to use template allocator directly instead of std::vector
- Add a GfxDriver config Template to be able to modify settings like allocators / Types for specific Drivers
- Add glad
2026-03-16 15:19:12 +01:00
tobid7 41b612ec0a 0.7.0 rewrite dev
- remove everyting
- keep core
-rename bit_utils to bits
- add formatter for  color
- add float getters to color
- start with new drivers api
2026-03-16 06:37:51 +01:00
27 changed files with 261 additions and 426 deletions
-4
View File
@@ -9,7 +9,6 @@ option(PD_ENABLE_CITRO3D "Enable Citro3D Support (3DS)" OFF)
option(PD_ENABLE_VULKAN "Not implemented yet" OFF) option(PD_ENABLE_VULKAN "Not implemented yet" OFF)
option(PD_ENABLE_HID_GLFW "Enable GLFW Input Driver" ON) option(PD_ENABLE_HID_GLFW "Enable GLFW Input Driver" ON)
option(PD_ENABLE_HID_NX "Enable NX Input Driver" OFF) option(PD_ENABLE_HID_NX "Enable NX Input Driver" OFF)
option(PD_ENABLE_HID3DS "Enable 3ds Input Driver" OFF)
if(NOT WIN32) # cause we are not on windows... if(NOT WIN32) # cause we are not on windows...
set(PD_ENABLE_DIRECTX9 OFF) set(PD_ENABLE_DIRECTX9 OFF)
@@ -22,7 +21,6 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
set(PD_ENABLE_CITRO3D ON) set(PD_ENABLE_CITRO3D ON)
set(PD_ENABLE_HID_GLFW OFF) set(PD_ENABLE_HID_GLFW OFF)
set(PD_ENABLE_HID_NX OFF) set(PD_ENABLE_HID_NX OFF)
set(PD_ENABLE_HID3DS ON)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch") elseif(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch")
set(PD_ENABLE_OPENGL2 OFF) set(PD_ENABLE_OPENGL2 OFF)
set(PD_ENABLE_OPENGL3 ON) set(PD_ENABLE_OPENGL3 ON)
@@ -38,7 +36,6 @@ add_library(pd-system STATIC
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl3.cpp ${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl3.cpp
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp ${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.cpp ${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.cpp
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_3ds.cpp
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_glfw.cpp ${CMAKE_CURRENT_SOURCE_DIR}/source/hid_glfw.cpp
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_nx.cpp ${CMAKE_CURRENT_SOURCE_DIR}/source/hid_nx.cpp
) )
@@ -67,7 +64,6 @@ target_compile_definitions(pd-system
$<$<BOOL:${PD_ENABLE_CITRO3D}>:PD_ENABLE_CITRO3D> $<$<BOOL:${PD_ENABLE_CITRO3D}>:PD_ENABLE_CITRO3D>
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW> $<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW>
$<$<BOOL:${PD_ENABLE_HID_NX}>:PD_ENABLE_HID_NX> $<$<BOOL:${PD_ENABLE_HID_NX}>:PD_ENABLE_HID_NX>
$<$<BOOL:${PD_ENABLE_HID3DS}>:PD_ENABLE_HID3DS>
) )
# Palladium # Palladium
-17
View File
@@ -1,17 +0,0 @@
#pragma once
#include <pd/drivers/hid.hpp>
namespace PD {
class Hid3DS : public HidDriver {
public:
Hid3DS();
~Hid3DS();
void Update() override;
private:
struct Impl;
Impl* impl;
};
} // namespace PD
-1
View File
@@ -7,5 +7,4 @@
#include <pd_system/gfx_opengl3.hpp> #include <pd_system/gfx_opengl3.hpp>
// Hid // Hid
#include <pd_system/hid_3ds.hpp>
#include <pd_system/hid_glfw.hpp> #include <pd_system/hid_glfw.hpp>
-82
View File
@@ -1,82 +0,0 @@
#include <pd_system/hid_3ds.hpp>
#if defined(PD_ENABLE_HID3DS) && defined(__3DS__)
#include <3ds.h>
namespace PD {
struct Hid3DS::Impl {
std::string* Text;
bool InTextMode = false;
};
Hid3DS::Hid3DS() : HidDriver("Hid3DS") {
impl = new Impl;
pFlags |= PDHidBackendFlags_HasGamepad;
pFlags |= PDHidBackendFlags_HasTouch;
pGamepad[KEY_A] = HidInternal::Gamepad::A;
pGamepad[KEY_B] = HidInternal::Gamepad::B;
pGamepad[KEY_X] = HidInternal::Gamepad::X;
pGamepad[KEY_Y] = HidInternal::Gamepad::Y;
pGamepad[KEY_START] = HidInternal::Gamepad::Start;
pGamepad[KEY_SELECT] = HidInternal::Gamepad::Select;
pGamepad[KEY_L] = HidInternal::Gamepad::L;
pGamepad[KEY_R] = HidInternal::Gamepad::R;
pGamepad[KEY_DUP] = HidInternal::Gamepad::DUp;
pGamepad[KEY_DDOWN] = HidInternal::Gamepad::DDown;
pGamepad[KEY_DLEFT] = HidInternal::Gamepad::DLeft;
pGamepad[KEY_DRIGHT] = HidInternal::Gamepad::DRight;
pGamepad[KEY_CPAD_UP] = HidInternal::Gamepad::CPUp;
pGamepad[KEY_CPAD_DOWN] = HidInternal::Gamepad::CPDown;
pGamepad[KEY_CPAD_LEFT] = HidInternal::Gamepad::CPLeft;
pGamepad[KEY_CPAD_RIGHT] = HidInternal::Gamepad::CPRight;
pGamepad[KEY_CSTICK_UP] = HidInternal::Gamepad::CSUp;
pGamepad[KEY_CSTICK_DOWN] = HidInternal::Gamepad::CSDown;
pGamepad[KEY_CSTICK_LEFT] = HidInternal::Gamepad::CSLeft;
pGamepad[KEY_CSTICK_RIGHT] = HidInternal::Gamepad::CSRight;
pGamepad[KEY_ZL] = HidInternal::Gamepad::ZL;
pGamepad[KEY_ZR] = HidInternal::Gamepad::ZR;
pGamepad[KEY_TOUCH] = HidInternal::Gamepad::Touch;
}
Hid3DS::~Hid3DS() { delete impl; }
void Hid3DS::Update() {
HidDriver::Update(); // clear stats
hidScanInput();
u32 kd = hidKeysDown();
u32 kh = hidKeysHeld();
u32 ku = hidKeysUp();
for (const auto& b : pGamepad) {
if (b.first & kd) {
pGamepadEvents[0][Event::Down] |= b.second;
}
if (b.first & kh) {
pGamepadEvents[0][Event::Held] |= b.second;
}
if (b.first & ku) {
pGamepadEvents[0][Event::Up] |= b.second;
}
}
/*if (pLocked) {
SwapTab();
}*/
touchPosition t;
hidTouchRead(&t);
pMouse[0] = fvec2(t.px, t.py);
}
} // namespace PD
#else
struct GLFWgamepadstate {};
namespace PD {
Hid3DS::Hid3DS() : HidDriver("Hid3DS") {}
Hid3DS::~Hid3DS() {}
void Hid3DS::Update() {
HidDriver::Update(); // clear stats
}
} // namespace PD
#endif
+1 -1
View File
@@ -65,7 +65,7 @@ HidGlfw::HidGlfw(GLFWwindow* win) : HidDriver("HidGlfw") {
} }
} }
HidGlfw::~HidGlfw() { delete impl; } HidGlfw::~HidGlfw() {}
void HidGlfw::Update() { void HidGlfw::Update() {
HidDriver::Update(); // clear stats HidDriver::Update(); // clear stats
+1 -1
View File
@@ -11,7 +11,7 @@ struct HidNX::Impl {
HidNX::HidNX() : HidDriver("HidNX") { impl = new Impl; } HidNX::HidNX() : HidDriver("HidNX") { impl = new Impl; }
HidNX::~HidNX() { delete impl; } HidNX::~HidNX() {}
void HidNX::Update() { void HidNX::Update() {
HidDriver::Update(); // clear stats HidDriver::Update(); // clear stats
-5
View File
@@ -42,10 +42,6 @@ class PD_API Drawlist {
void Copy(Drawlist& other); void Copy(Drawlist& other);
void Optimize(); void Optimize();
void Clear(); void Clear();
void SetLayer(int layer) { pCurrentLayer = layer; }
void LayerUp() { pCurrentLayer++; }
void LayerDown() { pCurrentLayer--; }
int GetLayer() const { return pCurrentLayer; }
size_t GetNumVertices() const { size_t GetNumVertices() const {
size_t count = 0; size_t count = 0;
@@ -130,7 +126,6 @@ class PD_API Drawlist {
private: private:
Texture pCurrentTexture; Texture pCurrentTexture;
int pCurrentLayer = 0;
Pool<Command> pCommands; Pool<Command> pCommands;
Pool<fvec2> pPath; Pool<fvec2> pPath;
Pool<Vertex> pVertices; Pool<Vertex> pVertices;
-3
View File
@@ -59,7 +59,6 @@ class PD_API Container {
void Init(UI7::IO* io, Li::Drawlist* l) { void Init(UI7::IO* io, Li::Drawlist* l) {
list = l; list = l;
this->io = io; this->io = io;
pFont = io->Font;
// this->screen = io->Ren->CurrentScreen(); // this->screen = io->Ren->CurrentScreen();
} }
@@ -76,7 +75,6 @@ class PD_API Container {
fvec2 GetPos() { return pos; } fvec2 GetPos() { return pos; }
/** Getter for Size */ /** Getter for Size */
fvec2 GetSize() { return size; } fvec2 GetSize() { return size; }
Li::Font* GetFont() { return pFont; }
/** /**
* Get the Containers Final Position * Get the Containers Final Position
* for Rendering and Input (if it has a parent Object) * for Rendering and Input (if it has a parent Object)
@@ -195,7 +193,6 @@ class PD_API Container {
fvec4 pClipRect; fvec4 pClipRect;
/** Clip Rect used */ /** Clip Rect used */
bool pCLipRectUsed = false; bool pCLipRectUsed = false;
Li::Font* pFont = nullptr;
}; };
} // namespace UI7 } // namespace UI7
} // namespace PD } // namespace PD
-2
View File
@@ -58,8 +58,6 @@ enum UI7MenuFlags_ {
enum UI7LayoutFlags_ { enum UI7LayoutFlags_ {
UI7LayoutFlags_None = 0, ///< No Flags used UI7LayoutFlags_None = 0, ///< No Flags used
UI7LayoutFlags_UseClipRect = 1 << 0, ///< Enable ClipRect UI7LayoutFlags_UseClipRect = 1 << 0, ///< Enable ClipRect
UI7LayoutFlags_HzScrolling = 1 << 1, ///< Scrolling Horizontal
UI7LayoutFlags_VtScrolling = 1 << 2, ///< Scrolling Vertical
}; };
/** UI7 Context Flags */ /** UI7 Context Flags */
-13
View File
@@ -81,7 +81,6 @@ class PD_API IO {
u32 NumVertices = 0; ///< Debug Vertices Num u32 NumVertices = 0; ///< Debug Vertices Num
u32 NumIndices = 0; ///< Debug Indices Num u32 NumIndices = 0; ///< Debug Indices Num
std::vector<u32> MenuOrder; std::vector<u32> MenuOrder;
std::vector<Li::Font*> FontStack;
// Pools // Pools
PD::Pool<UI7::Label> LabelPool; PD::Pool<UI7::Label> LabelPool;
@@ -108,18 +107,6 @@ class PD_API IO {
return ViewPorts[id.RawID()]; return ViewPorts[id.RawID()];
} }
void PushFont(Li::Font* f) {
FontStack.push_back(Font);
Font = f;
}
void PopFont() {
if (!FontStack.empty()) {
Font = FontStack.back();
FontStack.pop_back();
}
}
UI7::InputHandler InputHandler; UI7::InputHandler InputHandler;
}; };
} // namespace UI7 } // namespace UI7
-4
View File
@@ -127,8 +127,6 @@ class PD_API Layout {
void CursorInit(); void CursorInit();
void SameLine(); void SameLine();
void CursorMove(const fvec2& size); void CursorMove(const fvec2& size);
void PushFont(Li::Font* f) { IO.PushFont(f); }
void PopFont() { IO.PopFont(); }
bool ObjectWorkPos(fvec2& movpos); bool ObjectWorkPos(fvec2& movpos);
@@ -165,8 +163,6 @@ class PD_API Layout {
void SetAlign(UI7Align a) { Alignment = a; } void SetAlign(UI7Align a) { Alignment = a; }
void NextAlign(UI7Align a) { TempAlign = a; } void NextAlign(UI7Align a) { TempAlign = a; }
void HandleScrolling();
void Update(); void Update();
fvec2 DbgScrollOffset() { return ScrollOffset; } fvec2 DbgScrollOffset() { return ScrollOffset; }
+1 -3
View File
@@ -110,6 +110,7 @@ class PD_API Menu {
void EndTreeNode(); void EndTreeNode();
void HandleFocus(); void HandleFocus();
void HandleScrolling();
void HandleTitlebarActions(); void HandleTitlebarActions();
void DrawBaseLayout(); void DrawBaseLayout();
@@ -119,9 +120,6 @@ class PD_API Menu {
} }
Container* FindObject(u32 id) { return pLayout.FindObject(id); } Container* FindObject(u32 id) { return pLayout.FindObject(id); }
void PushFont(Li::Font* f) { pIO.PushFont(f); }
void PopFont() { pIO.PopFont(); }
void Update(); void Update();
void SetSize(PD::fvec2 size) { pLayout.SetSize(size); } void SetSize(PD::fvec2 size) { pLayout.SetSize(size); }
-10
View File
@@ -12,20 +12,12 @@ PD_API Drawlist::Drawlist() { Clear(); }
PD_API Drawlist::~Drawlist() { Clear(); } PD_API Drawlist::~Drawlist() { Clear(); }
PD_API void Drawlist::Merge(Drawlist& other) { PD_API void Drawlist::Merge(Drawlist& other) {
size_t start = pCommands.size();
pCommands.AppendMove(other.pCommands); pCommands.AppendMove(other.pCommands);
for (size_t i = start; i < pCommands.size(); i++) {
pCommands[i].Layer += this->pCurrentLayer;
}
other.Clear(); other.Clear();
} }
PD_API void Drawlist::Copy(Drawlist& other) { PD_API void Drawlist::Copy(Drawlist& other) {
int start = pCommands.size();
pCommands.AppendCopy(other.pCommands); pCommands.AppendCopy(other.pCommands);
for (size_t i = start; i < pCommands.size(); i++) {
pCommands[i].Layer += this->pCurrentLayer;
}
} }
PD_API void Drawlist::Optimize() { PD_API void Drawlist::Optimize() {
@@ -42,14 +34,12 @@ PD_API void Drawlist::Clear() {
UnbindTexture(); UnbindTexture();
pPath.ResetFast(); pPath.ResetFast();
pCommands.NoReset(); pCommands.NoReset();
pCurrentLayer = 0;
} }
/** Command Allocation */ /** Command Allocation */
PD_API Command& Drawlist::NewCommand() { PD_API Command& Drawlist::NewCommand() {
auto cmd = pCommands.Allocate(1); auto cmd = pCommands.Allocate(1);
cmd->Reset(); cmd->Reset();
cmd->Layer = pCurrentLayer;
cmd->Tex = pCurrentTexture.GetID(); cmd->Tex = pCurrentTexture.GetID();
return *cmd; return *cmd;
} }
+1 -2
View File
@@ -288,8 +288,7 @@ PD_API void Font::CmdTextEx(Drawlist& dl, const fvec2& pos, u32 color,
} }
if (cp.Size.x > 0 && cp.Size.y > 0) { if (cp.Size.x > 0 && cp.Size.y > 0) {
if (cmd == nullptr || cmd->Tex != Textures[cp.Tex] || if (cmd == nullptr || cmd->Tex != Textures[cp.Tex]) {
cmd->Layer != dl.GetLayer()) {
if (cp.Tex >= Textures.size()) continue; if (cp.Tex >= Textures.size()) continue;
cmd = &dl.NewCommand(); cmd = &dl.NewCommand();
cmd->Tex = Textures[cp.Tex]; cmd->Tex = Textures[cp.Tex];
+2 -3
View File
@@ -49,13 +49,12 @@ PD_API void Button::HandleInput() {
PD_API void Button::Draw() { PD_API void Button::Draw() {
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?"); // Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
// io->Ren->OnScreen(screen); // io->Ren->OnScreen(screen);
list->SetFont(GetFont());
list->PathRect(FinalPos(), FinalPos() + size, io->FrameRounding); list->PathRect(FinalPos(), FinalPos() + size, io->FrameRounding);
list->PathFill(io->Theme.Get(color)); list->PathFill(io->Theme.Get(color));
list->LayerUp(); // list->LayerUp();
list->DrawText(FinalPos() + size * 0.5 - tdim * 0.5, label.c_str(), list->DrawText(FinalPos() + size * 0.5 - tdim * 0.5, label.c_str(),
io->Theme.Get(UI7Color_Text)); io->Theme.Get(UI7Color_Text));
list->LayerDown(); // list->LayerDown();
} }
PD_API void Button::Update() { PD_API void Button::Update() {
-1
View File
@@ -48,7 +48,6 @@ PD_API void Checkbox::HandleInput() {
PD_API void Checkbox::Draw() { PD_API void Checkbox::Draw() {
// Assert(list.get() && io.get(), "Did you run Container::Init correctly?"); // Assert(list.get() && io.get(), "Did you run Container::Init correctly?");
// io->Ren->OnScreen(screen); // io->Ren->OnScreen(screen);
list->SetFont(GetFont());
list->PathRect(FinalPos(), FinalPos() + cbs, io->FrameRounding); list->PathRect(FinalPos(), FinalPos() + cbs, io->FrameRounding);
list->PathFill(io->Theme.Get(color)); list->PathFill(io->Theme.Get(color));
if (usr_ref) { if (usr_ref) {
-6
View File
@@ -44,7 +44,6 @@ PD_API void ColorEdit::HandleInput() {
PD_API void ColorEdit::Draw() { PD_API void ColorEdit::Draw() {
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?"); // Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
// io->Ren->OnScreen(screen); // io->Ren->OnScreen(screen);
list->SetFont(GetFont());
list->PathRect(FinalPos(), FinalPos() + io->ItemRowHeight, io->FrameRounding); list->PathRect(FinalPos(), FinalPos() + io->ItemRowHeight, io->FrameRounding);
list->PathFill(*color_ref); list->PathFill(*color_ref);
list->DrawText(FinalPos() + fvec2(io->ItemSpace.x + io->ItemRowHeight, 0), list->DrawText(FinalPos() + fvec2(io->ItemSpace.x + io->ItemRowHeight, 0),
@@ -56,19 +55,16 @@ PD_API void ColorEdit::Draw() {
layout->SetPosition(FinalPos()); layout->SetPosition(FinalPos());
DynObj* r = io->DynObjPool.Allocate(); DynObj* r = io->DynObjPool.Allocate();
*r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l, Container* thiz) { *r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l, Container* thiz) {
list->SetFont(thiz->GetFont());
thiz->SetSize(layout->GetSize()); thiz->SetSize(layout->GetSize());
// l->Layer(30); // l->Layer(30);
l->PathRect(thiz->GetPos(), thiz->GetPos() + thiz->GetSize(), l->PathRect(thiz->GetPos(), thiz->GetPos() + thiz->GetSize(),
io->FrameRounding); io->FrameRounding);
l->PathFill(io->Theme.Get(UI7Color_FrameBackground)); l->PathFill(io->Theme.Get(UI7Color_FrameBackground));
l->SetLayer(0);
}); });
layout->AddObjectEx(r, UI7LytAdd_Front | UI7LytAdd_NoCursorUpdate | layout->AddObjectEx(r, UI7LytAdd_Front | UI7LytAdd_NoCursorUpdate |
UI7LytAdd_NoScrollHandle); UI7LytAdd_NoScrollHandle);
r = io->DynObjPool.Allocate(); r = io->DynObjPool.Allocate();
*r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l, Container* thiz) { *r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l, Container* thiz) {
list->SetFont(thiz->GetFont());
l->PathRect(thiz->FinalPos(), thiz->FinalPos() + io->ItemRowHeight, l->PathRect(thiz->FinalPos(), thiz->FinalPos() + io->ItemRowHeight,
io->FrameRounding); io->FrameRounding);
l->PathFill(*color_ref); l->PathFill(*color_ref);
@@ -88,9 +84,7 @@ PD_API void ColorEdit::Draw() {
layout->Slider<u8>("B", ((u8*)color_ref) + 2); layout->Slider<u8>("B", ((u8*)color_ref) + 2);
layout->Slider<u8>("A", ((u8*)color_ref) + 3); layout->Slider<u8>("A", ((u8*)color_ref) + 3);
layout->Update(); layout->Update();
list->SetLayer(50);
list->Merge(layout->GetDrawList()); list->Merge(layout->GetDrawList());
list->SetLayer(0);
// io->RegisterDrawList(GetID(), layout->GetDrawList()); // io->RegisterDrawList(GetID(), layout->GetDrawList());
} }
} }
+2 -3
View File
@@ -86,11 +86,11 @@ PD_API void DragData<T>::Draw() {
FinalPos() + fvec2(off_x, 0) + td + io->FramePadding, FinalPos() + fvec2(off_x, 0) + td + io->FramePadding,
io->FrameRounding); io->FrameRounding);
list->PathFill(io->Theme.Get(UI7Color_Button)); list->PathFill(io->Theme.Get(UI7Color_Button));
list->LayerUp(); // list->LayerUp();
list->DrawTextEx(FinalPos() + fvec2(off_x, 0), p.c_str(), list->DrawTextEx(FinalPos() + fvec2(off_x, 0), p.c_str(),
io->Theme.Get(UI7Color_Text), LiTextFlags_AlignMid, io->Theme.Get(UI7Color_Text), LiTextFlags_AlignMid,
td + io->FramePadding); td + io->FramePadding);
list->LayerDown(); // list->LayerDown();
off_x += td.x + io->ItemSpace.x + io->FramePadding.x; off_x += td.x + io->ItemSpace.x + io->FramePadding.x;
} }
list->DrawText(FinalPos() + fvec2(off_x, io->FramePadding.y * 0.5), list->DrawText(FinalPos() + fvec2(off_x, io->FramePadding.y * 0.5),
@@ -101,7 +101,6 @@ template <typename T>
PD_API void DragData<T>::Update() { PD_API void DragData<T>::Update() {
// Assert(io.get(), "Did you run Container::Init correctly?"); // Assert(io.get(), "Did you run Container::Init correctly?");
// Probably need to find a faster solution (caching sizes calculated here) // Probably need to find a faster solution (caching sizes calculated here)
list->SetFont(GetFont());
float off_x = 0; float off_x = 0;
for (size_t i = 0; i < elm_count; i++) { for (size_t i = 0; i < elm_count; i++) {
std::string p; std::string p;
+2 -2
View File
@@ -29,11 +29,11 @@ PD_API void Image::Draw() {
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?"); // Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
// Assert(img.get(), "Image is nullptr!"); // Assert(img.get(), "Image is nullptr!");
// io->Ren->OnScreen(screen); // io->Ren->OnScreen(screen);
list->LayerUp(); // list->LayerUp();
list->BindTexture(img); list->BindTexture(img);
list->DrawRectFilled(FinalPos(), newsize, 0xffffffff); list->DrawRectFilled(FinalPos(), newsize, 0xffffffff);
list->UnbindTexture(); list->UnbindTexture();
list->LayerDown(); // list->LayerDown();
} }
} // namespace UI7 } // namespace UI7
} // namespace PD } // namespace PD
-1
View File
@@ -28,7 +28,6 @@ namespace UI7 {
PD_API void Label::Draw() { PD_API void Label::Draw() {
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?"); // Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
// io->Ren->OnScreen(screen); // io->Ren->OnScreen(screen);
list->SetFont(GetFont());
list->DrawTextEx(FinalPos(), label.c_str(), io->Theme.Get(UI7Color_Text), list->DrawTextEx(FinalPos(), label.c_str(), io->Theme.Get(UI7Color_Text),
LiTextFlags_NoOOS, LiTextFlags_NoOOS,
PD::fvec2(0, io->CurrentViewPort.pSize.w)); PD::fvec2(0, io->CurrentViewPort.pSize.w));
+2 -3
View File
@@ -70,7 +70,6 @@ template <typename T>
PD_API void Slider<T>::Draw() { PD_API void Slider<T>::Draw() {
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?"); // Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
// io->Ren->OnScreen(screen); // io->Ren->OnScreen(screen);
list->SetFont(GetFont());
std::string p; std::string p;
if constexpr (std::is_floating_point_v<T>) { if constexpr (std::is_floating_point_v<T>) {
p = std::format("{:.{}f}", *data, precision); p = std::format("{:.{}f}", *data, precision);
@@ -85,10 +84,10 @@ PD_API void Slider<T>::Draw() {
FinalPos() + fvec2(slp + slw - 2, td.y - 2) + io->FramePadding, FinalPos() + fvec2(slp + slw - 2, td.y - 2) + io->FramePadding,
io->FrameRounding); io->FrameRounding);
list->PathFill(io->Theme.Get(UI7Color_ButtonActive)); list->PathFill(io->Theme.Get(UI7Color_ButtonActive));
list->LayerUp(); // list->LayerUp();
list->DrawTextEx(FinalPos(), p.c_str(), io->Theme.Get(UI7Color_Text), list->DrawTextEx(FinalPos(), p.c_str(), io->Theme.Get(UI7Color_Text),
LiTextFlags_AlignMid, fvec2(width, td.y) + io->FramePadding); LiTextFlags_AlignMid, fvec2(width, td.y) + io->FramePadding);
list->LayerDown(); // list->LayerDown();
list->DrawText(FinalPos() + fvec2(width + io->FramePadding.x * 2.f, list->DrawText(FinalPos() + fvec2(width + io->FramePadding.x * 2.f,
io->FramePadding.y * 0.5), io->FramePadding.y * 0.5),
label.c_str(), io->Theme.Get(UI7Color_Text)); label.c_str(), io->Theme.Get(UI7Color_Text));
-38
View File
@@ -21,7 +21,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
*/ */
#include <algorithm>
#include <pd/ui7/containers.hpp> #include <pd/ui7/containers.hpp>
#include <pd/ui7/layout.hpp> #include <pd/ui7/layout.hpp>
@@ -123,42 +122,6 @@ PD_API fvec2 Layout::AlignPosition(fvec2 pos, fvec2 size, fvec4 area,
return p; return p;
} }
PD_API void Layout::HandleScrolling() {
if (Flags & UI7LayoutFlags_VtScrolling) {
bool allowed = MaxPosition.y > WorkRect.w;
if (allowed) {
if (PD::Hid::IsEvent(Hid::Event::Down, PD::Hid::Gamepad::Touch) ||
PD::Hid::IsEvent(Hid::Event::Down, PD::Hid::Keyboard::MouseLeft)) {
ScrollStart = ScrollOffset;
}
if (IO.InputHandler.DragObject(UI7::ID("sbg" + ID.GetName()),
fvec4(Pos, fvec2(0.f)) + WorkRect)) {
if (!IO.InputHandler.DragReleasedAW) {
ScrollOffset.y =
std::clamp(ScrollStart.y + IO.InputHandler.DragSourcePos.y -
IO.InputHandler.DragPosition.y,
-20.f, MaxPosition.y - WorkRect.w + 20.f);
}
}
} else {
ScrollOffset.y = 0.f;
}
if (ScrollOffset.y > MaxPosition.y - WorkRect.w) {
ScrollOffset.y -= 1.5f;
if (ScrollOffset.y < MaxPosition.y - WorkRect.w) {
ScrollOffset.y = MaxPosition.y - WorkRect.w;
}
}
if (ScrollOffset.y < 0) {
ScrollOffset.y += 1.5f;
if (ScrollOffset.y > 0) {
ScrollOffset.y = 0;
}
}
}
}
PD_API void Layout::Update() { PD_API void Layout::Update() {
if (Size == fvec2(0.f)) { if (Size == fvec2(0.f)) {
Size = fvec2(MaxPosition) + IO.MenuPadding * 2; Size = fvec2(MaxPosition) + IO.MenuPadding * 2;
@@ -192,7 +155,6 @@ PD_API void Layout::Update() {
Objects.clear(); Objects.clear();
WorkRect = fvec4(fvec2(WorkRect.x, WorkRect.y), Size - IO.MenuPadding); WorkRect = fvec4(fvec2(WorkRect.x, WorkRect.y), Size - IO.MenuPadding);
CursorInit(); CursorInit();
HandleScrolling();
} }
/** SECTION CONTAINERS (STOLEN FROM FORMER MENU) */ /** SECTION CONTAINERS (STOLEN FROM FORMER MENU) */
+47 -15
View File
@@ -104,7 +104,6 @@ PD_API void Menu::SeparatorText(const std::string& label) {
DynObj* r = pIO.DynObjPool.Allocate(); DynObj* r = pIO.DynObjPool.Allocate();
*r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l, *r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l,
UI7::Container* self) { UI7::Container* self) {
l->SetFont(self->GetFont());
fvec2 size = self->GetSize(); fvec2 size = self->GetSize();
fvec2 tdim = io->Font->GetTextBounds(label.c_str(), io->FontScale); fvec2 tdim = io->Font->GetTextBounds(label.c_str(), io->FontScale);
fvec2 pos = self->FinalPos(); fvec2 pos = self->FinalPos();
@@ -148,6 +147,45 @@ PD_API void Menu::HandleFocus() {
} }
} }
/** Todo: (func name is self describing) */
PD_API void Menu::HandleScrolling() {
if (Flags & UI7MenuFlags_VtScrolling) {
bool allowed =
pLayout.MaxPosition.y > (pLayout.WorkRect.w - pLayout.WorkRect.y);
if (allowed) {
if (PD::Hid::IsEvent(Hid::Event::Down, PD::Hid::Gamepad::Touch)) {
pLayout.ScrollStart = pLayout.ScrollOffset;
}
if (pIO.InputHandler.DragObject(
"sbg" + pID.GetName(),
fvec4(pLayout.Pos, fvec2(0.f)) + pLayout.WorkRect)) {
if (pIO.InputHandler.DragReleasedAW) {
} else {
pLayout.ScrollOffset.y = std::clamp(
pLayout.ScrollStart.y + pIO.InputHandler.DragSourcePos.y -
pIO.InputHandler.DragPosition.y,
-20.f, pLayout.MaxPosition.y - 220);
}
}
} else {
pLayout.ScrollOffset.y = 0.f;
}
if (pLayout.ScrollOffset.y > pLayout.MaxPosition.y - 240) {
pLayout.ScrollOffset.y -= 1.5;
if (pLayout.ScrollOffset.y < pLayout.MaxPosition.y - 240) {
pLayout.ScrollOffset.y = pLayout.MaxPosition.y - 240;
}
}
if (pLayout.ScrollOffset.y < 0) {
pLayout.ScrollOffset.y += 1.5;
if (pLayout.ScrollOffset.y > 0) {
pLayout.ScrollOffset.y = 0;
}
}
}
}
PD_API void Menu::HandleTitlebarActions() { PD_API void Menu::HandleTitlebarActions() {
// Collapse // Collapse
if (!(Flags & UI7MenuFlags_NoCollapse)) { if (!(Flags & UI7MenuFlags_NoCollapse)) {
@@ -219,12 +257,11 @@ PD_API void Menu::DrawBaseLayout() {
if (!(Flags & UI7MenuFlags_NoResize)) { if (!(Flags & UI7MenuFlags_NoResize)) {
DynObj* r = pIO.DynObjPool.Allocate(); DynObj* r = pIO.DynObjPool.Allocate();
*r = UI7::DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) { *r = UI7::DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) {
l->SetLayer(1); // //l->Layer(1);
l->PathAdd(self->FinalPos() + self->GetSize() - fvec2(0, 20)); l->PathAdd(self->FinalPos() + self->GetSize() - fvec2(0, 20));
l->PathAdd(self->FinalPos() + self->GetSize()); l->PathAdd(self->FinalPos() + self->GetSize());
l->PathAdd(self->FinalPos() + self->GetSize() - fvec2(20, 0)); l->PathAdd(self->FinalPos() + self->GetSize() - fvec2(20, 0));
l->PathFill(io->Theme.Get(UI7Color_Button)); l->PathFill(io->Theme.Get(UI7Color_Button));
l->SetLayer(0);
}); });
r->SetSize( r->SetSize(
fvec2(pLayout.GetSize().x, pLayout.GetSize().y - TitleBarHeight)); fvec2(pLayout.GetSize().x, pLayout.GetSize().y - TitleBarHeight));
@@ -236,7 +273,7 @@ PD_API void Menu::DrawBaseLayout() {
/** Background */ /** Background */
DynObj* r = pIO.DynObjPool.Allocate(); DynObj* r = pIO.DynObjPool.Allocate();
*r = UI7::DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) { *r = UI7::DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) {
l->SetLayer(0); // l->Layer(0);
l->PathRectEx(self->FinalPos(), self->FinalPos() + self->GetSize(), 10.f, l->PathRectEx(self->FinalPos(), self->FinalPos() + self->GetSize(), 10.f,
LiPathRectFlags_KeepTop | LiPathRectFlags_KeepBot); LiPathRectFlags_KeepTop | LiPathRectFlags_KeepBot);
l->PathFill(io->Theme.Get(UI7Color_Background)); l->PathFill(io->Theme.Get(UI7Color_Background));
@@ -254,12 +291,11 @@ PD_API void Menu::DrawBaseLayout() {
DynObj* r = pIO.DynObjPool.Allocate(); DynObj* r = pIO.DynObjPool.Allocate();
*r = UI7::DynObj( *r = UI7::DynObj(
[=, this](UI7::IO* io, Li::Drawlist* l, UI7::Container* self) { [=, this](UI7::IO* io, Li::Drawlist* l, UI7::Container* self) {
l->SetFont(self->GetFont()); // l->Layer(20);
l->SetLayer(20);
/** Header Bar */ /** Header Bar */
l->DrawRectFilled(self->FinalPos(), self->GetSize(), l->DrawRectFilled(self->FinalPos(), self->GetSize(),
io->Theme.Get(UI7Color_Header)); io->Theme.Get(UI7Color_Header));
l->SetLayer(21); // l->Layer(21);
/** Inline if statement to shift the Text if collapse sym is shown */ /** Inline if statement to shift the Text if collapse sym is shown */
/** What the hell is this code btw (didn't found a better way) */ /** What the hell is this code btw (didn't found a better way) */
l->DrawText(self->FinalPos() + l->DrawText(self->FinalPos() +
@@ -269,7 +305,6 @@ PD_API void Menu::DrawBaseLayout() {
(io->FramePadding.x * 2)), (io->FramePadding.x * 2)),
2), 2),
pID.GetName().c_str(), io->Theme.Get(UI7Color_Text)); pID.GetName().c_str(), io->Theme.Get(UI7Color_Text));
l->SetLayer(0);
}); });
r->SetSize(fvec2(pLayout.GetSize().x, TitleBarHeight)); r->SetSize(fvec2(pLayout.GetSize().x, TitleBarHeight));
r->SetPos(0); r->SetPos(0);
@@ -281,7 +316,7 @@ PD_API void Menu::DrawBaseLayout() {
*r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l, *r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l,
UI7::Container* self) { UI7::Container* self) {
/** This sym actually requires layer 21 (i dont know why) */ /** This sym actually requires layer 21 (i dont know why) */
l->SetLayer(21); // l->Layer(21);
/** /**
* Symbol (Position Swapping set by pIsOpen ? openpos : closepos;) * Symbol (Position Swapping set by pIsOpen ? openpos : closepos;)
*/ */
@@ -292,7 +327,6 @@ PD_API void Menu::DrawBaseLayout() {
self->FinalPos() + self->FinalPos() +
fvec2(pIsOpen ? self->GetSize().x * 0.5 : 0, self->GetSize().y), fvec2(pIsOpen ? self->GetSize().x * 0.5 : 0, self->GetSize().y),
io->Theme.Get(UI7Color_FrameBackground)); io->Theme.Get(UI7Color_FrameBackground));
l->SetLayer(0);
}); });
r->SetSize(TitleBarHeight - pIO.FramePadding.y * 2); r->SetSize(TitleBarHeight - pIO.FramePadding.y * 2);
r->SetPos(pIO.FramePadding); r->SetPos(pIO.FramePadding);
@@ -324,10 +358,6 @@ PD_API void Menu::Update() {
if (pLayout.Size == fvec2(0.f) || Flags & UI7MenuFlags_AlwaysAutoSize) { if (pLayout.Size == fvec2(0.f) || Flags & UI7MenuFlags_AlwaysAutoSize) {
pLayout.Size = fvec2(pLayout.MaxPosition) + pIO.MenuPadding * 2; pLayout.Size = fvec2(pLayout.MaxPosition) + pIO.MenuPadding * 2;
} }
if (Flags & UI7MenuFlags_VtScrolling)
pLayout.Flags |= UI7LayoutFlags_VtScrolling;
if (Flags & UI7MenuFlags_HzScrolling)
pLayout.Flags |= UI7LayoutFlags_HzScrolling;
if (!(Flags & UI7MenuFlags_NoTitlebar)) { if (!(Flags & UI7MenuFlags_NoTitlebar)) {
TitleBarHeight = pIO.FontScale * pIO.Font->PixelHeight + pIO.MenuPadding.y; TitleBarHeight = pIO.FontScale * pIO.Font->PixelHeight + pIO.MenuPadding.y;
pLayout.WorkRect.y = 5.f + TitleBarHeight; pLayout.WorkRect.y = 5.f + TitleBarHeight;
@@ -338,6 +368,9 @@ PD_API void Menu::Update() {
} }
DrawBaseLayout(); DrawBaseLayout();
pLayout.Update(); pLayout.Update();
if (Flags & UI7MenuFlags_VtScrolling || Flags & UI7MenuFlags_HzScrolling) {
HandleScrolling();
}
} }
PD_API bool Menu::BeginTreeNode(const ID& id) { PD_API bool Menu::BeginTreeNode(const ID& id) {
@@ -358,7 +391,6 @@ PD_API bool Menu::BeginTreeNode(const ID& id) {
// Object // Object
DynObj* r = pIO.DynObjPool.Allocate(); DynObj* r = pIO.DynObjPool.Allocate();
*r = UI7::DynObj([=, this](IO* io, Li::Drawlist* l, Container* self) { *r = UI7::DynObj([=, this](IO* io, Li::Drawlist* l, Container* self) {
l->SetFont(self->GetFont());
fvec2 ts = self->FinalPos() + fvec2(0, 7); fvec2 ts = self->FinalPos() + fvec2(0, 7);
fvec2 pl[2] = {fvec2(10, 5), fvec2(0, 10)}; fvec2 pl[2] = {fvec2(10, 5), fvec2(0, 10)};
if (n->second) { if (n->second) {
-3
View File
@@ -143,11 +143,8 @@ PD_API void Context::Update() {
pMenus[it]->Update(); /** Render */ pMenus[it]->Update(); /** Render */
this->pIO.InputHandler.CurrentMenu = 0; this->pIO.InputHandler.CurrentMenu = 0;
} }
int base_layer = 0;
for (int i = (int)FinalList.size() - 1; i >= 0; i--) { for (int i = (int)FinalList.size() - 1; i >= 0; i--) {
pIO.FDL.SetLayer(base_layer);
pIO.FDL.Merge(pMenus[FinalList[i]]->pLayout.GetDrawList()); pIO.FDL.Merge(pMenus[FinalList[i]]->pLayout.GetDrawList());
base_layer += 100;
} }
pCurrentMenus.clear(); pCurrentMenus.clear();
pIO.Update(); pIO.Update();
-2
View File
@@ -304,7 +304,6 @@ int main(int argc, char** argv) {
ui7.EndMenu(); ui7.EndMenu();
} }
if (auto m = ui7.BeginMenu("LI DBG INFO")) { if (auto m = ui7.BeginMenu("LI DBG INFO")) {
m->PushFont(&debug_font);
m->Label("Gfx Driver: {}", PD::Gfx::GetDriverName()); m->Label("Gfx Driver: {}", PD::Gfx::GetDriverName());
m->Separator(); m->Separator();
m->Label("LI Draw Comamnds: {}", PD::Gfx::GetNumCommands()); m->Label("LI Draw Comamnds: {}", PD::Gfx::GetNumCommands());
@@ -312,7 +311,6 @@ int main(int argc, char** argv) {
m->Label("GFX Vertices: {}", PD::Gfx::GetNumVertices()); m->Label("GFX Vertices: {}", PD::Gfx::GetNumVertices());
m->Label("GFX Triangles: {}", PD::Gfx::GetNumVertices() / 3); m->Label("GFX Triangles: {}", PD::Gfx::GetNumVertices() / 3);
m->Label("GFX Indices: {}", PD::Gfx::GetNumIndices()); m->Label("GFX Indices: {}", PD::Gfx::GetNumIndices());
m->PopFont();
ui7.EndMenu(); ui7.EndMenu();
} }
ui7.MetricsMenu(); ui7.MetricsMenu();
+2 -1
View File
@@ -43,7 +43,7 @@ void HorizonCtr::Init() {
C3D_RenderTargetSetOutput(impl->Bottom, GFX_BOTTOM, GFX_LEFT, C3D_RenderTargetSetOutput(impl->Bottom, GFX_BOTTOM, GFX_LEFT,
DisplayTransferFlags); DisplayTransferFlags);
PD::Gfx::UseDriver<PD::GfxCitro3D>(); PD::Gfx::UseDriver<PD::GfxCitro3D>();
PD::Hid::UseDriver<PD::Hid3DS>(); PD::Hid::UseDriver<PD::HidDriver>();
} }
void HorizonCtr::Deinit() { void HorizonCtr::Deinit() {
@@ -61,6 +61,7 @@ void HorizonCtr::Deinit() {
bool HorizonCtr::Mainloop() { bool HorizonCtr::Mainloop() {
pViewPort = ivec2(400, 240); pViewPort = ivec2(400, 240);
hidScanInput();
bool _kill = hidKeysUp() & KEY_START; bool _kill = hidKeysUp() & KEY_START;
C3D_FrameBegin(C3D_FRAME_SYNCDRAW); C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
return aptMainLoop() && !_kill; return aptMainLoop() && !_kill;