///////////////////////////////////////////////////////////////////////////////
// Name:        src/univ/settingsuniv.cpp
// Purpose:     wxSystemSettings wxUniv-specific parts
// Author:      Vadim Zeitlin
// Created:     20.08.00
// Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
// Licence:     wxWindows licence
///////////////////////////////////////////////////////////////////////////////

// ===========================================================================
// declarations
// ===========================================================================

// ---------------------------------------------------------------------------
// headers
// ---------------------------------------------------------------------------

// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"


#ifndef WX_PRECOMP
    #include "wx/settings.h"
    #include "wx/gdicmn.h"
#endif // WX_PRECOMP

#include "wx/univ/colschem.h"
#include "wx/univ/theme.h"
#include "wx/univ/renderer.h"

// ============================================================================
// implementation
// ============================================================================

// ----------------------------------------------------------------------------
// wxSystemSettings
// ----------------------------------------------------------------------------

wxColour wxSystemSettings::GetColour(wxSystemColour index)
{
    // the elements of this enum must be kept in sync with wxSystemColour
    static const wxColourScheme::StdColour s_mapSysToThemeCol[] =
    {
        wxColourScheme::SCROLLBAR /* wxSYS_COLOUR_SCROLLBAR */,
        wxColourScheme::WINDOW /* wxSYS_COLOUR_BACKGROUND */,
        wxColourScheme::TITLEBAR_ACTIVE_TEXT /* wxSYS_COLOUR_ACTIVECAPTION */,
        wxColourScheme::TITLEBAR_TEXT /* wxSYS_COLOUR_INACTIVECAPTION */,
        wxColourScheme::MAX /* wxSYS_COLOUR_MENU */,
        wxColourScheme::MAX /* wxSYS_COLOUR_WINDOW */,
        wxColourScheme::MAX /* wxSYS_COLOUR_WINDOWFRAME */,
        wxColourScheme::CONTROL_TEXT /* wxSYS_COLOUR_MENUTEXT */,
        wxColourScheme::CONTROL_TEXT /* wxSYS_COLOUR_WINDOWTEXT */,
        wxColourScheme::CONTROL_TEXT /* wxSYS_COLOUR_CAPTIONTEXT */,
        wxColourScheme::MAX /* wxSYS_COLOUR_ACTIVEBORDER */,
        wxColourScheme::MAX /* wxSYS_COLOUR_INACTIVEBORDER */,
        wxColourScheme::FRAME /* wxSYS_COLOUR_APPWORKSPACE */,
        wxColourScheme::HIGHLIGHT /* wxSYS_COLOUR_HIGHLIGHT */,
        wxColourScheme::HIGHLIGHT_TEXT /* wxSYS_COLOUR_HIGHLIGHTTEXT */,
        wxColourScheme::CONTROL /* wxSYS_COLOUR_BTNFACE */,
        wxColourScheme::SHADOW_DARK /* wxSYS_COLOUR_BTNSHADOW */,
        wxColourScheme::CONTROL_TEXT_DISABLED /* wxSYS_COLOUR_GRAYTEXT */,
        wxColourScheme::CONTROL_TEXT /* wxSYS_COLOUR_BTNTEXT */,
        wxColourScheme::MAX /* wxSYS_COLOUR_INACTIVECAPTIONTEXT */,
        wxColourScheme::SHADOW_HIGHLIGHT /* wxSYS_COLOUR_BTNHIGHLIGHT */,
        wxColourScheme::SHADOW_DARK /* wxSYS_COLOUR_3DDKSHADOW */,
        wxColourScheme::SHADOW_OUT /* wxSYS_COLOUR_3DLIGHT */,
        wxColourScheme::MAX /* wxSYS_COLOUR_INFOTEXT */,
        wxColourScheme::MAX /* wxSYS_COLOUR_INFOBK */,
        wxColourScheme::WINDOW /* wxSYS_COLOUR_LISTBOX */,
        wxColourScheme::MAX /* wxSYS_COLOUR_HOTLIGHT */,
        wxColourScheme::TITLEBAR_ACTIVE_TEXT /* wxSYS_COLOUR_GRADIENTACTIVECAPTION */,
        wxColourScheme::TITLEBAR_TEXT /* wxSYS_COLOUR_GRADIENTINACTIVECAPTION */,
        wxColourScheme::MAX /* wxSYS_COLOUR_MENUHILIGHT */,
        wxColourScheme::MAX /* wxSYS_COLOUR_MENUBAR */,
        wxColourScheme::CONTROL_TEXT /* wxSYS_COLOUR_LISTBOXTEXT */,
        wxColourScheme::HIGHLIGHT_TEXT /* wxSYS_COLOUR_LISTBOXHIGHLIGHTTEXT */,
        wxColourScheme::CONTROL /* wxSYS_COLOUR_GRIDLINES */,
        wxColourScheme::HIGHLIGHT /* wxSYS_COLOUR_LISTBOXHIGHLIGHT */,
    };

    wxCOMPILE_TIME_ASSERT( WXSIZEOF(s_mapSysToThemeCol) == wxSYS_COLOUR_MAX,
                           StdColDefsMismatch );

    wxCHECK_MSG( index < (int)WXSIZEOF(s_mapSysToThemeCol), wxNullColour,
                 wxT("invalid wxSystemColour") );

    wxColourScheme::StdColour col = s_mapSysToThemeCol[index];
    if ( col == wxColourScheme::MAX )
    {
        // we don't have theme-equivalent for this colour
        return wxSystemSettingsNative::GetColour(index);
    }

    return wxTheme::Get()->GetColourScheme()->Get(col);
}

int wxSystemSettings::GetMetric(wxSystemMetric index, const wxWindow* win)
{
    switch ( index )
    {
        case wxSYS_VSCROLL_X:
            return wxTheme::Get()->GetRenderer()->GetScrollbarArrowSize().x;
        case wxSYS_HSCROLL_Y:
            return wxTheme::Get()->GetRenderer()->GetScrollbarArrowSize().y;

        default:
            return wxSystemSettingsNative::GetMetric(index, win);
    }
}
