Window cleanup and focused window pointer handling.

master
sigonasr2 1 year ago
parent dc292a3554
commit cb4a564c48
  1. 17
      FiestaOnlineEditor/FiestaOnlineEditor.cpp
  2. 8
      FiestaOnlineEditor/FiestaOnlineEditor.vcxproj
  3. 48
      FiestaOnlineEditor/Window.cpp
  4. 4
      FiestaOnlineEditor/Window.h

@ -179,6 +179,23 @@ bool FiestaOnlineEditor::OnUserUpdate(float fElapsedTime){
}
}
bool focusErased=false;
std::erase_if(windows,[&](Window*w){
if(w->IsClosed()){
if(w->IsFocusedWindow()){
focusErased=true;
}
w->Cleanup();
return true;
} else {
return false;
}
});
if(focusErased&&windows.size()>0){
Window::SetFocusedWindow(windows[0]);
}
SetDrawTarget(nullptr);
//FOREGROUND DRAWING
manager.Draw(sprMenu,{64,64});

@ -76,7 +76,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -91,7 +91,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -106,7 +106,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -121,7 +121,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>

@ -17,6 +17,17 @@ void Window::InternalUpdate(FiestaOnlineEditor*pge,float fElapsedTime){
if(dragging){
pos=pge->GetMousePos()-dragPoint;
}
if(pge->GetMouseX()>=pos.x+size.x-64&&pge->GetMouseY()<pos.y+headerHeight&&pge->GetMouseY()>=pos.y){
if(!canClose){
canClose=true;
InternalRefresh(pge);
}
} else {
if(canClose){
canClose=false;
InternalRefresh(pge);
}
}
}
void Window::InternalRefresh(FiestaOnlineEditor*pge){
@ -25,9 +36,17 @@ void Window::InternalRefresh(FiestaOnlineEditor*pge){
//Window background drawing
if(focusedWindow==this){
pge->FillRect({0,headerHeight},size,VERY_DARK_BLUE);
if(canClose){
pge->FillRect({0,headerHeight},size,VERY_DARK_RED);
} else {
pge->FillRect({0,headerHeight},size,VERY_DARK_BLUE);
}
} else {
pge->FillRect({0,headerHeight},size,VERY_DARK_GREY);
if(canClose){
pge->FillRect({0,headerHeight},size,DARK_GREY);
} else {
pge->FillRect({0,headerHeight},size,VERY_DARK_GREY);
}
}
//All other drawing functions should go here.
@ -36,9 +55,17 @@ void Window::InternalRefresh(FiestaOnlineEditor*pge){
Refresh(pge);
pos.y-=headerHeight;
if(focusedWindow==this){
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_BLUE);
if(canClose){
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_RED);
} else {
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_BLUE);
}
} else {
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_GREY);
if(canClose){
pge->FillRect({0,0},{size.x,headerHeight},DARK_GREY);
} else {
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_GREY);
}
}
pge->DrawString({2,2},windowTitle,CYAN);
pge->DrawLine({1,10},{size.x-2,10},DARK_CYAN,0xFFFFFF00);
@ -79,5 +106,16 @@ void Window::InternalMouseFocus(FiestaOnlineEditor*pge){
if(pge->GetMouse(0).bReleased){
dragging=false;
}
if(pge->GetMouse(1).bPressed){
closed=true;
}
}
void Window::MouseFocus(FiestaOnlineEditor*pge){}
void Window::MouseFocus(FiestaOnlineEditor*pge){}
bool Window::IsClosed(){
return closed;
}
void Window::SetFocusedWindow(Window*w){
focusedWindow=w;
}

@ -10,6 +10,8 @@ private:
const int headerHeight=12;
bool dragging=false;
vf2d dragPoint;
bool canClose=false;
bool closed=false;
protected:
vi2d size;
Sprite*sprWindow;
@ -23,8 +25,10 @@ public:
void InternalRefresh(FiestaOnlineEditor*pge);
void Draw(FiestaOnlineEditor*pge);
bool IsFocusedWindow();
static void SetFocusedWindow(Window*w);
void Cleanup();
bool IsInBounds(vf2d point);
void InternalMouseFocus(FiestaOnlineEditor*pge);
virtual void MouseFocus(FiestaOnlineEditor*pge);
bool IsClosed();
};
Loading…
Cancel
Save