KiCad PCB EDA Suite
bitmap_types.h File Reference

Go to the source code of this file.

Enumerations

enum  BITMAP_TYPE { BITMAP_TYPE::PNG, BITMAP_TYPE::JPG, BITMAP_TYPE::BMP }
 

Functions

BITMAP_STOREGetBitmapStore ()
 
wxBitmap KiBitmap (BITMAPS aBitmap, int aHeightTag=-1)
 Construct a wxBitmap from an image identifier Returns the image from the active theme if the image has multiple theme variants. More...
 
wxBitmap KiBitmap (const BITMAP_OPAQUE *aBitmap)
 Compatibility shim for pcb_calculator until its images are pulled into the PNG pipeline. More...
 
void ClearScaledBitmapCache ()
 Wipes out the scaled bitmap cache so that the icon theme can be changed. More...
 
wxBitmap KiScaledBitmap (BITMAPS aBitmap, wxWindow *aWindow, int aHeight=-1, bool aQuantized=false)
 Construct a wxBitmap from a memory record, scaling it if device DPI demands it. More...
 
wxBitmap KiScaledBitmap (const wxBitmap &aBitmap, wxWindow *aWindow)
 Overload of the above function that takes another wxBitmap as a parameter. More...
 
int KiIconScale (wxWindow *aWindow)
 Return the automatic scale factor that would be used for a given window by KiScaledBitmap and KiScaledSeparator. More...
 
wxBitmap * KiBitmapNew (BITMAPS aBitmap)
 Allocate a wxBitmap on heap from a memory record, held in a BITMAPS. More...
 
bool SaveCanvasImageToFile (EDA_DRAW_FRAME *aFrame, const wxString &aFileName, BITMAP_TYPE aBitmapType=BITMAP_TYPE::PNG)
 Save the current view as an image file. More...
 

Enumeration Type Documentation

◆ BITMAP_TYPE

enum BITMAP_TYPE
strong
Enumerator
PNG 
JPG 
BMP 

Definition at line 41 of file bitmap_types.h.

Function Documentation

◆ ClearScaledBitmapCache()

void ClearScaledBitmapCache ( )

Wipes out the scaled bitmap cache so that the icon theme can be changed.

TODO: move scaling system into BITMAP_STORE so this global doesn't need to exist

Definition at line 173 of file bitmap.cpp.

174 {
175  std::lock_guard<std::mutex> guard( s_BitmapCacheMutex );
176  s_ScaledBitmapCache.clear();
177 }
static std::unordered_map< SCALED_BITMAP_ID, wxBitmap > s_ScaledBitmapCache
Definition: bitmap.cpp:88
static std::mutex s_BitmapCacheMutex
Definition: bitmap.cpp:90

References s_BitmapCacheMutex, and s_ScaledBitmapCache.

Referenced by EDA_BASE_FRAME::ThemeChanged().

◆ GetBitmapStore()

BITMAP_STORE* GetBitmapStore ( )

Definition at line 93 of file bitmap.cpp.

94 {
95  if( !s_BitmapStore )
96  {
97  wxFileName path( PATHS::GetStockDataPath() + wxT( "/resources" ), wxT( "images.zip" ) );
98  s_BitmapStore = std::make_unique<BITMAP_STORE>();
99  }
100 
101  return s_BitmapStore.get();
102 }
static wxString GetStockDataPath(bool aRespectRunFromBuildDir=true)
Gets the stock (install) data path, which is the base path for things like scripting,...
Definition: paths.cpp:150
static std::unique_ptr< BITMAP_STORE > s_BitmapStore
Definition: bitmap.cpp:50

References PATHS::GetStockDataPath(), path, and s_BitmapStore.

Referenced by EDA_BASE_FRAME::CommonSettingsChanged(), EDA_BASE_FRAME::HandleSystemColorChange(), KiBitmap(), KiBitmapNew(), KiScaledBitmap(), PANEL_KICAD_LAUNCHER::onThemeChanged(), PCB_CALCULATOR_FRAME::onThemeChanged(), PROJECT_TREE_PANE::onThemeChanged(), ACTION_TOOLBAR::onThemeChanged(), and ACTION_PLUGINS::register_action().

◆ KiBitmap() [1/2]

wxBitmap KiBitmap ( BITMAPS  aBitmap,
int  aHeightTag = -1 
)

