Home | History | Annotate | Download | only in src

Lines Matching refs:pw

338 reset_shadow_gc(PannerWidget pw)
344 if (pw->panner.shadow_gc)
345 XtReleaseGC((Widget)pw, pw->panner.shadow_gc);
347 pixels[0] = pw->panner.foreground;
348 pixels[1] = pw->core.background_pixel;
349 pixels[2] = pw->panner.shadow_color;
351 if (!pw->panner.stipple_name &&
352 !XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
354 XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
358 values.tile = XmuCreateStippledPixmap(XtScreen((Widget)pw),
359 pw->panner.foreground,
360 pw->core.background_pixel,
361 pw->core.depth);
364 if (!pw->panner.line_width &&
365 !XmuDistinguishablePixels(XtDisplay(pw), pw->core.colormap,
367 pw->panner.line_width = 1;
369 values.foreground = pw->panner.shadow_color;
371 if (pw->panner.line_width > 0) {
372 values.line_width = pw->panner.line_width;
376 pw->panner.shadow_gc = XtGetGC((Widget)pw, valuemask, &values);
380 reset_slider_gc(PannerWidget pw)
385 if (pw->panner.slider_gc)
386 XtReleaseGC((Widget)pw, pw->panner.slider_gc);
388 values.foreground = pw->panner.foreground;
390 pw->panner.slider_gc = XtGetGC((Widget)pw, valuemask, &values);
394 reset_xor_gc(PannerWidget pw)
396 if (pw->panner.xor_gc)
397 XtReleaseGC((Widget)pw, pw->panner.xor_gc);
399 if (pw->panner.rubber_band) {
404 tmp = (pw->panner.foreground == pw->core.background_pixel ?
405 pw->panner.shadow_color : pw->panner.foreground);
406 values.foreground = tmp ^ pw->core.background_pixel;
408 if (pw->panner.line_width > 0) {
410 values.line_width = pw->panner.line_width;
412 pw->panner.xor_gc = XtGetGC((Widget)pw, valuemask, &values);
415 pw->panner.xor_gc = NULL;
419 check_knob(PannerWidget pw, Bool knob)
421 Position pad = (Position)(pw->panner.internal_border << 1);
422 Position maxx = (Position)(XtWidth(pw) - pad - pw->panner.knob_width);
423 Position maxy = (Position)(XtHeight(pw) - pad - pw->panner.knob_height);
424 Position *x = knob ? &pw->panner.knob_x : &pw->panner.tmp.x;
425 Position *y = knob ? &pw->panner.knob_y : &pw->panner.tmp.y;
442 pw->panner.slider_x = (Position)((double)pw->panner.knob_x
443 / pw->panner.haspect + 0.5);
444 pw->panner.slider_y = (Position)((double)pw->panner.knob_y
445 / pw->panner.vaspect + 0.5);
446 pw->panner.last_x = pw->panner.last_y = PANNER_OUTOFRANGE;
451 move_shadow(PannerWidget pw)
453 if (pw->panner.shadow_thickness > 0) {
454 int lw = pw->panner.shadow_thickness + (pw->panner.line_width << 1);
455 int pad = pw->panner.internal_border;
457 if (pw->panner.knob_height > lw && pw->panner.knob_width > lw) {
458 XRectangle *r = pw->panner.shadow_rects;
460 r->x = (short)(pw->panner.knob_x + pad + pw->panner.knob_width);
461 r->y = (short)(pw->panner.knob_y + pad + lw);
462 r->width = (unsigned short)(pw->panner.shadow_thickness);
463 r->height = (unsigned short)(pw->panner.knob_height - lw);
465 r->x = (short)(pw->panner.knob_x + pad + lw);
466 r->y = (short)(pw->panner.knob_y + pad + pw->panner.knob_height);
467 r->width = (unsigned short)(pw->panner.knob_width - lw + pw->panner.shadow_thickness);
468 r->height = (unsigned short)(pw->panner.shadow_thickness);
469 pw->panner.shadow_valid = True;
473 pw->panner.shadow_valid = False;
477 scale_knob(PannerWidget pw, Bool location, Bool size)
480 pw->panner.knob_x = (Position)PANNER_HSCALE(pw, pw->panner.slider_x);
481 pw->panner.knob_y = (Position)PANNER_VSCALE(pw, pw->panner.slider_y);
486 if (pw->panner.slider_width < 1)
487 pw->panner.slider_width = pw->panner.canvas_width;
488 if (pw->panner.slider_height < 1)
489 pw->panner.slider_height = pw->panner.canvas_height;
490 width = Min(pw->panner.slider_width, pw->panner.canvas_width);
491 height = Min(pw->panner.slider_height, pw->panner.canvas_height);
493 pw->panner.knob_width = (Dimension)PANNER_HSCALE(pw, width);
494 pw->panner.knob_height = (Dimension)PANNER_VSCALE(pw, height);
496 if (!pw->panner.allow_off)
497 check_knob(pw, True);
498 move_shadow(pw);
502 rescale(PannerWidget pw)
504 int hpad = pw->panner.internal_border << 1;
507 if (pw->panner.canvas_width < 1)
508 pw->panner.canvas_width = XtWidth(pw);
509 if (pw->panner.canvas_height < 1)
510 pw->panner.canvas_height = XtHeight(pw);
512 if (XtWidth(pw) <= hpad)
514 if (XtHeight(pw) <= vpad)
517 pw->panner.haspect = ((double)XtWidth(pw) - hpad + .5)
518 / (double)pw->panner.canvas_width;
519 pw->panner.vaspect = ((double)XtHeight(pw) - vpad + .5)
520 / (double)pw->panner.canvas_height;
521 scale_knob(pw, True, True);
525 get_default_size(PannerWidget pw, Dimension *wp, Dimension *hp)
527 Dimension pad = (Dimension)(pw->panner.internal_border << 1);
529 *wp = (Dimension)(PANNER_DSCALE(pw, pw->panner.canvas_width) + pad);
530 *hp = (Dimension)(PANNER_DSCALE(pw, pw->panner.canvas_height) + pad);
534 get_event_xy(PannerWidget pw, XEvent *event, int *x, int *y)
536 int pad = pw->panner.internal_border;
613 #define DRAW_TMP(pw) \
615 XDrawRectangle(XtDisplay(pw), XtWindow(pw), \
616 pw->panner.xor_gc, \
617 (pwpw->panner.internal_border), \
618 (pw->panner.tmp.y + pw->panner.internal_border), \
619 (unsigned)(pw->panner.knob_width - 1), \
620 (unsigned)(pw->panner.knob_height - 1)); \
621 pw->panner.tmp.showing = !pw->panner.tmp.showing; \
624 #define UNDRAW_TMP(pw) \
626 if (pw->panner.tmp.showing) \
627 DRAW_TMP(pw); \
630 #define BACKGROUND_STIPPLE(pw) \
631 XmuLocatePixmapFile(pw->core.screen, pw->panner.stipple_name, \
632 pw->panner.shadow_color, pw->core.background_pixel, \
633 pw->core.depth, NULL, 0, NULL, NULL, NULL, NULL)
674 PannerWidget pw = (PannerWidget)gw;
678 if (pw->core.background_pixmap == XtUnspecifiedPixmap) {
679 if (pw->panner.stipple_name)
680 pm = BACKGROUND_STIPPLE(pw);
699 PannerWidget pw = (PannerWidget)gw;
701 XtReleaseGC(gw, pw->panner.shadow_gc);
702 XtReleaseGC(gw, pw->panner.slider_gc);
703 XtReleaseGC(gw, pw->panner.xor_gc);
715 PannerWidget pw = (PannerWidget)gw;
718 int pad = pw->panner.internal_border;
719 Dimension lw = pw->panner.line_width;
720 Dimension extra = (Dimension)(pw->panner.shadow_thickness + (lw << 1));
721 int kx = pw->panner.knob_x + pad, ky = pw->panner.knob_y + pad;
726 pw->panner.tmp.showing = False;
727 XClearArea(XtDisplay(pw), XtWindow(pw),
728 (int)pw->panner.last_x - ((int)lw) + pad,
729 (int)pw->panner.last_y - ((int)lw) + pad,
730 (unsigned)(pw->panner.knob_width + extra),
731 (unsigned)(pw->panner.knob_height + extra),
733 pw->panner.last_x = pw->panner.knob_x;
734 pw->panner.last_y = pw->panner.knob_y;
736 XFillRectangle(dpy, w, pw->panner.slider_gc, kx, ky,
737 (unsigned)(pw->panner.knob_width - 1),
738 (unsigned)(pw->panner.knob_height - 1));
741 XDrawRectangle(dpy, w, pw->panner.shadow_gc, kx, ky,
742 (unsigned)(pw->panner.knob_width - 1),
743 (unsigned)(pw->panner.knob_height - 1));
745 if (pw->panner.shadow_valid)
746 XFillRectangles(dpy, w, pw->panner.shadow_gc, pw->panner.shadow_rects, 2);
748 if (pw->panner.tmp.doing && pw->panner.rubber_band)
749 DRAW_TMP(pw);
849 PannerWidget pw = (PannerWidget)gw;
852 get_default_size(pw, &pref->width, &pref->height);
857 else if (pref->width == XtWidth(pw) && pref->height == XtHeight(pw))
868 PannerWidget pw = (PannerWidget)gw;
871 if (!get_event_xy(pw, event, &x, &y)) {
876 pw->panner.tmp.doing = True;
877 pw->panner.tmp.startx = pw->panner.knob_x;
878 pw->panner.tmp.starty = pw->panner.knob_y;
879 pw->panner.tmp.dx = (Position)(x - pw->panner.knob_x);
880 pw->panner.tmp.dy = (Position)(y - pw->panner.knob_y);
881 pw->panner.tmp.x = pw->panner.knob_x;
882 pw->panner.tmp.y = pw->panner.knob_y;
883 if (pw->panner.rubber_band)
884 DRAW_TMP(pw);
891 PannerWidget pw = (PannerWidget)gw;
894 if (get_event_xy(pw, event, &x, &y)) {
895 pw->panner.tmp.x = (Position)(x - pw->panner.tmp.dx);
896 pw->panner.tmp.y = (Position)(y - pw->panner.tmp.dy);
897 if (!pw->panner.allow_off)
898 check_knob(pw, False);
900 if (pw->panner.rubber_band)
901 DRAW_TMP(pw);
902 pw->panner.tmp.doing = False;
908 PannerWidget pw = (PannerWidget)gw;
910 if (!pw->panner.tmp.doing)
913 if (pw->panner.rubber_band)
914 UNDRAW_TMP(pw);
916 if (!pw->panner.rubber_band) { /* restore old position */
917 pw->panner.tmp.x = pw->panner.tmp.startx;
918 pw->panner.tmp.y = pw->panner.tmp.starty;
921 pw->panner.tmp.doing = False;
927 PannerWidget pw = (PannerWidget)gw;
930 if (!pw->panner.tmp.doing)
933 if (!get_event_xy(pw, event, &x, &y)) {
938 if (pw->panner.rubber_band)
939 UNDRAW_TMP(pw);
940 pw->panner.tmp.x = (Position)(x - pw->panner.tmp.dx);
941 pw->panner.tmp.y = (Position)(y - pw->panner.tmp.dy);
943 if (!pw->panner.rubber_band)
946 if (!pw->panner.allow_off)
947 check_knob(pw, False);
948 DRAW_TMP(pw);
956 PannerWidget pw = (PannerWidget)gw;
958 Bool isin = pw->panner.tmp.doing;
961 int pad = pw->panner.internal_border << 1;
968 x = parse_page_string(params[0], pw->panner.knob_width,
969 (int)XtWidth(pw) - pad, &relx);
970 y = parse_page_string(params[1], pw->panner.knob_height,
971 (int)XtHeight(pw) - pad, &rely);
974 x += pw->panner.knob_x;
976 y += pw->panner.knob_y;
987 pw->panner.tmp.doing = True;
988 pw->panner.tmp.x = (Position)x;
989 pw->panner.tmp.y = (Position)y;
991 pw->panner.tmp.doing = False;
999 PannerWidget pw = (PannerWidget)gw;
1001 if (!pw->panner.tmp.doing)
1004 if (!pw->panner.allow_off)
1005 check_knob(pw, False);
1006 pw->panner.knob_x = pw->panner.tmp.x;
1007 pw->panner.knob_y = pw->panner.tmp.y;
1008 move_shadow(pw);
1010 pw->panner.slider_x = (Position)((double)pw->panner.knob_x
1011 / pw->panner.haspect + 0.5);
1012 pw->panner.slider_y = (Position)((double) pw->panner.knob_y
1013 / pw->panner.vaspect + 0.5);
1014 if (!pw->panner.allow_off) {
1017 if (pw->panner.slider_x
1018 > (tmp = (Position)(pw->panner.canvas_width -
1019 pw->panner.slider_width)))
1020 pw->panner.slider_x = tmp;
1021 if (pw->panner.slider_x < 0)
1022 pw->panner.slider_x = 0;
1023 if (pw->panner.slider_y
1024 > (tmp = (Position)(pw->panner.canvas_height -
1025 pw->panner.slider_height)))
1026 pw->panner.slider_y = tmp;
1027 if (pw->panner.slider_y < 0)
1028 pw->panner.slider_y = 0;
1031 if (pw->panner.last_x != pw->panner.knob_x ||
1032 pw->panner.last_y != pw->panner.knob_y) {
1037 rep.slider_x = pw->panner.slider_x;
1038 rep.slider_y = pw->panner.slider_y;
1039 rep.slider_width = pw->panner.slider_width;
1040 rep.slider_height = pw->panner.slider_height;
1041 rep.canvas_width = pw->panner.canvas_width;
1042 rep.canvas_height = pw->panner.canvas_height;
1043 XtCallCallbackList(gw, pw->panner.report_callbacks, (XtPointer)&rep);
1051 PannerWidget pw = (PannerWidget)gw;
1065 rb = !pw->panner.rubber_band;
1071 if (rb != pw->panner.rubber_band) {