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:
parent
a694a0c6c4
commit
008089f632
@ -117,7 +117,7 @@ extern LONG APIENTRY wxSubclassedGenericControlProc(WXHWND hWnd, WXDWORD message
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#if !defined(WS_EX_CLIENTEDGE)
|
||||
#define WS_EX_CLIENTEDGE 0
|
||||
#define WS_EX_CLIENTEDGE 0x00000200L
|
||||
#endif
|
||||
|
||||
#ifndef ENDSESSION_LOGOFF
|
||||
@ -183,6 +183,11 @@ extern "C"
|
||||
WXDLLEXPORT HINSTANCE wxGetInstance();
|
||||
}
|
||||
|
||||
WXDLLEXPORT void wxDrawBorder( HPS hPS
|
||||
,RECTL& rRect
|
||||
,WXDWORD dwStyle
|
||||
);
|
||||
|
||||
WXDLLEXPORT void wxSetInstance(HINSTANCE hInst);
|
||||
|
||||
WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd);
|
||||
@ -227,5 +232,6 @@ inline bool wxStyleHasBorder(long style)
|
||||
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
// _WX_PRIVATE_H_
|
||||
|
@ -260,6 +260,7 @@ public:
|
||||
,unsigned long lId
|
||||
,void* pCtlData = NULL
|
||||
,void* pPresParams = NULL
|
||||
,WXDWORD dwExStyle = 0L
|
||||
);
|
||||
virtual bool OS2Command( WXUINT uParam
|
||||
,WXWORD nId
|
||||
@ -463,12 +464,13 @@ protected:
|
||||
// the old window proc (we subclass all windows)
|
||||
WXFARPROC m_fnOldWndProc;
|
||||
|
||||
// additional (MSW specific) flags
|
||||
// additional (OS2 specific) flags
|
||||
bool m_bUseCtl3D:1; // Using CTL3D for this control
|
||||
bool m_bBackgroundTransparent:1;
|
||||
bool m_bMouseInWindow:1;
|
||||
bool m_bDoubleClickAllowed:1;
|
||||
bool m_bWinCaptured:1;
|
||||
WXDWORD m_dwExStyle;
|
||||
|
||||
// the size of one page for scrolling
|
||||
int m_nXThumbSize;
|
||||
|
@ -950,4 +950,82 @@ wxString WXDLLEXPORT wxPMErrorToStr(
|
||||
return(sError);
|
||||
} // 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;
|
||||
|
||||
//
|
||||
// Empty stuff for now since PM has no custome 3D effects
|
||||
// Doesn't mean someone cannot make some up though
|
||||
//
|
||||
//
|
||||
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,
|
||||
@ -420,6 +427,9 @@ bool wxWindow::Create(
|
||||
,NULLHANDLE
|
||||
,NULLHANDLE
|
||||
,m_windowId
|
||||
,NULL
|
||||
,NULL
|
||||
,dwExStyle
|
||||
);
|
||||
|
||||
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;
|
||||
return exStyle;
|
||||
WXDWORD dwStyle = 0;
|
||||
|
||||
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
|
||||
|
||||
//
|
||||
// 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
|
||||
// style to pass to CreateWindowEx.
|
||||
// style to pass to OS2Create.
|
||||
//
|
||||
WXDWORD wxWindow::Determine3DEffects(
|
||||
WXDWORD dwDefaultBorderStyle
|
||||
@ -1011,9 +1037,65 @@ WXDWORD wxWindow::Determine3DEffects(
|
||||
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;
|
||||
} // end of wxWindow::Determine3DEffects
|
||||
|
||||
@ -2581,6 +2663,7 @@ bool wxWindow::OS2Create(
|
||||
, unsigned long ulId
|
||||
, void* pCtlData
|
||||
, void* pPresParams
|
||||
, WXDWORD dwExStyle
|
||||
)
|
||||
{
|
||||
ERRORID vError;
|
||||
@ -2669,6 +2752,7 @@ bool wxWindow::OS2Create(
|
||||
wxLogError("Can't create window of class %s!. Error: %s\n", zClass, sError);
|
||||
return FALSE;
|
||||
}
|
||||
m_dwExStyle = dwExStyle;
|
||||
::WinSetWindowULong(m_hWnd, QWL_USER, (ULONG) this);
|
||||
wxWndHook = NULL;
|
||||
|
||||
@ -3236,6 +3320,29 @@ bool wxWindow::HandlePaint()
|
||||
);
|
||||
|
||||
::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);
|
||||
}
|
||||
}
|
||||
|
@ -13469,6 +13469,8 @@ EXPORTS
|
||||
wxGetResource__FRC8wxStringT1PfT1
|
||||
;wxGetMousePosition(int*,int*)
|
||||
wxGetMousePosition__FPiT1
|
||||
;wxDrawBorder(unsigned long,_RECTL&,unsigned long)
|
||||
wxDrawBorder__FUlR6_RECTLT1
|
||||
;wxPathExists(const wxString&)
|
||||
wxPathExists__FRC8wxString
|
||||
;wxGetWindowText(unsigned long)
|
||||
@ -13786,8 +13788,8 @@ EXPORTS
|
||||
GetCharWidth__8wxWindowCFv
|
||||
;wxWindowBase::FindFocus()
|
||||
FindFocus__12wxWindowBaseFv
|
||||
;wxWindow::OS2Create(unsigned long,char*,const char*,unsigned long,long,long,long,long,unsigned long,unsigned long,unsigned long,void*,void*)
|
||||
OS2Create__8wxWindowFUlPcPCcT1lN35N31PvT12_
|
||||
;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_T1
|
||||
;wxWindow::sm_eventTableEntries
|
||||
sm_eventTableEntries__8wxWindow
|
||||
;wxWindow::SetTitle(const wxString&)
|
||||
|
Loading…
Reference in New Issue
Block a user