stable
This commit is contained in:
parent
752243c7e9
commit
b2f5c0193a
13 changed files with 182 additions and 90 deletions
|
|
@ -6,7 +6,7 @@ file(GLOB HEADERS "./public/*.hpp")
|
|||
|
||||
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ./public/)
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC Math Graphics Strings)
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC Math Graphics Imgui Strings)
|
||||
|
||||
### -------------------------- Tests -------------------------- ###
|
||||
enable_testing()
|
||||
|
|
@ -18,6 +18,6 @@ add_test(NAME Test${PROJECT_NAME} COMMAND Test${PROJECT_NAME})
|
|||
### -------------------------- Applications -------------------------- ###
|
||||
|
||||
add_executable(ExampleGui examples/Entry.cpp)
|
||||
target_link_libraries(ExampleGui ${PROJECT_NAME} Graphics Imgui Nanovg glfw ${GLEW_LIB})
|
||||
target_link_libraries(ExampleGui ${PROJECT_NAME} ${GLEW_LIB})
|
||||
target_include_directories(ExampleGui PUBLIC ../Externals/glfw/include ${GLEW_INCLUDE_DIR})
|
||||
file(COPY "examples/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||
|
|
@ -7,9 +7,7 @@ using namespace tp;
|
|||
|
||||
class ExampleGUI : public Application {
|
||||
public:
|
||||
ExampleGUI() {
|
||||
gGlobalGUIConfig = &mConfig;
|
||||
}
|
||||
ExampleGUI() = default;
|
||||
|
||||
void processFrame(EventHandler* eventHandler) override {
|
||||
auto rec = RectF( { 0, 0 }, mWindow->getSize() );
|
||||
|
|
@ -21,7 +19,6 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
GlobalGUIConfig mConfig;
|
||||
ComplexWidget<EventHandler, Canvas> mGui;
|
||||
};
|
||||
|
||||
|
|
@ -35,8 +32,13 @@ int main() {
|
|||
}
|
||||
|
||||
{
|
||||
ExampleGUI gui;
|
||||
gui.run();
|
||||
GlobalGUIConfig mConfig;
|
||||
gGlobalGUIConfig = &mConfig;
|
||||
|
||||
{
|
||||
ExampleGUI gui;
|
||||
gui.run();
|
||||
}
|
||||
}
|
||||
|
||||
binModule.deinitialize();
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace tp {
|
|||
this->mArea.w = 30;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
if (!this->mVisible) return;
|
||||
mIsHover = aArea.isInside(events.getPos());
|
||||
mIsHover = aArea.isInside(events.getPointer());
|
||||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
|
|
@ -62,7 +62,7 @@ namespace tp {
|
|||
this->mArea.w = 50;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
if (!this->mVisible) return;
|
||||
mIsHover = aArea.isInside(events.getPos());
|
||||
mIsHover = aArea.isInside(events.getPointer());
|
||||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
|
|
@ -181,7 +181,7 @@ namespace tp {
|
|||
}
|
||||
|
||||
public:
|
||||
Buffer<MessageWidget<Events, Canvas>> mMessages;
|
||||
Buffer<MessageWidget<Events, Canvas>*> mMessages;
|
||||
ScrollableWindow<Events, Canvas> mHistoryView;
|
||||
TextInputWidget<Events, Canvas> mMessage;
|
||||
ButtonWidget<Events, Canvas> mSend;
|
||||
|
|
@ -190,34 +190,34 @@ namespace tp {
|
|||
template <typename Events, typename Canvas>
|
||||
class ChattingWidget : public Widget<Events, Canvas> {
|
||||
public:
|
||||
explicit ChattingWidget() {
|
||||
ChattingWidget() {
|
||||
this->createConfig("Chatting");
|
||||
this->addColor("Back", "Background");
|
||||
this->addValue("Padding", "Padding");
|
||||
|
||||
// todo : fetch code
|
||||
mUsers.append(UserWidget<Events, Canvas>());
|
||||
mUsers.append(UserWidget<Events, Canvas>());
|
||||
mUsers.append(UserWidget<Events, Canvas>());
|
||||
mUsers.append(new UserWidget<Events, Canvas>());
|
||||
mUsers.append(new UserWidget<Events, Canvas>());
|
||||
mUsers.append(new UserWidget<Events, Canvas>());
|
||||
|
||||
mUsers[0].mArea = { 0, 0, 100, 100 };
|
||||
mUsers[1].mArea = { 0, 0, 100, 100 };
|
||||
mUsers[2].mArea = { 0, 0, 100, 100 };
|
||||
mUsers[0]->mArea = { 0, 0, 100, 100 };
|
||||
mUsers[1]->mArea = { 0, 0, 100, 100 };
|
||||
mUsers[2]->mArea = { 0, 0, 100, 100 };
|
||||
|
||||
for (auto message : mUsers) {
|
||||
mSideView.mContents.append(&message.data());
|
||||
mSideView.mContents.append(message.data());
|
||||
}
|
||||
|
||||
mActive.mMessages.append(MessageWidget<Events, Canvas>());
|
||||
mActive.mMessages.append(MessageWidget<Events, Canvas>());
|
||||
mActive.mMessages.append(MessageWidget<Events, Canvas>());
|
||||
mActive.mMessages.append(new MessageWidget<Events, Canvas>());
|
||||
mActive.mMessages.append(new MessageWidget<Events, Canvas>());
|
||||
mActive.mMessages.append(new MessageWidget<Events, Canvas>());
|
||||
|
||||
mActive.mMessages[0].mArea = { 0, 0, 100, 100 };
|
||||
mActive.mMessages[1].mArea = { 0, 0, 100, 100 };
|
||||
mActive.mMessages[2].mArea = { 0, 0, 100, 100 };
|
||||
mActive.mMessages[0]->mArea = { 0, 0, 100, 100 };
|
||||
mActive.mMessages[1]->mArea = { 0, 0, 100, 100 };
|
||||
mActive.mMessages[2]->mArea = { 0, 0, 100, 100 };
|
||||
|
||||
for (auto message : mActive.mMessages) {
|
||||
mActive.mHistoryView.mContents.append(&message.data());
|
||||
mActive.mHistoryView.mContents.append(message.data());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -240,7 +240,7 @@ namespace tp {
|
|||
}
|
||||
|
||||
public:
|
||||
Buffer<UserWidget<Events, Canvas>> mUsers;
|
||||
Buffer<UserWidget<Events, Canvas>*> mUsers;
|
||||
ScrollableWindow<Events, Canvas> mSideView;
|
||||
ActiveChatWidget<Events, Canvas> mActive;
|
||||
SplitView<Events, Canvas> mSplitView;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@ namespace tp {
|
|||
|
||||
void proc(const Events& events, const tp::RectF& areaParent, const tp::RectF& aArea) override {
|
||||
this->mArea = aArea;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
if (!this->mVisible) return;
|
||||
|
||||
mIsHover = false;
|
||||
|
||||
if (!areaParent.isOverlap(aArea)) {
|
||||
|
|
@ -37,13 +40,13 @@ namespace tp {
|
|||
return;
|
||||
}
|
||||
|
||||
mIsHover = aArea.isInside(events.getPos());
|
||||
mIsHover = aArea.isInside(events.getPointer());
|
||||
|
||||
if (events.isPressed() && mIsHover) {
|
||||
if (events.isPressed(InputID::MOUSE1) && mIsHover) {
|
||||
mIsPressed = true;
|
||||
}
|
||||
|
||||
if (mIsPressed && mIsHover && events.isReleased()) {
|
||||
if (mIsPressed && mIsHover && events.isReleased(InputID::MOUSE1)) {
|
||||
mIsReleased = true;
|
||||
mIsPressed = false;
|
||||
}
|
||||
|
|
@ -54,6 +57,8 @@ namespace tp {
|
|||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!this->mVisible) return;
|
||||
|
||||
if (mIsPressed) {
|
||||
canvas.rect(this->mArea, this->getColor("Pressed"), this->getValue("Rounding"));
|
||||
} else if (mIsHover) {
|
||||
|
|
|
|||
|
|
@ -15,9 +15,13 @@ namespace tp {
|
|||
|
||||
void proc(const Events& events, const tp::RectF& areaParent, const tp::RectF& aArea) override {
|
||||
this->mArea = aArea;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
if (!this->mVisible) return;
|
||||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!this->mVisible) return;
|
||||
|
||||
canvas.text(
|
||||
mLabel.read(),
|
||||
this->mArea,
|
||||
|
|
|
|||
|
|
@ -22,9 +22,11 @@ namespace tp {
|
|||
// takes whole area
|
||||
void proc(const Events& events, const tp::RectF& areaParent, const tp::RectF& aArea) override {
|
||||
this->mArea = aArea;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
if (!this->mVisible) return;
|
||||
|
||||
auto area = getHandle();
|
||||
mHovered = getHandleHandle().isInside(events.getPos());
|
||||
mHovered = getHandleHandle().isInside(events.getPointer());
|
||||
|
||||
if (mSizeFraction > 1.f) {
|
||||
mPositionFraction = 0;
|
||||
|
|
@ -36,7 +38,7 @@ namespace tp {
|
|||
return;
|
||||
}
|
||||
|
||||
if (events.getScrollY() != 0 && areaParent.isInside(events.getPos())) {
|
||||
if (events.getScrollY() != 0 && areaParent.isInside(events.getPointer())) {
|
||||
auto offset = events.getScrollY() < 0 ? 1.0f : -1.0f;
|
||||
if (scrollInertia * offset > 0) {
|
||||
scrollInertia += offset;
|
||||
|
|
@ -53,14 +55,14 @@ namespace tp {
|
|||
return;
|
||||
}
|
||||
|
||||
if (events.isPressed() && area.isInside(events.getPos())) {
|
||||
if (events.isPressed(InputID::MOUSE1) && area.isInside(events.getPointer())) {
|
||||
mIsScrolling = true;
|
||||
} else if (!events.isDown()) {
|
||||
} else if (events.isReleased(InputID::MOUSE1)) {
|
||||
mIsScrolling = false;
|
||||
}
|
||||
|
||||
if (mIsScrolling) {
|
||||
tp::halnf pos = events.getPos().y;
|
||||
tp::halnf pos = events.getPointer().y;
|
||||
pos = (pos - area.y - mSizeFraction * area.w / 2.f) / area.w;
|
||||
mPositionFraction = tp::clamp(pos, 0.f, 1.f - mSizeFraction);
|
||||
}
|
||||
|
|
@ -69,6 +71,8 @@ namespace tp {
|
|||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!this->mVisible) return;
|
||||
|
||||
auto area = getHandle();
|
||||
|
||||
if (mSizeFraction > 1.f) return;
|
||||
|
|
@ -142,7 +146,6 @@ namespace tp {
|
|||
void proc(const Events& events, const tp::RectF& areaParent, const tp::RectF& aArea) override {
|
||||
this->mArea = aArea;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
|
||||
if (!this->mVisible) return;
|
||||
|
||||
updateContents();
|
||||
|
|
@ -170,6 +173,7 @@ namespace tp {
|
|||
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!this->mVisible) return;
|
||||
|
||||
mScroller.draw(canvas);
|
||||
|
||||
canvas.pushClamp(this->mArea);
|
||||
|
|
|
|||
|
|
@ -17,8 +17,9 @@ namespace tp {
|
|||
|
||||
void proc(const Events& events, const tp::RectF& areaParent, const tp::RectF& aArea) override {
|
||||
this->mArea = aArea;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
|
||||
if (!areaParent.isOverlap(aArea)) {
|
||||
if (!this->mVisible) {
|
||||
mResizeInProcess = false;
|
||||
return;
|
||||
}
|
||||
|
|
@ -27,12 +28,12 @@ namespace tp {
|
|||
|
||||
if (events.isPressed(InputID::MOUSE1) && mIsHover) {
|
||||
mResizeInProcess = true;
|
||||
} else if (!events.isDown()) {
|
||||
} else if (events.isReleased(InputID::MOUSE1)) {
|
||||
mResizeInProcess = false;
|
||||
}
|
||||
|
||||
if (mResizeInProcess) {
|
||||
halnf pos = events.getPos().x;
|
||||
halnf pos = events.getPointer().x;
|
||||
auto diff = pos - (this->mArea.x + mFactor * this->mArea.z);
|
||||
mFactor += diff / this->mArea.z;
|
||||
}
|
||||
|
|
@ -46,6 +47,8 @@ namespace tp {
|
|||
|
||||
// takes whole area
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!this->mVisible) return;
|
||||
|
||||
if (mResizeInProcess) canvas.rect(getHandle(), this->getColor("Resizing"));
|
||||
else if (mIsHover) canvas.rect(getHandle(), this->getColor("Hovered"));
|
||||
else canvas.rect(getHandle(), this->getColor("Handle"));
|
||||
|
|
|
|||
|
|
@ -20,6 +20,13 @@ namespace tp {
|
|||
|
||||
void proc(const Events& events, const tp::RectF& areaParent, const tp::RectF& aArea) override {
|
||||
this->mArea = aArea;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
if (!this->mVisible) return;
|
||||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!this->mVisible) return;
|
||||
|
||||
nChanged = false;
|
||||
|
||||
const auto col = this->getColor("Accent");
|
||||
|
|
@ -58,10 +65,6 @@ namespace tp {
|
|||
ImGui::PopStyleVar(3);
|
||||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
// canvas.rect(this->mArea, this->getColor("Base"));
|
||||
}
|
||||
|
||||
enum { mMaxBufferSize = 512 };
|
||||
char mBuff[mMaxBufferSize] = "";
|
||||
bool nChanged = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue