/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