X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/229de929f3576fb97aae8d8a00cdd663d0972c80..bd507486e07b742bb7acb118811efd60ee027859:/src/msw/tbar95.cpp?ds=sidebyside diff --git a/src/msw/tbar95.cpp b/src/msw/tbar95.cpp index f6fd243ceb..d782709dd2 100644 --- a/src/msw/tbar95.cpp +++ b/src/msw/tbar95.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "tbar95.h" #endif @@ -39,37 +39,18 @@ #include "wx/control.h" #endif -#if wxUSE_TOOLBAR && defined(__WIN95__) && wxUSE_TOOLBAR_NATIVE +#if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE && (!defined(_WIN32_WCE) || (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI)) #include "wx/toolbar.h" - -#if !defined(__GNUWIN32__) && !defined(__SALFORDC__) - #include "malloc.h" -#endif +#include "wx/sysopt.h" #include "wx/msw/private.h" -#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__)) - #include -#else - #include "wx/msw/gnuwin32/extra.h" -#endif - -#include "wx/msw/missing.h" +// include "properly" +#include "wx/msw/wrapcctl.h" #include "wx/app.h" // for GetComCtl32Version -#if defined(__MWERKS__) && defined(__WXMSW__) -// including for max definition doesn't seem -// to work using CodeWarrior 6 Windows. So we define it -// here. (Otherwise we get a undefined identifier 'max' -// later on in this file.) (Added by dimitri@shortcut.nl) -# ifndef max -# define max(a,b) (((a) > (b)) ? (a) : (b)) -# endif - -#endif - // ---------------------------------------------------------------------------- // conditional compilation // ---------------------------------------------------------------------------- @@ -125,6 +106,25 @@ IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl) +/* + TOOLBAR PROPERTIES + tool + bitmap + bitmap2 + tooltip + longhelp + radio (bool) + toggle (bool) + separator + style ( wxNO_BORDER | wxTB_HORIZONTAL) + bitmapsize + margins + packing + separation + + dontattachtoframe +*/ + BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase) EVT_MOUSE_EVENTS(wxToolBar::OnMouseEvent) EVT_SYS_COLOUR_CHANGED(wxToolBar::OnSysColourChanged) @@ -540,6 +540,22 @@ bool wxToolBar::Realize() MemoryHDC memoryDC2; #endif // USE_BITMAP_MASKS/!USE_BITMAP_MASKS + if (wxSystemOptions::HasOption(wxT("msw.remap")) && wxSystemOptions::GetOptionInt(wxT("msw.remap")) == 0) + { +#if USE_BITMAP_MASKS + dcAllButtons.SelectObject(wxNullBitmap); +#endif + + // Even if we're not remapping the bitmap + // content, we still have to remap the background. + hBitmap = (HBITMAP)MapBitmap((WXHBITMAP) hBitmap, + totalBitmapWidth, totalBitmapHeight); + +#if USE_BITMAP_MASKS + dcAllButtons.SelectObject(bitmap); +#endif + } + // the button position wxCoord x = 0; @@ -554,13 +570,15 @@ bool wxToolBar::Realize() const wxBitmap& bmp = tool->GetNormalBitmap(); if ( bmp.Ok() ) { + int xOffset = wxMax(0, (m_defaultWidth - bmp.GetWidth())/2); + int yOffset = wxMax(0, (m_defaultHeight - bmp.GetHeight())/2); #if USE_BITMAP_MASKS // notice the last parameter: do use mask - dcAllButtons.DrawBitmap(bmp, x, 0, TRUE); + dcAllButtons.DrawBitmap(bmp, x+xOffset, yOffset, TRUE); #else // !USE_BITMAP_MASKS SelectInHDC hdcSelector2(memoryDC2, GetHbitmapOf(bmp)); if ( !BitBlt(memoryDC, - x, 0, m_defaultWidth, m_defaultHeight, + x+xOffset, yOffset, m_defaultWidth, m_defaultHeight, memoryDC2, 0, 0, SRCCOPY) ) { @@ -588,9 +606,12 @@ bool wxToolBar::Realize() bitmap.SetHBITMAP(0); #endif // USE_BITMAP_MASKS/!USE_BITMAP_MASKS - // Map to system colours - hBitmap = (HBITMAP)MapBitmap((WXHBITMAP) hBitmap, - totalBitmapWidth, totalBitmapHeight); + if (!wxSystemOptions::HasOption(wxT("msw.remap")) || wxSystemOptions::GetOptionInt(wxT("msw.remap")) == 1) + { + // Map to system colours + hBitmap = (HBITMAP)MapBitmap((WXHBITMAP) hBitmap, + totalBitmapWidth, totalBitmapHeight); + } bool addBitmap = TRUE; @@ -796,7 +817,7 @@ bool wxToolBar::Realize() int left = -1; // TB_SETBUTTONINFO message is only supported by comctl32.dll 4.71+ -#if defined(_WIN32_IE) && (_WIN32_IE >= 0x400 ) +#ifdef TB_SETBUTTONINFO // available in headers, now check whether it is available now // (during run-time) if ( wxTheApp->GetComCtl32Version() >= 471 ) @@ -912,28 +933,30 @@ bool wxToolBar::MSWCommand(WXUINT WXUNUSED(cmd), WXWORD id) if ( !tool ) return FALSE; + bool toggled = false; // just to suppress warnings + if ( tool->CanBeToggled() ) { LRESULT state = ::SendMessage(GetHwnd(), TB_GETSTATE, id, 0); - tool->Toggle((state & TBSTATE_CHECKED) != 0); - } + toggled = (state & TBSTATE_CHECKED) != 0; + + // ignore the event when a radio button is released, as this doesn't seem to + // happen at all, and is handled otherwise + if ( tool->GetKind() == wxITEM_RADIO && !toggled ) + return TRUE; - bool toggled = tool->IsToggled(); + tool->Toggle(toggled); + UnToggleRadioGroup(tool); + } - // avoid sending the event when a radio button is released, this is not - // interesting - if ( !tool->CanBeToggled() || tool->GetKind() != wxITEM_RADIO || toggled ) + // OnLeftClick() can veto the button state change - for buttons which + // may be toggled only, of couse + if ( !OnLeftClick((int)id, toggled) && tool->CanBeToggled() ) { - // OnLeftClick() can veto the button state change - for buttons which - // may be toggled only, of couse - if ( !OnLeftClick((int)id, toggled) && tool->CanBeToggled() ) - { - // revert back - toggled = !toggled; - tool->SetToggle(toggled); + // revert back + tool->Toggle(!toggled); - ::SendMessage(GetHwnd(), TB_CHECKBUTTON, id, MAKELONG(toggled, 0)); - } + ::SendMessage(GetHwnd(), TB_CHECKBUTTON, id, MAKELONG(toggled, 0)); } return TRUE; @@ -1006,7 +1029,8 @@ wxSize wxToolBar::GetToolSize() const { // TB_GETBUTTONSIZE is supported from version 4.70 #if defined(_WIN32_IE) && (_WIN32_IE >= 0x300 ) \ - && !( defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 1, 0 ) ) + && !( defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 1, 0 ) ) \ + && !defined (__DIGITALMARS__) if ( wxTheApp->GetComCtl32Version() >= 470 ) { DWORD dw = ::SendMessage(GetHwnd(), TB_GETBUTTONSIZE, 0, 0); @@ -1344,7 +1368,7 @@ void wxToolBar::HandleMouseMove(WXWPARAM WXUNUSED(wParam), WXLPARAM lParam) } } -long wxToolBar::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) +WXLRESULT wxToolBar::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { switch ( nMsg ) {