KiCad PCB EDA Suite
bitmap.cpp File Reference
#include <wx/image.h>
#include <wx/bitmap.h>
#include <wx/mstream.h>
#include <wx/menu.h>
#include <wx/menuitem.h>
#include <wx/aui/auibar.h>
#include <cstdint>
#include <mutex>
#include <unordered_map>
#include <common.h>
#include <bitmaps.h>
#include <pgm_base.h>
#include <eda_base_frame.h>

Go to the source code of this file.

Classes

struct  SCALED_BITMAP_ID
 
struct  std::hash< SCALED_BITMAP_ID >
 

Namespaces

 std
 

Template specialization to enable wxStrings for certain containers (e.g. unordered_map)


 

Functions

wxBitmap KiBitmap (BITMAP_DEF aBitmap)
 Function KiBitmap constructs a wxBitmap from a memory record, held in a BITMAP_DEF. More...
 
int KiIconScale (wxWindow *aWindow)
 Function KiIconScale Returns the automatic scale factor that would be used for a given window by KiScaledBitmap and KiScaledSeparator. More...
 
static int get_scale_factor (EDA_BASE_FRAME *aWindow)
 
wxBitmap KiScaledBitmap (BITMAP_DEF aBitmap, EDA_BASE_FRAME *aWindow)
 Function KiScaledBitmap Constructs a wxBitmap from a memory record, scaling it if device DPI demands it. More...
 
wxBitmap KiScaledBitmap (const wxBitmap &aBitmap, EDA_BASE_FRAME *aWindow)
 Function KiScaledBitmap Overload of the above function that takes another wxBitmap as a parameter. More...
 
void KiScaledSeparator (wxAuiToolBar *aToolbar, EDA_BASE_FRAME *aWindow)
 Function KiScaledSeparator Adds a separator to the given toolbar scaled the same way as KiScaledBitmap. More...
 
wxBitmap * KiBitmapNew (BITMAP_DEF aBitmap)
 Function KiBitmapNew allocates a wxBitmap on heap from a memory record, held in a BITMAP_DEF. More...
 
wxMenuItem * AddMenuItem (wxMenu *aMenu, int aId, const wxString &aText, const wxBitmap &aImage, wxItemKind aType=wxITEM_NORMAL)
 Function AddMenuItem is an inline helper function to create and insert a menu item with an icon into aMenu. More...
 
wxMenuItem * AddMenuItem (wxMenu *aMenu, int aId, const wxString &aText, const wxString &aHelpText, const wxBitmap &aImage, wxItemKind aType=wxITEM_NORMAL)
 Function AddMenuItem is an inline helper function to create and insert a menu item with an icon and a help message string into aMenu. More...
 
wxMenuItem * AddMenuItem (wxMenu *aMenu, wxMenu *aSubMenu, int aId, const wxString &aText, const wxBitmap &aImage)
 Function AddMenuItem is an inline helper function to create and insert a menu item with an icon into aSubMenu in aMenu. More...
 
wxMenuItem * AddMenuItem (wxMenu *aMenu, wxMenu *aSubMenu, int aId, const wxString &aText, const wxString &aHelpText, const wxBitmap &aImage)
 Function AddMenuItem is an inline helper function to create and insert a menu item with an icon and a help message string into aSubMenu in aMenu. More...
 

Function Documentation

wxMenuItem* AddMenuItem ( wxMenu *  aMenu,
int  aId,
const wxString &  aText,
const wxBitmap &  aImage,
wxItemKind  aType = wxITEM_NORMAL 
)

Function AddMenuItem is an inline helper function to create and insert a menu item with an icon into aMenu.

Parameters
aMenuis the menu to add the new item.
aIdis the command ID for the new menu item.
aTextis the string for the new menu item.
aImageis the icon to add to the new menu item.
aTypeis the type of menu :wxITEM_NORMAL (default), wxITEM_CHECK ...
Returns
a pointer to the new created wxMenuItem

Definition at line 194 of file bitmap.cpp.

