31#include <cursors/cursor-add.xpm>
32#include <cursors/cursor-component.xpm>
33#include <cursors/cursor-eraser.xpm>
34#include <cursors/cursor-label-global.xpm>
35#include <cursors/cursor-label-hier.xpm>
36#include <cursors/cursor-label-net.xpm>
37#include <cursors/cursor-line-bus.xpm>
38#include <cursors/cursor-line-graphic.xpm>
39#include <cursors/cursor-line-wire.xpm>
40#include <cursors/cursor-measure.xpm>
41#include <cursors/cursor-pencil.xpm>
42#include <cursors/cursor-select-lasso.xpm>
43#include <cursors/cursor-select-window.xpm>
44#include <cursors/cursor-subtract.xpm>
45#include <cursors/cursor-text.xpm>
46#include <cursors/cursor-xor.xpm>
47#include <cursors/cursor-zoom-in.xpm>
48#include <cursors/cursor-zoom-out.xpm>
49#include <cursors/cursor_tune.xpm>
50#include <cursors/voltage_probe.xpm>
51#include <cursors/current_probe.xpm>
54#include <cursors/cursor-add64.xpm>
55#include <cursors/cursor-component64.xpm>
56#include <cursors/cursor-eraser64.xpm>
57#include <cursors/cursor-label-global64.xpm>
58#include <cursors/cursor-label-hier64.xpm>
59#include <cursors/cursor-label-net64.xpm>
60#include <cursors/cursor-line-bus64.xpm>
61#include <cursors/cursor-line-graphic64.xpm>
62#include <cursors/cursor-line-wire64.xpm>
63#include <cursors/cursor-measure64.xpm>
64#include <cursors/cursor-pencil64.xpm>
65#include <cursors/cursor-select-lasso64.xpm>
66#include <cursors/cursor-select-window64.xpm>
67#include <cursors/cursor-subtract64.xpm>
68#include <cursors/cursor-text64.xpm>
69#include <cursors/cursor-xor64.xpm>
70#include <cursors/cursor-zoom-in64.xpm>
71#include <cursors/cursor-zoom-out64.xpm>
72#include <cursors/cursor_tune64.xpm>
73#include <cursors/voltage_probe64.xpm>
74#include <cursors/current_probe64.xpm>
79#include <cursors/cursor-place.xpm>
80#include <cursors/cursor-place64.xpm>
81#include <cursors/cursor-select-m.xpm>
82#include <cursors/cursor-select-m64.xpm>
84#include <cursors/cursor-place-black.xpm>
85#include <cursors/cursor-place-black64.xpm>
86#include <cursors/cursor-select-m-black.xpm>
87#include <cursors/cursor-select-m-black64.xpm>
92#include <wx/bmpbndl.h>
95static const std::map<KICURSOR, std::vector<CURSOR_STORE::CURSOR_DEF>>
cursors_defs = {
99 { voltage_probe_xpm, { 1, 31 } },
100 { voltage_probe64_xpm, { 1, 62 } }
106 { current_probe_xpm, { 4, 27 } },
107 { current_probe64_xpm, { 8, 54 } }
113 { cursor_tune_xpm, { 1, 30 } },
114 { cursor_tune64_xpm, { 2, 60 } }
120 { cursor_pencil_xpm, { 4, 27 } },
121 { cursor_pencil64_xpm, { 8, 54 } }
131 cursor_select_m_black_xpm,
137 cursor_select_m64_xpm,
139 cursor_select_m_black64_xpm,
148 { cursor_eraser_xpm, { 4, 4 } },
149 { cursor_eraser64_xpm, { 8, 8 } }
155 { cursor_text_xpm, { 7, 7 } },
156 { cursor_text64_xpm, { 14, 14 } }
162 { cursor_measure_xpm, { 4, 4 } },
163 { cursor_measure64_xpm, { 8, 8 } }
169 { cursor_add_xpm, { 7, 7 } },
170 { cursor_add64_xpm, { 14, 14 } }
176 { cursor_subtract_xpm, { 7, 7 } },
177 { cursor_subtract64_xpm, { 14, 14 } }
183 { cursor_xor_xpm, { 7, 7 } },
184 { cursor_xor64_xpm, { 14, 14 } }
190 { cursor_zoom_in_xpm, { 6, 6 } },
191 { cursor_zoom_in64_xpm, { 12, 12 } }
197 { cursor_zoom_out_xpm, { 6, 6 } },
198 { cursor_zoom_out64_xpm, { 12, 12 } }
204 { cursor_label_net_xpm, { 7, 7 } },
205 { cursor_label_net64_xpm, { 14, 14 } }
211 { cursor_label_global_xpm, { 7, 7 } },
212 { cursor_label_global64_xpm, { 14, 14 } }
218 { cursor_component_xpm, { 7, 7 } },
219 { cursor_component64_xpm, { 14, 14 } }
225 { cursor_select_lasso_xpm, { 7, 7 } },
226 { cursor_select_lasso64_xpm, { 14, 14 } }
232 { cursor_select_window_xpm, { 7, 10 } },
233 { cursor_select_window64_xpm, { 14, 20 } }
239 { cursor_line_bus_xpm, { 5, 26 } },
240 { cursor_line_bus64_xpm, { 10, 52 } }
246 { cursor_line_wire_xpm, { 5, 26 } },
247 { cursor_line_wire64_xpm, { 10, 52 } }
253 { cursor_line_graphic_xpm, { 5, 26 } },
254 { cursor_line_graphic64_xpm, { 10, 52 } }
260 { cursor_label_hier_xpm, { 7, 7 } },
261 { cursor_label_hier64_xpm, { 14, 14 } }
271 cursor_place_black_xpm,
279 cursor_place_black64_xpm,
292 wxCHECK2( !defs.empty(),
continue );
294#if wxCHECK_VERSION( 3, 3, 0 )
296 std::vector<wxBitmap> bitmaps;
298 for(
const auto& [xpm, hotspot_def] : defs )
300 wxCHECK2( xpm,
continue );
301 bitmaps.push_back( wxBitmap( xpm ) );
304 wxBitmapBundle bitmapBundle = wxBitmapBundle::FromBitmaps( bitmaps );
306 wxPoint hotspot = defs[0].m_hotspot;
307 m_bundleMap[cursorId] = wxCursorBundle( bitmapBundle, hotspot );
311 wxCHECK( aDef.m_xpm, wxNullCursor );
312 wxImage xpmImage = wxImage( aDef.m_xpm );
314 xpmImage.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_X, aDef.m_hotspot.x );
315 xpmImage.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_Y, aDef.m_hotspot.y );
317 return wxCursor( xpmImage );
324 if( defs.size() > 1 )
332#if wxCHECK_VERSION( 3, 3, 0 )
333const wxCursorBundle& CURSOR_STORE::storeGetBundle(
KICURSOR aIdKey )
const
335 const auto find_iter = m_bundleMap.find( aIdKey );
337 if( find_iter != m_bundleMap.end() )
338 return find_iter->second;
340 wxASSERT_MSG(
false, wxString::Format(
"Could not find cursor bundle with ID %d",
341 static_cast<int>( aIdKey ) ) );
343 static const wxCursorBundle invalid;
351 const auto find_iter = store.find( aIdKey );
353 if( find_iter != store.end() )
354 return find_iter->second;
356 wxASSERT_MSG(
false, wxString::Format(
"Could not find cursor with ID %d",
static_cast<int>( aIdKey ) ) );
370 if( stock != wxCURSOR_MAX )
373#if wxCHECK_VERSION( 3, 3, 0 )
375 return store.storeGetBundle( aCursorType );
384 wxStockCursor stockCursor;
385 switch( aCursorType )
387 case KICURSOR::MOVING:
388 stockCursor = wxCURSOR_SIZING;
390 case KICURSOR::BULLSEYE:
391 stockCursor = wxCURSOR_BULLSEYE;
394 stockCursor = wxCURSOR_HAND;
396 case KICURSOR::ARROW:
397 stockCursor = wxCURSOR_ARROW;
400 stockCursor = wxCURSOR_MAX;
405 stockCursor = wxCURSOR_MAX;
Simple class to construct and store cursors against unique ID keys.
std::map< KICURSOR, wxCursor > m_hidpiCursorMap
static const WX_CURSOR_TYPE GetCursor(KICURSOR aCursorType, bool aHiDPI=false)
Get a cursor bundle (wx 3.3+) or appropriate cursor (older versions)
static wxStockCursor GetStockCursor(KICURSOR aCursorType)
Get stock cursor type for the given cursor.
CURSOR_STORE()
Construct a store with cursors for all defined types.
const wxCursor & storeGetCursor(KICURSOR aIdKey, bool aHiDPI=false) const
Get a cursor by its ID, automatically selecting the appropriate resolution.
std::map< KICURSOR, wxCursor > m_standardCursorMap
static const std::map< KICURSOR, std::vector< CURSOR_STORE::CURSOR_DEF > > cursors_defs
wxCursor WX_CURSOR_TYPE
Represents either a wxCursorBundle for wx 3.3+ or a wxCursor for older versions.