X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bd9396d52dc2118f2f527ecea55271e79a893ed4..a42aa5d7be12e5bb24aa0488892574c01cae5a5b:/utils/framelayout/src/newbmpbtn.cpp diff --git a/utils/framelayout/src/newbmpbtn.cpp b/utils/framelayout/src/newbmpbtn.cpp index 6ca0afb099..997820a60d 100644 --- a/utils/framelayout/src/newbmpbtn.cpp +++ b/utils/framelayout/src/newbmpbtn.cpp @@ -71,7 +71,6 @@ static int* create_array( int width, int height, int fill = 0 ) static void gray_out_pixmap( int* src, int* dest, int width, int height ) { // assuming the pixels along the edges are of the background color - int bgCol = GET_ELEM(src,0,0); int x = 0; int y = 1; @@ -80,9 +79,6 @@ static void gray_out_pixmap( int* src, int* dest, int width, int height ) { int cur = GET_ELEM(src,x,y); - int r = GET_RED(cur); - int g = GET_GREEN(cur); - int b = GET_BLUE(cur); if ( IS_IN_ARRAY(x-1,y-1) ) { @@ -152,8 +148,8 @@ void greay_out_image_on_dc( wxDC& dc, int width, int height ) wxColour bgCol; dc.GetPixel( 0, 0, &bgCol ); - wxPen darkPen ( wxColour(128,128,128),1, wxSOLID ); - wxPen lightPen( wxColour(255,255,255),1, wxSOLID ); + wxPen darkPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW),1, wxSOLID ); + wxPen lightPen( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DHIGHLIGHT),1, wxSOLID ); wxPen bgPen ( bgCol, 1, wxSOLID ); int* src = create_array( width, height, MASK_BG ); @@ -167,11 +163,6 @@ void greay_out_image_on_dc( wxDC& dc, int width, int height ) wxColour col; dc.GetPixel( x,y, &col ); - int r = col.Red(), - g = col.Green(), - b = col.Blue(); - - int o = MAKE_INT_COLOR( r,g,b ); GET_ELEM(src,x,y) = MAKE_INT_COLOR( col.Red(), col.Green(), col.Blue() ); } @@ -233,38 +224,38 @@ wxNewBitmapButton::wxNewBitmapButton( const wxBitmap& labelBitmap, int marginY, int textToLabelGap, bool isSticky) - : mpDepressedImg( NULL ), - mpPressedImg ( NULL ), - mpDisabledImg ( NULL ), - mpFocusedImg ( NULL ), - + : mTextToLabelGap ( textToLabelGap ), mMarginX( marginX ), mMarginY( marginY ), mTextAlignment( alignText ), + mIsSticky( isSticky ), mIsFlat( isFlat ), + mLabelText( labelText ), + mImageFileType( -1 ), + mDepressedBmp( labelBitmap ), + + mpDepressedImg( NULL ), + mpPressedImg ( NULL ), + mpDisabledImg ( NULL ), + mpFocusedImg ( NULL ), + - mIsPressed ( FALSE ), mDragStarted ( FALSE ), + mIsPressed ( FALSE ), + mIsInFocus( FALSE ), mPrevPressedState( FALSE ), - mTextToLabelGap ( textToLabelGap ), + mPrevInFocusState( FALSE ), + mHasFocusedBmp( FALSE ), + mFiredEventType( firedEventType ), mBlackPen( wxColour( 0, 0, 0), 1, wxSOLID ), - mDarkPen ( wxColour(128,128,128), 1, wxSOLID ), - mGrayPen ( wxColour(192,192,192), - 1, wxSOLID ), - mLightPen( wxColour(255,255,255), 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 ), - mFiredEventType( firedEventType ), - mIsSticky( isSticky ), mIsCreated( FALSE ), - mSizeIsSet( FALSE ), - - mHasFocusedBmp( FALSE ), - mIsInFocus( FALSE ), + mSizeIsSet( FALSE ) - mDepressedBmp( labelBitmap ), - mLabelText( labelText ), - mImageFileType( -1 ) { } @@ -279,40 +270,38 @@ wxNewBitmapButton::wxNewBitmapButton( const wxString& bitmapFileName, int textToLabelGap, bool isSticky) - : mpDepressedImg( NULL ), - mpPressedImg ( NULL ), - mpDisabledImg ( NULL ), - mpFocusedImg ( NULL ), - + : mTextToLabelGap ( 2 ), mMarginX( 2 ), mMarginY( 2 ), mTextAlignment( alignText ), + mIsSticky( FALSE ), mIsFlat( isFlat ), + mLabelText( labelText ), + mImageFileName( bitmapFileName ), + mImageFileType( bitmapFileType ), + + mpDepressedImg( NULL ), + mpPressedImg ( NULL ), + mpDisabledImg ( NULL ), + mpFocusedImg ( NULL ), - mIsPressed ( FALSE ), mDragStarted ( FALSE ), + mIsPressed ( FALSE ), + mIsInFocus ( FALSE ), mPrevPressedState( FALSE ), - mTextToLabelGap ( 2 ), + mPrevInFocusState( FALSE ), + mHasFocusedBmp( FALSE ), + mFiredEventType( wxEVT_COMMAND_MENU_SELECTED ), mBlackPen( wxColour( 0, 0, 0), 1, wxSOLID ), - mDarkPen ( wxColour(128,128,128), 1, wxSOLID ), - mGrayPen ( wxColour(192,192,192), - 1, wxSOLID ), - mLightPen( wxColour(255,255,255), 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 ), - mFiredEventType( wxEVT_COMMAND_MENU_SELECTED ), - mIsSticky( FALSE ), mIsCreated( FALSE ), - mSizeIsSet( FALSE ), - - mHasFocusedBmp( FALSE ), - mIsInFocus( FALSE ), + mSizeIsSet( FALSE ) - mLabelText( labelText ), - mImageFileName( bitmapFileName ), - mImageFileType( bitmapFileType ) { - //mDepressedBmp.LoadFile( bitmapFileName, bitmapFileType ); } wxNewBitmapButton::~wxNewBitmapButton(void) @@ -381,6 +370,11 @@ wxBitmap* wxNewBitmapButton::GetStateLabel() return mpDisabledImg; } +static const unsigned char _gDisableImage[] = { 0x55,0xAA,0x55,0xAA, + 0x55,0xAA,0x55,0xAA, + 0x55,0xAA,0x55,0xAA, + 0x55,0xAA,0x55,0xAA + }; void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, bool isEnabled, bool isPressed ) { @@ -390,7 +384,6 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, wxMemoryDC srcDc; srcDc.SelectObject( *srcBmp ); - wxFont fnt( 9, wxDECORATIVE , wxNORMAL, wxNORMAL ); bool hasText = ( mTextAlignment != NB_NO_TEXT ) && ( mLabelText.length() != 0 ); @@ -405,7 +398,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, { long txtWidth, txtHeight; - srcDc.SetFont( fnt ); + srcDc.SetFont( wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT) ); srcDc.GetTextExtent( mLabelText, &txtWidth, &txtHeight ); if ( mTextAlignment == NB_ALIGN_TEXT_RIGHT ) @@ -448,8 +441,7 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, wxMemoryDC destDc; destDc.SelectObject( *destBmp ); - // FOR NOW:: hard-coded label background - wxBrush grayBrush( wxColour(192,192,192), wxSOLID ); + wxBrush grayBrush( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_3DFACE), wxSOLID ); wxPen nullPen( wxColour(0,0,0), 1, wxTRANSPARENT ); destDc.SetBrush( grayBrush ); @@ -465,10 +457,11 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, if ( hasImage ) { + destDc.Blit( imgPos.x, imgPos.y, - srcBmp->GetWidth()+1, - srcBmp->GetHeight()+1, - &srcDc, 0,0, wxCOPY ); + srcBmp->GetWidth()+1, + srcBmp->GetHeight()+1, + &srcDc, 0,0, wxCOPY,TRUE ); } if ( hasText ) @@ -484,19 +477,75 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, pTopWnd = pParent; } while(1); - destDc.SetFont( fnt ); + destDc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT) ); - // FOR NOW:: hard-coded text colors - destDc.SetTextForeground( wxColour( 0, 0, 0) ); - destDc.SetTextBackground( wxColour(192,192,192) ); + 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.DrawText( mLabelText, txtPos.x, txtPos.y ); } - if ( !isEnabled ) + + 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.DrawText( mLabelText, txtPos.x, txtPos.y ); + } + + if ( !isEnabled ){ +#ifdef __WXMSW__ // This is currently MSW specific greay_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 ) ); + destDc.SetBrush( checkerBrush ); + destDc.DrawRectangle( imgPos.x, imgPos.y, srcBmp->GetWidth()+1, srcBmp->GetHeight()+1); +#endif + } // adjust button size to fit the new dimensions of the label if ( !mSizeIsSet && 0 ) { @@ -507,6 +556,17 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, ); } } +void wxNewBitmapButton::RenderAllLabelImages() +{ + if( !mIsCreated ) return; + RenderLabelImage( mpDisabledImg, &mDepressedBmp, FALSE ); + RenderLabelImage( mpPressedImg, &mDepressedBmp, TRUE, TRUE ); + RenderLabelImage( mpDepressedImg, &mDepressedBmp, TRUE, FALSE ); + if ( mHasFocusedBmp ){ + RenderLabelImage( mpFocusedImg, &mFocusedBmp, TRUE, FALSE ); + } +} + void wxNewBitmapButton::RenderLabelImages() { @@ -576,7 +636,8 @@ void wxNewBitmapButton::SetLabel(const wxBitmap& labelBitmap, mLabelText = labelText; mDepressedBmp = labelBitmap; - RenderLabelImages(); + //RenderLabelImages(); + RenderAllLabelImages(); } void wxNewBitmapButton::SetAlignments( int alignText, @@ -591,7 +652,8 @@ void wxNewBitmapButton::SetAlignments( int alignText, mTextAlignment = alignText; mTextToLabelGap = textToLabelGap; - RenderLabelImages(); + //RenderLabelImages(); + RenderAllLabelImages(); } // event handlers @@ -640,6 +702,8 @@ bool wxNewBitmapButton::IsInWindow( int x, int y ) void wxNewBitmapButton::OnMouseMove( wxMouseEvent& event ) { + mPrevPressedState=mIsPressed; + mPrevInFocusState=mIsInFocus; if ( !mIsInFocus && IsInWindow( event.m_x, event.m_y ) ) { if ( !mDragStarted ) @@ -663,16 +727,11 @@ void wxNewBitmapButton::OnMouseMove( wxMouseEvent& event ) mIsPressed = TRUE; else mIsPressed = FALSE; - - if ( mIsPressed != mPrevPressedState ) - - Refresh(); - - mPrevPressedState = mIsPressed; } - // FOR NOW:: - Refresh(); + if((mIsPressed != mPrevPressedState)||(mIsInFocus!=mPrevInFocusState)){ + Refresh(); + } } void wxNewBitmapButton::OnSize( wxSizeEvent& event ) @@ -682,6 +741,7 @@ void wxNewBitmapButton::OnSize( wxSizeEvent& event ) void wxNewBitmapButton::Reshape( ) { + bool wasCreated = mIsCreated; mIsCreated = TRUE; @@ -697,7 +757,8 @@ void wxNewBitmapButton::Reshape( ) //wxMessageBox("Image Loaded!!!"); } - RenderLabelImages(); + //RenderLabelImages(); + RenderAllLabelImages(); wxBitmap* pCurImg = GetStateLabel(); @@ -717,7 +778,7 @@ void wxNewBitmapButton::DrawLabel( wxDC& dc ) wxSizeEvent evt; OnSize( evt ); // fake it up! - RenderLabelImages(); + //RenderLabelImages(); pCurBmp = GetStateLabel(); } @@ -738,7 +799,7 @@ void wxNewBitmapButton::OnPaint( wxPaintEvent& event ) wxPaintDC dc(this); // first, make sure images for current state are prepared - RenderLabelImages(); + //RenderLabelImages(); DrawLabel( dc );