References PGM_BASE::CommonSettings(), KiBitmap(), Pgm(), and USE_ICONS_IN_MENUS_KEY.

Referenced by SCH_EDIT_FRAME::addJunctionMenuEntries(), PGM_BASE::AddMenuLanguageList(), AddMenusForBitmap(), AddMenusForBlock(), AddMenusForBus(), AddMenusForBusEntry(), AddMenusForComponent(), AddMenusForComponentField(), AddMenusForEditComponent(), AddMenusForGLabel(), AddMenusForHierchicalSheet(), AddMenusForHLabel(), AddMenusForLabel(), AddMenusForMarkers(), AddMenusForPin(), AddMenusForSheetPin(), AddMenusForText(), AddMenusForWire(), EDA_DRAW_FRAME::AddMenuZoomAndGrid(), AddNewItemsCommand(), PCB_LAYER_WIDGET::AddRightClickMenuItems(), GERBER_LAYER_WIDGET::AddRightClickMenuItems(), EDA_3D_VIEWER::CreateMenuBar(), PCB_EDIT_FRAME::createPopUpBlockMenu(), PCB_EDIT_FRAME::createPopUpMenuForFootprints(), PCB_EDIT_FRAME::createPopUpMenuForFpPads(), PCB_EDIT_FRAME::createPopUpMenuForFpTexts(), PCB_EDIT_FRAME::createPopUpMenuForMarkers(), PCB_EDIT_FRAME::createPopUpMenuForTexts(), PCB_EDIT_FRAME::createPopupMenuForTracks(), PCB_EDIT_FRAME::createPopUpMenuForZones(), PYTHON_ACTION_PLUGINS::deregister_action(), FOOTPRINT_TREE_PANE::FOOTPRINT_TREE_PANE(), LIB_EDIT_FRAME::locateItem(), SCH_EDIT_FRAME::LocateItem(), FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay(), DIALOG_CONFIGURE_PATHS::OnGridCellRightClick(), TREE_PROJECT_FRAME::OnRight(), FOOTPRINT_EDIT_FRAME::OnRightClick(), EDA_3D_CANVAS::OnRightClick(), PL_EDITOR_FRAME::OnRightClick(), GERBVIEW_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRightClick(), LIB_EDIT_FRAME::OnRightClick(), PCB_EDIT_FRAME::OnRightClick(), LAYER_WIDGET::OnRightDownLayer(), LAYER_WIDGET::OnRightDownRender(), PL_EDITOR_FRAME::OnTreeRightClick(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), prepareEditMenu(), prepareExportMenu(), prepareFilesMenu(), prepareHelpMenu(), prepareInspectMenu(), prepareLibraryMenu(), preparePlaceMenu(), preparePreferencesMenu(), prepareRouteMenu(), prepareToolsMenu(), prepareViewMenu(), LIB_VIEW_FRAME::ReCreateMenuBar(), CVPCB_MAINFRAME::ReCreateMenuBar(), FOOTPRINT_VIEWER_FRAME::ReCreateMenuBar(), FOOTPRINT_EDIT_FRAME::ReCreateMenuBar(), PL_EDITOR_FRAME::ReCreateMenuBar(), KICAD_MANAGER_FRAME::ReCreateMenuBar(), LIB_EDIT_FRAME::ReCreateMenuBar(), GERBVIEW_FRAME::ReCreateMenuBar(), SIM_PLOT_FRAME::SIGNAL_CONTEXT_MENU::SIGNAL_CONTEXT_MENU(), and SYMBOL_TREE_PANE::SYMBOL_TREE_PANE().

