Lines Matching refs:sw

91 #define Offset(field) XtOffsetOf(DPSScrolledWindowRec, sw.field)
533 if (dsw->sw.doing_feedback && dsw->sw.feedback_pixmap != None) {
536 if (dsw->sw.pixmap_width == dsw->sw.drawing_area->core.width) *dx = 0;
537 else *dx = -dsw->sw.origin_x;
538 if (dsw->sw.pixmap_height == dsw->sw.drawing_area->core.height) *dy = 0;
539 else *dy = CEIL(dsw->sw.drawing_height) - dsw->sw.origin_y;
618 w = dsw->sw.scrolled_window =
627 dsw->sw.h_scroll =
632 XtAddCallback(dsw->sw.h_scroll, XmNvalueChangedCallback, HScrollCallback,
634 XtAddCallback(dsw->sw.h_scroll, XmNdragCallback, HScrollCallback,
637 dsw->sw.v_scroll =
642 XtAddCallback(dsw->sw.v_scroll, XmNvalueChangedCallback, VScrollCallback,
644 XtAddCallback(dsw->sw.v_scroll, XmNdragCallback, VScrollCallback,
648 dsw->sw.drawing_area =
651 XtAddCallback(dsw->sw.drawing_area, XtNexposeCallback, DrawingAreaExpose,
653 XtAddRawEventHandler(dsw->sw.drawing_area, 0, True,
656 XmScrolledWindowSetAreas(w, dsw->sw.h_scroll, dsw->sw.v_scroll,
657 dsw->sw.drawing_area);
668 if (dsw->sw.area_width <= 0) dsw->sw.area_width = 8.5*72;
669 if (dsw->sw.area_height <= 0) dsw->sw.area_height = 11*72;
670 if (dsw->sw.scale <= 0) dsw->sw.scale = 1.0;
671 dsw->sw.ctm_ptr = dsw->sw.ctm;
672 dsw->sw.inv_ctm_ptr = dsw->sw.inv_ctm;
673 dsw->sw.backing_pixmap = None;
674 dsw->sw.feedback_pixmap = None;
675 dsw->sw.window_gstate = 0;
676 dsw->sw.backing_gstate = 0;
677 dsw->sw.feedback_gstate = 0;
678 dsw->sw.scrolling = False;
679 dsw->sw.num_pending_expose = dsw->sw.pending_expose_size = 0;
680 dsw->sw.pending_expose = NULL;
681 dsw->sw.num_pending_dirty = dsw->sw.pending_dirty_size = 0;
682 dsw->sw.pending_dirty = NULL;
683 dsw->sw.num_current_drawing = dsw->sw.current_drawing_size = 0;
684 dsw->sw.current_drawing = NULL;
685 dsw->sw.num_prev_dirty_areas = dsw->sw.prev_dirty_areas_size = 0;
686 dsw->sw.prev_dirty_areas = NULL;
687 dsw->sw.drawing_stage = DSWStart;
688 dsw->sw.work = 0;
689 dsw->sw.big_pixmap = False;
693 dsw->sw.dirty_areas_size = 0;
694 dsw->sw.dirty_areas = NULL;
696 GrowRectList(&dsw->sw.dirty_areas, &dsw->sw.dirty_areas_size, 0, 1, 1);
697 dsw->sw.num_dirty_areas = 1;
698 LEFT(dsw->sw.dirty_areas) = 0.0;
699 BOTTOM(dsw->sw.dirty_areas) = 0.0;
700 WIDTH(dsw->sw.dirty_areas) = dsw->sw.area_width;
701 HEIGHT(dsw->sw.dirty_areas) = dsw->sw.area_height;
705 dsw->sw.num_scratch = dsw->sw.scratch_size = 0;
706 dsw->sw.scratch = NULL;
707 GrowRectList(&dsw->sw.scratch, &dsw->sw.scratch_size, 0, 1, 1);
711 if (dsw->sw.context == NULL) {
712 dsw->sw.context = XDPSGetSharedContext(XtDisplay(dsw));
717 if (dsw->sw.watch_progress &&
719 dps_event_pass_through) dsw->sw.watch_progress = False;
721 if (_XDPSTestComponentInitialized(dsw->sw.context,
724 XDPSRegisterContext(dsw->sw.context, False);
727 dsw->sw.use_saved_scroll = False;
728 dsw->sw.context_inited = False;
729 dsw->sw.doing_feedback = False;
730 dsw->sw.feedback_displayed = False;
734 dsw->sw.ge_gc = XtGetGC(dsw->sw.drawing_area, 0, (XGCValues *) NULL);
737 dsw->sw.no_ge_gc = XtGetGC(dsw->sw.drawing_area, GCGraphicsExposures,
745 if (dsw->sw.backing_pixmap != None) {
746 XFreePixmap(XtDisplay(dsw), dsw->sw.backing_pixmap);
748 if (dsw->sw.feedback_pixmap != None) {
749 XFreePixmap(XtDisplay(dsw), dsw->sw.feedback_pixmap);
752 if (dsw->sw.window_gstate != 0) {
753 XDPSFreeContextGState(dsw->sw.context, dsw->sw.window_gstate);
755 if (dsw->sw.backing_gstate != 0) {
756 XDPSFreeContextGState(dsw->sw.context, dsw->sw.backing_gstate);
758 if (dsw->sw.feedback_gstate != 0) {
759 XDPSFreeContextGState(dsw->sw.context, dsw->sw.feedback_gstate);
762 if (dsw->sw.pending_expose != NULL) {
763 XtFree((char *) dsw->sw.pending_expose);
765 if (dsw->sw.current_drawing != NULL) {
766 XtFree((char *) dsw->sw.current_drawing);
768 if (dsw->sw.prev_dirty_areas != NULL) {
769 XtFree((char *) dsw->sw.prev_dirty_areas);
771 if (dsw->sw.dirty_areas != NULL) XtFree((char *) dsw->sw.dirty_areas);
772 if (dsw->sw.pending_dirty != NULL) XtFree((char *) dsw->sw.pending_dirty);
773 if (dsw->sw.scratch != NULL) XtFree((char *) dsw->sw.scratch);
775 XtReleaseGC(widget, dsw->sw.ge_gc);
776 XtReleaseGC(widget, dsw->sw.no_ge_gc);
783 ConvertToOrigPS(dsw, dsw->sw.origin_x, dsw->sw.origin_y, &psX, &psY);
784 _DPSSWSetMatrixAndGetTransform(dsw->sw.context, psX, psY, dsw->sw.scale,
785 dsw->sw.origin_x, dsw->sw.origin_y,
786 dsw->sw.ctm, dsw->sw.inv_ctm,
787 &dsw->sw.x_offset, &dsw->sw.y_offset);
794 ConvertToOrigPS(dsw, dsw->sw.origin_x, dsw->sw.origin_y, &psX, &psY);
795 _DPSSWSetMatrix(dsw->sw.context, psX, psY, dsw->sw.scale,
796 dsw->sw.origin_x, dsw->sw.origin_y);
803 if (dsw->sw.pixmap_width <= (int) dsw->sw.drawing_area->core.width) ox = 0;
804 else ox = -dsw->sw.origin_x;
805 if (dsw->sw.pixmap_height <= (int) dsw->sw.drawing_area->core.height) {
806 oy = dsw->sw.drawing_area->core.height;
807 } else oy = dsw->sw.pixmap_height - dsw->sw.origin_y +
808 dsw->sw.drawing_area->core.height;
810 DPSsetXoffset(dsw->sw.context, ox, oy);
829 Widget wid = dsw->sw.drawing_area;
832 if (dsw->sw.pixmap_limit > 0) {
833 if (area > (unsigned)dsw->sw.pixmap_limit) return None;
834 } else if (dsw->sw.pixmap_limit < 0
835 && area > (unsigned)(dsw->sw.unscaled_width * dsw->sw.unscaled_height)
838 if (dsw->sw.absolute_pixmap_limit > 0) {
840 if (area * dBytes > (unsigned)dsw->sw.absolute_pixmap_limit * 1024) {
848 p = XCreatePixmap(XtDisplay(dsw), XtWindow(dsw->sw.drawing_area), w, h,
860 if (dsw->sw.document_size_pixmaps) {
861 dsw->sw.pixmap_width =
862 MAX(CEIL(dsw->sw.drawing_width),
863 (int) dsw->sw.drawing_area->core.width);
864 dsw->sw.pixmap_height =
865 MAX(CEIL(dsw->sw.drawing_height),
866 (int) dsw->sw.drawing_area->core.height);
868 p = dsw->sw.backing_pixmap =
869 AllocPixmap(dsw, dsw->sw.pixmap_width, dsw->sw.pixmap_height);
871 dsw->sw.big_pixmap =
872 dsw->sw.pixmap_width >
873 (int) dsw->sw.drawing_area->core.width ||
874 dsw->sw.pixmap_height >
875 (int) dsw->sw.drawing_area->core.height;
879 dsw->sw.big_pixmap = False;
880 dsw->sw.pixmap_width = dsw->sw.drawing_area->core.width;
881 dsw->sw.pixmap_height = dsw->sw.drawing_area->core.height;
882 p = dsw->sw.backing_pixmap =
883 AllocPixmap(dsw, dsw->sw.pixmap_width, dsw->sw.pixmap_height);
884 if (p == None) dsw->sw.pixmap_width = dsw->sw.pixmap_height = 0;
889 if (dsw->sw.backing_pixmap == None) return;
890 XFreePixmap(XtDisplay(dsw), dsw->sw.backing_pixmap);
891 dsw->sw.backing_pixmap = None;
892 dsw->sw.big_pixmap = False;
893 dsw->sw.pixmap_width = dsw->sw.pixmap_height = 0;
894 XDPSFreeContextGState(dsw->sw.context, dsw->sw.backing_gstate);
911 ix *= dsw->sw.drawing_width / dsw->sw.area_width;
912 iy *= dsw->sw.drawing_height / dsw->sw.area_height;
914 if ((int)dsw->sw.drawing_area->core.width >= CEIL(dsw->sw.drawing_width)) {
918 xoff = ((int) dsw->sw.drawing_area->core.width -
919 CEIL(dsw->sw.drawing_width))
922 hSize = CEIL(dsw->sw.drawing_width);
931 scrollX = MIN(scrollX, CEIL(dsw->sw.drawing_width) -
932 (int) dsw->sw.drawing_area->core.width);
933 hSize = dsw->sw.drawing_area->core.width;
943 if ((int) dsw->sw.drawing_area->core.height >=
944 CEIL(dsw->sw.drawing_height)) {
945 yoff = ((int) dsw->sw.drawing_area->core.height -
946 CEIL(dsw->sw.drawing_height)) / 2.0;
947 scrollY = CEIL(dsw->sw.drawing_height) -
948 (int) dsw->sw.drawing_area->core.height;
949 vSize = CEIL(dsw->sw.drawing_height);
951 scrollY = iy + vy - (int) dsw->sw.drawing_area->core.height;
953 scrollY = MIN(scrollY, CEIL(dsw->sw.drawing_height) -
954 (int) dsw->sw.drawing_area->core.height);
955 vSize = dsw->sw.drawing_area->core.height;
960 dsw->sw.scroll_x = (int) (scrollX + 0.5);
961 dsw->sw.scroll_y = (int) (CEIL(dsw->sw.drawing_height) -
962 (int) dsw->sw.drawing_area->core.height -
965 yoff = dsw->sw.drawing_area->core.height - yoff;
967 dsw->sw.scroll_h_value = dsw->sw.scroll_x;
968 dsw->sw.scroll_h_size = hSize;
969 dsw->sw.scroll_h_max = CEIL(dsw->sw.drawing_width);
970 dsw->sw.scroll_v_value = dsw->sw.scroll_y;
971 dsw->sw.scroll_v_size = vSize;
972 dsw->sw.scroll_v_max = CEIL(dsw->sw.drawing_height);
974 if (!dsw->sw.application_scrolling) {
975 XtVaSetValues(dsw->sw.h_scroll, XmNmaximum, dsw->sw.scroll_h_max,
976 XmNvalue, dsw->sw.scroll_x, XmNsliderSize, hSize, NULL);
977 XtVaSetValues(dsw->sw.v_scroll, XmNmaximum, dsw->sw.scroll_v_max,
978 XmNvalue, dsw->sw.scroll_y, XmNsliderSize, vSize, NULL);
983 dsw->sw.origin_x = xoff;
984 dsw->sw.origin_y = yoff;
1000 e.drawable = dsw->sw.backing_pixmap;
1001 e.gstate = dsw->sw.backing_gstate;
1003 e.drawable = dsw->sw.feedback_pixmap;
1004 e.gstate = dsw->sw.feedback_gstate;
1006 e.drawable = XtWindow(dsw->sw.drawing_area);
1007 e.gstate = dsw->sw.window_gstate;
1009 e.context = dsw->sw.context;
1011 SimplifyRects(dsw->sw.current_drawing, &dsw->sw.num_current_drawing);
1013 XDPSSetContextGState(dsw->sw.context, e.gstate);
1014 _DPSSWSetRectViewClip(dsw->sw.context, dsw->sw.current_drawing,
1015 dsw->sw.num_current_drawing * 4);
1017 e.rects = dsw->sw.current_drawing;
1018 e.rect_count = dsw->sw.num_current_drawing;
1021 XtCallCallbackList((Widget) dsw, dsw->sw.background_callback,
1037 DPSinitviewclip(dsw->sw.context);
1047 if (CEIL(dsw->sw.drawing_width) >= (int) dsw->sw.drawing_area->core.width &&
1048 CEIL(dsw->sw.drawing_height) >= (int) dsw->sw.drawing_area->core.height) return;
1052 GrowRectList(&dsw->sw.scratch, &dsw->sw.scratch_size, 0,
1053 dsw->sw.num_current_drawing, 1);
1054 dsw->sw.num_scratch = dsw->sw.num_current_drawing;
1055 for (i = 0; i < dsw->sw.num_current_drawing * 4; i++) {
1056 dsw->sw.scratch[i] = dsw->sw.current_drawing[i];
1061 ConvertToPS(dsw, dsw->sw.origin_x + DELTA, dsw->sw.origin_y - DELTA,
1063 ConvertToPS(dsw, dsw->sw.origin_x + CEIL(dsw->sw.drawing_width) - DELTA,
1064 dsw->sw.origin_y - CEIL(dsw->sw.drawing_height) + DELTA,
1071 SubtractRects(&dsw->sw.current_drawing, &dsw->sw.current_drawing_size,
1072 &dsw->sw.num_current_drawing, r, 1);
1074 if (dsw->sw.num_current_drawing != 0) {
1077 IntersectRects(&dsw->sw.scratch, &dsw->sw.scratch_size,
1078 &dsw->sw.num_scratch, r, 1);
1081 if (dsw->sw.num_scratch == 0) DPSWaitContext(dsw->sw.context);
1085 GrowRectList(&dsw->sw.current_drawing, &dsw->sw.current_drawing_size, 0,
1086 dsw->sw.num_scratch, 1);
1087 dsw->sw.num_current_drawing = dsw->sw.num_scratch;
1088 for (i = 0; i < dsw->sw.num_scratch * 4; i++) {
1089 dsw->sw.current_drawing[i] = dsw->sw.scratch[i];
1107 e.drawable = dsw->sw.backing_pixmap;
1108 e.gstate = dsw->sw.backing_gstate;
1110 e.drawable = dsw->sw.feedback_pixmap;
1111 e.gstate = dsw->sw.feedback_gstate;
1113 e.drawable = XtWindow(dsw->sw.drawing_area);
1114 e.gstate = dsw->sw.window_gstate;
1116 e.context = dsw->sw.context;
1119 XDPSSetContextGState(dsw->sw.context, e.gstate);
1122 SimplifyRects(dsw->sw.current_drawing,
1123 &dsw->sw.num_current_drawing);
1124 if (dsw->sw.num_current_drawing == 0) return DSWFinished;
1125 _DPSSWSetRectViewClip(dsw->sw.context, dsw->sw.current_drawing,
1126 dsw->sw.num_current_drawing * 4);
1130 e.rects = dsw->sw.current_drawing;
1131 e.rect_count = dsw->sw.num_current_drawing;
1134 XtCallCallbackList((Widget) dsw, dsw->sw.expose_callback,
1153 DPSinitviewclip(dsw->sw.context);
1154 DPSWaitContext(dsw->sw.context);
1172 dsw->sw.num_scratch = 1;
1173 r = dsw->sw.scratch;
1183 SubtractRects(&dsw->sw.scratch, &dsw->sw.scratch_size,
1184 &dsw->sw.num_scratch,
1185 dsw->sw.dirty_areas, dsw->sw.num_dirty_areas);
1186 for (i = 0; i < dsw->sw.num_scratch; i++) {
1187 r = dsw->sw.scratch + 4*i;
1192 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
1193 XtWindow(dsw->sw.drawing_area), dsw->sw.no_ge_gc,
1200 dsw->sw.num_scratch = 1;
1201 r = dsw->sw.scratch;
1206 IntersectRects(&dsw->sw.scratch, &dsw->sw.scratch_size,
1207 &dsw->sw.num_scratch,
1208 dsw->sw.dirty_areas, dsw->sw.num_dirty_areas);
1209 AddUserSpaceRectsToPending(dsw, dsw->sw.scratch, dsw->sw.num_scratch);
1221 return (e->xany.window == dsw->sw.backing_pixmap &&
1223 (e->xany.window == XtWindow(dsw->sw.drawing_area) &&
1240 for (i = 0; i < dsw->sw.num_dirty_areas; i++) {
1241 r = dsw->sw.dirty_areas + i*4;
1244 XCopyArea(XtDisplay(dsw), XtWindow(dsw->sw.drawing_area),
1245 dsw->sw.backing_pixmap, dsw->sw.ge_gc,
1267 CopyRectsToCurrentDrawing(dsw, dsw->sw.pending_dirty,
1268 dsw->sw.num_pending_dirty);
1270 dsw->sw.num_pending_dirty = 0;
1271 dsw->sw.num_pending_expose = 0;
1272 if (dsw->sw.num_current_drawing == 0) {
1273 dsw->sw.drawing_stage = DSWDone;
1274 dsw->sw.num_dirty_areas = 0;
1278 IntersectRects(&dsw->sw.dirty_areas, &dsw->sw.dirty_areas_size,
1279 &dsw->sw.num_dirty_areas,
1280 dsw->sw.current_drawing, dsw->sw.num_current_drawing);
1293 ConvertToPS(dsw, 0 + DELTA, dsw->sw.drawing_area->core.height - DELTA,
1295 ConvertToPS(dsw, dsw->sw.drawing_area->core.width - DELTA, 0 + DELTA,
1300 SubtractRects(&dsw->sw.dirty_areas, &dsw->sw.dirty_areas_size,
1301 &dsw->sw.num_dirty_areas, r, 1);
1303 GrowRectList(&dsw->sw.current_drawing, &dsw->sw.current_drawing_size,
1304 0, dsw->sw.num_dirty_areas, 1);
1305 for (i = 0; i < 4 * dsw->sw.num_dirty_areas; i++) {
1306 dsw->sw.current_drawing[i] = dsw->sw.dirty_areas[i];
1308 dsw->sw.num_current_drawing = dsw->sw.num_dirty_areas;
1319 for (i = 0; i < dsw->sw.num_pending_expose; i++) {
1320 r = dsw->sw.pending_expose + 4*i;
1321 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
1322 XtWindow(dsw->sw.drawing_area),
1323 dsw->sw.no_ge_gc,
1327 dsw->sw.num_pending_expose = dsw->sw.num_pending_dirty = 0;
1347 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
1348 XtWindow(dsw->sw.drawing_area),
1349 dsw->sw.no_ge_gc,
1368 XCopyArea(XtDisplay(dsw), dsw->sw.feedback_pixmap,
1369 XtWindow(dsw->sw.drawing_area), dsw->sw.no_ge_gc,
1383 if (dsw->sw.drawing_stage == DSWStart && dsw->sw.watch_progress &&
1384 dsw->sw.backing_pixmap != None && dsw->sw.num_current_drawing == 0) {
1385 dsw->sw.drawing_stage = DSWDrewVisible;
1389 switch (dsw->sw.drawing_stage) {
1392 if (dsw->sw.watch_progress || dsw->sw.backing_pixmap == None) {
1396 (dsw->sw.drawing_stage == DSWStart));
1398 if (dsw->sw.watch_progress && dsw->sw.backing_pixmap != None) {
1399 dsw->sw.drawing_stage = DSWDrewVisible;
1402 if (dsw->sw.minimal_drawing && dsw->sw.big_pixmap) {
1403 dsw->sw.drawing_stage = DSWDrewVisible;
1406 dsw->sw.drawing_stage = DSWDone;
1407 dsw->sw.num_dirty_areas = 0;
1409 if (dsw->sw.num_pending_expose != 0 &&
1410 dsw->sw.backing_pixmap != None) {
1414 } else dsw->sw.drawing_stage = DSWDrawingVisible;
1420 (dsw->sw.drawing_stage == DSWDrewVisible));
1422 dsw->sw.drawing_stage = DSWDone;
1423 dsw->sw.num_dirty_areas = 0;
1425 else dsw->sw.drawing_stage = DSWDrawingBackground;
1432 if (dsw->sw.drawing_stage == DSWDone && dsw->sw.num_pending_dirty != 0) {
1433 CopyRectsToCurrentDrawing(dsw, dsw->sw.pending_dirty,
1434 dsw->sw.num_pending_dirty);
1435 CopyRectsToDirtyArea(dsw, dsw->sw.pending_dirty,
1436 dsw->sw.num_pending_dirty);
1437 dsw->sw.num_pending_dirty = 0;
1438 dsw->sw.num_pending_expose = 0;
1439 dsw->sw.drawing_stage = DSWStart;
1442 if (dsw->sw.drawing_stage == DSWDone) {
1443 dsw->sw.work = 0;
1444 if (dsw->sw.watch_progress) {
1447 UpdateWindowFromBackingPixmap(dsw, dsw->sw.current_drawing,
1448 dsw->sw.num_current_drawing);
1450 dsw->sw.num_current_drawing = 0;
1451 if (dsw->sw.scrolling) {
1452 dsw->sw.scrolling = False;
1463 CopyRectsToCurrentDrawing(dsw, dsw->sw.dirty_areas,
1464 dsw->sw.num_dirty_areas);
1466 if (dsw->sw.watch_progress || dsw->sw.backing_pixmap == None) {
1470 IntersectRects(&dsw->sw.current_drawing, &dsw->sw.current_drawing_size,
1471 &dsw->sw.num_current_drawing,
1472 dsw->sw.pending_dirty, dsw->sw.num_pending_dirty);
1473 dsw->sw.num_pending_dirty = dsw->sw.num_pending_expose = 0;
1475 if (!dsw->sw.big_pixmap || dsw->sw.minimal_drawing) {
1478 dsw->sw.drawing_area->core.height - DELTA, r, r+1);
1479 ConvertToPS(dsw, dsw->sw.drawing_area->core.width - DELTA,
1483 IntersectRects(&dsw->sw.current_drawing,
1484 &dsw->sw.current_drawing_size,
1485 &dsw->sw.num_current_drawing, r, 1);
1489 if (dsw->sw.num_current_drawing == 0 && !dsw->sw.watch_progress) {
1490 dsw->sw.drawing_stage = DSWFinished;
1491 dsw->sw.num_dirty_areas = 0;
1495 dsw->sw.drawing_stage = DSWStart;
1497 dsw->sw.work =
1518 xurx = dsw->sw.drawing_area->core.width;
1520 xlly = dsw->sw.drawing_area->core.height;
1521 xury = dsw->sw.drawing_area->core.height - deltaY;
1529 xlly = dsw->sw.drawing_area->core.height;
1532 xllx = dsw->sw.drawing_area->core.width - deltaX;
1533 xurx = dsw->sw.drawing_area->core.width;
1557 xurx = dsw->sw.drawing_area->core.width;
1559 xlly = dsw->sw.drawing_area->core.height;
1560 xury = dsw->sw.drawing_area->core.height - deltaY;
1579 xlly = dsw->sw.drawing_area->core.height;
1582 xllx = dsw->sw.drawing_area->core.width - deltaX;
1583 xurx = dsw->sw.drawing_area->core.width;
1608 float *r = dsw->sw.dirty_areas;
1612 if (dsw->sw.backing_pixmap != None) {
1613 XDPSSetContextDrawable(dsw->sw.context, dsw->sw.backing_pixmap,
1614 dsw->sw.pixmap_height);
1618 XDPSCaptureContextGState(dsw->sw.context, &dsw->sw.backing_gstate);
1620 if (dsw->sw.pixmap_width != CEIL(dsw->sw.drawing_width) ||
1621 dsw->sw.pixmap_height != CEIL(dsw->sw.drawing_height)) {
1624 if (dsw->sw.pixmap_width > (int)dsw->sw.drawing_area->core.width) {
1625 llx = dsw->sw.origin_x;
1626 urx = llx + CEIL(dsw->sw.drawing_width);
1629 urx = dsw->sw.drawing_area->core.width;
1631 if (dsw->sw.pixmap_height >
1632 (int) dsw->sw.drawing_area->core.height) {
1633 lly = dsw->sw.origin_y;
1634 ury = dsw->sw.origin_y - CEIL(dsw->sw.drawing_height);
1636 lly = dsw->sw.drawing_area->core.height;
1643 dsw->sw.num_dirty_areas = 1;
1645 if (dsw->sw.doing_feedback) {
1646 CopyRectsToCurrentDrawing(dsw, dsw->sw.dirty_areas,
1647 dsw->sw.num_dirty_areas);
1649 } else if (!dsw->sw.watch_progress) StartDrawing(dsw);
1659 if (dsw->sw.drawing_stage == DSWStart) StartDrawing(dsw);
1676 _DPSSWColormapMatch(dsw->sw.context,
1677 dsw->sw.drawing_area->core.colormap, &match);
1680 XDPSSetContextParameters(dsw->sw.context, XtScreen(dsw),
1681 dsw->sw.drawing_area->core.depth,
1682 XtWindow(dsw->sw.drawing_area),
1683 dsw->sw.drawing_area->core.height, NULL, NULL,
1687 dsw->sw.drawing_area->core.colormap;
1693 XDPSSetContextParameters(dsw->sw.context, XtScreen(dsw),
1694 dsw->sw.drawing_area->core.depth,
1695 XtWindow(dsw->sw.drawing_area),
1696 dsw->sw.drawing_area->core.height,
1703 DPSinitgraphics(dsw->sw.context);
1704 _DPSSWGetTransform(dsw->sw.context, dsw->sw.ctm, dsw->sw.orig_inv_ctm);
1705 dsw->sw.x_offset = 0;
1706 dsw->sw.y_offset = dsw->sw.drawing_area->core.height;
1707 for (i = 0; i < 6; i++) dsw->sw.inv_ctm[i] = dsw->sw.orig_inv_ctm[i];
1714 if (dsw->sw.scale != 1.0) {
1715 DPSscale(dsw->sw.context, dsw->sw.scale, dsw->sw.scale);
1716 _DPSSWGetTransform(dsw->sw.context, dsw->sw.ctm, dsw->sw.inv_ctm);
1719 dsw->sw.drawing_width = dsw->sw.area_width * xScale * dsw->sw.scale;
1720 dsw->sw.drawing_height = dsw->sw.area_height * yScale * dsw->sw.scale;
1722 dsw->sw.unscaled_width = dsw->sw.drawing_width / dsw->sw.scale + 1;
1723 dsw->sw.unscaled_height = dsw->sw.drawing_height / dsw->sw.scale + 1;
1725 if (!dsw->sw.use_saved_scroll) {
1726 dsw->sw.scroll_pic_x = dsw->sw.area_width / 2;
1727 dsw->sw.scroll_pic_y = dsw->sw.area_height / 2;
1728 dsw->sw.scroll_win_x = dsw->sw.drawing_area->core.width / 2;
1729 dsw->sw.scroll_win_y = dsw->sw.drawing_area->core.height / 2;
1732 SetDrawingAreaPosition(dsw, dsw->sw.scroll_pic_x, dsw->sw.scroll_pic_y,
1733 dsw->sw.scroll_win_x, dsw->sw.scroll_win_y, True);
1735 XDPSCaptureContextGState(dsw->sw.context, &dsw->sw.window_gstate);
1737 dsw->sw.drawing_stage = DSWStart;
1739 if (dsw->sw.use_backing_pixmap) SetUpInitialPixmap(dsw);
1741 if (dsw->sw.doing_feedback) return;
1743 if (dsw->sw.watch_progress || dsw->sw.backing_pixmap == None) {
1746 XClearArea(XtDisplay(dsw), XtWindow(dsw->sw.drawing_area),
1749 if (dsw->sw.watch_progress && dsw->sw.watch_progress_delay > 0) {
1752 dsw->sw.watch_progress_delay,
1758 ev.width = dsw->sw.drawing_area->core.width;
1759 ev.height = dsw->sw.drawing_area->core.height;
1778 setup.context = dsw->sw.context;
1779 XtCallCallbackList((Widget) dsw, dsw->sw.setup_callback,
1783 XtRealizeWidget(dsw->sw.scrolled_window);
1794 if (dsw->sw.work != 0) {
1795 XtRemoveWorkProc(dsw->sw.work);
1796 dsw->sw.work = 0;
1799 switch (dsw->sw.drawing_stage) {
1805 if (dsw->sw.watch_progress || dsw->sw.backing_pixmap == None) {
1810 dsw->sw.drawing_stage = DSWStart;
1811 if (dsw->sw.backing_pixmap == None || dsw->sw.watch_progress) {
1814 AddUserSpaceRectsToPending(dsw, dsw->sw.current_drawing,
1815 dsw->sw.num_current_drawing);
1819 if (dsw->sw.watch_progress && dsw->sw.backing_pixmap != None) {
1820 dsw->sw.drawing_stage = DSWDrewVisible;
1822 if (dsw->sw.num_current_drawing != 0) {
1827 dsw->sw.drawing_stage = DSWStart;
1831 if (dsw->sw.backing_pixmap != None) {
1832 if (dsw->sw.num_pending_expose != 0) {
1836 if (dsw->sw.minimal_drawing && dsw->sw.big_pixmap) {
1837 dsw->sw.drawing_stage = DSWDrewVisible;
1842 dsw->sw.drawing_stage = DSWStart;
1853 (dsw->sw.drawing_stage == DSWDrewVisible));
1855 dsw->sw.drawing_stage = DSWStart;
1864 dsw->sw.drawing_stage = DSWDone;
1865 dsw->sw.num_dirty_areas = 0;
1873 if (dsw->sw.work != 0) {
1874 XtRemoveWorkProc(dsw->sw.work);
1875 dsw->sw.work = 0;
1878 switch (dsw->sw.drawing_stage) {
1885 if (dsw->sw.watch_progress || dsw->sw.backing_pixmap == None) {
1897 dsw->sw.num_pending_expose = dsw->sw.num_pending_dirty = 0;
1904 if (dsw->sw.work != 0) {
1905 XtRemoveWorkProc(dsw->sw.work);
1906 dsw->sw.work = 0;
1909 switch (dsw->sw.drawing_stage) {
1912 if (dsw->sw.watch_progress || dsw->sw.backing_pixmap == None) {
1915 if (dsw->sw.drawing_stage == DSWStart) {
1917 if (dsw->sw.num_current_drawing == 0) return;
1920 dsw->sw.drawing_stage == DSWStart);
1921 if (dsw->sw.watch_progress && dsw->sw.backing_pixmap != None) {
1922 dsw->sw.drawing_stage = DSWDrewVisible;
1924 if (dsw->sw.num_current_drawing != 0) {
1928 if (dsw->sw.backing_pixmap != None) {
1929 if (dsw->sw.num_pending_expose != 0) {
1933 if (dsw->sw.minimal_drawing && dsw->sw.big_pixmap) {
1934 dsw->sw.drawing_stage = DSWDrewVisible;
1945 (dsw->sw.drawing_stage == DSWDrewVisible));
1952 dsw->sw.drawing_stage = DSWDone;
1953 dsw->sw.num_dirty_areas = 0;
1962 dsw->sw.origin_x -= deltaX;
1963 dsw->sw.origin_y -= deltaY;
1967 (void) XDPSSetContextGState(dsw->sw.context, dsw->sw.window_gstate);
1969 (void) XDPSUpdateContextGState(dsw->sw.context, dsw->sw.window_gstate);
1971 if (dsw->sw.backing_pixmap != None && !dsw->sw.big_pixmap) {
1972 (void) XDPSSetContextGState(dsw->sw.context, dsw->sw.backing_gstate);
1974 (void) XDPSUpdateContextGState(dsw->sw.context,
1975 dsw->sw.backing_gstate);
1979 dsw->sw.scroll_x += deltaX;
1980 dsw->sw.scroll_y += deltaY;
1990 for (i = 0; i < dsw->sw.num_pending_expose; i++) {
1991 r = dsw->sw.pending_expose + 4*i;
2004 if (!dsw->sw.application_scrolling) {
2005 dsw->sw.scroll_h_value = sb->value;
2017 if (!dsw->sw.application_scrolling) {
2018 dsw->sw.scroll_v_value = sb->value;
2031 if (dsw->sw.scrolling && dsw->sw.drawing_stage == DSWStart) return;
2034 deltaX = dsw->sw.scroll_h_value - dsw->sw.scroll_x;
2035 deltaY = dsw->sw.scroll_v_value - dsw->sw.scroll_y;
2047 if (!dsw->sw.big_pixmap) {
2049 if (dsw->sw.backing_pixmap != None) {
2050 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
2051 dsw->sw.backing_pixmap, dsw->sw.no_ge_gc,
2052 deltaX, deltaY, dsw->sw.drawing_area->core.width,
2053 dsw->sw.drawing_area->core.height, 0, 0);
2054 if (!dsw->sw.doing_feedback || dsw->sw.feedback_pixmap == None) {
2055 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
2056 XtWindow(dsw->sw.drawing_area), dsw->sw.no_ge_gc,
2057 0, 0, dsw->sw.drawing_area->core.width,
2058 dsw->sw.drawing_area->core.height, 0, 0);
2062 if (!dsw->sw.doing_feedback || dsw->sw.feedback_pixmap == None) {
2063 XCopyArea(XtDisplay(dsw), XtWindow(dsw->sw.drawing_area),
2064 XtWindow(dsw->sw.drawing_area), dsw->sw.ge_gc,
2065 deltaX, deltaY, dsw->sw.drawing_area->core.width,
2066 dsw->sw.drawing_area->core.height, 0, 0);
2068 if (dsw->sw.doing_feedback) RedisplaySliver(dsw, deltaX, deltaY);
2069 else dsw->sw.drawing_stage = DSWStart;
2073 if (dsw->sw.doing_feedback) {
2078 r = dsw->sw.prev_dirty_areas;
2079 ConvertToPS(dsw, 0 + DELTA, dsw->sw.drawing_area->core.height - DELTA,
2081 ConvertToPS(dsw, dsw->sw.drawing_area->core.width - DELTA, 0 + DELTA,
2085 dsw->sw.num_prev_dirty_areas = 1;
2087 if (dsw->sw.feedback_pixmap != None) {
2088 XDPSSetContextDrawable(dsw->sw.context, dsw->sw.feedback_pixmap,
2089 dsw->sw.drawing_area->core.height);
2091 XDPSCaptureContextGState(dsw->sw.context,
2092 &dsw->sw.feedback_gstate);
2095 if (dsw->sw.backing_pixmap != None) {
2096 CopyToFeedbackPixmap(dsw, dsw->sw.prev_dirty_areas,
2097 dsw->sw.num_prev_dirty_areas);
2099 CopyRectsToCurrentDrawing(dsw, dsw->sw.prev_dirty_areas,
2100 dsw->sw.num_prev_dirty_areas);
2103 if (!dsw->sw.feedback_displayed) {
2104 XCopyArea(XtDisplay(dsw), dsw->sw.feedback_pixmap,
2105 XtWindow(dsw->sw.drawing_area),
2106 dsw->sw.no_ge_gc, 0, 0,
2107 dsw->sw.drawing_area->core.width,
2108 dsw->sw.drawing_area->core.height, 0, 0);
2112 if (dsw->sw.feedback_displayed) {
2113 CallFeedbackCallback(dsw, dsw->sw.prev_dirty_areas,
2114 dsw->sw.num_prev_dirty_areas);
2116 if (dsw->sw.feedback_pixmap != None) {
2117 UpdateWindowFromFeedbackPixmap(dsw, dsw->sw.prev_dirty_areas,
2118 dsw->sw.num_prev_dirty_areas);
2120 dsw->sw.num_pending_dirty = dsw->sw.num_pending_expose = 0;
2123 if (dsw->sw.backing_pixmap != None &&
2124 dsw->sw.drawing_stage == DSWDone) {
2126 if (!dsw->sw.big_pixmap) dsw->sw.scrolling = True;
2128 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
2129 XtWindow(dsw->sw.drawing_area), dsw->sw.no_ge_gc,
2131 dsw->sw.drawing_area->core.width,
2132 dsw->sw.drawing_area->core.height, 0, 0);
2133 } else dsw->sw.scrolling = True;
2144 if (dsw->sw.backing_pixmap == None || dsw->sw.watch_progress ||
2145 dsw->sw.doing_feedback) {
2146 GrowRectList(&dsw->sw.pending_dirty, &dsw->sw.pending_dirty_size,
2147 dsw->sw.num_pending_dirty, 1, 1);
2149 f = dsw->sw.pending_dirty + (dsw->sw.num_pending_dirty * 4);
2154 dsw->sw.num_pending_dirty++;
2157 GrowIntRectList(&dsw->sw.pending_expose, &dsw->sw.pending_expose_size,
2158 dsw->sw.num_pending_expose, 1, 1);
2160 i = dsw->sw.pending_expose + (dsw->sw.num_pending_expose * 4);
2165 dsw->sw.num_pending_expose++;
2177 if (dsw->sw.backing_pixmap == None || dsw->sw.watch_progress) {
2178 GrowRectList(&dsw->sw.pending_dirty, &dsw->sw.pending_dirty_size,
2179 dsw->sw.num_pending_dirty, n, 1);
2182 f = dsw->sw.pending_dirty + (dsw->sw.num_pending_dirty * 4);
2188 dsw->sw.num_pending_dirty++;
2192 GrowIntRectList(&dsw->sw.pending_expose, &dsw->sw.pending_expose_size,
2193 dsw->sw.num_pending_expose, n, 1);
2195 r = dsw->sw.pending_expose + (dsw->sw.num_pending_expose * 4);
2197 dsw->sw.num_pending_expose += n;
2209 if (dsw->sw.backing_pixmap == None || dsw->sw.watch_progress) {
2210 GrowRectList(&dsw->sw.pending_dirty, &dsw->sw.pending_dirty_size,
2211 dsw->sw.num_pending_dirty, n, 1);
2213 f = dsw->sw.pending_dirty + (dsw->sw.num_pending_dirty * 4);
2215 dsw->sw.num_pending_dirty += n;
2218 GrowIntRectList(&dsw->sw.pending_expose, &dsw->sw.pending_expose_size,
2219 dsw->sw.num_pending_expose, n, 1);
2222 r = dsw->sw.pending_expose + (dsw->sw.num_pending_expose * 4);
2228 dsw->sw.num_pending_expose++;
2240 GrowRectList(&dsw->sw.current_drawing, &dsw->sw.current_drawing_size,
2243 r = dsw->sw.current_drawing;
2245 dsw->sw.num_current_drawing = n;
2256 GrowRectList(&dsw->sw.dirty_areas, &dsw->sw.dirty_areas_size, 0, n, 1);
2258 r = dsw->sw.dirty_areas;
2260 dsw->sw.num_dirty_areas = n;
2271 GrowRectList(&dsw->sw.dirty_areas, &dsw->sw.dirty_areas_size,
2272 dsw->sw.num_dirty_areas, n, 1);
2274 r = dsw->sw.dirty_areas + (4 * dsw->sw.num_dirty_areas);
2276 dsw->sw.num_dirty_areas += n;
2287 GrowRectList(&dsw->sw.prev_dirty_areas,
2288 &dsw->sw.prev_dirty_areas_size, 0, n, 1);
2290 r = dsw->sw.prev_dirty_areas;
2292 dsw->sw.num_prev_dirty_areas = n;
2309 if (dsw->sw.backing_pixmap == None && dsw->sw.scrolling) {
2314 AddRectsToDirtyArea(dsw, dsw->sw.pending_dirty,
2315 dsw->sw.num_pending_dirty);
2317 dsw->sw.num_pending_dirty = dsw->sw.num_pending_expose = 0;
2347 if (dsw->sw.doing_feedback) {
2348 if (dsw->sw.feedback_pixmap != None) {
2349 XCopyArea(XtDisplay(dsw), dsw->sw.feedback_pixmap,
2350 XtWindow(dsw->sw.drawing_area),
2351 dsw->sw.no_ge_gc,
2354 if (dsw->sw.backing_pixmap != None) {
2357 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
2358 XtWindow(dsw->sw.drawing_area),
2359 dsw->sw.no_ge_gc, ev->x + dx, ev->y + dy,
2365 if (dsw->sw.backing_pixmap == None) {
2366 CopyRectsToCurrentDrawing(dsw, dsw->sw.pending_dirty,
2367 dsw->sw.num_pending_dirty);
2368 dsw->sw.drawing_stage = DSWStart;
2371 if (dsw->sw.feedback_displayed) {
2372 CallFeedbackCallback(dsw, dsw->sw.pending_dirty,
2373 dsw->sw.num_pending_dirty);
2375 dsw->sw.num_pending_dirty = dsw->sw.num_pending_expose = 0;
2380 if (dsw->sw.backing_pixmap != None) {
2381 if (dsw->sw.drawing_stage == DSWStart && dsw->sw.watch_progress) {
2386 dsw->sw.num_pending_dirty = dsw->sw.num_pending_expose = 0;
2391 if (dsw->sw.drawing_stage < DSWDrewVisible) {
2397 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
2398 XtWindow(dsw->sw.drawing_area),
2399 dsw->sw.no_ge_gc,
2405 if (dsw->sw.drawing_stage == DSWDone ||
2406 dsw->sw.drawing_stage == DSWStart) {
2407 CopyRectsToDirtyArea(dsw, dsw->sw.pending_dirty,
2408 dsw->sw.num_pending_dirty);
2410 dsw->sw.num_pending_dirty = dsw->sw.num_pending_expose = 0;
2424 r.oldw = dsw->sw.scrolled_window->core.width;
2425 r.oldh = dsw->sw.scrolled_window->core.height;
2430 XtCallCallbackList(w, dsw->sw.resize_callback, (XtPointer) &r);
2436 XtResizeWidget(dsw->sw.scrolled_window, w->core.width, w->core.height, 0);
2440 if (dsw->sw.backing_pixmap != None &&
2441 dsw->sw.pixmap_width == CEIL(dsw->sw.drawing_width) &&
2442 dsw->sw.pixmap_height == CEIL(dsw->sw.drawing_height) &&
2443 dsw->sw.pixmap_width >= (int) dsw->sw.drawing_area->core.width &&
2444 dsw->sw.pixmap_height >= (int) dsw->sw.drawing_area->core.width) {
2446 XDPSSetContextGState(dsw->sw.context, dsw->sw.window_gstate);
2447 DPSinitclip(dsw->sw.context);
2448 DPSinitviewclip(dsw->sw.context);
2451 XDPSUpdateContextGState(dsw->sw.context, dsw->sw.window_gstate);
2452 XClearArea(XtDisplay(dsw), XtWindow(dsw->sw.drawing_area),
2455 dsw->sw.use_saved_scroll = True;
2456 dsw->sw.scroll_pic_x = x;
2457 dsw->sw.scroll_pic_y = y;
2458 dsw->sw.scroll_win_x = r.x;
2459 dsw->sw.scroll_win_y = r.y;
2461 if (dsw->sw.backing_pixmap != None) {
2462 XFreePixmap(XtDisplay(dsw), dsw->sw.backing_pixmap);
2463 XDPSFreeContextGState(dsw->sw.context, dsw->sw.backing_gstate);
2465 dsw->sw.backing_pixmap = None;
2466 dsw->sw.big_pixmap = False;
2467 dsw->sw.pixmap_width = dsw->sw.pixmap_height = 0;
2469 dsw->sw.num_dirty_areas = 1;
2470 LEFT(dsw->sw.dirty_areas) = 0.0;
2471 BOTTOM(dsw->sw.dirty_areas) = 0.0;
2472 WIDTH(dsw->sw.dirty_areas) = dsw->sw.area_width;
2473 HEIGHT(dsw->sw.dirty_areas) = dsw->sw.area_height;
2478 if (dsw->sw.doing_feedback) {
2483 r = dsw->sw.prev_dirty_areas;
2484 ConvertToPS(dsw, 0 + DELTA, dsw->sw.drawing_area->core.height - DELTA,
2486 ConvertToPS(dsw, dsw->sw.drawing_area->core.width - DELTA, 0 + DELTA,
2490 dsw->sw.num_prev_dirty_areas = 1;
2492 if (dsw->sw.feedback_pixmap != None) {
2494 if (dsw->sw.backing_pixmap != None) {
2495 CopyToFeedbackPixmap(dsw, dsw->sw.prev_dirty_areas,
2496 dsw->sw.num_prev_dirty_areas);
2498 CopyRectsToCurrentDrawing(dsw, dsw->sw.prev_dirty_areas,
2499 dsw->sw.num_prev_dirty_areas);
2502 XCopyArea(XtDisplay(dsw), dsw->sw.feedback_pixmap,
2503 XtWindow(dsw->sw.drawing_area),
2504 dsw->sw.no_ge_gc, 0, 0,
2505 dsw->sw.drawing_area->core.width,
2506 dsw->sw.drawing_area->core.height, 0, 0);
2508 if (dsw->sw.backing_pixmap != None) {
2511 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
2512 XtWindow(dsw->sw.drawing_area),
2513 dsw->sw.no_ge_gc, dx, dy,
2514 dsw->sw.drawing_area->core.width,
2515 dsw->sw.drawing_area->core.height, 0, 0);
2517 CopyRectsToCurrentDrawing(dsw, dsw->sw.prev_dirty_areas,
2518 dsw->sw.num_prev_dirty_areas);
2519 dsw->sw.drawing_stage = DSWStart;
2523 if (dsw->sw.feedback_displayed) {
2524 CallFeedbackCallback(dsw, dsw->sw.prev_dirty_areas,
2525 dsw->sw.num_prev_dirty_areas);
2527 if (dsw->sw.feedback_pixmap != None) {
2528 UpdateWindowFromFeedbackPixmap(dsw, dsw->sw.prev_dirty_areas,
2529 dsw->sw.num_prev_dirty_areas);
2531 dsw->sw.num_pending_dirty = dsw->sw.num_pending_expose = 0;
2537 if (dsw->sw.feedback_pixmap != None &&
2538 (dsw->sw.feedback_width < (int) dsw->sw.drawing_area->core.width ||
2539 dsw->sw.feedback_height < (int) dsw->sw.drawing_area->core.height)) {
2540 XFreePixmap(XtDisplay(dsw), dsw->sw.feedback_pixmap);
2541 dsw->sw.feedback_pixmap = None;
2542 dsw->sw.feedback_width = dsw->sw.feedback_height = 0;
2544 if (dsw->sw.use_feedback_pixmap && dsw->sw.feedback_pixmap == None) {
2545 dsw->sw.feedback_pixmap =
2546 AllocPixmap(dsw, dsw->sw.drawing_area->core.width,
2547 dsw->sw.drawing_area->core.height);
2548 if (dsw->sw.feedback_pixmap != None) {
2549 dsw->sw.feedback_width = dsw->sw.drawing_area->core.width;
2550 dsw->sw.feedback_height = dsw->sw.drawing_area->core.height;
2553 if (dsw->sw.feedback_pixmap != None) {
2554 XDPSSetContextDrawable(dsw->sw.context, dsw->sw.feedback_pixmap,
2555 dsw->sw.drawing_area->core.height);
2557 XDPSCaptureContextGState(dsw->sw.context, &dsw->sw.feedback_gstate);
2565 XDPSSetContextDrawable(dsw->sw.context, XtWindow(dsw->sw.drawing_area),
2566 dsw->sw.drawing_area->core.height);
2567 DPSinitgraphics(dsw->sw.context);
2568 if (dsw->sw.scale != 1.0) {
2569 DPSscale(dsw->sw.context, dsw->sw.scale, dsw->sw.scale);
2573 (void) XDPSCaptureContextGState(dsw->sw.context, &dsw->sw.window_gstate);
2574 if (dsw->sw.backing_pixmap != None) {
2575 XDPSSetContextDrawable(dsw->sw.context, dsw->sw.backing_pixmap,
2576 dsw->sw.pixmap_height);
2580 XDPSCaptureContextGState(dsw->sw.context, &dsw->sw.backing_gstate);
2587 int w = dsw->sw.pixmap_width, h = dsw->sw.pixmap_height;
2588 Widget wid = dsw->sw.drawing_area;
2591 if (dsw->sw.pixmap_limit > 0) {
2592 if (w * h > dsw->sw.pixmap_limit) freeIt = True;
2593 } else if (dsw->sw.pixmap_limit < 0 &&
2594 w * h > dsw->sw.unscaled_width * dsw->sw.unscaled_height &&
2599 if (dsw->sw.absolute_pixmap_limit > 0) {
2601 if (w * h * dBytes > (unsigned)dsw->sw.absolute_pixmap_limit * 1024) {
2606 XFreePixmap(XtDisplay(dsw), dsw->sw.backing_pixmap);
2607 dsw->sw.backing_pixmap = None;
2608 dsw->sw.big_pixmap = False;
2609 dsw->sw.pixmap_width = dsw->sw.pixmap_height = 0;
2610 XDPSFreeContextGState(dsw->sw.context, dsw->sw.backing_gstate);
2619 dsw->sw.num_dirty_areas = 1;
2620 LEFT(dsw->sw.dirty_areas) = 0.0;
2621 BOTTOM(dsw->sw.dirty_areas) = 0.0;
2622 WIDTH(dsw->sw.dirty_areas) = dsw->sw.area_width;
2623 HEIGHT(dsw->sw.dirty_areas) = dsw->sw.area_height;
2625 if (dsw->sw.big_pixmap) {
2626 XFreePixmap(XtDisplay(dsw), dsw->sw.backing_pixmap);
2627 dsw->sw.backing_pixmap = None;
2628 dsw->sw.big_pixmap = False;
2629 dsw->sw.pixmap_width = dsw->sw.pixmap_height = 0;
2630 XDPSFreeContextGState(dsw->sw.context, dsw->sw.backing_gstate);
2633 if (!dsw->sw.use_saved_scroll) {
2635 dsw->sw.scroll_win_x = 0;
2636 dsw->sw.scroll_win_y = 0;
2638 &dsw->sw.scroll_pic_x, &dsw->sw.scroll_pic_y);
2639 dsw->sw.use_saved_scroll = True;
2651 for (i = 0; i < dsw->sw.num_dirty_areas; i++) {
2652 r = dsw->sw.dirty_areas + (i * 4);
2655 XClearArea(XtDisplay(dsw), XtWindow(dsw->sw.drawing_area),
2662 if (!dsw->sw.use_feedback_pixmap) {
2664 if (dsw->sw.feedback_pixmap != None) {
2665 XFreePixmap(XtDisplay(dsw), dsw->sw.feedback_pixmap);
2666 dsw->sw.feedback_pixmap = None;
2667 dsw->sw.feedback_width = dsw->sw.feedback_height = 0;
2670 if (dsw->sw.doing_feedback) {
2674 if (dsw->sw.feedback_pixmap == None) return;
2676 r = dsw->sw.prev_dirty_areas;
2678 dsw->sw.drawing_area->core.height - DELTA, r, r+1);
2679 ConvertToPS(dsw, dsw->sw.drawing_area->core.width - DELTA,
2683 dsw->sw.num_prev_dirty_areas = 1;
2686 if (dsw->sw.backing_pixmap != None) {
2687 CopyToFeedbackPixmap(dsw, dsw->sw.prev_dirty_areas,
2688 dsw->sw.num_prev_dirty_areas);
2690 CopyRectsToCurrentDrawing(dsw, dsw->sw.prev_dirty_areas,
2691 dsw->sw.num_prev_dirty_areas);
2694 if (dsw->sw.feedback_displayed) {
2695 CallFeedbackCallback(dsw, dsw->sw.prev_dirty_areas,
2696 dsw->sw.num_prev_dirty_areas);
2713 #define NE(field) newdsw->sw.field != olddsw->sw.field
2715 if (NE(field)) newdsw->sw.field = olddsw->sw.field;
2728 if (newdsw->sw.context == NULL) {
2729 newdsw->sw.context = XDPSGetSharedContext(XtDisplay(newdsw));
2731 if (_XDPSTestComponentInitialized(newdsw->sw.context,
2734 XDPSRegisterContext(newdsw->sw.context, False);
2737 setup.context = newdsw->sw.context;
2738 XtCallCallbackList((Widget) newdsw, newdsw->sw.setup_callback,
2747 if (newdsw->sw.watch_progress &&
2749 dps_event_pass_through) newdsw->sw.watch_progress = False;
2752 if (NE(application_scrolling) && !newdsw->sw.application_scrolling) {
2753 XtVaSetValues(newdsw->sw.h_scroll, XmNmaximum, newdsw->sw.scroll_h_max,
2754 XmNvalue, newdsw->sw.scroll_h_value,
2755 XmNsliderSize, newdsw->sw.scroll_h_size, NULL);
2756 XtVaSetValues(newdsw->sw.v_scroll, XmNmaximum, newdsw->sw.scroll_v_max,
2757 XmNvalue, newdsw->sw.scroll_v_value,
2758 XmNsliderSize, newdsw->sw.scroll_v_size, NULL);
2761 if (newdsw->sw.doing_feedback) {
2779 if (newdsw->sw.use_backing_pixmap) setUp = True;
2783 if (newdsw->sw.backing_pixmap != None) freeIt = True;
2791 float *r = newdsw->sw.dirty_areas;
2792 int n = newdsw->sw.num_dirty_areas;
2797 if (newdsw->sw.watch_progress || newdsw->sw.backing_pixmap == None) {
2799 newdsw->sw.drawing_stage = DSWStart;
2827 return XtQueryGeometry(dsw->sw.scrolled_window, desired, allowed);
2847 XCopyArea(XtDisplay(dsw), dsw->sw.backing_pixmap,
2848 dsw->sw.feedback_pixmap, dsw->sw.no_ge_gc,
2860 f.start_feedback_data = dsw->sw.start_feedback_data;
2861 f.continue_feedback_data = dsw->sw.continue_feedback_data;
2862 if (dsw->sw.feedback_pixmap == None) {
2864 f.drawable = XtWindow(dsw->sw.drawing_area);
2865 f.gstate = dsw->sw.window_gstate;
2868 f.drawable = dsw->sw.feedback_pixmap;
2869 f.gstate = dsw->sw.feedback_gstate;
2871 f.context = dsw->sw.context;
2875 XDPSSetContextGState(dsw->sw.context, f.gstate);
2876 _DPSSWSetRectViewClip(dsw->sw.context, r, n * 4);
2877 XtCallCallbackList((Widget) dsw, dsw->sw.feedback_callback,
2879 DPSWaitContext(dsw->sw.context);
2913 dsw->sw.use_saved_scroll = True;
2914 dsw->sw.scroll_pic_x = psX;
2915 dsw->sw.scroll_pic_y = psY;
2916 dsw->sw.scroll_win_x = xX;
2917 dsw->sw.scroll_win_y = xY;
2943 if (!XtIsRealized(w) && dsw->sw.use_saved_scroll) {
2944 dsw->sw.scroll_win_x += dx;
2945 dsw->sw.scroll_win_y += dy;
2947 value = dsw->sw.scroll_h_value + dx;
2950 else if (value > dsw->sw.scroll_h_max - dsw->sw.scroll_h_size) {
2951 value = dsw->sw.scroll_h_max - dsw->sw.scroll_h_size;
2953 dsw->sw.scroll_h_value = value;
2955 if (!dsw->sw.application_scrolling) {
2956 XtVaSetValues(dsw->sw.h_scroll, XmNvalue, value, NULL);
2959 value = dsw->sw.scroll_v_value + dy;
2962 else if (value > dsw->sw.scroll_v_max - dsw->sw.scroll_v_size) {
2963 value = dsw->sw.scroll_v_max - dsw->sw.scroll_v_size;
2965 dsw->sw.scroll_v_value = value;
2967 if (!dsw->sw.application_scrolling) {
2968 XtVaSetValues(dsw->sw.v_scroll, XmNvalue, value, NULL);
2990 else if (x > dsw->sw.scroll_h_max - dsw->sw.scroll_h_size) {
2991 x = dsw->sw.scroll_h_max - dsw->sw.scroll_h_size;
2993 dsw->sw.scroll_h_value = x;
2996 else if (y > dsw->sw.scroll_v_max - dsw->sw.scroll_v_size) {
2997 y = dsw->sw.scroll_v_max - dsw->sw.scroll_v_size;
2999 dsw->sw.scroll_v_value = y;
3001 if (!dsw->sw.application_scrolling) {
3002 XtVaSetValues(dsw->sw.h_scroll, XmNvalue, x, NULL);
3003 XtVaSetValues(dsw->sw.v_scroll, XmNvalue, y, NULL);
3031 dsw->sw.use_saved_scroll = True;
3032 dsw->sw.scroll_pic_x = psX;
3033 dsw->sw.scroll_pic_y = psY;
3034 dsw->sw.scroll_win_x = xX;
3035 dsw->sw.scroll_win_y = xY;
3103 rect[2] = dsw->sw.area_width;
3104 rect[3] = dsw->sw.area_height;
3129 if (dsw->sw.doing_feedback) return False;
3131 *p = dsw->sw.feedback_pixmap;
3138 *width = dsw->sw.feedback_width;
3139 *height = dsw->sw.feedback_height;
3140 *depth = dsw->sw.drawing_area->core.depth;
3143 dsw->sw.feedback_pixmap = None;
3144 dsw->sw.feedback_width = dsw->sw.feedback_height = 0;
3170 if (dsw->sw.feedback_pixmap != None) {
3172 GrowRectList(&dsw->sw.prev_dirty_areas, &dsw->sw.prev_dirty_areas_size,
3174 r = dsw->sw.prev_dirty_areas;
3175 ConvertToPS(dsw, 0 + DELTA, dsw->sw.drawing_area->core.height - DELTA,
3177 ConvertToPS(dsw, dsw->sw.drawing_area->core.width - DELTA, 0 + DELTA,
3181 dsw->sw.num_prev_dirty_areas = 1;
3183 if (dsw->sw.backing_pixmap != None) {
3184 CopyToFeedbackPixmap(dsw, dsw->sw.prev_dirty_areas,
3185 dsw->sw.num_prev_dirty_areas);
3187 CopyRectsToCurrentDrawing(dsw, dsw->sw.prev_dirty_areas,
3188 dsw->sw.num_prev_dirty_areas);
3192 dsw->sw.num_prev_dirty_areas = 0;
3193 dsw->sw.doing_feedback = True;
3194 dsw->sw.start_feedback_data = start_feedback_data;
3214 if (dsw->sw.backing_pixmap != None) {
3215 UpdateWindowFromBackingPixmap(dsw, dsw->sw.prev_dirty_areas,
3216 dsw->sw.num_prev_dirty_areas);
3218 CopyRectsToCurrentDrawing(dsw, dsw->sw.prev_dirty_areas,
3219 dsw->sw.num_prev_dirty_areas);
3223 if (dsw->sw.feedback_gstate != 0) {
3224 XDPSFreeContextGState(dsw->sw.context, dsw->sw.feedback_gstate);
3226 dsw->sw.doing_feedback = dsw->sw.feedback_displayed = False;
3261 if (dsw->sw.backing_pixmap != None) {
3262 if (dsw->sw.feedback_pixmap != None) {
3263 CopyToFeedbackPixmap(dsw, dsw->sw.prev_dirty_areas,
3264 dsw->sw.num_prev_dirty_areas);
3266 UpdateWindowFromBackingPixmap(dsw, dsw->sw.prev_dirty_areas,
3267 dsw->sw.num_prev_dirty_areas);
3270 CopyRectsToCurrentDrawing(dsw, dsw->sw.prev_dirty_areas,
3271 dsw->sw.num_prev_dirty_areas);
3272 (void) ClipAndDraw(dsw, (dsw->sw.feedback_pixmap == None ?
3276 dsw->sw.continue_feedback_data = continue_feedback_data;
3279 if (dsw->sw.feedback_pixmap != None) {
3280 CopyRectsToDirtyArea(dsw, dsw->sw.prev_dirty_areas,
3281 dsw->sw.num_prev_dirty_areas);
3283 SimplifyRects(dsw->sw.dirty_areas, &dsw->sw.num_dirty_areas);
3284 UpdateWindowFromFeedbackPixmap(dsw, dsw->sw.dirty_areas,
3285 dsw->sw.num_dirty_areas);
3286 dsw->sw.num_dirty_areas = 0;
3289 dsw->sw.feedback_displayed = True;
3342 if (dsw->sw.backing_pixmap == None) {
3353 XCopyArea(XtDisplay(dsw), XtWindow(dsw->sw.drawing_area),
3354 dsw->sw.backing_pixmap, dsw->sw.no_ge_gc,
3376 if (h_value != NULL) *h_value = dsw->sw.scroll_h_value;
3377 if (h_size != NULL) *h_size = dsw->sw.scroll_h_size;
3378 if (h_max != NULL) *h_max = dsw->sw.scroll_h_max;
3379 if (v_value != NULL) *v_value = dsw->sw.scroll_v_value;
3380 if (v_size != NULL) *v_size = dsw->sw.scroll_v_size;
3381 if (v_max != NULL) *v_max = dsw->sw.scroll_v_max;
3404 if (dsw->sw.backing_pixmap != None) {
3406 *drawable = dsw->sw.backing_pixmap;
3407 *gstate = dsw->sw.backing_gstate;
3410 *drawable = XtWindow(dsw->sw.drawing_area);
3411 *gstate = dsw->sw.window_gstate;
3413 *context = dsw->sw.context;
3437 if ((unsigned) depth != dsw->sw.drawing_area->core.depth
3439 || dsw->sw.feedback_pixmap != None) return False;
3441 dsw->sw.feedback_pixmap = p;
3442 dsw->sw.feedback_width = width;
3443 dsw->sw.feedback_height = height;
3468 *xX = dsw->sw.ctm[0] * psX + dsw->sw.ctm[2] * psY + dsw->sw.ctm[4] +
3469 dsw->sw.x_offset + 0.5;
3470 *xY = dsw->sw.ctm[1] * psX + dsw->sw.ctm[3] * psY + dsw->sw.ctm[5] +
3471 dsw->sw.y_offset + 0.5;
3479 xX -= dsw->sw.x_offset;
3480 xY -= dsw->sw.y_offset;
3482 *psX = dsw->sw.inv_ctm[0] * xX + dsw->sw.inv_ctm[2] * xY +
3483 dsw->sw.inv_ctm[4];
3484 *psY = dsw->sw.inv_ctm[1] * xX + dsw->sw.inv_ctm[3] * xY +
3485 dsw->sw.inv_ctm[5];
3493 xX -= dsw->sw.x_offset;
3494 xY -= dsw->sw.y_offset;
3496 *psX = dsw->sw.orig_inv_ctm[0] * xX + dsw->sw.orig_inv_ctm[2] * xY +
3497 dsw->sw.orig_inv_ctm[4];
3498 *psY = dsw->sw.orig_inv_ctm[1] * xX + dsw->sw.orig_inv_ctm[3] * xY +
3499 dsw->sw.orig_inv_ctm[5];