618 ! |
620 ! |
619 |
621 |
620 invertOutlineOf:something |
622 invertOutlineOf:something |
621 "invert outline of an object or collection of objects |
623 "invert outline of an object or collection of objects |
622 " |
624 " |
623 |wasClipped p| |
625 |wasClipped| |
624 |
626 |
625 (wasClipped := clipChildren) ifTrue:[ |
627 (wasClipped := clipChildren) ifTrue:[ |
626 self clippedByChildren:(clipChildren := false). |
628 self clippedByChildren:(clipChildren := false). |
627 ]. |
629 ]. |
628 |
630 |
629 something isCollection ifTrue:[ |
631 self xoring:[ |
630 something do:[:v| |
632 |p| |
631 p := v originRelativeTo:self. |
633 |
632 self xoring:[self displayRectangle:(p extent:v extent)]. |
634 something isCollection ifTrue:[ |
|
635 something do:[:v | |
|
636 |p| |
|
637 |
|
638 p := v originRelativeTo:self. |
|
639 self displayRectangle:(p extent:v extent). |
|
640 ]. |
|
641 ] ifFalse:[ |
|
642 |p| |
|
643 |
|
644 p := something originRelativeTo:self. |
|
645 self displayRectangle:(p extent:something extent). |
633 ] |
646 ] |
634 ] ifFalse:[ |
|
635 p := something originRelativeTo:self. |
|
636 self xoring:[self displayRectangle:(p extent:something extent)] |
|
637 ]. |
647 ]. |
638 |
648 |
639 wasClipped ifTrue:[ |
649 wasClipped ifTrue:[ |
640 self clippedByChildren:(clipChildren := true). |
650 self clippedByChildren:(clipChildren := true). |
641 ]. |
651 ]. |
943 " |
953 " |
944 |wasClipped r v| |
954 |wasClipped r v| |
945 |
955 |
946 selectionHiddenLevel ~~ 0 ifTrue:[^ self]. |
956 selectionHiddenLevel ~~ 0 ifTrue:[^ self]. |
947 |
957 |
948 "/ new: simply create a little view ontop, |
958 "/ "/ new: simply create a little view ontop, |
949 "/ and move it over the handles. This will generate |
959 "/ "/ and move it over the handles. This will generate |
950 "/ the required expose events automatically. |
960 "/ "/ the required expose events automatically. |
951 |
961 "/ "/ mhmh - does not work correctly with inverted frame (exposes destroy it) |
952 v := SimpleView in:self. |
962 "/ |
953 self handlesOf:aComponent do:[:rec :wht | |
963 "/ v := SimpleView in:self. |
954 r isNil |
964 "/ self handlesOf:aComponent do:[:rec :wht | |
955 ifTrue:[r := rec] |
965 "/ r isNil |
956 ifFalse:[r := r merge:rec]. |
966 "/ ifTrue:[r := rec] |
957 ]. |
967 "/ ifFalse:[r := r merge:rec]. |
958 |
|
959 "/ if the area is small, make one big rectangle-expose |
|
960 r area < 10000 ifTrue:[ |
|
961 v origin:r origin extent:r extent. |
|
962 v map. |
|
963 v unmap. |
|
964 ] ifFalse:[ |
|
965 self handlesOf:aComponent do:[:rec :wht | |
|
966 v origin:rec origin extent:rec extent. |
|
967 v map. |
|
968 v unmap. |
|
969 ]. |
|
970 ]. |
|
971 v destroy. |
|
972 ^ self. |
|
973 |
|
974 "/ OLD code: |
|
975 "/ (wasClipped := clipChildren) ifTrue:[ |
|
976 "/ self clippedByChildren:(clipChildren := false). |
|
977 "/ ]. |
968 "/ ]. |
978 "/ |
969 "/ |
979 "/ self handlesOf:aComponent do:[:rec :wht| self clearRectangle:rec ]. |
970 "/ "/ if the area is small, make one big rectangle-expose |
980 "/ |
971 "/ r area < 10000 ifTrue:[ |
981 "/ wasClipped ifTrue:[ |
972 "/ v origin:r origin extent:r extent. |
982 "/ self clippedByChildren:(clipChildren := true). |
973 "/ v map. |
|
974 "/ v unmap. |
|
975 "/ ] ifFalse:[ |
|
976 "/ self handlesOf:aComponent do:[:rec :wht | |
|
977 "/ v origin:rec origin extent:rec extent. |
|
978 "/ v map. |
|
979 "/ v unmap. |
|
980 "/ ]. |
983 "/ ]. |
981 "/ ]. |
984 "/ |
982 "/ v destroy. |
985 "/ "/ must redraw all components which are affected b the handles |
983 "/ ^ self. |
986 "/ r := (aComponent originRelativeTo:self) - (3@3) extent:(aComponent extent + (6@6)). |
984 |
987 "/ |
985 (wasClipped := clipChildren) ifTrue:[ |
988 "/ subViews do:[:anotherComponent | |
986 self clippedByChildren:(clipChildren := false). |
989 "/ |absOrg absFrame| |
987 ]. |
990 "/ |
988 |
991 "/ anotherComponent ~~ inputView ifTrue:[ |
989 self handlesOf:aComponent do:[:rec :wht| self clearRectangle:rec ]. |
992 "/ absOrg := anotherComponent originRelativeTo:self. |
990 |
993 "/ absFrame := absOrg extent:(anotherComponent extent). |
991 wasClipped ifTrue:[ |
994 "/ (absFrame intersects:r) ifTrue:[ |
992 self clippedByChildren:(clipChildren := true). |
995 "/ anotherComponent withAllSubViewsDo:[:v | |
993 ]. |
996 "/ v shown ifTrue:[ |
994 |
997 "/ aSet notNil ifTrue:[ |
995 "/ must redraw all components which are affected b the handles |
998 "/ aSet add:v |
996 r := (aComponent originRelativeTo:self) - (3@3) extent:(aComponent extent + (6@6)). |
999 "/ ] ifFalse:[ |
997 |
1000 "/ self handleAffectedViews:v |
998 subViews do:[:anotherComponent | |
1001 "/ ] |
999 |absOrg absFrame| |
1002 "/ ] |
1000 |
1003 "/ ] |
1001 anotherComponent ~~ inputView ifTrue:[ |
1004 "/ ] |
1002 absOrg := anotherComponent originRelativeTo:self. |
1005 "/ ] |
1003 absFrame := absOrg extent:(anotherComponent extent). |
1006 "/ ]. |
1004 (absFrame intersects:r) ifTrue:[ |
|
1005 anotherComponent withAllSubViewsDo:[:v | |
|
1006 v shown ifTrue:[ |
|
1007 aSet notNil ifTrue:[ |
|
1008 aSet add:v |
|
1009 ] ifFalse:[ |
|
1010 self handleAffectedViews:v |
|
1011 ] |
|
1012 ] |
|
1013 ] |
|
1014 ] |
|
1015 ] |
|
1016 ]. |
1007 |
1017 |
1008 "Modified: / 24.8.1998 / 12:19:38 / cg" |
1018 "Modified: / 24.8.1998 / 12:19:38 / cg" |
1009 ! |
1019 ! |
1010 |
1020 |
1011 whichHandleOf:aComponent isHitBy:aPoint |
1021 whichHandleOf:aComponent isHitBy:aPoint |