예제 #1
0
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;
		}
	}
}
예제 #2
0
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;
}