glviewvol
diff src/dicomview.cc @ 10:89efc666105c
mostly done
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Wed, 31 Dec 2014 05:21:47 +0200 |
parents | fb6d93471352 |
children |
line diff
1.1 --- a/src/dicomview.cc Tue Dec 30 21:20:57 2014 +0200 1.2 +++ b/src/dicomview.cc Wed Dec 31 05:21:47 2014 +0200 1.3 @@ -134,43 +134,51 @@ 1.4 } 1.5 } 1.6 1.7 +static bool zscaling; 1.8 + 1.9 void ev_keyboard(int key, int press, int x, int y) 1.10 { 1.11 RendererFast *fr; 1.12 1.13 - if(press) { 1.14 - switch(key) { 1.15 - case 27: 1.16 + switch(key) { 1.17 + case 27: 1.18 + if(press) { 1.19 quit(); 1.20 + } 1.21 + break; 1.22 1.23 - case '=': 1.24 - if((fr = dynamic_cast<RendererFast*>(rend))) { 1.25 - int n = fr->get_proxy_count(); 1.26 - int add = n / 4; 1.27 - n += add < 1 ? 1 : add; 1.28 - printf("proxy count: %d\n", n); 1.29 - fr->set_proxy_count(n); 1.30 - } 1.31 + case 'z': 1.32 + case 'Z': 1.33 + zscaling = press; 1.34 + break; 1.35 + 1.36 + case '=': 1.37 + if(press && (fr = dynamic_cast<RendererFast*>(rend))) { 1.38 + int n = fr->get_proxy_count(); 1.39 + int add = n / 4; 1.40 + n += add < 1 ? 1 : add; 1.41 + printf("proxy count: %d\n", n); 1.42 + fr->set_proxy_count(n); 1.43 redisplay(); 1.44 - break; 1.45 + } 1.46 + break; 1.47 1.48 - case '-': 1.49 - if((fr = dynamic_cast<RendererFast*>(rend))) { 1.50 - int n = fr->get_proxy_count(); 1.51 - int sub = n / 4; 1.52 - n -= sub < 1 ? 1 : sub; 1.53 + case '-': 1.54 + if(press && (fr = dynamic_cast<RendererFast*>(rend))) { 1.55 + int n = fr->get_proxy_count(); 1.56 + int sub = n / 4; 1.57 + n -= sub < 1 ? 1 : sub; 1.58 1.59 - if(n < 1) n = 1; 1.60 + if(n < 1) n = 1; 1.61 1.62 - printf("proxy count: %d\n", n); 1.63 - fr->set_proxy_count(n); 1.64 - } 1.65 + printf("proxy count: %d\n", n); 1.66 + fr->set_proxy_count(n); 1.67 redisplay(); 1.68 - break; 1.69 + } 1.70 + break; 1.71 1.72 - default: 1.73 - break; 1.74 - } 1.75 + default: 1.76 + break; 1.77 } 1.78 } 1.79 1.80 @@ -202,6 +210,13 @@ 1.81 1.82 if((dx | dy) == 0) return; 1.83 1.84 + if(bnstate[0] && zscaling) { 1.85 + float s = rend->get_zscale() + (float)dy / (float)win_height; 1.86 + rend->set_zscale(s < 0.0 ? 0.0 : s); 1.87 + redisplay(); 1.88 + return; 1.89 + } 1.90 + 1.91 if(splitter_dragging) { 1.92 splitter_y += dy; 1.93 redisplay();