set-object-automatic-resize object &key x-align y-align x-offset y-offset x-ratio y-ratio width-ratio height-ratio aspect-ratio aspect-ratio-y-weight pinboard
A pinboard-object or a simple-pane.
nil
, :left
, :center
or :right
.
nil
, :top
, :center
or :bottom
.
A real number, default value 0.
A real number, default value 0.
A positive real number or nil
.
A positive real number or nil
.
A positive real number or nil
.
A positive real number or nil
.
A positive real number, t
or nil
.
A real number, default value 0.5.
A static-layout, if supplied. This argument is deprecated, and can always be omitted.
The function set-object-automatic-resize
arranges for
object
to be resized and/or re-positioned automatically when
pinboard
is resized, or removes such a setting.
The value of
aspect-ratio
can be t
, which means use the current aspect ratio of
object
(that is, its height divided by its width).
object
should be either a pinboard-object or a simple-pane which is (or will be) displayed in a static-layout. This
object
will be added to the
description
of the layout by one of its :description
initarg, (setf capi:layout-description)
or manipulate-pinboard.
pinboard is the layout for object . If pinboard is already displayed with object in its description , the argument pinboard can be omitted.
When pinboard is resized, object is resized if either height-ratio or width-ratio are set.
The new width of object is calculated as follows:
The new height of object is calculated as follows:
If all of width-ratio , height-ratio and aspect-ratio are set, the new width and height of object are calculated as follows:
(/ (/
calculated-height
calculated-width
)
aspect-ratio
)
(
expt
aspect-ratio-ratio
aspect-ratio-y-weight
)
The result is that if aspect-ratio-y-weight is 0, correction is 1 and height-ratio is effectively ignored, while if aspect-ratio-y-weight is 1, correction cancels the effect of width-ratio . With the default value of 0.5, the resulting position is in the (geometric) middle, and object takes a fixed fraction of the area of the pinboard.
After resizing (if needed), object is also positioned horizontally if x-align is non-nil, and vertically if y-align is non-nil.
The new x coordinate of object is calculated as follows:
The new y coordinate of object is calculated similarly, using y-ratio and y-offset , with an adjustment such that the top, center or bottom of object aligns with the new coordinate according to y-align .
If all of
width-ratio
,
height-ratio
,
x-align
and
y-align
are nil
, automatic resizing/re-positioning of
object
is removed.
set-object-automatic-resize
can be called before
object
is actually displayed, and its effect persists over calls adding and removing
object
to/from static-layouts. The effect of set-object-automatic-resize
also persists if
object
is removed and added again, either to the same layout or another layout.
Repeated calls to set-object-automatic-resize
set only the values that are passed to set-object-automatic-resize
. Keys that are not passed are left with their previous value. A call that removes the automatic resizing (because
width-ratio
,
height-ratio
,
x-align
and
y-align
are all nil
) erases all the values.
set-object-automatic-resize
returns t
if the object is set up for automatic resizing, or nil
if the object is set up for no automatic resizing.
In LispWorks 6.0 the effect of set-object-automatic-resize
does not persist if the object is removed and then added, to any layout.
In LispWorks 6.0 each call to set-object-automatic-resize
sets all the values.
Put an object of fixed size at the top right corner:
(set-object-automatic-resize object
:x-ratio 1 :x-align :right)
Put an object in the bottom-right quadrant:
(set-object-automatic-resize
object
:x-ratio 0.5 :y-ratio 0.5
:width-ratio 0.5 :height-ratio 0.5)
Put an object with a fixed aspect ratio and object width linear with the width of the layout in the center:
(set-object-automatic-resize
object
:x-align :center :y-align :center
:x-ratio 0.5 :y-ratio 0.5
:aspect-ratio 0.6 :width-ratio 0.1)
(example-edit-file "capi/layouts/automatic-resize")
CAPI User Guide and Reference Manual (Windows version) - 3 Aug 2017