X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5515f252cb0a46c2a200a14f0692e6db7c3aea47..fd9f42b6a94f9d68c66cf363093442b12cd4e953:/contrib/src/fl/newbmpbtn.cpp diff --git a/contrib/src/fl/newbmpbtn.cpp b/contrib/src/fl/newbmpbtn.cpp index 5cfdd6d637..e9262b913f 100644 --- a/contrib/src/fl/newbmpbtn.cpp +++ b/contrib/src/fl/newbmpbtn.cpp @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: No names yet. -// Purpose: Contrib. demo +// Name: newbmpbtn.cpp +// Purpose: wxNewBitmapButton enhanced bitmap button class. // Author: Aleksandras Gluchovas // Modified by: // Created: ??/09/98 // RCS-ID: $Id$ // Copyright: (c) Aleksandras Gluchovas -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -27,6 +27,10 @@ #include "wx/fl/newbmpbtn.h" #include "wx/utils.h" // import wxMin,wxMax macros +#ifdef __WXMSW__ +#include "wx/msw/private.h" +#endif + ///////////// button-label rendering helpers ////////////////// static int* create_array( int width, int height, int fill = 0 ) @@ -142,7 +146,7 @@ static void gray_out_pixmap( int* src, int* dest, int width, int height ) } while (1); } -// alg. for making the image look "grayed" (e.g. disabled button) +// algorithm for making the image look "grayed" (e.g. disabled button) // NOTE:: used GetPixel(), which is Windows-Only! void gray_out_image_on_dc( wxDC& dc, int width, int height ) @@ -151,8 +155,8 @@ void gray_out_image_on_dc( wxDC& dc, int width, int height ) wxColour bgCol; dc.GetPixel( 0, 0, &bgCol ); - wxPen darkPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW),1, wxSOLID ); - wxPen lightPen( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DHIGHLIGHT),1, wxSOLID ); + wxPen darkPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW),1, wxSOLID ); + wxPen lightPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT),1, wxSOLID ); wxPen bgPen ( bgCol, 1, wxSOLID ); int* src = create_array( width, height, MASK_BG ); @@ -198,15 +202,18 @@ void gray_out_image_on_dc( wxDC& dc, int width, int height ) /////////////////////////////// -/***** Impelementation for class wxNewBitmapButton *****/ +/***** Implementation for class wxNewBitmapButton *****/ IMPLEMENT_DYNAMIC_CLASS(wxNewBitmapButton, wxPanel) BEGIN_EVENT_TABLE( wxNewBitmapButton, wxPanel ) - EVT_LEFT_DOWN( wxNewBitmapButton::OnLButtonDown ) - EVT_LEFT_UP ( wxNewBitmapButton::OnLButtonUp ) - EVT_MOTION ( wxNewBitmapButton::OnMouseMove ) + EVT_LEFT_DOWN ( wxNewBitmapButton::OnLButtonDown ) + EVT_LEFT_UP ( wxNewBitmapButton::OnLButtonUp ) +// EVT_LEFT_DCLICK ( wxNewBitmapButton::OnLButtonDClick ) + EVT_LEFT_DCLICK ( wxNewBitmapButton::OnLButtonDown ) + EVT_ENTER_WINDOW( wxNewBitmapButton::OnMouseEnter ) + EVT_LEAVE_WINDOW( wxNewBitmapButton::OnMouseLeave ) EVT_SIZE ( wxNewBitmapButton::OnSize ) EVT_PAINT( wxNewBitmapButton::OnPaint ) @@ -245,15 +252,13 @@ wxNewBitmapButton::wxNewBitmapButton( const wxBitmap& labelBitmap, mDragStarted ( FALSE ), mIsPressed ( FALSE ), mIsInFocus( FALSE ), - mPrevPressedState( FALSE ), - mPrevInFocusState( FALSE ), mHasFocusedBmp( FALSE ), mFiredEventType( firedEventType ), mBlackPen( wxColour( 0, 0, 0), 1, wxSOLID ), - mDarkPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID ), - mGrayPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), - mLightPen( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DHIGHLIGHT), 1, wxSOLID ), + mDarkPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID ), + mGrayPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), + mLightPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT), 1, wxSOLID ), mIsCreated( FALSE ), mSizeIsSet( FALSE ) @@ -290,15 +295,13 @@ wxNewBitmapButton::wxNewBitmapButton( const wxString& bitmapFileName, mDragStarted ( FALSE ), mIsPressed ( FALSE ), mIsInFocus ( FALSE ), - mPrevPressedState( FALSE ), - mPrevInFocusState( FALSE ), mHasFocusedBmp( FALSE ), mFiredEventType( wxEVT_COMMAND_MENU_SELECTED ), mBlackPen( wxColour( 0, 0, 0), 1, wxSOLID ), - mDarkPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID ), - mGrayPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), - mLightPen( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DHIGHLIGHT), 1, wxSOLID ), + mDarkPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID ), + mGrayPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), + mLightPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT), 1, wxSOLID ), mIsCreated( FALSE ), mSizeIsSet( FALSE ) @@ -382,7 +385,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, { if ( destBmp != 0 ) return; - // render lables on-demand + // render labels on-demand wxMemoryDC srcDc; srcDc.SelectObject( *srcBmp ); @@ -400,7 +403,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, { long txtWidth, txtHeight; - srcDc.SetFont( wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT) ); + srcDc.SetFont( wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) ); srcDc.GetTextExtent( mLabelText, &txtWidth, &txtHeight ); if ( mTextAlignment == NB_ALIGN_TEXT_RIGHT ) @@ -430,7 +433,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, } else { - wxFAIL_MSG("Unsupported FL alignment type detected in wxNewBitmapButton::RenderLabelImage()"); + wxFAIL_MSG(wxT("Unsupported FL alignment type detected in wxNewBitmapButton::RenderLabelImage()")); } } else @@ -446,7 +449,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, wxMemoryDC destDc; destDc.SelectObject( *destBmp ); - wxBrush grayBrush( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_3DFACE), wxSOLID ); + wxBrush grayBrush( wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE), wxSOLID ); wxPen nullPen( wxColour(0,0,0), 1, wxTRANSPARENT ); destDc.SetBrush( grayBrush ); @@ -483,67 +486,17 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, pTopWnd = pParent; } while (1); - destDc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT) ); + destDc.SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT) ); if ( isEnabled ) { - destDc.SetTextForeground( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNTEXT) ); + destDc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT) ); } else { - destDc.SetTextForeground( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW) ); + destDc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW) ); } - destDc.SetTextBackground( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNFACE) ); - - destDc.DrawText( mLabelText, txtPos.x, txtPos.y ); - } - - - destDc.SetBrush( grayBrush ); - destDc.SetPen( nullPen ); - - destDc.DrawRectangle( 0,0, destDim.x+1, destDim.y+1 ); - - if ( isPressed ) - { - ++imgPos.x; ++imgPos.y; - ++txtPos.x; ++txtPos.y; - } - - if ( hasImage ) - { - - destDc.Blit( imgPos.x, imgPos.y, - srcBmp->GetWidth()+1, - srcBmp->GetHeight()+1, - &srcDc, 0,0, wxCOPY,TRUE ); - } - - if ( hasText ) - { - wxWindow* pTopWnd = this; - - do - { - wxWindow* pParent = pTopWnd->GetParent(); - - if ( pParent == 0 ) - break; - - pTopWnd = pParent; - } while (1); - - destDc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT) ); - - if ( isEnabled ) - { - destDc.SetTextForeground( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNTEXT) ); - } - else - { - destDc.SetTextForeground( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW) ); - } - destDc.SetTextBackground( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNFACE) ); + destDc.SetTextBackground( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE) ); destDc.DrawText( mLabelText, txtPos.x, txtPos.y ); } @@ -554,7 +507,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, gray_out_image_on_dc( destDc, destDim.x, destDim.y ); #else wxBrush checkerBrush( wxBitmap( (const char*)_gDisableImage,8,8) ); - checkerBrush.SetColour( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE ) ); + checkerBrush.SetColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); destDc.SetBrush( checkerBrush ); destDc.DrawRectangle( imgPos.x, imgPos.y, srcBmp->GetWidth()+1, srcBmp->GetHeight()+1); #endif @@ -568,7 +521,14 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, destBmp->GetHeight() + mMarginY*2, 0 ); } + destDc.SelectObject( wxNullBitmap ); + +#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) + // Map to system colours + (void) wxToolBar::MapBitmap(destBmp->GetHBITMAP(), destBmp->GetWidth(), destBmp->GetHeight()); +#endif } + void wxNewBitmapButton::RenderAllLabelImages() { if ( !mIsCreated ) @@ -611,6 +571,26 @@ void wxNewBitmapButton::RenderLabelImages() } } +bool wxNewBitmapButton::Enable(bool enable) +{ + if ( enable != m_isEnabled ) + { + if ( mIsInFocus ) + { + mIsInFocus = FALSE; + } + + if ( mIsPressed ) + { + mIsPressed = FALSE; + } + + Refresh(); + } + + return wxPanel::Enable( enable ); +} + void wxNewBitmapButton::DrawDecorations( wxDC& dc ) { if ( mIsFlat ) @@ -674,13 +654,9 @@ void wxNewBitmapButton::SetAlignments( int alignText, void wxNewBitmapButton::OnLButtonDown( wxMouseEvent& event ) { - mPrevPressedState = FALSE; mDragStarted = TRUE; mIsPressed = TRUE; Refresh(); - - if ( !mIsInFocus ) - CaptureMouse(); } void wxNewBitmapButton::OnLButtonUp( wxMouseEvent& event ) @@ -690,11 +666,8 @@ void wxNewBitmapButton::OnLButtonUp( wxMouseEvent& event ) mDragStarted = FALSE; mIsPressed = FALSE; - mIsInFocus = FALSE; Refresh(); - ReleaseMouse(); - if ( IsInWindow( event.m_x, event.m_y ) ) { // fire event, if mouse was released @@ -714,37 +687,30 @@ bool wxNewBitmapButton::IsInWindow( int x, int y ) y < height ); } -void wxNewBitmapButton::OnMouseMove( wxMouseEvent& event ) +void wxNewBitmapButton::OnMouseEnter( wxMouseEvent& event ) { - mPrevPressedState=mIsPressed; - mPrevInFocusState=mIsInFocus; - if ( !mIsInFocus && IsInWindow( event.m_x, event.m_y ) ) - { - if ( !mDragStarted ) - CaptureMouse(); + bool prevIsInFocus = mIsInFocus; + if ( !mIsInFocus ) + { mIsInFocus = TRUE; } - else - if ( mIsInFocus && !IsInWindow( event.m_x, event.m_y ) ) + if ( prevIsInFocus != mIsInFocus ) { - mIsInFocus = FALSE; - - if ( !mDragStarted ) - ReleaseMouse(); + Refresh(); } +} - if ( mDragStarted ) +void wxNewBitmapButton::OnMouseLeave( wxMouseEvent& event ) +{ + bool prevIsInFocus = mIsInFocus; + bool prevIsPressed = mIsPressed; + if ( mIsInFocus ) { - if ( IsInWindow( event.m_x, event.m_y ) ) - - mIsPressed = TRUE; - else - mIsPressed = FALSE; + mIsInFocus = FALSE; + mIsPressed = FALSE; } - - if ((mIsPressed != mPrevPressedState) || - (mIsInFocus!=mPrevInFocusState)) + if ( prevIsInFocus != mIsInFocus || prevIsPressed != mIsPressed ) { Refresh(); } @@ -756,8 +722,7 @@ void wxNewBitmapButton::OnSize( wxSizeEvent& event ) } void wxNewBitmapButton::Reshape( ) -{ - +{ bool wasCreated = mIsCreated; mIsCreated = TRUE; @@ -766,7 +731,7 @@ void wxNewBitmapButton::Reshape( ) // in the case of loading button from stream, check if we // have non-empty image-file name, load if possible - if ( mImageFileName != "" ) + if ( mImageFileName != wxT("") ) { mDepressedBmp.LoadFile( mImageFileName, mImageFileType ); @@ -831,6 +796,6 @@ void wxNewBitmapButton::OnKillFocus( wxFocusEvent& event ) { // useless - wxMessageBox("kill-focus for button!"); + wxMessageBox(wxT("kill-focus for button!")); }