#include "FiestaOnlineEditor.h" Window*Window::focusedWindow=nullptr; Window::Window(FiestaOnlineEditor*pge,std::string windowTitle,vi2d pos,vi2d size) :pos(pos),size(size),windowTitle(windowTitle){ focusedWindow=this; sprWindow=new Sprite(size.x,size.y+headerHeight); decWindow=new Decal(sprWindow); //InternalRefresh(pge); } Window::~Window(){}; void Window::InternalUpdate(FiestaOnlineEditor*pge,float fElapsedTime){ if(this==focusedWindow){ Update(pge,fElapsedTime); } if(dragging){ pos=pge->GetMousePos()-dragPoint; } if(pge->GetMouseX()>=pos.x+size.x||pge->GetMouseX()GetMouseY()>=pos.y+headerHeight||pge->GetMouseY()GetDrawTarget(); pge->SetDrawTarget(sprWindow); //Window background drawing if(focusedWindow==this){ if(canClose){ pge->FillRect({0,headerHeight},size,VERY_DARK_RED); } else { pge->FillRect({0,headerHeight},size,VERY_DARK_BLUE); } } else { 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. pos.y+=headerHeight; Refresh(pge); pos.y-=headerHeight; 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); } } else { 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); decWindow->Update(); pge->SetDrawTarget(prevDrawTarget); } bool Window::IsFocusedWindow(){ return focusedWindow==this; } void Window::Draw(FiestaOnlineEditor*pge){ pge->DrawDecal(pos,decWindow); } void Window::Cleanup(){ delete sprWindow; delete decWindow; } bool Window::IsInBounds(vf2d point){ return point.x>=pos.x&&point.x<=pos.x+size.x&&point.y>=pos.y&&point.y<=pos.y+size.y+headerHeight; } void Window::InternalMouseFocus(FiestaOnlineEditor*pge){ if(pge->GetMouse(0).bPressed){ if(pge->GetMouseY()GetMousePos()-pos; } if(focusedWindow!=this){ Window*prevFocusedWindow=focusedWindow; focusedWindow=this; InternalRefresh(pge); prevFocusedWindow->InternalRefresh(pge); } } if(pge->GetMouse(0).bReleased){ dragging=false; } if(pge->GetMouse(1).bPressed&&canClose){ closed=true; } if(pge->GetMouseX()>=pos.x+size.x-64&&pge->GetMouseY()GetMouseY()>=pos.y){ if(!canClose){ canClose=true; InternalRefresh(pge); } } } void Window::MouseFocus(FiestaOnlineEditor*pge){} bool Window::IsClosed(){ return closed; } void Window::SetFocusedWindow(FiestaOnlineEditor*pge,Window*w){ focusedWindow=w; w->InternalRefresh(pge); }