projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Reflect changes in stc.cpp in stc.cpp.in from which it's generated.
[wxWidgets.git]
/
src
/
generic
/
combog.cpp
diff --git
a/src/generic/combog.cpp
b/src/generic/combog.cpp
index 674e5f1806286c21dcf2012751b14f68acef7dd8..9d14f00991772162f2fea45c05f02c73dc63d9df 100644
(file)
--- a/
src/generic/combog.cpp
+++ b/
src/generic/combog.cpp
@@
-4,7
+4,6
@@
// Author: Jaakko Salli
// Modified by:
// Created: Apr-30-2006
// Author: Jaakko Salli
// Modified by:
// Created: Apr-30-2006
-// RCS-ID: $Id$
// Copyright: (c) 2005 Jaakko Salli
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// Copyright: (c) 2005 Jaakko Salli
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
@@
-32,6
+31,7
@@
#include "wx/combobox.h"
#include "wx/dcclient.h"
#include "wx/settings.h"
#include "wx/combobox.h"
#include "wx/dcclient.h"
#include "wx/settings.h"
+ #include "wx/textctrl.h"
#endif
#include "wx/dcbuffer.h"
#endif
#include "wx/dcbuffer.h"
@@
-41,36
+41,46
@@
#if defined(__WXUNIVERSAL__)
#if defined(__WXUNIVERSAL__)
-#define TEXTCTRLXADJUST 0 // position adjustment for wxTextCtrl, with zero indent
-#define TEXTCTRLYADJUST 0
+// position adjustment for wxTextCtrl, to achieve zero left margin
+// meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp
+#define TEXTCTRLXADJUST 0
+
#define TEXTXADJUST 0 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 19
#elif defined(__WXMSW__)
#define TEXTXADJUST 0 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 19
#elif defined(__WXMSW__)
-#define TEXTCTRLXADJUST 2 // position adjustment for wxTextCtrl, with zero indent
-#define TEXTCTRLYADJUST 3
+// position adjustment for wxTextCtrl, to achieve zero left margin
+// meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp
+#define TEXTCTRLXADJUST 2
+
#define TEXTXADJUST 0 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 17
#elif defined(__WXGTK__)
#define TEXTXADJUST 0 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 17
#elif defined(__WXGTK__)
-#define TEXTCTRLXADJUST -1 // position adjustment for wxTextCtrl, with zero indent
-#define TEXTCTRLYADJUST 0
+// position adjustment for wxTextCtrl, to achieve zero left margin
+// meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp
+#define TEXTCTRLXADJUST -1
+
#define TEXTXADJUST 1 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 23
#elif defined(__WXMAC__)
#define TEXTXADJUST 1 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 23
#elif defined(__WXMAC__)
-#define TEXTCTRLXADJUST 0 // position adjustment for wxTextCtrl, with zero indent
-#define TEXTCTRLYADJUST 0
+// position adjustment for wxTextCtrl, to achieve zero left margin
+// meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp
+#define TEXTCTRLXADJUST 0
+
#define TEXTXADJUST 0 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 22
#else
#define TEXTXADJUST 0 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 22
#else
-#define TEXTCTRLXADJUST 0 // position adjustment for wxTextCtrl, with zero indent
-#define TEXTCTRLYADJUST 0
+// position adjustment for wxTextCtrl, to achieve zero left margin
+// meaningless if LEFT_MARGIN_CAN_BE_SET set to 1 in combocmn.cpp
+#define TEXTCTRLXADJUST 0
+
#define TEXTXADJUST 0 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 19
#define TEXTXADJUST 0 // how much is read-only text's x adjusted
#define DEFAULT_DROPBUTTON_WIDTH 19
@@
-159,7
+169,8
@@
bool wxGenericComboCtrl::Create(wxWindow *parent,
border = wxBORDER_NONE;
Customize( wxCC_BUTTON_OUTSIDE_BORDER |
border = wxBORDER_NONE;
Customize( wxCC_BUTTON_OUTSIDE_BORDER |
- wxCC_NO_TEXT_AUTO_SELECT );
+ wxCC_NO_TEXT_AUTO_SELECT |
+ wxCC_BUTTON_STAYS_DOWN );
#endif
#endif
@@
-174,18
+185,20
@@
bool wxGenericComboCtrl::Create(wxWindow *parent,
pos,
size,
style | wxFULL_REPAINT_ON_RESIZE,
pos,
size,
style | wxFULL_REPAINT_ON_RESIZE,
-
wxDefaultV
alidator,
+
v
alidator,
name) )
return false;
// Create textctrl, if necessary
name) )
return false;
// Create textctrl, if necessary
- CreateTextCtrl( tcBorder
, validator
);
+ CreateTextCtrl( tcBorder );
// Add keyboard input handlers for main control and textctrl
InstallInputHandlers();
// Add keyboard input handlers for main control and textctrl
InstallInputHandlers();
- // Set background
- SetBackgroundStyle( wxBG_STYLE_CUSTOM ); // for double-buffering
+ // Set background style for double-buffering, when needed
+ // (cannot use when system draws background automatically)
+ if ( !HasTransparentBackground() )
+ SetBackgroundStyle( wxBG_STYLE_PAINT );
// SetInitialSize should be called last
SetInitialSize(size);
// SetInitialSize should be called last
SetInitialSize(size);
@@
-216,16
+229,24
@@
void wxGenericComboCtrl::OnResize()
#endif
// Move textctrl, if any, accordingly
#endif
// Move textctrl, if any, accordingly
- PositionTextCtrl( TEXTCTRLXADJUST
, TEXTCTRLYADJUST
);
+ PositionTextCtrl( TEXTCTRLXADJUST );
}
void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) )
{
}
void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) )
{
- wxSize sz = GetClientSize();
- wxAutoBufferedPaintDC dc(this);
+ // Determine wxDC to use based on need to double-buffer or
+ // use system-generated transparent background portions
+ wxDC* dcPtr;
+ if ( HasTransparentBackground() )
+ dcPtr = new wxPaintDC(this);
+ else
+ dcPtr = new wxAutoBufferedPaintDC(this);
+ wxDC& dc = *dcPtr;
- const wxRect& rectb = m_btnArea;
- wxRect rect = m_tcArea;
+ wxSize sz = GetClientSize();
+ const wxRect& butRect = m_btnArea;
+ wxRect tcRect = m_tcArea;
+ wxRect fullRect(0, 0, sz.x, sz.y);
// artificial simple border
if ( m_widthCustomBorder )
// artificial simple border
if ( m_widthCustomBorder )
@@
-233,16
+254,22
@@
void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) )
int customBorder = m_widthCustomBorder;
// Set border colour
int customBorder = m_widthCustomBorder;
// Set border colour
- wxPen pen1( wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT),
+#ifdef __WXMAC__
+ wxPen pen1( wxColour(133,133,133),
customBorder,
wxSOLID );
customBorder,
wxSOLID );
+#else
+ wxPen pen1( wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT),
+ customBorder,
+ wxPENSTYLE_SOLID);
+#endif
dc.SetPen( pen1 );
// area around both controls
dc.SetPen( pen1 );
// area around both controls
- wxRect rect2(
0,0,sz.x,sz.y
);
+ wxRect rect2(
fullRect
);
if ( m_iFlags & wxCC_IFLAG_BUTTON_OUTSIDE )
{
if ( m_iFlags & wxCC_IFLAG_BUTTON_OUTSIDE )
{
- rect2 =
m_tcArea
;
+ rect2 =
tcRect
;
if ( customBorder == 1 )
{
rect2.Inflate(1);
if ( customBorder == 1 )
{
rect2.Inflate(1);
@@
-265,44
+292,49
@@
void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) )
dc.DrawRectangle(rect2);
}
dc.DrawRectangle(rect2);
}
-#ifndef __WXMAC__ // see note in OnThemeChange
- wxColour winCol = GetBackgroundColour();
-#else
- wxColour winCol = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
-#endif
- dc.SetBrush(winCol);
- dc.SetPen(winCol);
+ // Clear the main background if the system doesn't do it by itself
+ if ( !HasTransparentBackground() &&
+ (tcRect.x > 0 || tcRect.y > 0) )
+ {
+ wxColour winCol = GetParent()->GetBackgroundColour();
+
dc.SetBrush(winCol);
+
dc.SetPen(winCol);
-
//wxLogDebug(wxT("hei: %i tcy: %i tchei: %i"),GetClientSize().y,m_tcArea.y,m_tcArea.heigh
t);
- //wxLogDebug(wxT("btnx: %i tcx: %i tcwid: %i"),m_btnArea.x,m_tcArea.x,m_tcArea.width);
+
dc.DrawRectangle(fullRec
t);
+ }
- // clear main background
- dc.DrawRectangle(rect);
-
if ( !m_btn )
{
// Standard button rendering
if ( !m_btn )
{
// Standard button rendering
- DrawButton(dc,
rectb
);
+ DrawButton(dc,
butRect
);
}
// paint required portion on the control
}
// paint required portion on the control
- if (
(!m_text || m_widthCustomPaint)
)
+ if (
!m_text || m_widthCustomPaint
)
{
wxASSERT( m_widthCustomPaint >= 0 );
{
wxASSERT( m_widthCustomPaint >= 0 );
+ // Clear the text-control area background
+ wxColour tcCol = GetBackgroundColour();
+ dc.SetBrush(tcCol);
+ dc.SetPen(tcCol);
+ dc.DrawRectangle(tcRect);
+
// this is intentionally here to allow drawed rectangle's
// right edge to be hidden
if ( m_text )
// this is intentionally here to allow drawed rectangle's
// right edge to be hidden
if ( m_text )
-
r
ect.width = m_widthCustomPaint;
+
tcR
ect.width = m_widthCustomPaint;
dc.SetFont( GetFont() );
dc.SetFont( GetFont() );
- dc.SetClippingRegion(
r
ect);
+ dc.SetClippingRegion(
tcR
ect);
if ( m_popupInterface )
if ( m_popupInterface )
- m_popupInterface->PaintComboControl(dc,
r
ect);
+ m_popupInterface->PaintComboControl(dc,
tcR
ect);
else
else
- wxComboPopup::DefaultPaintComboControl(this,
dc,r
ect);
+ wxComboPopup::DefaultPaintComboControl(this,
dc, tcR
ect);
}
}
+
+ delete dcPtr;
}
void wxGenericComboCtrl::OnMouseEvent( wxMouseEvent& event )
}
void wxGenericComboCtrl::OnMouseEvent( wxMouseEvent& event )
@@
-391,17
+423,7
@@
void wxGenericComboCtrl::SetCustomPaintWidth( int width )
tc->RemoveEventHandler(m_textEvtHandler);
delete m_textEvtHandler;
tc->RemoveEventHandler(m_textEvtHandler);
delete m_textEvtHandler;
- wxValidator* pValidator = tc->GetValidator();
- if ( pValidator )
- {
- pValidator = (wxValidator*) pValidator->Clone();
- CreateTextCtrl( tcCreateStyle, *pValidator );
- delete pValidator;
- }
- else
- {
- CreateTextCtrl( tcCreateStyle, wxDefaultValidator );
- }
+ CreateTextCtrl( tcCreateStyle );
InstallInputHandlers();
}
InstallInputHandlers();
}
@@
-426,7
+448,8
@@
bool wxGenericComboCtrl::IsKeyPopupToggle(const wxKeyEvent& event) const
}
else
{
}
else
{
- if ( keycode == WXK_DOWN && event.AltDown() )
+ if ( (keycode == WXK_DOWN && event.AltDown()) ||
+ (keycode == WXK_F4) )
return true;
}
return true;
}