예제 #1
0
파일: scrol.c 프로젝트: 8l/inferno
static void
tkhscroll(Tk *tk, TkScroll *tks, Image *i, Point size)
{
	TkEnv *e;
	Point p[3], o;
	int bo, w, h, triangle;

	e = tk->env;

	triangle = tk->act.height - Elembw;

	bo = tk->borderwidth + Elembw;
	p[0].x = bo;
	p[0].y = size.y/2;
	p[1].x = p[0].x + triangle;
	p[1].y = p[0].y - triangle/2 + 1;
	p[2].x = p[0].x + triangle;
	p[2].y = p[0].y + triangle/2 - 2;
	drawarrow(tks, i, p, e, ActiveA1, ButtonA1);

	tks->a1 = p[2].x;
	w = p[2].x + Elembw;

	p[0].x = size.x - bo - 1;
	p[1].x = p[0].x - triangle;
	p[2].x = p[0].x - triangle;
	drawarrow(tks, i, p, e, ActiveA2, ButtonA2);

	tks->a2 = p[2].x;

	o.x = bo + triangle + 2*Elembw;
	o.y = tk->borderwidth;
	w = p[2].x - 2*Elembw - w - 2*tk->borderwidth;
	h = size.y - 2*bo;

	o.x += TKF2I(tks->top*w);
	w *= tks->bot - tks->top;
	w = TKF2I(w);

	tks->t1 = o.x - Elembw;
	tks->t2 = o.x + w + Elembw;

	drawslider(tks, i, o, w, h, e);
}
예제 #2
0
파일: scrol.c 프로젝트: 8l/inferno
static void
tkvscroll(Tk *tk, TkScroll *tks, Image *i, Point size)
{
	TkEnv *e;
	Point p[3], o;
	int bo, w, h, triangle;

	e = tk->env;

	triangle = tk->act.width - Elembw;

	bo = tk->borderwidth + Elembw;
	p[0].x = size.x/2;
	p[0].y = bo;
	p[1].x = p[0].x - triangle/2;
	p[1].y = p[0].y + triangle;
	p[2].x = p[0].x + triangle/2;
	p[2].y = p[0].y + triangle;
	drawarrow(tks, i, p, e, ActiveA1, ButtonA1);

	tks->a1 = p[2].y;
	h = p[2].y + Elembw;

	p[0].y = size.y - bo - 1;
	p[1].y = p[0].y - triangle;
	p[2].y = p[0].y - triangle;
	drawarrow(tks, i, p, e, ActiveA2, ButtonA2);

	tks->a2 = p[2].y;

	o.x = tk->borderwidth ;
	o.y = bo + triangle + 2*Elembw;
	w = size.x - 2*bo;
	h = p[2].y - 2*Elembw - h - 2*tk->borderwidth;

	o.y += TKF2I(tks->top*h);
	h *= tks->bot - tks->top;
	h = TKF2I(h);

	tks->t1 = o.y - Elembw;
	tks->t2 = o.y + h + Elembw;

	drawslider(tks, i, o, w, h, e);
}
예제 #3
0
파일: roche.c 프로젝트: cyamauch/eggx
int main()
{
    int i,j,key,sl=0,wl=1 ;
    int shape_i = 11, shape_j = 4 ;
    float f=MRATIO_F ;
    float x,y,zx,zy,z,ph,ms_w,ms_h ;
    float zran=(ZMAX-ZMIN) ;
    float zcen=(ZMAX+ZMIN)/2.0 ;
    color_prms cl = {
	EGGX_COLOR_BEGIN,			/* カラーパターン */
	CP_CONTRAST | CP_BRIGHTNESS | CP_GAMMA,	/* フラグ */
	1.0,					/* コントラスト */
	0.0,					/* ブライトネス*/
	1.0,					/* γ */
    } ;
    int win ;
    int cl_r,cl_g,cl_b ;

    win=gopen(WINWIDTH,WINHEIGHT) ;	/* ウィンドゥのタイトル */
    /* 座標系を変更する */
    coordinate(win, 0,0, XMIN,YMIN, 
	       WINWIDTH/(XMAX-XMIN), WINHEIGHT/(YMAX-YMIN)) ;
    layer(win,sl,wl) ;

    puts("【キーボードでの操作方法】") ;
    puts("'PageUp','PageDown'  … 質量比変更") ;
    puts("'c','C'              … カラーパターン") ;
    puts("'↑','↓','←','→'  … カラー調整") ;
    puts("'[',']'              … コントラスト") ;
    puts("'{','}'              … ブライトネス") ;
    puts("'<','>'              … γ補正") ;
    puts("'s'                  … 画像を保存") ;
    puts("'q','Esc'            … 終了") ;

    ms_w=(float)(XMAX-XMIN)/XSAMPLES ;	/* メッシュ1個分のサイズ */
    ms_h=(float)(YMAX-YMIN)/YSAMPLES ;

    do{
	/* ウィンドゥのタイトル */
	winname(win,"ロッシュワールド('s'キーで画像save) f=%g zcen=%g zran=%g",
		f,zcen,zran) ;
	for( i=0 ; i<XSAMPLES ; i++ ){	/* ポテンシャルを色で表現 */
	    x=XMIN+ms_w*i ;
	    for( j=0 ; j<YSAMPLES ; j++ ){
		y=YMIN+ms_h*j ;
		ph=get_phi(x+ms_w/2.0,y+ms_w/2.0,f) ;
		generatecolor(&cl,zcen-zran/2,zcen+zran/2,ph,
			      &cl_r,&cl_g,&cl_b) ;
		newrgbcolor(win,cl_r,cl_g,cl_b) ;
		fillrect(win,x,y,ms_w*1.5,ms_h*1.5) ;
	    }
	}
	newpen(win,1) ;
	for( i=0 ; i<XSAMPLES ; i++ ){	/* テスト粒子に働く力を矢印で表現 */
	    x=XMIN+ms_w*(i+0.5) ;
	    for( j=0 ; j<YSAMPLES ; j++ ){
		y=YMIN+ms_h*(j+0.5) ;
		zx=get_fx(x,y,f) ;
		zy=get_fy(x,y,f) ;
		zx *= VXSCALE ;
		zy *= VYSCALE ;
		z=sqrt(zx*zx+zy*zy) ;
		if( z <= VCARMAX ){
		    drawarrow(win,x-zx,y-zy,x+zx,y+zy,0.3,0.2,
			      shape_i*10+shape_j) ;
		}
	    }
	}
	sl ^= 1 ;				/* XORをとってレイヤを切替 */
	wl ^= 1 ;
	layer( win,sl,wl ) ;
	key=ggetch() ;				/* キー入力があるまで待つ */
	if( key == 0x002 ) f += 0.1 ;		/* PageUp */
	else if( key == 0x006 ) f -= 0.1 ;	/* PageDown */
	else if( key == 0x01e ) zcen += 0.1 ;	/* ↑ */
	else if( key == 0x01f ) zcen -= 0.1 ;	/* ↓ */
	else if( key == 0x01c ) zran += 0.1 ;	/* → */
	else if( key == 0x01d ) zran -= 0.1 ;	/* ← */
	else if( key == 'i' ) {
	    shape_i += 1 ;
	    if ( 12 < shape_i ) shape_i = 10 ;
	}
	else if( key == 'j' ) {
	    shape_j += 1 ;
	    if ( 7 < shape_j ) shape_j = 1 ;
	}
	else if( key == 'c' ){			/* 'c','C'キーでカラーパターン変更 */
	    cl.colormode++ ;
	    if( EGGX_COLOR_BEGIN+EGGX_COLOR_NUM <= cl.colormode )
		cl.colormode=EGGX_COLOR_BEGIN ;
	}
	else if( key == 'C' ){
	    cl.colormode-- ;
	    if( cl.colormode < EGGX_COLOR_BEGIN )
		cl.colormode=EGGX_COLOR_BEGIN+EGGX_COLOR_NUM-1 ;
	}
	else if( key == '[' ){			/* '[',']'でコントラスト変更 */
	    cl.contrast += 0.05 ;
	    if( 1 < cl.contrast ) cl.contrast = 1 ;
	}
	else if( key == ']' ){
	    cl.contrast -= 0.05 ;
	    if( cl.contrast < 0 ) cl.contrast = 0 ;
	}
	else if( key == '{' ){			/* '{','}'でブライトネス変更 */
	    cl.brightness += 0.05 ;
	    if( 1 < cl.brightness ) cl.brightness = 1 ;
	}
	else if( key == '}' ){
	    cl.brightness -= 0.05 ;
	    if( cl.brightness < 0 ) cl.brightness = 0 ;
	}
	else if( key == '<' ){			/* '<','>'でγ変更 */
	    cl.gamma += 0.025 ;
	}
	else if( key == '>' ){
	    cl.gamma -= 0.025 ;
	    if( cl.gamma <= 0 ) cl.gamma = 0.025 ;
	}
	else if( key == 's' ){			/* 's'キーで保存 */
#ifdef USE_NETPBM
	    saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,
		     "pnmtops -noturn -dpi 72 -equalpixels -psfilter -flate -ascii85",256,
		     "roche_f=%g.eps",f) ;
	    printf("画像を保存: filename='roche_f=%g.eps'\n",f) ;
#else
#ifdef USE_IMAGEMAGICK
	    saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,"convert",256,
		     "roche_f=%g.png",f) ;
	    printf("画像を保存: filename='roche_f=%g.png'\n",f) ;
#else
	    saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,"",256,
		     "roche_f=%g.ppm",f) ;
	    printf("画像を保存: filename='roche_f=%g.ppm'\n",f) ;
