From af11388a6210ffc2d588ea852cea103511c50f08 Mon Sep 17 00:00:00 2001 From: "J. Russell Smyth" Date: Wed, 17 Mar 1999 11:07:19 +0000 Subject: [PATCH] 1 - Moved settingsdlg.[h,cpp] and wxinfo.[h,cpp] to demo where they belong 2 - removed pf_sample from library - this was test code 3 - modified newbmpbutton to create all button images once at initial creation 4 - newbmpbutton only refreses when necessary 5 - non-msw platforms may now disable (enable(FALSE)) a button - this will half-grey the image and draw text in disabled color. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1941 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- utils/framelayout/samples/demo/Makefile.in | 6 +- utils/framelayout/samples/demo/fl_demo.cpp | 9 +- .../{src => samples/demo}/settingsdlg.cpp | 0 .../{src => samples/demo}/settingsdlg.h | 0 .../{src => samples/demo}/wxinfo.cpp | 0 .../{src => samples/demo}/wxinfo.h | 0 utils/framelayout/src/Makefile.in | 7 +- utils/framelayout/src/newbmpbtn.cpp | 189 ++++++++++++------ utils/framelayout/src/newbmpbtn.h | 4 +- 9 files changed, 141 insertions(+), 74 deletions(-) rename utils/framelayout/{src => samples/demo}/settingsdlg.cpp (100%) rename utils/framelayout/{src => samples/demo}/settingsdlg.h (100%) rename utils/framelayout/{src => samples/demo}/wxinfo.cpp (100%) rename utils/framelayout/{src => samples/demo}/wxinfo.h (100%) diff --git a/utils/framelayout/samples/demo/Makefile.in b/utils/framelayout/samples/demo/Makefile.in index 052f24b23e..57813c13ae 100644 --- a/utils/framelayout/samples/demo/Makefile.in +++ b/utils/framelayout/samples/demo/Makefile.in @@ -10,8 +10,10 @@ RULE=bin BIN_TARGET=fl_demo # define library sources -BIN_CPP_SRC=\ - fl_demo.cpp\ +BIN_CPP_SRC= \ + fl_demo.cpp \ + settingsdlg.cpp \ + wxinfo.cpp #define library objects BIN_OBJ=\ diff --git a/utils/framelayout/samples/demo/fl_demo.cpp b/utils/framelayout/samples/demo/fl_demo.cpp index 29c33308ba..60ee20f6ef 100644 --- a/utils/framelayout/samples/demo/fl_demo.cpp +++ b/utils/framelayout/samples/demo/fl_demo.cpp @@ -769,7 +769,7 @@ void MyFrame::AddSearchToolbars( wxFrameLayout& layout, wxWindow* pParent ) new cbDynToolBarDimHandler() ); - cbDimInfo sizes4( 430,35, // when docked horizontally + cbDimInfo sizes4( 450,35, // when docked horizontally 44,375, // when docked vertically 80,100, // when floated TRUE, // the bar is fixed-size @@ -790,8 +790,6 @@ void MyFrame::AddSearchToolbars( wxFrameLayout& layout, wxWindow* pParent ) pTBar2->AddTool( 4, wxBitmap("nextmark_icon") ); pTBar2->AddTool( 5, wxBitmap("prevmark_icon") ); - - wxDynamicToolBar* pTBar3 = new wxDynamicToolBar( mpInternalFrm, -1 ); pTBar3->AddTool( 1, wxBitmap("open_icon"), " Open " ); @@ -821,7 +819,6 @@ void MyFrame::AddSearchToolbars( wxFrameLayout& layout, wxWindow* pParent ) pTBar2->AddTool( 4, nextmark_xpm ); pTBar2->AddTool( 5, prevmark_xpm ); - wxDynamicToolBar* pTBar3 = new wxDynamicToolBar( mpInternalFrm, -1 ); pTBar3->AddTool( 1, wxBitmap(open_xpm), " Open " ); @@ -832,6 +829,8 @@ void MyFrame::AddSearchToolbars( wxFrameLayout& layout, wxWindow* pParent ) pTBar3->AddTool( 5, wxBitmap(copy_xpm), " Copy " ); pTBar3->AddTool( 6, wxBitmap(paste_xpm), " Paste " ); + pTBar3->EnableTool( 2, FALSE ); + wxDynamicToolBar* pTBar4 = new wxDynamicToolBar( mpInternalFrm, -1 ); pTBar4->AddTool( 1, wxBitmap(bookmarks_xpm), "Bookmarks ", TRUE ); @@ -839,6 +838,8 @@ void MyFrame::AddSearchToolbars( wxFrameLayout& layout, wxWindow* pParent ) pTBar4->AddTool( 3, wxBitmap(prevmark_xpm), "Prev bookmark ", TRUE ); //pTBar4->AddSeparator(); pTBar4->AddTool( 4, wxBitmap(search_xpm),"Search ", TRUE ); + + pTBar4->EnableTool( 4, FALSE ); #endif layout.AddBar( pTBar2, diff --git a/utils/framelayout/src/settingsdlg.cpp b/utils/framelayout/samples/demo/settingsdlg.cpp similarity index 100% rename from utils/framelayout/src/settingsdlg.cpp rename to utils/framelayout/samples/demo/settingsdlg.cpp diff --git a/utils/framelayout/src/settingsdlg.h b/utils/framelayout/samples/demo/settingsdlg.h similarity index 100% rename from utils/framelayout/src/settingsdlg.h rename to utils/framelayout/samples/demo/settingsdlg.h diff --git a/utils/framelayout/src/wxinfo.cpp b/utils/framelayout/samples/demo/wxinfo.cpp similarity index 100% rename from utils/framelayout/src/wxinfo.cpp rename to utils/framelayout/samples/demo/wxinfo.cpp diff --git a/utils/framelayout/src/wxinfo.h b/utils/framelayout/samples/demo/wxinfo.h similarity index 100% rename from utils/framelayout/src/wxinfo.h rename to utils/framelayout/samples/demo/wxinfo.h diff --git a/utils/framelayout/src/Makefile.in b/utils/framelayout/src/Makefile.in index 5e39eab3f9..dd44f2de11 100644 --- a/utils/framelayout/src/Makefile.in +++ b/utils/framelayout/src/Makefile.in @@ -40,13 +40,10 @@ hintanimpl.cpp \ newbmpbtn.cpp \ objstore.cpp \ panedrawpl.cpp \ -pf_sample.cpp \ rowdragpl.cpp \ rowlayoutpl.cpp \ -settingsdlg.cpp \ toolwnd.cpp \ -updatesmgr.cpp \ -wxinfo.cpp +updatesmgr.cpp #define library objects LIB_OBJ= \ @@ -64,7 +61,7 @@ ADD_COMPILE= include ../../../../template.mak install:: - @echo "Installing library files and headers for libwx_gl_gtk.." + @echo "Installing library files and headers for libwx_fl_gtk.." @echo " Creating directory.." @$(WXBASEDIR)/mkinstalldirs /usr/local/include/wx_fl @echo " Copying headers from framelayout/src" diff --git a/utils/framelayout/src/newbmpbtn.cpp b/utils/framelayout/src/newbmpbtn.cpp index 617abfbf75..3f2efd9216 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) ) { @@ -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,37 +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 ( 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 ), + mSizeIsSet( FALSE ) - mHasFocusedBmp( FALSE ), - mIsInFocus( FALSE ), - - mDepressedBmp( labelBitmap ), - mLabelText( labelText ), - mImageFileType( -1 ) { } @@ -278,39 +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 ( 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) @@ -379,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 ) { @@ -461,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,TRUE ); + srcBmp->GetWidth()+1, + srcBmp->GetHeight()+1, + &srcDc, 0,0, wxCOPY,TRUE ); } if ( hasText ) @@ -482,17 +479,73 @@ void wxNewBitmapButton::RenderLabelImage( wxBitmap*& destBmp, wxBitmap* srcBmp, destDc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT) ); - // Should be wxSYS_COLOUR_BTNTEXT, but gtk gives white? - destDc.SetTextForeground( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNTEXT) ); + 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 ) { @@ -503,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() { @@ -572,7 +636,8 @@ void wxNewBitmapButton::SetLabel(const wxBitmap& labelBitmap, mLabelText = labelText; mDepressedBmp = labelBitmap; - RenderLabelImages(); + //RenderLabelImages(); + RenderAllLabelImages(); } void wxNewBitmapButton::SetAlignments( int alignText, @@ -587,7 +652,8 @@ void wxNewBitmapButton::SetAlignments( int alignText, mTextAlignment = alignText; mTextToLabelGap = textToLabelGap; - RenderLabelImages(); + //RenderLabelImages(); + RenderAllLabelImages(); } // event handlers @@ -636,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 ) @@ -659,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 ) @@ -678,6 +741,7 @@ void wxNewBitmapButton::OnSize( wxSizeEvent& event ) void wxNewBitmapButton::Reshape( ) { + bool wasCreated = mIsCreated; mIsCreated = TRUE; @@ -693,7 +757,8 @@ void wxNewBitmapButton::Reshape( ) //wxMessageBox("Image Loaded!!!"); } - RenderLabelImages(); + //RenderLabelImages(); + RenderAllLabelImages(); wxBitmap* pCurImg = GetStateLabel(); @@ -713,7 +778,7 @@ void wxNewBitmapButton::DrawLabel( wxDC& dc ) wxSizeEvent evt; OnSize( evt ); // fake it up! - RenderLabelImages(); + //RenderLabelImages(); pCurBmp = GetStateLabel(); } @@ -734,7 +799,7 @@ void wxNewBitmapButton::OnPaint( wxPaintEvent& event ) wxPaintDC dc(this); // first, make sure images for current state are prepared - RenderLabelImages(); + //RenderLabelImages(); DrawLabel( dc ); diff --git a/utils/framelayout/src/newbmpbtn.h b/utils/framelayout/src/newbmpbtn.h index df25a45752..9d0c6315d0 100644 --- a/utils/framelayout/src/newbmpbtn.h +++ b/utils/framelayout/src/newbmpbtn.h @@ -42,11 +42,11 @@ protected: int mMarginY; int mTextAlignment; bool mIsSticky; + bool mIsFlat; wxString mLabelText; wxString mImageFileName; int mImageFileType; - bool mIsFlat; wxBitmap mDepressedBmp; // source image for rendering // labels for particular state @@ -64,6 +64,7 @@ protected: bool mIsPressed; bool mIsInFocus; bool mPrevPressedState; + bool mPrevInFocusState; bool mHasFocusedBmp; @@ -142,6 +143,7 @@ public: bool isPressed = FALSE); virtual void RenderLabelImages(); + virtual void RenderAllLabelImages(); // event handlers void OnLButtonDown( wxMouseEvent& event ); -- 2.45.2