Files
wxWidgets/src/common/arttango.cpp
Vadim Zeitlin d9a48edc81 Restore the old default size of Tango art provider bitmaps
The default size of the bitmaps created from bitmap bundles returned by
the Tango art provider for the client strings different from wxART_MENU
and wxART_BUTTON was changed from 24x24 to 16x16 in 766fefeb34 (Use SVG
instead of PNGs in tango art provider, 2022-01-27), see #22067, without
any real need and perhaps even non intentionally at all.

Restore the old default size to restore the old behaviour.

See #22189.
2022-03-22 23:01:40 +01:00

239 lines
9.4 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: src/common/arttango.cpp
// Purpose: art provider using embedded SVG versions of Tango icons
// Author: Vadim Zeitlin
// Created: 2010-12-27
// Copyright: (c) 2010 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// for compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_ARTPROVIDER_TANGO
#ifndef WX_PRECOMP
#include "wx/image.h"
#include "wx/log.h"
#endif // WX_PRECOMP
#include "wx/artprov.h"
#include "wx/mstream.h"
// ----------------------------------------------------------------------------
// image data
// ----------------------------------------------------------------------------
// All files in art/tango in alphabetical order:
#include "../../art/tango/application_exit.h"
#include "../../art/tango/application_x_executable.h"
#include "../../art/tango/dialog_error.h"
#include "../../art/tango/dialog_information.h"
#include "../../art/tango/dialog_warning.h"
#include "../../art/tango/document_new.h"
#include "../../art/tango/document_open.h"
#include "../../art/tango/document_print.h"
#include "../../art/tango/document_save.h"
#include "../../art/tango/document_save_as.h"
#include "../../art/tango/drive_harddisk.h"
#include "../../art/tango/drive_optical.h"
#include "../../art/tango/drive_removable_media.h"
#include "../../art/tango/edit_copy.h"
#include "../../art/tango/edit_cut.h"
#include "../../art/tango/edit_delete.h"
#include "../../art/tango/edit_find.h"
#include "../../art/tango/edit_find_replace.h"
#include "../../art/tango/edit_paste.h"
#include "../../art/tango/edit_redo.h"
#include "../../art/tango/edit_undo.h"
#include "../../art/tango/folder.h"
#include "../../art/tango/folder_new.h"
#include "../../art/tango/folder_open.h"
#include "../../art/tango/fullscreen.h"
#include "../../art/tango/go_down.h"
#include "../../art/tango/go_first.h"
#include "../../art/tango/go_home.h"
#include "../../art/tango/go_last.h"
#include "../../art/tango/go_next.h"
#include "../../art/tango/go_previous.h"
#include "../../art/tango/go_up.h"
#include "../../art/tango/image_missing.h"
#include "../../art/tango/list_add.h"
#include "../../art/tango/list_remove.h"
#include "../../art/tango/process_stop.h"
#include "../../art/tango/text_x_generic.h"
#include "../../art/tango/view_refresh.h"
// ----------------------------------------------------------------------------
// art provider class
// ----------------------------------------------------------------------------
namespace
{
class wxTangoArtProvider : public wxArtProvider
{
public:
wxTangoArtProvider()
{
}
protected:
virtual wxBitmapBundle CreateBitmapBundle(const wxArtID& id,
const wxArtClient& client,
const wxSize& size) wxOVERRIDE;
private:
wxDECLARE_NO_COPY_CLASS(wxTangoArtProvider);
};
} // anonymous namespace
// ============================================================================
// implementation
// ============================================================================
wxBitmapBundle
wxTangoArtProvider::CreateBitmapBundle(const wxArtID& id,
const wxArtClient& client,
const wxSize& size)
{
#ifdef wxHAS_SVG
// Array indexed by the id names with pointers to svg data.
// The order of the elements in this array is the
// same as the definition order in wx/artprov.h. While it's not very
// logical, this should make it simpler to add new icons later. Notice that
// most elements without Tango equivalents are simply omitted.
// To avoid repetition use BITMAP_DATA to only specify the image name once
// (this is especially important if we decide to add more image sizes
// later).
#define BITMAP_DATA(name) \
name ## _svg_data, sizeof(name ## _svg_data)
static const struct BitmapEntry
{
wxString id;
const unsigned char *data;
size_t len;
} s_allBitmaps[] =
{
// Tango does have bookmark-new but no matching bookmark-delete and
// using mismatching icons would be ugly so we don't provide this one
// neither, we should add both of them if Tango ever adds the other one.
//{ wxART_ADD_BOOKMARK, BITMAP_DATA(bookmark_new)},
//{ wxART_DEL_BOOKMARK, BITMAP_DATA() },
{ wxART_GO_BACK, BITMAP_DATA(go_previous) },
{ wxART_GO_FORWARD, BITMAP_DATA(go_next) },
{ wxART_GO_UP, BITMAP_DATA(go_up) },
{ wxART_GO_DOWN, BITMAP_DATA(go_down) },
// wxART_GO_TO_PARENT doesn't seem to exist in Tango
{ wxART_GO_HOME, BITMAP_DATA(go_home) },
{ wxART_GOTO_FIRST, BITMAP_DATA(go_first) },
{ wxART_GOTO_LAST, BITMAP_DATA(go_last) },
{ wxART_FILE_OPEN, BITMAP_DATA(document_open) },
{ wxART_FILE_SAVE, BITMAP_DATA(document_save) },
{ wxART_FILE_SAVE_AS, BITMAP_DATA(document_save_as) },
{ wxART_PRINT, BITMAP_DATA(document_print) },
// Should we use help-browser for wxART_HELP?
{ wxART_NEW_DIR, BITMAP_DATA(folder_new) },
{ wxART_HARDDISK, BITMAP_DATA(drive_harddisk) },
// drive-removable-media seems to be better than media-floppy
{ wxART_FLOPPY, BITMAP_DATA(drive_removable_media) },
{ wxART_CDROM, BITMAP_DATA(drive_optical) },
{ wxART_REMOVABLE, BITMAP_DATA(drive_removable_media) },
{ wxART_FOLDER, BITMAP_DATA(folder) },
{ wxART_FOLDER_OPEN, BITMAP_DATA(folder_open) },
// wxART_GO_DIR_UP doesn't seem to exist in Tango
{ wxART_EXECUTABLE_FILE, BITMAP_DATA(application_x_executable) },
{ wxART_NORMAL_FILE, BITMAP_DATA(text_x_generic) },
// There is no dialog-question in Tango so use the information icon
// too, this is better for consistency and we do have a precedent for
// doing this as Windows Vista/7 does the same thing natively.
{ wxART_ERROR, BITMAP_DATA(dialog_error) },
{ wxART_QUESTION, BITMAP_DATA(dialog_information) },
{ wxART_WARNING, BITMAP_DATA(dialog_warning) },
{ wxART_INFORMATION, BITMAP_DATA(dialog_information) },
{ wxART_MISSING_IMAGE, BITMAP_DATA(image_missing) },
{ wxART_COPY, BITMAP_DATA(edit_copy) },
{ wxART_CUT, BITMAP_DATA(edit_cut) },
{ wxART_PASTE, BITMAP_DATA(edit_paste) },
{ wxART_DELETE, BITMAP_DATA(edit_delete) },
{ wxART_NEW, BITMAP_DATA(document_new) },
{ wxART_UNDO, BITMAP_DATA(edit_undo) },
{ wxART_REDO, BITMAP_DATA(edit_redo) },
{ wxART_PLUS, BITMAP_DATA(list_add) },
{ wxART_MINUS, BITMAP_DATA(list_remove) },
// Surprisingly Tango doesn't seem to have wxART_CLOSE.
{ wxART_QUIT, BITMAP_DATA(application_exit) },
{ wxART_FIND, BITMAP_DATA(edit_find) },
{ wxART_FIND_AND_REPLACE, BITMAP_DATA(edit_find_replace) },
{ wxART_FULL_SCREEN, BITMAP_DATA(fullscreen) },
{ wxART_REFRESH, BITMAP_DATA(view_refresh) },
{ wxART_STOP, BITMAP_DATA(process_stop) },
};
#undef BITMAP_DATA
for ( unsigned n = 0; n < WXSIZEOF(s_allBitmaps); n++ )
{
const BitmapEntry& entry = s_allBitmaps[n];
if ( entry.id != id )
continue;
wxSize sizeDef = size != wxDefaultSize ? size : GetSizeHint(client);
if (sizeDef == wxDefaultSize)
{
// We really need some default size here, so keep using the same
// sizes we used for PNG-based implementation we had before.
if ( client == wxART_MENU || client == wxART_BUTTON )
sizeDef = wxSize(16, 16);
else
sizeDef = wxSize(24, 24);
}
return wxBitmapBundle::FromSVG(entry.data, entry.len, sizeDef);
}
#else // !wxHAS_SVG
wxUnusedVar(id);
wxUnusedVar(client);
wxUnusedVar(size);
#endif // wxHAS_SVG/!wxHAS_SVG
// Not one of the bitmaps that we support.
return wxBitmapBundle();
}
/* static */
void wxArtProvider::InitTangoProvider()
{
wxArtProvider::PushBack(new wxTangoArtProvider);
}
#endif // wxUSE_ARTPROVIDER_TANGO