123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- #include "StdInc.h"
- #include "CIntObject.h"
- #include "CGuiHandler.h"
- #include "../SDL_Extensions.h"
- void CIntObject::activateLClick()
- {
- GH.lclickable.push_front(this);
- active |= LCLICK;
- }
- void CIntObject::deactivateLClick()
- {
- std::list<CIntObject*>::iterator hlp = std::find(GH.lclickable.begin(),GH.lclickable.end(),this);
- assert(hlp != GH.lclickable.end());
- GH.lclickable.erase(hlp);
- active &= ~LCLICK;
- }
- void CIntObject::clickLeft(tribool down, bool previousState)
- {
- }
- void CIntObject::activateRClick()
- {
- GH.rclickable.push_front(this);
- active |= RCLICK;
- }
- void CIntObject::deactivateRClick()
- {
- std::list<CIntObject*>::iterator hlp = std::find(GH.rclickable.begin(),GH.rclickable.end(),this);
- assert(hlp != GH.rclickable.end());
- GH.rclickable.erase(hlp);
- active &= ~RCLICK;
- }
- void CIntObject::clickRight(tribool down, bool previousState)
- {
- }
- void CIntObject::activateHover()
- {
- GH.hoverable.push_front(this);
- active |= HOVER;
- }
- void CIntObject::deactivateHover()
- {
- std::list<CIntObject*>::iterator hlp = std::find(GH.hoverable.begin(),GH.hoverable.end(),this);
- assert(hlp != GH.hoverable.end());
- GH.hoverable.erase(hlp);
- active &= ~HOVER;
- }
- void CIntObject::hover( bool on )
- {
- }
- void CIntObject::activateKeys()
- {
- GH.keyinterested.push_front(this);
- active |= KEYBOARD;
- }
- void CIntObject::deactivateKeys()
- {
- std::list<CIntObject*>::iterator hlp = std::find(GH.keyinterested.begin(),GH.keyinterested.end(),this);
- assert(hlp != GH.keyinterested.end());
- GH.keyinterested.erase(hlp);
- active &= ~KEYBOARD;
- }
- void CIntObject::keyPressed( const SDL_KeyboardEvent & key )
- {
- }
- void CIntObject::activateMouseMove()
- {
- GH.motioninterested.push_front(this);
- active |= MOVE;
- }
- void CIntObject::deactivateMouseMove()
- {
- std::list<CIntObject*>::iterator hlp = std::find(GH.motioninterested.begin(),GH.motioninterested.end(),this);
- assert(hlp != GH.motioninterested.end());
- GH.motioninterested.erase(hlp);
- active &= ~MOVE;
- }
- void CIntObject::mouseMoved( const SDL_MouseMotionEvent & sEvent )
- {
- }
- void CIntObject::activateTimer()
- {
- GH.timeinterested.push_back(this);
- active |= TIME;
- }
- void CIntObject::deactivateTimer()
- {
- std::list<CIntObject*>::iterator hlp = std::find(GH.timeinterested.begin(),GH.timeinterested.end(),this);
- assert(hlp != GH.timeinterested.end());
- GH.timeinterested.erase(hlp);
- active &= ~TIME;
- }
- void CIntObject::tick()
- {
- }
- CIntObject::CIntObject()
- {
- pressedL = pressedR = hovered = captureAllKeys = strongInterest = false;
- toNextTick = active = used = 0;
- recActions = defActions = GH.defActionsDef;
- pos.x = 0;
- pos.y = 0;
- pos.w = 0;
- pos.h = 0;
- if(GH.captureChildren)
- {
- assert(GH.createdObj.size());
- parent = GH.createdObj.front();
- parent->children.push_back(this);
- if(parent->defActions & SHARE_POS)
- {
- pos.x = parent->pos.x;
- pos.y = parent->pos.y;
- }
- }
- else
- parent = NULL;
- }
- void CIntObject::show( SDL_Surface * to )
- {
- if(defActions & UPDATE)
- for(size_t i = 0; i < children.size(); i++)
- if(children[i]->recActions & UPDATE)
- children[i]->show(to);
- }
- void CIntObject::showAll( SDL_Surface * to )
- {
- if(defActions & SHOWALL)
- {
- for(size_t i = 0; i < children.size(); i++)
- if(children[i]->recActions & SHOWALL)
- children[i]->showAll(to);
- }
- else
- show(to);
- }
- void CIntObject::activate()
- {
- assert(!active);
- active |= GENERAL;
- activate(used);
- if(defActions & ACTIVATE)
- for(size_t i = 0; i < children.size(); i++)
- if(children[i]->recActions & ACTIVATE)
- children[i]->activate();
- }
- void CIntObject::activate(ui16 what)
- {
- if(what & LCLICK)
- activateLClick();
- if(what & RCLICK)
- activateRClick();
- if(what & HOVER)
- activateHover();
- if(what & MOVE)
- activateMouseMove();
- if(what & KEYBOARD)
- activateKeys();
- if(what & TIME)
- activateTimer();
- if(what & WHEEL)
- activateWheel();
- if(what & DOUBLECLICK)
- activateDClick();
- }
- void CIntObject::deactivate()
- {
- assert(active);
- active &= ~ GENERAL;
- deactivate(used);
- assert(!active);
- if(defActions & DEACTIVATE)
- for(size_t i = 0; i < children.size(); i++)
- if(children[i]->recActions & DEACTIVATE)
- children[i]->deactivate();
- }
- void CIntObject::deactivate(ui16 what)
- {
- if(what & LCLICK)
- deactivateLClick();
- if(what & RCLICK)
- deactivateRClick();
- if(what & HOVER)
- deactivateHover();
- if(what & MOVE)
- deactivateMouseMove();
- if(what & KEYBOARD)
- deactivateKeys();
- if(what & TIME) // TIME is special
- deactivateTimer();
- if(what & WHEEL)
- deactivateWheel();
- if(what & DOUBLECLICK)
- deactivateDClick();
- }
- CIntObject::~CIntObject()
- {
- assert(!active); //do not delete active obj
- if(defActions & DISPOSE)
- for(size_t i = 0; i < children.size(); i++)
- if(children[i]->recActions & DISPOSE)
- delete children[i];
- if(parent && GH.createdObj.size()) //temporary object destroyed
- parent->children -= this;
- }
- void CIntObject::printAtLoc( const std::string & text, int x, int y, EFonts font, SDL_Color kolor/*=zwykly*/, SDL_Surface * dst/*=screen*/ )
- {
- CSDL_Ext::printAt(text, pos.x + x, pos.y + y, font, kolor, dst);
- }
- void CIntObject::printAtMiddleLoc( const std::string & text, int x, int y, EFonts font, SDL_Color kolor/*=zwykly*/, SDL_Surface * dst/*=screen*/ )
- {
- CSDL_Ext::printAtMiddle(text, pos.x + x, pos.y + y, font, kolor, dst);
- }
- void CIntObject::printAtMiddleLoc(const std::string & text, const SPoint &p, EFonts font, SDL_Color kolor, SDL_Surface * dst)
- {
- printAtMiddleLoc(text, p.x, p.y, font, kolor, dst);
- }
- void CIntObject::blitAtLoc( SDL_Surface * src, int x, int y, SDL_Surface * dst )
- {
- blitAt(src, pos.x + x, pos.y + y, dst);
- }
- void CIntObject::blitAtLoc(SDL_Surface * src, const SPoint &p, SDL_Surface * dst)
- {
- blitAtLoc(src, p.x, p.y, dst);
- }
- void CIntObject::printAtMiddleWBLoc( const std::string & text, int x, int y, EFonts font, int charpr, SDL_Color kolor, SDL_Surface * dst)
- {
- CSDL_Ext::printAtMiddleWB(text, pos.x + x, pos.y + y, font, charpr, kolor, dst);
- }
- void CIntObject::printToLoc( const std::string & text, int x, int y, EFonts font, SDL_Color kolor, SDL_Surface * dst )
- {
- CSDL_Ext::printTo(text, pos.x + x, pos.y + y, font, kolor, dst);
- }
- void CIntObject::disable()
- {
- if(active)
- deactivate();
- recActions = DISPOSE;
- }
- void CIntObject::enable(bool activation)
- {
- if(!active && activation)
- activate();
- recActions = 255;
- }
- bool CIntObject::isItInLoc( const SDL_Rect &rect, int x, int y )
- {
- return isItIn(&rect, x - pos.x, y - pos.y);
- }
- bool CIntObject::isItInLoc( const SDL_Rect &rect, const SPoint &p )
- {
- return isItIn(&rect, p.x - pos.x, p.y - pos.y);
- }
- void CIntObject::activateWheel()
- {
- GH.wheelInterested.push_front(this);
- active |= WHEEL;
- }
- void CIntObject::deactivateWheel()
- {
- std::list<CIntObject*>::iterator hlp = std::find(GH.wheelInterested.begin(),GH.wheelInterested.end(),this);
- assert(hlp != GH.wheelInterested.end());
- GH.wheelInterested.erase(hlp);
- active &= ~WHEEL;
- }
- void CIntObject::wheelScrolled(bool down, bool in)
- {
- }
- void CIntObject::activateDClick()
- {
- GH.doubleClickInterested.push_front(this);
- active |= DOUBLECLICK;
- }
- void CIntObject::deactivateDClick()
- {
- std::list<CIntObject*>::iterator hlp = std::find(GH.doubleClickInterested.begin(),GH.doubleClickInterested.end(),this);
- assert(hlp != GH.doubleClickInterested.end());
- GH.doubleClickInterested.erase(hlp);
- active &= ~DOUBLECLICK;
- }
- void CIntObject::onDoubleClick()
- {
- }
- void CIntObject::fitToScreen(int borderWidth, bool propagate)
- {
- SPoint newPos = pos.topLeft();
- vstd::amax(newPos.x, borderWidth);
- vstd::amax(newPos.y, borderWidth);
- vstd::amin(newPos.x, screen->w - borderWidth - pos.w);
- vstd::amin(newPos.y, screen->h - borderWidth - pos.h);
- if (newPos != pos.topLeft())
- moveTo(newPos, propagate);
- }
- void CIntObject::moveBy( const SPoint &p, bool propagate /*= true*/ )
- {
- pos.x += p.x;
- pos.y += p.y;
- if(propagate)
- for(size_t i = 0; i < children.size(); i++)
- children[i]->moveBy(p, propagate);
- }
- void CIntObject::moveTo( const SPoint &p, bool propagate /*= true*/ )
- {
- moveBy(SPoint(p.x - pos.x, p.y - pos.y), propagate);
- }
- void CIntObject::delChild(CIntObject *child)
- {
- children -= child;
- delete child;
- }
- void CIntObject::addChild(CIntObject *child, bool adjustPosition /*= false*/)
- {
- assert(!vstd::contains(children, child));
- assert(child->parent == NULL);
- children.push_back(child);
- child->parent = this;
- if(adjustPosition)
- child->pos += pos;
- }
- void CIntObject::removeChild(CIntObject *child, bool adjustPosition /*= false*/)
- {
- assert(vstd::contains(children, child));
- assert(child->parent == this);
- children -= child;
- child->parent = NULL;
- if(adjustPosition)
- child->pos -= pos;
- }
- void CIntObject::changeUsedEvents(ui16 what, bool enable, bool adjust /*= true*/)
- {
- if(enable)
- {
- used |= what;
- if(adjust && active)
- activate(what);
- }
- else
- {
- used &= ~what;
- if(adjust && active)
- deactivate(what);
- }
- }
- void CIntObject::drawBorderLoc(SDL_Surface * sur, const SRect &r, const int3 &color)
- {
- CSDL_Ext::drawBorder(sur, r + pos, color);
- }
- void CIntObject::redraw()
- {
- if (parent && (type & REDRAW_PARENT))
- {
- parent->redraw();
- }
- else
- {
- showAll(screenBuf);
- if(screenBuf != screen)
- showAll(screen);
- }
- }
- const SRect & CIntObject::center( const SRect &r, bool propagate )
- {
- pos.w = r.w;
- pos.h = r.h;
- return center(SPoint(screen->w/2, screen->h/2), propagate);
- }
- const SRect & CIntObject::center( bool propagate )
- {
- return center(pos, propagate);
- }
- const SRect & CIntObject::center(const SPoint &p, bool propagate /*= true*/)
- {
- moveBy(SPoint(p.x - pos.w/2 - pos.x,
- p.y - pos.h/2 - pos.y),
- propagate);
- return pos;
- }
|