1 /* $Header: /home/yav/xpx/RCS/zoom.c,v 1.13 1995/11/23 16:28:39 yav Exp $
2  * xpx zoom menu
3  * written by yav (UHD98984@pcvan.or.jp)
4  */
5 
6 #include <X11/Xlib.h>
7 #include <X11/Xutil.h>
8 #include <X11/keysym.h>
9 
10 #include "headers.h"
11 #include "xpx.h"
12 #include "work.h"
13 #include "zoomdef.h"
14 #define PUBLIC_ZOOM_C
15 #include "extern.h"
16 
17 #define ZOOMW	24
18 #define ZOOMH	18
19 
20 char rcsid_zoom[] = "$Id: zoom.c,v 1.13 1995/11/23 16:28:39 yav Exp $";
21 
22 int zmev();
23 int zmev2(
24 #if NeedFunctionPrototypes
25 	  MENU *p, XEvent *ev
26 #endif
27 	  );
28 
29 static MENU zoommenu[] = {
30   {
31     ZOOM_OUT,	MenuModeMaskBorder,
32     0, 0, ZOOMW, ZOOMH,
33     0, ExposureMask|EnterWindowMask|LeaveWindowMask|ButtonPressMask, 0,
34     zmev, NULL, 0, 0, "<"},
35   {
36     ZOOM_NUM,	MenuModeMaskBorder,
37     ZOOMW+BDW, 0, ZOOMW, ZOOMH,
38     0,
39     ExposureMask|EnterWindowMask|LeaveWindowMask|KeyPressMask,
40     0,
41     zmev2, NULL, 0, 8, NULL},
42   {
43     ZOOM_IN,	MenuModeMaskBorder,
44     (ZOOMW+BDW)*2, 0, ZOOMW, ZOOMH,
45     0, ExposureMask|EnterWindowMask|LeaveWindowMask|ButtonPressMask, 0,
46     zmev, NULL, 0, 0, ">"},
47   {
48     -1,	0,
49     0, 0, 0, 0,
50     0, 0, 0,
51     NULL, NULL, 0, 0, NULL}};
52 
53 /* return 0: no changed */
set_zoomfactor(int n)54 int set_zoomfactor(
55 #if NeedFunctionPrototypes
56 		   int n)
57 #else
58      n)
59      int n;
60 #endif
61 {
62   int last_zoomfactor;
63 
64   last_zoomfactor = zoomfactor;
65   if (0 < n && n <= maxzoom)
66     zoomfactor = n;
67   sprintf(zoommenu[ZOOM_NUM].str, "%d", zoomfactor);
68   zoommenu[ZOOM_NUM].cursor = strlen(zoommenu[ZOOM_NUM].str);
69   redraw_window(zoommenu[ZOOM_NUM].win);
70   return zoomfactor - last_zoomfactor;
71 }
72 
create_zoom_window(win,x,y)73 void create_zoom_window(win, x, y)
74      Window win;
75      int x;
76      int y;
77 {
78   topmenuwin_create(zoommenu, x, y);
79   set_zoomfactor(zoomfactor);
80 }
81 
zoom_change(int n)82 void zoom_change(
83 #if NeedFunctionPrototypes
84 		 int n)
85 #else
86      n)
87      int n;
88 #endif
89 {
90   if (set_zoomfactor(n)) {
91     img_scroll_posreset();
92     image_update_all();
93   }
94 }
95 
zoom_in()96 void zoom_in()
97 {
98   zoommenu[ZOOM_IN].mode |= MenuModeMaskOn;
99   menuwin_expose_default(&zoommenu[ZOOM_IN]);
100   zoom_change(zoomfactor+1);
101   zoommenu[ZOOM_IN].mode &= ~MenuModeMaskOn;
102   redraw_window(zoommenu[ZOOM_IN].win);
103 }
104 
zoom_out()105 void zoom_out()
106 {
107   zoommenu[ZOOM_OUT].mode |= MenuModeMaskOn;
108   menuwin_expose_default(&zoommenu[ZOOM_OUT]);
109   zoom_change(zoomfactor-1);
110   zoommenu[ZOOM_OUT].mode &= ~MenuModeMaskOn;
111   redraw_window(zoommenu[ZOOM_OUT].win);
112 }
113 
zmev(p,ev)114 int zmev(p, ev)
115      MENU *p;
116      XEvent *ev;
117 {
118   switch(ev->type) {
119   case ButtonPress:
120     switch(p->n) {
121     case ZOOM_OUT:
122       if (ev->xbutton.button == 1)
123 	zoom_out();
124       else
125 	zoom_change(1);
126       break;
127     case ZOOM_IN:
128       if (ev->xbutton.button == 1)
129 	zoom_in();
130       else
131 	zoom_change(maxzoom);
132       break;
133     }
134     return 1;
135   }
136   return 0;
137 }
138 
gen_zoom_str(MENU * p)139 void gen_zoom_str(
140 #if NeedFunctionPrototypes
141 		  MENU *p)
142 #else
143      p)
144      MENU *p;
145 #endif
146 {
147 }
148 
zmev2(MENU * p,XEvent * ev)149 int zmev2(
150 #if NeedFunctionPrototypes
151 	  MENU *p, XEvent *ev)
152 #else
153      p, ev)
154      MENU *p;
155      XEvent *ev;
156 #endif
157 {
158   int i;
159   KeySym key;
160   char buf[16];
161 
162   switch(ev->type) {
163   case KeyPress:
164     i = XLookupString((XKeyEvent *)ev, buf, sizeof(buf)-1, &key, NULL);
165     buf[i] = '\0';
166     switch(key) {
167     case XK_KP_Enter:
168     case XK_Return:
169       i = strtol(p->str, NULL, 0);
170       zoom_change(i);
171     }
172     break;
173   }
174   return 0;
175 }
176 
177 /* End of file */
178