#endif
#endif
	}
	if( f < 0 ) f=0 ;
	if( zran < 0 ) zran=0.1 ;
    } while( key != 0x01b && key != 'q' ) ;	/* ESCキーか 'q'キーで終了 */

    gcloseall() ;
    return(0) ;
}
예제 #4
0
void SlideNavmesh::draw(const float* view, const float zoom, bool highlight)
{
	if (!visible(view))
		return;
	
	drawCorner(!m_expanded);
	
	if (!m_expanded)
		return;
	
	glPushMatrix();
	glTranslatef(m_pos[0],m_pos[1],0);

//	drawDropShadow(0,0, m_dim[0],m_dim[1], highlight ? 2 : 1);
	
/*	if (highlight)
		glColor4ub(255,255,255,128);
	else
		glColor4ub(255,255,255,96);*/

	setcolor(COL_BACK);
//	drawBG(0,0,m_dim[0],m_dim[1]);
	
	
	glPushMatrix();
	glTranslatef(PADDING_SIZE,PADDING_SIZE,0);

	drawBoundary(m_scene.boundary, m_scene.nboundary, zoom);
	
	// Draw navmesh
	if (m_drawGraph)
		navmeshDraw(m_scene.nav, zoom);

	// Draw Agent
	int aflags = 0;
	if (m_drawCorner)
		aflags |= AGENTDRAW_CORNER;
	if (m_drawCorridor)
		aflags |= AGENTDRAW_CORRIDOR;
	if (m_drawVisited)
		aflags |= AGENTDRAW_VISITED;

	NavmeshAgent* ag = &m_scene.agents[0];
	
	agentTrailDraw(ag, m_scene.nav, zoom);
	agentDraw(ag, m_scene.nav, aflags, zoom);

	// Actual
	if (m_drawDelta)
	{
		glLineWidth(2.0f*zoom);
		setcolor(COL_DARK);
		drawarrow(ag->pos[0],ag->pos[1],
				  ag->pos[0]+ag->vel[0], ag->pos[1]+ag->vel[1],0.1f);
	}
	
	glPopMatrix();

	drawButtons();

/*
	setcolor(clerp(COL_DIM,COL_BACK,128));
	glPointSize(1.0f);
	glLineWidth(1.0f);
	
//	drawtext(PADDING_SIZE,PADDING_SIZE/2, 0.07f, "M A S T E R   P L A N");
	const float ts = 0.07f;
	float sx;
	float x = PADDING_SIZE;
	float y = PADDING_SIZE/3;
	sx = x;
	drawtext(x,y, ts, "Corner");
	x += 0.7f;
	drawtext(x,y, ts, "Corridor");
	x += 0.7f;
	drawtext(x,y, ts, "Mesh");
	x += 0.7f;

	glBegin(GL_LINES);
	glVertex2f(x,y+ts*1.5f);
	glVertex2f(sx,y+ts*1.5f);
	glEnd();
	
	x += 0.5f;

	sx = x;
	drawtext(x,y, ts, "Straight");
	x += 0.7f;
	drawtext(x,y, ts, "Smooth");
	x += 0.7f;
	drawtext(x,y, ts, "Drunk");
	x += 0.7f;

	glBegin(GL_LINES);
	glVertex2f(x,y+ts*1.5f);
	glVertex2f(sx,y+ts*1.5f);
	glEnd();
*/
	
	glPopMatrix();
}