# Stage 2
- reAdd Text Shorting - make SpriteSheet part of SmartCtor - Add Some Gaussian Blur func (not functional for now) - Add Image Indexing functions and Reverse32 for (RGBA -> ABGR) - Add Transparency flag to Keyboard and Fix its Render Prder - Add UI7 Alignment API - Incldes PushAlignment (One way Alignment, JoinAlign, etc) - Make Setter for Scroll Offset public - Make Getter for ScrollMod Public - Add a Check if Menu is duing an animated scroll - Add FindMenu to Context for Modifications after Context::EndMenu - Fix Major Issue in Lithium InBox Function - Fix TextAlignRight and Add PerLine Text Shorting - Fix Screen being unused in Performance Overlay - Add Beta Slider Dragging - Dont Handle Inputs for Objects when scrolling - Add a MainArea to Not Handle Inputs outside of it - Simplefied some logic - TODO: - Write TextWrap Function - Add PerLine text Align - Track and Fix a lot of UI7 Bugs such as Alignment Issues etc
This commit is contained in:
@ -481,6 +481,8 @@ class Renderer : public SmartCtor<Renderer> {
|
||||
void TextCommand(std::vector<Command::Ref>& cmds, const vec2& pos, u32 color,
|
||||
const std::string& text, LITextFlags flags, const vec2& box);
|
||||
vec2 GetTextDimensions(const std::string& text);
|
||||
std::string ShortText(const std::string& text, int maxlen, vec2& newsize);
|
||||
std::string WrapText(const std::string& text, int maxlen, vec2& newsize);
|
||||
|
||||
private:
|
||||
/// Helper Funcitons ///
|
||||
|
@ -31,7 +31,7 @@ SOFTWARE.
|
||||
#include <pd/graphics/texture.hpp>
|
||||
|
||||
namespace PD {
|
||||
class SpriteSheet {
|
||||
class SpriteSheet : public SmartCtor<SpriteSheet> {
|
||||
public:
|
||||
SpriteSheet() {}
|
||||
SpriteSheet(const std::string& path) { this->LoadFile(path); }
|
||||
|
39
include/pd/maths/img.hpp
Normal file
39
include/pd/maths/img.hpp
Normal file
@ -0,0 +1,39 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 - 2025 tobid7
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <pd/common/common.hpp>
|
||||
#include <pd/maths/vec.hpp>
|
||||
|
||||
namespace PD {
|
||||
namespace Img {
|
||||
inline int Index3dsTex(int x, int y, int width) {
|
||||
return ((((y >> 3) * (width >> 3) + (x >> 3)) << 6) +
|
||||
((x & 1) | ((y & 1) << 1) | ((x & 2) << 1) | ((y & 2) << 2) |
|
||||
((x & 4) << 2) | ((y & 4) << 3)));
|
||||
}
|
||||
inline int IndexDefault(int x, int y, int width) { return y * width + x; }
|
||||
} // namespace Img
|
||||
} // namespace PD
|
54
include/pd/maths/img_blur.hpp
Normal file
54
include/pd/maths/img_blur.hpp
Normal file
@ -0,0 +1,54 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 - 2025 tobid7
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <pd/common/common.hpp>
|
||||
#include <pd/maths/img.hpp>
|
||||
#include <pd/maths/vec.hpp>
|
||||
|
||||
namespace PD {
|
||||
namespace ImgBlur {
|
||||
std::vector<float> GaussianKernel(int radius, float si);
|
||||
/// @brief Gaussian Blur for basic Image Buffer
|
||||
/// @param buf Image Buffer (unsigned char)
|
||||
/// @param w // width of the image
|
||||
/// @param h // width of the image
|
||||
/// @param radius // Blur radius
|
||||
/// @param si // Blur sigma
|
||||
/// @param idxfn // Indexing function (if buffer is 3ds tiled)
|
||||
void GaussianBlur(std::vector<u8> &buf, int w, int h, float radius, float si,
|
||||
std::function<int(int, int, int)> idxfn = Img::IndexDefault);
|
||||
/// @brief Advanced func to access memory directly
|
||||
/// @param buf Referenvce to the buffer
|
||||
/// @param w // width of the image
|
||||
/// @param h // width of the image
|
||||
/// @param bpp Bytes per Pixels (RGB[A], RGB565, etc)
|
||||
/// @param radius // Blur radius
|
||||
/// @param si // Blur sigma
|
||||
/// @param idxfn // Indexing function (if buffer is 3ds tiled)
|
||||
void GaussianBlur(void *buf, int w, int h, int bpp, float radius, float si,
|
||||
std::function<int(int, int, int)> idxfn = Img::IndexDefault);
|
||||
} // namespace ImgBlur
|
||||
} // namespace PD
|
@ -30,5 +30,10 @@ namespace PD {
|
||||
namespace ImgConvert {
|
||||
void RGB24toRGBA32(std::vector<u8> &out, const std::vector<u8> &in,
|
||||
const int &w, const int &h);
|
||||
/// @brief Reverse 32 (RGBA -> ABGR || ABGR -> RGBA)
|
||||
/// @param buf Buffer to convert
|
||||
/// @param w width
|
||||
/// @param h height
|
||||
void Reverse32(std::vector<u8> &buf, const int &w, const int &h);
|
||||
} // namespace ImgConvert
|
||||
} // namespace PD
|
@ -64,6 +64,7 @@ class Keyboard : public Overlay {
|
||||
Flags_BlendTop = 1 << 0,
|
||||
Flags_BlendBottom = 1 << 1,
|
||||
Flags_LockControls = 1 << 2,
|
||||
Flags_Transparency = 1 << 3,
|
||||
Flags_Default = Flags_BlendBottom | Flags_BlendTop | Flags_LockControls,
|
||||
};
|
||||
Keyboard(std::string& text, State& state, const std::string& hint = "",
|
||||
|
@ -24,6 +24,7 @@ SOFTWARE.
|
||||
*/
|
||||
|
||||
using UI7MenuFlags = unsigned int;
|
||||
using UI7Align = unsigned int;
|
||||
|
||||
enum UI7MenuFlags_ {
|
||||
UI7MenuFlags_None = 0,
|
||||
@ -33,4 +34,15 @@ enum UI7MenuFlags_ {
|
||||
UI7MenuFlags_VtScrolling = 1 << 3,
|
||||
UI7MenuFlags_NoBackground = 1 << 4,
|
||||
UI7MenuFlags_Scrolling = UI7MenuFlags_HzScrolling | UI7MenuFlags_VtScrolling,
|
||||
};
|
||||
|
||||
/// @brief Probably need to update this
|
||||
enum UI7Align_ {
|
||||
UI7Align_Left = 1 << 0,
|
||||
UI7Align_Center = 1 << 1,
|
||||
UI7Align_Right = 1 << 2,
|
||||
UI7Align_Top = 1 << 3,
|
||||
UI7Align_Mid = 1 << 4,
|
||||
UI7Align_Bottom = 1 << 5,
|
||||
UI7Align_Default = UI7Align_Left | UI7Align_Top,
|
||||
};
|
@ -59,9 +59,12 @@ class Menu : public SmartCtor<Menu> {
|
||||
void Separator();
|
||||
void SeparatorText(const std::string& label);
|
||||
void Join();
|
||||
/// @brief Horizontal Center Joined objects
|
||||
void JoinOpHzCenter();
|
||||
void AfterAlignCenter();
|
||||
void JoinAlign(UI7Align a);
|
||||
void AfterAlign(UI7Align a);
|
||||
void NextAlign(UI7Align a) { tmpalign = a; }
|
||||
void PushAlignment(UI7Align a) { alignment = a; }
|
||||
void PopAlignment() { alignment = UI7Align_Default; }
|
||||
static vec2 AlignPos(vec2 pos, vec2 size, vec4 view, UI7Align a);
|
||||
|
||||
/// API for Custom Objects
|
||||
bool HandleScrolling(vec2& pos, const vec2& size);
|
||||
@ -89,12 +92,15 @@ class Menu : public SmartCtor<Menu> {
|
||||
vec4 MainArea() const { return main_area; }
|
||||
void MainArea(const vec4& v) { main_area = v; }
|
||||
vec2 ScrollOffset() const { return scrolling_off; }
|
||||
void ScrollOffset(const vec2& v) { scrolling_off = v; }
|
||||
vec2 ScrollMod() const { return scroll_mod; }
|
||||
void ScrollTo(vec2 pos) {
|
||||
scroll_anim.From(scrolling_off)
|
||||
.To(pos)
|
||||
.In(1.f)
|
||||
.As(scroll_anim.EaseInOutSine);
|
||||
}
|
||||
bool IsAnimatedScroll() { return !scroll_anim.IsFinished(); }
|
||||
|
||||
/// Objects API
|
||||
Container::Ref ObjectPush(Container::Ref obj);
|
||||
@ -124,10 +130,17 @@ class Menu : public SmartCtor<Menu> {
|
||||
vec2 SameLineCursor() const { return slcursor; }
|
||||
void SameLineCursor(const vec2& v) { slcursor = v; }
|
||||
void ViewArea(const vec4& v) { view_area = v; }
|
||||
void ScrollOffset(const vec2& v) { scrolling_off = v; }
|
||||
vec2 ScrollMod() const { return scroll_mod; }
|
||||
void ScrollMod(const vec2& v) { scroll_mod = v; }
|
||||
|
||||
UI7Align GetAlignment() {
|
||||
if (tmpalign) {
|
||||
auto t = tmpalign;
|
||||
tmpalign = 0;
|
||||
return t;
|
||||
}
|
||||
return alignment;
|
||||
}
|
||||
|
||||
/// Internal Processing
|
||||
void Update(float delta);
|
||||
|
||||
@ -135,6 +148,8 @@ class Menu : public SmartCtor<Menu> {
|
||||
friend class Context;
|
||||
|
||||
/// Data
|
||||
UI7Align alignment = UI7Align_Default;
|
||||
UI7Align tmpalign = 0;
|
||||
UI7MenuFlags flags = 0;
|
||||
u32 id;
|
||||
std::string name;
|
||||
|
@ -45,6 +45,7 @@ class Context : public SmartCtor<Context> {
|
||||
|
||||
bool BeginMenu(const ID& id, UI7MenuFlags flags = 0);
|
||||
Menu::Ref GetCurrentMenu();
|
||||
Menu::Ref FindMenu(const ID& id);
|
||||
void EndMenu();
|
||||
|
||||
/// Theme Management
|
||||
|
Reference in New Issue
Block a user