diff --git a/include/wx/os2/region.h b/include/wx/os2/region.h index 442dee1586..d194d198e9 100644 --- a/include/wx/os2/region.h +++ b/include/wx/os2/region.h @@ -44,6 +44,16 @@ public: ); wxRegion(const wxRect& rRect); wxRegion(WXHRGN hRegion, WXHDC hPS); // Hangs on to this region + wxRegion( const wxBitmap& rBmp + ,const wxColour& rTransColour = wxNullColour + ,int nTolerance = 0 + ) + { + Union( rBmp + ,rTransColour + ,nTolerance + ); + } wxRegion(); ~wxRegion(); @@ -189,6 +199,23 @@ public: // wxRegionContain Contains(const wxRect& rRect) const; + // + // Convert the region to a B&W bitmap with the black pixels being inside + // the region. + // + wxBitmap ConvertToBitmap(void) const; + + // + // Use the non-transparent pixels of a wxBitmap for the region to combine + // with this region. If the bitmap has a mask then it will be used, + // otherwise the colour to be treated as transparent may be specified, + // along with an optional tolerance value. + // + bool Union( const wxBitmap& rBmp + ,const wxColour& rTransColour = wxNullColour + ,int nTolerance = 0 + ); + // // Internal // diff --git a/include/wx/os2/spinctrl.h b/include/wx/os2/spinctrl.h index bcda821de6..5a0983870b 100644 --- a/include/wx/os2/spinctrl.h +++ b/include/wx/os2/spinctrl.h @@ -115,6 +115,7 @@ protected: // void OnSpinChange(wxSpinEvent& rEvent); void OnChar(wxKeyEvent& rEvent); + void OnSetFocus(wxFocusEvent& rEvent); WXHWND m_hWndBuddy; static wxArraySpins m_svAllSpins; diff --git a/include/wx/os2/toplevel.h b/include/wx/os2/toplevel.h index 0ab1d94d19..b89beaf089 100644 --- a/include/wx/os2/toplevel.h +++ b/include/wx/os2/toplevel.h @@ -68,6 +68,7 @@ public: virtual void SendSizeEvent(void); virtual void SetIcon(const wxIcon& rIcon); virtual void SetIcons(const wxIconBundle& rIcons); + bool SetShape(const wxRegion& rRegion); virtual bool Show(bool bShow = TRUE); virtual bool ShowFullScreen( bool bShow diff --git a/src/os2/cursor.cpp b/src/os2/cursor.cpp index 73a793577c..69bdd17f80 100644 --- a/src/os2/cursor.cpp +++ b/src/os2/cursor.cpp @@ -311,6 +311,7 @@ wxCursor::wxCursor( ); break; } + ((wxCursorRefData *)m_refData)->m_bDestroyCursor = FALSE; } // end of wxCursor::wxCursor // Global cursor setting diff --git a/src/os2/makefile.va b/src/os2/makefile.va index c6b03a341f..2c6f216f4a 100644 --- a/src/os2/makefile.va +++ b/src/os2/makefile.va @@ -291,6 +291,7 @@ COMMONOBJS = \ ..\common\$D\protocol.obj \ ..\common\$D\quantize.obj \ ..\common\$D\radiocmn.obj \ + ..\common\$D\rgncmn.obj \ ..\common\$D\regex.obj \ ..\common\$D\resource.obj \ ..\common\$D\sckaddr.obj \ @@ -428,6 +429,7 @@ COMLIBOBJS3 = \ protocol.obj \ quantize.obj \ radiocmn.obj \ + rgncmn.obj \ regex.obj \ resource.obj \ sckaddr.obj \ @@ -461,10 +463,10 @@ COMLIBOBJS3 = \ wfstream.obj \ wincmn.obj \ wxchar.obj \ - wxexpr.obj \ - xpmdecod.obj + wxexpr.obj COMLIBOBJS4 = \ + xpmdecod.obj \ y_tab.obj \ zipstrm.obj \ zstream.obj @@ -796,6 +798,7 @@ $(COMLIBOBJS3): copy ..\common\$D\protocol.obj copy ..\common\$D\quantize.obj copy ..\common\$D\radiocmn.obj + copy ..\common\$D\rgncmn.obj copy ..\common\$D\regex.obj copy ..\common\$D\resource.obj copy ..\common\$D\sckaddr.obj @@ -830,9 +833,9 @@ $(COMLIBOBJS3): copy ..\common\$D\wincmn.obj copy ..\common\$D\wxchar.obj copy ..\common\$D\wxexpr.obj - copy ..\common\$D\xpmdecod.obj $(COMLIBOBJS4): + copy ..\common\$D\xpmdecod.obj copy ..\common\$D\y_tab.obj copy ..\common\$D\zipstrm.obj copy ..\common\$D\zstream.obj @@ -1198,9 +1201,9 @@ clean: $(PERIPH_CLEAN_TARGET) clean_png clean_zlib clean_jpeg clean_tiff rd ..\common\$D rd ..\html\$D rd ..\os2\$D - del $(LIBTARGET) + del ..\lib\wx.lib !if "$(WXMAKINGDLL)" == "1" - erase /N ..\..\lib\wx24.lib + del ..\lib\wx24.lib !endif erase /N $(COMMDIR)\y_tab.c erase /N $(COMMDIR)\lex_yy.c diff --git a/src/os2/radiobut.cpp b/src/os2/radiobut.cpp index 540bb7deff..8d1b543ad8 100644 --- a/src/os2/radiobut.cpp +++ b/src/os2/radiobut.cpp @@ -227,36 +227,42 @@ void wxRadioButton::SetValue( wxCHECK_RET(pNodeThis, _T("radio button not a child of its parent?")); - // - // Turn off all radio buttons before this one // - for ( wxWindowList::Node* pNodeBefore = pNodeThis->GetPrevious(); - pNodeBefore; - pNodeBefore = pNodeBefore->GetPrevious() ) + // If it's not the first item of the group ... + // + if ( !HasFlag(wxRB_GROUP) ) { - wxRadioButton* pBtn = wxDynamicCast( pNodeBefore->GetData() + // + // ...turn off all radio buttons before this one + // + for ( wxWindowList::Node* pNodeBefore = pNodeThis->GetPrevious(); + pNodeBefore; + pNodeBefore = pNodeBefore->GetPrevious() ) + { + wxRadioButton* pBtn = wxDynamicCast( pNodeBefore->GetData() ,wxRadioButton ); - if (!pBtn) - { - // - // The radio buttons in a group must be consecutive, so there - // are no more of them - // - break; - } - pBtn->SetValue(FALSE); - if (pBtn->HasFlag(wxRB_GROUP)) - { - // - // Even if there are other radio buttons before this one, - // they're not in the same group with us - // - break; + if (!pBtn) + { + // + // The radio buttons in a group must be consecutive, so there + // are no more of them + // + break; + } + pBtn->SetValue(FALSE); + if (pBtn->HasFlag(wxRB_GROUP)) + { + // + // Even if there are other radio buttons before this one, + // they're not in the same group with us + // + break; + } } } - // + // // ... and all after this one // for (wxWindowList::Node* pNodeAfter = pNodeThis->GetNext(); @@ -269,7 +275,7 @@ void wxRadioButton::SetValue( if (!pBtn || pBtn->HasFlag(wxRB_GROUP) ) { - // + // // No more buttons or the first button of the next group // break; diff --git a/src/os2/scrolbar.cpp b/src/os2/scrolbar.cpp index 741bd991e3..0cb4a16f80 100644 --- a/src/os2/scrolbar.cpp +++ b/src/os2/scrolbar.cpp @@ -224,6 +224,7 @@ bool wxScrollBar::OS2OnScroll ( ,m_windowId ); + vEvent.SetOrientation(IsVertical() ? wxVERTICAL : wxHORIZONTAL); vEvent.SetPosition(nPosition); vEvent.SetEventObject(this); return GetEventHandler()->ProcessEvent(vEvent); diff --git a/src/os2/spinctrl.cpp b/src/os2/spinctrl.cpp index d526cfa43f..938692dccd 100644 --- a/src/os2/spinctrl.cpp +++ b/src/os2/spinctrl.cpp @@ -49,6 +49,8 @@ wxArraySpins wxSpinCtrl::m_svAllSpins; IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl) BEGIN_EVENT_TABLE(wxSpinCtrl, wxSpinButton) + EVT_CHAR(wxSpinCtrl::OnChar) + EVT_SET_FOCUS(wxSpinCtrl::OnSetFocus) EVT_SPIN(-1, wxSpinCtrl::OnSpinChange) END_EVENT_TABLE() // ---------------------------------------------------------------------------- @@ -404,6 +406,18 @@ void wxSpinCtrl::OnSpinChange( } } // end of wxSpinCtrl::OnSpinChange +void wxSpinCtrl::OnSetFocus ( + wxFocusEvent& rEvent +) +{ + // + // When we get focus, give it to our buddy window as it needs it more than + // we do + // + ::WinSetFocus(HWND_DESKTOP, (HWND)m_hWndBuddy); + rEvent.Skip(); +} // end of wxSpinCtrl::OnSetFocus + bool wxSpinCtrl::ProcessTextCommand( WXWORD wCmd , WXWORD wId diff --git a/src/os2/stattext.cpp b/src/os2/stattext.cpp index 167caa3e86..d5cfd5c9e4 100644 --- a/src/os2/stattext.cpp +++ b/src/os2/stattext.cpp @@ -121,6 +121,7 @@ wxSize wxStaticText::DoGetBestSize() const int nHeightLineDefault = 0; int nHeightLine = 0; wxString sCurLine; + bool bLastWasAmpersand = FALSE; for (const wxChar *pc = sText; ; pc++) { @@ -161,6 +162,29 @@ wxSize wxStaticText::DoGetBestSize() const } else { + // + // We shouldn't take into account the '&' which just introduces the + // mnemonic characters and so are not shown on the screen -- except + // when it is preceded by another '&' in which case it stands for a + // literal ampersand + // + if (*pc == _T('&')) + { + if (!bLastWasAmpersand) + { + bLastWasAmpersand = TRUE; + + // + // Skip the statement adding pc to curLine below + // + continue; + } + + // + // It is a literal ampersand + // + bLastWasAmpersand = FALSE; + } sCurLine += *pc; } } diff --git a/src/os2/textctrl.cpp b/src/os2/textctrl.cpp index 3b2b97719a..21288dd90b 100644 --- a/src/os2/textctrl.cpp +++ b/src/os2/textctrl.cpp @@ -507,6 +507,16 @@ void wxTextCtrl::SetInsertionPointEnd() { long lPos = GetLastPosition(); + // + // We must not do anything if the caret is already there because calling + // SetInsertionPoint() thaws the controls if Freeze() had been called even + // if it doesn't actually move the caret anywhere and so the simple fact of + // doing it results in horrible flicker when appending big amounts of text + // to the control in a few chunks (see DoAddText() test in the text sample) + // + if (GetInsertionPoint() == GetLastPosition()) + return; + SetInsertionPoint(lPos); } // end of wxTextCtrl::SetInsertionPointEnd diff --git a/src/os2/toplevel.cpp b/src/os2/toplevel.cpp index f30cb9c990..325af5475c 100644 --- a/src/os2/toplevel.cpp +++ b/src/os2/toplevel.cpp @@ -801,7 +801,7 @@ void wxTopLevelWindowOS2::Maximize( // We can't maximize the hidden frame because it shows it as well, so // just remember that we should do it later in this case // - m_bMaximizeOnShow = TRUE; + m_bMaximizeOnShow = bMaximize; } } // end of wxTopLevelWindowOS2::Maximize diff --git a/src/os2/wx24.def b/src/os2/wx24.def index ac4d785b34..4acf6ef897 100644 --- a/src/os2/wx24.def +++ b/src/os2/wx24.def @@ -2126,6 +2126,8 @@ EXPORTS __vft12wxFileConfig12wxConfigBase ;wxFileConfigEntry::wxFileConfigEntry(wxFileConfigGroup*,const wxString&,int) __ct__17wxFileConfigEntryFP17wxFileConfigGroupRC8wxStringi + ;wxFileConfigGroup::SetLastEntry(wxFileConfigEntry*) + SetLastEntry__17wxFileConfigGroupFP17wxFileConfigEntry ;wxFileConfig::~wxFileConfig() __dt__12wxFileConfigFv ;wxFileConfigGroup::SetDirty() @@ -2312,10 +2314,10 @@ EXPORTS GetHomeDir__10wxFileNameFv ;wxFileName::AppendDir(const wxString&) AppendDir__10wxFileNameFRC8wxString - ;wxFileName::SplitPath(const wxString&,wxString*,wxString*,wxString*,wxString*,wxPathFormat) - SplitPath__10wxFileNameFRC8wxStringP8wxStringN3212wxPathFormat ;wxFileName::Normalize(int,const wxString&,wxPathFormat) Normalize__10wxFileNameFiRC8wxString12wxPathFormat + ;wxFileName::SplitPath(const wxString&,wxString*,wxString*,wxString*,wxString*,wxPathFormat) + SplitPath__10wxFileNameFRC8wxStringP8wxStringN3212wxPathFormat ;wxFileName::MakeRelativeTo(const wxString&,wxPathFormat) MakeRelativeTo__10wxFileNameFRC8wxString12wxPathFormat ;wxFileName::AssignDir(const wxString&,wxPathFormat) @@ -3221,11 +3223,13 @@ EXPORTS __vft7wxImage8wxObject ;wxImage::Rotate(double,const wxPoint&,unsigned long,wxPoint*) const Rotate__7wxImageCFdRC7wxPointUlP7wxPoint - ;wxImage::Replace(unsigned char,unsigned char,unsigned char,unsigned char,unsigned char,unsigned char) - Replace__7wxImageFUcN51 + ;wxImage::ShrinkBy(int,int) const + ShrinkBy__7wxImageCFiT1 wxNullImage ;wxImage::SaveFile(const wxString&,const wxString&) const SaveFile__7wxImageCFRC8wxStringT1 + ;wxImage::Replace(unsigned char,unsigned char,unsigned char,unsigned char,unsigned char,unsigned char) + Replace__7wxImageFUcN51 ;wxImage::LoadFile(const wxString&,const wxString&,int) LoadFile__7wxImageFRC8wxStringT1i ;wxImageRefData::wxImageRefData() @@ -4818,6 +4822,12 @@ EXPORTS ;PUBDEFs (Symbols available from object file): ;wxRadioBoxBase::GetNextItem(int,wxDirection,long) const GetNextItem__14wxRadioBoxBaseCFi11wxDirectionl + ;From object file: ..\common\rgncmn.cpp + ;PUBDEFs (Symbols available from object file): + ;wxRegion::Union(const wxBitmap&,const wxColour&,int) + Union__8wxRegionFRC8wxBitmapRC8wxColouri + ;wxRegion::ConvertToBitmap() const + ConvertToBitmap__8wxRegionCFv ;From object file: ..\common\regex.cpp ;PUBDEFs (Symbols available from object file): ;wxRegEx::Replace(wxString*,const wxString&,unsigned int) const @@ -11318,6 +11328,8 @@ EXPORTS HasParam__9wxHtmlTagCFRC8wxString ;wxHtmlTagsCache::QueryTag(int,int*,int*) QueryTag__15wxHtmlTagsCacheFiPiT2 + ;wxIsCDATAElement(const char*) + wxIsCDATAElement__FPCc ;wxHtmlTag::~wxHtmlTag() __dt__9wxHtmlTagFv ;wxHtmlTag::GetFirstSibling() const @@ -11407,6 +11419,8 @@ EXPORTS __as__18wxHtmlHistoryArrayFRC18wxHtmlHistoryArray ;wxHtmlWindow::SetRelatedStatusBar(int) SetRelatedStatusBar__12wxHtmlWindowFi + ;wxHtmlWindow::LoadFile(const wxFileName&) + LoadFile__12wxHtmlWindowFRC10wxFileName ;wxHtmlWindow::CleanUpStatics() CleanUpStatics__12wxHtmlWindowFv ;wxHtmlWindow::LoadPage(const wxString&) @@ -11483,10 +11497,12 @@ EXPORTS __dt__14wxHtmlPrintoutFv ;wxHtmlEasyPrinting::PageSetup() PageSetup__18wxHtmlEasyPrintingFv - ;wxHtmlPrintout::RenderPage(wxDC*,int) - RenderPage__14wxHtmlPrintoutFP4wxDCi + ;wxHtmlDCRenderer::SetFonts(wxString,wxString,const int*) + SetFonts__16wxHtmlDCRendererF8wxStringT1PCi ;wxHtmlPrintout::SetHeader(const wxString&,int) SetHeader__14wxHtmlPrintoutFRC8wxStringi + ;wxHtmlPrintout::RenderPage(wxDC*,int) + RenderPage__14wxHtmlPrintoutFP4wxDCi ;wxHtmlEasyPrinting::PreviewText(const wxString&,const wxString&) PreviewText__18wxHtmlEasyPrintingFRC8wxStringT1 ;wxHtmlDCRenderer::GetTotalHeight() @@ -11499,6 +11515,8 @@ EXPORTS OnBeginDocument__14wxHtmlPrintoutFiT1 ;wxHtmlEasyPrinting::SetFooter(const wxString&,int) SetFooter__18wxHtmlEasyPrintingFRC8wxStringi + ;wxHtmlPrintout::SetFonts(wxString,wxString,const int*) + SetFonts__14wxHtmlPrintoutF8wxStringT1PCi ;wxHtmlPrintout::GetPageInfo(int*,int*,int*,int*) GetPageInfo__14wxHtmlPrintoutFPiN31 ;wxHtmlEasyPrinting::DoPreview(wxHtmlPrintout*,wxHtmlPrintout*) @@ -14312,6 +14330,8 @@ EXPORTS SetFocus__10wxSpinCtrlFv ;wxSpinCtrl::SetValue(const wxString&) SetValue__10wxSpinCtrlFRC8wxString + ;wxSpinCtrl::OnSetFocus(wxFocusEvent&) + OnSetFocus__10wxSpinCtrlFR12wxFocusEvent ;wxSpinCtrl::sm_classwxSpinCtrl sm_classwxSpinCtrl__10wxSpinCtrl ;wxSpinCtrl::m_svAllSpins