Window cleanup and focused window pointer handling.
This commit is contained in:
parent
dc292a3554
commit
cb4a564c48
@ -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);
|
SetDrawTarget(nullptr);
|
||||||
//FOREGROUND DRAWING
|
//FOREGROUND DRAWING
|
||||||
manager.Draw(sprMenu,{64,64});
|
manager.Draw(sprMenu,{64,64});
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@ -91,7 +91,7 @@
|
|||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@ -106,7 +106,7 @@
|
|||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
@ -121,7 +121,7 @@
|
|||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
|
@ -17,6 +17,17 @@ void Window::InternalUpdate(FiestaOnlineEditor*pge,float fElapsedTime){
|
|||||||
if(dragging){
|
if(dragging){
|
||||||
pos=pge->GetMousePos()-dragPoint;
|
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){
|
void Window::InternalRefresh(FiestaOnlineEditor*pge){
|
||||||
@ -25,10 +36,18 @@ void Window::InternalRefresh(FiestaOnlineEditor*pge){
|
|||||||
|
|
||||||
//Window background drawing
|
//Window background drawing
|
||||||
if(focusedWindow==this){
|
if(focusedWindow==this){
|
||||||
|
if(canClose){
|
||||||
|
pge->FillRect({0,headerHeight},size,VERY_DARK_RED);
|
||||||
|
} else {
|
||||||
pge->FillRect({0,headerHeight},size,VERY_DARK_BLUE);
|
pge->FillRect({0,headerHeight},size,VERY_DARK_BLUE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(canClose){
|
||||||
|
pge->FillRect({0,headerHeight},size,DARK_GREY);
|
||||||
} else {
|
} else {
|
||||||
pge->FillRect({0,headerHeight},size,VERY_DARK_GREY);
|
pge->FillRect({0,headerHeight},size,VERY_DARK_GREY);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//All other drawing functions should go here.
|
//All other drawing functions should go here.
|
||||||
|
|
||||||
@ -36,10 +55,18 @@ void Window::InternalRefresh(FiestaOnlineEditor*pge){
|
|||||||
Refresh(pge);
|
Refresh(pge);
|
||||||
pos.y-=headerHeight;
|
pos.y-=headerHeight;
|
||||||
if(focusedWindow==this){
|
if(focusedWindow==this){
|
||||||
|
if(canClose){
|
||||||
|
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_RED);
|
||||||
|
} else {
|
||||||
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_BLUE);
|
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_BLUE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(canClose){
|
||||||
|
pge->FillRect({0,0},{size.x,headerHeight},DARK_GREY);
|
||||||
} else {
|
} else {
|
||||||
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_GREY);
|
pge->FillRect({0,0},{size.x,headerHeight},VERY_DARK_GREY);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
pge->DrawString({2,2},windowTitle,CYAN);
|
pge->DrawString({2,2},windowTitle,CYAN);
|
||||||
pge->DrawLine({1,10},{size.x-2,10},DARK_CYAN,0xFFFFFF00);
|
pge->DrawLine({1,10},{size.x-2,10},DARK_CYAN,0xFFFFFF00);
|
||||||
decWindow->Update();
|
decWindow->Update();
|
||||||
@ -79,5 +106,16 @@ void Window::InternalMouseFocus(FiestaOnlineEditor*pge){
|
|||||||
if(pge->GetMouse(0).bReleased){
|
if(pge->GetMouse(0).bReleased){
|
||||||
dragging=false;
|
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;
|
const int headerHeight=12;
|
||||||
bool dragging=false;
|
bool dragging=false;
|
||||||
vf2d dragPoint;
|
vf2d dragPoint;
|
||||||
|
bool canClose=false;
|
||||||
|
bool closed=false;
|
||||||
protected:
|
protected:
|
||||||
vi2d size;
|
vi2d size;
|
||||||
Sprite*sprWindow;
|
Sprite*sprWindow;
|
||||||
@ -23,8 +25,10 @@ public:
|
|||||||
void InternalRefresh(FiestaOnlineEditor*pge);
|
void InternalRefresh(FiestaOnlineEditor*pge);
|
||||||
void Draw(FiestaOnlineEditor*pge);
|
void Draw(FiestaOnlineEditor*pge);
|
||||||
bool IsFocusedWindow();
|
bool IsFocusedWindow();
|
||||||
|
static void SetFocusedWindow(Window*w);
|
||||||
void Cleanup();
|
void Cleanup();
|
||||||
bool IsInBounds(vf2d point);
|
bool IsInBounds(vf2d point);
|
||||||
void InternalMouseFocus(FiestaOnlineEditor*pge);
|
void InternalMouseFocus(FiestaOnlineEditor*pge);
|
||||||
virtual void MouseFocus(FiestaOnlineEditor*pge);
|
virtual void MouseFocus(FiestaOnlineEditor*pge);
|
||||||
|
bool IsClosed();
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user