2024-09-24 12:54:57 +00:00
# include <precomp.h>
# include <api/skin/widgets/mb/scriptbrowser.h>
# include <tataki/bitmap/bitmap.h>
# include <api/wnd/popup.h>
# include <api/wndmgr/msgbox.h>
# include <api/skin/widgets/group.h>
# include "layout.h"
# include <api/skin/skinparse.h>
# include <api/skin/widgets/button.h>
# include <api/core/buttons.h>
# include <api/wnd/wndtrack.h>
//#include <api/wac/main.h> //CUT!
# include <api/skin/widgets/compbuck2.h>
# include <api/wac/compon.h>
# include <api/skin/skin.h>
# include <api/wnd/notifmsg.h>
# include <api/config/items/intarray.h>
# include <api/config/items/cfgitem.h>
# include <api/config/options.h>
# include <api/script/script.h>
# include <api/script/scriptmgr.h>
# include <bfc/parse/pathparse.h>
# include <api/skin/groupmgr.h>
# include <api/wndmgr/skinembed.h>
# include <api/skin/skinparse.h>
# include <api/service/svcs/svc_action.h>
# include <api/config/items/attrbool.h>
# include <api/config/items/attrint.h>
# include <api/wndmgr/alphamgr.h>
# include <bfc/wasabi_std_wnd.h>
# include <api/wnd/PaintCanvas.h>
# ifdef _WIN32
2024-09-29 02:04:03 +00:00
# include <archx.h> // for SetWindowRedraw
2024-09-24 12:54:57 +00:00
# endif
# ifdef WASABINOMAINAPI
# include <api/wndmgr/gc.h>
# include <api/syscb/callbacks/gccb.h>
# endif
# ifndef WM_MOUSEWHEEL
# define WM_MOUSEWHEEL 0x20A
# endif
# define TIMER_SETTINGCHANGED 0x8791
# define TIMER_AUTOOPACIFY 0x8792
# define TIMER_AUTOOPACIFY2 0x8793
# define TIMER_OFFSCREENCHECK 0x8794
# define TIMER_TRANSPARENCY_AUTOON 0x8795
# define TIMER_SAVE_POSITION 0x8796
# define TIMER_SAVE_ALL_POSITIONS 0x8797
# ifdef WASABI_COMPILE_CONFIG
extern _bool cfg_uioptions_linkallalpha ;
extern _bool cfg_uioptions_linkallratio ;
extern _int cfg_uioptions_autoopacitylinked ;
extern _int cfg_uioptions_autoopacitytime ;
extern _int cfg_uioptions_extendautoopacity ;
extern _int cfg_uioptions_autoopacityfadein ;
extern _int cfg_uioptions_autoopacityfadeout ;
extern _int cfg_uioptions_linkedalpha ;
extern _bool cfg_options_appbarondrag ;
# endif
AlphaMgr * alphaMgr = NULL ;
XMLParamPair Layout : : params [ ] =
{
{ LAYOUT_SETALPHA , L " ALPHA " } ,
{ LAYOUT_SETALPHABACKGROUND , L " ALPHABACKGROUND " } ,
{ LAYOUT_SETDESKTOPALPHA , L " DESKTOPALPHA " } ,
{ LAYOUT_FORCEALPHA , L " FORCEALPHA " } ,
{ LAYOUT_SETINDESKTOP , L " INDESKTOP " } ,
{ LAYOUT_SETLINKHEIGHT , L " LINKHEIGHT " } ,
{ LAYOUT_SETLINKWIDTH , L " LINKWIDTH " } ,
{ LAYOUT_SETLOCKTO , L " LOCKTO " } ,
{ LAYOUT_SETNOACTIVATION , L " NOACTIVATION " } ,
{ LAYOUT_NODOCK , L " NODOCK " } ,
{ LAYOUT_NOOFFSCREENCHECK , L " NOOFFSCREENCHECK " } ,
{ LAYOUT_NOPARENT , L " NOPARENT " } ,
{ LAYOUT_SETONTOP , L " ONTOP " } ,
{ LAYOUT_SETOSFRAME , L " OSFRAME " } ,
{ LAYOUT_SETOWNER , L " OWNER " } ,
{ LAYOUT_SNAPADJUSTBOTTOM , L " SNAPADJUSTBOTTOM " } ,
{ LAYOUT_SNAPADJUSTLEFT , L " SNAPADJUSTLEFT " } ,
{ LAYOUT_SNAPADJUSTRIGHT , L " SNAPADJUSTRIGHT " } ,
{ LAYOUT_SNAPADJUSTTOP , L " SNAPADJUSTTOP " } ,
{ LAYOUT_UNLINKED , L " UNLINKED " } ,
{ LAYOUT_RESIZABLE , L " RESIZABLE " } ,
{ LAYOUT_SCALABLE , L " SCALABLE " } ,
} ;
Layout : : Layout ( )
{
getScriptObject ( ) - > vcpu_setInterface ( layoutGuid , ( void * ) static_cast < Layout * > ( this ) ) ;
getScriptObject ( ) - > vcpu_setInterface ( guiResizableGuid , ( void * ) static_cast < GuiResizable * > ( this ) ) ;
getScriptObject ( ) - > vcpu_setClassName ( L " Layout " ) ;
getScriptObject ( ) - > vcpu_setController ( layoutController ) ;
# ifdef _WIN32
forwardMsgWnd = INVALIDOSWINDOWHANDLE ;
# endif
transparency_reenabled_at = 0 ;
transparency_autooff = 0 ;
captured = 0 ; resizing = 0 ;
m_forceunlink = 0 ;
inresize = 0 ;
autoopacify = 0 ;
x = 0 ; y = 0 ;
# ifdef USEAPPBAR
appbar_want_autohide = 1 ;
appbar_want_alwaysontop = 1 ;
m_allowsavedock = 0 ;
# endif
size_w = 0 ; size_h = 0 ;
reg = NULL ;
//subregionlayers = new PtrList<Layer>;
setStartHidden ( TRUE ) ;
moving = 0 ;
setVirtual ( 0 ) ;
indesktop = 0 ;
p_container = NULL ;
alpha = 255 ;
linkedheight = NULL ;
linkedwidth = NULL ;
inlinkwidth = 0 ;
inlinkheight = 0 ;
wantactiv = 1 ;
wantdesktopalpha = 0 ;
alllayouts . addItem ( this ) ;
galphadisabled = 0 ;
lockedto = NULL ;
osframe = 0 ;
scalelocked = 0 ;
initontop = 0 ;
wantredrawonresize = 1 ;
getGuiObject ( ) - > guiobject_setMover ( 1 ) ;
snap_adjust_left = snap_adjust_right = snap_adjust_top = snap_adjust_bottom = 0 ;
disable_auto_alpha = 0 ;
unlinked = 0 ;
scaling = 0 ;
transparencyoverride = - 1 ;
noparent = 0 ;
forcealpha = 0 ;
nodock = 0 ;
resizable = 1 ;
scalable = 1 ;
nooffscreencheck = 0 ;
m_w = m_h = m_endmovesize = 0 ;
xuihandle = newXuiHandle ( ) ;
CreateXMLParameters ( xuihandle ) ;
if ( ! alphaMgr )
{
alphaMgr = new AlphaMgr ( ) ;
# ifdef WASABI_COMPILE_CONFIG
alphaMgr - > setAllLinked ( cfg_uioptions_linkallalpha . getValueAsInt ( ) ) ;
alphaMgr - > setAutoOpacify ( cfg_uioptions_autoopacitylinked . getValueAsInt ( ) ) ;
alphaMgr - > setGlobalAlpha ( cfg_uioptions_linkedalpha . getValueAsInt ( ) ) ;
alphaMgr - > setHoldTime ( cfg_uioptions_autoopacitytime . getValueAsInt ( ) ) ;
alphaMgr - > setFadeInTime ( cfg_uioptions_autoopacityfadein . getValueAsInt ( ) ) ;
alphaMgr - > setFadeOutTime ( cfg_uioptions_autoopacityfadeout . getValueAsInt ( ) ) ;
alphaMgr - > setExtendAutoOpacity ( cfg_uioptions_extendautoopacity . getValueAsInt ( ) ) ;
# endif
}
alphaMgr - > addLayout ( this ) ;
}
void Layout : : CreateXMLParameters ( int master_handle )
{
//LAYOUT_SCRIPTPARENT::CreateXMLParameters(master_handle);
int numParams = sizeof ( params ) / sizeof ( params [ 0 ] ) ;
hintNumberOfParams ( xuihandle , numParams ) ;
for ( int i = 0 ; i < numParams ; i + + )
addParam ( xuihandle , params [ i ] , XUI_ATTRIBUTE_IMPLIED ) ;
}
Layout : : ~ Layout ( )
{
if ( transparency_reenabled_at ) killTimer ( TIMER_TRANSPARENCY_AUTOON ) ;
alphaMgr - > removeLayout ( this ) ;
killTimer ( TIMER_OFFSCREENCHECK ) ;
if ( lockedto ) lockedto - > removeLockedLayout ( this ) ;
WASABI_API_WNDMGR - > wndTrackRemove ( this ) ;
if ( reg ) delete reg ;
alllayouts . removeItem ( this ) ;
}
int Layout : : setXuiParam ( int _xuihandle , int attrid , const wchar_t * paramname , const wchar_t * strvalue )
{
if ( xuihandle ! = _xuihandle ) return LAYOUT_PARENT : : setXuiParam ( _xuihandle , attrid , paramname , strvalue ) ;
switch ( attrid )
{
case LAYOUT_SETDESKTOPALPHA :
setWantDesktopAlpha ( WTOI ( strvalue ) ) ;
break ;
case LAYOUT_SETINDESKTOP :
setInDesktop ( WTOI ( strvalue ) ) ;
break ;
case LAYOUT_SETALPHA :
setAlpha ( WTOI ( strvalue ) ) ;
break ;
case LAYOUT_SETLINKWIDTH :
setLinkWidth ( strvalue ) ;
if ( * strvalue & & isPostOnInit ( ) & & isVisible ( ) ) onResize ( ) ;
break ;
case LAYOUT_SETLINKHEIGHT :
setLinkHeight ( strvalue ) ;
if ( * strvalue & & isPostOnInit ( ) & & isVisible ( ) ) onResize ( ) ;
break ;
case LAYOUT_SETOWNER :
owner = strvalue ;
break ;
case LAYOUT_NOPARENT :
setNoParent ( WTOI ( strvalue ) ) ;
break ;
case LAYOUT_FORCEALPHA :
forcealpha = WTOI ( strvalue ) ;
break ;
case LAYOUT_SETLOCKTO :
lockto = strvalue ;
break ;
case LAYOUT_SETOSFRAME :
osframe = WTOI ( strvalue ) ;
break ;
case LAYOUT_SETALPHABACKGROUND :
setAlphaBackground ( strvalue ) ;
setWantDesktopAlpha ( 1 ) ;
setDrawBackground ( 1 ) ;
break ;
case LAYOUT_SETNOACTIVATION :
wantactiv = WTOI ( strvalue ) ? 0 : 1 ;
break ;
case LAYOUT_SETONTOP :
initontop = WTOI ( strvalue ) ;
if ( isPostOnInit ( ) ) updateOnTop ( ) ;
break ;
case LAYOUT_SNAPADJUSTLEFT :
snap_adjust_left = WTOI ( strvalue ) ;
script_vcpu_onSnapAdjustChanged ( SCRIPT_CALL , getScriptObject ( ) ) ;
# ifdef USEAPPBAR
if ( appbar_isDocked ( ) ) appbar_posChanged ( ) ;
# endif
break ;
case LAYOUT_SNAPADJUSTTOP :
snap_adjust_top = WTOI ( strvalue ) ;
script_vcpu_onSnapAdjustChanged ( SCRIPT_CALL , getScriptObject ( ) ) ;
# ifdef USEAPPBAR
if ( appbar_isDocked ( ) ) appbar_posChanged ( ) ;
# endif
break ;
case LAYOUT_SNAPADJUSTRIGHT :
snap_adjust_right = WTOI ( strvalue ) ;
script_vcpu_onSnapAdjustChanged ( SCRIPT_CALL , getScriptObject ( ) ) ;
# ifdef USEAPPBAR
if ( appbar_isDocked ( ) ) appbar_posChanged ( ) ;
# endif
break ;
case LAYOUT_SNAPADJUSTBOTTOM :
snap_adjust_bottom = WTOI ( strvalue ) ;
script_vcpu_onSnapAdjustChanged ( SCRIPT_CALL , getScriptObject ( ) ) ;
# ifdef USEAPPBAR
if ( appbar_isDocked ( ) ) appbar_posChanged ( ) ;
# endif
break ;
case LAYOUT_UNLINKED :
unlinked = WTOI ( strvalue ) ;
if ( ! unlinked & & isPostOnInit ( ) & & isVisible ( ) ) onResize ( ) ;
break ;
case LAYOUT_NODOCK :
setNoDock ( WTOI ( strvalue ) ) ;
break ;
case LAYOUT_NOOFFSCREENCHECK :
setNoOffscreenCheck ( WTOI ( strvalue ) ) ;
break ;
case LAYOUT_RESIZABLE :
resizable = WTOI ( strvalue ) ;
break ;
case LAYOUT_SCALABLE :
scalable = WTOI ( strvalue ) ;
break ;
default :
return 0 ;
}
return 1 ;
}
void Layout : : setLinkHeight ( const wchar_t * layoutid )
{
linkedheight = layoutid ;
}
void Layout : : setLinkWidth ( const wchar_t * layoutid )
{
linkedwidth = layoutid ;
}
int Layout : : onPostedMove ( )
{
updateLockedLayouts ( ) ;
int r = LAYOUT_PARENT : : onPostedMove ( ) ;
Container * c = getParentContainer ( ) ;
if ( isVisible ( ) & & c & & c - > isMainContainer ( ) )
{
# ifdef WASABI_ON_MAIN_MOVE
WASABI_ON_MAIN_MOVE ( gethWnd ( ) ) ;
# endif
}
return r ;
}
void Layout : : cancelCapture ( )
{
if ( getCapture ( ) )
endCapture ( ) ;
captured = 0 ;
}
int Layout : : isOffscreen ( ifc_window * w )
{
if ( ! w - > isVisible ( ) ) return 0 ;
if ( nooffscreencheck ) return 0 ;
# ifdef USEAPPBAR
if ( appbar_isDocked ( ) ) return 0 ;
# endif
if ( lockedto ) return 0 ;
RECT wr ;
w - > getWindowRect ( & wr ) ;
windowTracker - > snapAdjustWindowRect ( w , & wr ) ;
RECT r ;
int isontop = 0 ;
if ( w - > getGuiObject ( ) )
{
isontop = WTOI ( w - > getGuiObject ( ) - > guiobject_getXmlParam ( L " ontop " ) ) ;
# ifndef EXPERIMENTAL_INDEPENDENT_AOT
if ( WTOI ( w - > getGuiObject ( ) - > guiobject_getXmlParam ( L " noparent " ) ) = = 0 )
isontop = 0 ;
# endif
}
if ( ! isontop )
{
# ifdef WASABI_COMPILE_CONFIG
extern _bool cfg_options_alwaysontop ;
isontop | = cfg_options_alwaysontop . getValueAsInt ( ) ;
# endif
}
Wasabi : : Std : : getViewport ( & r , NULL , & wr , NULL , isontop ) ;
if ( wr . right < r . left + 10 | |
wr . bottom < r . top + 10 | |
wr . left > r . right - 10 | |
wr . top > r . bottom - 10 )
{
return 1 ;
} //////TO CONTINUE
return 0 ;
}
void Layout : : offscreenCheck ( )
{
int disabled = 0 ;
# ifdef WASABI_CHECK_OFFSCREENCHECK_DISABLE
WASABI_CHECK_OFFSCREENCHECK_DISABLE ( disabled ) ;
# endif
if ( disabled ) return ;
if ( ! isVisible ( ) ) return ;
if ( moving | | scaling | | resizing ) return ;
if ( isOffscreen ( this ) )
{
windowTracker - > startCooperativeMove ( this ) ;
for ( int i = 0 ; i < windowTracker - > getNumDocked ( ) ; i + + )
{
ifc_window * w = windowTracker - > enumDocked ( i ) ;
Layout * l = static_cast < Layout * > ( w - > getInterface ( layoutGuid ) ) ;
if ( l ! = NULL )
{
if ( l - > getParentContainer ( ) & & l - > getParentContainer ( ) - > isMainContainer ( ) )
{
if ( ! isOffscreen ( l ) )
{
windowTracker - > endCooperativeMove ( ) ;
return ;
}
}
}
}
windowTracker - > endCooperativeMove ( ) ;
RECT wr ;
getWindowRect ( & wr ) ;
RECT nr = windowTracker - > findOpenRect ( wr ) ;
move ( nr . left , nr . top ) ;
}
}
/**
* This one only prevents UI resizings from layers !
*/
int Layout : : getResizable ( )
{
return this - > resizable ;
}
/**
* This one only prevents UI scalings from layers !
*/
int Layout : : getScalable ( )
{
return this - > scalable ;
}
void Layout : : setTransparencyOverride ( int v )
{
transparencyoverride = v ;
if ( v ! = - 1 ) setTransparency ( v ) ; else updateTransparency ( ) ;
}
# ifndef PI
# define PI 3.1415926536
# endif
void Layout : : timerCallback ( int id )
{
if ( id = = TIMER_TRANSPARENCY_AUTOON )
{
if ( ! isTransparencySafe ( 1 ) )
{
transparency_reenabled_at = 0 ;
return ;
}
int n = Wasabi : : Std : : getTickCount ( ) - transparency_reenabled_at ;
if ( n < 1000 ) return ;
else
{
killTimer ( TIMER_TRANSPARENCY_AUTOON ) ;
transparency_autooff = 0 ;
updateTransparency ( ) ;
transparency_reenabled_at = 0 ;
}
return ;
}
else if ( id = = TIMER_OFFSCREENCHECK )
{
offscreenCheck ( ) ;
return ;
}
else if ( id = = TIMER_SETTINGCHANGED )
{
killTimer ( TIMER_SETTINGCHANGED ) ;
# ifdef _WIN32
HWND parent ;
webserver = INVALIDOSWINDOWHANDLE ;
listview = INVALIDOSWINDOWHANDLE ;
getExplorerWindows ( & parent , & listview , & webserver ) ;
if ( ! webserver ) // active desktop now off, reposition this window zorder otherwise it will be behind the icons
# ifdef WIN32
SetWindowPos ( gethWnd ( ) , HWND_TOP , 0 , 0 , 0 , 0 , SWP_NOMOVE | SWP_NOSIZE | SWP_DEFERERASE ) ;
# else
bringToFront ( ) ;
# endif
# endif
}
else if ( id = = TIMER_SAVE_ALL_POSITIONS )
{
killTimer ( TIMER_SAVE_ALL_POSITIONS ) ;
saveAllPositions ( ) ;
// TODO: benski> not 100% sure we want to call into the script on the timer (maybe do it in endMove)
//script_vcpu_onEndMove(SCRIPT_CALL, getScriptObject());
return ;
}
else if ( id = = TIMER_SAVE_POSITION )
{
killTimer ( TIMER_SAVE_POSITION ) ;
savePosition ( ) ;
// TODO: benski> not 100% sure we want to call into the script on the timer (maybe do it in endMove)
//script_vcpu_onEndMove(SCRIPT_CALL, getScriptObject());
return ;
}
else LAYOUT_PARENT : : timerCallback ( id ) ;
}
void Layout : : onMouseEnterLayout ( )
{
script_vcpu_onMouseEnterLayout ( SCRIPT_CALL , getScriptObject ( ) ) ;
}
void Layout : : onMouseLeaveLayout ( )
{
script_vcpu_onMouseLeaveLayout ( SCRIPT_CALL , getScriptObject ( ) ) ;
}
void Layout : : beginMove ( )
{
moving = 1 ;
}
void Layout : : beginScale ( )
{
scaling = 1 ;
}
void Layout : : beginResize ( )
{
resizing = 1 ;
}
void Layout : : endMove ( )
{
if ( m_endmovesize )
{
m_endmovesize = 0 ;
RECT r ;
guiresizable_getRootWnd ( ) - > getWindowRect ( & r ) ;
r . right = r . left + m_w ;
r . bottom = r . top + m_h ;
guiresizable_getRootWnd ( ) - > resizeToRect ( & r ) ;
}
moving = 0 ;
// TODO: benski> do this on a resetable timer so it doesn't go so slowly
if ( WASABI_API_WNDMGR - > wndTrackWasCooperative ( ) )
setTimer ( TIMER_SAVE_ALL_POSITIONS , 1000 ) ;
// saveAllPositions();
else
setTimer ( TIMER_SAVE_POSITION , 1000 ) ;
//savePosition();
// TODO: benski> not 100% sure we want to call into the script on the timer (maybe do it in endMove)
script_vcpu_onEndMove ( SCRIPT_CALL , getScriptObject ( ) ) ;
}
void Layout : : endScale ( )
{
scaling = 0 ;
savePosition ( ) ;
fixPosition ( ) ;
}
void Layout : : endResize ( )
{
resizing = 0 ;
RECT r ;
getClientRect ( & r ) ;
RECT wr ;
getWindowRect ( & wr ) ;
script_vcpu_onUserResize ( SCRIPT_CALL , getScriptObject ( ) , MAKE_SCRIPT_INT ( wr . left ) , MAKE_SCRIPT_INT ( wr . top ) , MAKE_SCRIPT_INT ( r . right - r . left ) , MAKE_SCRIPT_INT ( r . bottom - r . top ) ) ;
savePosition ( ) ;
}
void Layout : : onMove ( )
{
script_vcpu_onMove ( SCRIPT_CALL , getScriptObject ( ) ) ;
}
void Layout : : setAutoOpacify ( int a )
{
if ( autoopacify = = a ) return ;
autoopacify = a ! = - 1 ? a : autoopacify ;
if ( getParentContainer ( ) & & ! getParentContainer ( ) - > isTranscient ( ) )
{
StringW tmp ;
tmp . printf ( L " Skin:%s/Container:%s/Layout:%s/autoopacify " , WASABI_API_SKIN - > getSkinName ( ) , getParentContainer ( ) - > getDescriptor ( ) , getGuiObject ( ) - > guiobject_getId ( ) ) ;
IntArray : : write ( tmp , autoopacify ) ;
}
updateTransparency ( ) ;
}
void Layout : : controlMenu ( )
{
PopupMenu pop ;
int x = 1 ;
# ifdef WASABI_CHECK_CAN_EXIT
WASABI_CHECK_CAN_EXIT ( x )
# endif
if ( getParentContainer ( ) & & getParentContainer ( ) - > isMainContainer ( ) )
{
if ( x )
{
pop . addCommand ( StringPrintfW ( L " Exit %s " , WASABI_API_APP - > main_getAppName ( ) ) , ACTION_CLOSE ) ;
pop . addSeparator ( ) ;
}
}
else
{
if ( ! getParentContainer ( ) | | getParentContainer ( ) - > canClose ( ) )
{
pop . addCommand ( L " Close window " , ACTION_CLOSE_WINDOW ) ;
pop . addSeparator ( ) ;
}
}
PopupMenu * scalemenu = new PopupMenu ( ) ;
scalemenu - > addCommand ( L " 50% " , ACTION_SCALE_50 ) ;
scalemenu - > addCommand ( L " 75% " , ACTION_SCALE_75 , FALSE , FALSE ) ;
scalemenu - > addCommand ( L " 100% " , ACTION_SCALE_100 ) ;
scalemenu - > addCommand ( L " 125% " , ACTION_SCALE_125 ) ;
scalemenu - > addCommand ( L " 150% " , ACTION_SCALE_150 ) ;
scalemenu - > addCommand ( L " 200% " , ACTION_SCALE_200 ) ;
scalemenu - > addCommand ( L " 400% " , ACTION_SCALE_400 , FALSE , FALSE ) ;
pop . addSubMenu ( scalemenu , L " Scale " ) ;
PopupMenu * opaqmenu = new PopupMenu ( ) ;
opaqmenu - > addCommand ( L " Auto-fade " , ACTION_AUTOOPACIFY , getAutoOpacify ( ) , FALSE ) ;
opaqmenu - > addSeparator ( ) ;
opaqmenu - > addCommand ( L " 100% " , ACTION_ALPHA_100 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 90% " , ACTION_ALPHA_90 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 80% " , ACTION_ALPHA_80 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 70% " , ACTION_ALPHA_70 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 60% " , ACTION_ALPHA_60 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 50% " , ACTION_ALPHA_50 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 40% " , ACTION_ALPHA_40 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 30% " , ACTION_ALPHA_30 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 20% " , ACTION_ALPHA_20 , FALSE , FALSE ) ;
opaqmenu - > addCommand ( L " 10% " , ACTION_ALPHA_10 , FALSE , FALSE ) ;
pop . addSubMenu ( opaqmenu , L " Opacity " , ! isTransparencySafe ( ) ) ;
# ifdef EXPERIMENTAL_INDEPENDENT_AOT
pop . addCommand ( L " Always on top " , ACTION_AOT , getAlwaysOnTop ( ) ) ;
# endif
int r = pop . popAtMouse ( ) ;
if ( r < 0 ) return ;
onActionNotify ( r , 0 ) ;
}
void Layout : : fixPosition ( )
{
RECT r ;
getWindowRect ( & r ) ;
RECT orig_r = r ;
RECT vr ;
RegionI reg ;
int i = 0 ;
while ( Wasabi : : Std : : enumViewports ( i , & vr ) )
{
reg . addRect ( & vr ) ;
i + + ;
}
RECT full ;
reg . getBox ( & full ) ;
int dif = r . bottom - full . bottom ;
if ( dif > 0 ) r . top - = dif ;
dif = r . right - full . right ;
if ( dif > 0 ) r . left - = dif ;
dif = full . top - r . top ;
if ( dif > 0 ) r . top + = dif ;
dif = full . left - r . left ;
if ( dif > 0 ) r . left + = dif ;
if ( orig_r . left ! = r . left | | orig_r . top ! = r . top )
resize ( r . left , r . top , NOCHANGE , NOCHANGE ) ;
}
void Layout : : saveAllPositions ( )
{
// The positions are saved from the lastest to the first one
2024-09-29 02:04:03 +00:00
// The 'Player' arch and the 'Main' arch are using the same prefix
2024-09-24 12:54:57 +00:00
// In saving in decreasing order we are sure the lastest saved is the one for the Player
for ( int i = 0 ; i < SkinParser : : script_getNumContainers ( ) ; i + + )
{
Container * c = SkinParser : : script_enumContainer ( i ) ;
for ( int j = c - > getNumLayouts ( ) - 1 ; j > = 0 ; - - j )
{
Layout * l = c - > enumLayout ( j ) ;
l - > savePosition ( ) ;
}
}
}
int Layout : : forceTransparencyFlag ( )
{
return alphaMgr - > needForcedTransparencyFlag ( this ) ;
}
void Layout : : savePosition ( )
{
# ifdef WASABI_COMPILE_CONFIG
if ( ! getParentContainer ( ) | | getParentContainer ( ) - > isTranscient ( ) )
return ;
if ( ! Wasabi : : Std : : Wnd : : isValidWnd ( getOsWindowHandle ( ) ) )
return ;
StringW prefix = MakePrefix ( ) ;
StringPrintfW tmp ( L " %s/odim " , prefix . v ( ) ) ;
SkinBitmap * baseTexture = getBaseTexture ( ) ;
if ( baseTexture )
{
IntArray : : write ( tmp , baseTexture - > getWidth ( ) , baseTexture - > getHeight ( ) ) ;
}
else
{
IntArray : : write ( tmp , - 2 , - 2 ) ;
}
RECT r , rs ;
getClientRect ( & r ) ; // unscaled
//DebugStringW( L"\nLayout::savePosition() - x = %d, y = %d, w = %d, h = %d \n", r.left, r.top, r.right - r.left, r.bottom - r.top );
if ( r . left = = 0 & & r . top = = 0 & & r . right = = 0 & & r . bottom = = 0 )
return ;
getWindowRect ( & rs ) ; // screen scaled (for x/y)
tmp . printf ( L " %s/rect " , prefix . v ( ) ) ;
IntArray : : write ( tmp , rs . left , rs . top , r . right - r . left , r . bottom - r . top ) ;
//DebugStringW( L"Layout::savePosition() rect - x = %d, y = %d, w = %d, h = %d \n", rs.left, rs.top, r.right - r.left, r.bottom - r.top );
getRestoredRect ( & rs ) ;
tmp . printf ( L " %s/restoredrect " , prefix . v ( ) ) ;
IntArray : : write ( tmp , rs . left , rs . top , rs . right - rs . left , rs . bottom - rs . top ) ;
//DebugStringW( L"Layout::savePosition() restoredrect - x = %d, y = %d, w = %d, h = %d \n", rs.left, rs.top, rs.right - rs.left, rs.bottom - rs.top );
tmp . printf ( L " %s/maximized " , prefix . v ( ) ) ;
// DebugString("isMaximized = %d\n", isMaximized());
WASABI_API_CONFIG - > setIntPrivate ( tmp , isMaximized ( ) ) ;
tmp . printf ( L " %s/r " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > setStringPrivate ( tmp , StringPrintfW ( getRenderRatio ( ) ) ) ;
tmp . printf ( L " %s/sm " , prefix . v ( ) ) ;
TextInfoCanvas textInfoCanvas ( this ) ;
WASABI_API_CONFIG - > setStringPrivate ( tmp , StringPrintfW ( textInfoCanvas . getSystemFontScale ( ) ) ) ;
tmp . printf ( L " %s/sl " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > setStringPrivate ( tmp , StringPrintfW ( scalelocked ) ) ;
tmp . printf ( L " %s/autoopacify " , prefix . v ( ) ) ;
IntArray : : write ( tmp , autoopacify ) ;
# ifdef USEAPPBAR
saveAppBarPosition ( ) ;
# endif
# endif
}
# ifdef USEAPPBAR
void Layout : : saveAppBarPosition ( )
{
if ( m_allowsavedock )
{
StringW prefix = MakePrefix ( ) ;
StringW wtmp = StringPrintfW ( L " %s/appbar " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > setIntPrivate ( wtmp , appbar_getSide ( ) ) ;
wtmp . printf ( L " %s/appbarontop " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > setIntPrivate ( wtmp , appbar_wantAlwaysOnTop ( ) ) ;
wtmp . printf ( L " %s/appbarhidden " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > setIntPrivate ( wtmp , appbar_isHiding ( ) ) ;
wtmp . printf ( L " %s/appbarisautohide " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > setIntPrivate ( wtmp , appbar_isAutoHiding ( ) ) ;
wtmp . printf ( L " %s/appbarwantautohide " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > setIntPrivate ( wtmp , appbar_wantAutoHide ( ) ) ;
}
}
# endif
void Layout : : lockScale ( int locked )
{
scalelocked = locked ;
StringW tmp ;
StringW prefix = MakePrefix ( ) ;
tmp . printf ( L " %s/sl " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > setStringPrivate ( tmp , StringPrintfW ( scalelocked ) ) ;
}
void Layout : : resize ( int x , int y , int w , int h , int wantcb )
{
if ( inresize ) return ;
inresize = 1 ;
LAYOUT_PARENT : : resize ( x , y , w , h , wantcb ) ;
if ( ! lockedto )
getGuiObject ( ) - > guiobject_setGuiPosition ( & x , & y , & w , & h , NULL , NULL , NULL , NULL ) ;
inresize = 0 ;
}
void Layout : : move ( int x , int y )
{
//DebugStringW( L"Layout::move( x = %d, y = %d )\n", x, y );
LAYOUT_PARENT : : move ( x , y ) ;
getGuiObject ( ) - > guiobject_setGuiPosition ( & x , & y , NULL , NULL , NULL , NULL , NULL , NULL ) ;
}
# define DC_CHECKLASTRESIZE 0x109
# ifdef USEAPPBAR
# define DC_LOADSAVEDDOCK 0x10A
# endif
# define DC_INVALIDATE 0x10B
int Layout : : onResize ( )
{
LAYOUT_PARENT : : onResize ( ) ;
if ( ! abortSaving ( ) ) savePosition ( ) ;
RECT r ;
getClientRect ( & r ) ;
if ( ! linkedwidth . isempty ( ) )
{
if ( ! inlinkwidth )
{
inlinkwidth = 1 ;
RECT cr ;
Layout * l = getParentContainer ( ) ? getParentContainer ( ) - > getLayout ( linkedwidth ) : NULL ;
if ( l )
{
int _unlinked = l - > isUnlinked ( ) ;
_unlinked | = isUnlinked ( ) ;
if ( ! _unlinked )
{
l - > getClientRect ( & cr ) ;
POINT pt ;
l - > getPosition ( & pt ) ;
l - > resize ( pt . x , pt . y , r . right - r . left , cr . bottom - cr . top ) ;
}
}
inlinkwidth = 0 ;
}
}
if ( ! linkedheight . isempty ( ) )
{
if ( ! inlinkheight )
{
inlinkheight = 1 ;
RECT cr ;
Layout * l = getParentContainer ( ) ? getParentContainer ( ) - > getLayout ( linkedheight ) : NULL ;
if ( l )
{
int _unlinked = l - > isUnlinked ( ) ;
_unlinked | = isUnlinked ( ) ;
if ( ! _unlinked )
{
l - > getClientRect ( & cr ) ;
POINT pt ;
l - > getPosition ( & pt ) ;
l - > resize ( pt . x , pt . y , cr . right - cr . left , r . bottom - r . top ) ;
}
}
}
inlinkheight = 0 ;
}
updateLockedLayouts ( ) ;
postDeferredCallback ( DC_CHECKLASTRESIZE ) ;
return 1 ;
}
int Layout : : onDeferredCallback ( intptr_t p1 , intptr_t p2 )
{
/* if (p1 == DC_CHECKLASTRESIZE) {
RECT vr ;
RECT r ;
RECT wr ;
Std : : getViewport ( & vr , NULL , NULL , gethWnd ( ) , 1 ) ;
if ( renderRatioActive ( ) )
divRatio ( & vr ) ;
getClientRect ( & r ) ;
r . bottom - = snap_adjust_bottom ;
r . top + = snap_adjust_top ;
r . right - = snap_adjust_right ;
r . left + = snap_adjust_left ;
getWindowRect ( & wr ) ;
int n = 0 ;
if ( r . right - r . left > vr . right - vr . left ) { r . right = r . left + vr . right - vr . left ; n + + ; }
if ( r . bottom - r . top > vr . bottom - vr . top ) { r . bottom = r . top + vr . bottom - vr . top ; n + + ; }
if ( n ) resize ( wr . left , wr . top , r . right - r . left + snap_adjust_left + snap_adjust_right , r . bottom - r . top + snap_adjust_top + snap_adjust_bottom ) ;
} else */
# ifdef USEAPPBAR
if ( p1 = = DC_LOADSAVEDDOCK )
{ }
# endif
if ( p1 = = DC_INVALIDATE )
{
invalidate ( ) ;
}
return LAYOUT_PARENT : : onDeferredCallback ( p1 , p2 ) ;
// return 1;
}
void Layout : : updateLockedLayouts ( )
{
for ( int i = 0 ; i < getNumLockedLayouts ( ) ; i + + )
{
Layout * l = enumLockedLayout ( i ) ;
if ( l - > getRenderRatio ( ) ! = getRenderRatio ( ) )
l - > setRenderRatio ( getRenderRatio ( ) ) ;
int x , y , w , h ;
l - > getGuiObject ( ) - > guiobject_getGuiPosition ( & x , & y , & w , & h , NULL , NULL , NULL , NULL ) ;
RECT r ;
l - > getClientRect ( & r ) ;
if ( w = = AUTOWH ) w = r . right - r . left ;
if ( h = = AUTOWH ) h = r . bottom - r . top ;
POINT pt ;
l - > getPosition ( & pt ) ;
if ( x = = AUTOWH ) x = pt . x ; else clientToScreen ( & x , NULL ) ;
if ( y = = AUTOWH ) y = pt . y ; else clientToScreen ( NULL , & y ) ;
RECT cr ;
l - > getWindowRect ( & cr ) ;
if ( cr . left ! = x | | cr . top ! = y | | cr . right ! = cr . left + w | | cr . bottom ! = cr . top + h )
l - > Group : : resize ( x , y , w , h ) ;
}
}
int Layout : : isClickThrough ( )
{
return 0 ;
}
# ifdef _WIN32
LRESULT Layout : : wndProc ( HWND hWnd , UINT uMsg , WPARAM wParam , LPARAM lParam )
{
# ifdef ON_CUSTOM_ALTF4
if ( uMsg = = WM_KEYDOWN | | uMsg = = WM_SYSKEYDOWN )
if ( wParam = = VK_F4 )
if ( GetAsyncKeyState ( VK_MENU ) & 0x8000 ) ON_CUSTOM_ALTF4 ;
# endif
if ( uMsg = = WM_KILLFOCUS | | uMsg = = WM_SETFOCUS )
{
alphaMgr - > hoverCheck ( this ) ;
}
if ( forwardMsgWnd ! = INVALIDOSWINDOWHANDLE )
{
switch ( uMsg )
{
case WM_MOUSEWHEEL :
return ( SendMessageW ( forwardMsgWnd , uMsg , wParam , 0x31337 ) ) ; // 0x31337 avoid main window callback
//case WM_DESTROY: //FG> commented out, makes wa quit when layout is destroyed
case WM_CLOSE :
return ( SendMessageW ( forwardMsgWnd , uMsg , wParam , lParam ) ) ;
case WM_SETTINGCHANGE :
{
if ( ! indesktop ) break ;
setTimer ( TIMER_SETTINGCHANGED , 1000 ) ;
}
break ; //BU think this should be here eh
# ifdef WIN32
case 0x0319 :
{ // hehe --BU
if ( lParam & 0x20000 )
FireAction ( L " NEXT " , NULL , 0 , 0 , NULL , 0 , NULL , FALSE ) ;
else
FireAction ( L " PREV " , NULL , 0 , 0 , NULL , 0 , NULL , FALSE ) ;
}
break ;
# endif
/*
WIP : This won ' t work anymore . What should we do about it ? - - mig
childNotify ( NULL , CHILD_NOTIFY_LEFTPUSH , ACTION_NEXT ) ;
break ;
*/
}
}
return LAYOUT_PARENT : : wndProc ( hWnd , uMsg , wParam , lParam ) ;
}
# else
OSStatus Layout : : eventHandler ( EventHandlerCallRef inHandlerCallRef , EventRef inEvent , void * inUserData )
{
return LAYOUT_PARENT : : eventHandler ( inHandlerCallRef , inEvent , inUserData ) ;
}
# warning port me
# endif
/*int Layout::onRightButtonDown(int x, int y) {
LAYOUT_PARENT : : onRightButtonDown ( x , y ) ;
// Main::appContextMenu(this, TRUE, isTransparencySafe());
return 1 ;
} */
ifc_window * Layout : : getCustomOwner ( )
{
if ( noparent ) return NULL ;
if ( owner . isempty ( ) ) return NULL ;
return SkinParser : : getLayout ( owner ) ;
}
void Layout : : addLockedLayout ( Layout * l )
{
locked . addItem ( l ) ;
updateLockedLayouts ( ) ;
}
void Layout : : removeLockedLayout ( Layout * l )
{
locked . removeItem ( l ) ;
}
int Layout : : getNumLockedLayouts ( )
{
return locked . getNumItems ( ) ;
}
Layout * Layout : : enumLockedLayout ( int n )
{
return locked . enumItem ( n ) ;
}
int Layout : : isLocked ( )
{
return ( ! lockto . isempty ( )
# ifdef USEAPPBAR
| | cfg_options_appbarondrag = = 0 & & appbar_isDocked ( )
# endif
) ;
}
void Layout : : lockTo ( Layout * t )
{
if ( t = = NULL ) return ;
if ( lockedto ) lockedto - > removeLockedLayout ( this ) ;
lockedto = t ;
t - > addLockedLayout ( this ) ;
}
Layout * Layout : : getLockedTo ( )
{
return lockedto ;
}
int Layout : : reinit ( OSMODULEHANDLE inst , OSWINDOWHANDLE parent , int nochild )
{
StringW osname = getOSWndName ( ) ;
ASSERTPR ( ! indesktop , " in desktop reinit failed " ) ;
if ( noparent )
parent = NULL ;
int r = LAYOUT_PARENT : : reinit ( inst , parent , nochild ) ;
setOSWndName ( osname ) ;
return r ;
}
int Layout : : init ( OSMODULEHANDLE inst , OSWINDOWHANDLE parent , int nochild )
{
if ( noparent ) parent = NULL ;
if ( ! indesktop ) return LAYOUT_PARENT : : init ( inst , parent , nochild ) ;
# ifdef _WIN32
webserver = INVALIDOSWINDOWHANDLE ;
listview = INVALIDOSWINDOWHANDLE ;
getExplorerWindows ( & parent , & listview , & webserver ) ;
if ( ! parent )
{
indesktop = 0 ;
return LAYOUT_PARENT : : init ( inst , parent , nochild ) ;
}
# endif
nochild = 0 ;
# ifdef _WIN32
// if active desktop is off, that's all we can do, we'll be on top of the icons
// if active desktop is on, but listview is not, we'll be on top of active desktop
if ( ! webserver | | ! listview ) return LAYOUT_PARENT : : init ( inst , parent , nochild ) ;
# endif
# ifdef WIN32
// find who we're gonna sit on top of
HWND behind = listview ;
if ( GetWindow ( listview , GW_HWNDPREV ) )
behind = GetWindow ( listview , GW_HWNDPREV ) ;
# else
DebugString ( " portme -- Layout::init \n " ) ;
# endif
int r = LAYOUT_PARENT : : init ( inst , parent , nochild ) ;
# ifdef WIN32
SetWindowPos ( gethWnd ( ) , behind , 0 , 0 , 0 , 0 , SWP_NOMOVE | SWP_NOSIZE | SWP_DEFERERASE ) ;
# endif
return r ;
}
# ifdef WIN32
void Layout : : getExplorerWindows ( OSWINDOWHANDLE * parent , OSWINDOWHANDLE * listview , OSWINDOWHANDLE * webserver )
{
* parent = NULL ;
* listview = NULL ;
* webserver = NULL ;
char classname [ 256 ] = " " ;
HWND w ;
// find explorer window. todo: litestep support ?
* parent = FindWindowA ( NULL , " Program Manager " ) ;
if ( ! * parent ) return ;
// find its first child for parenting
* parent = GetWindow ( * parent , GW_CHILD ) ;
if ( ! * parent ) return ;
// find the children
w = GetWindow ( * parent , GW_CHILD ) ;
while ( w )
{
GetClassNameA ( w , classname , 255 ) ;
if ( ! * webserver & & STRCASEEQL ( " Internet Explorer_Server " , classname ) )
* webserver = w ;
if ( ! * listview & & STRCASEEQL ( " SysListView32 " , classname ) )
* listview = w ;
w = GetWindow ( w , GW_HWNDNEXT ) ;
}
}
# endif
int Layout : : onInit ( )
{
LAYOUT_PARENT : : onInit ( ) ;
Container * c = getParentContainer ( ) ;
if ( c ! = NULL )
{
const wchar_t * s = c - > getName ( ) ;
if ( s ! = NULL )
{
setOSWndName ( s ) ;
}
}
loadSavedState ( ) ;
# ifdef WA3COMPATIBILITY
setIcon ( WASABI_API_APP - > main_getIcon ( TRUE ) , TRUE ) ;
setIcon ( WASABI_API_APP - > main_getIcon ( FALSE ) , FALSE ) ;
# endif
WASABI_API_WNDMGR - > wndTrackAdd ( this ) ;
if ( wantDesktopAlpha ( ) & & isDesktopAlphaSafe ( ) )
desktopAlpha_autoTurnOn ( ) ;
if ( getBaseTexture ( ) )
{
//RECT r = {0, 0, getBaseTexture()->getWidth(), getBaseTexture()->getHeight()};
delete reg ;
# ifdef _WIN32
reg = new RegionI ( getBaseTexture ( ) , NULL , 0 , 0 , 0 , 0 , 0 , 0 , getDesktopAlpha ( ) ? 1 : 255 ) ;
setRegion ( reg ) ;
# else
# warning port me
# endif
}
SystemObject : : onCreateLayout ( this ) ;
if ( ! lockto . isempty ( ) ) lockTo ( SkinParser : : getLayout ( lockto ) ) ;
updateOnTop ( ) ;
setNoOffscreenCheck ( - 1 ) ;
return 1 ;
}
void Layout : : updateOnTop ( )
{
# ifdef USEAPPBAR
if ( ! appbar_isDocked ( ) )
# endif
{
# ifdef EXPERIMENTAL_INDEPENDENT_AOT
setAlwaysOnTop ( initontop ) ;
# else
if ( noparent )
{
int disable = 0 ;
# ifdef WASABI_GET_TEMPDISABLE_AOT
WASABI_GET_TEMPDISABLE_AOT ( disable ) ;
# endif
# ifdef _WIN32
if ( initontop & & ! disable ) SetWindowPos ( getOsWindowHandle ( ) , HWND_TOPMOST , 0 , 0 , 0 , 0 , SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOACTIVATE ) ;
else SetWindowPos ( getOsWindowHandle ( ) , HWND_NOTOPMOST , 0 , 0 , 0 , 0 , SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER | SWP_NOACTIVATE ) ;
# else
# warning port me
# endif
}
# endif
}
}
void Layout : : loadSavedState ( )
{
# ifdef WASABI_COMPILE_CONFIG
StringW tmp ;
# endif
wchar_t t [ 64 ] = L " " ;
int ow = - 1 ;
int oh = - 1 ;
int ra = - 1 ;
# ifdef WASABI_COMPILE_CONFIG
if ( getParentContainer ( ) & & ! getParentContainer ( ) - > isTranscient ( ) )
{
StringW prefix = MakePrefix ( ) ;
tmp . printf ( L " %s/odim " , prefix . v ( ) ) ;
IntArray : : read ( tmp , & ow , & oh ) ;
tmp . printf ( L " %s/alpha " , prefix . v ( ) ) ;
IntArray : : read ( tmp , & ra ) ;
tmp . printf ( L " %s/autoopacify " , prefix . v ( ) ) ;
IntArray : : read ( tmp , & autoopacify ) ;
}
# endif
int from_scratch = 0 ;
if ( Std : : keyModifier ( STDKEY_SHIFT ) & & Std : : keyModifier ( STDKEY_ALT ) & & Std : : keyModifier ( STDKEY_CONTROL ) ) from_scratch = 1 ;
# ifdef WASABI_COMPILE_CONFIG
if ( getParentContainer ( ) & & ! getParentContainer ( ) - > isTranscient ( ) )
{
StringW prefix = MakePrefix ( ) ;
tmp . printf ( L " %s/sl " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > getStringPrivate ( tmp , t , 63 , L " 0 " ) ;
lockScale ( WTOI ( t ) ) ;
}
# endif
* t = 0 ;
# ifdef WASABI_COMPILE_CONFIG
if ( getParentContainer ( ) & & ! getParentContainer ( ) - > isTranscient ( ) )
{
StringW prefix = MakePrefix ( ) ;
tmp . printf ( L " %s/sm " , prefix . v ( ) ) ;
}
WASABI_API_CONFIG - > getStringPrivate ( tmp , t , 63 , L " 1. " ) ;
//double sm = (float)WTOF(t);
# else
//double sm = 1.0;
# endif
/*if (ABS(sm - Canvas::getSystemFontScale()) > 0.001)
from_scratch = 1 ; */
if ( Group : : getBaseTexture ( ) & & alphabackground . getBitmap ( ) ! = NULL )
{
if ( Group : : getBaseTexture ( ) - > getWidth ( ) ! = alphabackground . getWidth ( ) | | Group : : getBaseTexture ( ) - > getHeight ( ) ! = alphabackground . getHeight ( ) )
{
ASSERTPR ( 0 , StringPrintf ( " layout %S should have same size for background and alphabackground " , getGuiObject ( ) - > guiobject_getParentLayout ( ) - > getGuiObject ( ) - > guiobject_getId ( ) ) ) ;
}
}
if ( ( ow ! = - 2 & & oh ! = - 2 ) & & ( ow = = - 1 | | oh = = - 1 | | ( getBaseTexture ( ) & & ( ow ! = getBaseTexture ( ) - > getWidth ( ) | | oh ! = getBaseTexture ( ) - > getHeight ( ) ) ) ) )
from_scratch = 1 ;
int w = 0 , h = 0 ;
int findrect = 0 ;
if ( from_scratch | | ( getParentContainer ( ) & & getParentContainer ( ) - > isTranscient ( ) ) )
{
if ( getParentContainer ( ) )
{
int _x = getParentContainer ( ) - > getDefaultPositionX ( ) ;
int _y = getParentContainer ( ) - > getDefaultPositionY ( ) ;
x = _x = = - 1 ? x : _x ;
y = _y = = - 1 ? y : _y ;
if ( x = = - 1 & & y = = - 1 ) findrect = 1 ;
}
else
{
int _x , _y ;
getGuiObject ( ) - > guiobject_getGuiPosition ( & _x , & _y , NULL , NULL , NULL , NULL , NULL , NULL ) ;
if ( _x ! = AUTOWH & & _x ! = NOCHANGE ) x = _x ;
if ( _y ! = AUTOWH & & _y ! = NOCHANGE ) y = _y ;
}
getGuiObject ( ) - > guiobject_getGuiPosition ( NULL , NULL , & w , & h , NULL , NULL , NULL , NULL ) ;
if ( w = = AUTOWH | | h = = AUTOWH )
{
w = getPreferences ( SUGGESTED_W ) ;
h = getPreferences ( SUGGESTED_H ) ;
int _minx = getPreferences ( MINIMUM_W ) ;
int _maxx = getPreferences ( MAXIMUM_W ) ;
int _miny = getPreferences ( MINIMUM_H ) ;
int _maxy = getPreferences ( MAXIMUM_H ) ;
if ( _minx ! = AUTOWH & & _maxx ! = AUTOWH & & _minx > _maxx ) _minx = _maxx ;
if ( _miny ! = AUTOWH & & _maxy ! = AUTOWH & & _miny > _maxy ) _miny = _maxy ;
if ( w = = AUTOWH & & _minx ! = AUTOWH ) w = _minx ;
if ( h = = AUTOWH & & _miny ! = AUTOWH ) h = _miny ;
TextInfoCanvas textInfoCanvas ( this ) ;
double fontScale = textInfoCanvas . getSystemFontScale ( ) ;
if ( w ! = AUTOWH & & getGuiObject ( ) - > guiobject_getAutoSysMetricsW ( ) )
w = ( int ) ( ( float ) w * fontScale ) ;
if ( h ! = AUTOWH & & getGuiObject ( ) - > guiobject_getAutoSysMetricsH ( ) )
h = ( int ) ( ( float ) h * fontScale ) ;
}
}
else
{
if ( getParentContainer ( ) )
{
if ( getParentContainer ( ) - > isMainContainer ( ) ) //FG> could be a new component installed
SkinParser : : noCenterSkin ( ) ;
# ifdef WASABI_COMPILE_CONFIG
StringW prefix = MakePrefix ( ) ;
tmp . printf ( L " %s/rect " , prefix . v ( ) ) ;
IntArray : : read ( tmp , & x , & y , & w , & h ) ;
RECT rr ;
tmp . printf ( L " %s/restoredrect " , prefix . v ( ) ) ;
IntArray : : read ( tmp , ( int * ) & rr . left , ( int * ) & rr . top , ( int * ) & rr . right , ( int * ) & rr . bottom ) ;
rr . right + = rr . left ;
rr . bottom + = rr . top ;
tmp . printf ( L " %s/maximized " , prefix . v ( ) ) ;
if ( WASABI_API_CONFIG - > getIntPrivate ( tmp , 0 ) ) setRestoredRect ( & rr ) ;
# endif
}
}
* t = 0 ;
double ratio = 1.0 ;
if ( ! from_scratch )
{
if ( getParentContainer ( ) )
{
# ifdef WASABI_COMPILE_CONFIG
StringW prefix = MakePrefix ( ) ;
tmp . printf ( L " %s/r " , prefix . v ( ) ) ;
WASABI_API_CONFIG - > getStringPrivate ( tmp , t , 63 , L " 1. " ) ;
ratio = WTOF ( t ) ;
# else
ratio = 1.0f ;
# endif
}
}
# ifdef ON_TWEAK_RENDER_RATIO
if ( ! scalelocked ) ON_TWEAK_RENDER_RATIO ( ratio ) ;
# endif
if ( w = = 0 | | h = = 0 | | from_scratch )
{
int _w = getPreferences ( SUGGESTED_W ) ;
w = _w = = AUTOWH ? w : _w ;
int _h = getPreferences ( SUGGESTED_H ) ;
h = _h = = AUTOWH ? h : _h ;
TextInfoCanvas textInfoCanvas ( this ) ;
double fontScale = textInfoCanvas . getSystemFontScale ( ) ;
if ( getGuiObject ( ) - > guiobject_getAutoSysMetricsW ( ) )
w = ( int ) ( ( float ) w * fontScale ) ;
if ( getGuiObject ( ) - > guiobject_getAutoSysMetricsH ( ) )
h = ( int ) ( ( float ) h * fontScale ) ;
if ( w = = 0 | | h = = 0 )
{
w = getBaseTexture ( ) - > getWidth ( ) ;
h = getBaseTexture ( ) - > getHeight ( ) ;
}
RECT sr = { x , y , x + w , y + h } ;
if ( findrect )
sr = windowTracker - > findOpenRect ( Wasabi : : Std : : makeRect ( 0 , 0 , ( int ) ( ( float ) w * getRenderRatio ( ) ) , ( int ) ( ( float ) h * getRenderRatio ( ) ) ) , this ) ;
sr . right = sr . left + w ;
sr . bottom = sr . top + h ;
BaseWnd : : resize ( & sr ) ;
}
else
{
RECT cr ;
getClientRect ( & cr ) ;
RECT r = { x , y , x + w , y + h } ;
BaseWnd : : resize ( & r ) ;
}
setAlpha ( from_scratch | | ra = = - 1 ? alpha : ( ( ra < 254 ) ? ra : 255 ) ) ;
Layout * main = SkinParser : : getMainLayout ( ) ;
if ( main ! = this & & main
# ifdef WASABI_COMPILE_CONFIG
& & cfg_uioptions_linkallratio . getValueAsInt ( )
# endif
& & ! noparent )
{
setRenderRatio ( main - > getRenderRatio ( ) ) ;
}
else setRenderRatio ( ratio ) ;
setAutoOpacify ( autoopacify ) ;
# ifdef USEAPPBAR
postDeferredCallback ( DC_LOADSAVEDDOCK ) ;
if ( getParentContainer ( ) & & ! getParentContainer ( ) - > isTranscient ( ) )
{
StringW prefix = MakePrefix ( ) ;
StringW tmp = StringPrintfW ( L " %s/appbar " , prefix . v ( ) ) ;
int side = WASABI_API_CONFIG - > getIntPrivate ( tmp , APPBAR_NOTDOCKED ) ;
tmp . printf ( L " %s/appbarisautohide " , prefix . v ( ) ) ;
int is_autohide = WASABI_API_CONFIG - > getIntPrivate ( tmp , 0 ) ;
tmp . printf ( L " %s/appbarwantautohide " , prefix . v ( ) ) ;
appbar_want_autohide = is_autohide | | WASABI_API_CONFIG - > getIntPrivate ( tmp , 1 ) ;
tmp . printf ( L " %s/appbarontop " , prefix . v ( ) ) ;
appbar_want_alwaysontop = WASABI_API_CONFIG - > getIntPrivate ( tmp , 1 ) ;
tmp . printf ( L " %s/appbarhidden " , prefix . v ( ) ) ;
int curside = appbar_getSide ( ) ;
if ( side ! = curside )
{
if ( side = = APPBAR_NOTDOCKED )
// starting up docked ??
appbar_dock ( side ) ;
else
{
setNoParent ( 2 ) ;
BaseWnd : : reinit ( ) ;
appbar_dock ( side ) ;
}
}
}
m_allowsavedock = 1 ;
# endif
}
void Layout : : setBaseTexture ( const wchar_t * b , int regis )
{
LAYOUT_PARENT : : setBaseTexture ( b , 0 ) ; // 0, not regis!
if ( ! getDesktopAlpha ( ) | | ( ( wantDesktopAlpha ( ) ) & & alphabackground . getBitmap ( ) = = NULL ) )
{
if ( regis ) WASABI_API_WND - > skin_unregisterBaseTextureWindow ( this ) ;
if ( getBaseTexture ( ) )
{
//RECT r = {0, 0, getBaseTexture()->getWidth(), getBaseTexture()->getHeight()};
delete reg ;
# ifdef _WIN32
reg = new RegionI ( getBaseTexture ( ) , NULL , 0 , 0 , 0 , 0 , 0 , 0 , getDesktopAlpha ( ) ? 1 : 255 ) ;
setRegion ( reg ) ;
# else
# warning port me
# endif
}
if ( regis )
WASABI_API_WND - > skin_registerBaseTextureWindow ( this , getBackgroundStr ( ) ) ;
}
}
void Layout : : setWantDesktopAlpha ( int want )
{
if ( want & & ! Wasabi : : Std : : Wnd : : isDesktopAlphaAvailable ( ) )
{
// WASABI_API_WNDMGR->messageBox("Desktop Alpha Blending is only available for Win2000/WinXP and above", "Sorry", MSGBOX_OK, NULL, NULL);
return ;
}
wantdesktopalpha = want ;
if ( wantdesktopalpha & & isInited ( ) & & isDesktopAlphaSafe ( ) )
desktopAlpha_autoTurnOn ( ) ;
else if ( ! wantdesktopalpha & & getDesktopAlpha ( ) )
desktopAlpha_autoTurnOff ( ) ;
}
int Layout : : wantDesktopAlpha ( )
{
return wantdesktopalpha ;
}
int Layout : : handleDesktopAlpha ( )
{
return 1 ;
}
void Layout : : onGuiObjectSetVisible ( GuiObject * o , int visible )
{
if ( disable_auto_alpha ) return ;
if ( ! o | | ! o - > guiobject_getRootWnd ( ) ) return ;
if ( visible )
{
if ( getDesktopAlpha ( ) )
{
if ( ! o - > guiobject_getRootWnd ( ) - > handleDesktopAlpha ( ) )
{
desktopAlpha_autoTurnOff ( ) ;
}
}
if ( ! transparency_autooff )
{
if ( ! o - > guiobject_getRootWnd ( ) - > handleTransparency ( ) )
{
transparency_autoTurnOff ( ) ;
}
}
}
else
{ // !visible
if ( ! getDesktopAlpha ( ) & & wantDesktopAlpha ( ) )
{
if ( isDesktopAlphaSafe ( ) )
desktopAlpha_autoTurnOn ( ) ;
}
if ( transparency_autooff )
{
if ( isTransparencySafe ( 1 ) )
transparency_autoTurnOn ( ) ;
}
}
}
void Layout : : desktopAlpha_autoTurnOn ( )
{
setDesktopAlpha ( 1 ) ;
WASABI_API_WND - > skin_unregisterBaseTextureWindow ( this ) ;
if ( getBaseTexture ( ) )
{
//RECT r = {0, 0, getBaseTexture()->getWidth(), getBaseTexture()->getHeight()};
delete reg ;
# ifdef _WIN32
reg = new RegionI ( getBaseTexture ( ) , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) ;
setRegion ( reg ) ;
# else
# warning port me
# endif
}
WASABI_API_WND - > skin_registerBaseTextureWindow ( this , alphabackground . getBitmap ( ) ? alphabackgroundstr . getValue ( ) : getBackgroundStr ( ) ) ;
invalidate ( ) ;
}
void Layout : : desktopAlpha_autoTurnOff ( )
{
# ifdef WIN32
SetWindowRedraw ( gethWnd ( ) , FALSE ) ; //LockWindowUpdate(gethWnd());
setDesktopAlpha ( 0 ) ;
WASABI_API_WND - > skin_unregisterBaseTextureWindow ( this ) ;
if ( getBaseTexture ( ) )
{
//RECT r = {0, 0, getBaseTexture()->getWidth(), getBaseTexture()->getHeight()};
delete reg ;
reg = new RegionI ( getBaseTexture ( ) , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 255 ) ;
setRegion ( reg ) ;
}
WASABI_API_WND - > skin_registerBaseTextureWindow ( this , getBackgroundStr ( ) ) ;
SetWindowRedraw ( gethWnd ( ) , TRUE ) ; //LockWindowUpdate(NULL);
invalidate ( ) ;
# else
DebugString ( " portme -- Layout::init \n " ) ;
# endif
}
void Layout : : transparency_autoTurnOn ( )
{
transparency_reenabled_at = Wasabi : : Std : : getTickCount ( ) ;
setTimer ( TIMER_TRANSPARENCY_AUTOON , 500 ) ;
}
void Layout : : transparency_autoTurnOff ( )
{
transparency_autooff = 1 ;
killTimer ( TIMER_TRANSPARENCY_AUTOON ) ;
updateTransparency ( ) ;
}
void Layout : : onGlobalEnableDesktopAlpha ( int enabled )
{
foreach ( alllayouts )
alllayouts . getfor ( ) - > globalEnableDesktopAlpha ( enabled ) ;
endfor
# ifdef ON_TOGGLE_DESKTOPALPHA
ON_TOGGLE_DESKTOPALPHA ( enabled ) ;
# endif
}
void Layout : : globalEnableDesktopAlpha ( int enabled )
{
if ( enabled )
{
galphadisabled = 0 ;
setWantDesktopAlpha ( wantdesktopalpha ) ;
}
else
{
galphadisabled = 1 ;
if ( getDesktopAlpha ( ) )
desktopAlpha_autoTurnOff ( ) ;
}
}
void Layout : : setWantRedrawOnResize ( int v )
{
if ( wantredrawonresize = = v ) return ;
wantredrawonresize = v ;
}
PtrList < Layout > Layout : : alllayouts ;
int Layout : : onPaint ( Canvas * canvas )
{
PaintCanvas paintcanvas ;
if ( canvas = = NULL )
{
if ( ! paintcanvas . beginPaint ( this ) ) return 0 ;
canvas = & paintcanvas ;
}
RECT r ;
if ( ! canvas - > getClipBox ( & r ) )
getClientRect ( & r ) ;
canvas - > fillRect ( & r , 0 ) ;
LAYOUT_PARENT : : onPaint ( canvas ) ;
return 1 ;
}
/*WndHolder *Layout::getHolder() {
return this ;
} */
SkinBitmap * Layout : : getBaseTexture ( )
{
# ifdef WASABI_COMPILE_CONFIG
// {9149C445-3C30-4e04-8433-5A518ED0FDDE}
const GUID uioptions_guid =
{ 0x9149c445 , 0x3c30 , 0x4e04 , { 0x84 , 0x33 , 0x5a , 0x51 , 0x8e , 0xd0 , 0xfd , 0xde } } ;
int alphaenabled = _intVal ( WASABI_API_CONFIG - > config_getCfgItemByGuid ( uioptions_guid ) , L " Enable desktop alpha " ) ;
# else
int alphaenabled = WASABI_WNDMGR_DESKTOPALPHA ;
# endif
if ( ! alphabackground . getBitmap ( ) | | ! getDesktopAlpha ( ) | | ! alphaenabled ) return LAYOUT_PARENT : : getBaseTexture ( ) ;
return alphabackground . getBitmap ( ) ;
}
int Layout : : runAction ( int actionid , const wchar_t * param )
{
switch ( actionid )
{
case ACTION_SWITCH :
if ( getParentContainer ( ) )
{
getParentContainer ( ) - > switchToLayout ( param ) ;
}
break ;
case ACTION_TOGGLE :
SkinParser : : toggleContainer ( param ) ;
break ;
# ifdef WA3COMPATIBILITY
case ACTION_MENU :
Main : : doMenu ( param ) ;
break ;
# endif
case ACTION_ENDMODAL :
endModal ( WTOI ( param ) ) ;
break ;
case ACTION_CLOSE :
onActionNotify ( ACTION_CLOSE ) ;
break ;
# ifdef WA3COMPATIBILITY
default :
if ( actionid ! = 0 )
Main : : doAction ( actionid ) ;
break ;
# else
case ACTION_MINIMIZE :
# ifdef _WIN32
ShowWindow ( WASABI_API_WND - > main_getRootWnd ( ) - > gethWnd ( ) , SW_MINIMIZE ) ;
# endif
break ;
# endif
}
return 0 ;
}
int Layout : : childNotify ( ifc_window * child , int msg , intptr_t param1 , intptr_t param2 )
{
if ( msg = = ACTION_ENFORCEMINMAX )
{
loadSavedState ( ) ;
return 0 ;
}
if ( child ! = NULL )
{
int objId = child - > getNotifyId ( ) ;
if ( msg = = ChildNotify : : BUTTON_LEFTPUSH )
{
switch ( objId )
{
case ACTION_SWITCH :
case ACTION_TOGGLE :
case ACTION_MENU :
runAction ( objId , ( ( Wasabi : : Button * ) child ) - > getParam ( ) ) ;
break ;
case ACTION_ENDMODAL :
{
StringPrintfW s ( L " %d " , ( static_cast < ButtonWnd * > ( child ) ) - > getModalRetCode ( ) ) ;
runAction ( ACTION_ENDMODAL , s ) ;
}
break ;
case ACTION_CLOSE :
runAction ( ACTION_CLOSE ) ;
break ;
/*
# ifdef WA3COMPATIBILITY
case ACTION_EJECT :
runAction ( ACTION_EJECT , " 0 " ) ;
break ;
# endif
*/
default :
runAction ( objId ) ;
break ;
}
return 0 ;
}
if ( msg = = ChildNotify : : BUTTON_RIGHTPUSH )
{
//FUCKO child->abortTip();
// POINT pt;
// Std::getMousePos(&pt);
// screenToClient(&pt);
// onRightButtonDown(pt.x, pt.y);
# pragma warning (disable: 4060)
switch ( objId )
{
/*
# ifdef WA3COMPATIBILITY
case ACTION_EJECT : {
runAction ( ACTION_EJECT , " 1 " ) ;
}
break ;
# endif
*/
}
# pragma warning (default: 4060)
return 0 ;
}
}
return LAYOUT_PARENT : : childNotify ( child , msg , param1 , param2 ) ;
}
int Layout : : onActionNotify ( int action , intptr_t param )
{
switch ( action )
{
# ifdef WA3COMPATIBILITY
case ACTION_SYSMENU :
Main : : appContextMenu ( this , TRUE , isDesktopAlphaSafe ( ) ) ;
break ;
case ACTION_CONTROLMENU :
controlMenu ( ) ;
break ;
case ACTION_WINDOWMENU :
Main : : thingerContextMenu ( this ) ;
break ;
# elif defined(WASABI_CUSTOM_CONTEXTMENUS)
case ACTION_SYSMENU :
extern void appContextMenu ( ifc_window * w ) ;
appContextMenu ( this ) ;
break ;
case ACTION_CONTROLMENU :
extern void appControlMenu ( ifc_window * w ) ;
appControlMenu ( this ) ;
break ;
# endif
case ACTION_SCALE_50 : scaleTo ( 50 ) ; break ;
case ACTION_SCALE_75 : scaleTo ( 75 ) ; break ;
case ACTION_SCALE_100 : scaleTo ( 100 ) ; break ;
case ACTION_SCALE_125 : scaleTo ( 125 ) ; break ;
case ACTION_SCALE_150 : scaleTo ( 150 ) ; break ;
case ACTION_SCALE_200 : scaleTo ( 200 ) ; break ;
case ACTION_SCALE_400 : scaleTo ( 400 ) ; break ;
case ACTION_ALPHA_10 : setAlpha ( 25 ) ; break ;
case ACTION_ALPHA_20 : setAlpha ( 51 ) ; break ;
case ACTION_ALPHA_30 : setAlpha ( 76 ) ; break ;
case ACTION_ALPHA_40 : setAlpha ( 102 ) ; break ;
case ACTION_ALPHA_50 : setAlpha ( 127 ) ; break ;
case ACTION_ALPHA_60 : setAlpha ( 153 ) ; break ;
case ACTION_ALPHA_70 : setAlpha ( 178 ) ; break ;
case ACTION_ALPHA_80 : setAlpha ( 204 ) ; break ;
case ACTION_ALPHA_90 : setAlpha ( 229 ) ; break ;
case ACTION_ALPHA_100 : setAlpha ( 255 ) ; break ;
case ACTION_AUTOOPACIFY : setAutoOpacify ( ! getAutoOpacify ( ) ) ; break ;
# ifdef EXPERIMENTAL_INDEPENDENT_AOT
case ACTION_AOT : setAlwaysOnTop ( ! getAlwaysOnTop ( ) ) ; break ;
# endif
case ACTION_CLOSE_WINDOW :
case ACTION_CLOSE :
if ( getParentContainer ( ) & & getParentContainer ( ) - > isMainContainer ( ) )
{
int x = 1 ;
# ifdef WASABI_CHECK_CAN_EXIT
WASABI_CHECK_CAN_EXIT ( x )
# endif
if ( x )
{
WASABI_API_APP - > main_shutdown ( ) ;
}
}
else if ( WASABI_API_WNDMGR - > getModalWnd ( ) ! = this )
{
if ( ! getParentContainer ( ) | | ! getParentContainer ( ) - > isDynamic ( ) | | ! getParentContainer ( ) - > canClose ( ) )
if ( getParentContainer ( ) ) getParentContainer ( ) - > setVisible ( FALSE ) ; else setVisible ( FALSE ) ;
else
skinEmbedder - > destroyContainer ( getParentContainer ( ) ) ;
}
else
{
endModal ( MSGBOX_ABORTED ) ;
}
break ;
default : return 0 ;
}
return 1 ;
}
void Layout : : containerToggled ( const wchar_t * id , int visible )
{
# ifdef _WIN32
sendNotifyToAllChildren ( WM_WA_CONTAINER_TOGGLED , ( intptr_t ) id , visible ) ;
# else
# warning port me
# endif
}
void Layout : : componentToggled ( GUID * guid , int visible )
{
# ifdef _WIN32
sendNotifyToAllChildren ( WM_WA_COMPONENT_TOGGLED , ( intptr_t ) guid , visible ) ;
# else
# warning port me
# endif
}
void Layout : : setAlphaBackground ( const wchar_t * b )
{
alphabackgroundstr = b ;
alphabackground . setBitmap ( b ) ;
# ifdef _WIN32
RegionI r ( alphabackground . getBitmap ( ) ) ;
setRegion ( & r ) ;
# else
# warning port me
# endif
}
/*void Layout::setWindowRegion(api_region *reg) {
LAYOUT_PARENT : : setWindowRegion ( reg ) ;
if ( getDesktopAlpha ( ) ) {
SetWindowRgn ( gethWnd ( ) , NULL , FALSE ) ;
return ;
}
if ( ! isInited ( ) ) return ;
api_region * _r = getRegion ( ) ;
if ( getRenderRatio ( ) ! = 1.0 & & reg ) {
api_region * clone = _r - > clone ( ) ;
clone - > scale ( getRenderRatio ( ) ) ;
SetWindowRgn ( gethWnd ( ) , clone - > makeWindowRegion ( ) , TRUE ) ;
_r - > disposeClone ( clone ) ;
} else {
SetWindowRgn ( gethWnd ( ) , _r ? _r - > makeWindowRegion ( ) : NULL , TRUE ) ;
}
} */
void Layout : : onSetDesktopAlpha ( int a )
{
invalidateWindowRegion ( ) ;
}
void Layout : : onShow ( void )
{
savePosition ( ) ;
if ( ! WASABI_API_MAKI - > vcpu_getComplete ( ) ) SystemObject : : onShowLayout ( this ) ;
}
void Layout : : onHide ( void )
{
savePosition ( ) ;
if ( ! WASABI_API_MAKI - > vcpu_getComplete ( ) ) SystemObject : : onHideLayout ( this ) ;
# ifndef WASABINOMAINAPI
api - > hintGarbageCollect ( ) ;
# else
WASABI_API_SYSCB - > syscb_issueCallback ( SysCallback : : GC , GarbageCollectCallback : : GARBAGECOLLECT ) ;
# endif
if ( getParentContainer ( ) & & getParentContainer ( ) - > wantRefocusApp ( ) ) SkinParser : : focusFirst ( ) ;
}
# ifdef _WIN32
LPARAM Layout : : wndHolder_getParentParam ( int i )
{
switch ( i )
{
case 0 : return ( LPARAM ) gethWnd ( ) ;
case 1 : return ( LPARAM ) static_cast < BaseWnd * > ( this ) ;
}
return 0 ;
}
# endif
void Layout : : onSetVisible ( int show )
{
disable_auto_alpha = 1 ;
LAYOUT_PARENT : : onSetVisible ( show ) ;
if ( show )
onShow ( ) ;
else
onHide ( ) ;
Container * p = getParentContainer ( ) ;
if ( p )
p - > onChildSetLayoutVisible ( this , show ) ;
disable_auto_alpha = 0 ;
if ( wantDesktopAlpha ( ) & & isDesktopAlphaSafe ( ) )
desktopAlpha_autoTurnOn ( ) ;
}
void Layout : : scaleTo ( int s )
{
beginScale ( ) ;
setRenderRatio ( ( double ) s / 100.0 ) ;
endScale ( ) ;
}
void Layout : : setRenderRatio ( double s )
{
if ( isPostOnInit ( )
# ifdef WASABI_COMPILE_CONFIG
& & cfg_uioptions_linkallratio . getValueAsInt ( ) = = 1
# endif
& & ! broadcasting )
{
broadcasting = 1 ;
SkinParser : : setAllLayoutsRatio ( s ) ;
broadcasting = 0 ;
return ;
}
if ( getRenderRatio ( ) = = s ) return ;
LAYOUT_PARENT : : setRenderRatio ( s ) ;
if ( reg ) invalidateWindowRegion ( ) ;
invalidate ( ) ;
foreach ( locked )
locked . getfor ( ) - > setRenderRatio ( s ) ;
endfor ;
if ( lockedto & & lockedto - > getRenderRatio ( ) ! = getRenderRatio ( ) )
lockedto - > setRenderRatio ( getRenderRatio ( ) ) ;
script_vcpu_onScale ( SCRIPT_CALL , getScriptObject ( ) , MAKE_SCRIPT_DOUBLE ( s ) ) ;
if ( ! abortSaving ( ) ) savePosition ( ) ;
}
void Layout : : setAlpha ( int a )
{
int old = alpha ;
alpha = a ;
updateTransparency ( ) ;
# ifdef WASABI_COMPILE_CONFIG
if ( old ! = alpha & & getParentContainer ( ) )
{
StringPrintfW tmp ( L " Skin:%s/Container:%s/Layout:%s/alpha " , WASABI_API_SKIN - > getSkinName ( ) , getParentContainer ( ) - > getDescriptor ( ) , getGuiObject ( ) - > guiobject_getId ( ) ) ;
IntArray : : write ( tmp , alpha ) ;
}
# endif
}
int Layout : : getAlpha ( )
{
return alpha ;
}
void Layout : : setPaintingAlpha ( int activealpha , int inactivealpha )
{ // from basewnd, called by gui object
LAYOUT_PARENT : : setAlpha ( activealpha , inactivealpha ) ;
updateTransparency ( ) ;
}
int Layout : : getPaintingAlpha ( )
{ // from basewnd, called by gui object
return getAlpha ( ) ;
}
int Layout : : onActivate ( )
{
LAYOUT_PARENT : : onActivate ( ) ;
// activateChildren(1);
updateTransparency ( ) ;
return 1 ;
}
int Layout : : onKillFocus ( )
{
alphaMgr - > hoverCheck ( this ) ;
int r = LAYOUT_PARENT : : onKillFocus ( ) ;
return r ;
}
int Layout : : onGetFocus ( )
{
alphaMgr - > hoverCheck ( this ) ;
int r = LAYOUT_PARENT : : onGetFocus ( ) ;
return r ;
}
int Layout : : onDeactivate ( )
{
LAYOUT_PARENT : : onDeactivate ( ) ;
// activateChildren(0);
updateTransparency ( ) ;
return 1 ;
}
void Layout : : updateTransparency ( )
{
alphaMgr - > updateTransparency ( this ) ;
}
/*
void Layout : : activateChildren ( int act ) {
for ( int i = 0 ; i < gui_objects . getNumItems ( ) ; i + + ) {
GuiObject * o = gui_objects . enumItem ( i ) ;
BaseWnd * b = NULL ;
if ( o )
b = o - > getBaseWnd ( ) ;
else
ASSERT ( 0 ) ;
if ( b ) {
if ( act )
b - > onActivate ( ) ;
else
b - > onDeactivate ( ) ;
}
}
} */
void Layout : : center ( )
{
RECT r ;
getNonClientRect ( & r ) ;
RECT vw ;
Wasabi : : Std : : getViewport ( & vw , NULL , NULL , gethWnd ( ) ) ;
int x = ( ( vw . right - vw . left ) - ( r . right - r . left ) ) / 2 ;
int y = ( ( vw . bottom - vw . top ) - ( r . bottom - r . top ) ) / 2 ;
move ( x , y ) ;
}
void Layout : : setParentContainer ( Container * c )
{
p_container = c ;
}
Container * Layout : : getParentContainer ( )
{
return p_container ;
}
int Layout : : isLayout ( )
{
return 1 ;
}
void Layout : : setInDesktop ( int a )
{
ASSERTPR ( ! isInited ( ) , " cannot change indesktop after init " ) ;
indesktop = a ;
}
int Layout : : getInDesktop ( )
{
return indesktop ;
}
int Layout : : isDesktopAlphaSafe ( )
{
# ifdef WASABI_COMPILE_CONFIG
if ( galphadisabled ) return 0 ;
// {9149C445-3C30-4e04-8433-5A518ED0FDDE}
const GUID uioptions_guid =
{ 0x9149c445 , 0x3c30 , 0x4e04 , { 0x84 , 0x33 , 0x5a , 0x51 , 0x8e , 0xd0 , 0xfd , 0xde } } ;
if ( ! _intVal ( WASABI_API_CONFIG - > config_getCfgItemByGuid ( uioptions_guid ) , L " Enable desktop alpha " ) ) return 0 ;
# else
if ( ! WASABI_WNDMGR_DESKTOPALPHA ) return 0 ;
# endif
return LAYOUT_PARENT : : isDesktopAlphaSafe ( ) ;
}
void Layout : : setStatusText ( const wchar_t * txt , int overlay )
{
foreach ( statuscbs )
statuscbs . getfor ( ) - > onSetStatusText ( txt , overlay ) ;
endfor ;
}
void Layout : : addAppCmds ( AppCmds * commands )
{
foreach ( statuscbs )
statuscbs . getfor ( ) - > onAddAppCmds ( commands ) ;
endfor ;
}
void Layout : : removeAppCmds ( AppCmds * commands )
{
foreach ( statuscbs )
statuscbs . getfor ( ) - > onRemoveAppCmds ( commands ) ;
endfor ;
}
void Layout : : pushCompleted ( int max )
{
foreach ( statuscbs )
statuscbs . getfor ( ) - > pushCompleted ( max ) ;
endfor ;
}
void Layout : : incCompleted ( int add )
{
foreach ( statuscbs )
statuscbs . getfor ( ) - > incCompleted ( add ) ;
endfor ;
}
void Layout : : setCompleted ( int pos )
{
foreach ( statuscbs )
statuscbs . getfor ( ) - > setCompleted ( pos ) ;
endfor ;
}
void Layout : : popCompleted ( )
{
foreach ( statuscbs )
statuscbs . getfor ( ) - > popCompleted ( ) ;
endfor ;
}
void Layout : : registerStatusCallback ( GuiStatusCallback * lcb )
{
statuscbs . addItem ( lcb ) ;
viewer_addViewItem ( lcb - > status_getDependencyPtr ( ) ) ;
}
int Layout : : viewer_onItemDeleted ( api_dependent * item )
{
for ( int i = 0 ; i < statuscbs . getNumItems ( ) ; i + + )
if ( statuscbs . enumItem ( i ) - > status_getDependencyPtr ( ) = = item )
{
statuscbs . removeByPos ( i - - ) ;
}
return 1 ;
}
void Layout : : snapAdjust ( int left , int right , int top , int bottom )
{
snap_adjust_left = left ;
snap_adjust_top = top ;
snap_adjust_right = right ;
snap_adjust_bottom = bottom ;
script_vcpu_onSnapAdjustChanged ( SCRIPT_CALL , getScriptObject ( ) ) ;
# ifdef USEAPPBAR
if ( appbar_isDocked ( ) ) appbar_posChanged ( ) ;
# endif
if ( forceTransparencyFlag ( ) | | getAlpha ( ) < 255 ) postDeferredCallback ( DC_INVALIDATE ) ;
}
void Layout : : getSnapAdjust ( RECT * r )
{
if ( ! r ) return ;
r - > left = snap_adjust_left ;
r - > top = snap_adjust_top ;
r - > right = snap_adjust_right ;
r - > bottom = snap_adjust_bottom ;
}
int Layout : : abortSaving ( )
{
GuiObject * o = getGuiObject ( ) ;
if ( o - > guiobject_movingToTarget ( ) ) return 1 ;
return 0 ;
}
void Layout : : setNoOffscreenCheck ( int nocheck )
{
killTimer ( TIMER_OFFSCREENCHECK ) ;
if ( nocheck ! = - 1 ) nooffscreencheck = nocheck ;
setTimer ( TIMER_OFFSCREENCHECK , 2500 ) ;
}
# ifdef USEAPPBAR
void Layout : : onDock ( int side )
{
script_vcpu_onDock ( SCRIPT_CALL , getScriptObject ( ) , MAKE_SCRIPT_INT ( side ) ) ;
}
void Layout : : onUnDock ( )
{
script_vcpu_onUndock ( SCRIPT_CALL , getScriptObject ( ) ) ;
}
void Layout : : appbar_onDock ( int side )
{
onDock ( side ) ;
savePosition ( ) ;
}
void Layout : : appbar_onUnDock ( )
{
onUnDock ( ) ;
savePosition ( ) ;
}
void Layout : : appbar_onSlide ( )
{
savePosition ( ) ;
}
int Layout : : getAppBarAutoHide ( )
{
return appbar_want_autohide ;
}
void Layout : : setAppBarAutoHide ( int ah )
{
appbar_want_autohide = ah ;
if ( appbar_isDocked ( ) ) appbar_updateAutoHide ( ) ;
savePosition ( ) ;
}
int Layout : : getAppBarAlwaysOnTop ( )
{
return appbar_want_alwaysontop ;
}
void Layout : : setAppBarAlwaysOnTop ( int aot )
{
appbar_want_alwaysontop = aot ;
if ( appbar_isDocked ( ) ) appbar_updateAlwaysOnTop ( ) ;
savePosition ( ) ;
}
# endif
// ------------------------------------------------------------------------
LayoutScriptController _layoutController ;
LayoutScriptController * layoutController = & _layoutController ;
// -- Functions table -------------------------------------
function_descriptor_struct LayoutScriptController : : exportedFunction [ ] = {
{ L " onDock " , 1 , ( void * ) Layout : : script_vcpu_onDock } ,
{ L " onUndock " , 0 , ( void * ) Layout : : script_vcpu_onUndock } ,
{ L " getScale " , 0 , ( void * ) Layout : : script_vcpu_getScale } ,
{ L " setScale " , 1 , ( void * ) Layout : : script_vcpu_setScale } ,
{ L " onScale " , 1 , ( void * ) Layout : : script_vcpu_onScale } ,
{ L " setDesktopAlpha " , 1 , ( void * ) Layout : : script_vcpu_setDesktopAlpha } ,
{ L " getDesktopAlpha " , 0 , ( void * ) Layout : : script_vcpu_getDesktopAlpha } ,
{ L " isTransparencySafe " , 0 , ( void * ) Layout : : script_vcpu_isTransparencySafe } ,
{ L " isLayoutAnimationSafe " , 0 , ( void * ) Layout : : script_vcpu_isLayoutAnimationSafe } ,
{ L " getContainer " , 0 , ( void * ) Layout : : script_vcpu_getContainer } ,
{ L " center " , 0 , ( void * ) Layout : : script_vcpu_center } ,
{ L " onMove " , 0 , ( void * ) Layout : : script_vcpu_onMove } ,
{ L " onEndMove " , 0 , ( void * ) Layout : : script_vcpu_onEndMove } ,
{ L " snapAdjust " , 4 , ( void * ) Layout : : script_vcpu_snapAdjust } ,
{ L " getSnapAdjustTop " , 0 , ( void * ) Layout : : script_vcpu_getSnapAdjustTop } ,
{ L " getSnapAdjustLeft " , 0 , ( void * ) Layout : : script_vcpu_getSnapAdjustLeft } ,
{ L " getSnapAdjustRight " , 0 , ( void * ) Layout : : script_vcpu_getSnapAdjustRight } ,
{ L " getSnapAdjustBottom " , 0 , ( void * ) Layout : : script_vcpu_getSnapAdjustBottom } ,
{ L " onUserResize " , 4 , ( void * ) Layout : : script_vcpu_onUserResize } ,
{ L " setRedrawOnResize " , 1 , ( void * ) Layout : : script_vcpu_setRedrawOnResize } ,
{ L " beforeRedock " , 0 , ( void * ) Layout : : script_vcpu_beforeRedock } ,
{ L " redock " , 0 , ( void * ) Layout : : script_vcpu_redock } ,
{ L " onMouseEnterLayout " , 0 , ( void * ) Layout : : script_vcpu_onMouseEnterLayout } ,
{ L " onMouseLeaveLayout " , 0 , ( void * ) Layout : : script_vcpu_onMouseLeaveLayout } ,
{ L " onSnapAdjustChanged " , 0 , ( void * ) Layout : : script_vcpu_onSnapAdjustChanged } ,
} ;
// --------------------------------------------------------
const wchar_t * LayoutScriptController : : getClassName ( )
{
return L " Layout " ;
}
const wchar_t * LayoutScriptController : : getAncestorClassName ( )
{
return L " Group " ;
}
int LayoutScriptController : : getInstantiable ( )
{
return 1 ;
}
ScriptObject * LayoutScriptController : : instantiate ( )
{
Layout * l = new Layout ;
return l - > getScriptObject ( ) ;
}
void LayoutScriptController : : destroy ( ScriptObject * o )
{
Group * g = static_cast < Group * > ( o - > vcpu_getInterface ( groupGuid ) ) ;
if ( g & & GroupMgr : : hasGroup ( g ) )
{
GroupMgr : : destroy ( g ) ;
return ;
}
ASSERTALWAYS ( " you cannot destroy a static layout " ) ;
}
void * LayoutScriptController : : encapsulate ( ScriptObject * o )
{
return NULL ;
}
void LayoutScriptController : : deencapsulate ( void * o )
{ }
int LayoutScriptController : : getNumFunctions ( )
{
return sizeof ( exportedFunction ) / sizeof ( function_descriptor_struct ) ;
}
const function_descriptor_struct * LayoutScriptController : : getExportedFunctions ( )
{
return exportedFunction ;
}
GUID LayoutScriptController : : getClassGuid ( )
{
return layoutGuid ;
}
// -------------------------------------------------------------------------
scriptVar Layout : : script_vcpu_onDock ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o , scriptVar side )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS1 ( o , layoutController , side ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT1 ( o , side ) ;
}
scriptVar Layout : : script_vcpu_onUndock ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS0 ( o , layoutController ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT0 ( o ) ;
}
scriptVar Layout : : script_vcpu_getScale ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
double r = 0 ;
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) r = l - > getRenderRatio ( ) ;
return MAKE_SCRIPT_DOUBLE ( r ) ;
}
scriptVar Layout : : script_vcpu_setScale ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o , scriptVar s )
{
SCRIPT_FUNCTION_INIT
double a = GET_SCRIPT_DOUBLE ( s ) ;
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) l - > setRenderRatio ( a ) ;
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_onScale ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o , scriptVar s )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS1 ( o , layoutController , s ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT1 ( o , s ) ;
}
scriptVar Layout : : script_vcpu_setDesktopAlpha ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o , scriptVar s )
{
SCRIPT_FUNCTION_INIT
bool a = GET_SCRIPT_BOOLEAN ( s ) ;
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) l - > setWantDesktopAlpha ( a ) ;
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_getDesktopAlpha ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) return MAKE_SCRIPT_BOOLEAN ( l - > wantDesktopAlpha ( ) & & l - > isDesktopAlphaSafe ( ) ) ;
RETURN_SCRIPT_ZERO ;
}
scriptVar Layout : : script_vcpu_isTransparencySafe ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) return MAKE_SCRIPT_BOOLEAN ( l - > isTransparencySafe ( ) ) ;
RETURN_SCRIPT_ZERO ;
}
scriptVar Layout : : script_vcpu_isLayoutAnimationSafe ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) return MAKE_SCRIPT_BOOLEAN ( ! l - > forceTransparencyFlag ( ) & & ( l - > getAlphaMgr ( ) - > getAlpha ( l ) = = 255 ) ) ;
RETURN_SCRIPT_ZERO ;
}
scriptVar Layout : : script_vcpu_getContainer ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l )
{
Container * c = l - > getParentContainer ( ) ;
return MAKE_SCRIPT_OBJECT ( c ? c - > getScriptObject ( ) : NULL ) ;
}
return MAKE_SCRIPT_OBJECT ( NULL ) ;
}
scriptVar Layout : : script_vcpu_center ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) l - > center ( ) ;
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_setRedrawOnResize ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o , scriptVar v )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) l - > setWantRedrawOnResize ( GET_SCRIPT_INT ( v ) ) ;
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_beforeRedock ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) windowTracker - > beforeRedock ( l , & l - > redock ) ;
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_redock ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) windowTracker - > afterRedock ( l , & l - > redock ) ;
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_onEndMove ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS0 ( o , layoutController ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT0 ( o ) ;
}
scriptVar Layout : : script_vcpu_onMouseEnterLayout ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS0 ( o , layoutController ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT0 ( o ) ;
}
scriptVar Layout : : script_vcpu_onMouseLeaveLayout ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS0 ( o , layoutController ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT0 ( o ) ;
}
scriptVar Layout : : script_vcpu_onSnapAdjustChanged ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS0 ( o , layoutController ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT0 ( o ) ;
}
scriptVar Layout : : script_vcpu_onUserResize ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o , scriptVar x , scriptVar y , scriptVar w , scriptVar h )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS4 ( o , layoutController , x , y , w , h ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT4 ( o , x , y , w , h ) ;
}
scriptVar Layout : : script_vcpu_onMove ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT ;
PROCESS_HOOKS0 ( o , layoutController ) ;
SCRIPT_FUNCTION_CHECKABORTEVENT ;
SCRIPT_EXEC_EVENT0 ( o ) ;
}
scriptVar Layout : : script_vcpu_snapAdjust ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o , scriptVar left , scriptVar top , scriptVar right , scriptVar bottom )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l ) l - > snapAdjust ( GET_SCRIPT_INT ( left ) , GET_SCRIPT_INT ( top ) , GET_SCRIPT_INT ( right ) , GET_SCRIPT_INT ( bottom ) ) ;
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_getSnapAdjustLeft ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l )
{
RECT r ;
l - > getSnapAdjust ( & r ) ;
return MAKE_SCRIPT_INT ( r . left ) ;
}
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_getSnapAdjustTop ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l )
{
RECT r ;
l - > getSnapAdjust ( & r ) ;
return MAKE_SCRIPT_INT ( r . top ) ;
}
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_getSnapAdjustRight ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l )
{
RECT r ;
l - > getSnapAdjust ( & r ) ;
return MAKE_SCRIPT_INT ( r . right ) ;
}
RETURN_SCRIPT_VOID ;
}
scriptVar Layout : : script_vcpu_getSnapAdjustBottom ( SCRIPT_FUNCTION_PARAMS , ScriptObject * o )
{
SCRIPT_FUNCTION_INIT
Layout * l = static_cast < Layout * > ( o - > vcpu_getInterface ( layoutGuid ) ) ;
if ( l )
{
RECT r ;
l - > getSnapAdjust ( & r ) ;
return MAKE_SCRIPT_INT ( r . bottom ) ;
}
RETURN_SCRIPT_VOID ;
}
int Layout : : broadcasting = 0 ;
StringW Layout : : MakePrefix ( )
{
return StringPrintfW ( L " Skin:%s/Container:%s/Layout:%s " , WASABI_API_SKIN - > getSkinName ( ) , getParentContainer ( ) - > getDescriptor ( ) , getGuiObject ( ) - > guiobject_getId ( ) ) ;
}