From 91ec108d9464db3c09a21494469490f80a18b596 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 31 Dec 2007 01:46:24 +0000 Subject: [PATCH] 3d nice and everything --- project.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/project.c b/project.c index 0fac499..a2e3f91 100644 --- a/project.c +++ b/project.c @@ -104,8 +104,7 @@ static int wwidth=WSZ, wheight=WSZ, wmindim=WSZ, wmaxdim=WSZ; static int ncut, currentbuffer, x11depth, x11screen; XVisualInfo visinfo; -static struct { double scale, eyes_apart; } sizeadj= { 0.3, 0.0 }; -static double scale_wmindim; +static double sizeadj_scale= 0.3, eyes_apart, scale_wmindim; static double eye_z= -10, eye_x=0; static double cut_z= -9; @@ -201,13 +200,13 @@ static void display_conformation(void) { XA( XFillRectangle(display,pixmap,dmwhite.fillgc,0,0,wwidth,wheight) ); - if (sizeadj.eyes_apart > 0) { - const double preferred=100, beyond=200; + if (eyes_apart > 0) { + const double preferred=0.05, beyond=0.07; - eye_x= sizeadj.eyes_apart < preferred ? sizeadj.eyes_apart : - sizeadj.eyes_apart < beyond ? preferred : - sizeadj.eyes_apart - (beyond - preferred); - eye_x /= scale_wmindim; + eye_x= eyes_apart < preferred ? eyes_apart : + eyes_apart < beyond ? preferred : + eyes_apart - (beyond - preferred); + eye_x /= sizeadj_scale; drawtriangles(&dmblue); eye_x= -eye_x; drawtriangles(&dmred); @@ -222,7 +221,7 @@ static void display_conformation(void) { } static void show(void) { - scale_wmindim= sizeadj.scale * wmindim; + scale_wmindim= sizeadj_scale * wmindim; read_input(); transform_coordinates(); generate_display_list(); @@ -389,15 +388,19 @@ static void drag_rotate_delta(double dx, double dy) { DRAG_SAVING(rotate, transform); static void drag_sizeadj_delta(double dx, double dy) { - const double min_eyes_apart= -200; - sizeadj.scale *= pow(3.0, dy); - - sizeadj.eyes_apart += dx * wmaxdim; - if (sizeadj.eyes_apart < min_eyes_apart) sizeadj.eyes_apart= min_eyes_apart; - printf("sizeadj eyes_apart %g\n", sizeadj.eyes_apart); + sizeadj_scale *= pow(3.0, -dy); + show(); +} +DRAG_SAVING(sizeadj, sizeadj_scale); + +static void drag_3d_delta(double dx, double dy) { + const double min_eyes_apart= -0.02; + eyes_apart += dx * 0.1; + if (eyes_apart < min_eyes_apart) eyes_apart= min_eyes_apart; + printf("sizeadj eyes_apart %g\n", eyes_apart); show(); } -DRAG_SAVING(sizeadj, sizeadj); +DRAG_SAVING(3d, eyes_apart); static const Drag *drag= &drag_none; @@ -423,7 +426,7 @@ static void event_button(XButtonEvent *e) { switch (e->button) { case Button1: drag= &drag_rotate; break; case Button2: drag= &drag_sizeadj; break; - case Button3: drag= &drag_3d; break; + case Button3: drag= &drag_3d; break; default: printf("unknown drag start %d\n", e->button); } printf("drag=%s press button=%lu start %d,%d\n", -- 2.30.2