1 /* $Header: /home/yav/xpx/RCS/grid.c,v 1.13 1995/11/23 16:28:39 yav Exp $
2 * xpx gird
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 "griddef.h"
14 #define PUBLIC_GRID_C
15 #include "extern.h"
16
17 #define GRIDN 3
18 #define GRIDW 24
19 #define GRIDH 18
20 #define MAXGRID 32
21
22 char rcsid_grid[] = "$Id: grid.c,v 1.13 1995/11/23 16:28:39 yav Exp $";
23
24 int gridev();
25
26 #define IMASK (ExposureMask|EnterWindowMask|LeaveWindowMask|ButtonPressMask)
27 static MENU gridmenu[] = {
28 {
29 GRID_OUT, MenuModeMaskBorder,
30 0, 0, GRIDW, GRIDH,
31 0, IMASK, 0,
32 gridev, NULL, 0, 0, "<"},
33 {
34 GRID_NUM, MenuModeMaskBorder,
35 GRIDW+BDW, 0, GRIDW, GRIDH,
36 0, IMASK|KeyPressMask, 0,
37 gridev, NULL, 0, 8, NULL},
38 {
39 GRID_IN, MenuModeMaskBorder,
40 (GRIDW+BDW)*2, 0, GRIDW, GRIDH,
41 0, IMASK, 0,
42 gridev, NULL, 0, 0, ">"},
43 {
44 -1, 0,
45 0, 0, 0, 0,
46 0, 0, 0,
47 NULL, NULL, 0, 0, NULL}};
48
49 /* return 0: no changed */
set_grid_size(int n)50 int set_grid_size(
51 #if NeedFunctionPrototypes
52 int n)
53 #else
54 n)
55 int n;
56 #endif
57 {
58 int last_grid_size;
59
60 last_grid_size = grid_size;
61 if (0 < n && n <= MAXGRID)
62 grid_size = n;
63 sprintf(gridmenu[GRID_NUM].str, "%d", grid_size);
64 gridmenu[GRID_NUM].cursor = strlen(gridmenu[GRID_NUM].str);
65 redraw_window(gridmenu[GRID_NUM].win);
66 return grid_size - last_grid_size;
67 }
68
create_grid_window(win,x,y)69 void create_grid_window(win, x, y)
70 Window win;
71 int x;
72 int y;
73 {
74 topmenuwin_create(gridmenu, x, y);
75 set_grid_size(grid_size);
76 }
77
grid_in()78 void grid_in()
79 {
80 gridmenu[GRID_IN].mode |= MenuModeMaskOn;
81 menuwin_expose_default(&gridmenu[GRID_IN]);
82 if (set_grid_size(grid_size+1) && grid_mode)
83 img_expose(0, 0, imgwinwidth, imgwinheight);
84 gridmenu[GRID_IN].mode &= ~MenuModeMaskOn;
85 menuwin_expose_default(&gridmenu[GRID_IN]);
86 }
87
grid_out()88 void grid_out()
89 {
90 gridmenu[GRID_OUT].mode |= MenuModeMaskOn;
91 menuwin_expose_default(&gridmenu[GRID_OUT]);
92 if (set_grid_size(grid_size-1) && grid_mode)
93 img_expose(0, 0, imgwinwidth, imgwinheight);
94 gridmenu[GRID_OUT].mode &= ~MenuModeMaskOn;
95 menuwin_expose_default(&gridmenu[GRID_OUT]);
96 }
97
gridev(MENU * p,XEvent * ev)98 int gridev(
99 #if NeedFunctionPrototypes
100 MENU *p, XEvent *ev)
101 #else
102 p, ev)
103 MENU *p;
104 XEvent *ev;
105 #endif
106 {
107 int i;
108 KeySym key;
109 char buf[16];
110
111 switch(ev->type) {
112 case ButtonPress:
113 p->mode ^= MenuModeMaskOn;
114 switch(p->n) {
115 case GRID_OUT:
116 grid_out();
117 break;
118 case GRID_NUM:
119 grid_mode = p->mode & MenuModeMaskOn ? True : False;
120 img_expose(0, 0, imgwinwidth, imgwinheight);
121 break;
122 case GRID_IN:
123 grid_in();
124 break;
125 }
126 redraw_window(p->win);
127 return 1;
128 case KeyPress:
129 switch(p->n) {
130 case GRID_NUM:
131 i = XLookupString((XKeyEvent *)ev, buf, sizeof(buf)-1, &key, NULL);
132 buf[i] = '\0';
133 switch(key) {
134 case XK_KP_Enter:
135 case XK_Return:
136 i = strtol(p->str, NULL, 0);
137 if (set_grid_size(i) && grid_mode)
138 img_expose(0, 0, imgwinwidth, imgwinheight);
139 break;
140 }
141 break;
142 }
143 break;
144 }
145 return 0;
146 }
147
148 /* End of file */
149