1725 info at:#bitsPerPixel put:1. |
1725 info at:#bitsPerPixel put:1. |
1726 info at:#padding put:32. |
1726 info at:#padding put:32. |
1727 ^ Array with:info |
1727 ^ Array with:info |
1728 ! |
1728 ! |
1729 |
1729 |
1730 supportsViewBackgroundPixmaps |
|
1731 "return true, if the device allows pixmaps as |
|
1732 viewBackground. False returned here - redefined in some |
|
1733 device classes." |
|
1734 |
|
1735 ^ false |
|
1736 ! |
|
1737 |
|
1738 supportsDeepIcons |
1730 supportsDeepIcons |
1739 "return true, if this device supports non b&w (i.e. greyScale |
1731 "return true, if this device supports non b&w (i.e. greyScale |
1740 or colored icons). Many Xservers (and/or windowManagers) crash, |
1732 or colored icons). Many Xservers (and/or windowManagers) crash, |
1741 if you pass them a deep form as icon; therefore, the default is false. |
1733 if you pass them a deep form as icon; therefore, the default is false. |
1742 It may be a good idea to check for the server vendor/release and |
1734 It may be a good idea to check for the server vendor/release and |
4671 |
4671 |
4672 "let user specify a rectangle on the screen, return the rectangle. |
4672 "let user specify a rectangle on the screen, return the rectangle. |
4673 Start with initialRectangle. |
4673 Start with initialRectangle. |
4674 A helper for rectangleFromUser; can also be used for resizing operations." |
4674 A helper for rectangleFromUser; can also be used for resizing operations." |
4675 |
4675 |
4676 |curs1 origin corner root rect| |
4676 |curs1 origin corner root rect doRegrab| |
|
4677 |
|
4678 "/ regrabbing leads to horrible flicker and |
|
4679 "/ events being sent to applications under the mouse. |
|
4680 "/ on windows displays. |
|
4681 doRegrab := self class ~~ WinWorkstation. |
4677 |
4682 |
4678 keepExtent ifTrue:[ |
4683 keepExtent ifTrue:[ |
4679 curs1 := Cursor origin |
4684 curs1 := Cursor origin |
4680 ] ifFalse:[ |
4685 ] ifFalse:[ |
4681 curs1 := Cursor corner |
4686 curs1 := Cursor corner |
4682 ]. |
4687 ]. |
4683 curs1 := curs1 onDevice:self. |
4688 curs1 := curs1 onDevice:self. |
4684 root := self rootView. |
4689 root := self rootView. |
4685 |
4690 |
4686 " |
4691 " |
4690 |
4695 |
4691 root clippedByChildren:false. |
4696 root clippedByChildren:false. |
4692 root foreground:blackColor background:whiteColor. |
4697 root foreground:blackColor background:whiteColor. |
4693 |
4698 |
4694 root xoring:[ |
4699 root xoring:[ |
4695 |left right top bottom newOrigin newCorner p curs| |
4700 |left right top bottom newOrigin newCorner p curs| |
4696 |
4701 |
4697 keepExtent ifFalse:[ |
4702 keepExtent ifFalse:[ |
4698 corner := origin. |
4703 corner := origin. |
4699 rect := origin corner:corner. |
4704 rect := origin corner:corner. |
4700 root displayRectangle:rect. |
4705 root displayRectangle:rect. |
4701 ]. |
4706 ]. |
4702 |
4707 |
4703 self |
4708 self |
4704 grabPointerIn:root id |
4709 grabPointerIn:root id |
4705 withCursor:curs1 id |
4710 withCursor:curs1 id |
4706 pointerMode:#async |
4711 pointerMode:#async |
4707 keyboardMode:#sync |
4712 keyboardMode:#sync |
4708 confineTo:nil. |
4713 confineTo:nil. |
4709 |
4714 |
4710 " |
4715 " |
4711 just in case; wait for button to be down ... |
4716 just in case; wait for button to be down ... |
4712 " |
4717 " |
4713 [self leftButtonPressed] whileFalse:[Delay waitForSeconds:0.05]. |
4718 [self leftButtonPressed] whileFalse:[Delay waitForSeconds:0.05]. |
4714 |
4719 |
4715 keepExtent ifTrue:[ |
4720 keepExtent ifTrue:[ |
4716 p := self pointerPosition. |
4721 p := self pointerPosition. |
4717 origin := p. |
4722 origin := p. |
4718 corner := origin + initialRectangle extent. |
4723 corner := origin + initialRectangle extent. |
4719 rect := origin corner:corner. |
4724 rect := origin corner:corner. |
4720 root displayRectangle:rect. |
4725 root displayRectangle:rect. |
4721 ]. |
4726 ]. |
4722 |
4727 |
4723 [self leftButtonPressed] whileTrue:[ |
4728 [self leftButtonPressed] whileTrue:[ |
4724 left := initialRectangle origin x. |
4729 left := initialRectangle origin x. |
4725 top := initialRectangle origin y. |
4730 top := initialRectangle origin y. |
4726 right := initialRectangle corner x. |
4731 right := initialRectangle corner x. |
4727 bottom := initialRectangle corner y. |
4732 bottom := initialRectangle corner y. |
4728 |
4733 |
4729 p := self pointerPosition. |
4734 p := self pointerPosition. |
4730 keepExtent ifTrue:[ |
4735 keepExtent ifTrue:[ |
4731 newOrigin := p. |
4736 newOrigin := p. |
4732 newCorner := newOrigin + initialRectangle extent. |
4737 newCorner := newOrigin + initialRectangle extent. |
4733 curs := curs1. |
4738 curs := curs1. |
4734 ] ifFalse:[ |
4739 ] ifFalse:[ |
4735 p x < initialRectangle left ifTrue:[ |
4740 p x < initialRectangle left ifTrue:[ |
4736 p y < initialRectangle top ifTrue:[ |
4741 p y < initialRectangle top ifTrue:[ |
4737 curs := Cursor topLeft. |
4742 curs := Cursor topLeft. |
4738 left := p x. |
4743 left := p x. |
4739 top := p y. |
4744 top := p y. |
4740 ] ifFalse:[ |
4745 ] ifFalse:[ |
4741 curs := Cursor bottomLeft. |
4746 curs := Cursor bottomLeft. |
4742 left := p x. |
4747 left := p x. |
4743 bottom := p y |
4748 bottom := p y |
4744 ] |
4749 ] |
4745 ] ifFalse:[ |
4750 ] ifFalse:[ |
4746 p y < initialRectangle top ifTrue:[ |
4751 p y < initialRectangle top ifTrue:[ |
4747 curs := Cursor topRight. |
4752 curs := Cursor topRight. |
4748 right := p x. |
4753 right := p x. |
4749 top := p y |
4754 top := p y |
4750 ] ifFalse:[ |
4755 ] ifFalse:[ |
4751 curs := Cursor bottomRight. |
4756 curs := Cursor bottomRight. |
4752 right := p x. |
4757 right := p x. |
4753 bottom := p y |
4758 bottom := p y |
4754 ] |
4759 ] |
4755 ]. |
4760 ]. |
4756 |
4761 |
4757 newOrigin := left @ top. |
4762 newOrigin := left @ top. |
4758 newCorner := right @ bottom. |
4763 newCorner := right @ bottom. |
4759 ]. |
4764 ]. |
4760 |
4765 |
4761 ((newOrigin ~= origin) or:[newCorner ~= corner]) ifTrue:[ |
4766 ((newOrigin ~= origin) or:[newCorner ~= corner]) ifTrue:[ |
4762 root displayRectangle:rect. |
4767 root displayRectangle:rect. |
4763 |
4768 doRegrab ifTrue:[ |
4764 self grabPointerIn:root id |
4769 self grabPointerIn:root id |
4765 withCursor:curs id |
4770 withCursor:curs id |
4766 pointerMode:#async |
4771 pointerMode:#async |
4767 keyboardMode:#sync |
4772 keyboardMode:#sync |
4768 confineTo:nil. |
4773 confineTo:nil. |
4769 |
4774 ]. |
4770 origin := newOrigin. |
4775 |
4771 corner := newCorner. |
4776 origin := newOrigin. |
4772 rect := origin corner:corner. |
4777 corner := newCorner. |
4773 root displayRectangle:rect. |
4778 rect := origin corner:corner. |
4774 self disposeButtonEventsFor:nil. |
4779 root displayRectangle:rect. |
4775 self flush. |
4780 self disposeButtonEventsFor:nil. |
4776 ] ifFalse:[ |
4781 self flush. |
4777 Delay waitForSeconds:0.05 |
4782 ] ifFalse:[ |
4778 ] |
4783 Delay waitForSeconds:0.05 |
4779 ]. |
4784 ] |
4780 root displayRectangle:rect. |
4785 ]. |
4781 self ungrabPointer. |
4786 root displayRectangle:rect. |
|
4787 self ungrabPointer. |
4782 ]. |
4788 ]. |
4783 |
4789 |
4784 self ungrabPointer. |
4790 self ungrabPointer. |
4785 |
4791 |
4786 "flush all events pending on my display" |
4792 "flush all events pending on my display" |