DeviceWorkstation.st
changeset 2252 53bad848ffa8
parent 2220 0db8feaf7bcf
child 2254 705357007714
equal deleted inserted replaced
2251:43d624ce346f 2252:53bad848ffa8
  4486     curs := Cursor origin onDevice:self.
  4486     curs := Cursor origin onDevice:self.
  4487 
  4487 
  4488     "
  4488     "
  4489      just in case; wait for button to be down ...
  4489      just in case; wait for button to be down ...
  4490     "
  4490     "
  4491     [self leftButtonPressed] whileFalse:[Processor yield].
  4491     [self leftButtonPressed] whileFalse:[Delay waitForSeconds:0.05].
  4492 
  4492 
  4493     root := self rootView.
  4493     root := self rootView.
  4494 
  4494 
  4495     "
  4495     "
  4496      grab and wait for leftButton being pressed
  4496      grab and wait for leftButton being pressed
  4499 
  4499 
  4500     root clippedByChildren:false.
  4500     root clippedByChildren:false.
  4501     root foreground:blackColor background:whiteColor.
  4501     root foreground:blackColor background:whiteColor.
  4502 
  4502 
  4503     root xoring:[
  4503     root xoring:[
  4504 	|left right top bottom newOrigin newCorner p|
  4504         |left right top bottom newOrigin newCorner p|
  4505 
  4505 
  4506 	rect := origin extent:extent.
  4506         rect := origin extent:extent.
  4507 	root displayRectangle:rect.
  4507         root displayRectangle:rect.
  4508 
  4508 
  4509 	self 
  4509         self 
  4510 	    grabPointerIn:root id 
  4510             grabPointerIn:root id 
  4511 	    withCursor:curs id
  4511             withCursor:curs id
  4512 	    pointerMode:#async 
  4512             pointerMode:#async 
  4513 	    keyboardMode:#sync 
  4513             keyboardMode:#sync 
  4514 	    confineTo:nil.
  4514             confineTo:nil.
  4515 
  4515 
  4516 	[self leftButtonPressed] whileTrue:[
  4516         [self leftButtonPressed] whileTrue:[
  4517 	    newOrigin := self pointerPosition.
  4517             newOrigin := self pointerPosition.
  4518 
  4518 
  4519 	    (newOrigin ~= origin) ifTrue:[
  4519             (newOrigin ~= origin) ifTrue:[
  4520 		root displayRectangle:rect.
  4520                 root displayRectangle:rect.
  4521 
  4521 
  4522 		self 
  4522                 self 
  4523 		    grabPointerIn:root id 
  4523                     grabPointerIn:root id 
  4524 		    withCursor:curs id
  4524                     withCursor:curs id
  4525 		    pointerMode:#async 
  4525                     pointerMode:#async 
  4526 		    keyboardMode:#sync 
  4526                     keyboardMode:#sync 
  4527 		    confineTo:nil.
  4527                     confineTo:nil.
  4528 
  4528 
  4529 		rect := newOrigin extent:extent.
  4529                 rect := newOrigin extent:extent.
  4530 		root displayRectangle:rect.
  4530                 root displayRectangle:rect.
  4531 		self disposeButtonEventsFor:nil.
  4531                 self disposeButtonEventsFor:nil.
  4532 		self flush.
  4532                 self flush.
  4533 		origin := newOrigin.
  4533                 origin := newOrigin.
  4534 	    ] ifFalse:[
  4534             ] ifFalse:[
  4535 		Processor yield
  4535                 Delay waitForSeconds:0.05
  4536 	    ]
  4536             ]
  4537 	].
  4537         ].
  4538 	root displayRectangle:rect.
  4538         root displayRectangle:rect.
  4539 	self ungrabPointer.
  4539         self ungrabPointer.
  4540     ].
  4540     ].
  4541 
  4541 
  4542     self ungrabPointer.
  4542     self ungrabPointer.
  4543 
  4543 
  4544     "flush all events pending on my display"
  4544     "flush all events pending on my display"
  4552 
  4552 
  4553     "
  4553     "
  4554      Display originFromUser:200@200
  4554      Display originFromUser:200@200
  4555     "
  4555     "
  4556 
  4556 
  4557     "Modified: 28.3.1997 / 16:14:39 / cg"
  4557     "Modified: / 18.8.1998 / 15:00:14 / cg"
  4558 !
  4558 !
  4559 
  4559 
  4560 pointFromUser
  4560 pointFromUser
  4561     "{ Pragma: +optSpace }"
  4561     "{ Pragma: +optSpace }"
  4562 
  4562 
  4579 
  4579 
  4580     |p|
  4580     |p|
  4581 
  4581 
  4582     self ungrabPointer.
  4582     self ungrabPointer.
  4583     self grabPointerIn:(self rootWindowId) withCursor:((aCursor onDevice:self) id)
  4583     self grabPointerIn:(self rootWindowId) withCursor:((aCursor onDevice:self) id)
  4584 	 pointerMode:#async keyboardMode:#sync confineTo:nil.
  4584          pointerMode:#async keyboardMode:#sync confineTo:nil.
  4585     activePointerGrab := rootView.
  4585     activePointerGrab := rootView.
  4586 
  4586 
  4587     "
  4587     "
  4588      wait for leftButton ...
  4588      wait for leftButton ...
  4589     "
  4589     "
  4590     [self leftButtonPressed] whileFalse:[Processor yield].
  4590     [self leftButtonPressed] whileFalse:[Delay waitForSeconds:0.05].
  4591 
  4591 
  4592     p := self pointerPosition.
  4592     p := self pointerPosition.
  4593 
  4593 
  4594     self ungrabPointer.
  4594     self ungrabPointer.
  4595 
  4595 
  4602      Display pointFromUserShowing:(Cursor crossHair)   
  4602      Display pointFromUserShowing:(Cursor crossHair)   
  4603      Display pointFromUserShowing:(Cursor origin)   
  4603      Display pointFromUserShowing:(Cursor origin)   
  4604      Display pointFromUser
  4604      Display pointFromUser
  4605     "
  4605     "
  4606 
  4606 
  4607     "Modified: 28.3.1997 / 16:14:19 / cg"
  4607     "Modified: / 18.8.1998 / 15:00:19 / cg"
  4608 !
  4608 !
  4609 
  4609 
  4610 rectangleFromUser
  4610 rectangleFromUser
  4611     "{ Pragma: +optSpace }"
  4611     "{ Pragma: +optSpace }"
  4612 
  4612 
  4655      A helper for rectangleFromUser; can also be used for resizing operations."
  4655      A helper for rectangleFromUser; can also be used for resizing operations."
  4656 
  4656 
  4657     |curs1 origin corner root rect|
  4657     |curs1 origin corner root rect|
  4658 
  4658 
  4659     keepExtent ifTrue:[
  4659     keepExtent ifTrue:[
  4660 	curs1 := Cursor origin 
  4660         curs1 := Cursor origin 
  4661     ] ifFalse:[    
  4661     ] ifFalse:[    
  4662 	curs1 := Cursor corner
  4662         curs1 := Cursor corner
  4663     ].
  4663     ].
  4664     curs1 := curs1 onDevice:self.
  4664     curs1 := curs1 onDevice:self.
  4665     root := self rootView.
  4665     root := self rootView.
  4666 
  4666 
  4667     "
  4667     "
  4671 
  4671 
  4672     root clippedByChildren:false.
  4672     root clippedByChildren:false.
  4673     root foreground:blackColor background:whiteColor.
  4673     root foreground:blackColor background:whiteColor.
  4674 
  4674 
  4675     root xoring:[
  4675     root xoring:[
  4676 	|left right top bottom newOrigin newCorner p curs|
  4676         |left right top bottom newOrigin newCorner p curs|
  4677 
  4677 
  4678 	keepExtent ifFalse:[
  4678         keepExtent ifFalse:[
  4679 	    corner := origin.
  4679             corner := origin.
  4680 	    rect := origin corner:corner.
  4680             rect := origin corner:corner.
  4681 	    root displayRectangle:rect.
  4681             root displayRectangle:rect.
  4682 	].
  4682         ].
  4683 
  4683 
  4684 	self 
  4684         self 
  4685 	    grabPointerIn:root id 
  4685             grabPointerIn:root id 
  4686 	    withCursor:curs1 id
  4686             withCursor:curs1 id
  4687 	    pointerMode:#async 
  4687             pointerMode:#async 
  4688 	    keyboardMode:#sync 
  4688             keyboardMode:#sync 
  4689 	    confineTo:nil.
  4689             confineTo:nil.
  4690 
  4690 
  4691 	"
  4691         "
  4692 	 just in case; wait for button to be down ...
  4692          just in case; wait for button to be down ...
  4693 	"
  4693         "
  4694 	[self leftButtonPressed] whileFalse:[Processor yield].
  4694         [self leftButtonPressed] whileFalse:[Delay waitForSeconds:0.05].
  4695 
  4695 
  4696 	keepExtent ifTrue:[
  4696         keepExtent ifTrue:[
  4697 	    p := self pointerPosition.
  4697             p := self pointerPosition.
  4698 	    origin := p.
  4698             origin := p.
  4699 	    corner := origin + initialRectangle extent.
  4699             corner := origin + initialRectangle extent.
  4700 	    rect := origin corner:corner.
  4700             rect := origin corner:corner.
  4701 	    root displayRectangle:rect.
  4701             root displayRectangle:rect.
  4702 	].
  4702         ].
  4703 
  4703 
  4704 	[self leftButtonPressed] whileTrue:[
  4704         [self leftButtonPressed] whileTrue:[
  4705 	    left := initialRectangle origin x.
  4705             left := initialRectangle origin x.
  4706 	    top := initialRectangle origin y.
  4706             top := initialRectangle origin y.
  4707 	    right := initialRectangle corner x.
  4707             right := initialRectangle corner x.
  4708 	    bottom := initialRectangle corner y.
  4708             bottom := initialRectangle corner y.
  4709 
  4709 
  4710 	    p := self pointerPosition.
  4710             p := self pointerPosition.
  4711 	    keepExtent ifTrue:[
  4711             keepExtent ifTrue:[
  4712 		newOrigin := p.
  4712                 newOrigin := p.
  4713 		newCorner := newOrigin + initialRectangle extent.
  4713                 newCorner := newOrigin + initialRectangle extent.
  4714 		curs := curs1.
  4714                 curs := curs1.
  4715 	    ] ifFalse:[
  4715             ] ifFalse:[
  4716 		p x < initialRectangle left ifTrue:[
  4716                 p x < initialRectangle left ifTrue:[
  4717 		    p y < initialRectangle top ifTrue:[
  4717                     p y < initialRectangle top ifTrue:[
  4718 			curs := Cursor topLeft.
  4718                         curs := Cursor topLeft.
  4719 			left := p x.
  4719                         left := p x.
  4720 			top := p y.
  4720                         top := p y.
  4721 		    ] ifFalse:[
  4721                     ] ifFalse:[
  4722 			curs := Cursor bottomLeft.
  4722                         curs := Cursor bottomLeft.
  4723 			left := p x.
  4723                         left := p x.
  4724 			bottom := p y
  4724                         bottom := p y
  4725 		    ]
  4725                     ]
  4726 		] ifFalse:[
  4726                 ] ifFalse:[
  4727 		    p y < initialRectangle top ifTrue:[
  4727                     p y < initialRectangle top ifTrue:[
  4728 			curs := Cursor topRight.
  4728                         curs := Cursor topRight.
  4729 			right := p x.
  4729                         right := p x.
  4730 			top := p y
  4730                         top := p y
  4731 		    ] ifFalse:[
  4731                     ] ifFalse:[
  4732 			curs := Cursor bottomRight.
  4732                         curs := Cursor bottomRight.
  4733 			right := p x.
  4733                         right := p x.
  4734 			bottom := p y
  4734                         bottom := p y
  4735 		    ]
  4735                     ]
  4736 		].
  4736                 ].
  4737 
  4737 
  4738 		newOrigin := left @ top.
  4738                 newOrigin := left @ top.
  4739 		newCorner := right @ bottom.
  4739                 newCorner := right @ bottom.
  4740 	    ].
  4740             ].
  4741 
  4741 
  4742 	    ((newOrigin ~= origin) or:[newCorner ~= corner]) ifTrue:[
  4742             ((newOrigin ~= origin) or:[newCorner ~= corner]) ifTrue:[
  4743 		root displayRectangle:rect.
  4743                 root displayRectangle:rect.
  4744 
  4744 
  4745 		self grabPointerIn:root id 
  4745                 self grabPointerIn:root id 
  4746 			withCursor:curs id
  4746                         withCursor:curs id
  4747 		       pointerMode:#async 
  4747                        pointerMode:#async 
  4748 		      keyboardMode:#sync 
  4748                       keyboardMode:#sync 
  4749 			 confineTo:nil.
  4749                          confineTo:nil.
  4750 
  4750 
  4751 		origin :=  newOrigin.
  4751                 origin :=  newOrigin.
  4752 		corner :=  newCorner.
  4752                 corner :=  newCorner.
  4753 		rect := origin corner:corner.
  4753                 rect := origin corner:corner.
  4754 		root displayRectangle:rect.
  4754                 root displayRectangle:rect.
  4755 		self disposeButtonEventsFor:nil.
  4755                 self disposeButtonEventsFor:nil.
  4756 		self flush.
  4756                 self flush.
  4757 	    ] ifFalse:[
  4757             ] ifFalse:[
  4758 		Processor yield
  4758                 Delay waitForSeconds:0.05
  4759 	    ]
  4759             ]
  4760 	].
  4760         ].
  4761 	root displayRectangle:rect.
  4761         root displayRectangle:rect.
  4762 	self ungrabPointer.
  4762         self ungrabPointer.
  4763     ].
  4763     ].
  4764 
  4764 
  4765     self ungrabPointer.
  4765     self ungrabPointer.
  4766 
  4766 
  4767     "flush all events pending on my display"
  4767     "flush all events pending on my display"
  4777      Display rectangleFromUser
  4777      Display rectangleFromUser
  4778      Display rectangleFromUser:(100@100 corner:300@300)
  4778      Display rectangleFromUser:(100@100 corner:300@300)
  4779      Display rectangleFromUser:(100@100 corner:300@300) keepExtent:true
  4779      Display rectangleFromUser:(100@100 corner:300@300) keepExtent:true
  4780     "
  4780     "
  4781 
  4781 
  4782     "Created: 24.7.1997 / 15:26:47 / cg"
  4782     "Created: / 24.7.1997 / 15:26:47 / cg"
  4783     "Modified: 24.7.1997 / 16:04:22 / cg"
  4783     "Modified: / 18.8.1998 / 15:00:29 / cg"
  4784 !
  4784 !
  4785 
  4785 
  4786 topviewFromUser
  4786 topviewFromUser
  4787     "{ Pragma: +optSpace }"
  4787     "{ Pragma: +optSpace }"
  4788 
  4788 
  6075 ! !
  6075 ! !
  6076 
  6076 
  6077 !DeviceWorkstation class methodsFor:'documentation'!
  6077 !DeviceWorkstation class methodsFor:'documentation'!
  6078 
  6078 
  6079 version
  6079 version
  6080     ^ '$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.262 1998-08-04 14:53:15 cg Exp $'
  6080     ^ '$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.263 1998-08-18 13:14:42 cg Exp $'
  6081 ! !
  6081 ! !
  6082 DeviceWorkstation initialize!
  6082 DeviceWorkstation initialize!