// ---------------------------------------------------------------------------
#if !defined(WS_EX_CLIENTEDGE)
- #define WS_EX_CLIENTEDGE 0
+ #define WS_EX_CLIENTEDGE 0x00000200L
#endif
#ifndef ENDSESSION_LOGOFF
WXDLLEXPORT HINSTANCE wxGetInstance();
}
+WXDLLEXPORT void wxDrawBorder( HPS hPS
+ ,RECTL& rRect
+ ,WXDWORD dwStyle
+ );
+
WXDLLEXPORT void wxSetInstance(HINSTANCE hInst);
WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd);
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
}
+
#endif
// _WX_PRIVATE_H_
,unsigned long lId
,void* pCtlData = NULL
,void* pPresParams = NULL
+ ,WXDWORD dwExStyle = 0L
);
virtual bool OS2Command( WXUINT uParam
,WXWORD nId
// 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;
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
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,
,NULLHANDLE
,NULLHANDLE
,m_windowId
+ ,NULL
+ ,NULL
+ ,dwExStyle
);
return(TRUE);
)
{
//
- // 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
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.
+ //
+
+ //
+ // 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 = FALSE;
+ *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
, unsigned long ulId
, void* pCtlData
, void* pPresParams
+, WXDWORD dwExStyle
)
{
ERRORID vError;
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;
);
::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);
}
}
wxGetResource__FRC8wxStringT1PfT1
;wxGetMousePosition(int*,int*)
wxGetMousePosition__FPiT1
+ ;wxDrawBorder(unsigned long,_RECTL&,unsigned long)
+ wxDrawBorder__FUlR6_RECTLT1
;wxPathExists(const wxString&)
wxPathExists__FRC8wxString
;wxGetWindowText(unsigned long)
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&)