1. clip the DC from wxEraseEvent under GTK - now redrawing works there too
2. added wxColourScheme::GetBackground() - still testing 3. implemented (but it is slightly broken) extended listbox interface git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/wxUNIVERSAL@8278 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -66,6 +66,7 @@ public:
|
|||||||
virtual void SetSelection(int n, bool select = TRUE) = 0;
|
virtual void SetSelection(int n, bool select = TRUE) = 0;
|
||||||
virtual void Select(int n) { SetSelection(n, TRUE); }
|
virtual void Select(int n) { SetSelection(n, TRUE); }
|
||||||
void Deselect(int n) { SetSelection(n, FALSE); }
|
void Deselect(int n) { SetSelection(n, FALSE); }
|
||||||
|
void DeselectAll(int itemToLeaveSelected = -1);
|
||||||
|
|
||||||
virtual bool SetStringSelection(const wxString& s, bool select = TRUE);
|
virtual bool SetStringSelection(const wxString& s, bool select = TRUE);
|
||||||
|
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
#pragma interface "colschem.h"
|
#pragma interface "colschem.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxWindow;
|
||||||
|
|
||||||
#include "wx/colour.h"
|
#include "wx/colour.h"
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -28,17 +30,28 @@ public:
|
|||||||
// the standard colours
|
// the standard colours
|
||||||
enum StdColour
|
enum StdColour
|
||||||
{
|
{
|
||||||
// the background and text colour for the control
|
// the background colour for a window
|
||||||
|
WINDOW,
|
||||||
|
|
||||||
|
// the different background and text colours for the control
|
||||||
CONTROL,
|
CONTROL,
|
||||||
|
CONTROL_PRESSED,
|
||||||
|
CONTROL_CURRENT,
|
||||||
|
|
||||||
|
// the label text for the normal and the disabled state
|
||||||
CONTROL_TEXT,
|
CONTROL_TEXT,
|
||||||
|
CONTROL_TEXT_DISABLED,
|
||||||
|
CONTROL_TEXT_DISABLED_SHADOW,
|
||||||
|
|
||||||
|
// the scrollbar background colour for the normal and pressed states
|
||||||
SCROLLBAR,
|
SCROLLBAR,
|
||||||
|
SCROLLBAR_PRESSED,
|
||||||
|
|
||||||
// the background and text colour for the highlighted item
|
// the background and text colour for the highlighted item
|
||||||
HIGHLIGHT,
|
HIGHLIGHT,
|
||||||
HIGHLIGHT_TEXT,
|
HIGHLIGHT_TEXT,
|
||||||
|
|
||||||
// these colours are used for drawing the shadows of 3D objects, use
|
// these colours are used for drawing the shadows of 3D objects
|
||||||
// only NORMAL in the renderers which don't use 3D shading
|
|
||||||
SHADOW_DARK,
|
SHADOW_DARK,
|
||||||
SHADOW_HIGHLIGHT,
|
SHADOW_HIGHLIGHT,
|
||||||
SHADOW_IN,
|
SHADOW_IN,
|
||||||
@@ -47,9 +60,11 @@ public:
|
|||||||
MAX
|
MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
// get the colour for the control in the state (combination of
|
// get a standard colour
|
||||||
// wxCONTROL_XXX values)
|
virtual wxColour Get(StdColour col) const = 0;
|
||||||
virtual wxColour Get(StdColour col, int flags = 0) const = 0;
|
|
||||||
|
// get the background colour for the given window
|
||||||
|
virtual wxColour GetBackground(wxWindow *win) const = 0;
|
||||||
|
|
||||||
// virtual dtor for any base class
|
// virtual dtor for any base class
|
||||||
virtual ~wxColourScheme();
|
virtual ~wxColourScheme();
|
||||||
@@ -58,4 +73,16 @@ public:
|
|||||||
// some people just can't spell it correctly :-)
|
// some people just can't spell it correctly :-)
|
||||||
typedef wxColourScheme wxColorScheme;
|
typedef wxColourScheme wxColorScheme;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// macros
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// retrieve the default colour from the theme or the given scheme
|
||||||
|
#define wxSCHEME_COLOUR(scheme, what) scheme->Get(wxColorScheme::what)
|
||||||
|
#define wxTHEME_COLOUR(what) wxSCHEME_COLOUR(wxTheme::Get(), what)
|
||||||
|
|
||||||
|
// get the background colour for the window in the current theme
|
||||||
|
#define wxTHEME_BG_COLOUR(win) \
|
||||||
|
wxTheme::Get()->GetColourScheme()->GetBackground(win)
|
||||||
|
|
||||||
#endif // _WX_UNIV_COLSCHEM_H_
|
#endif // _WX_UNIV_COLSCHEM_H_
|
||||||
|
@@ -86,7 +86,7 @@ public:
|
|||||||
// several overloaded versions but this will expose the problem of
|
// several overloaded versions but this will expose the problem of
|
||||||
// virtual function hiding we don't have here.
|
// virtual function hiding we don't have here.
|
||||||
virtual bool PerformAction(const wxControlAction& action,
|
virtual bool PerformAction(const wxControlAction& action,
|
||||||
long numArg = 0l,
|
long numArg = -1l,
|
||||||
const wxString& strArg = wxEmptyString);
|
const wxString& strArg = wxEmptyString);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@@ -37,6 +37,12 @@
|
|||||||
#define wxACTION_LISTBOX_SELECT _T("select") // select/focus
|
#define wxACTION_LISTBOX_SELECT _T("select") // select/focus
|
||||||
#define wxACTION_LISTBOX_UNSELECT _T("unselect") // unselect/unfocus
|
#define wxACTION_LISTBOX_UNSELECT _T("unselect") // unselect/unfocus
|
||||||
|
|
||||||
|
// do something with the selection globally (not for single selection ones)
|
||||||
|
#define wxACTION_LISTBOX_SELECTALL _T("selectall") // select all items
|
||||||
|
#define wxACTION_LISTBOX_UNSELECTALL _T("unselectall") // unselect all items
|
||||||
|
#define wxACTION_LISTBOX_SELTOGGLE _T("togglesel") // invert the selection
|
||||||
|
#define wxACTION_LISTBOX_EXTENDSEL _T("extend") // extend to item
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxListBox: a list of selectable items
|
// wxListBox: a list of selectable items
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -118,10 +124,13 @@ public:
|
|||||||
void ChangeCurrent(int diff);
|
void ChangeCurrent(int diff);
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
void Activate();
|
void Activate(int item);
|
||||||
void Select(bool sel = TRUE);
|
void Select(bool sel = TRUE, int item = -1);
|
||||||
void EnsureVisible();
|
void EnsureVisible();
|
||||||
|
|
||||||
|
void ExtendSelection(int itemTo);
|
||||||
|
void AnchorSelection(int itemFrom) { m_selAnchor = itemFrom; }
|
||||||
|
|
||||||
// get, calculating it if necessary, the number of items per page, the
|
// get, calculating it if necessary, the number of items per page, the
|
||||||
// height of each line and the max width of an item
|
// height of each line and the max width of an item
|
||||||
int GetItemsPerPage() const;
|
int GetItemsPerPage() const;
|
||||||
@@ -133,6 +142,9 @@ public:
|
|||||||
long numArg = 0l,
|
long numArg = 0l,
|
||||||
const wxString& strArg = wxEmptyString);
|
const wxString& strArg = wxEmptyString);
|
||||||
|
|
||||||
|
// let wxColourScheme choose the right colours for us
|
||||||
|
virtual bool IsContainerWindow() const { return TRUE; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual wxSize DoGetBestClientSize() const;
|
virtual wxSize DoGetBestClientSize() const;
|
||||||
virtual void DoDraw(wxControlRenderer *renderer);
|
virtual void DoDraw(wxControlRenderer *renderer);
|
||||||
@@ -203,6 +215,11 @@ private:
|
|||||||
// of the window
|
// of the window
|
||||||
bool m_currentChanged;
|
bool m_currentChanged;
|
||||||
|
|
||||||
|
// the anchor from which the selection is extended for the listboxes with
|
||||||
|
// wxLB_EXTENDED style - this is set to the last item which was selected
|
||||||
|
// by not extending the selection but by choosing it directly
|
||||||
|
int m_selAnchor;
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
DECLARE_DYNAMIC_CLASS(wxListBox)
|
DECLARE_DYNAMIC_CLASS(wxListBox)
|
||||||
};
|
};
|
||||||
|
@@ -56,7 +56,7 @@ public:
|
|||||||
virtual wxInputHandler *GetInputHandler(const wxString& control) = 0;
|
virtual wxInputHandler *GetInputHandler(const wxString& control) = 0;
|
||||||
|
|
||||||
// get the colour scheme for the control with this name
|
// get the colour scheme for the control with this name
|
||||||
virtual wxColourScheme *GetColourScheme(const wxString& control) = 0;
|
virtual wxColourScheme *GetColourScheme() = 0;
|
||||||
|
|
||||||
// implementation only from now on
|
// implementation only from now on
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
@@ -118,6 +118,36 @@ public:
|
|||||||
// operations
|
// operations
|
||||||
virtual void SetCurrent(bool doit = TRUE);
|
virtual void SetCurrent(bool doit = TRUE);
|
||||||
|
|
||||||
|
// methods used by wxColourScheme to choose the colours for this window
|
||||||
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
|
// return TRUE if this is a panel/canvas window which contains other
|
||||||
|
// controls only
|
||||||
|
virtual bool IsCanvasWindow() const { return FALSE; }
|
||||||
|
|
||||||
|
// return TRUE if this a container window which contains the other items:
|
||||||
|
// e.g, a listbox, listctrl, treectrl, ... and FALSE if it is a monolithic
|
||||||
|
// control (e.g. a button, checkbox, ...)
|
||||||
|
virtual bool IsContainerWindow() const { return FALSE; }
|
||||||
|
|
||||||
|
// return TRUE if this control can be highlighted when the mouse is over
|
||||||
|
// it (the theme decides itself whether it is really highlighted or not)
|
||||||
|
virtual bool CanBeHighlighted() const { return FALSE; }
|
||||||
|
|
||||||
|
// return TRUE if we should use the colours/fonts returned by the
|
||||||
|
// corresponding GetXXX() methods instead of the default ones
|
||||||
|
bool UseBgCol() const { return m_hasBgCol; }
|
||||||
|
bool UseFgCol() const { return m_hasFgCol; }
|
||||||
|
bool UseFont() const { return m_hasFont; }
|
||||||
|
|
||||||
|
// overridden base class methods
|
||||||
|
// -----------------------------
|
||||||
|
|
||||||
|
// remember that the font/colour was changed
|
||||||
|
virtual bool SetBackgroundColour(const wxColour& colour);
|
||||||
|
virtual bool SetForegroundColour(const wxColour& colour);
|
||||||
|
virtual bool SetFont(const wxFont& font);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// common part of all ctors
|
// common part of all ctors
|
||||||
void Init();
|
void Init();
|
||||||
@@ -172,8 +202,11 @@ protected:
|
|||||||
int m_alignBgBitmap;
|
int m_alignBgBitmap;
|
||||||
wxStretch m_stretchBgBitmap;
|
wxStretch m_stretchBgBitmap;
|
||||||
|
|
||||||
// is the mouse currently inside the window?
|
// more flags
|
||||||
bool m_isCurrent;
|
bool m_isCurrent:1; // is the mouse currently inside the window?
|
||||||
|
bool m_hasBgCol:1; // was the bg colour explicitly changed by user?
|
||||||
|
bool m_hasFgCol:1; // fg
|
||||||
|
bool m_hasFont:1; // font
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// the window scrollbars
|
// the window scrollbars
|
||||||
|
@@ -49,7 +49,7 @@
|
|||||||
#include "wx/univ/theme.h"
|
#include "wx/univ/theme.h"
|
||||||
|
|
||||||
//#define DEBUG_SCROLL
|
//#define DEBUG_SCROLL
|
||||||
#define DEBUG_LISTBOX
|
//#define DEBUG_LISTBOX
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// resources
|
// resources
|
||||||
@@ -319,7 +319,7 @@ MyUnivFrame::MyUnivFrame(const wxString& title)
|
|||||||
WXSIZEOF(choices), choices,
|
WXSIZEOF(choices), choices,
|
||||||
wxLB_MULTIPLE | wxLB_ALWAYS_SB);
|
wxLB_MULTIPLE | wxLB_ALWAYS_SB);
|
||||||
lbox = new wxListBox(this, -1, wxPoint(550, 300), wxDefaultSize,
|
lbox = new wxListBox(this, -1, wxPoint(550, 300), wxDefaultSize,
|
||||||
0, NULL, wxLB_HSCROLL);
|
0, NULL, wxLB_HSCROLL | wxLB_EXTENDED);
|
||||||
for ( int i = 1; i <= 20; i++ )
|
for ( int i = 1; i <= 20; i++ )
|
||||||
{
|
{
|
||||||
lbox->Append(wxString::Format(_T("%sentry %d"),
|
lbox->Append(wxString::Format(_T("%sentry %d"),
|
||||||
|
@@ -80,6 +80,31 @@ bool wxListBoxBase::SetStringSelection(const wxString& s, bool select)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxListBoxBase::DeselectAll(int itemToLeaveSelected)
|
||||||
|
{
|
||||||
|
if ( HasMultipleSelection() )
|
||||||
|
{
|
||||||
|
wxArrayInt selections;
|
||||||
|
GetSelections(selections);
|
||||||
|
|
||||||
|
size_t count = selections.GetCount();
|
||||||
|
for ( size_t n = 0; n < count; n++ )
|
||||||
|
{
|
||||||
|
int item = selections[n];
|
||||||
|
if ( item != itemToLeaveSelected )
|
||||||
|
Deselect(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // single selection
|
||||||
|
{
|
||||||
|
int sel = GetSelection();
|
||||||
|
if ( sel != -1 && sel != itemToLeaveSelected )
|
||||||
|
{
|
||||||
|
Deselect(sel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// misc
|
// misc
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -118,15 +118,11 @@ void wxWindowBase::InitBase()
|
|||||||
m_windowValidator = (wxValidator *) NULL;
|
m_windowValidator = (wxValidator *) NULL;
|
||||||
#endif // wxUSE_VALIDATORS
|
#endif // wxUSE_VALIDATORS
|
||||||
|
|
||||||
// use the system default colours
|
// use the system default colours and font
|
||||||
wxSystemSettings settings;
|
m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_BTNFACE);
|
||||||
|
|
||||||
m_backgroundColour = settings.GetSystemColour(wxSYS_COLOUR_BTNFACE);
|
|
||||||
// m_foregroundColour = *wxBLACK; // TODO take this from sys settings too?
|
|
||||||
m_foregroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
|
m_foregroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
|
||||||
|
m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
|
||||||
|
|
||||||
// GRG, changed Mar/2000
|
|
||||||
m_font = settings.GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
|
|
||||||
// no style bits
|
// no style bits
|
||||||
m_exStyle =
|
m_exStyle =
|
||||||
m_windowStyle = 0;
|
m_windowStyle = 0;
|
||||||
|
@@ -697,6 +697,7 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
if (gdk_event->count == 0)
|
if (gdk_event->count == 0)
|
||||||
{
|
{
|
||||||
wxClientDC dc(win);
|
wxClientDC dc(win);
|
||||||
|
dc.SetClippingRegion(win->GetUpdateRegion());
|
||||||
wxEraseEvent eevent( win->GetId(), &dc );
|
wxEraseEvent eevent( win->GetId(), &dc );
|
||||||
eevent.SetEventObject( win );
|
eevent.SetEventObject( win );
|
||||||
win->GetEventHandler()->ProcessEvent(eevent);
|
win->GetEventHandler()->ProcessEvent(eevent);
|
||||||
@@ -804,6 +805,7 @@ static void gtk_window_draw_callback( GtkWidget *widget,
|
|||||||
win->m_clipPaintRegion = TRUE;
|
win->m_clipPaintRegion = TRUE;
|
||||||
|
|
||||||
wxClientDC dc(win);
|
wxClientDC dc(win);
|
||||||
|
dc.SetClippingRegion(win->GetUpdateRegion());
|
||||||
wxEraseEvent eevent( win->GetId(), &dc );
|
wxEraseEvent eevent( win->GetId(), &dc );
|
||||||
eevent.SetEventObject( win );
|
eevent.SetEventObject( win );
|
||||||
win->GetEventHandler()->ProcessEvent(eevent);
|
win->GetEventHandler()->ProcessEvent(eevent);
|
||||||
|
@@ -697,6 +697,7 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
if (gdk_event->count == 0)
|
if (gdk_event->count == 0)
|
||||||
{
|
{
|
||||||
wxClientDC dc(win);
|
wxClientDC dc(win);
|
||||||
|
dc.SetClippingRegion(win->GetUpdateRegion());
|
||||||
wxEraseEvent eevent( win->GetId(), &dc );
|
wxEraseEvent eevent( win->GetId(), &dc );
|
||||||
eevent.SetEventObject( win );
|
eevent.SetEventObject( win );
|
||||||
win->GetEventHandler()->ProcessEvent(eevent);
|
win->GetEventHandler()->ProcessEvent(eevent);
|
||||||
@@ -804,6 +805,7 @@ static void gtk_window_draw_callback( GtkWidget *widget,
|
|||||||
win->m_clipPaintRegion = TRUE;
|
win->m_clipPaintRegion = TRUE;
|
||||||
|
|
||||||
wxClientDC dc(win);
|
wxClientDC dc(win);
|
||||||
|
dc.SetClippingRegion(win->GetUpdateRegion());
|
||||||
wxEraseEvent eevent( win->GetId(), &dc );
|
wxEraseEvent eevent( win->GetId(), &dc );
|
||||||
eevent.SetEventObject( win );
|
eevent.SetEventObject( win );
|
||||||
win->GetEventHandler()->ProcessEvent(eevent);
|
win->GetEventHandler()->ProcessEvent(eevent);
|
||||||
|
@@ -79,8 +79,6 @@ bool wxControl::Create(wxWindow *parent,
|
|||||||
|
|
||||||
m_handler = CreateInputHandler();
|
m_handler = CreateInputHandler();
|
||||||
|
|
||||||
//SetBackgroundColour(parent->GetBackgroundColour());
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,7 +13,6 @@ UNIVOBJS = \
|
|||||||
stattext.o \
|
stattext.o \
|
||||||
theme.o \
|
theme.o \
|
||||||
gtk.o \
|
gtk.o \
|
||||||
win32.o \
|
|
||||||
winuniv.o
|
winuniv.o
|
||||||
|
|
||||||
UNIVDEPS = \
|
UNIVDEPS = \
|
||||||
|
@@ -66,6 +66,7 @@ void wxListBox::Init()
|
|||||||
|
|
||||||
// no items hence no current item
|
// no items hence no current item
|
||||||
m_current = -1;
|
m_current = -1;
|
||||||
|
m_selAnchor = -1;
|
||||||
m_currentChanged = FALSE;
|
m_currentChanged = FALSE;
|
||||||
|
|
||||||
// no need to update anything initially
|
// no need to update anything initially
|
||||||
@@ -98,8 +99,6 @@ bool wxListBox::Create(wxWindow *parent,
|
|||||||
|
|
||||||
SetWindow(this);
|
SetWindow(this);
|
||||||
|
|
||||||
SetBackgroundColour(*wxWHITE);
|
|
||||||
|
|
||||||
if ( style & wxLB_SORT )
|
if ( style & wxLB_SORT )
|
||||||
m_strings = wxArrayString(TRUE /* auto sort */);
|
m_strings = wxArrayString(TRUE /* auto sort */);
|
||||||
|
|
||||||
@@ -683,23 +682,17 @@ bool wxListBox::SendEvent(int item, wxEventType type)
|
|||||||
wxCommandEvent event(type, m_windowId);
|
wxCommandEvent event(type, m_windowId);
|
||||||
event.SetEventObject(this);
|
event.SetEventObject(this);
|
||||||
|
|
||||||
int n;
|
if ( item != -1 )
|
||||||
if ( m_selections.GetCount() > 0 )
|
|
||||||
{
|
{
|
||||||
n = m_selections[0];
|
|
||||||
if ( HasClientObjectData() )
|
if ( HasClientObjectData() )
|
||||||
event.SetClientObject(GetClientObject(n));
|
event.SetClientObject(GetClientObject(item));
|
||||||
else if ( HasClientUntypedData() )
|
else if ( HasClientUntypedData() )
|
||||||
event.SetClientData(GetClientData(n));
|
event.SetClientData(GetClientData(item));
|
||||||
|
|
||||||
event.SetString(GetString(n));
|
event.SetString(GetString(item));
|
||||||
}
|
|
||||||
else // no selection
|
|
||||||
{
|
|
||||||
n = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
event.m_commandInt = n;
|
event.m_commandInt = item;
|
||||||
|
|
||||||
return GetEventHandler()->ProcessEvent(event);
|
return GetEventHandler()->ProcessEvent(event);
|
||||||
}
|
}
|
||||||
@@ -715,7 +708,15 @@ void wxListBox::SetCurrentItem(int n)
|
|||||||
|
|
||||||
if ( m_current != -1 )
|
if ( m_current != -1 )
|
||||||
{
|
{
|
||||||
if ( !HasMultipleSelection() )
|
if ( GetWindowStyle() & wxLB_EXTENDED )
|
||||||
|
{
|
||||||
|
// if we hadn't had any selection before, make the freshly
|
||||||
|
// selected item the new selection anchor
|
||||||
|
if ( m_selections.IsEmpty() )
|
||||||
|
m_selAnchor = m_current;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !(GetWindowStyle() & wxLB_MULTIPLE) )
|
||||||
{
|
{
|
||||||
// for a single selection listbox, the current item is always
|
// for a single selection listbox, the current item is always
|
||||||
// the one selected
|
// the one selected
|
||||||
@@ -773,18 +774,56 @@ void wxListBox::ChangeCurrent(int diff)
|
|||||||
SetCurrentItem(current);
|
SetCurrentItem(current);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxListBox::Select(bool sel)
|
void wxListBox::ExtendSelection(int itemTo)
|
||||||
{
|
{
|
||||||
if ( sel && !HasMultipleSelection() )
|
// if we don't have the explicit values for selection start/end, make them
|
||||||
|
// up
|
||||||
|
if ( m_selAnchor == -1 )
|
||||||
|
m_selAnchor = m_current;
|
||||||
|
|
||||||
|
if ( itemTo == -1 )
|
||||||
|
itemTo = m_current;
|
||||||
|
|
||||||
|
// swap the start/end of selection range if necessary
|
||||||
|
int itemFrom = m_selAnchor;
|
||||||
|
if ( itemFrom > itemTo )
|
||||||
{
|
{
|
||||||
// deselect the old item first
|
int itemTmp = itemFrom;
|
||||||
int selOld = GetSelection();
|
itemFrom = itemTo;
|
||||||
if ( selOld != -1 )
|
itemTo = itemTmp;
|
||||||
{
|
|
||||||
SetSelection(selOld, FALSE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the selection should now include all items in the range between the
|
||||||
|
// anchor and the specified item and only them
|
||||||
|
|
||||||
|
int n;
|
||||||
|
for ( n = 0; n < itemFrom; n++ )
|
||||||
|
{
|
||||||
|
Deselect(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ; n <= itemTo; n++ )
|
||||||
|
{
|
||||||
|
SetSelection(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = GetCount();
|
||||||
|
for ( ; n < count; n++ )
|
||||||
|
{
|
||||||
|
Deselect(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxListBox::Select(bool sel, int item)
|
||||||
|
{
|
||||||
|
if ( sel && !(GetWindowStyle() & wxLB_MULTIPLE) )
|
||||||
|
{
|
||||||
|
DeselectAll(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( item != -1 )
|
||||||
|
SetCurrentItem(item);
|
||||||
|
|
||||||
if ( m_current != -1 )
|
if ( m_current != -1 )
|
||||||
{
|
{
|
||||||
// [de]select the new one
|
// [de]select the new one
|
||||||
@@ -797,8 +836,11 @@ void wxListBox::Select(bool sel)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxListBox::Activate()
|
void wxListBox::Activate(int item)
|
||||||
{
|
{
|
||||||
|
if ( item != -1 )
|
||||||
|
SetCurrentItem(item);
|
||||||
|
|
||||||
if ( m_current != -1 )
|
if ( m_current != -1 )
|
||||||
{
|
{
|
||||||
Select();
|
Select();
|
||||||
@@ -811,16 +853,20 @@ bool wxListBox::PerformAction(const wxControlAction& action,
|
|||||||
long numArg,
|
long numArg,
|
||||||
const wxString& strArg)
|
const wxString& strArg)
|
||||||
{
|
{
|
||||||
|
int item = (int)numArg;
|
||||||
|
if ( item == -1 )
|
||||||
|
item = m_current;
|
||||||
|
|
||||||
if ( action == wxACTION_LISTBOX_SETFOCUS )
|
if ( action == wxACTION_LISTBOX_SETFOCUS )
|
||||||
SetCurrentItem(numArg);
|
SetCurrentItem(item);
|
||||||
else if ( action == wxACTION_LISTBOX_ACTIVATE )
|
else if ( action == wxACTION_LISTBOX_ACTIVATE )
|
||||||
Activate();
|
Activate(item);
|
||||||
else if ( action == wxACTION_LISTBOX_TOGGLE )
|
else if ( action == wxACTION_LISTBOX_TOGGLE )
|
||||||
Select(!IsSelected(m_current));
|
Select(!IsSelected(item), item);
|
||||||
else if ( action == wxACTION_LISTBOX_SELECT )
|
else if ( action == wxACTION_LISTBOX_SELECT )
|
||||||
Select(TRUE);
|
Select(TRUE, item);
|
||||||
else if ( action == wxACTION_LISTBOX_UNSELECT )
|
else if ( action == wxACTION_LISTBOX_UNSELECT )
|
||||||
Select(FALSE);
|
Select(FALSE, item);
|
||||||
else if ( action == wxACTION_LISTBOX_MOVEDOWN )
|
else if ( action == wxACTION_LISTBOX_MOVEDOWN )
|
||||||
ChangeCurrent(1);
|
ChangeCurrent(1);
|
||||||
else if ( action == wxACTION_LISTBOX_MOVEUP )
|
else if ( action == wxACTION_LISTBOX_MOVEUP )
|
||||||
@@ -833,6 +879,13 @@ bool wxListBox::PerformAction(const wxControlAction& action,
|
|||||||
SetCurrentItem(0);
|
SetCurrentItem(0);
|
||||||
else if ( action == wxACTION_LISTBOX_END )
|
else if ( action == wxACTION_LISTBOX_END )
|
||||||
SetCurrentItem(GetCount() - 1);
|
SetCurrentItem(GetCount() - 1);
|
||||||
|
else if ( action == wxACTION_LISTBOX_UNSELECTALL )
|
||||||
|
DeselectAll(item);
|
||||||
|
else if ( action == wxACTION_LISTBOX_EXTENDSEL )
|
||||||
|
ExtendSelection(item);
|
||||||
|
else if ( action == wxACTION_LISTBOX_SELECTALL ||
|
||||||
|
action == wxACTION_LISTBOX_SELTOGGLE )
|
||||||
|
wxFAIL_MSG(_T("unimplemented yet"));
|
||||||
else
|
else
|
||||||
return wxControl::PerformAction(action, numArg, strArg);
|
return wxControl::PerformAction(action, numArg, strArg);
|
||||||
|
|
||||||
@@ -864,7 +917,7 @@ bool wxStdListboxInputHandler::HandleKey(wxControl *control,
|
|||||||
const wxKeyEvent& event,
|
const wxKeyEvent& event,
|
||||||
bool pressed)
|
bool pressed)
|
||||||
{
|
{
|
||||||
// we're only interested in the (normal) key presses
|
// we're only interested in the key press events
|
||||||
if ( pressed && !event.AltDown() )
|
if ( pressed && !event.AltDown() )
|
||||||
{
|
{
|
||||||
wxControlAction action;
|
wxControlAction action;
|
||||||
@@ -887,6 +940,12 @@ bool wxStdListboxInputHandler::HandleKey(wxControl *control,
|
|||||||
{
|
{
|
||||||
control->PerformAction(action);
|
control->PerformAction(action);
|
||||||
|
|
||||||
|
if ( event.ShiftDown() &&
|
||||||
|
(control->GetWindowStyle() & wxLB_EXTENDED) )
|
||||||
|
{
|
||||||
|
control->PerformAction(wxACTION_LISTBOX_EXTENDSEL);
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -945,9 +1004,29 @@ bool wxStdListboxInputHandler::HandleMouse(wxControl *control,
|
|||||||
? 3
|
? 3
|
||||||
: 2;
|
: 2;
|
||||||
}
|
}
|
||||||
else
|
else // wxLB_EXTENDED listbox
|
||||||
{
|
{
|
||||||
action = wxACTION_LISTBOX_TOGGLE;
|
// simple click in an extended listbox clears the
|
||||||
|
// selection, ctrl-click toggles an item to it and
|
||||||
|
// shift-click adds a range
|
||||||
|
if ( event.ControlDown() )
|
||||||
|
{
|
||||||
|
lbox->AnchorSelection(item);
|
||||||
|
|
||||||
|
action = wxACTION_LISTBOX_TOGGLE;
|
||||||
|
}
|
||||||
|
else if ( event.ShiftDown() )
|
||||||
|
{
|
||||||
|
action = wxACTION_LISTBOX_EXTENDSEL;
|
||||||
|
}
|
||||||
|
else // simple click
|
||||||
|
{
|
||||||
|
lbox->AnchorSelection(item);
|
||||||
|
lbox->PerformAction(wxACTION_LISTBOX_UNSELECTALL,
|
||||||
|
item);
|
||||||
|
|
||||||
|
action = wxACTION_LISTBOX_SELECT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // single selection
|
else // single selection
|
||||||
|
@@ -38,7 +38,9 @@
|
|||||||
|
|
||||||
#include "wx/image.h"
|
#include "wx/image.h"
|
||||||
|
|
||||||
|
#include "wx/univ/theme.h"
|
||||||
#include "wx/univ/renderer.h"
|
#include "wx/univ/renderer.h"
|
||||||
|
#include "wx/univ/colschem.h"
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
@@ -376,13 +378,7 @@ void wxControlRenderer::DrawButtonBorder()
|
|||||||
|
|
||||||
m_renderer->DrawButtonBorder(m_dc, m_rect, flags, &m_rect);
|
m_renderer->DrawButtonBorder(m_dc, m_rect, flags, &m_rect);
|
||||||
|
|
||||||
wxColour colBg;
|
m_renderer->DrawBackground(m_dc, wxTHEME_BG_COLOUR(m_window), m_rect, flags);
|
||||||
if ( !(flags & wxCONTROL_CURRENT) )
|
|
||||||
{
|
|
||||||
colBg = m_window->GetBackgroundColour();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_renderer->DrawBackground(m_dc, colBg, m_rect, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxControlRenderer::DrawBitmap(const wxBitmap& bitmap)
|
void wxControlRenderer::DrawBitmap(const wxBitmap& bitmap)
|
||||||
@@ -405,7 +401,7 @@ void wxControlRenderer::DrawBackgroundBitmap()
|
|||||||
}
|
}
|
||||||
else // just fill it with bg colour if no bitmap
|
else // just fill it with bg colour if no bitmap
|
||||||
{
|
{
|
||||||
m_renderer->DrawBackground(m_dc, m_window->GetBackgroundColour(),
|
m_renderer->DrawBackground(m_dc, wxTHEME_BG_COLOUR(m_window),
|
||||||
m_rect, m_window->GetStateFlags());
|
m_rect, m_window->GetStateFlags());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -123,7 +123,14 @@ protected:
|
|||||||
|
|
||||||
// get the colour to use for background
|
// get the colour to use for background
|
||||||
wxColour GetBackgroundColour(int flags) const
|
wxColour GetBackgroundColour(int flags) const
|
||||||
{ return m_scheme->Get(wxColourScheme::CONTROL, flags); }
|
{
|
||||||
|
if ( flags & wxCONTROL_PRESSED )
|
||||||
|
return wxSCHEME_COLOUR(m_scheme, CONTROL_PRESSED);
|
||||||
|
else if ( flags & wxCONTROL_CURRENT )
|
||||||
|
return wxSCHEME_COLOUR(m_scheme, CONTROL_CURRENT);
|
||||||
|
else
|
||||||
|
return wxSCHEME_COLOUR(m_scheme, CONTROL);
|
||||||
|
}
|
||||||
|
|
||||||
// draw the background with any colour, not only the default one(s)
|
// draw the background with any colour, not only the default one(s)
|
||||||
void DoDrawBackground(wxDC& dc,
|
void DoDrawBackground(wxDC& dc,
|
||||||
@@ -264,7 +271,8 @@ protected:
|
|||||||
class wxGTKColourScheme : public wxColourScheme
|
class wxGTKColourScheme : public wxColourScheme
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual wxColour Get(StdColour col, int flags = 0) const;
|
virtual wxColour Get(StdColour col) const;
|
||||||
|
virtual wxColour GetBackground(wxWindow *win) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -281,8 +289,7 @@ public:
|
|||||||
|
|
||||||
virtual wxRenderer *GetRenderer() { return m_renderer; }
|
virtual wxRenderer *GetRenderer() { return m_renderer; }
|
||||||
virtual wxInputHandler *GetInputHandler(const wxString& control);
|
virtual wxInputHandler *GetInputHandler(const wxString& control);
|
||||||
virtual wxColourScheme *GetColourScheme(const wxString& control)
|
virtual wxColourScheme *GetColourScheme() { return m_scheme; }
|
||||||
{ return m_scheme; }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxGTKRenderer *m_renderer;
|
wxGTKRenderer *m_renderer;
|
||||||
@@ -350,40 +357,68 @@ wxInputHandler *wxGTKTheme::GetInputHandler(const wxString& control)
|
|||||||
// wxGTKColourScheme
|
// wxGTKColourScheme
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
wxColour wxGTKColourScheme::Get(wxGTKColourScheme::StdColour col,
|
wxColour wxGTKColourScheme::GetBackground(wxWindow *win) const
|
||||||
int flags) const
|
{
|
||||||
|
wxColour col;
|
||||||
|
if ( win->UseBgCol() )
|
||||||
|
{
|
||||||
|
// use the user specified colour
|
||||||
|
col = win->GetBackgroundColour();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( win->IsContainerWindow() )
|
||||||
|
{
|
||||||
|
// doesn't depend on the state
|
||||||
|
if ( !col.Ok() )
|
||||||
|
{
|
||||||
|
col = Get(WINDOW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int flags = win->GetStateFlags();
|
||||||
|
|
||||||
|
// the colour set by the user should be used for the normal state
|
||||||
|
// and for the states for which we don't have any specific colours
|
||||||
|
if ( !col.Ok() || (flags != 0) )
|
||||||
|
{
|
||||||
|
if ( wxDynamicCast(win, wxScrollBar) )
|
||||||
|
col = Get(SCROLLBAR);
|
||||||
|
else if ( (flags & wxCONTROL_CURRENT) && win->CanBeHighlighted() )
|
||||||
|
col = Get(CONTROL_CURRENT);
|
||||||
|
else if ( flags & wxCONTROL_PRESSED )
|
||||||
|
col = Get(CONTROL_PRESSED);
|
||||||
|
else
|
||||||
|
col = Get(CONTROL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return col;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxColour wxGTKColourScheme::Get(wxGTKColourScheme::StdColour col) const
|
||||||
{
|
{
|
||||||
switch ( col )
|
switch ( col )
|
||||||
{
|
{
|
||||||
|
case WINDOW: return *wxWHITE;
|
||||||
|
|
||||||
case SHADOW_DARK: return *wxBLACK;
|
case SHADOW_DARK: return *wxBLACK;
|
||||||
case SHADOW_HIGHLIGHT: return *wxWHITE;
|
case SHADOW_HIGHLIGHT: return *wxWHITE;
|
||||||
case SHADOW_IN: return wxColour(0xd6d6d6);
|
case SHADOW_IN: return wxColour(0xd6d6d6);
|
||||||
case SHADOW_OUT: return wxColour(0x969696);
|
case SHADOW_OUT: return wxColour(0x969696);
|
||||||
|
|
||||||
case CONTROL:
|
case CONTROL: return wxColour(0xd6d6d6);
|
||||||
if ( flags & wxCONTROL_PRESSED )
|
case CONTROL_PRESSED: return wxColour(0xc3c3c3);
|
||||||
{
|
case CONTROL_CURRENT: return wxColour(0xeaeaea);
|
||||||
return wxColour(0xc3c3c3);
|
|
||||||
}
|
|
||||||
else if ( flags & wxCONTROL_CURRENT )
|
|
||||||
{
|
|
||||||
return wxColour(0xeaeaea);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return wxColour(0xd6d6d6);
|
|
||||||
}
|
|
||||||
|
|
||||||
case CONTROL_TEXT: if ( flags & wxCONTROL_DISABLED )
|
case CONTROL_TEXT: return *wxBLACK;
|
||||||
{
|
case CONTROL_TEXT_DISABLED:
|
||||||
return wxColour(0x757575);
|
return wxColour(0x757575);
|
||||||
}
|
case CONTROL_TEXT_DISABLED_SHADOW:
|
||||||
else
|
return *wxWHITE;
|
||||||
{
|
|
||||||
return *wxBLACK;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SCROLLBAR: return wxColour(0xc3c3c3);
|
case SCROLLBAR:
|
||||||
|
case SCROLLBAR_PRESSED: return wxColour(0xc3c3c3);
|
||||||
|
|
||||||
case HIGHLIGHT: return wxColour(0x9c0000);
|
case HIGHLIGHT: return wxColour(0x9c0000);
|
||||||
case HIGHLIGHT_TEXT: return wxColour(0xffffff);
|
case HIGHLIGHT_TEXT: return wxColour(0xffffff);
|
||||||
@@ -410,11 +445,11 @@ wxGTKRenderer::wxGTKRenderer(const wxColourScheme *scheme)
|
|||||||
m_sizeScrollbarArrow = wxSize(15, 14);
|
m_sizeScrollbarArrow = wxSize(15, 14);
|
||||||
|
|
||||||
// init pens
|
// init pens
|
||||||
m_penBlack = wxPen(scheme->Get(wxColourScheme::SHADOW_DARK), 0, wxSOLID);
|
m_penBlack = wxPen(wxSCHEME_COLOUR(scheme, SHADOW_DARK), 0, wxSOLID);
|
||||||
m_penDarkGrey = wxPen(scheme->Get(wxColourScheme::SHADOW_OUT), 0, wxSOLID);
|
m_penDarkGrey = wxPen(wxSCHEME_COLOUR(scheme, SHADOW_OUT), 0, wxSOLID);
|
||||||
m_penGrey = wxPen(scheme->Get(wxColourScheme::SCROLLBAR), 0, wxSOLID);
|
m_penGrey = wxPen(wxSCHEME_COLOUR(scheme, SCROLLBAR), 0, wxSOLID);
|
||||||
m_penLightGrey = wxPen(scheme->Get(wxColourScheme::SHADOW_IN), 0, wxSOLID);
|
m_penLightGrey = wxPen(wxSCHEME_COLOUR(scheme, SHADOW_IN), 0, wxSOLID);
|
||||||
m_penHighlight = wxPen(scheme->Get(wxColourScheme::SHADOW_HIGHLIGHT), 0, wxSOLID);
|
m_penHighlight = wxPen(wxSCHEME_COLOUR(scheme, SHADOW_HIGHLIGHT), 0, wxSOLID);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -746,7 +781,7 @@ void wxGTKRenderer::DrawLabel(wxDC& dc,
|
|||||||
rectShadow.x++;
|
rectShadow.x++;
|
||||||
rectShadow.y++;
|
rectShadow.y++;
|
||||||
dc.DrawLabel(label, rectShadow, alignment, indexAccel);
|
dc.DrawLabel(label, rectShadow, alignment, indexAccel);
|
||||||
dc.SetTextForeground(m_scheme->Get(wxColourScheme::CONTROL_TEXT, flags));
|
dc.SetTextForeground(wxSCHEME_COLOUR(m_scheme, CONTROL_TEXT_DISABLED));
|
||||||
}
|
}
|
||||||
|
|
||||||
dc.DrawLabel(label, image, rect, alignment, indexAccel, rectBounds);
|
dc.DrawLabel(label, image, rect, alignment, indexAccel, rectBounds);
|
||||||
@@ -765,12 +800,12 @@ void wxGTKRenderer::DrawItem(wxDC& dc,
|
|||||||
wxColour colFg;
|
wxColour colFg;
|
||||||
if ( flags & wxCONTROL_SELECTED )
|
if ( flags & wxCONTROL_SELECTED )
|
||||||
{
|
{
|
||||||
dc.SetBrush(wxBrush(m_scheme->Get(wxColourScheme::HIGHLIGHT), wxSOLID));
|
dc.SetBrush(wxBrush(wxSCHEME_COLOUR(m_scheme, HIGHLIGHT), wxSOLID));
|
||||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||||
dc.DrawRectangle(rect);
|
dc.DrawRectangle(rect);
|
||||||
|
|
||||||
colFg = dc.GetTextForeground();
|
colFg = dc.GetTextForeground();
|
||||||
dc.SetTextForeground(m_scheme->Get(wxColourScheme::HIGHLIGHT_TEXT));
|
dc.SetTextForeground(wxSCHEME_COLOUR(m_scheme, HIGHLIGHT_TEXT));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( flags & wxCONTROL_FOCUSED )
|
if ( flags & wxCONTROL_FOCUSED )
|
||||||
@@ -816,16 +851,7 @@ void wxGTKRenderer::DrawBackground(wxDC& dc,
|
|||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
wxColour colBg;
|
wxColour colBg = col.Ok() ? col : GetBackgroundColour(flags);
|
||||||
if ( !col.Ok() )
|
|
||||||
{
|
|
||||||
colBg = m_scheme->Get(wxColourScheme::CONTROL, flags);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
colBg = col;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoDrawBackground(dc, colBg, rect);
|
DoDrawBackground(dc, colBg, rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -850,7 +876,7 @@ void wxGTKRenderer::DrawArrowBorder(wxDC& dc,
|
|||||||
rect2.Inflate(-1);
|
rect2.Inflate(-1);
|
||||||
rectInner.Inflate(-2);
|
rectInner.Inflate(-2);
|
||||||
|
|
||||||
DoDrawBackground(dc, m_scheme->Get(wxColourScheme::SCROLLBAR), *rect);
|
DoDrawBackground(dc, wxSCHEME_COLOUR(m_scheme, SCROLLBAR), *rect);
|
||||||
|
|
||||||
// find the side not to draw and also adjust the rectangles to compensate
|
// find the side not to draw and also adjust the rectangles to compensate
|
||||||
// for it
|
// for it
|
||||||
@@ -936,7 +962,7 @@ void wxGTKRenderer::DrawArrow(wxDC& dc,
|
|||||||
|
|
||||||
wxPoint ptArrow[Point_Max];
|
wxPoint ptArrow[Point_Max];
|
||||||
|
|
||||||
wxColour colInside = m_scheme->Get(wxColourScheme::CONTROL, flags);
|
wxColour colInside = GetBackgroundColour(flags);
|
||||||
wxPen penShadow[4];
|
wxPen penShadow[4];
|
||||||
if ( flags & wxCONTROL_PRESSED )
|
if ( flags & wxCONTROL_PRESSED )
|
||||||
{
|
{
|
||||||
@@ -1145,12 +1171,12 @@ void wxGTKRenderer::DrawScrollbarShaft(wxDC& dc,
|
|||||||
{
|
{
|
||||||
wxRect rectBar = rect;
|
wxRect rectBar = rect;
|
||||||
DrawThumbBorder(dc, &rectBar, orient);
|
DrawThumbBorder(dc, &rectBar, orient);
|
||||||
DoDrawBackground(dc, m_scheme->Get(wxColourScheme::SCROLLBAR), rectBar);
|
DoDrawBackground(dc, wxSCHEME_COLOUR(m_scheme, SCROLLBAR), rectBar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGTKRenderer::DrawScrollCorner(wxDC& dc, const wxRect& rect)
|
void wxGTKRenderer::DrawScrollCorner(wxDC& dc, const wxRect& rect)
|
||||||
{
|
{
|
||||||
DoDrawBackground(dc, m_scheme->Get(wxColourScheme::CONTROL), rect);
|
DoDrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL), rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxRect wxGTKRenderer::GetScrollbarRect(const wxScrollBar *scrollbar,
|
wxRect wxGTKRenderer::GetScrollbarRect(const wxScrollBar *scrollbar,
|
||||||
|
@@ -251,6 +251,7 @@ class wxWin32ColourScheme : public wxColourScheme
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual wxColour Get(StdColour col, int flags = 0) const;
|
virtual wxColour Get(StdColour col, int flags = 0) const;
|
||||||
|
virtual wxColour GetBackground(wxWindow *win);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -344,11 +345,18 @@ wxColourScheme *wxWin32Theme::GetColourScheme(const wxString& control)
|
|||||||
// wxWin32ColourScheme
|
// wxWin32ColourScheme
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
wxColour wxWin32ColourScheme::GetBackground(wxWindow *win)
|
||||||
|
{
|
||||||
|
return win->GetBackgroundColour();
|
||||||
|
}
|
||||||
|
|
||||||
wxColour wxWin32ColourScheme::Get(wxWin32ColourScheme::StdColour col,
|
wxColour wxWin32ColourScheme::Get(wxWin32ColourScheme::StdColour col,
|
||||||
int flags) const
|
int flags) const
|
||||||
{
|
{
|
||||||
switch ( col )
|
switch ( col )
|
||||||
{
|
{
|
||||||
|
case WINDOW: return *wxWHITE;
|
||||||
|
|
||||||
case CONTROL: return wxColour(0xc0c0c0);
|
case CONTROL: return wxColour(0xc0c0c0);
|
||||||
case CONTROL_TEXT: return *wxBLACK;
|
case CONTROL_TEXT: return *wxBLACK;
|
||||||
case SCROLLBAR: if ( flags & wxCONTROL_PRESSED )
|
case SCROLLBAR: if ( flags & wxCONTROL_PRESSED )
|
||||||
|
@@ -97,6 +97,11 @@ bool wxWindow::Create(wxWindow *parent,
|
|||||||
wxSB_VERTICAL);
|
wxSB_VERTICAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the colours/fonts are default
|
||||||
|
m_hasBgCol =
|
||||||
|
m_hasFgCol =
|
||||||
|
m_hasFont = FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,3 +575,36 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// colours/fonts
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxWindow::SetBackgroundColour(const wxColour& colour)
|
||||||
|
{
|
||||||
|
if ( !wxWindowNative::SetBackgroundColour(colour) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
m_hasBgCol = TRUE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxWindow::SetForegroundColour(const wxColour& colour)
|
||||||
|
{
|
||||||
|
if ( !wxWindowNative::SetForegroundColour(colour) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
m_hasFgCol = TRUE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxWindow::SetFont(const wxFont& font)
|
||||||
|
{
|
||||||
|
if ( !wxWindowNative::SetFont(font) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
m_hasFont = TRUE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user