-///////////////////////////////////////////////////////////////////////////////
// Name: univ/themes/win32.cpp
// Purpose: wxUniversal theme implementing Win32-like LNF
// Author: Vadim Zeitlin
// Modified by:
// Created: 06.08.00
// RCS-ID: $Id$
-// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
+// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows license
///////////////////////////////////////////////////////////////////////////////
#include "wx/button.h"
#include "wx/listbox.h"
#include "wx/checklst.h"
+ #include "wx/combobox.h"
#include "wx/scrolbar.h"
#include "wx/slider.h"
#include "wx/textctrl.h"
+
+ #ifdef __WXMSW__
+ // for COLOR_* constants
+ #include "wx/msw/private.h"
+ #endif
#endif // WX_PRECOMP
#include "wx/notebook.h"
#include "wx/spinbutt.h"
+#include "wx/settings.h"
+#include "wx/menu.h"
#include "wx/univ/scrtimer.h"
IndicatorStatus_Max
};
-// ----------------------------------------------------------------------------
// wxWin32Renderer: draw the GUI elements in Win32 style
// ----------------------------------------------------------------------------
int end,
int step = 1,
int flags = 0);
+#if wxUSE_MENUS
virtual void DrawMenuBarItem(wxDC& dc,
const wxRect& rect,
virtual void DrawMenuSeparator(wxDC& dc,
wxCoord y,
const wxMenuGeometryInfo& geomInfo);
-
+#endif
virtual void GetComboBitmaps(wxBitmap *bmpNormal,
+ wxBitmap *bmpFocus,
wxBitmap *bmpPressed,
wxBitmap *bmpDisabled);
wxOrientation orient) const;
virtual wxSize GetProgressBarStep() const { return wxSize(16, 32); }
+#if wxUSE_MENUS
virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const;
virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win,
const wxMenu& menu) const;
-
+#endif
protected:
// helper of DrawLabel() and DrawCheckOrRadioButton()
void DoDrawLabel(wxDC& dc,
{
switch ( col )
{
+ // use the system colours under Windows
+#if defined(__WXMSW__)
+ case WINDOW: return wxColour(GetSysColor(COLOR_WINDOW));
+
+ case CONTROL_PRESSED:
+ case CONTROL_CURRENT:
+ case CONTROL: return wxColour(GetSysColor(COLOR_BTNFACE));
+
+ case CONTROL_TEXT: return wxColour(GetSysColor(COLOR_BTNTEXT));
+
+ case SCROLLBAR: return wxColour(GetSysColor(COLOR_SCROLLBAR));
+ case SCROLLBAR_PRESSED: return wxColour(GetSysColor(COLOR_HIGHLIGHT));
+
+ case HIGHLIGHT: return wxColour(GetSysColor(COLOR_HIGHLIGHT));
+ case HIGHLIGHT_TEXT: return wxColour(GetSysColor(COLOR_HIGHLIGHTTEXT));
+
+#if defined(COLOR_3DDKSHADOW)
+ case SHADOW_DARK: return wxColour(GetSysColor(COLOR_3DDKSHADOW));
+#else
+ case SHADOW_DARK: return *wxBLACK;
+#endif
+
+ case CONTROL_TEXT_DISABLED:
+ case SHADOW_HIGHLIGHT: return wxColour(GetSysColor(COLOR_BTNHIGHLIGHT));
+
+ case SHADOW_IN: return wxColour(GetSysColor(COLOR_BTNFACE));
+
+ case CONTROL_TEXT_DISABLED_SHADOW:
+ case SHADOW_OUT: return wxColour(GetSysColor(COLOR_BTNSHADOW));
+#else // !__WXMSW__
+ // use the standard Windows colours elsewhere
case WINDOW: return *wxWHITE;
case CONTROL_PRESSED:
case CONTROL_TEXT_DISABLED_SHADOW:
case SHADOW_OUT: return wxColour(0x7f7f7f);
+#endif // __WXMSW__
case MAX:
default:
{
if ( focusOffset.x || focusOffset.y )
{
- // before calling Inflate(), ensure that we will have a valid rect
- // afterwards
- if ( rectLabel.x < focusOffset.x )
- rectLabel.x = focusOffset.x;
-
- if ( rectLabel.y < focusOffset.y )
- rectLabel.y = focusOffset.y;
-
rectLabel.Inflate(focusOffset.x, focusOffset.y);
}
// menu and menubar
// ----------------------------------------------------------------------------
+#if wxUSE_MENUS
+
// wxWin32MenuGeometryInfo: the wxMenuGeometryInfo used by wxWin32Renderer
class WXDLLEXPORT wxWin32MenuGeometryInfo : public wxMenuGeometryInfo
{
GetMenuGeometry(wxWindow *, const wxMenu&) const;
};
+#endif // wxUSE_MENUS
+
// FIXME: all constants are hardcoded but shouldn't be
static const wxCoord MENU_LEFT_MARGIN = 9;
static const wxCoord MENU_RIGHT_MARGIN = 18;
// the size of the standard checkmark bitmap
static const wxCoord MENU_CHECK_SIZE = 9;
+// we can't implement these methods without wxMenuGeometryInfo implementation
+// which we don't have if !wxUSE_MENUS
+#if wxUSE_MENUS
+
void wxWin32Renderer::DrawMenuBarItem(wxDC& dc,
const wxRect& rectOrig,
const wxString& label,
return gi;
}
+#else // !wxUSE_MENUS
+
+/*
+void wxWin32Renderer::DrawMenuBarItem(wxDC& WXUNUSED(dc),
+ const wxRect& WXUNUSED(rectOrig),
+ const wxString& WXUNUSED(label),
+ int WXUNUSED(flags),
+ int WXUNUSED(indexAccel))
+{
+}
+
+void wxWin32Renderer::DrawMenuItem(wxDC& WXUNUSED(dc),
+ wxCoord WXUNUSED(y),
+ const wxMenuGeometryInfo& WXUNUSED(gi),
+ const wxString& WXUNUSED(label),
+ const wxString& WXUNUSED(accel),
+ const wxBitmap& WXUNUSED(bitmap),
+ int WXUNUSED(flags),
+ int WXUNUSED(indexAccel))
+{
+}
+
+void wxWin32Renderer::DrawMenuSeparator(wxDC& WXUNUSED(dc),
+ wxCoord WXUNUSED(y),
+ const wxMenuGeometryInfo& WXUNUSED(gi))
+{
+}
+
+wxSize wxWin32Renderer::GetMenuBarItemSize(const wxSize& size) const
+{
+ return size;
+}
+
+wxMenuGeometryInfo *
+wxWin32Renderer::GetMenuGeometry(wxWindow *WXUNUSED(win),
+ const wxMenu& WXUNUSED(menu)) const
+{
+ return NULL;
+}
+*/
+
+#endif // wxUSE_MENUS/!wxUSE_MENUS
+
// ----------------------------------------------------------------------------
// combobox
// ----------------------------------------------------------------------------
void wxWin32Renderer::GetComboBitmaps(wxBitmap *bmpNormal,
+ wxBitmap *bmpFocus,
wxBitmap *bmpPressed,
wxBitmap *bmpDisabled)
{
wxRect rectTotal = rect;
wxCoord widthBorder = GetTextBorderWidth();
- if ( rectTotal.x < widthBorder )
- rectTotal.x = widthBorder;
- if ( rectTotal.y < widthBorder )
- rectTotal.y = widthBorder;
-
rectTotal.Inflate(widthBorder);
// this is what Windows does
rectText.height--;
wxCoord widthBorder = GetTextBorderWidth();
- if ( rectText.width < 2*widthBorder )
- rectText.width = 2*widthBorder;
- if ( rectText.height < 2*widthBorder )
- rectText.height = 2*widthBorder;
-
rectText.Inflate(-widthBorder);
if ( extraSpaceBeyond )
#if wxUSE_BUTTON
if ( wxDynamicCast(window, wxButton) )
{
- // TODO
- size->x += 3*window->GetCharWidth();
-#if 0 // do allow creating small buttons if wanted
- wxSize sizeDef = wxButton::GetDefaultSize();
- if ( size->x < sizeDef.x )
- size->x = sizeDef.x;
-#endif // 0
-
- wxCoord heightBtn = (11*(window->GetCharHeight() + 8))/10;
- if ( size->y < heightBtn - 8 )
- size->y = heightBtn;
- else
- size->y += 9;
+ if ( !(window->GetWindowStyle() & wxBU_EXACTFIT) )
+ {
+ // TODO: don't harcode all this
+ size->x += 3*window->GetCharWidth();
+
+ wxCoord heightBtn = (11*(window->GetCharHeight() + 8))/10;
+ if ( size->y < heightBtn - 8 )
+ size->y = heightBtn;
+ else
+ size->y += 9;
+ }
// no border width adjustments for buttons
return;
bool wxWin32InputHandler::HandleMouse(wxControl *control,
const wxMouseEvent& event)
{
+ // clicking on the control gives it focus
+ if ( event.ButtonDown() && wxWindow::FindFocus() != control )
+ {
+ control->SetFocus();
+
+ return TRUE;
+ }
+
return FALSE;
}