Construct a wxBitmap from an image identifier Returns the image from the active theme if the image has multiple theme variants.

Parameters
aBitmapis from the BITMAPS enum in bitmaps_list.h
aHeightTagis the requested height tag for multi-res bitmaps (-1 for any)

Definition at line 105 of file bitmap.cpp.

106 {
107  return GetBitmapStore()->GetBitmap( aBitmap, aHeightTag );
108 }
wxBitmap GetBitmap(BITMAPS aBitmapId, int aHeight=-1)
Retrieves a bitmap from the given bitmap id.
BITMAP_STORE * GetBitmapStore()
Definition: bitmap.cpp:93

References BITMAP_STORE::GetBitmap(), and GetBitmapStore().

Referenced by ACTION_MENU::Add(), CONDITIONAL_MENU::AddCheckItem(), CONDITIONAL_MENU::AddItem(), GERBER_LAYER_WIDGET::AddRightClickMenuItems(), APPEARANCE_CONTROLS::APPEARANCE_CONTROLS(), BM2CMP_FRAME::BM2CMP_FRAME(), PCB_EDIT_FRAME::buildActionPluginMenus(), GRID_CELL_ICON_TEXT_POPUP::Create(), DIALOG_ABOUT::createStaticBitmap(), CVPCB_MAINFRAME::CVPCB_MAINFRAME(), DIALOG_ABOUT::DIALOG_ABOUT(), DIALOG_BOARD_REANNOTATE::DIALOG_BOARD_REANNOTATE(), DIALOG_BOM::DIALOG_BOM(), DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS(), DIALOG_CONFIGURE_PATHS::DIALOG_CONFIGURE_PATHS(), DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS(), DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG(), DIALOG_FOOTPRINT_PROPERTIES::DIALOG_FOOTPRINT_PROPERTIES(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR(), DIALOG_FP_PLUGIN_OPTIONS::DIALOG_FP_PLUGIN_OPTIONS(), DIALOG_GROUP_PROPERTIES::DIALOG_GROUP_PROPERTIES(), DIALOG_IMPORT_GFX::DIALOG_IMPORT_GFX(), DIALOG_IMPORT_SETTINGS::DIALOG_IMPORT_SETTINGS(), DIALOG_LIB_EDIT_PIN_TABLE::DIALOG_LIB_EDIT_PIN_TABLE(), DIALOG_LIB_SYMBOL_PROPERTIES::DIALOG_LIB_SYMBOL_PROPERTIES(), DIALOG_LINE_WIRE_BUS_PROPERTIES::DIALOG_LINE_WIRE_BUS_PROPERTIES(), DIALOG_LOCKED_ITEMS_QUERY::DIALOG_LOCKED_ITEMS_QUERY(), DIALOG_MANAGE_REPOSITORIES::DIALOG_MANAGE_REPOSITORIES(), DIALOG_MIGRATE_SETTINGS::DIALOG_MIGRATE_SETTINGS(), DIALOG_NET_INSPECTOR::DIALOG_NET_INSPECTOR(), DIALOG_NETLIST::DIALOG_NETLIST(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::DIALOG_PAD_PRIMITIVE_POLY_PROPS(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS(), DIALOG_PCM::DIALOG_PCM(), DIALOG_PIN_PROPERTIES::DIALOG_PIN_PROPERTIES(), DIALOG_PLOT_SCHEMATIC::DIALOG_PLOT_SCHEMATIC(), DIALOG_SCH_IMPORT_SETTINGS::DIALOG_SCH_IMPORT_SETTINGS(), DIALOG_SHEET_PROPERTIES::DIALOG_SHEET_PROPERTIES(), DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE(), DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES(), DIALOG_TEMPLATE_SELECTOR::DIALOG_TEMPLATE_SELECTOR(), DIALOG_UNUSED_PAD_LAYERS::DIALOG_UNUSED_PAD_LAYERS(), DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME(), ACTION_MENU::DisplayTitle(), GRID_CELL_ICON_TEXT_RENDERER::Draw(), CONDITIONAL_MENU::Evaluate(), EVT_GRID_CMD_CELL_CHANGED(), EVT_MENU_RANGE(), EVT_TOOL_RANGE(), EVT_UPDATE_UI_RANGE(), FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), GERBVIEW_FRAME::GERBVIEW_FRAME(), GRID_CELL_ICON_TEXT_RENDERER::GetBestSize(), HIERARCHY_TREE::HIERARCHY_TREE(), DIALOG_FIELD_PROPERTIES::init(), DIALOG_PLOT::init_Dialog(), DIALOG_GEN_FOOTPRINT_POSITION::initDialog(), DIALOG_GENDRILL::InitDisplayParams(), DIALOG_ANNOTATE::InitValues(), PROJECT_TREE::LoadIcons(), DIALOG_CONFIGURE_PATHS::OnGridCellRightClick(), PROJECT_TREE_PANE::onRight(), LAYER_WIDGET::OnRightDownLayer(), LAYER_WIDGET::OnRightDownRender(), SIM_PLOT_FRAME::onSimFinished(), SIM_PLOT_FRAME::onSimStarted(), PANEL_ATTENUATORS::PANEL_ATTENUATORS(), PANEL_COMMON_SETTINGS::PANEL_COMMON_SETTINGS(), PANEL_EESCHEMA_TEMPLATE_FIELDNAMES::PANEL_EESCHEMA_TEMPLATE_FIELDNAMES(), PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE(), PANEL_FP_PROPERTIES_3D_MODEL::PANEL_FP_PROPERTIES_3D_MODEL(), PANEL_PACKAGES_VIEW::PANEL_PACKAGES_VIEW(), PANEL_PCBNEW_ACTION_PLUGINS::PANEL_PCBNEW_ACTION_PLUGINS(), PANEL_PREVIEW_3D_MODEL::PANEL_PREVIEW_3D_MODEL(), PANEL_REGULATOR::PANEL_REGULATOR(), PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES(), PANEL_SETUP_RULES::PANEL_SETUP_RULES(), PANEL_SETUP_TRACKS_AND_VIAS::PANEL_SETUP_TRACKS_AND_VIAS(), PANEL_SYM_LIB_TABLE::PANEL_SYM_LIB_TABLE(), PANEL_TEXT_VARIABLES::PANEL_TEXT_VARIABLES(), PANEL_TRANSLINE::PANEL_TRANSLINE(), PANEL_VIA_SIZE::PANEL_VIA_SIZE(), PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME(), PinShapeComboBox::PinShapeComboBox(), PinTypeComboBox::PinTypeComboBox(), PL_EDITOR_FRAME::PL_EDITOR_FRAME(), APPEARANCE_CONTROLS::rebuildLayerContextMenu(), APPEARANCE_CONTROLS::rebuildLayers(), PANEL_SETUP_PINMAP::reBuildMatrixPanel(), APPEARANCE_CONTROLS::rebuildNets(), APPEARANCE_CONTROLS::rebuildObjects(), FOOTPRINT_WIZARD_FRAME::ReCreateHToolbar(), SCH_EDIT_FRAME::SCH_EDIT_FRAME(), PANEL_SETUP_PINMAP::setDRCMatrixButtonState(), SIM_PLOT_FRAME::setIconsForMenuItems(), PANEL_FP_EDITOR_DEFAULTS::Show(), PANEL_SETUP_CONSTRAINTS::Show(), DIALOG_PAD_PROPERTIES::Show(), PANEL_COLOR_SETTINGS::ShowColorContextMenu(), SIM_PLOT_FRAME::SIGNAL_CONTEXT_MENU::SIGNAL_CONTEXT_MENU(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME(), SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME(), DIALOG_UNUSED_PAD_LAYERS::syncImages(), 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(), PANEL_VIA_SIZE::ThemeChanged(), PANEL_TRANSLINE::ThemeChanged(), PANEL_COLOR_CODE::ThemeChanged(), PANEL_ATTENUATORS::ThemeChanged(), PANEL_REGULATOR::ThemeChanged(), BM2CMP_FRAME::ToggleAspectRatioLock(), PANEL_COLOR_CODE::ToleranceSelection(), PANEL_ATTENUATORS::TransfAttenuatorDataToPanel(), DIALOG_PNS_LENGTH_TUNING_SETTINGS::TransferDataToWindow(), PANEL_TRANSLINE::TranslineTypeSelection(), and PANEL_ATTENUATORS::UpdateUI().

◆ KiBitmap() [2/2]

wxBitmap KiBitmap ( const BITMAP_OPAQUE aBitmap)

Compatibility shim for pcb_calculator until its images are pulled into the PNG pipeline.

Definition at line 112 of file bitmap.cpp.

113 {
114  wxMemoryInputStream is( aBitmap->png, aBitmap->byteCount );
115  wxImage image( is, wxBITMAP_TYPE_PNG );
116  wxBitmap bitmap( image );
117 
118  return bitmap;
119 }
const unsigned char * png
Definition: bitmap_opaque.h:27

References BITMAP_OPAQUE::byteCount, image, and BITMAP_OPAQUE::png.

◆ KiBitmapNew()

wxBitmap* KiBitmapNew ( BITMAPS  aBitmap)

Allocate a wxBitmap on heap from a memory record, held in a BITMAPS.

Parameters
aBitmapis from the BITMAPS enum in bitmaps_list.h
Returns
wxBitmap* - caller owns it.

Definition at line 199 of file bitmap.cpp.

200 {
201  wxBitmap* bitmap = new wxBitmap( GetBitmapStore()->GetBitmap( aBitmap ) );
202 
203  return bitmap;
204 }
BITMAP_STORE * GetBitmapStore()
Definition: bitmap.cpp:93

References GetBitmapStore().

Referenced by ABOUT_APP_INFO::CreateKiBitmap().

◆ KiIconScale()

int KiIconScale ( wxWindow *  aWindow)

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

Definition at line 122 of file bitmap.cpp.

123 {
124  const int vert_size = aWindow->ConvertDialogToPixels( wxSize( 0, 8 ) ).y;
125 
126  // Autoscale won't exceed unity until the system has quite high resolution,
127  // because we don't want the icons to look obviously scaled on a system
128  // where it's easy to see it.
129 
130  if( vert_size > 34 ) return 8;
131  else if( vert_size > 29 ) return 7;
132  else if( vert_size > 24 ) return 6;
133  else return 4;
134 }

Referenced by ACTION_TOOLBAR::AddScaledSeparator(), PANEL_COMMON_SETTINGS::applySettingsToPanel(), get_scale_factor(), getGUIFont(), PANEL_COMMON_SETTINGS::OnIconScaleAuto(), and PCB_EDIT_FRAME::PrepareLayerIndicator().

◆ KiScaledBitmap() [1/2]

wxBitmap KiScaledBitmap ( BITMAPS  aBitmap,
wxWindow *  aWindow,
int  aHeight = -1,
bool  aQuantized = false 
)

Construct 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
aBitmapis from the BITMAPS enum in bitmaps_list.h
aWindowtarget window for scaling context
aHeightis the requested image height for the source bitmap, or -1 for any height
aQuantizedif true scaling will be rounded to integers (2X, 3X, etc.).

Definition at line 148 of file bitmap.cpp.

149 {
150  // Bitmap conversions are cached because they can be slow.
151  int scale = get_scale_factor( aWindow );
152 
153  if( aQuantized )
154  scale = KiROUND( (double) scale / 4.0 ) * 4;
155 
156  SCALED_BITMAP_ID id = { static_cast<BITMAPS>( aBitmap ), scale };
157 
158  std::lock_guard<std::mutex> guard( s_BitmapCacheMutex );
159  auto it = s_ScaledBitmapCache.find( id );
160 
161  if( it != s_ScaledBitmapCache.end() )
162  {
163  return it->second;
164  }
165  else
166  {
167  wxBitmap bitmap = GetBitmapStore()->GetBitmapScaled( aBitmap, scale, aHeight );
168  return s_ScaledBitmapCache.emplace( id, bitmap ).first->second;
169  }
170 }
wxBitmap GetBitmapScaled(BITMAPS aBitmapId, int aScaleFactor, int aHeight=-1)
Retrieves a bitmap from the given bitmap id, scaled to a given factor.
static std::unordered_map< SCALED_BITMAP_ID, wxBitmap > s_ScaledBitmapCache
Definition: bitmap.cpp:88
static int get_scale_factor(wxWindow *aWindow)
Definition: bitmap.cpp:137
const int scale
static std::mutex s_BitmapCacheMutex
Definition: bitmap.cpp:90
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
BITMAP_STORE * GetBitmapStore()
Definition: bitmap.cpp:93

References get_scale_factor(), BITMAP_STORE::GetBitmapScaled(), GetBitmapStore(), KiROUND(), s_BitmapCacheMutex, s_ScaledBitmapCache, and scale.

Referenced by ACTION_TOOLBAR::Add(), ACTION_TOOLBAR_PALETTE::AddAction(), PCB_EDIT_FRAME::AddActionPluginTools(), ACTION_TOOLBAR::AddButton(), ACTION_TOOLBAR::AddGroup(), PANEL_KICAD_LAUNCHER::CreateLaunchers(), ACTION_TOOLBAR::doSelectAction(), PANEL_SETUP_BOARD_STACKUP::PANEL_SETUP_BOARD_STACKUP(), PCB_EDIT_FRAME::ReCreateAuxiliaryToolbar(), KICAD_MANAGER_FRAME::RecreateBaseHToolbar(), SYMBOL_VIEWER_FRAME::ReCreateHToolbar(), FOOTPRINT_EDIT_FRAME::ReCreateHToolbar(), FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar(), EDA_3D_VIEWER_FRAME::ReCreateMainToolbar(), and ACTION_TOOLBAR::RefreshBitmaps().

◆ KiScaledBitmap() [2/2]

wxBitmap KiScaledBitmap ( const wxBitmap &  aBitmap,
wxWindow *  aWindow 
)

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

Parameters
aBitmapis the source bitmap to scale
aWindowtarget window for scaling context

Definition at line 180 of file bitmap.cpp.

181 {
182  const int scale = get_scale_factor( aWindow );
183 
184  if( scale == 4 )
185  {
186  return wxBitmap( aBitmap );
187  }
188  else
189  {
190  wxImage image = aBitmap.ConvertToImage();
191  image.Rescale( scale * image.GetWidth() / 4, scale * image.GetHeight() / 4,
192  wxIMAGE_QUALITY_BILINEAR );
193 
194  return wxBitmap( image );
195  }
196 }
static int get_scale_factor(wxWindow *aWindow)
Definition: bitmap.cpp:137
const int scale

References get_scale_factor(), image, and scale.

◆ SaveCanvasImageToFile()

bool SaveCanvasImageToFile ( EDA_DRAW_FRAME aFrame,
const wxString &  aFileName,
BITMAP_TYPE  aBitmapType = BITMAP_TYPE::PNG 
)

Save the current view as an image file.

Parameters
aFrameThe current draw frame view to save.
aFileNameThe file name to save the image. This will overwrite an existing file.
aBitmapTypeThe type of bitmap create as defined by wxImage.
Returns
True if the file was successfully saved or false if the file failed to be saved.

Definition at line 207 of file bitmap.cpp.

209 {
210  wxCHECK( aFrame != nullptr, false );
211 
212  bool retv = true;
213 
214  // Make a screen copy of the canvas:
215  wxSize image_size = aFrame->GetCanvas()->GetClientSize();
216 
217  wxClientDC dc( aFrame->GetCanvas() );
218  wxBitmap bitmap( image_size.x, image_size.y );
219  wxMemoryDC memdc;
220 
221  memdc.SelectObject( bitmap );
222  memdc.Blit( 0, 0, image_size.x, image_size.y, &dc, 0, 0 );
223  memdc.SelectObject( wxNullBitmap );
224 
225  wxImage image = bitmap.ConvertToImage();
226 
227  wxBitmapType type = wxBITMAP_TYPE_PNG;
228  switch( aBitmapType )
229  {
230  case BITMAP_TYPE::PNG: type = wxBITMAP_TYPE_PNG; break;
231  case BITMAP_TYPE::BMP: type = wxBITMAP_TYPE_BMP; break;
232  case BITMAP_TYPE::JPG: type = wxBITMAP_TYPE_JPEG; break;
233  }
234 
235  if( !image.SaveFile( aFileName, type ) )
236  retv = false;
237 
238  image.Destroy();
239  return retv;
240 }
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.

References BMP, EDA_DRAW_FRAME::GetCanvas(), image, JPG, and PNG.

Referenced by SYMBOL_EDITOR_CONTROL::ExportView(), and FOOTPRINT_EDIT_FRAME::OnSaveFootprintAsPng().