196 {
197  wxMenuItem* item;
198 
199  item = new wxMenuItem( aMenu, aId, aText, wxEmptyString, aType );
200 
201  // Retrieve the global applicaton show icon option:
202  bool useImagesInMenus;
203  Pgm().CommonSettings()->Read( USE_ICONS_IN_MENUS_KEY, &useImagesInMenus );
204 
205  if( useImagesInMenus )
206  {
207  if( aType == wxITEM_CHECK || aType == wxITEM_RADIO )
208  {
209  #if defined( __WINDOWS__ )
210  item->SetBitmaps( KiBitmap( checked_ok_xpm ), aImage );
211  // A workaround to a strange bug on Windows, wx Widgets 3.0:
212  // size of bitmaps is not taken in account for wxITEM_{CHECK,RADIO} menu
213  // unless we call SetFont
214  item->SetFont( *wxNORMAL_FONT );
215  #endif
216  }
217  else if( aType != wxITEM_RADIO )
218  {
219  item->SetBitmap( aImage );
220  }
221  }
222 
223  aMenu->Append( item );
224 
225  return item;
226 }
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:66
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Function KiBitmap constructs a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:78
VTBL_ENTRY wxConfigBase * CommonSettings() const
Definition: pgm_base.h:187
#define USE_ICONS_IN_MENUS_KEY
Definition: pgm_base.h:44
wxMenuItem* AddMenuItem ( wxMenu *  aMenu,
int  aId,
const wxString &  aText,
const wxString &  aHelpText,
const wxBitmap &  aImage,
wxItemKind  aType = wxITEM_NORMAL 
)

Function AddMenuItem is an inline helper function to create and insert a menu item with an icon and a help message string into aMenu.

Parameters
aMenuis the menu to add the new item.
aIdis the command ID for the new menu item.
aTextis the string for the new menu item.
aHelpTextis the help message string for the new menu item.
aImageis the icon to add to the new menu item.
aTypeis the type of menu :wxITEM_NORMAL (default), wxITEM_CHECK ...
Returns
a pointer to the new created wxMenuItem

Definition at line 229 of file bitmap.cpp.

References PGM_BASE::CommonSettings(), KiBitmap(), Pgm(), and USE_ICONS_IN_MENUS_KEY.

232 {
233  wxMenuItem* item;
234 
235  item = new wxMenuItem( aMenu, aId, aText, aHelpText, aType );
236 
237  // Retrieve the global applicaton show icon option:
238  bool useImagesInMenus;
239  Pgm().CommonSettings()->Read( USE_ICONS_IN_MENUS_KEY, &useImagesInMenus );
240 
241  if( useImagesInMenus )
242  {
243  if( aType == wxITEM_CHECK || aType == wxITEM_RADIO )
244  {
245  #if defined( __WINDOWS__ )
246  item->SetBitmaps( KiBitmap( checked_ok_xpm ), aImage );
247  // A workaround to a strange bug on Windows, wx Widgets 3.0:
248  // size of bitmaps is not taken in account for wxITEM_{CHECK,RADIO} menu
249  // unless we call SetFont
250  item->SetFont( *wxNORMAL_FONT );
251  #endif
252  }
253  else if( aType != wxITEM_RADIO )
254  {
255  item->SetBitmap( aImage );
256  }
257  }
258 
259  aMenu->Append( item );
260 
261  return item;
262 }
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:66
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Function KiBitmap constructs a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:78
VTBL_ENTRY wxConfigBase * CommonSettings() const
Definition: pgm_base.h:187
#define USE_ICONS_IN_MENUS_KEY
Definition: pgm_base.h:44
wxMenuItem* AddMenuItem ( wxMenu *  aMenu,
wxMenu *  aSubMenu,
int  aId,
const wxString &  aText,
const wxBitmap &  aImage 
)

Function AddMenuItem is an inline helper function to create and insert a menu item with an icon into aSubMenu in aMenu.

Parameters
aMenuis the menu to add the new submenu item.
aSubMenuis the submenu to add the new menu.
aIdis the command ID for the new menu item.
aTextis the string for the new menu item.
aImageis the icon to add to the new menu item.
Returns
a pointer to the new created wxMenuItem

Definition at line 265 of file bitmap.cpp.

References PGM_BASE::CommonSettings(), Pgm(), and USE_ICONS_IN_MENUS_KEY.

