void Region::processCursor(SpaceCursor* c, int downdragup) { if ( isButton() ) { DEBUGPRINT(("Region::processCursor BUTTON!")); switch ( downdragup ) { case CURSOR_DOWN: buttonDown(); break; case CURSOR_UP: buttonUp(); break; } } else { DEBUGPRINT(("Region::processCursor SURFACE!")); switch ( downdragup ) { case CURSOR_DOWN: cursorDown(c); break; case CURSOR_DRAG: cursorDrag(c); break; case CURSOR_UP: cursorUp(c); break; } } }
Cursor* Region::setCursor(int sidnum, std::string sidsource, int millinow, NosuchVector pos, double depth, double area, OutlineMem* om) { if ( pos.x < x_min || pos.x > x_max || pos.y < y_min || pos.y > y_max ) { NosuchDebug("Ignoring out-of-bounds cursor pos=%f,%f,%f\n",pos.x,pos.y); return NULL; } if ( isButton() ) { // double buttonMinArea = 0.6f; double buttonMinArea = params.minbuttonarea; double buttonMaxArea = 1.3f; if ( area < buttonMinArea ) { NosuchDebug(2,"Ignoring setCursor for button, area %f too small",area); return NULL; } if ( area > buttonMaxArea ) { NosuchDebug(2,"Ignoring setCursor for button, area %f too big",area); return NULL; } } Cursor* c = getCursor(sidnum,sidsource); if ( c != NULL ) { c->settargetpos(pos); c->set_target_depth(depth); c->setarea(area); c->setoutline(om); cursorDrag(c); } else { c = new Cursor(palette, sidnum, sidsource, this, pos, depth,area); c->setoutline(om); if ( cursorlist_lock_write() ) { _cursors.push_back(c); cursorlist_unlock(); cursorDown(c); } else { NosuchDebug("Region::setCursor unable to lock cursorlist"); } } c->touch(millinow); return c; }