Some OS/2 Modifications for coordinate normalizations and code for some common controls
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12146 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -208,10 +208,5 @@ bool wxAcceleratorTable::Translate(
|
|||||||
int x = 1;
|
int x = 1;
|
||||||
}
|
}
|
||||||
return (Ok() && rc);
|
return (Ok() && rc);
|
||||||
// ::WinTranslateAccel( vHabmain
|
|
||||||
// ,(HWND)hWnd
|
|
||||||
// ,GetHaccel()
|
|
||||||
// ,pMsg
|
|
||||||
// );
|
|
||||||
} // end of wxAcceleratorTable::Translate
|
} // end of wxAcceleratorTable::Translate
|
||||||
|
|
||||||
|
@@ -332,7 +332,7 @@ bool wxApp::RegisterWindowClasses(
|
|||||||
if (!::WinRegisterClass( vHab
|
if (!::WinRegisterClass( vHab
|
||||||
,wxFrameClassName
|
,wxFrameClassName
|
||||||
,wxFrameWndProc
|
,wxFrameWndProc
|
||||||
,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT | CS_CLIPCHILDREN
|
,CS_SIZEREDRAW | CS_SYNCPAINT | CS_CLIPCHILDREN
|
||||||
,sizeof(ULONG)
|
,sizeof(ULONG)
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
@@ -423,7 +423,7 @@ bool wxApp::RegisterWindowClasses(
|
|||||||
if (!::WinRegisterClass( vHab
|
if (!::WinRegisterClass( vHab
|
||||||
,wxCanvasClassName
|
,wxCanvasClassName
|
||||||
,wxWndProc
|
,wxWndProc
|
||||||
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT | CS_CLIPCHILDREN
|
,CS_SIZEREDRAW | CS_HITTEST | CS_SYNCPAINT | CS_CLIPCHILDREN
|
||||||
,sizeof(ULONG)
|
,sizeof(ULONG)
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
|
@@ -23,48 +23,97 @@
|
|||||||
|
|
||||||
#include "wx/os2/private.h"
|
#include "wx/os2/private.h"
|
||||||
|
|
||||||
|
#define BUTTON_HEIGHT_FROM_CHAR_HEIGHT(cy) (11*EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)/10)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Should be at the very least less than winDEFAULT_BUTTON_MARGIN
|
||||||
|
//
|
||||||
|
#define FOCUS_MARGIN 3
|
||||||
|
|
||||||
|
#ifndef BST_CHECKED
|
||||||
|
#define BST_CHECKED 0x0001
|
||||||
|
#endif
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl)
|
IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl)
|
||||||
|
|
||||||
// Button
|
// Button
|
||||||
|
|
||||||
bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& label,
|
bool wxButton::Create(
|
||||||
const wxPoint& pos,
|
wxWindow* pParent
|
||||||
const wxSize& size, long style,
|
, wxWindowID vId
|
||||||
|
, const wxString& rsLabel
|
||||||
|
, const wxPoint& rPos
|
||||||
|
, const wxSize& rSize
|
||||||
|
, long lStyle
|
||||||
#if wxUSE_VALIDATORS
|
#if wxUSE_VALIDATORS
|
||||||
const wxValidator& validator,
|
, const wxValidator& rValidator
|
||||||
#endif
|
#endif
|
||||||
const wxString& name)
|
, const wxString& rsName
|
||||||
|
)
|
||||||
{
|
{
|
||||||
SetName(name);
|
SetName(rsName);
|
||||||
#if wxUSE_VALIDATORS
|
#if wxUSE_VALIDATORS
|
||||||
SetValidator(validator);
|
SetValidator(rValidator);
|
||||||
#endif
|
#endif
|
||||||
m_windowStyle = style;
|
m_windowStyle = lStyle;
|
||||||
|
pParent->AddChild((wxButton *)this);
|
||||||
parent->AddChild((wxButton *)this);
|
if (vId == -1)
|
||||||
|
|
||||||
if (id == -1)
|
|
||||||
m_windowId = NewControlId();
|
m_windowId = NewControlId();
|
||||||
else
|
else
|
||||||
m_windowId = id;
|
m_windowId = vId;
|
||||||
|
lStyle = WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON;
|
||||||
// TODO: create button
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// OS/2 PM does not have Right/Left/Top/Bottom styles.
|
||||||
|
// We will have to define an additional style when we implement notebooks
|
||||||
|
// for a notebook page button
|
||||||
|
//
|
||||||
|
if (m_windowStyle & wxCLIP_SIBLINGS )
|
||||||
|
lStyle |= WS_CLIPSIBLINGS;
|
||||||
|
m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent) // Parent handle
|
||||||
|
,WC_BUTTON // A Button class window
|
||||||
|
,(PSZ)rsLabel.c_str() // Button text
|
||||||
|
,lStyle // Button style
|
||||||
|
,0, 0, 0, 0 // Location and size
|
||||||
|
,GetHwndOf(pParent) // Owner handle
|
||||||
|
,HWND_TOP // Top of Z-Order
|
||||||
|
,vId // Identifier
|
||||||
|
,NULL // No control data
|
||||||
|
,NULL // No Presentation parameters
|
||||||
|
);
|
||||||
|
if (m_hWnd == 0)
|
||||||
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Subclass again for purposes of dialog editing mode
|
||||||
|
//
|
||||||
|
SubclassWin(m_hWnd);
|
||||||
|
SetFont(pParent->GetFont());
|
||||||
|
SetSize( rPos.x
|
||||||
|
,rPos.y
|
||||||
|
,rSize.x
|
||||||
|
,rSize.y
|
||||||
|
);
|
||||||
|
return TRUE;
|
||||||
|
} // end of wxButton::Create
|
||||||
|
|
||||||
wxButton::~wxButton()
|
wxButton::~wxButton()
|
||||||
{
|
{
|
||||||
wxPanel *panel = wxDynamicCast(GetParent(), wxPanel);
|
wxPanel* pPanel = wxDynamicCast(GetParent(), wxPanel);
|
||||||
if ( panel )
|
|
||||||
|
if (pPanel)
|
||||||
{
|
{
|
||||||
if ( panel->GetDefaultItem() == this )
|
if (pPanel->GetDefaultItem() == this)
|
||||||
{
|
{
|
||||||
// don't leave the panel with invalid default item
|
//
|
||||||
panel->SetDefaultItem(NULL);
|
// Don't leave the panel with invalid default item
|
||||||
|
//
|
||||||
|
pPanel->SetDefaultItem(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} // end of wxButton::~wxButton
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// size management including autosizing
|
// size management including autosizing
|
||||||
@@ -72,33 +121,59 @@ wxButton::~wxButton()
|
|||||||
|
|
||||||
wxSize wxButton::DoGetBestSize() const
|
wxSize wxButton::DoGetBestSize() const
|
||||||
{
|
{
|
||||||
wxString label = wxGetWindowText(GetHWND());
|
wxString rsLabel = wxGetWindowText(GetHWND());
|
||||||
int wBtn;
|
int nWidthButton;
|
||||||
GetTextExtent(label, &wBtn, NULL);
|
int nWidthChar;
|
||||||
|
int nHeightChar;
|
||||||
|
|
||||||
int wChar, hChar;
|
GetTextExtent( rsLabel
|
||||||
wxGetCharSize(GetHWND(), &wChar, &hChar, (wxFont*)&GetFont());
|
,&nWidthButton
|
||||||
|
,NULL
|
||||||
|
);
|
||||||
|
|
||||||
// add a margin - the button is wider than just its label
|
wxGetCharSize( GetHWND()
|
||||||
wBtn += 3*wChar;
|
,&nWidthChar
|
||||||
|
,&nHeightChar
|
||||||
|
,(wxFont*)&GetFont()
|
||||||
|
);
|
||||||
|
|
||||||
// the button height is proportional to the height of the font used
|
//
|
||||||
int hBtn = 0;// TODO: BUTTON_HEIGHT_FROM_CHAR_HEIGHT(hChar);
|
// Add a margin - the button is wider than just its label
|
||||||
|
//
|
||||||
|
nWidthButton += 3 * nWidthChar;
|
||||||
|
|
||||||
return wxSize(wBtn, hBtn);
|
//
|
||||||
}
|
// The button height is proportional to the height of the font used
|
||||||
|
//
|
||||||
|
int nHeightButton = BUTTON_HEIGHT_FROM_CHAR_HEIGHT(nHeightChar);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Need a little extra to make it look right
|
||||||
|
//
|
||||||
|
nHeightButton += nHeightChar/1.5;
|
||||||
|
|
||||||
|
wxSize vSize = GetDefaultSize();
|
||||||
|
|
||||||
|
if (nWidthButton > vSize.x)
|
||||||
|
vSize.x = nWidthButton;
|
||||||
|
if (nHeightButton > vSize.y)
|
||||||
|
vSize.y = nHeightButton;
|
||||||
|
return vSize;
|
||||||
|
} // end of wxButton::DoGetBestSize
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
wxSize wxButton::GetDefaultSize()
|
wxSize wxButton::GetDefaultSize()
|
||||||
{
|
{
|
||||||
static wxSize s_sizeBtn;
|
static wxSize vSizeBtn;
|
||||||
|
|
||||||
if ( s_sizeBtn.x == 0 )
|
if (vSizeBtn.x == 0)
|
||||||
{
|
{
|
||||||
wxScreenDC dc;
|
wxScreenDC vDc;
|
||||||
dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
|
|
||||||
|
|
||||||
// the size of a standard button in the dialog units is 50x14,
|
vDc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
|
||||||
|
|
||||||
|
//
|
||||||
|
// The size of a standard button in the dialog units is 50x14,
|
||||||
// translate this to pixels
|
// translate this to pixels
|
||||||
// NB1: the multipliers come from the Windows convention
|
// NB1: the multipliers come from the Windows convention
|
||||||
// NB2: the extra +1/+2 were needed to get the size be the same as the
|
// NB2: the extra +1/+2 were needed to get the size be the same as the
|
||||||
@@ -106,17 +181,18 @@ wxSize wxButton::GetDefaultSize()
|
|||||||
// this happens, but on my system this size is 75x23 in pixels and
|
// this happens, but on my system this size is 75x23 in pixels and
|
||||||
// 23*8 isn't even divisible by 14... Would be nice to understand
|
// 23*8 isn't even divisible by 14... Would be nice to understand
|
||||||
// why these constants are needed though!
|
// why these constants are needed though!
|
||||||
s_sizeBtn.x = (50 * (dc.GetCharWidth() + 1))/4;
|
vSizeBtn.x = (50 * (vDc.GetCharWidth() + 1))/4;
|
||||||
s_sizeBtn.y = ((14 * dc.GetCharHeight()) + 2)/8;
|
vSizeBtn.y = ((14 * vDc.GetCharHeight()) + 2)/8;
|
||||||
}
|
}
|
||||||
|
return vSizeBtn;
|
||||||
|
} // end of wxButton::GetDefaultSize
|
||||||
|
|
||||||
return s_sizeBtn;
|
void wxButton::Command (
|
||||||
}
|
wxCommandEvent& rEvent
|
||||||
|
)
|
||||||
void wxButton::Command (wxCommandEvent & event)
|
|
||||||
{
|
{
|
||||||
ProcessCommand (event);
|
ProcessCommand (rEvent);
|
||||||
}
|
} // end of wxButton::Command
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// helpers
|
// helpers
|
||||||
@@ -124,53 +200,157 @@ void wxButton::Command (wxCommandEvent & event)
|
|||||||
|
|
||||||
bool wxButton::SendClickEvent()
|
bool wxButton::SendClickEvent()
|
||||||
{
|
{
|
||||||
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetId());
|
wxCommandEvent vEvent( wxEVT_COMMAND_BUTTON_CLICKED
|
||||||
event.SetEventObject(this);
|
,GetId()
|
||||||
|
);
|
||||||
|
|
||||||
return ProcessCommand(event);
|
vEvent.SetEventObject(this);
|
||||||
}
|
return ProcessCommand(vEvent);
|
||||||
|
} // end of wxButton::SendClickEvent
|
||||||
|
|
||||||
void wxButton::SetDefault()
|
void wxButton::SetDefault()
|
||||||
{
|
{
|
||||||
wxWindow *parent = GetParent();
|
wxWindow* pParent = GetParent();
|
||||||
wxButton *btnOldDefault = NULL;
|
wxButton* pBtnOldDefault = NULL;
|
||||||
wxPanel *panel = wxDynamicCast(parent, wxPanel);
|
wxPanel* pPanel = wxDynamicCast(pParent, wxPanel);
|
||||||
if (panel)
|
long lStyle = 0L;
|
||||||
panel->SetDefaultItem(this);
|
|
||||||
|
|
||||||
// TODO: make button the default
|
if (pParent)
|
||||||
}
|
{
|
||||||
|
wxWindow* pWinOldDefault = pParent->SetDefaultItem(this);
|
||||||
|
|
||||||
|
pBtnOldDefault = wxDynamicCast(pWinOldDefault, wxButton);
|
||||||
|
}
|
||||||
|
if (pBtnOldDefault && pBtnOldDefault != this)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Remove the BS_DEFPUSHBUTTON style from the other button
|
||||||
|
//
|
||||||
|
lStyle = ::WinQueryWindowULong(GetHwndOf(pBtnOldDefault), QWL_STYLE);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Don't do it with the owner drawn buttons because it will reset
|
||||||
|
// BS_OWNERDRAW style bit too (BS_OWNERDRAW & BS_DEFPUSHBUTTON != 0)!
|
||||||
|
//
|
||||||
|
if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
|
||||||
|
{
|
||||||
|
lStyle &= ~BS_DEFAULT;
|
||||||
|
::WinSetWindowULong(GetHwndOf(pBtnOldDefault), QWL_STYLE, lStyle);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Redraw the button - it will notice itself that it's not the
|
||||||
|
// default one any longer
|
||||||
|
//
|
||||||
|
pBtnOldDefault->Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set this button as the default
|
||||||
|
//
|
||||||
|
lStyle = ::WinQueryWindowULong(GetHwnd(), QWL_STYLE);
|
||||||
|
if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
|
||||||
|
{
|
||||||
|
lStyle != BS_DEFAULT;
|
||||||
|
::WinSetWindowULong(GetHwnd(), QWL_STYLE, lStyle);
|
||||||
|
}
|
||||||
|
} // end of wxButton::SetDefault
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// event/message handlers
|
// event/message handlers
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
bool wxButton::OS2Command(WXUINT param, WXWORD id)
|
bool wxButton::OS2Command(
|
||||||
|
WXUINT uParam
|
||||||
|
, WXWORD wId
|
||||||
|
)
|
||||||
{
|
{
|
||||||
bool processed = FALSE;
|
bool bProcessed = FALSE;
|
||||||
// TODO
|
|
||||||
/*
|
switch (uParam)
|
||||||
switch ( param )
|
|
||||||
{
|
{
|
||||||
case 1: // 1 for accelerator
|
case BN_CLICKED: // normal buttons send this
|
||||||
case BN_CLICKED:
|
case BN_DBLCLICKED: // owner-drawn ones also send this
|
||||||
processed = SendClickEvent();
|
bProcessed = SendClickEvent();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*/
|
return bProcessed;
|
||||||
return processed;
|
} // end of wxButton::OS2Command
|
||||||
}
|
|
||||||
|
|
||||||
WXHBRUSH wxButton::OnCtlColor(WXHDC pDC,
|
WXHBRUSH wxButton::OnCtlColor(
|
||||||
WXHWND pWnd,
|
WXHDC pDC
|
||||||
WXUINT nCtlColor,
|
, WXHWND pWnd
|
||||||
WXUINT message,
|
, WXUINT nCtlColor
|
||||||
WXWPARAM wParam,
|
, WXUINT uMessage
|
||||||
WXLPARAM lParam)
|
, WXWPARAM wParam
|
||||||
|
, WXLPARAM lParam
|
||||||
|
)
|
||||||
{
|
{
|
||||||
wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID);
|
wxBrush* pBackgroundBrush = wxTheBrushList->FindOrCreateBrush( GetBackgroundColour()
|
||||||
|
,wxSOLID
|
||||||
|
);
|
||||||
|
|
||||||
return (WXHBRUSH) backgroundBrush->GetResourceHandle();
|
return (WXHBRUSH)pBackgroundBrush->GetResourceHandle();
|
||||||
}
|
} // end of wxButton::OnCtlColor
|
||||||
|
|
||||||
|
void wxButton::MakeOwnerDrawn()
|
||||||
|
{
|
||||||
|
long lStyle = 0L;
|
||||||
|
|
||||||
|
lStyle = ::WinQueryWindowULong(GetHwnd(), QWL_STYLE);
|
||||||
|
if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Make it so
|
||||||
|
//
|
||||||
|
lStyle |= BS_USERBUTTON;
|
||||||
|
::WinSetWindowULong(GetHwnd(), QWL_STYLE, lStyle);
|
||||||
|
}
|
||||||
|
} // end of wxCButton::MakeOwnerDrawn
|
||||||
|
|
||||||
|
MRESULT wxButton::WindowProc(
|
||||||
|
WXUINT uMsg
|
||||||
|
, WXWPARAM wParam
|
||||||
|
, WXLPARAM lParam
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// When we receive focus, we want to become the default button in our
|
||||||
|
// parent panel
|
||||||
|
//
|
||||||
|
if (uMsg == WM_SETFOCUS)
|
||||||
|
{
|
||||||
|
SetDefault();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Let the default processign take place too
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (uMsg == WM_BUTTON1DBLCLK)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Emulate a click event to force an owner-drawn button to change its
|
||||||
|
// appearance - without this, it won't do it
|
||||||
|
//
|
||||||
|
(void)wxControl::OS2WindowProc( WM_BUTTON1DOWN
|
||||||
|
,wParam
|
||||||
|
,lParam
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// And conitnue with processing the message normally as well
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Let the base class do all real processing
|
||||||
|
//
|
||||||
|
return (wxControl::OS2WindowProc( uMsg
|
||||||
|
,wParam
|
||||||
|
,lParam
|
||||||
|
));
|
||||||
|
} // end of wxW indowProc
|
||||||
|
|
||||||
|
@@ -370,7 +370,7 @@ bool wxFont::RealizeResource()
|
|||||||
vError = ::WinGetLastError(vHabmain);
|
vError = ::WinGetLastError(vHabmain);
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(zFacename, M_FONTDATA->m_vFattrs.szFacename);
|
M_FONTDATA->m_sFaceName = zFacename;
|
||||||
|
|
||||||
if(::GpiCreateLogFont( M_FONTDATA->m_hPS
|
if(::GpiCreateLogFont( M_FONTDATA->m_hPS
|
||||||
,NULL
|
,NULL
|
||||||
|
@@ -236,6 +236,53 @@ wxFrame::~wxFrame()
|
|||||||
}
|
}
|
||||||
} // end of wxFrame::~wxFrame
|
} // end of wxFrame::~wxFrame
|
||||||
|
|
||||||
|
//
|
||||||
|
// IF we have child controls in the Frame's client we need to alter
|
||||||
|
// the y position, because, OS/2 controls are positioned relative to
|
||||||
|
// wxWindows orgin (top left) not the OS/2 origin (bottom left)
|
||||||
|
void wxFrame::AlterChildPos()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// OS/2 is the only OS concerned about this
|
||||||
|
//
|
||||||
|
wxWindow* pChild = NULL;
|
||||||
|
wxControl* pCtrl = NULL;
|
||||||
|
RECTL vRect;
|
||||||
|
SWP vSwp;
|
||||||
|
|
||||||
|
::WinQueryWindowRect(GetHwnd(), &vRect);
|
||||||
|
for (wxWindowList::Node* pNode = GetChildren().GetFirst();
|
||||||
|
pNode;
|
||||||
|
pNode = pNode->GetNext())
|
||||||
|
{
|
||||||
|
wxWindow* pChild = pNode->GetData();
|
||||||
|
|
||||||
|
::WinQueryWindowPos(pChild->GetHWND(), &vSwp);
|
||||||
|
vSwp.y += (vRect.yTop - m_vSwpClient.cy);
|
||||||
|
if (pChild->IsKindOf(CLASSINFO(wxControl)))
|
||||||
|
{
|
||||||
|
pCtrl = wxDynamicCast(pChild, wxControl);
|
||||||
|
//
|
||||||
|
// Must deal with controls that have margins like ENTRYFIELD. The SWP
|
||||||
|
// struct of such a control will have and origin offset from its intended
|
||||||
|
// position by the width of the margins.
|
||||||
|
//
|
||||||
|
vSwp.y -= pCtrl->GetYComp();
|
||||||
|
vSwp.x -= pCtrl->GetXComp();
|
||||||
|
}
|
||||||
|
::WinSetWindowPos( pChild->GetHWND()
|
||||||
|
,HWND_TOP
|
||||||
|
,vSwp.x
|
||||||
|
,vSwp.y
|
||||||
|
,vSwp.cx
|
||||||
|
,vSwp.cy
|
||||||
|
,SWP_MOVE
|
||||||
|
);
|
||||||
|
::WinQueryWindowPos(pChild->GetHWND(), &vSwp);
|
||||||
|
pChild = NULL;
|
||||||
|
}
|
||||||
|
} // end of wxFrame::AlterChildPos
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get size *available for subwindows* i.e. excluding menu bar, toolbar etc.
|
// Get size *available for subwindows* i.e. excluding menu bar, toolbar etc.
|
||||||
//
|
//
|
||||||
@@ -375,6 +422,7 @@ bool wxFrame::Show(
|
|||||||
|
|
||||||
::WinQueryWindowPos(m_hFrame, &vSwp);
|
::WinQueryWindowPos(m_hFrame, &vSwp);
|
||||||
m_bIconized = vSwp.fl & SWP_MINIMIZE;
|
m_bIconized = vSwp.fl & SWP_MINIMIZE;
|
||||||
|
::WinQueryWindowPos(m_hWnd, &m_vSwpClient);
|
||||||
::WinSendMsg(m_hFrame, WM_UPDATEFRAME, (MPARAM)~0, 0);
|
::WinSendMsg(m_hFrame, WM_UPDATEFRAME, (MPARAM)~0, 0);
|
||||||
::WinEnableWindow(m_hFrame, TRUE);
|
::WinEnableWindow(m_hFrame, TRUE);
|
||||||
vEvent.SetEventObject(this);
|
vEvent.SetEventObject(this);
|
||||||
@@ -518,6 +566,7 @@ void wxFrame::PositionStatusBar()
|
|||||||
if (m_frameStatusBar)
|
if (m_frameStatusBar)
|
||||||
{
|
{
|
||||||
int nWidth;
|
int nWidth;
|
||||||
|
int nY;
|
||||||
int nStatbarWidth;
|
int nStatbarWidth;
|
||||||
int nStatbarHeight;
|
int nStatbarHeight;
|
||||||
HWND hWndClient;
|
HWND hWndClient;
|
||||||
@@ -525,21 +574,24 @@ void wxFrame::PositionStatusBar()
|
|||||||
RECTL vFRect;
|
RECTL vFRect;
|
||||||
|
|
||||||
::WinQueryWindowRect(m_hFrame, &vRect);
|
::WinQueryWindowRect(m_hFrame, &vRect);
|
||||||
|
nY = vRect.yTop;
|
||||||
::WinMapWindowPoints(m_hFrame, HWND_DESKTOP, (PPOINTL)&vRect, 2);
|
::WinMapWindowPoints(m_hFrame, HWND_DESKTOP, (PPOINTL)&vRect, 2);
|
||||||
vFRect = vRect;
|
vFRect = vRect;
|
||||||
::WinCalcFrameRect(m_hFrame, &vRect, TRUE);
|
::WinCalcFrameRect(m_hFrame, &vRect, TRUE);
|
||||||
nWidth = vRect.xRight - vRect.xLeft;
|
nWidth = vRect.xRight - vRect.xLeft;
|
||||||
|
nY = nY - (vRect.yBottom - vFRect.yBottom);
|
||||||
|
|
||||||
m_frameStatusBar->GetSize( &nStatbarWidth
|
m_frameStatusBar->GetSize( &nStatbarWidth
|
||||||
,&nStatbarHeight
|
,&nStatbarHeight
|
||||||
);
|
);
|
||||||
|
|
||||||
|
nY= nY - nStatbarHeight;
|
||||||
//
|
//
|
||||||
// Since we wish the status bar to be directly under the client area,
|
// Since we wish the status bar to be directly under the client area,
|
||||||
// we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS.
|
// we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS.
|
||||||
//
|
//
|
||||||
m_frameStatusBar->SetSize( vRect.xLeft - vFRect.xLeft
|
m_frameStatusBar->SetSize( vRect.xLeft - vFRect.xLeft
|
||||||
,vRect.yBottom - vFRect.yBottom
|
,nY
|
||||||
,nWidth
|
,nWidth
|
||||||
,nStatbarHeight
|
,nStatbarHeight
|
||||||
);
|
);
|
||||||
@@ -1056,6 +1108,17 @@ bool wxFrame::OS2Create(
|
|||||||
// Now size everything. If adding a menu the client will need to be resized.
|
// Now size everything. If adding a menu the client will need to be resized.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
if (pParent)
|
||||||
|
{
|
||||||
|
nY = pParent->GetSize().y - (nY + nHeight);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RECTL vRect;
|
||||||
|
|
||||||
|
::WinQueryWindowRect(HWND_DESKTOP, &vRect);
|
||||||
|
nY = vRect.yTop - (nY + nHeight);
|
||||||
|
}
|
||||||
if (!::WinSetWindowPos( m_hFrame
|
if (!::WinSetWindowPos( m_hFrame
|
||||||
,HWND_TOP
|
,HWND_TOP
|
||||||
,nX
|
,nX
|
||||||
@@ -1070,23 +1133,6 @@ bool wxFrame::OS2Create(
|
|||||||
wxLogError("Error sizing frame. Error: %s\n", sError);
|
wxLogError("Error sizing frame. Error: %s\n", sError);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// We may have to be smarter here when variable sized toolbars are added!
|
|
||||||
//
|
|
||||||
if (!::WinSetWindowPos( m_hWnd
|
|
||||||
,HWND_TOP
|
|
||||||
,nX // + 20
|
|
||||||
,nY // + 20
|
|
||||||
,nWidth // - 60
|
|
||||||
,nHeight // - 60
|
|
||||||
,SWP_SIZE | SWP_MOVE | SWP_ACTIVATE | SWP_ZORDER
|
|
||||||
))
|
|
||||||
{
|
|
||||||
vError = ::WinGetLastError(vHabmain);
|
|
||||||
sError = wxPMErrorToStr(vError);
|
|
||||||
wxLogError("Error sizing client. Error: %s\n", sError);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} // end of wxFrame::OS2Create
|
} // end of wxFrame::OS2Create
|
||||||
|
|
||||||
@@ -1446,6 +1492,7 @@ bool wxFrame::HandleSize(
|
|||||||
|
|
||||||
vEvent.SetEventObject(this);
|
vEvent.SetEventObject(this);
|
||||||
bProcessed = GetEventHandler()->ProcessEvent(vEvent);
|
bProcessed = GetEventHandler()->ProcessEvent(vEvent);
|
||||||
|
AlterChildPos();
|
||||||
}
|
}
|
||||||
return bProcessed;
|
return bProcessed;
|
||||||
} // end of wxFrame::HandleSize
|
} // end of wxFrame::HandleSize
|
||||||
|
@@ -1495,8 +1495,8 @@ GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname)
|
|||||||
{
|
{
|
||||||
#else
|
#else
|
||||||
/* Use gethostbyname by default */
|
/* Use gethostbyname by default */
|
||||||
// int val = 1; //VA doesn't like constants in conditional expressions at all
|
int val = 1; //VA doesn't like constants in conditional expressions at all
|
||||||
if (1)
|
if (val)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
struct in_addr *array_addr;
|
struct in_addr *array_addr;
|
||||||
|
@@ -291,6 +291,7 @@ COMMONOBJS = \
|
|||||||
..\common\$D\serbase.obj \
|
..\common\$D\serbase.obj \
|
||||||
..\common\$D\sizer.obj \
|
..\common\$D\sizer.obj \
|
||||||
..\common\$D\socket.obj \
|
..\common\$D\socket.obj \
|
||||||
|
..\common\$D\statbar.obj \
|
||||||
..\common\$D\strconv.obj \
|
..\common\$D\strconv.obj \
|
||||||
..\common\$D\stream.obj \
|
..\common\$D\stream.obj \
|
||||||
..\common\$D\string.obj \
|
..\common\$D\string.obj \
|
||||||
@@ -418,6 +419,7 @@ COMLIBOBJS3 = \
|
|||||||
serbase.obj \
|
serbase.obj \
|
||||||
sizer.obj \
|
sizer.obj \
|
||||||
socket.obj \
|
socket.obj \
|
||||||
|
statbar.obj \
|
||||||
strconv.obj \
|
strconv.obj \
|
||||||
stream.obj \
|
stream.obj \
|
||||||
string.obj \
|
string.obj \
|
||||||
@@ -780,6 +782,7 @@ $(COMLIBOBJS3):
|
|||||||
copy ..\common\$D\serbase.obj
|
copy ..\common\$D\serbase.obj
|
||||||
copy ..\common\$D\sizer.obj
|
copy ..\common\$D\sizer.obj
|
||||||
copy ..\common\$D\socket.obj
|
copy ..\common\$D\socket.obj
|
||||||
|
copy ..\common\$D\statbar.obj
|
||||||
copy ..\common\$D\strconv.obj
|
copy ..\common\$D\strconv.obj
|
||||||
copy ..\common\$D\stream.obj
|
copy ..\common\$D\stream.obj
|
||||||
copy ..\common\$D\string.obj
|
copy ..\common\$D\string.obj
|
||||||
|
@@ -73,7 +73,7 @@ static wxString TextToLabel(const wxString& rTitle)
|
|||||||
{
|
{
|
||||||
wxString Title;
|
wxString Title;
|
||||||
const wxChar *pc;
|
const wxChar *pc;
|
||||||
for (pc = rTitle; *pc != wxT('\0'); pc++ )
|
for (pc = rTitle.c_str(); *pc != wxT('\0'); pc++ )
|
||||||
{
|
{
|
||||||
if (*pc == wxT('&') )
|
if (*pc == wxT('&') )
|
||||||
{
|
{
|
||||||
@@ -85,10 +85,6 @@ static wxString TextToLabel(const wxString& rTitle)
|
|||||||
else
|
else
|
||||||
Title << wxT('~');
|
Title << wxT('~');
|
||||||
}
|
}
|
||||||
// else if (*pc == wxT('/'))
|
|
||||||
// {
|
|
||||||
// Title << wxT('\\');
|
|
||||||
// }
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( *pc == wxT('~') )
|
if ( *pc == wxT('~') )
|
||||||
|
@@ -62,7 +62,7 @@ static wxString TextToLabel(const wxString& rTitle)
|
|||||||
{
|
{
|
||||||
wxString Title;
|
wxString Title;
|
||||||
const wxChar *pc;
|
const wxChar *pc;
|
||||||
for (pc = rTitle; *pc != wxT('\0'); pc++ )
|
for (pc = rTitle.c_str(); *pc != wxT('\0'); pc++ )
|
||||||
{
|
{
|
||||||
if (*pc == wxT('&') )
|
if (*pc == wxT('&') )
|
||||||
{
|
{
|
||||||
@@ -74,10 +74,6 @@ static wxString TextToLabel(const wxString& rTitle)
|
|||||||
else
|
else
|
||||||
Title << wxT('~');
|
Title << wxT('~');
|
||||||
}
|
}
|
||||||
// else if (*pc == wxT('/'))
|
|
||||||
// {
|
|
||||||
// Title << wxT('\\');
|
|
||||||
// }
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( *pc == wxT('~') )
|
if ( *pc == wxT('~') )
|
||||||
|
@@ -171,7 +171,7 @@ bool wxTextCtrl::Create(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lSstyle |= ES_LEFT;
|
lSstyle |= ES_LEFT | ES_AUTOSCROLL | ES_MARGIN;
|
||||||
|
|
||||||
if (m_windowStyle & wxHSCROLL)
|
if (m_windowStyle & wxHSCROLL)
|
||||||
lSstyle |= ES_AUTOSCROLL;
|
lSstyle |= ES_AUTOSCROLL;
|
||||||
@@ -1130,7 +1130,7 @@ wxSize wxTextCtrl::DoGetBestSize() const
|
|||||||
wxGetCharSize(GetHWND(), &nCx, &nCy, (wxFont*)&GetFont());
|
wxGetCharSize(GetHWND(), &nCx, &nCy, (wxFont*)&GetFont());
|
||||||
|
|
||||||
int wText = DEFAULT_ITEM_WIDTH;
|
int wText = DEFAULT_ITEM_WIDTH;
|
||||||
int hText = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy);
|
int hText = (EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8);
|
||||||
|
|
||||||
if (m_windowStyle & wxTE_MULTILINE)
|
if (m_windowStyle & wxTE_MULTILINE)
|
||||||
{
|
{
|
||||||
|
@@ -762,7 +762,7 @@ bool wxColourDisplay()
|
|||||||
#else
|
#else
|
||||||
// I don't see how the PM display could not be color. Besides, this
|
// I don't see how the PM display could not be color. Besides, this
|
||||||
// was leaking DCs and PSs!!! MN
|
// was leaking DCs and PSs!!! MN
|
||||||
return true;
|
return TRUE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -388,37 +388,12 @@ bool wxWindowOS2::Create(
|
|||||||
|
|
||||||
pParent->AddChild(this);
|
pParent->AddChild(this);
|
||||||
hParent = GetWinHwnd(pParent);
|
hParent = GetWinHwnd(pParent);
|
||||||
//
|
|
||||||
// OS2 uses normal coordinates, no bassackwards Windows ones
|
|
||||||
//
|
|
||||||
if (pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
|
|
||||||
pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
|
|
||||||
)
|
|
||||||
{
|
|
||||||
wxWindow* pGrandParent = NULL;
|
|
||||||
|
|
||||||
pGrandParent = pParent->GetParent();
|
|
||||||
if (pGrandParent)
|
|
||||||
nTempy = pGrandParent->GetSize().y - (vPos.y + rSize.y);
|
|
||||||
else
|
|
||||||
nTempy = pParent->GetSize().y - (vPos.y + rSize.y);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
nTempy = pParent->GetSize().y - (vPos.y + rSize.y);
|
|
||||||
vPos.y = nTempy;
|
|
||||||
if ( pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
|
if ( pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
|
||||||
pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
|
pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
|
||||||
)
|
)
|
||||||
ulCreateFlags |= WS_CLIPSIBLINGS;
|
ulCreateFlags |= WS_CLIPSIBLINGS;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
RECTL vRect;
|
|
||||||
|
|
||||||
::WinQueryWindowRect(HWND_DESKTOP, &vRect);
|
|
||||||
hParent = HWND_DESKTOP;
|
|
||||||
vPos.y = vRect.yTop - (vPos.y + rSize.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Most wxSTYLES are really PM Class specific styles and will be
|
// Most wxSTYLES are really PM Class specific styles and will be
|
||||||
@@ -614,10 +589,72 @@ bool wxWindowOS2::SetFont(
|
|||||||
|
|
||||||
if (hWnd != 0)
|
if (hWnd != 0)
|
||||||
{
|
{
|
||||||
wxChar zFont[128];
|
char zFont[128];
|
||||||
|
char zFacename[30];
|
||||||
|
char zWeight[30];
|
||||||
|
char zStyle[30];
|
||||||
|
|
||||||
sprintf(zFont, "%d.%s", rFont.GetPointSize(), rFont.GetFaceName().c_str());
|
//
|
||||||
return (bool)::WinSetPresParam(hWnd, PP_FONTNAMESIZE, strlen(zFont), (PVOID)zFont);
|
// The fonts available for Presentation Params are just three
|
||||||
|
// outline fonts, the rest are available to the GPI, so we must
|
||||||
|
// map the families to one of these three
|
||||||
|
//
|
||||||
|
switch(rFont.GetFamily())
|
||||||
|
{
|
||||||
|
case wxSCRIPT:
|
||||||
|
case wxDECORATIVE:
|
||||||
|
case wxROMAN:
|
||||||
|
strcpy(zFacename,"Times New Roman");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxTELETYPE:
|
||||||
|
case wxMODERN:
|
||||||
|
strcpy(zFacename, "Courier");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxSWISS:
|
||||||
|
case wxDEFAULT:
|
||||||
|
default:
|
||||||
|
strcpy(zFacename, "Helvetica");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(rFont.GetWeight())
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case wxNORMAL:
|
||||||
|
case wxLIGHT:
|
||||||
|
zWeight[0] = '\0';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxBOLD:
|
||||||
|
case wxFONTWEIGHT_MAX:
|
||||||
|
strcpy(zWeight, "Bold");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch(rFont.GetStyle())
|
||||||
|
{
|
||||||
|
case wxITALIC:
|
||||||
|
case wxSLANT:
|
||||||
|
strcpy(zStyle, "Italic");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
zStyle[0] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sprintf(zFont, "%d.%s", rFont.GetPointSize(), zFacename);
|
||||||
|
if (zWeight[0] != '\0')
|
||||||
|
{
|
||||||
|
strcat(zFont, " ");
|
||||||
|
strcat(zFont, zWeight);
|
||||||
|
}
|
||||||
|
if (zStyle[0] != '\0')
|
||||||
|
{
|
||||||
|
strcat(zFont, " ");
|
||||||
|
strcat(zFont, zStyle);
|
||||||
|
}
|
||||||
|
::WinSetPresParam(hWnd, PP_FONTNAMESIZE, strlen(zFont) + 1, (PVOID)zFont);
|
||||||
}
|
}
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
@@ -1498,29 +1535,41 @@ void wxWindowOS2::DoMoveWindow(
|
|||||||
, int nHeight
|
, int nHeight
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if 0 // x and y coords should already be in os2 coordinates
|
|
||||||
RECTL vRect;
|
RECTL vRect;
|
||||||
HWND hParent;
|
HWND hParent;
|
||||||
wxWindow* pParent = GetParent();
|
wxWindow* pParent = GetParent();
|
||||||
|
|
||||||
if (pParent)
|
if (pParent)
|
||||||
|
{
|
||||||
hParent = GetWinHwnd(pParent);
|
hParent = GetWinHwnd(pParent);
|
||||||
|
if (pParent->IsKindOf(CLASSINFO(wxFrame)))
|
||||||
|
{
|
||||||
|
if (IsKindOf(CLASSINFO(wxStatusBar)) ||
|
||||||
|
IsKindOf(CLASSINFO(wxMenuBar)) ||
|
||||||
|
IsKindOf(CLASSINFO(wxToolBar))
|
||||||
|
)
|
||||||
|
nY = pParent->GetSize().y - (nY + nHeight);
|
||||||
else
|
else
|
||||||
hParent = HWND_DESKTOP;
|
nY = pParent->GetClientSize().y - (nY + nHeight);
|
||||||
::WinQueryWindowRect(hParent, &vRect);
|
}
|
||||||
|
else
|
||||||
|
nY = pParent->GetSize().y - (nY + nHeight);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RECTL vRect;
|
||||||
|
|
||||||
|
::WinQueryWindowRect(HWND_DESKTOP, &vRect);
|
||||||
nY = vRect.yTop - (nY + nHeight);
|
nY = vRect.yTop - (nY + nHeight);
|
||||||
#endif
|
}
|
||||||
if ( !::WinSetWindowPos( GetHwnd()
|
::WinSetWindowPos( GetHwnd()
|
||||||
,HWND_TOP
|
,HWND_TOP
|
||||||
,(LONG)nX
|
,(LONG)nX
|
||||||
,(LONG)nY
|
,(LONG)nY
|
||||||
,(LONG)nWidth
|
,(LONG)nWidth
|
||||||
,(LONG)nHeight
|
,(LONG)nHeight
|
||||||
,SWP_SIZE | SWP_MOVE
|
,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
|
||||||
))
|
);
|
||||||
{
|
|
||||||
wxLogLastError("MoveWindow");
|
|
||||||
}
|
|
||||||
} // end of wxWindowOS2::DoMoveWindow
|
} // end of wxWindowOS2::DoMoveWindow
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1745,55 +1794,94 @@ void wxWindowOS2::GetTextExtent(
|
|||||||
, const wxFont* pTheFont
|
, const wxFont* pTheFont
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const wxFont* pFontToUse = pTheFont;
|
POINTL avPoint[TXTBOX_COUNT];
|
||||||
HPS hPs;
|
POINTL vPtMin;
|
||||||
|
POINTL vPtMax;
|
||||||
|
int i;
|
||||||
|
int l;
|
||||||
|
FONTMETRICS vFM; // metrics structure
|
||||||
|
BOOL bRc;
|
||||||
|
char* pStr;
|
||||||
|
ERRORID vErrorCode; // last error id code
|
||||||
|
HPS hPS;
|
||||||
|
|
||||||
hPs = ::WinGetPS(GetHwnd());
|
|
||||||
|
|
||||||
// Just prevent compiler warnings
|
hPS = ::WinGetPS(GetHwnd());
|
||||||
wxString dummy = rString;
|
|
||||||
pX = pX;
|
|
||||||
pY = pY;
|
|
||||||
pDescent = pDescent;
|
|
||||||
pExternalLeading = pExternalLeading;
|
|
||||||
/*
|
|
||||||
// TODO: Will have to play with fonts later
|
|
||||||
|
|
||||||
if (!pFontToUse)
|
l = rString.Length();
|
||||||
pFontToUse = &m_font;
|
if (l > 0L)
|
||||||
|
|
||||||
HFONT hFnt = 0;
|
|
||||||
HFONT hFfontOld = 0;
|
|
||||||
|
|
||||||
if (pFontToUse && pFontToUse->Ok())
|
|
||||||
{
|
{
|
||||||
::GpiCreateLog
|
pStr = (PCH)rString.c_str();
|
||||||
hFnt = (HFONT)((wxFont *)pFontToUse)->GetResourceHandle(); // const_cast
|
|
||||||
if (hFnt)
|
//
|
||||||
hFontOld = (HFONT)SelectObject(dc,fnt);
|
// In world coordinates.
|
||||||
|
//
|
||||||
|
bRc = ::GpiQueryTextBox( hPS
|
||||||
|
,l
|
||||||
|
,pStr
|
||||||
|
,TXTBOX_COUNT // return maximum information
|
||||||
|
,avPoint // array of coordinates points
|
||||||
|
);
|
||||||
|
if (bRc)
|
||||||
|
{
|
||||||
|
vPtMin.x = avPoint[0].x;
|
||||||
|
vPtMax.x = avPoint[0].x;
|
||||||
|
vPtMin.y = avPoint[0].y;
|
||||||
|
vPtMax.y = avPoint[0].y;
|
||||||
|
for (i = 1; i < 4; i++)
|
||||||
|
{
|
||||||
|
if(vPtMin.x > avPoint[i].x) vPtMin.x = avPoint[i].x;
|
||||||
|
if(vPtMin.y > avPoint[i].y) vPtMin.y = avPoint[i].y;
|
||||||
|
if(vPtMax.x < avPoint[i].x) vPtMax.x = avPoint[i].x;
|
||||||
|
if(vPtMax.y < avPoint[i].y) vPtMax.y = avPoint[i].y;
|
||||||
}
|
}
|
||||||
|
bRc = ::GpiQueryFontMetrics( hPS
|
||||||
SIZE sizeRect;
|
,sizeof(FONTMETRICS)
|
||||||
TEXTMETRIC tm;
|
,&vFM
|
||||||
GetTextExtentPoint(dc, string, (int)string.Length(), &sizeRect);
|
);
|
||||||
GetTextMetrics(dc, &tm);
|
if (!bRc)
|
||||||
|
{
|
||||||
if ( fontToUse && fnt && hfontOld )
|
vPtMin.x = 0;
|
||||||
SelectObject(dc, hfontOld);
|
vPtMin.y = 0;
|
||||||
|
vPtMax.x = 0;
|
||||||
ReleaseDC(hWnd, dc);
|
vPtMax.y = 0;
|
||||||
|
}
|
||||||
if ( x )
|
}
|
||||||
*x = sizeRect.cx;
|
else
|
||||||
if ( y )
|
{
|
||||||
*y = sizeRect.cy;
|
vPtMin.x = 0;
|
||||||
if ( descent )
|
vPtMin.y = 0;
|
||||||
*descent = tm.tmDescent;
|
vPtMax.x = 0;
|
||||||
if ( externalLeading )
|
vPtMax.y = 0;
|
||||||
*externalLeading = tm.tmExternalLeading;
|
}
|
||||||
*/
|
}
|
||||||
::WinReleasePS(hPs);
|
else
|
||||||
}
|
{
|
||||||
|
vPtMin.x = 0;
|
||||||
|
vPtMin.y = 0;
|
||||||
|
vPtMax.x = 0;
|
||||||
|
vPtMax.y = 0;
|
||||||
|
}
|
||||||
|
if (pX)
|
||||||
|
*pX = (vPtMax.x - vPtMin.x + 1);
|
||||||
|
if (pY)
|
||||||
|
*pY = (vPtMax.y - vPtMin.y + 1);
|
||||||
|
if (pDescent)
|
||||||
|
{
|
||||||
|
if (bRc)
|
||||||
|
*pDescent = vFM.lMaxDescender;
|
||||||
|
else
|
||||||
|
*pDescent = 0;
|
||||||
|
}
|
||||||
|
if (pExternalLeading)
|
||||||
|
{
|
||||||
|
if (bRc)
|
||||||
|
*pExternalLeading = vFM.lExternalLeading;
|
||||||
|
else
|
||||||
|
*pExternalLeading = 0;
|
||||||
|
}
|
||||||
|
::WinReleasePS(hPS);
|
||||||
|
} // end of wxWindow::GetTextExtent
|
||||||
|
|
||||||
#if wxUSE_CARET && WXWIN_COMPATIBILITY
|
#if wxUSE_CARET && WXWIN_COMPATIBILITY
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -2448,7 +2536,7 @@ MRESULT wxWindowOS2::OS2WindowProc(
|
|||||||
if (uKeyFlags & KC_KEYUP)
|
if (uKeyFlags & KC_KEYUP)
|
||||||
{
|
{
|
||||||
//TODO: check if the cast to WXWORD isn't causing trouble
|
//TODO: check if the cast to WXWORD isn't causing trouble
|
||||||
bProcessed = HandleKeyUp((WXWORD)wParam, lParam);
|
bProcessed = HandleKeyUp((WXDWORD)wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else // keydown event
|
else // keydown event
|
||||||
@@ -2458,7 +2546,7 @@ MRESULT wxWindowOS2::OS2WindowProc(
|
|||||||
// return 0 now (we've handled it). DON't RETURN
|
// return 0 now (we've handled it). DON't RETURN
|
||||||
// we still need to process further
|
// we still need to process further
|
||||||
//
|
//
|
||||||
HandleKeyDown((WXWORD)wParam, lParam);
|
HandleKeyDown((WXDWORD)wParam, lParam);
|
||||||
if (uKeyFlags & KC_VIRTUALKEY)
|
if (uKeyFlags & KC_VIRTUALKEY)
|
||||||
{
|
{
|
||||||
USHORT uVk = SHORT2FROMMP((MPARAM)lParam);
|
USHORT uVk = SHORT2FROMMP((MPARAM)lParam);
|
||||||
@@ -2492,13 +2580,13 @@ MRESULT wxWindowOS2::OS2WindowProc(
|
|||||||
case VK_DOWN:
|
case VK_DOWN:
|
||||||
case VK_UP:
|
case VK_UP:
|
||||||
default:
|
default:
|
||||||
bProcessed = HandleChar((WXWORD)wParam, lParam);
|
bProcessed = HandleChar((WXDWORD)wParam, lParam);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else // WM_CHAR -- Always an ASCII character
|
else // WM_CHAR -- Always an ASCII character
|
||||||
{
|
{
|
||||||
bProcessed = HandleChar((WXWORD)wParam, lParam, TRUE);
|
bProcessed = HandleChar((WXDWORD)wParam, lParam, TRUE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2542,20 +2630,6 @@ MRESULT wxWindowOS2::OS2WindowProc(
|
|||||||
mResult = (MRESULT)(FALSE);
|
mResult = (MRESULT)(FALSE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//
|
|
||||||
// Instead of CTLCOLOR messages PM sends QUERYWINDOWPARAMS to
|
|
||||||
// things such as colors and fonts and such
|
|
||||||
//
|
|
||||||
case WM_QUERYWINDOWPARAMS:
|
|
||||||
{
|
|
||||||
PWNDPARAMS pWndParams = (PWNDPARAMS)wParam;
|
|
||||||
|
|
||||||
bProcessed = HandleWindowParams( pWndParams
|
|
||||||
,lParam
|
|
||||||
);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
// the return value for this message is ignored
|
// the return value for this message is ignored
|
||||||
case WM_SYSCOLORCHANGE:
|
case WM_SYSCOLORCHANGE:
|
||||||
bProcessed = HandleSysColorChange();
|
bProcessed = HandleSysColorChange();
|
||||||
@@ -2565,11 +2639,6 @@ MRESULT wxWindowOS2::OS2WindowProc(
|
|||||||
bProcessed = HandlePaletteChanged();
|
bProcessed = HandlePaletteChanged();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PRESPARAMCHANGED:
|
|
||||||
bProcessed = HandlePresParamChanged(wParam);
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
// move all drag and drops to wxDrg
|
// move all drag and drops to wxDrg
|
||||||
case WM_ENDDRAG:
|
case WM_ENDDRAG:
|
||||||
bProcessed = HandleEndDrag(wParam);
|
bProcessed = HandleEndDrag(wParam);
|
||||||
@@ -3282,14 +3351,6 @@ bool wxWindowOS2::HandleCtlColor(
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
} // end of wxWindowOS2::HandleCtlColor
|
} // end of wxWindowOS2::HandleCtlColor
|
||||||
|
|
||||||
bool wxWindowOS2::HandleWindowParams(
|
|
||||||
PWNDPARAMS WXUNUSED(pWndParams)
|
|
||||||
, WXLPARAM WXUNUSED(lParam)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// TODO: I'll do something here, just not sure what yet
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define for each class of dialog and control
|
// Define for each class of dialog and control
|
||||||
WXHBRUSH wxWindowOS2::OnCtlColor(WXHDC WXUNUSED(hDC),
|
WXHBRUSH wxWindowOS2::OnCtlColor(WXHDC WXUNUSED(hDC),
|
||||||
@@ -3315,21 +3376,6 @@ bool wxWindowOS2::HandlePaletteChanged()
|
|||||||
return GetEventHandler()->ProcessEvent(vEvent);
|
return GetEventHandler()->ProcessEvent(vEvent);
|
||||||
} // end of wxWindowOS2::HandlePaletteChanged
|
} // end of wxWindowOS2::HandlePaletteChanged
|
||||||
|
|
||||||
bool wxWindowOS2::HandlePresParamChanged(
|
|
||||||
WXWPARAM WXUNUSED(wParam)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// TODO: Once again I'll do something here when I need it
|
|
||||||
//
|
|
||||||
//wxQueryNewPaletteEvent event(GetId());
|
|
||||||
//event.SetEventObject(this);
|
|
||||||
// if the background is erased
|
|
||||||
// bProcessed = HandleEraseBkgnd((WXHDC)(HDC)wParam);
|
|
||||||
|
|
||||||
return FALSE; //GetEventHandler()->ProcessEvent(event) && event.GetPaletteRealized();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Responds to colour changes: passes event on to children.
|
// Responds to colour changes: passes event on to children.
|
||||||
//
|
//
|
||||||
@@ -3385,65 +3431,6 @@ bool wxWindowOS2::HandlePaint()
|
|||||||
vEvent.SetEventObject(this);
|
vEvent.SetEventObject(this);
|
||||||
bProcessed = GetEventHandler()->ProcessEvent(vEvent);
|
bProcessed = GetEventHandler()->ProcessEvent(vEvent);
|
||||||
|
|
||||||
if (!bProcessed)
|
|
||||||
{
|
|
||||||
HPS hPS;
|
|
||||||
|
|
||||||
hPS = ::WinBeginPaint( GetHwnd()
|
|
||||||
,NULLHANDLE
|
|
||||||
,&vRect
|
|
||||||
);
|
|
||||||
if(hPS)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
::GpiCreateLogColorTable( hPS
|
|
||||||
,0L
|
|
||||||
,LCOLF_CONSECRGB
|
|
||||||
,0L
|
|
||||||
,(LONG)wxTheColourDatabase->m_nSize
|
|
||||||
,(PLONG)wxTheColourDatabase->m_palTable
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
::GpiCreateLogColorTable( hPS
|
|
||||||
,0L
|
|
||||||
,LCOLF_RGB
|
|
||||||
,0L
|
|
||||||
,0L
|
|
||||||
,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
|
|
||||||
);
|
|
||||||
::WinQueryWindowRect(GetHwnd(), &vRect);
|
|
||||||
wxDrawBorder( hPS
|
|
||||||
,vRect
|
|
||||||
,m_dwExStyle
|
|
||||||
);
|
|
||||||
}
|
|
||||||
::WinEndPaint(hPS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
::GpiDestroyRegion(hPS, hRgn);
|
|
||||||
::WinReleasePS(hPS);
|
|
||||||
|
|
||||||
return GetEventHandler()->ProcessEvent(vEvent); //bProcessed;
|
return GetEventHandler()->ProcessEvent(vEvent); //bProcessed;
|
||||||
} // end of wxWindowOS2::HandlePaint
|
} // end of wxWindowOS2::HandlePaint
|
||||||
|
|
||||||
@@ -3755,7 +3742,7 @@ wxKeyEvent wxWindowOS2::CreateKeyEvent(
|
|||||||
// WM_KEYDOWN one
|
// WM_KEYDOWN one
|
||||||
//
|
//
|
||||||
bool wxWindowOS2::HandleChar(
|
bool wxWindowOS2::HandleChar(
|
||||||
WXWORD wParam
|
WXDWORD wParam
|
||||||
, WXLPARAM lParam
|
, WXLPARAM lParam
|
||||||
, bool isASCII
|
, bool isASCII
|
||||||
)
|
)
|
||||||
@@ -3849,7 +3836,7 @@ bool wxWindowOS2::HandleKeyDown(
|
|||||||
} // end of wxWindowOS2::HandleKeyDown
|
} // end of wxWindowOS2::HandleKeyDown
|
||||||
|
|
||||||
bool wxWindowOS2::HandleKeyUp(
|
bool wxWindowOS2::HandleKeyUp(
|
||||||
WXWORD wParam
|
WXDWORD wParam
|
||||||
, WXLPARAM lParam
|
, WXLPARAM lParam
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -3946,13 +3933,34 @@ bool wxWindowOS2::OS2OnScroll(
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
void wxGetCharSize(
|
void wxGetCharSize(
|
||||||
WXHWND WXUNUSED(hWnd)
|
WXHWND hWnd
|
||||||
, int* WXUNUSED(pX)
|
, int* pX
|
||||||
, int* WXUNUSED(pY)
|
, int* pY
|
||||||
,wxFont* WXUNUSED(pTheFont)
|
,wxFont* WXUNUSED(pTheFont)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// TODO: we'll do this later
|
FONTMETRICS vFM;
|
||||||
|
HPS hPS;
|
||||||
|
BOOL rc;
|
||||||
|
|
||||||
|
hPS =::WinGetPS(hWnd);
|
||||||
|
|
||||||
|
rc = ::GpiQueryFontMetrics(hPS, sizeof(FONTMETRICS), &vFM);
|
||||||
|
if (rc)
|
||||||
|
{
|
||||||
|
if (pX)
|
||||||
|
*pX = vFM.lAveCharWidth;
|
||||||
|
if (pY)
|
||||||
|
*pY = vFM.lEmHeight + vFM.lExternalLeading;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pX)
|
||||||
|
*pX = 10;
|
||||||
|
if (pY)
|
||||||
|
*pY = 15;
|
||||||
|
}
|
||||||
|
::WinReleasePS(hPS);
|
||||||
} // end of wxGetCharSize
|
} // end of wxGetCharSize
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Reference in New Issue
Block a user