Lines Matching defs:pw

190 static void reset_shadow_gc (pw)	/* used when resources change */
191 PannerWidget pw;
197 if (pw->panner.shadow_gc) XtReleaseGC ((Widget) pw, pw->panner.shadow_gc);
199 pixels[0] = pw->panner.foreground;
200 pixels[1] = pw->core.background_pixel;
201 pixels[2] = pw->panner.shadow_color;
202 if (!pw->panner.stipple_name &&
203 !XmuDistinguishablePixels (XtDisplay (pw), pw->core.colormap,
205 XmuDistinguishablePixels (XtDisplay (pw), pw->core.colormap,
210 values.tile = XmuCreateStippledPixmap(XtScreen((Widget)pw),
211 pw->panner.foreground,
212 pw->core.background_pixel,
213 pw->core.depth);
217 if (!pw->panner.line_width &&
218 !XmuDistinguishablePixels (XtDisplay (pw), pw->core.colormap,
220 pw->panner.line_width = 1;
222 values.foreground = pw->panner.shadow_color;
224 if (pw->panner.line_width > 0) {
225 values.line_width = pw->panner.line_width;
229 pw->panner.shadow_gc = XtGetGC ((Widget) pw, valuemask, &values);
232 static void reset_slider_gc (pw) /* used when resources change */
233 PannerWidget pw;
238 if (pw->panner.slider_gc) XtReleaseGC ((Widget) pw, pw->panner.slider_gc);
240 values.foreground = pw->panner.foreground;
242 pw->panner.slider_gc = XtGetGC ((Widget) pw, valuemask, &values);
245 static void reset_xor_gc (pw) /* used when resources change */
246 PannerWidget pw;
248 if (pw->panner.xor_gc) XtReleaseGC ((Widget) pw, pw->panner.xor_gc);
250 if (pw->panner.rubber_band) {
255 tmp = ((pw->panner.foreground == pw->core.background_pixel) ?
256 pw->panner.shadow_color : pw->panner.foreground);
257 values.foreground = tmp ^ pw->core.background_pixel;
259 if (pw->panner.line_width > 0) {
261 values.line_width = pw->panner.line_width;
263 pw->panner.xor_gc = XtGetGC ((Widget) pw, valuemask, &values);
265 pw->panner.xor_gc = NULL;
270 static void check_knob (pw, knob)
271 PannerWidget pw;
274 Position pad = pw->panner.internal_border * 2;
275 Position maxx = (((Position) pw->core.width) - pad -
276 ((Position) pw->panner.knob_width));
277 Position maxy = (((Position) pw->core.height) - pad -
278 ((Position) pw->panner.knob_height));
279 Position *x = (knob ? &pw->panner.knob_x : &pw->panner.tmp.x);
280 Position *y = (knob ? &pw->panner.knob_y : &pw->panner.tmp.y);
293 pw->panner.slider_x = (Position) (((double) pw->panner.knob_x) /
294 pw->panner.haspect + 0.5);
295 pw->panner.slider_y = (Position) (((double) pw->panner.knob_y) /
296 pw->panner.vaspect + 0.5);
297 pw->panner.last_x = pw->panner.last_y = PANNER_OUTOFRANGE;
302 static void move_shadow (pw)
303 PannerWidget pw;
305 if (pw->panner.shadow_thickness > 0) {
306 int lw = pw->panner.shadow_thickness + pw->panner.line_width * 2;
307 int pad = pw->panner.internal_border;
309 if ((int)pw->panner.knob_height > lw && (int)pw->panner.knob_width > lw) {
310 XRectangle *r = pw->panner.shadow_rects;
311 r->x = (short) (pw->panner.knob_x + pad + pw->panner.knob_width);
312 r->y = (short) (pw->panner.knob_y + pad + lw);
313 r->width = pw->panner.shadow_thickness;
314 r->height = (unsigned short) (pw->panner.knob_height - lw);
316 r->x = (short) (pw->panner.knob_x + pad + lw);
317 r->y = (short) (pw->panner.knob_y + pad + pw->panner.knob_height);
318 r->width = (unsigned short) (pw->panner.knob_width - lw +
319 pw->panner.shadow_thickness);
320 r->height = pw->panner.shadow_thickness;
321 pw->panner.shadow_valid = TRUE;
325 pw->panner.shadow_valid = FALSE;
328 static void scale_knob (pw, location, size) /* set knob size and/or loc */
329 PannerWidget pw;
333 pw->panner.knob_x = (Position) PANNER_HSCALE (pw, pw->panner.slider_x);
334 pw->panner.knob_y = (Position) PANNER_VSCALE (pw, pw->panner.slider_y);
339 if (pw->panner.slider_width < 1) {
340 pw->panner.slider_width = pw->panner.canvas_width;
342 if (pw->panner.slider_height < 1) {
343 pw->panner.slider_height = pw->panner.canvas_height;
345 width = Min (pw->panner.slider_width, pw->panner.canvas_width);
346 height = Min (pw->panner.slider_height, pw->panner.canvas_height);
348 pw->panner.knob_width = (Dimension) PANNER_HSCALE (pw, width);
349 pw->panner.knob_height = (Dimension) PANNER_VSCALE (pw, height);
351 if (!pw->panner.allow_off) check_knob (pw, TRUE);
352 move_shadow (pw);
355 static void rescale (pw)
356 PannerWidget pw;
358 int hpad = pw->panner.internal_border * 2;
361 if (pw->panner.canvas_width < 1)
362 pw->panner.canvas_width = pw->core.width;
363 if (pw->panner.canvas_height < 1)
364 pw->panner.canvas_height = pw->core.height;
366 if ((int)pw->core.width <= hpad) hpad = 0;
367 if ((int)pw->core.height <= vpad) vpad = 0;
369 pw->panner.haspect = ((double) pw->core.width - hpad) /
370 (double) pw->panner.canvas_width;
371 pw->panner.vaspect = ((double) pw->core.height - vpad) /
372 (double) pw->panner.canvas_height;
373 scale_knob (pw, TRUE, TRUE);
377 static void get_default_size (pw, wp, hp)
378 PannerWidget pw;
381 Dimension pad = pw->panner.internal_border * 2;
382 *wp = PANNER_DSCALE (pw, pw->panner.canvas_width) + pad;
383 *hp = PANNER_DSCALE (pw, pw->panner.canvas_height) + pad;
386 static Boolean get_event_xy (pw, event, x, y)
387 PannerWidget pw;
391 int pad = pw->panner.internal_border;
469 #define DRAW_TMP(pw) \
471 XDrawRectangle (XtDisplay(pw), XtWindow(pw), \
472 pw->panner.xor_gc, \
473 (int) (pw->panner.tmp.x + pw->panner.internal_border), \
474 (int) (pw->panner.tmp.y + pw->panner.internal_border), \
475 (unsigned int) (pw->panner.knob_width - 1), \
476 (unsigned int) (pw->panner.knob_height - 1)); \
477 pw->panner.tmp.showing = !pw->panner.tmp.showing; \
480 #define UNDRAW_TMP(pw) \
482 if (pw->panner.tmp.showing) DRAW_TMP(pw); \
485 #define BACKGROUND_STIPPLE(pw) \
486 XmuLocatePixmapFile (pw->core.screen, pw->panner.stipple_name, \
487 pw->panner.shadow_color, pw->core.background_pixel, \
488 pw->core.depth, NULL, 0, NULL, NULL, NULL, NULL)
537 PannerWidget pw = (PannerWidget) gw;
541 if (pw->core.background_pixmap == XtUnspecifiedPixmap) {
542 if (pw->panner.stipple_name) pm = BACKGROUND_STIPPLE (pw);
561 PannerWidget pw = (PannerWidget) gw;
563 XtReleaseGC (gw, pw->panner.shadow_gc);
564 XtReleaseGC (gw, pw->panner.slider_gc);
565 XtReleaseGC (gw, pw->panner.xor_gc);
582 PannerWidget pw = (PannerWidget) gw;
585 int pad = pw->panner.internal_border;
586 Dimension lw = pw->panner.line_width;
587 Dimension extra = pw->panner.shadow_thickness + lw * 2;
588 int kx = pw->panner.knob_x + pad, ky = pw->panner.knob_y + pad;
590 pw->panner.tmp.showing = FALSE;
591 XClearArea (XtDisplay(pw), XtWindow(pw),
592 (int) pw->panner.last_x - ((int) lw) + pad,
593 (int) pw->panner.last_y - ((int) lw) + pad,
594 (unsigned int) (pw->panner.knob_width + extra),
595 (unsigned int) (pw->panner.knob_height + extra),
597 pw->panner.last_x = pw->panner.knob_x;
598 pw->panner.last_y = pw->panner.knob_y;
600 XFillRectangle (dpy, w, pw->panner.slider_gc, kx, ky,
601 pw->panner.knob_width - 1, pw->panner.knob_height - 1);
605 XDrawRectangle (dpy, w, pw->panner.shadow_gc, kx, ky,
606 (unsigned int) (pw->panner.knob_width - 1),
607 (unsigned int) (pw->panner.knob_height - 1));
610 if (pw->panner.shadow_valid) {
611 XFillRectangles (dpy, w, pw->panner.shadow_gc,
612 pw->panner.shadow_rects, 2);
614 if (pw->panner.tmp.doing && pw->panner.rubber_band) DRAW_TMP (pw);
712 PannerWidget pw = (PannerWidget) gw;
715 get_default_size (pw, &pref->width, &pref->height);
722 else if (pref->width == pw->core.width && pref->height == pw->core.height)
742 PannerWidget pw = (PannerWidget) gw;
745 if (!get_event_xy (pw, event, &x, &y)) {
750 pw->panner.tmp.doing = TRUE;
751 pw->panner.tmp.startx = pw->panner.knob_x;
752 pw->panner.tmp.starty = pw->panner.knob_y;
753 pw->panner.tmp.dx = (((Position) x) - pw->panner.knob_x);
754 pw->panner.tmp.dy = (((Position) y) - pw->panner.knob_y);
755 pw->panner.tmp.x = pw->panner.knob_x;
756 pw->panner.tmp.y = pw->panner.knob_y;
757 if (pw->panner.rubber_band) DRAW_TMP (pw);
767 PannerWidget pw = (PannerWidget) gw;
770 if (get_event_xy (pw, event, &x, &y)) {
771 pw->panner.tmp.x = ((Position) x) - pw->panner.tmp.dx;
772 pw->panner.tmp.y = ((Position) y) - pw->panner.tmp.dy;
773 if (!pw->panner.allow_off) check_knob (pw, FALSE);
775 if (pw->panner.rubber_band) UNDRAW_TMP (pw);
776 pw->panner.tmp.doing = FALSE;
786 PannerWidget pw = (PannerWidget) gw;
788 if (!pw->panner.tmp.doing) return;
790 if (pw->panner.rubber_band) UNDRAW_TMP (pw);
792 if (!pw->panner.rubber_band) { /* restore old position */
793 pw->panner.tmp.x = pw->panner.tmp.startx;
794 pw->panner.tmp.y = pw->panner.tmp.starty;
797 pw->panner.tmp.doing = FALSE;
808 PannerWidget pw = (PannerWidget) gw;
811 if (!pw->panner.tmp.doing) return;
813 if (!get_event_xy (pw, event, &x, &y)) {
818 if (pw->panner.rubber_band) UNDRAW_TMP (pw);
819 pw->panner.tmp.x = ((Position) x) - pw->panner.tmp.dx;
820 pw->panner.tmp.y = ((Position) y) - pw->panner.tmp.dy;
822 if (!pw->panner.rubber_band) {
825 if (!pw->panner.allow_off) check_knob (pw, FALSE);
826 DRAW_TMP (pw);
838 PannerWidget pw = (PannerWidget) gw;
840 Boolean isin = pw->panner.tmp.doing;
843 int pad = pw->panner.internal_border * 2;
850 x = parse_page_string (params[0], (int) pw->panner.knob_width,
851 ((int) pw->core.width) - pad, &relx);
852 y = parse_page_string (params[1], (int) pw->panner.knob_height,
853 ((int) pw->core.height) - pad, &rely);
855 if (relx) x += pw->panner.knob_x;
856 if (rely) y += pw->panner.knob_y;
865 pw->panner.tmp.doing = TRUE;
866 pw->panner.tmp.x = x;
867 pw->panner.tmp.y = y;
869 pw->panner.tmp.doing = FALSE;
881 PannerWidget pw = (PannerWidget) gw;
883 if (!pw->panner.tmp.doing) return;
885 if (!pw->panner.allow_off) check_knob (pw, FALSE);
886 pw->panner.knob_x = pw->panner.tmp.x;
887 pw->panner.knob_y = pw->panner.tmp.y;
888 move_shadow (pw);
890 pw->panner.slider_x = (Position) (((double) pw->panner.knob_x) /
891 pw->panner.haspect + 0.5);
892 pw->panner.slider_y = (Position) (((double) pw->panner.knob_y) /
893 pw->panner.vaspect + 0.5);
894 if (!pw->panner.allow_off) {
897 if (pw->panner.slider_x >
898 (tmp = (((Position) pw->panner.canvas_width) -
899 ((Position) pw->panner.slider_width))))
900 pw->panner.slider_x = tmp;
901 if (pw->panner.slider_x < 0) pw->panner.slider_x = 0;
902 if (pw->panner.slider_y >
903 (tmp = (((Position) pw->panner.canvas_height) -
904 ((Position) pw->panner.slider_height))))
905 pw->panner.slider_y = tmp;
906 if (pw->panner.slider_y < 0) pw->panner.slider_y = 0;
909 if (pw->panner.last_x != pw->panner.knob_x ||
910 pw->panner.last_y != pw->panner.knob_y) {
915 rep.slider_x = pw->panner.slider_x;
916 rep.slider_y = pw->panner.slider_y;
917 rep.slider_width = pw->panner.slider_width;
918 rep.slider_height = pw->panner.slider_height;
919 rep.canvas_width = pw->panner.canvas_width;
920 rep.canvas_height = pw->panner.canvas_height;
921 XtCallCallbackList (gw, pw->panner.report_callbacks, (XtPointer) &rep);
932 PannerWidget pw = (PannerWidget) gw;
946 rb = !pw->panner.rubber_band;
952 if (rb != pw->panner.rubber_band) {