//
// Mirroring-Support APIs (astracted in \mailnews\lib\mirror\rtlmir.cpp)
//
#ifdef __cplusplus
extern "C" {
#endif

#ifdef USE_MIRRORING
BOOL  IsBiDiLocalizedSystem( void );
BOOL  Mirror_IsEnabledOS( void );
LANGID Mirror_GetUserDefaultUILanguage( void );
LONG Mirror_EnableWindowLayoutInheritance( HWND hWnd );
LONG Mirror_DisableWindowLayoutInheritance( HWND hWnd );
BOOL  Mirror_IsWindowMirroredRTL( HWND hWnd );
DWORD Mirror_IsDCMirroredRTL( HDC hdc );
DWORD Mirror_MirrorDC( HDC hdc );
BOOL  Mirror_MirrorProcessRTL( void );
DWORD Mirror_SetLayout( HDC hdc , DWORD dwLayout );
BOOL Mirror_GetProcessDefaultLayout( DWORD *pdwDefaultLayout );
BOOL Mirror_IsProcessRTL( void );
extern const DWORD dwNoMirrorBitmap;
extern const DWORD dwExStyleRTLMirrorWnd;
extern const DWORD dwPreserveBitmap;
//
// 'g_bMirroredOS' is defined in each component which will use the
//  mirroring APIs. I decided to put it here, in order to make sure
//  each component has validated that the OS supports the mirroring
//  APIs before calling them.
//

#define IS_BIDI_LOCALIZED_SYSTEM()       IsBiDiLocalizedSystem()
#define IS_MIRRORING_ENABLED()           Mirror_IsEnabledOS()
#define ENABLE_LAYOUT_INHERITANCE(hWnd)  Mirror_EnableWindowLayoutInheritance( hWnd )
#define DISABLE_LAYOUT_INHERITANCE(hWnd) Mirror_DisableWindowLayoutInheritance( hWnd )
#define IS_WINDOW_RTL_MIRRORED(hwnd)     (g_bMirroredOS && Mirror_IsWindowMirroredRTL(hwnd))
#define IS_DC_RTL_MIRRORED(hdc)          (g_bMirroredOS && Mirror_IsDCMirroredRTL(hdc))
#define GET_PROCESS_DEF_LAYOUT(pdwl)     (g_bMirroredOS && Mirror_GetProcessDefaultLayout(pdwl))
#define IS_PROCESS_RTL_MIRRORED()        (g_bMirroredOS && Mirror_IsProcessRTL())
#define SET_DC_RTL_MIRRORED(hdc)         Mirror_MirrorDC(hdc)
#define SET_DC_LAYOUT(hdc,dwl)           Mirror_SetLayout(hdc,dwl)
#define SET_PROCESS_RTL_LAYOUT()         Mirror_MirrorProcessRTL()
#define DONTMIRRORBITMAP                 dwNoMirrorBitmap
#define RTL_MIRRORED_WINDOW              dwExStyleRTLMirrorWnd
#define LAYOUT_PRESERVEBITMAP            dwPreserveBitmap

#else
#define IS_BIDI_LOCALIZED_SYSTEM()       FALSE
#define IS_MIRRORING_ENABLED()           FALSE
#define IS_WINDOW_RTL_MIRRORED(hwnd)     FALSE
#define IS_DC_RTL_MIRRORED(hdc)          FALSE
#define GET_PROCESS_DEF_LAYOUT(pdwl)     FALSE
#define IS_PROCESS_RTL_MIRRORED()        FALSE
#define SET_DC_RTL_MIRRORED(hdc)        
#define SET_DC_LAYOUT(hdc,dwl)
#define SET_PROCESS_DEFAULT_LAYOUT()  
#define ENABLE_LAYOUT_INHERITANCE(hWnd)  0L
#define DISABLE_LAYOUT_INHERITANCE(hWnd) 0L  
#define DONTMIRRORBITMAP                 0L
#define RTL_MIRRORED_WINDOW              0L
#define LAYOUT_PRESERVEBITMAP            0L

// MirLibIsOS(): returns TRUE/FALSE if the platform is the indicated OS.
STDAPI_(BOOL) MirLibIsOS(DWORD dwOS);
#endif  // USE_MIRRROING

#ifdef __cplusplus
};
#endif