Spaces:
Sleeping
Sleeping
| /box-button-create { | |
| box-inline-create % => Box | |
| dup box-button-setup-methods | |
| dup /box-button add-type | |
| } def | |
| /box-button-get-max-width { % => Context Box | |
| box-container-get-max-width | |
| } def | |
| /box-button-get-min-width { % => Context Box | |
| box-container-get-max-width | |
| } def | |
| /box-button-line-break-allowed { % => Box | |
| pop false | |
| } def | |
| /box-button-reflow { | |
| % Check if we need a line break here | |
| 3 copy /maybe-line-break call-method | |
| pop | |
| % Append to parent line box | |
| dup 2 index box-container-append-line | |
| % Determine coordinates of upper-left corner | |
| 2 copy | |
| box-generic-guess-corner % => Context Parent This | |
| % Determine the box width | |
| 2 index 1 index | |
| /get-min-width call-method | |
| 1 index put-full-width % => Context Parent This | |
| 2 index 1 index | |
| box-container-reflow-content % => Context Parent This | |
| % center the button text vertically inside the button | |
| dup get-content 0 get % => Context Parent This Text | |
| dup get-top | |
| 1 index get-height 2 div sub % => Context Parent This Text TextMiddle | |
| 2 index get-top | |
| 3 index get-height 2 div sub % => Context Parent This Text TextMiddle ThisMiddle | |
| sub | |
| neg 0 % => Context Parent This Text -Delta 0 | |
| 2 index /offset call-method % => Context Parent This Text | |
| pop % => Context Parent This | |
| % Now set the baseline of a button box to align it vertically when flowing isude the text line | |
| dup get-content 0 get | |
| get-default-baseline | |
| 1 index get-extra-top add | |
| dup 2 index put-baseline | |
| 1 index put-default-baseline | |
| % Offset parent curernt X coordinate | |
| 1 index get-current-x | |
| 1 index get-full-width | |
| add | |
| 2 index put-current-x | |
| % Extend parent height | |
| dup get-bottom-margin | |
| 1 index box-generic-extend-height | |
| pop pop pop | |
| } def | |
| /box-button-reflow-obsolete { % => Context Parent This | |
| % append to parent line box | |
| dup 2 index box-container-append-line | |
| % Determine coordinates of upper-left _margin_ corner | |
| 2 copy box-generic-guess-corner % => Context Parent This | |
| % Determine the box width | |
| 2 index 1 index | |
| /get-min-width call-method | |
| 1 index put-full-width % => Context Parent This | |
| 2 index 1 index | |
| box-container-reflow-content % => Context Parent This | |
| % Offset content to align vertically in the button | |
| % Make the text centered vertically | |
| dup get-content 0 get % => Context Parent This C0 | |
| get-default-baseline 2 div % => | |
| 1 index get-height 2 div add | |
| 1 index get-content 0 get | |
| put-baseline | |
| 2 index context-pop-collapsed-margin | |
| dup get-margin-bottom | |
| 3 index context-push-collapsed-margin | |
| % => Context Parent This | |
| dup get-content 0 get | |
| get-baseline | |
| 1 index get-extra-top add % => Context Parent This DB | |
| 1 index put-default-baseline % => Context Parent This | |
| % offset parent current X coordinate | |
| dup get-full-width | |
| 2 index get-current-x add | |
| 2 index put-current-x | |
| % extends parents height | |
| dup get-bottom-margin | |
| 2 index box-generic-extend-height | |
| pop pop pop | |
| } def | |
| /box-button-setup-methods { | |
| dup /Methods get | |
| dup /get-max-width {box-button-get-max-width} put | |
| dup /get-min-width {box-button-get-min-width} put | |
| dup /line-break-allowed {box-button-line-break-allowed} put | |
| dup /reflow {box-button-reflow} put | |
| dup /show {box-button-show} put | |
| pop pop | |
| } def | |
| /box-button-show { % => Viewport This | |
| box-container-show | |
| } def | |