Added some extended styles to OS/2
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10330 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -117,7 +117,7 @@ extern LONG APIENTRY wxSubclassedGenericControlProc(WXHWND hWnd, WXDWORD message
|
|||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
#if !defined(WS_EX_CLIENTEDGE)
|
#if !defined(WS_EX_CLIENTEDGE)
|
||||||
#define WS_EX_CLIENTEDGE 0
|
#define WS_EX_CLIENTEDGE 0x00000200L
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ENDSESSION_LOGOFF
|
#ifndef ENDSESSION_LOGOFF
|
||||||
@@ -183,6 +183,11 @@ extern "C"
|
|||||||
WXDLLEXPORT HINSTANCE wxGetInstance();
|
WXDLLEXPORT HINSTANCE wxGetInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WXDLLEXPORT void wxDrawBorder( HPS hPS
|
||||||
|
,RECTL& rRect
|
||||||
|
,WXDWORD dwStyle
|
||||||
|
);
|
||||||
|
|
||||||
WXDLLEXPORT void wxSetInstance(HINSTANCE hInst);
|
WXDLLEXPORT void wxSetInstance(HINSTANCE hInst);
|
||||||
|
|
||||||
WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd);
|
WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd);
|
||||||
@@ -227,5 +232,6 @@ inline bool wxStyleHasBorder(long style)
|
|||||||
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
|
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// _WX_PRIVATE_H_
|
// _WX_PRIVATE_H_
|
||||||
|
@@ -260,6 +260,7 @@ public:
|
|||||||
,unsigned long lId
|
,unsigned long lId
|
||||||
,void* pCtlData = NULL
|
,void* pCtlData = NULL
|
||||||
,void* pPresParams = NULL
|
,void* pPresParams = NULL
|
||||||
|
,WXDWORD dwExStyle = 0L
|
||||||
);
|
);
|
||||||
virtual bool OS2Command( WXUINT uParam
|
virtual bool OS2Command( WXUINT uParam
|
||||||
,WXWORD nId
|
,WXWORD nId
|
||||||
@@ -463,12 +464,13 @@ protected:
|
|||||||
// the old window proc (we subclass all windows)
|
// the old window proc (we subclass all windows)
|
||||||
WXFARPROC m_fnOldWndProc;
|
WXFARPROC m_fnOldWndProc;
|
||||||
|
|
||||||
// additional (MSW specific) flags
|
// additional (OS2 specific) flags
|
||||||
bool m_bUseCtl3D:1; // Using CTL3D for this control
|
bool m_bUseCtl3D:1; // Using CTL3D for this control
|
||||||
bool m_bBackgroundTransparent:1;
|
bool m_bBackgroundTransparent:1;
|
||||||
bool m_bMouseInWindow:1;
|
bool m_bMouseInWindow:1;
|
||||||
bool m_bDoubleClickAllowed:1;
|
bool m_bDoubleClickAllowed:1;
|
||||||
bool m_bWinCaptured:1;
|
bool m_bWinCaptured:1;
|
||||||
|
WXDWORD m_dwExStyle;
|
||||||
|
|
||||||
// the size of one page for scrolling
|
// the size of one page for scrolling
|
||||||
int m_nXThumbSize;
|
int m_nXThumbSize;
|
||||||
|
@@ -950,4 +950,82 @@ wxString WXDLLEXPORT wxPMErrorToStr(
|
|||||||
return(sError);
|
return(sError);
|
||||||
} // end of wxPMErrorToStr
|
} // end of wxPMErrorToStr
|
||||||
|
|
||||||
|
void wxDrawBorder(
|
||||||
|
HPS hPS
|
||||||
|
, RECTL& rRect
|
||||||
|
, WXDWORD dwStyle
|
||||||
|
)
|
||||||
|
{
|
||||||
|
POINTL vPoint[2];
|
||||||
|
|
||||||
|
vPoint[0].x = rRect.xLeft;
|
||||||
|
vPoint[0].y = rRect.yBottom;
|
||||||
|
::GpiMove(hPS, &vPoint[0]);
|
||||||
|
if (dwStyle & wxSIMPLE_BORDER ||
|
||||||
|
dwStyle & wxSTATIC_BORDER)
|
||||||
|
{
|
||||||
|
vPoint[1].x = rRect.xRight;
|
||||||
|
vPoint[1].y = rRect.yTop;
|
||||||
|
::GpiBox( hPS
|
||||||
|
,DRO_OUTLINE
|
||||||
|
,&vPoint[1]
|
||||||
|
,0L
|
||||||
|
,0L
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (dwStyle & wxSUNKEN_BORDER)
|
||||||
|
{
|
||||||
|
LINEBUNDLE vLineBundle;
|
||||||
|
|
||||||
|
vLineBundle.lColor = 0x00FFFFFF; // White
|
||||||
|
vLineBundle.usMixMode = FM_OVERPAINT;
|
||||||
|
vLineBundle.fxWidth = 2;
|
||||||
|
vLineBundle.lGeomWidth = 2;
|
||||||
|
vLineBundle.usType = LINETYPE_SOLID;
|
||||||
|
vLineBundle.usEnd = 0;
|
||||||
|
vLineBundle.usJoin = 0;
|
||||||
|
::GpiSetAttrs( hPS
|
||||||
|
,PRIM_LINE
|
||||||
|
,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
|
||||||
|
,0L
|
||||||
|
,&vLineBundle
|
||||||
|
);
|
||||||
|
vPoint[1].x = rRect.xRight;
|
||||||
|
vPoint[1].y = rRect.yTop;
|
||||||
|
::GpiBox( hPS
|
||||||
|
,DRO_OUTLINE
|
||||||
|
,&vPoint[1]
|
||||||
|
,0L
|
||||||
|
,0L
|
||||||
|
);
|
||||||
|
vLineBundle.lColor = 0x00000000; // BLACK
|
||||||
|
vLineBundle.usMixMode = FM_OVERPAINT;
|
||||||
|
vLineBundle.fxWidth = 2;
|
||||||
|
vLineBundle.lGeomWidth = 2;
|
||||||
|
vLineBundle.usType = LINETYPE_SOLID;
|
||||||
|
vLineBundle.usEnd = 0;
|
||||||
|
vLineBundle.usJoin = 0;
|
||||||
|
::GpiSetAttrs( hPS
|
||||||
|
,PRIM_LINE
|
||||||
|
,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
|
||||||
|
,0L
|
||||||
|
,&vLineBundle
|
||||||
|
);
|
||||||
|
vPoint[0].x = rRect.xLeft + 2;
|
||||||
|
vPoint[0].y = rRect.yBottom + 2;
|
||||||
|
::GpiMove(hPS, &vPoint[0]);
|
||||||
|
vPoint[1].x = rRect.xLeft + 2;
|
||||||
|
vPoint[1].y = rRect.yTop - 2;
|
||||||
|
::GpiLine(hPS, &vPoint[1]);
|
||||||
|
vPoint[1].x = rRect.xRight - 2;
|
||||||
|
vPoint[1].y = rRect.yTop - 2;
|
||||||
|
::GpiLine(hPS, &vPoint[1]);
|
||||||
|
}
|
||||||
|
if (dwStyle & wxDOUBLE_BORDER)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if (dwStyle & wxRAISED_BORDER)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
} // end of wxDrawBorder
|
||||||
|
|
||||||
|
@@ -399,11 +399,18 @@ bool wxWindow::Create(
|
|||||||
ulCreateFlags |= WS_CLIPCHILDREN;
|
ulCreateFlags |= WS_CLIPCHILDREN;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Empty stuff for now since PM has no custome 3D effects
|
//
|
||||||
// Doesn't mean someone cannot make some up though
|
|
||||||
//
|
//
|
||||||
bool bWant3D;
|
bool bWant3D;
|
||||||
WXDWORD dwExStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &bWant3D);
|
WXDWORD dwExStyle = Determine3DEffects( WS_EX_CLIENTEDGE
|
||||||
|
,&bWant3D
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add the simple border style as we'll use this to draw borders
|
||||||
|
//
|
||||||
|
if (lStyle & wxSIMPLE_BORDER)
|
||||||
|
dwExStyle |= wxSIMPLE_BORDER;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Generic OS/2 Windows are created with no owner, no Z Order, no Control data,
|
// Generic OS/2 Windows are created with no owner, no Z Order, no Control data,
|
||||||
@@ -420,6 +427,9 @@ bool wxWindow::Create(
|
|||||||
,NULLHANDLE
|
,NULLHANDLE
|
||||||
,NULLHANDLE
|
,NULLHANDLE
|
||||||
,m_windowId
|
,m_windowId
|
||||||
|
,NULL
|
||||||
|
,NULL
|
||||||
|
,dwExStyle
|
||||||
);
|
);
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
@@ -992,16 +1002,32 @@ WXDWORD wxWindow::MakeExtendedStyle(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// PM does not support extended style
|
// Simply fill out with wxWindow extended styles. We'll conjure
|
||||||
|
// something up in OS2Create and all window redrawing pieces later
|
||||||
//
|
//
|
||||||
WXDWORD exStyle = 0;
|
WXDWORD dwStyle = 0;
|
||||||
return exStyle;
|
|
||||||
|
if (lStyle & wxTRANSPARENT_WINDOW )
|
||||||
|
dwStyle |= wxTRANSPARENT_WINDOW;
|
||||||
|
|
||||||
|
if (!bEliminateBorders)
|
||||||
|
{
|
||||||
|
if (lStyle & wxSUNKEN_BORDER)
|
||||||
|
dwStyle |= wxSUNKEN_BORDER;
|
||||||
|
if (lStyle & wxDOUBLE_BORDER)
|
||||||
|
dwStyle |= wxDOUBLE_BORDER;
|
||||||
|
if (lStyle & wxRAISED_BORDER )
|
||||||
|
dwStyle |= wxRAISED_BORDER;
|
||||||
|
if (lStyle & wxSTATIC_BORDER)
|
||||||
|
dwStyle |= wxSTATIC_BORDER;
|
||||||
|
}
|
||||||
|
return dwStyle;
|
||||||
} // end of wxWindow::MakeExtendedStyle
|
} // end of wxWindow::MakeExtendedStyle
|
||||||
|
|
||||||
//
|
//
|
||||||
// Determines whether native 3D effects or CTL3D should be used,
|
// Determines whether simulated 3D effects or CTL3D should be used,
|
||||||
// applying a default border style if required, and returning an extended
|
// applying a default border style if required, and returning an extended
|
||||||
// style to pass to CreateWindowEx.
|
// style to pass to OS2Create.
|
||||||
//
|
//
|
||||||
WXDWORD wxWindow::Determine3DEffects(
|
WXDWORD wxWindow::Determine3DEffects(
|
||||||
WXDWORD dwDefaultBorderStyle
|
WXDWORD dwDefaultBorderStyle
|
||||||
@@ -1011,9 +1037,65 @@ WXDWORD wxWindow::Determine3DEffects(
|
|||||||
WXDWORD dwStyle = 0L;
|
WXDWORD dwStyle = 0L;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Native PM does not have any specialize 3D effects like WIN32 does
|
// Native PM does not have any specialize 3D effects like WIN32 does,
|
||||||
|
// so we have to try and invent them.
|
||||||
//
|
//
|
||||||
*pbWant3D = FALSE;
|
|
||||||
|
//
|
||||||
|
// If matches certain criteria, then assume no 3D effects
|
||||||
|
// unless specifically requested (dealt with in MakeExtendedStyle)
|
||||||
|
//
|
||||||
|
if (!GetParent() ||
|
||||||
|
!IsKindOf(CLASSINFO(wxControl)) ||
|
||||||
|
(m_windowStyle & wxNO_BORDER)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
*pbWant3D = FALSE;
|
||||||
|
return MakeExtendedStyle(m_windowStyle, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// 1) App can specify global 3D effects
|
||||||
|
//
|
||||||
|
*pbWant3D = wxTheApp->GetAuto3D();
|
||||||
|
|
||||||
|
//
|
||||||
|
// 2) If the parent is being drawn with user colours, or simple border
|
||||||
|
// specified, switch effects off.
|
||||||
|
//
|
||||||
|
if (GetParent() &&
|
||||||
|
(GetParent()->GetWindowStyleFlag() & wxUSER_COLOURS) ||
|
||||||
|
(m_windowStyle & wxSIMPLE_BORDER)
|
||||||
|
)
|
||||||
|
*pbWant3D = FALSE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// 3) Control can override this global setting by defining
|
||||||
|
// a border style, e.g. wxSUNKEN_BORDER
|
||||||
|
//
|
||||||
|
if ((m_windowStyle & wxDOUBLE_BORDER) ||
|
||||||
|
(m_windowStyle & wxRAISED_BORDER) ||
|
||||||
|
(m_windowStyle & wxSTATIC_BORDER) ||
|
||||||
|
(m_windowStyle & wxSUNKEN_BORDER)
|
||||||
|
)
|
||||||
|
*pbWant3D = TRUE;
|
||||||
|
|
||||||
|
dwStyle = MakeExtendedStyle( m_windowStyle
|
||||||
|
,FALSE
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// If we want 3D, but haven't specified a border here,
|
||||||
|
// apply the default border style specified.
|
||||||
|
//
|
||||||
|
if (dwDefaultBorderStyle && (*pbWant3D) &&
|
||||||
|
!((m_windowStyle & wxDOUBLE_BORDER) ||
|
||||||
|
(m_windowStyle & wxRAISED_BORDER) ||
|
||||||
|
(m_windowStyle & wxSTATIC_BORDER) ||
|
||||||
|
(m_windowStyle & wxSIMPLE_BORDER)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
dwStyle |= dwDefaultBorderStyle;
|
||||||
return dwStyle;
|
return dwStyle;
|
||||||
} // end of wxWindow::Determine3DEffects
|
} // end of wxWindow::Determine3DEffects
|
||||||
|
|
||||||
@@ -2581,6 +2663,7 @@ bool wxWindow::OS2Create(
|
|||||||
, unsigned long ulId
|
, unsigned long ulId
|
||||||
, void* pCtlData
|
, void* pCtlData
|
||||||
, void* pPresParams
|
, void* pPresParams
|
||||||
|
, WXDWORD dwExStyle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ERRORID vError;
|
ERRORID vError;
|
||||||
@@ -2669,6 +2752,7 @@ bool wxWindow::OS2Create(
|
|||||||
wxLogError("Can't create window of class %s!. Error: %s\n", zClass, sError);
|
wxLogError("Can't create window of class %s!. Error: %s\n", zClass, sError);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
m_dwExStyle = dwExStyle;
|
||||||
::WinSetWindowULong(m_hWnd, QWL_USER, (ULONG) this);
|
::WinSetWindowULong(m_hWnd, QWL_USER, (ULONG) this);
|
||||||
wxWndHook = NULL;
|
wxWndHook = NULL;
|
||||||
|
|
||||||
@@ -3236,6 +3320,29 @@ bool wxWindow::HandlePaint()
|
|||||||
);
|
);
|
||||||
|
|
||||||
::WinFillRect(hPS, &vRect, GetBackgroundColour().GetPixel());
|
::WinFillRect(hPS, &vRect, GetBackgroundColour().GetPixel());
|
||||||
|
|
||||||
|
if (m_dwExStyle)
|
||||||
|
{
|
||||||
|
LINEBUNDLE vLineBundle;
|
||||||
|
|
||||||
|
vLineBundle.lColor = 0x00000000; // Black
|
||||||
|
vLineBundle.usMixMode = FM_OVERPAINT;
|
||||||
|
vLineBundle.fxWidth = 1;
|
||||||
|
vLineBundle.lGeomWidth = 1;
|
||||||
|
vLineBundle.usType = LINETYPE_SOLID;
|
||||||
|
vLineBundle.usEnd = 0;
|
||||||
|
vLineBundle.usJoin = 0;
|
||||||
|
::GpiSetAttrs( hPS
|
||||||
|
,PRIM_LINE
|
||||||
|
,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
|
||||||
|
,0L
|
||||||
|
,&vLineBundle
|
||||||
|
);
|
||||||
|
wxDrawBorder( hPS
|
||||||
|
,vRect
|
||||||
|
,m_dwExStyle
|
||||||
|
);
|
||||||
|
}
|
||||||
::WinEndPaint(hPS);
|
::WinEndPaint(hPS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13469,6 +13469,8 @@ EXPORTS
|
|||||||
wxGetResource__FRC8wxStringT1PfT1
|
wxGetResource__FRC8wxStringT1PfT1
|
||||||
;wxGetMousePosition(int*,int*)
|
;wxGetMousePosition(int*,int*)
|
||||||
wxGetMousePosition__FPiT1
|
wxGetMousePosition__FPiT1
|
||||||
|
;wxDrawBorder(unsigned long,_RECTL&,unsigned long)
|
||||||
|
wxDrawBorder__FUlR6_RECTLT1
|
||||||
;wxPathExists(const wxString&)
|
;wxPathExists(const wxString&)
|
||||||
wxPathExists__FRC8wxString
|
wxPathExists__FRC8wxString
|
||||||
;wxGetWindowText(unsigned long)
|
;wxGetWindowText(unsigned long)
|
||||||
@@ -13786,8 +13788,8 @@ EXPORTS
|
|||||||
GetCharWidth__8wxWindowCFv
|
GetCharWidth__8wxWindowCFv
|
||||||
;wxWindowBase::FindFocus()
|
;wxWindowBase::FindFocus()
|
||||||
FindFocus__12wxWindowBaseFv
|
FindFocus__12wxWindowBaseFv
|
||||||
;wxWindow::OS2Create(unsigned long,char*,const char*,unsigned long,long,long,long,long,unsigned long,unsigned long,unsigned long,void*,void*)
|
;wxWindow::OS2Create(unsigned long,char*,const char*,unsigned long,long,long,long,long,unsigned long,unsigned long,unsigned long,void*,void*,unsigned long)
|
||||||
OS2Create__8wxWindowFUlPcPCcT1lN35N31PvT12_
|
OS2Create__8wxWindowFUlPcPCcT1lN35N31PvT12_T1
|
||||||
;wxWindow::sm_eventTableEntries
|
;wxWindow::sm_eventTableEntries
|
||||||
sm_eventTableEntries__8wxWindow
|
sm_eventTableEntries__8wxWindow
|
||||||
;wxWindow::SetTitle(const wxString&)
|
;wxWindow::SetTitle(const wxString&)
|
||||||
|
Reference in New Issue
Block a user