Product Documentation
Cadence User Interface SKILL Reference
Product Version IC23.1, September 2023

hiGetAbsWindowScreenBBox

hiGetAbsWindowScreenBBox(
w_windowId 
[ g_includeWMOffsets ]
) 
=> l_bBox 

Description

Returns the absolute screen coordinates of a window, assuming 0:0 is the lower-left corner of the screen.

Arguments

w_windowId

Window whose screen coordinates you want to get. w_windowId can be a window, session window, or dockable window.

g_includeWMOffsets

Offsets the returned coordinates by the window manager frame size. Setting this argument to t makes this function useful with hiResizeWindow().

Value Returned

l_bBox

A list containing the lower-left and upper-right screen coordinates of w_windowId in the following format:

((lowerLeft_Xcoord lowerLeft_Ycoord) (upperRight_Xcoord upperRight_Ycoord)

If w_windowID is a window contained in a session window, the screen coordinates of the session window are returned. If w_windowID is a dockable window that is docked in a session window, the screen coordinates of the sesssion window are returned. If w_windowID is a dockable window that is floating, the dockable window’s screen coordinates are returned.

Examples

Returns the screen coordinates of window (2).

hiGetAbsWindowScreenBBox(window(2))
=> ((221 296) (1121 964))

The following sample creates a form that allows the user to change the title or size of a given window.

;;; retrieving the height of the bounding box
procedure( trGetBBoxHeight( bBox )
let( ( ll ur lly ury )
ll = lowerLeft( bBox )
lly = yCoord( ll )
ur = upperRight( bBox )
ury = yCoord( ur )
ury - lly
) ; let
) ; procedure
;;; retrieving the width of the bounding box procedure( trGetBBoxWidth( bBox )    let( ( ll ur llx urx )
ll = lowerLeft( bBox )
llx = xCoord( ll )
ur = upperRight( bBox )
urx = xCoord( ur )
urx - llx
) ; let
) ; procedure
;;; retrieving the window height procedure( trGetWindowHeight( wid )    trGetBBoxHeight(hiGetAbsWindowScreenBBox( wid ) )
) ; procedure
;;; retrieving the window width procedure( trGetWindowWidth( wid )    trGetBBoxWidth( hiGetAbsWindowScreenBBox( wid ) )
) ; procedure
;;; resizing the window to the given bounding box procedure( trResizeWindow( @key ( id hiGetCurrentWindow() ) ( height nil ) ( width nil ) )    let( ( bBox ll ur llx lly urx ury urNew )
bBox = hiGetAbsWindowScreenBBox( id )
ll = lowerLeft( bBox )
ur = upperRight( bBox )
llx = xCoord( ll )
lly = yCoord( ll )
urx = xCoord( ur )
ury = yCoord( ur )
   unless( height height = ury - lly )
unless( width width = urx - llx )
   urNew = llx + width : lly + height

hiResizeWindow( id list( ll urNew ) )

id
) ; let
) ; procedure
;;; creating a form that acts upon the window with the 
;;; window id (wid)
procedure( trCreateWindowForm( wid )
let( ( nameField heightField widthField theFormSymbol theForm )

nameField =
hiCreateStringField(
?prompt "Name"
?name 'nameField
?value hiGetWindowName( wid )
?defValue hiGetWindowName( wid )
?callback "println( 'nameField )"
)
   heightField =
hiCreateScaleField(
?prompt "Height"
?name 'heightField
?value trGetWindowHeight( wid )
?defValue trGetWindowHeight( wid )
?range list( 0 yCoord( hiGetMaxScreenCoords()))
?callback "println( 'heightField )"
)
   widthField =
hiCreateScaleField(
?prompt "Width"
?name ’widthField
?value trGetWindowWidth( wid )
?defValue trGetWindowWidth( wid )
?range list( 0 xCoord( hiGetMaxScreenCoords()) )
?callback "println( 'widthField )"
)
   ;;; specifying a unique symbol to allow multiple
;;; instances of the form to be active at a single
;;; time
theFormSymbol = gensym( 'WindowForm )
   ;;; building the form’s data structure
theForm =
hiCreateAppForm(
?name theFormSymbol
?formTitle sprintf( nil "%L" wid )
?callback "trWindowFormCB( hiGetCurrentForm())"
?fields list( nameField heightField widthField)
?unmapAfterCB t
)
      ;;; associating the wid with the form via a user 
;;; defined slot
theForm->wid = wid
   theForm ;;; the return value
   ) ; let
) ; procedure
;;; The following callback for the form handles the ;;; renaming and resizing of the window. procedure( trWindowFormCB( theForm )    let( ( wid newName newHeight newWidth )
;;; picking up the current form values
wid = theForm->wid
;;; user specified slot linking the form to the window
newName = theForm->nameField->value
;;; accessing the current hightField
newHeight = theForm->heightField->value
;;; accessing the current widthField
newWidth = theForm->widthField->value
   ;;; setting the window name
hiSetWindowName( wid newName )
   ;;; resizing the window
trResizeWindow(
?id wid
?height newHeight
?width newWidth
) ; trResizeWindow
   t ;;; the return value
   ) ; let
) ; procedure

To test your application using the CIW, type:

wf1 = trCreateWindowForm( window(1))
hiDisplayForm(wf1)

After the form is displayed, change the values of the Height and Width fields and type a new title for the CIW in the Name field. Select the Apply button to see the changes in the title and size of the CIW.

Related Topics

Window Functions


Return to top
 ⠀
X