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