267 {
268  wxMenuItem* item;
269 
270  item = new wxMenuItem( aMenu, aId, aText );
271  item->SetSubMenu( aSubMenu );
272 
273  // Retrieve the global applicaton show icon option:
274  bool useImagesInMenus;
275  Pgm().CommonSettings()->Read( USE_ICONS_IN_MENUS_KEY, &useImagesInMenus );
276 
277  if( useImagesInMenus )
278  item->SetBitmap( aImage );
279 
280  aMenu->Append( item );
281 
282  return item;
283 }
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:66
VTBL_ENTRY wxConfigBase * CommonSettings() const
Definition: pgm_base.h:187
#define USE_ICONS_IN_MENUS_KEY
Definition: pgm_base.h:44
wxMenuItem* AddMenuItem ( wxMenu *  aMenu,
wxMenu *  aSubMenu,
int  aId,
const wxString &  aText,
const wxString &  aHelpText,
const wxBitmap &  aImage 
)

Function AddMenuItem is an inline helper function to create and insert a menu item with an icon and a help message string into aSubMenu in aMenu.

Parameters
aMenuis the menu to add the new submenu item.
aSubMenuis the submenu to add the new menu.
aIdis the command ID for the new menu item.
aTextis the string for the new menu item.
aHelpTextis the help message string for the new menu item.
aImageis the icon to add to the new menu item.
Returns
a pointer to the new created wxMenuItem

Definition at line 286 of file bitmap.cpp.

References PGM_BASE::CommonSettings(), Pgm(), and USE_ICONS_IN_MENUS_KEY.

289 {
290  wxMenuItem* item;
291 
292  item = new wxMenuItem( aMenu, aId, aText, aHelpText );
293  item->SetSubMenu( aSubMenu );
294 
295  // Retrieve the global applicaton show icon option:
296  bool useImagesInMenus;
297  Pgm().CommonSettings()->Read( USE_ICONS_IN_MENUS_KEY, &useImagesInMenus );
298 
299  if( useImagesInMenus )
300  item->SetBitmap( aImage );
301 
302  aMenu->Append( item );
303 
304  return item;
305 }
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:66
VTBL_ENTRY wxConfigBase * CommonSettings() const
Definition: pgm_base.h:187
#define USE_ICONS_IN_MENUS_KEY
Definition: pgm_base.h:44
static int get_scale_factor ( EDA_BASE_FRAME aWindow)
static

Definition at line 103 of file bitmap.cpp.

References PGM_BASE::CommonSettings(), ICON_SCALE_KEY, KiIconScale(), and Pgm().

Referenced by KiScaledBitmap(), and KiScaledSeparator().

104 {
105  int requested_scale;
106  Pgm().CommonSettings()->Read( ICON_SCALE_KEY, &requested_scale, 0 );
107 
108  if( requested_scale > 0 )
109  return requested_scale;
110  else
111  return KiIconScale( aWindow );
112 }
int KiIconScale(wxWindow *aWindow)
Function KiIconScale Returns the automatic scale factor that would be used for a given window by KiSc...
Definition: bitmap.cpp:88
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:66
#define ICON_SCALE_KEY
Definition: pgm_base.h:45
VTBL_ENTRY wxConfigBase * CommonSettings() const
Definition: pgm_base.h:187
wxBitmap KiBitmap ( BITMAP_DEF  aBitmap)

Function KiBitmap constructs a wxBitmap from a memory record, held in a BITMAP_DEF.

Definition at line 78 of file bitmap.cpp.

References SCALED_BITMAP_ID::bitmap, BITMAP_OPAQUE::byteCount, and BITMAP_OPAQUE::png.

