
Set Minimum and Maximum Sizes for an Application
constant kMaxWidth := 300; constant kMaxHeight := 300;So that we can support screen rotation, add a
ReOrientToScreen slot to the protoApp with the value:
ROM_DefRotateFuncMake the protoApp take up the full screen by setting the
viewJustify to parent full horizontally and vertically and all the slots of viewBounds to 0.
Add a viewSetupFormScript to the protoApp:
func() begin inherited:?viewSetupFormScript(); local size := :LocalBox(); if size.bottom > kMaxHeight or size.right > kMaxWidth then begin // figure amount too wide or tall local extraWidth := Max(0, size.right - kMaxWidth); local extraHeight := Max(0, size.bottom - kMaxHeight); // adjust viewBounds to make narrower // and/or shorter self.viewBounds := Clone(viewBounds); viewBounds.left := viewBounds.left + extraWidth div 2; viewBounds.right := viewBounds.right - extraWidth div 2; viewBounds.top := viewBounds.top + extraHeight div 2; viewBounds.bottom := viewBounds.bottom - extraHeight div 2; end; endThis correctly modifies the
viewBounds. However, when the application quits, the modified viewBounds remains in the view. If the screen rotates, this modified viewBounds is used instead of the original viewBounds in the template. The solution is to remove the viewBounds slot from the view when the application closes. Add a viewQuitScript to the protoApp:
func() begin RemoveSlot(self, 'viewBounds); inherited:?viewQuitScript(); endNote that it is OK to call
RemoveSlot with a non-existent slot (as would be the case if we hadn't maxed out). That's important because in some cases the view will contain a viewBounds slot, and in some cases it won't.
An online version of Programming for the Newton using Macintosh, 2nd ed. ©1996, 1994, Julie McKeehan and Neil Rhodes.
Last modified: 1 DEC 1996