Referenced by SCH_EDIT_FRAME::addJunctionMenuEntries(), AddMenuItem(), PGM_BASE::AddMenuLanguageList(), AddMenusForBitmap(), AddMenusForBlock(), AddMenusForBus(), AddMenusForBusEntry(), AddMenusForComponent(), AddMenusForComponentField(), AddMenusForEditComponent(), AddMenusForGLabel(), AddMenusForHierchicalSheet(), AddMenusForHLabel(), AddMenusForLabel(), AddMenusForMarkers(), AddMenusForPin(), AddMenusForSheetPin(), AddMenusForText(), AddMenusForWire(), EDA_DRAW_FRAME::AddMenuZoomAndGrid(), AddNewItemsCommand(), PCB_LAYER_WIDGET::AddRightClickMenuItems(), GERBER_LAYER_WIDGET::AddRightClickMenuItems(), GRID_CELL_ICON_TEXT_POPUP::Create(), LAUNCHER_PANEL::CreateCommandToolbar(), EDA_3D_VIEWER::CreateMenuBar(), PCB_EDIT_FRAME::createPopUpBlockMenu(), PCB_EDIT_FRAME::createPopUpMenuForFootprints(), PCB_EDIT_FRAME::createPopUpMenuForFpPads(), PCB_EDIT_FRAME::createPopUpMenuForFpTexts(), PCB_EDIT_FRAME::createPopUpMenuForMarkers(), PCB_EDIT_FRAME::createPopUpMenuForTexts(), PCB_EDIT_FRAME::createPopupMenuForTracks(), PCB_EDIT_FRAME::createPopUpMenuForZones(), DIALOG_ABOUT::createStaticBitmap(), CVPCB_MAINFRAME::CVPCB_MAINFRAME(), PYTHON_ACTION_PLUGINS::deregister_action(), DIALOG_ABOUT::DIALOG_ABOUT(), DIALOG_BOM::DIALOG_BOM(), DIALOG_CONFIGURE_PATHS::DIALOG_CONFIGURE_PATHS(), DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE(), DIALOG_DRC_CONTROL::DIALOG_DRC_CONTROL(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS(), DIALOG_EXIT::DIALOG_EXIT(), DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_FP_PLUGIN_OPTIONS::DIALOG_FP_PLUGIN_OPTIONS(), DIALOG_IMPORT_SETTINGS::DIALOG_IMPORT_SETTINGS(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE(), DIALOG_NETLIST::DIALOG_NETLIST(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::DIALOG_PAD_PRIMITIVE_POLY_PROPS(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), DIALOG_PLOT_SCHEMATIC::DIALOG_PLOT_SCHEMATIC(), DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME(), GRID_CELL_ICON_TEXT_RENDERER::Draw(), EDA_3D_VIEWER::EDA_3D_VIEWER(), EVT_GRID_CMD_CELL_CHANGED(), EVT_TOOL_RANGE(), EVT_UPDATE_UI_RANGE(), FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME(), FOOTPRINT_TREE_PANE::FOOTPRINT_TREE_PANE(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), GERBVIEW_FRAME::GERBVIEW_FRAME(), HIERARCHY_TREE::HIERARCHY_TREE(), DIALOG_PLOT::init_Dialog(), DIALOG_3D_VIEW_OPTIONS::initDialog(), DIALOG_GEN_FOOTPRINT_POSITION::initDialog(), DIALOG_GENDRILL::InitDisplayParams(), PANEL_PREV_3D::initPanel(), DIALOG_ANNOTATE::InitValues(), KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME(), LIB_EDIT_FRAME::locateItem(), SCH_EDIT_FRAME::LocateItem(), FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay(), DIALOG_CONFIGURE_PATHS::OnGridCellRightClick(), WIZARD_3DSHAPE_LIBS_DOWNLOADER::OnPageChanged(), TREE_PROJECT_FRAME::OnRight(), FOOTPRINT_EDIT_FRAME::OnRightClick(), EDA_3D_CANVAS::OnRightClick(), PL_EDITOR_FRAME::OnRightClick(), GERBVIEW_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRightClick(), LIB_EDIT_FRAME::OnRightClick(), PCB_EDIT_FRAME::OnRightClick(), LAYER_WIDGET::OnRightDownLayer(), LAYER_WIDGET::OnRightDownRender(), SIM_PLOT_FRAME::onSimFinished(), SIM_PLOT_FRAME::onSimStarted(), PL_EDITOR_FRAME::OnTreeRightClick(), PANEL_COMMON_SETTINGS::PANEL_COMMON_SETTINGS(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::PANEL_EESCHEMA_TEMPLATE_FIELDNAMES(), PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE(), PANEL_PCBNEW_ACTION_PLUGINS::PANEL_PCBNEW_ACTION_PLUGINS(), PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES(), PANEL_SETUP_TRACKS_AND_VIAS::PANEL_SETUP_TRACKS_AND_VIAS(), PANEL_SYM_LIB_TABLE::PANEL_SYM_LIB_TABLE(), PCB_EDIT_FRAME::PCB_EDIT_FRAME(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), PinShapeComboBox::PinShapeComboBox(), PinTypeComboBox::PinTypeComboBox(), PL_EDITOR_FRAME::PL_EDITOR_FRAME(), prepareEditMenu(), prepareExportMenu(), prepareFilesMenu(), prepareHelpMenu(), prepareInspectMenu(), prepareLibraryMenu(), preparePlaceMenu(), preparePreferencesMenu(), prepareRouteMenu(), prepareToolsMenu(), prepareViewMenu(), DIALOG_ERC::ReBuildMatrixPanel(), FOOTPRINT_WIZARD_FRAME::ReCreateHToolbar(), EDA_3D_VIEWER::ReCreateMainToolbar(), LIB_VIEW_FRAME::ReCreateMenuBar(), CVPCB_MAINFRAME::ReCreateMenuBar(), FOOTPRINT_VIEWER_FRAME::ReCreateMenuBar(), FOOTPRINT_EDIT_FRAME::ReCreateMenuBar(), PL_EDITOR_FRAME::ReCreateMenuBar(), KICAD_MANAGER_FRAME::ReCreateMenuBar(), LIB_EDIT_FRAME::ReCreateMenuBar(), GERBVIEW_FRAME::ReCreateMenuBar(), set_wxMenuIcon(), DIALOG_ERC::setDRCMatrixButtonState(), SIM_PLOT_FRAME::SIGNAL_CONTEXT_MENU::SIGNAL_CONTEXT_MENU(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), SYMBOL_TREE_PANE::SYMBOL_TREE_PANE(), TEXT_BUTTON_FILE_BROWSER::TEXT_BUTTON_FILE_BROWSER(), TEXT_BUTTON_FP_CHOOSER::TEXT_BUTTON_FP_CHOOSER(), TEXT_BUTTON_SYMBOL_CHOOSER::TEXT_BUTTON_SYMBOL_CHOOSER(), TEXT_BUTTON_URL::TEXT_BUTTON_URL(), DIALOG_PNS_LENGTH_TUNING_SETTINGS::TransferDataToWindow(), and TREEPROJECTFILES::TREEPROJECTFILES().

79 {
80  wxMemoryInputStream is( aBitmap->png, aBitmap->byteCount );
81  wxImage image( is, wxBITMAP_TYPE_PNG );
82  wxBitmap bitmap( image );
83 
84  return bitmap;
85 }
const unsigned char * png
Definition: bitmap_types.h:43
wxBitmap* KiBitmapNew ( BITMAP_DEF  aBitmap)

Function KiBitmapNew allocates a wxBitmap on heap from a memory record, held in a BITMAP_DEF.

Returns
wxBitmap* - caller owns it.

Definition at line 184 of file bitmap.cpp.

References SCALED_BITMAP_ID::bitmap, BITMAP_OPAQUE::byteCount, and BITMAP_OPAQUE::png.

Referenced by ABOUT_APP_INFO::CreateKiBitmap().

185 {
186  wxMemoryInputStream is( aBitmap->png, aBitmap->byteCount );
187  wxImage image( is, wxBITMAP_TYPE_PNG );
188  wxBitmap* bitmap = new wxBitmap( image );
189 
190  return bitmap;
191 }
const unsigned char * png
Definition: bitmap_types.h:43
int KiIconScale ( wxWindow *  aWindow)

Function KiIconScale Returns the automatic scale factor that would be used for a given window by KiScaledBitmap and KiScaledSeparator.

Definition at line 88 of file bitmap.cpp.

Referenced by get_scale_factor(), PANEL_COMMON_SETTINGS::OnScaleAuto(), PCB_EDIT_FRAME::PrepareLayerIndicator(), and PANEL_COMMON_SETTINGS::TransferDataToWindow().

89 {
90  const int vert_size = aWindow->ConvertDialogToPixels( wxSize( 0, 8 ) ).y;
91 
92  // Autoscale won't exceed unity until the system has quite high resolution,
93  // because we don't want the icons to look obviously scaled on a system
94  // where it's easy to see it.
95 
96  if( vert_size > 34 ) return 8;
97  else if( vert_size > 29 ) return 7;
98  else if( vert_size > 24 ) return 6;
99  else return 4;
100 }
wxBitmap KiScaledBitmap ( BITMAP_DEF  aBitmap,
EDA_BASE_FRAME aWindow 
)

Function KiScaledBitmap Constructs a wxBitmap from a memory record, scaling it if device DPI demands it.

Internally this may use caching to avoid scaling the same image twice. If caching is used, it's guaranteed threadsafe.

Parameters
aBitmapbitmap definition
aWindowtarget window for scaling context

Definition at line 115 of file bitmap.cpp.

References BITMAP_OPAQUE::byteCount, get_scale_factor(), BITMAP_OPAQUE::png, and SCALED_BITMAP_ID::scale.

Referenced by PYTHON_ACTION_PLUGINS::deregister_action(), PCB_EDIT_FRAME::ReCreateAuxiliaryToolbar(), KICAD_MANAGER_FRAME::RecreateBaseHToolbar(), DISPLAY_FOOTPRINTS_FRAME::ReCreateHToolbar(), LIB_VIEW_FRAME::ReCreateHToolbar(), PL_EDITOR_FRAME::ReCreateHToolbar(), FOOTPRINT_EDIT_FRAME::ReCreateHToolbar(), CVPCB_MAINFRAME::ReCreateHToolbar(), FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar(), GERBVIEW_FRAME::ReCreateHToolbar(), SCH_EDIT_FRAME::ReCreateHToolbar(), LIB_EDIT_FRAME::ReCreateHToolbar(), PCB_EDIT_FRAME::ReCreateHToolbar(), PCB_EDIT_FRAME::ReCreateMicrowaveVToolbar(), DISPLAY_FOOTPRINTS_FRAME::ReCreateOptToolbar(), FOOTPRINT_EDIT_FRAME::ReCreateOptToolbar(), GERBVIEW_FRAME::ReCreateOptToolbar(), SCH_EDIT_FRAME::ReCreateOptToolbar(), LIB_EDIT_FRAME::ReCreateOptToolbar(), PCB_EDIT_FRAME::ReCreateOptToolbar(), FOOTPRINT_EDIT_FRAME::ReCreateVToolbar(), PL_EDITOR_FRAME::ReCreateVToolbar(), GERBVIEW_FRAME::ReCreateVToolbar(), SCH_EDIT_FRAME::ReCreateVToolbar(), LIB_EDIT_FRAME::ReCreateVToolbar(), and PCB_EDIT_FRAME::ReCreateVToolbar().

116 {
117  // Bitmap conversions are cached because they can be slow.
118  static std::unordered_map<SCALED_BITMAP_ID, wxBitmap> bitmap_cache;
119  static std::mutex bitmap_cache_mutex;
120  const int scale = get_scale_factor( aWindow );
121 
122  SCALED_BITMAP_ID id = { aBitmap, scale };
123 
124  std::lock_guard<std::mutex> guard( bitmap_cache_mutex );
125  auto it = bitmap_cache.find( id );
126 
127  if( it != bitmap_cache.end() )
128  {
129  return it->second;
130  }
131  else
132  {
133  wxMemoryInputStream is( aBitmap->png, aBitmap->byteCount );
134  wxImage image( is, wxBITMAP_TYPE_PNG );
135 
136  // Bilinear seems to genuinely look better for these line-drawing icons
137  // than bicubic, despite claims in the wx documentation that bicubic is
138  // "highest quality". I don't recommend changing this. Bicubic looks
139  // blurry and makes me want an eye exam.
140  image.Rescale( scale * image.GetWidth() / 4, scale * image.GetHeight() / 4,
141  wxIMAGE_QUALITY_BILINEAR );
142  return bitmap_cache.emplace( id, wxBitmap( image ) ).first->second;
143  }
144 }
const unsigned char * png
Definition: bitmap_types.h:43
const int scale
static int get_scale_factor(EDA_BASE_FRAME *aWindow)
Definition: bitmap.cpp:103
wxBitmap KiScaledBitmap ( const wxBitmap &  aBitmap,
EDA_BASE_FRAME aWindow 
)

Function KiScaledBitmap Overload of the above function that takes another wxBitmap as a parameter.

Parameters
aBitmapbitmap definition
aWindowtarget window for scaling context

Definition at line 147 of file bitmap.cpp.

References get_scale_factor(), and SCALED_BITMAP_ID::scale.

148 {
149  const int scale = get_scale_factor( aWindow );
150 
151  if( scale == 4)
152  {
153  return wxBitmap( aBitmap );
154  }
155  else
156  {
157  wxImage image = aBitmap.ConvertToImage();
158  image.Rescale( scale * image.GetWidth() / 4, scale * image.GetHeight() / 4,
159  wxIMAGE_QUALITY_BILINEAR );
160 
161  return wxBitmap( image );
162  }
163 }
const int scale
static int get_scale_factor(EDA_BASE_FRAME *aWindow)
Definition: bitmap.cpp:103
void KiScaledSeparator ( wxAuiToolBar *  aToolbar,
EDA_BASE_FRAME aWindow 
)

Function KiScaledSeparator Adds a separator to the given toolbar scaled the same way as KiScaledBitmap.

Definition at line 166 of file bitmap.cpp.

References get_scale_factor(), and SCALED_BITMAP_ID::scale.

Referenced by PYTHON_ACTION_PLUGINS::deregister_action(), GERBVIEW_FRAME::ReCreateAuxiliaryToolbar(), PCB_EDIT_FRAME::ReCreateAuxiliaryToolbar(), KICAD_MANAGER_FRAME::RecreateBaseHToolbar(), DISPLAY_FOOTPRINTS_FRAME::ReCreateHToolbar(), PL_EDITOR_FRAME::ReCreateHToolbar(), CVPCB_MAINFRAME::ReCreateHToolbar(), FOOTPRINT_EDIT_FRAME::ReCreateHToolbar(), FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar(), GERBVIEW_FRAME::ReCreateHToolbar(), SCH_EDIT_FRAME::ReCreateHToolbar(), LIB_EDIT_FRAME::ReCreateHToolbar(), PCB_EDIT_FRAME::ReCreateHToolbar(), PCB_EDIT_FRAME::ReCreateMicrowaveVToolbar(), DISPLAY_FOOTPRINTS_FRAME::ReCreateOptToolbar(), FOOTPRINT_EDIT_FRAME::ReCreateOptToolbar(), GERBVIEW_FRAME::ReCreateOptToolbar(), PCB_EDIT_FRAME::ReCreateOptToolbar(), FOOTPRINT_EDIT_FRAME::ReCreateVToolbar(), PL_EDITOR_FRAME::ReCreateVToolbar(), GERBVIEW_FRAME::ReCreateVToolbar(), and PCB_EDIT_FRAME::ReCreateVToolbar().

167 {
168  const int scale = get_scale_factor( aWindow );
169 
170  if( scale > 4 )
171  {
172  aToolbar->AddSpacer( 16 * ( scale - 4 ) / 4 );
173  }
174 
175  aToolbar->AddSeparator();
176 
177  if( scale > 4 )
178  {
179  aToolbar->AddSpacer( 16 * ( scale - 4 ) / 4 );
180  }
181 }
const int scale
static int get_scale_factor(EDA_BASE_FRAME *aWindow)
Definition: bitmap.cpp:103