From 26f0c03e615f473133e1472e4ab2caab11346698 Mon Sep 17 00:00:00 2001 From: Seth Hillbrand Date: Fri, 22 Aug 2025 18:19:28 -0700 Subject: [PATCH] ADDED: support for 45 degree crosshairs Fixes https://gitlab.com/kicad/code/kicad/-/issues/6047 --- common/bitmap_info.cpp | 20 ++ common/gal/cairo/cairo_gal.cpp | 11 +- common/gal/gal_display_options.cpp | 2 +- common/gal/graphics_abstraction_layer.cpp | 6 +- common/gal/opengl/opengl_gal.cpp | 47 +++- common/gal_display_options_common.cpp | 4 +- common/settings/app_settings.cpp | 9 +- common/settings/json_settings.cpp | 4 + common/tool/actions.cpp | 24 +- common/tool/common_tools.cpp | 32 ++- common/tool/editor_conditions.cpp | 34 ++- common/widgets/gal_options_panel.cpp | 16 +- common/widgets/gal_options_panel_base.cpp | 7 +- common/widgets/gal_options_panel_base.fbp | 65 ++++++ common/widgets/gal_options_panel_base.h | 7 +- cvpcb/display_footprints_frame.cpp | 4 +- cvpcb/toolbars_display_footprints.cpp | 5 +- eeschema/sch_edit_frame.cpp | 4 +- eeschema/symbol_editor/symbol_edit_frame.cpp | 4 +- .../symbol_editor/toolbars_symbol_editor.cpp | 5 +- eeschema/toolbars_sch_editor.cpp | 5 +- gerbview/gerbview_frame.cpp | 4 +- gerbview/toolbars_gerber.cpp | 5 +- include/bitmaps/bitmaps_list.h | 2 + include/gal/gal_display_options.h | 15 +- include/gal/graphics_abstraction_layer.h | 2 +- include/settings/app_settings.h | 7 +- include/settings/json_settings.h | 2 + include/tool/actions.h | 4 +- include/tool/common_tools.h | 4 +- include/tool/editor_conditions.h | 12 +- pagelayout_editor/pl_editor_frame.cpp | 4 +- pcbnew/footprint_chooser_frame.cpp | 4 +- pcbnew/footprint_edit_frame.cpp | 4 +- pcbnew/footprint_viewer_frame.cpp | 4 +- pcbnew/footprint_wizard_frame.cpp | 3 +- pcbnew/pcb_edit_frame.cpp | 4 +- pcbnew/toolbars_footprint_editor.cpp | 5 +- pcbnew/toolbars_footprint_viewer.cpp | 5 +- pcbnew/toolbars_pcb_editor.cpp | 5 +- .../footprint_chooser_selection_tool.cpp | 4 +- qa/data/config/9.99/3d_viewer.json | 2 +- qa/data/config/9.99/cvpcb.json | 4 +- qa/data/config/9.99/eeschema.json | 6 +- qa/data/config/9.99/fpedit.json | 2 +- qa/data/config/9.99/kicad.json | 2 +- qa/data/config/9.99/pcbnew.json | 6 +- qa/data/config/9.99/symbol_editor.json | 2 +- resources/bitmaps_png/CMakeLists.txt | 2 + .../png/cursor_fullscreen45_16.png | Bin 0 -> 350 bytes .../png/cursor_fullscreen45_24.png | Bin 0 -> 466 bytes .../png/cursor_fullscreen45_32.png | Bin 0 -> 627 bytes .../png/cursor_fullscreen45_48.png | Bin 0 -> 829 bytes .../png/cursor_fullscreen45_64.png | Bin 0 -> 1104 bytes .../png/cursor_fullscreen45_dark_16.png | Bin 0 -> 332 bytes .../png/cursor_fullscreen45_dark_24.png | Bin 0 -> 480 bytes .../png/cursor_fullscreen45_dark_32.png | Bin 0 -> 610 bytes .../png/cursor_fullscreen45_dark_48.png | Bin 0 -> 842 bytes .../png/cursor_fullscreen45_dark_64.png | Bin 0 -> 1076 bytes .../bitmaps_png/png/cursor_fullscreen_16.png | Bin 0 -> 289 bytes .../bitmaps_png/png/cursor_fullscreen_24.png | Bin 0 -> 308 bytes .../bitmaps_png/png/cursor_fullscreen_32.png | Bin 0 -> 508 bytes .../bitmaps_png/png/cursor_fullscreen_48.png | Bin 0 -> 536 bytes .../bitmaps_png/png/cursor_fullscreen_64.png | Bin 0 -> 890 bytes .../png/cursor_fullscreen_dark_16.png | Bin 0 -> 293 bytes .../png/cursor_fullscreen_dark_24.png | Bin 0 -> 325 bytes .../png/cursor_fullscreen_dark_32.png | Bin 0 -> 519 bytes .../png/cursor_fullscreen_dark_48.png | Bin 0 -> 531 bytes .../png/cursor_fullscreen_dark_64.png | Bin 0 -> 910 bytes resources/bitmaps_png/png/cursor_shape_16.png | Bin 279 -> 253 bytes resources/bitmaps_png/png/cursor_shape_24.png | Bin 303 -> 278 bytes resources/bitmaps_png/png/cursor_shape_32.png | Bin 497 -> 445 bytes resources/bitmaps_png/png/cursor_shape_48.png | Bin 526 -> 491 bytes resources/bitmaps_png/png/cursor_shape_64.png | Bin 882 -> 795 bytes .../bitmaps_png/png/cursor_shape_dark_16.png | Bin 287 -> 260 bytes .../bitmaps_png/png/cursor_shape_dark_24.png | Bin 318 -> 291 bytes .../bitmaps_png/png/cursor_shape_dark_32.png | Bin 507 -> 460 bytes .../bitmaps_png/png/cursor_shape_dark_48.png | Bin 527 -> 491 bytes .../bitmaps_png/png/cursor_shape_dark_64.png | Bin 906 -> 815 bytes .../sources/dark/cursor_fullscreen.svg | 204 +++++++++++++++++ .../sources/dark/cursor_fullscreen45.svg | 207 ++++++++++++++++++ .../bitmaps_png/sources/dark/cursor_shape.svg | 51 ++--- .../sources/light/cursor_fullscreen.svg | 204 +++++++++++++++++ .../sources/light/cursor_fullscreen45.svg | 206 +++++++++++++++++ .../sources/light/cursor_shape.svg | 51 ++--- 85 files changed, 1233 insertions(+), 130 deletions(-) create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_16.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_24.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_32.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_48.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_64.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_dark_16.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_dark_24.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_dark_32.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_dark_48.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen45_dark_64.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_16.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_24.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_32.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_48.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_64.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_dark_16.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_dark_24.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_dark_32.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_dark_48.png create mode 100644 resources/bitmaps_png/png/cursor_fullscreen_dark_64.png create mode 100644 resources/bitmaps_png/sources/dark/cursor_fullscreen.svg create mode 100644 resources/bitmaps_png/sources/dark/cursor_fullscreen45.svg create mode 100644 resources/bitmaps_png/sources/light/cursor_fullscreen.svg create mode 100644 resources/bitmaps_png/sources/light/cursor_fullscreen45.svg diff --git a/common/bitmap_info.cpp b/common/bitmap_info.cpp index 9e072e44d3..01a9958c37 100644 --- a/common/bitmap_info.cpp +++ b/common/bitmap_info.cpp @@ -448,6 +448,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_24.png" ), 24, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_24.png" ), 24, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_24.png" ), 24, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_24.png" ), 24, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_24.png" ), 24, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_24.png" ), 24, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_24.png" ), 24, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_24.png" ), 24, wxT( "light" ) ); @@ -885,6 +887,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_dark_24.png" ), 24, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_dark_24.png" ), 24, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_dark_24.png" ), 24, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_dark_24.png" ), 24, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_dark_24.png" ), 24, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_dark_24.png" ), 24, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_dark_24.png" ), 24, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_dark_24.png" ), 24, wxT( "dark" ) ); @@ -1322,6 +1326,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_16.png" ), 16, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_16.png" ), 16, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_16.png" ), 16, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_16.png" ), 16, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_16.png" ), 16, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_16.png" ), 16, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_16.png" ), 16, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_16.png" ), 16, wxT( "light" ) ); @@ -1759,6 +1765,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_dark_16.png" ), 16, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_dark_16.png" ), 16, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_dark_16.png" ), 16, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_dark_16.png" ), 16, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_dark_16.png" ), 16, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_dark_16.png" ), 16, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_dark_16.png" ), 16, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_dark_16.png" ), 16, wxT( "dark" ) ); @@ -2196,6 +2204,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_32.png" ), 32, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_32.png" ), 32, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_32.png" ), 32, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_32.png" ), 32, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_32.png" ), 32, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_32.png" ), 32, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_32.png" ), 32, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_32.png" ), 32, wxT( "light" ) ); @@ -2633,6 +2643,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_dark_32.png" ), 32, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_dark_32.png" ), 32, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_dark_32.png" ), 32, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_dark_32.png" ), 32, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_dark_32.png" ), 32, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_dark_32.png" ), 32, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_dark_32.png" ), 32, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_dark_32.png" ), 32, wxT( "dark" ) ); @@ -3070,6 +3082,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_48.png" ), 48, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_48.png" ), 48, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_48.png" ), 48, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_48.png" ), 48, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_48.png" ), 48, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_48.png" ), 48, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_48.png" ), 48, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_48.png" ), 48, wxT( "light" ) ); @@ -3507,6 +3521,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_dark_48.png" ), 48, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_dark_48.png" ), 48, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_dark_48.png" ), 48, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_dark_48.png" ), 48, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_dark_48.png" ), 48, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_dark_48.png" ), 48, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_dark_48.png" ), 48, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_dark_48.png" ), 48, wxT( "dark" ) ); @@ -3944,6 +3960,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_64.png" ), 64, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_64.png" ), 64, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_64.png" ), 64, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_64.png" ), 64, wxT( "light" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_64.png" ), 64, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_64.png" ), 64, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_64.png" ), 64, wxT( "light" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_64.png" ), 64, wxT( "light" ) ); @@ -4381,6 +4399,8 @@ void BuildBitmapInfo( std::unordered_map>& aBi aBitmapInfoCache[BITMAPS::convert].emplace_back( BITMAPS::convert, wxT( "convert_dark_64.png" ), 64, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy].emplace_back( BITMAPS::copy, wxT( "copy_dark_64.png" ), 64, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::copy_pad_settings].emplace_back( BITMAPS::copy_pad_settings, wxT( "copy_pad_settings_dark_64.png" ), 64, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen].emplace_back( BITMAPS::cursor_fullscreen, wxT( "cursor_fullscreen_dark_64.png" ), 64, wxT( "dark" ) ); + aBitmapInfoCache[BITMAPS::cursor_fullscreen45].emplace_back( BITMAPS::cursor_fullscreen45, wxT( "cursor_fullscreen45_dark_64.png" ), 64, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor_shape].emplace_back( BITMAPS::cursor_shape, wxT( "cursor_shape_dark_64.png" ), 64, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::cursor].emplace_back( BITMAPS::cursor, wxT( "cursor_dark_64.png" ), 64, wxT( "dark" ) ); aBitmapInfoCache[BITMAPS::custom_pad_to_primitives].emplace_back( BITMAPS::custom_pad_to_primitives, wxT( "custom_pad_to_primitives_dark_64.png" ), 64, wxT( "dark" ) ); diff --git a/common/gal/cairo/cairo_gal.cpp b/common/gal/cairo/cairo_gal.cpp index b7836722e6..85006603ac 100644 --- a/common/gal/cairo/cairo_gal.cpp +++ b/common/gal/cairo/cairo_gal.cpp @@ -1203,11 +1203,20 @@ void CAIRO_GAL_BASE::blitCursor( wxMemoryDC& clientDC ) 255 ); clientDC.SetPen( wxPen( color ) ); - if( m_fullscreenCursor ) + if( m_crossHairMode == CROSS_HAIR_MODE::FULLSCREEN_CROSS ) { clientDC.DrawLine( 0, p.y, m_screenSize.x, p.y ); clientDC.DrawLine( p.x, 0, p.x, m_screenSize.y ); } + else if( m_crossHairMode == CROSS_HAIR_MODE::FULLSCREEN_DIAGONAL ) + { + // Oversized but that's ok + int diagonalSize = m_screenSize.x + m_screenSize.y; + clientDC.DrawLine( p.x - diagonalSize, p.y - diagonalSize, + p.x + diagonalSize, p.y + diagonalSize ); + clientDC.DrawLine( p.x - diagonalSize, p.y + diagonalSize, + p.x + diagonalSize, p.y - diagonalSize ); + } else { const int cursorSize = 80; diff --git a/common/gal/gal_display_options.cpp b/common/gal/gal_display_options.cpp index 4ba7e25588..df8af0e386 100644 --- a/common/gal/gal_display_options.cpp +++ b/common/gal/gal_display_options.cpp @@ -50,7 +50,7 @@ GAL_DISPLAY_OPTIONS::GAL_DISPLAY_OPTIONS() m_gridLineWidth( 1.0 ), m_gridMinSpacing( 10.0 ), m_axesEnabled( false ), - m_fullscreenCursor( false ), + m_crossHairMode( CROSS_HAIR_MODE::SMALL_CROSS ), m_forceDisplayCursor( false ), m_scaleFactor( DPI_SCALING::GetDefaultScaleFactor() ) { diff --git a/common/gal/graphics_abstraction_layer.cpp b/common/gal/graphics_abstraction_layer.cpp index 6420870795..44049634c9 100644 --- a/common/gal/graphics_abstraction_layer.cpp +++ b/common/gal/graphics_abstraction_layer.cpp @@ -79,7 +79,7 @@ GAL::GAL( GAL_DISPLAY_OPTIONS& aDisplayOptions ) : // Initialize the cursor shape SetCursorColor( COLOR4D( 1.0, 1.0, 1.0, 1.0 ) ); - m_fullscreenCursor = false; + m_crossHairMode = CROSS_HAIR_MODE::SMALL_CROSS; m_forceDisplayCursor = false; SetCursorEnabled( false ); @@ -142,9 +142,9 @@ bool GAL::updatedGalDisplayOptions( const GAL_DISPLAY_OPTIONS& aOptions ) refresh = true; } - if( m_options.m_fullscreenCursor != m_fullscreenCursor ) + if( m_options.GetCursorMode() != m_crossHairMode ) { - m_fullscreenCursor = m_options.m_fullscreenCursor; + m_crossHairMode = m_options.GetCursorMode(); refresh = true; } diff --git a/common/gal/opengl/opengl_gal.cpp b/common/gal/opengl/opengl_gal.cpp index 4e823a9f0f..22a08a1bd1 100644 --- a/common/gal/opengl/opengl_gal.cpp +++ b/common/gal/opengl/opengl_gal.cpp @@ -2648,12 +2648,12 @@ void OPENGL_GAL::blitCursor() VECTOR2D cursorEnd; VECTOR2D cursorCenter = m_cursorPosition; - if( m_fullscreenCursor ) + if( m_crossHairMode == CROSS_HAIR_MODE::FULLSCREEN_CROSS ) { cursorBegin = m_screenWorldMatrix * VECTOR2D( 0.0, 0.0 ); cursorEnd = m_screenWorldMatrix * VECTOR2D( m_screenSize ); } - else + else if( m_crossHairMode == CROSS_HAIR_MODE::SMALL_CROSS ) { const int cursorSize = 80; cursorBegin = m_cursorPosition - cursorSize / ( 2 * m_worldScale ); @@ -2671,11 +2671,46 @@ void OPENGL_GAL::blitCursor() glColor4d( color.r, color.g, color.b, color.a ); glBegin( GL_LINES ); - glVertex2d( cursorCenter.x, cursorBegin.y ); - glVertex2d( cursorCenter.x, cursorEnd.y ); - glVertex2d( cursorBegin.x, cursorCenter.y ); - glVertex2d( cursorEnd.x, cursorCenter.y ); + if( m_crossHairMode == CROSS_HAIR_MODE::FULLSCREEN_DIAGONAL ) + { + // Calculate screen bounds in world coordinates + VECTOR2D screenTopLeft = m_screenWorldMatrix * VECTOR2D( 0.0, 0.0 ); + VECTOR2D screenBottomRight = m_screenWorldMatrix * VECTOR2D( m_screenSize ); + + // For 45-degree lines passing through cursor position + // Line equation: y = x + (cy - cx) for positive slope + // Line equation: y = -x + (cy + cx) for negative slope + double cx = m_cursorPosition.x; + double cy = m_cursorPosition.y; + + // Calculate intersections for positive slope diagonal (y = x + offset) + double offset1 = cy - cx; + VECTOR2D pos_start( screenTopLeft.x, screenTopLeft.x + offset1 ); + VECTOR2D pos_end( screenBottomRight.x, screenBottomRight.x + offset1 ); + + // Draw positive slope diagonal + glVertex2d( pos_start.x, pos_start.y ); + glVertex2d( pos_end.x, pos_end.y ); + + // Calculate intersections for negative slope diagonal (y = -x + offset) + double offset2 = cy + cx; + VECTOR2D neg_start( screenTopLeft.x, offset2 - screenTopLeft.x ); + VECTOR2D neg_end( screenBottomRight.x, offset2 - screenBottomRight.x ); + + // Draw negative slope diagonal + glVertex2d( neg_start.x, neg_start.y ); + glVertex2d( neg_end.x, neg_end.y ); + } + else + { + glVertex2d( cursorCenter.x, cursorBegin.y ); + glVertex2d( cursorCenter.x, cursorEnd.y ); + + glVertex2d( cursorBegin.x, cursorCenter.y ); + glVertex2d( cursorEnd.x, cursorCenter.y ); + } + glEnd(); } diff --git a/common/gal_display_options_common.cpp b/common/gal_display_options_common.cpp index f45531a4ca..115201e527 100644 --- a/common/gal_display_options_common.cpp +++ b/common/gal_display_options_common.cpp @@ -71,7 +71,7 @@ void GAL_DISPLAY_OPTIONS_IMPL::ReadWindowSettings( WINDOW_SETTINGS& aCfg ) m_gridMinSpacing = aCfg.grid.min_spacing; m_axesEnabled = aCfg.grid.axes_enabled; - m_fullscreenCursor = aCfg.cursor.fullscreen_cursor; + m_crossHairMode = aCfg.cursor.cross_hair_mode; m_forceDisplayCursor = aCfg.cursor.always_show_cursor; NotifyChanged(); @@ -112,7 +112,7 @@ void GAL_DISPLAY_OPTIONS_IMPL::WriteConfig( WINDOW_SETTINGS& aCfg ) aCfg.grid.line_width = m_gridLineWidth; aCfg.grid.min_spacing = m_gridMinSpacing; aCfg.grid.axes_enabled = m_axesEnabled; - aCfg.cursor.fullscreen_cursor = m_fullscreenCursor; + aCfg.cursor.cross_hair_mode = m_crossHairMode; aCfg.cursor.always_show_cursor = m_forceDisplayCursor; } diff --git a/common/settings/app_settings.cpp b/common/settings/app_settings.cpp index e53b064024..1ae7f19883 100644 --- a/common/settings/app_settings.cpp +++ b/common/settings/app_settings.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -386,8 +387,8 @@ bool APP_SETTINGS_BASE::migrateWindowConfig( wxConfigBase* aCfg, const std::stri ret &= fromLegacy( aCfg, frameGDO + "ForceDisplayCursor", cursorPath + ".always_show_cursor" ); - ret &= fromLegacy( aCfg, frameGDO + "CursorFullscreen", - cursorPath + ".fullscreen_cursor" ); + ret &= fromLegacy( aCfg, frameGDO + "CursorFullscreen", + cursorPath + ".cross_hair_mode" ); ret &= fromLegacy( aCfg, aFrame + "_LastGridSize", gridPath + ".last_size" ); @@ -539,8 +540,8 @@ void APP_SETTINGS_BASE::addParamsForWindow( WINDOW_SETTINGS* aWindow, const std: m_params.emplace_back( new PARAM( aJsonPath + ".cursor.always_show_cursor", &aWindow->cursor.always_show_cursor, true ) ); - m_params.emplace_back( new PARAM( aJsonPath + ".cursor.fullscreen_cursor", - &aWindow->cursor.fullscreen_cursor, false ) ); + m_params.emplace_back( new PARAM( aJsonPath + ".cursor.cross_hair_mode", + &aWindow->cursor.cross_hair_mode, KIGFX::CROSS_HAIR_MODE::SMALL_CROSS ) ); } diff --git a/common/settings/json_settings.cpp b/common/settings/json_settings.cpp index ceed7a6375..c31b976ded 100644 --- a/common/settings/json_settings.cpp +++ b/common/settings/json_settings.cpp @@ -651,6 +651,8 @@ template KICOMMON_API std::optional JSON_SETTINGS::Get( const std::string& aPath ) const; template KICOMMON_API std::optional JSON_SETTINGS::Get( const std::string& aPath ) const; +template KICOMMON_API std::optional + JSON_SETTINGS::Get( const std::string& aPath ) const; template void JSON_SETTINGS::Set( const std::string& aPath, ValueType aVal ) @@ -688,6 +690,8 @@ template KICOMMON_API void JSON_SETTINGS::Set( const std::string& aPath, template KICOMMON_API void JSON_SETTINGS::Set( const std::string& aPath, wxRect aValue ); template KICOMMON_API void JSON_SETTINGS::Set( const std::string& aPath, wxAuiPaneInfo aValue ); +template KICOMMON_API void JSON_SETTINGS::Set( const std::string& aPath, + KIGFX::CROSS_HAIR_MODE aValue ); void JSON_SETTINGS::registerMigration( int aOldSchemaVersion, int aNewSchemaVersion, diff --git a/common/tool/actions.cpp b/common/tool/actions.cpp index cbc3b28734..d81bd835b2 100644 --- a/common/tool/actions.cpp +++ b/common/tool/actions.cpp @@ -1169,14 +1169,30 @@ TOOL_ACTION ACTIONS::toggleCursor( TOOL_ACTION_ARGS() .Tooltip( _( "Display crosshairs even when not drawing objects" ) ) .Icon( BITMAPS::cursor ) ); -TOOL_ACTION ACTIONS::toggleCursorStyle( TOOL_ACTION_ARGS() - .Name( "common.Control.toggleCursorStyle" ) +TOOL_ACTION ACTIONS::cursorSmallCrosshairs( TOOL_ACTION_ARGS() + .Name( "common.Control.cursorSmallCrosshairs" ) .Scope( AS_GLOBAL ) - .FriendlyName( _( "Full-Window Crosshairs" ) ) - .Tooltip( _( "Switch display of full-window crosshairs" ) ) + .FriendlyName( _( "Small crosshairs" ) ) + .Tooltip( _( "Use small crosshairs aligned at 0 and 90 degrees" ) ) .ToolbarState( TOOLBAR_STATE::TOGGLE ) .Icon( BITMAPS::cursor_shape ) ); +TOOL_ACTION ACTIONS::cursorFullCrosshairs( TOOL_ACTION_ARGS() + .Name( "common.Control.cursorFullCrosshairs" ) + .Scope( AS_GLOBAL ) + .FriendlyName( _( "Full-Window Crosshairs" ) ) + .Tooltip( _( "Display full-window crosshairs aligned at 0 and 90 degrees" ) ) + .ToolbarState( TOOLBAR_STATE::TOGGLE ) + .Icon( BITMAPS::cursor_fullscreen ) ); + +TOOL_ACTION ACTIONS::cursor45Crosshairs( TOOL_ACTION_ARGS() + .Name( "common.Control.cursor45Crosshairs" ) + .Scope( AS_GLOBAL ) + .FriendlyName( _( "45 Degree Crosshairs" ) ) + .Tooltip( _( "Display full-window crosshairs aligned at 45 and 135 degrees" ) ) + .ToolbarState( TOOLBAR_STATE::TOGGLE ) + .Icon( BITMAPS::cursor_fullscreen45 ) ); + TOOL_ACTION ACTIONS::highContrastMode( TOOL_ACTION_ARGS() .Name( "common.Control.highContrastMode" ) .Scope( AS_GLOBAL ) diff --git a/common/tool/common_tools.cpp b/common/tool/common_tools.cpp index 785df235b3..d1e753f1a1 100644 --- a/common/tool/common_tools.cpp +++ b/common/tool/common_tools.cpp @@ -710,11 +710,35 @@ int COMMON_TOOLS::ToggleCursor( const TOOL_EVENT& aEvent ) } -int COMMON_TOOLS::ToggleCursorStyle( const TOOL_EVENT& aEvent ) +int COMMON_TOOLS::CursorSmallCrosshairs( const TOOL_EVENT& aEvent ) { GAL_DISPLAY_OPTIONS_IMPL& galOpts = m_frame->GetGalDisplayOptions(); - galOpts.m_fullscreenCursor = !galOpts.m_fullscreenCursor; + galOpts.SetCursorMode( KIGFX::CROSS_HAIR_MODE::SMALL_CROSS ); + galOpts.WriteConfig( *m_frame->GetWindowSettings( m_toolMgr->GetSettings() ) ); + galOpts.NotifyChanged(); + + return 0; +} + + +int COMMON_TOOLS::CursorFullCrosshairs( const TOOL_EVENT& aEvent ) +{ + GAL_DISPLAY_OPTIONS_IMPL& galOpts = m_frame->GetGalDisplayOptions(); + + galOpts.SetCursorMode( KIGFX::CROSS_HAIR_MODE::FULLSCREEN_CROSS ); + galOpts.WriteConfig( *m_frame->GetWindowSettings( m_toolMgr->GetSettings() ) ); + galOpts.NotifyChanged(); + + return 0; +} + + +int COMMON_TOOLS::Cursor45Crosshairs( const TOOL_EVENT& aEvent ) +{ + GAL_DISPLAY_OPTIONS_IMPL& galOpts = m_frame->GetGalDisplayOptions(); + + galOpts.SetCursorMode( KIGFX::CROSS_HAIR_MODE::FULLSCREEN_DIAGONAL ); galOpts.WriteConfig( *m_frame->GetWindowSettings( m_toolMgr->GetSettings() ) ); galOpts.NotifyChanged(); @@ -800,6 +824,8 @@ void COMMON_TOOLS::setTransitions() // Misc Go( &COMMON_TOOLS::ToggleCursor, ACTIONS::toggleCursor.MakeEvent() ); - Go( &COMMON_TOOLS::ToggleCursorStyle, ACTIONS::toggleCursorStyle.MakeEvent() ); + Go( &COMMON_TOOLS::CursorSmallCrosshairs, ACTIONS::cursorSmallCrosshairs.MakeEvent() ); + Go( &COMMON_TOOLS::CursorFullCrosshairs, ACTIONS::cursorFullCrosshairs.MakeEvent() ); + Go( &COMMON_TOOLS::Cursor45Crosshairs, ACTIONS::cursor45Crosshairs.MakeEvent() ); Go( &COMMON_TOOLS::ToggleBoundingBoxes, ACTIONS::toggleBoundingBoxes.MakeEvent() ); } diff --git a/common/tool/editor_conditions.cpp b/common/tool/editor_conditions.cpp index bdfa4aca6b..5eed8b684a 100644 --- a/common/tool/editor_conditions.cpp +++ b/common/tool/editor_conditions.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -106,14 +107,36 @@ SELECTION_CONDITION EDITOR_CONDITIONS::PolarCoordinates() } -SELECTION_CONDITION EDITOR_CONDITIONS::FullscreenCursor() +SELECTION_CONDITION EDITOR_CONDITIONS::CursorSmallCrosshairs() { - // The fullscreen cursor requires a draw frame EDA_DRAW_FRAME* drwFrame = dynamic_cast( m_frame ); wxASSERT( drwFrame ); - return std::bind( &EDITOR_CONDITIONS::cursorFunc, _1, drwFrame ); + return std::bind( &EDITOR_CONDITIONS::cursorFunc, _1, drwFrame, + KIGFX::CROSS_HAIR_MODE::SMALL_CROSS ); +} + + +SELECTION_CONDITION EDITOR_CONDITIONS::CursorFullCrosshairs() +{ + EDA_DRAW_FRAME* drwFrame = dynamic_cast( m_frame ); + + wxASSERT( drwFrame ); + + return std::bind( &EDITOR_CONDITIONS::cursorFunc, _1, drwFrame, + KIGFX::CROSS_HAIR_MODE::FULLSCREEN_CROSS ); +} + + +SELECTION_CONDITION EDITOR_CONDITIONS::Cursor45Crosshairs() +{ + EDA_DRAW_FRAME* drwFrame = dynamic_cast( m_frame ); + + wxASSERT( drwFrame ); + + return std::bind( &EDITOR_CONDITIONS::cursorFunc, _1, drwFrame, + KIGFX::CROSS_HAIR_MODE::FULLSCREEN_DIAGONAL ); } @@ -193,9 +216,10 @@ bool EDITOR_CONDITIONS::polarCoordFunc( const SELECTION& aSelection, EDA_DRAW_FR } -bool EDITOR_CONDITIONS::cursorFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame ) +bool EDITOR_CONDITIONS::cursorFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame, + KIGFX::CROSS_HAIR_MODE aMode ) { - return aFrame->GetGalDisplayOptions().m_fullscreenCursor; + return aFrame->GetGalDisplayOptions().GetCursorMode() == aMode; } diff --git a/common/widgets/gal_options_panel.cpp b/common/widgets/gal_options_panel.cpp index f9786bdc45..0e4737713b 100644 --- a/common/widgets/gal_options_panel.cpp +++ b/common/widgets/gal_options_panel.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -92,10 +93,12 @@ bool GAL_OPTIONS_PANEL::TransferDataToWindow() m_gridMinSpacing->SetValue( m_cfg->m_Window.grid.min_spacing ); - if( m_cfg->m_Window.cursor.fullscreen_cursor ) - m_rbFullWindowCrosshairs->SetValue( true ); - else + if( m_cfg->m_Window.cursor.cross_hair_mode == KIGFX::CROSS_HAIR_MODE::SMALL_CROSS ) m_rbSmallCrosshairs->SetValue( true ); + else if( m_cfg->m_Window.cursor.cross_hair_mode == KIGFX::CROSS_HAIR_MODE::FULLSCREEN_DIAGONAL ) + m_rb45DegreeCrosshairs->SetValue( true ); + else + m_rbFullWindowCrosshairs->SetValue( true ); m_forceCursorDisplay->SetValue( m_cfg->m_Window.cursor.always_show_cursor ); @@ -119,7 +122,12 @@ bool GAL_OPTIONS_PANEL::TransferDataFromWindow() m_cfg->m_Window.grid.min_spacing = m_gridMinSpacing->GetValue(); - m_cfg->m_Window.cursor.fullscreen_cursor = m_rbFullWindowCrosshairs->GetValue(); + if( m_rbFullWindowCrosshairs->GetValue() ) + m_cfg->m_Window.cursor.cross_hair_mode = KIGFX::CROSS_HAIR_MODE::FULLSCREEN_CROSS; + else if( m_rb45DegreeCrosshairs->GetValue() ) + m_cfg->m_Window.cursor.cross_hair_mode = KIGFX::CROSS_HAIR_MODE::FULLSCREEN_DIAGONAL; + else + m_cfg->m_Window.cursor.cross_hair_mode = KIGFX::CROSS_HAIR_MODE::SMALL_CROSS; m_cfg->m_Window.cursor.always_show_cursor = m_forceCursorDisplay->GetValue(); return true; diff --git a/common/widgets/gal_options_panel_base.cpp b/common/widgets/gal_options_panel_base.cpp index 7b66ddf233..7b53cf7f97 100644 --- a/common/widgets/gal_options_panel_base.cpp +++ b/common/widgets/gal_options_panel_base.cpp @@ -102,8 +102,11 @@ GAL_OPTIONS_PANEL_BASE::GAL_OPTIONS_PANEL_BASE( wxWindow* parent, wxWindowID id, m_rbSmallCrosshairs = new wxRadioButton( this, wxID_ANY, _("Small crosshairs"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); fgSizer1->Add( m_rbSmallCrosshairs, 0, wxTOP|wxLEFT, 5 ); - m_rbFullWindowCrosshairs = new wxRadioButton( this, wxID_ANY, _("Full window crosshairs"), wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer1->Add( m_rbFullWindowCrosshairs, 0, wxLEFT, 5 ); + m_rbFullWindowCrosshairs = new wxRadioButton( this, wxID_ANY, _("Full window crosshairs"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer1->Add( m_rbFullWindowCrosshairs, 0, wxLEFT, 5 ); + + m_rb45DegreeCrosshairs = new wxRadioButton( this, wxID_ANY, _("45 degree crosshairs"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer1->Add( m_rb45DegreeCrosshairs, 0, wxLEFT, 5 ); fgSizer1->Add( 0, 8, 0, wxEXPAND, 5 ); diff --git a/common/widgets/gal_options_panel_base.fbp b/common/widgets/gal_options_panel_base.fbp index b04bacc20d..7022388d96 100644 --- a/common/widgets/gal_options_panel_base.fbp +++ b/common/widgets/gal_options_panel_base.fbp @@ -1267,6 +1267,71 @@ 0 + + + + + 5 + wxLEFT + 0 + + 1 + 1 + 1 + 1 + 0 + + 0 + 0 + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + 1 + + 1 + + 0 + 0 + wxID_ANY + 45 degree crosshairs + + 0 + + + 0 + + 1 + m_rb45DegreeCrosshairs + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + diff --git a/common/widgets/gal_options_panel_base.h b/common/widgets/gal_options_panel_base.h index 42bc7da6a3..455ab473fc 100644 --- a/common/widgets/gal_options_panel_base.h +++ b/common/widgets/gal_options_panel_base.h @@ -51,9 +51,10 @@ class GAL_OPTIONS_PANEL_BASE : public wxPanel wxChoice* m_gridSnapOptions; wxStaticText* m_stGridLabel; wxStaticLine* m_staticline2; - wxRadioButton* m_rbSmallCrosshairs; - wxRadioButton* m_rbFullWindowCrosshairs; - wxCheckBox* m_forceCursorDisplay; + wxRadioButton* m_rbSmallCrosshairs; + wxRadioButton* m_rbFullWindowCrosshairs; + wxRadioButton* m_rb45DegreeCrosshairs; + wxCheckBox* m_forceCursorDisplay; public: diff --git a/cvpcb/display_footprints_frame.cpp b/cvpcb/display_footprints_frame.cpp index b6c9d33fc0..158c9c5298 100644 --- a/cvpcb/display_footprints_frame.cpp +++ b/cvpcb/display_footprints_frame.cpp @@ -198,7 +198,9 @@ void DISPLAY_FOOTPRINTS_FRAME::setupUIConditions() mgr->SetConditions( ACTIONS::measureTool, CHECK( cond.CurrentTool( ACTIONS::measureTool ) ) ); mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); diff --git a/cvpcb/toolbars_display_footprints.cpp b/cvpcb/toolbars_display_footprints.cpp index 1d791ba6ab..6f176551a8 100644 --- a/cvpcb/toolbars_display_footprints.cpp +++ b/cvpcb/toolbars_display_footprints.cpp @@ -46,7 +46,10 @@ std::optional DISPLAY_FOOTPRINTS_TOOLBAR_SETTINGS::Defaul .AppendAction( ACTIONS::inchesUnits ) .AppendAction( ACTIONS::milsUnits ) .AppendAction( ACTIONS::millimetersUnits ) - .AppendAction( ACTIONS::toggleCursorStyle ); + .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) ) + .AddAction( ACTIONS::cursorSmallCrosshairs ) + .AddAction( ACTIONS::cursorFullCrosshairs ) + .AddAction( ACTIONS::cursor45Crosshairs ) ); config.AppendSeparator() .AppendAction( PCB_ACTIONS::showPadNumbers ) diff --git a/eeschema/sch_edit_frame.cpp b/eeschema/sch_edit_frame.cpp index 374e564689..a7ba2a6071 100644 --- a/eeschema/sch_edit_frame.cpp +++ b/eeschema/sch_edit_frame.cpp @@ -637,7 +637,9 @@ void SCH_EDIT_FRAME::setupUIConditions() mgr->SetConditions( SCH_ACTIONS::showDesignBlockPanel, CHECK( designBlockCond ) ); mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); mgr->SetConditions( ACTIONS::toggleGridOverrides, CHECK( cond.GridOverrides() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) ); diff --git a/eeschema/symbol_editor/symbol_edit_frame.cpp b/eeschema/symbol_editor/symbol_edit_frame.cpp index 8e7aaa14b2..5d988cb685 100644 --- a/eeschema/symbol_editor/symbol_edit_frame.cpp +++ b/eeschema/symbol_editor/symbol_edit_frame.cpp @@ -488,7 +488,9 @@ void SYMBOL_EDIT_FRAME::setupUIConditions() mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); mgr->SetConditions( ACTIONS::toggleGridOverrides, CHECK( cond.GridOverrides() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) ); diff --git a/eeschema/symbol_editor/toolbars_symbol_editor.cpp b/eeschema/symbol_editor/toolbars_symbol_editor.cpp index 6229a566a6..e4e4cc07ad 100644 --- a/eeschema/symbol_editor/toolbars_symbol_editor.cpp +++ b/eeschema/symbol_editor/toolbars_symbol_editor.cpp @@ -62,7 +62,10 @@ std::optional SYMBOL_EDIT_TOOLBAR_SETTINGS::DefaultToolba .AppendAction( ACTIONS::inchesUnits ) .AppendAction( ACTIONS::milsUnits ) .AppendAction( ACTIONS::millimetersUnits ) - .AppendAction( ACTIONS::toggleCursorStyle ); + .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) ) + .AddAction( ACTIONS::cursorSmallCrosshairs ) + .AddAction( ACTIONS::cursorFullCrosshairs ) + .AddAction( ACTIONS::cursor45Crosshairs ) ); config.AppendSeparator() .AppendAction( SCH_ACTIONS::showElectricalTypes ) diff --git a/eeschema/toolbars_sch_editor.cpp b/eeschema/toolbars_sch_editor.cpp index 292ea866b9..d99c48bcbf 100644 --- a/eeschema/toolbars_sch_editor.cpp +++ b/eeschema/toolbars_sch_editor.cpp @@ -61,7 +61,10 @@ std::optional SCH_EDIT_TOOLBAR_SETTINGS::DefaultToolbarCo .AppendAction( ACTIONS::inchesUnits ) .AppendAction( ACTIONS::milsUnits ) .AppendAction( ACTIONS::millimetersUnits ) - .AppendAction( ACTIONS::toggleCursorStyle ); + .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) ) + .AddAction( ACTIONS::cursorSmallCrosshairs ) + .AddAction( ACTIONS::cursorFullCrosshairs ) + .AddAction( ACTIONS::cursor45Crosshairs ) ); config.AppendSeparator() .AppendAction( SCH_ACTIONS::toggleHiddenPins ); diff --git a/gerbview/gerbview_frame.cpp b/gerbview/gerbview_frame.cpp index 6cd300512c..3184cf3e59 100644 --- a/gerbview/gerbview_frame.cpp +++ b/gerbview/gerbview_frame.cpp @@ -1103,7 +1103,9 @@ void GERBVIEW_FRAME::setupUIConditions() mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); mgr->SetConditions( ACTIONS::togglePolarCoords, CHECK( cond.PolarCoordinates() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); diff --git a/gerbview/toolbars_gerber.cpp b/gerbview/toolbars_gerber.cpp index 86f4ca9470..1b59d506a5 100644 --- a/gerbview/toolbars_gerber.cpp +++ b/gerbview/toolbars_gerber.cpp @@ -58,7 +58,10 @@ std::optional GERBVIEW_TOOLBAR_SETTINGS::DefaultToolbarCo .AppendAction( ACTIONS::inchesUnits ) .AppendAction( ACTIONS::milsUnits ) .AppendAction( ACTIONS::millimetersUnits ) - .AppendAction( ACTIONS::toggleCursorStyle ); + .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) ) + .AddAction( ACTIONS::cursorSmallCrosshairs ) + .AddAction( ACTIONS::cursorFullCrosshairs ) + .AddAction( ACTIONS::cursor45Crosshairs ) ); config.AppendSeparator() .AppendAction( GERBVIEW_ACTIONS::flashedDisplayOutlines ) diff --git a/include/bitmaps/bitmaps_list.h b/include/bitmaps/bitmaps_list.h index 7e99650fb6..1f96667b03 100644 --- a/include/bitmaps/bitmaps_list.h +++ b/include/bitmaps/bitmaps_list.h @@ -143,6 +143,8 @@ enum class BITMAPS : unsigned int cpw, cpw_back, cursor, + cursor_fullscreen, + cursor_fullscreen45, cursor_shape, curved_ratsnest, custom_pad_to_primitives, diff --git a/include/gal/gal_display_options.h b/include/gal/gal_display_options.h index 208792548e..602d0d9ee9 100644 --- a/include/gal/gal_display_options.h +++ b/include/gal/gal_display_options.h @@ -64,6 +64,13 @@ namespace KIGFX NEVER }; + enum class CROSS_HAIR_MODE : int + { + SMALL_CROSS, + FULLSCREEN_CROSS, + FULLSCREEN_DIAGONAL + }; + class GAL_DISPLAY_OPTIONS; class GAL_API GAL_DISPLAY_OPTIONS_OBSERVER @@ -101,8 +108,8 @@ namespace KIGFX ///< Whether or not to draw the coordinate system axes bool m_axesEnabled; - ///< Fullscreen crosshair or small cross - bool m_fullscreenCursor; + ///< Crosshair drawing mode + CROSS_HAIR_MODE m_crossHairMode; ///< Force cursor display bool m_forceDisplayCursor; @@ -110,6 +117,10 @@ namespace KIGFX ///< The pixel scale factor (>1 for hi-DPI scaled displays) double m_scaleFactor; + void SetCursorMode( CROSS_HAIR_MODE aMode ) { m_crossHairMode = aMode; } + + CROSS_HAIR_MODE GetCursorMode() const { return m_crossHairMode; } + void NotifyChanged(); }; diff --git a/include/gal/graphics_abstraction_layer.h b/include/gal/graphics_abstraction_layer.h index 21f112701b..92e8ee609b 100644 --- a/include/gal/graphics_abstraction_layer.h +++ b/include/gal/graphics_abstraction_layer.h @@ -1113,7 +1113,7 @@ protected: bool m_isCursorEnabled; ///< Is the cursor enabled? bool m_forceDisplayCursor; ///< Always show cursor COLOR4D m_cursorColor; ///< Cursor color - bool m_fullscreenCursor; ///< Shape of the cursor (fullscreen or small cross) + KIGFX::CROSS_HAIR_MODE m_crossHairMode; ///< Crosshair drawing mode VECTOR2D m_cursorPosition; ///< Current cursor position (world coordinates) KICURSOR m_currentNativeCursor; ///< Current cursor diff --git a/include/settings/app_settings.h b/include/settings/app_settings.h index 26699befb8..cab282471b 100644 --- a/include/settings/app_settings.h +++ b/include/settings/app_settings.h @@ -36,13 +36,18 @@ struct KICOMMON_API CROSS_PROBING_SETTINGS bool auto_highlight; ///< Automatically turn on highlight mode in the target frame. }; +namespace KIGFX +{ + enum class CROSS_HAIR_MODE : int; +} + /** * Common cursor settings, available to every frame. */ struct KICOMMON_API CURSOR_SETTINGS { bool always_show_cursor; - bool fullscreen_cursor; + KIGFX::CROSS_HAIR_MODE cross_hair_mode; }; /** diff --git a/include/settings/json_settings.h b/include/settings/json_settings.h index caa638ad11..84be921d6f 100644 --- a/include/settings/json_settings.h +++ b/include/settings/json_settings.h @@ -22,6 +22,7 @@ #define _JSON_SETTINGS_H #include +#include #include #include @@ -388,5 +389,6 @@ extern template std::optional JSON_SETTINGS::Get( const std::s extern template std::optional JSON_SETTINGS::Get( const std::string& aPath ) const; extern template std::optional JSON_SETTINGS::Get( const std::string& aPath ) const; extern template std::optional JSON_SETTINGS::Get( const std::string& aPath ) const; +extern template std::optional JSON_SETTINGS::Get( const std::string& aPath ) const; #endif diff --git a/include/tool/actions.h b/include/tool/actions.h index 24a6921c44..2fd930bebb 100644 --- a/include/tool/actions.h +++ b/include/tool/actions.h @@ -148,7 +148,9 @@ public: static TOOL_ACTION centerContents; static TOOL_ACTION centerSelection; static TOOL_ACTION toggleCursor; - static TOOL_ACTION toggleCursorStyle; + static TOOL_ACTION cursorSmallCrosshairs; + static TOOL_ACTION cursorFullCrosshairs; + static TOOL_ACTION cursor45Crosshairs; static TOOL_ACTION highContrastMode; static TOOL_ACTION highContrastModeCycle; static TOOL_ACTION toggleBoundingBoxes; diff --git a/include/tool/common_tools.h b/include/tool/common_tools.h index 4c6f519d18..4ffe2b083e 100644 --- a/include/tool/common_tools.h +++ b/include/tool/common_tools.h @@ -64,7 +64,9 @@ public: // Cursor control int CursorControl( const TOOL_EVENT& aEvent ); int ToggleCursor( const TOOL_EVENT& aEvent ); - int ToggleCursorStyle( const TOOL_EVENT& aEvent ); + int CursorSmallCrosshairs( const TOOL_EVENT& aEvent ); + int CursorFullCrosshairs( const TOOL_EVENT& aEvent ); + int Cursor45Crosshairs( const TOOL_EVENT& aEvent ); int ToggleBoundingBoxes( const TOOL_EVENT& aEvent ); diff --git a/include/tool/editor_conditions.h b/include/tool/editor_conditions.h index e06a4ac8e7..746c716030 100644 --- a/include/tool/editor_conditions.h +++ b/include/tool/editor_conditions.h @@ -34,6 +34,11 @@ class EDA_BASE_FRAME; class EDA_DRAW_FRAME; class TOOL_ACTION; +namespace KIGFX +{ + enum class CROSS_HAIR_MODE; +} + /** * Class that groups generic conditions for editor states. */ @@ -125,7 +130,9 @@ public: * * @return Functor testing if the cursor is full screen */ - SELECTION_CONDITION FullscreenCursor(); + SELECTION_CONDITION CursorSmallCrosshairs(); + SELECTION_CONDITION CursorFullCrosshairs(); + SELECTION_CONDITION Cursor45Crosshairs(); SELECTION_CONDITION BoundingBoxes(); @@ -168,7 +175,8 @@ protected: static bool polarCoordFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame ); /// Helper function used by FullscreenCursor(). - static bool cursorFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame ); + static bool cursorFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame, + KIGFX::CROSS_HAIR_MODE aMode ); /// Helper function used by DrawBoundingBoxes(). static bool bboxesFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame ); diff --git a/pagelayout_editor/pl_editor_frame.cpp b/pagelayout_editor/pl_editor_frame.cpp index 1cc1578b3b..0e4ea80f68 100644 --- a/pagelayout_editor/pl_editor_frame.cpp +++ b/pagelayout_editor/pl_editor_frame.cpp @@ -313,7 +313,9 @@ void PL_EDITOR_FRAME::setupUIConditions() mgr->SetConditions( ACTIONS::redo, ENABLE( cond.RedoAvailable() ) ); mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) ); diff --git a/pcbnew/footprint_chooser_frame.cpp b/pcbnew/footprint_chooser_frame.cpp index c1a8cb2f95..36108ffdf9 100644 --- a/pcbnew/footprint_chooser_frame.cpp +++ b/pcbnew/footprint_chooser_frame.cpp @@ -846,7 +846,9 @@ void FOOTPRINT_CHOOSER_FRAME::setupUIConditions() #define CHECK( x ) ACTION_CONDITIONS().Check( x ) mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); diff --git a/pcbnew/footprint_edit_frame.cpp b/pcbnew/footprint_edit_frame.cpp index e76c7fdf76..d29ec83c39 100644 --- a/pcbnew/footprint_edit_frame.cpp +++ b/pcbnew/footprint_edit_frame.cpp @@ -1340,7 +1340,9 @@ void FOOTPRINT_EDIT_FRAME::setupUIConditions() mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); mgr->SetConditions( ACTIONS::toggleGridOverrides, CHECK( cond.GridOverrides() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) ); diff --git a/pcbnew/footprint_viewer_frame.cpp b/pcbnew/footprint_viewer_frame.cpp index e89f424c20..6fd41013c2 100644 --- a/pcbnew/footprint_viewer_frame.cpp +++ b/pcbnew/footprint_viewer_frame.cpp @@ -349,7 +349,9 @@ void FOOTPRINT_VIEWER_FRAME::setupUIConditions() #define CHECK( x ) ACTION_CONDITIONS().Check( x ) mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) ); diff --git a/pcbnew/footprint_wizard_frame.cpp b/pcbnew/footprint_wizard_frame.cpp index 79e12b80b3..9eb02291b4 100644 --- a/pcbnew/footprint_wizard_frame.cpp +++ b/pcbnew/footprint_wizard_frame.cpp @@ -28,6 +28,7 @@ #include #include #include <3d_viewer/eda_3d_viewer_frame.h> +#include #include #include #include @@ -197,7 +198,7 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent m_auimgr.AddPane( GetCanvas(), wxAuiPaneInfo().Name( "DrawFrame" ).CentrePane() ); auto& galOpts = GetGalDisplayOptions(); - galOpts.m_fullscreenCursor = true; + galOpts.SetCursorMode( KIGFX::CROSS_HAIR_MODE::FULLSCREEN_CROSS ); galOpts.m_forceDisplayCursor = true; galOpts.m_axesEnabled = true; diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp index 72c0a6ca16..91a4c1d778 100644 --- a/pcbnew/pcb_edit_frame.cpp +++ b/pcbnew/pcb_edit_frame.cpp @@ -823,7 +823,9 @@ void PCB_EDIT_FRAME::setupUIConditions() mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); mgr->SetConditions( ACTIONS::toggleGridOverrides, CHECK( cond.GridOverrides() ) ); - mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); + mgr->SetConditions( ACTIONS::cursorSmallCrosshairs, CHECK( cond.CursorSmallCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursorFullCrosshairs, CHECK( cond.CursorFullCrosshairs() ) ); + mgr->SetConditions( ACTIONS::cursor45Crosshairs, CHECK( cond.Cursor45Crosshairs() ) ); mgr->SetConditions( ACTIONS::togglePolarCoords, CHECK( cond.PolarCoordinates() ) ); mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MM ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); diff --git a/pcbnew/toolbars_footprint_editor.cpp b/pcbnew/toolbars_footprint_editor.cpp index c170c80977..5289bd65e6 100644 --- a/pcbnew/toolbars_footprint_editor.cpp +++ b/pcbnew/toolbars_footprint_editor.cpp @@ -54,7 +54,10 @@ std::optional FOOTPRINT_EDIT_TOOLBAR_SETTINGS::DefaultToo .AppendAction( ACTIONS::inchesUnits ) .AppendAction( ACTIONS::milsUnits ) .AppendAction( ACTIONS::millimetersUnits ) - .AppendAction( ACTIONS::toggleCursorStyle ); + .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) ) + .AddAction( ACTIONS::cursorSmallCrosshairs ) + .AddAction( ACTIONS::cursorFullCrosshairs ) + .AddAction( ACTIONS::cursor45Crosshairs ) ); config.AppendSeparator() .AppendAction( PCB_ACTIONS::toggleHV45Mode ); diff --git a/pcbnew/toolbars_footprint_viewer.cpp b/pcbnew/toolbars_footprint_viewer.cpp index ab4ee09e53..fcfee2df8a 100644 --- a/pcbnew/toolbars_footprint_viewer.cpp +++ b/pcbnew/toolbars_footprint_viewer.cpp @@ -80,7 +80,10 @@ std::optional FOOTPRINT_VIEWER_TOOLBAR_SETTINGS::DefaultT .AppendAction( ACTIONS::inchesUnits ) .AppendAction( ACTIONS::milsUnits ) .AppendAction( ACTIONS::millimetersUnits ) - .AppendAction( ACTIONS::toggleCursorStyle ); + .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) ) + .AddAction( ACTIONS::cursorSmallCrosshairs ) + .AddAction( ACTIONS::cursorFullCrosshairs ) + .AddAction( ACTIONS::cursor45Crosshairs ) ); config.AppendSeparator() .AppendAction( PCB_ACTIONS::showPadNumbers ) diff --git a/pcbnew/toolbars_pcb_editor.cpp b/pcbnew/toolbars_pcb_editor.cpp index b108d14fb7..8eb35561b3 100644 --- a/pcbnew/toolbars_pcb_editor.cpp +++ b/pcbnew/toolbars_pcb_editor.cpp @@ -140,7 +140,10 @@ std::optional PCB_EDIT_TOOLBAR_SETTINGS::DefaultToolbarCo .AppendAction( ACTIONS::inchesUnits ) .AppendAction( ACTIONS::milsUnits ) .AppendAction( ACTIONS::millimetersUnits ) - .AppendAction( ACTIONS::toggleCursorStyle ); + .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) ) + .AddAction( ACTIONS::cursorSmallCrosshairs ) + .AddAction( ACTIONS::cursorFullCrosshairs ) + .AddAction( ACTIONS::cursor45Crosshairs ) ); config.AppendSeparator() .AppendAction( PCB_ACTIONS::toggleHV45Mode ); diff --git a/pcbnew/tools/footprint_chooser_selection_tool.cpp b/pcbnew/tools/footprint_chooser_selection_tool.cpp index 7bc5d031a2..fd8a285a31 100644 --- a/pcbnew/tools/footprint_chooser_selection_tool.cpp +++ b/pcbnew/tools/footprint_chooser_selection_tool.cpp @@ -38,7 +38,9 @@ bool FOOTPRINT_CHOOSER_SELECTION_TOOL::Init() menu.AddSeparator( 1 ); menu.AddCheckItem( ACTIONS::toggleGrid, SELECTION_CONDITIONS::ShowAlways, 1 ); - menu.AddCheckItem( ACTIONS::toggleCursorStyle, SELECTION_CONDITIONS::ShowAlways, 1 ); + menu.AddCheckItem( ACTIONS::cursorSmallCrosshairs, SELECTION_CONDITIONS::ShowAlways, 1 ); + menu.AddCheckItem( ACTIONS::cursorFullCrosshairs, SELECTION_CONDITIONS::ShowAlways, 1 ); + menu.AddCheckItem( ACTIONS::cursor45Crosshairs, SELECTION_CONDITIONS::ShowAlways, 1 ); menu.AddSeparator( 10 ); menu.AddCheckItem( ACTIONS::inchesUnits, SELECTION_CONDITIONS::ShowAlways, 10 ); diff --git a/qa/data/config/9.99/3d_viewer.json b/qa/data/config/9.99/3d_viewer.json index 7a8a1eb11f..3fa8d45a6a 100644 --- a/qa/data/config/9.99/3d_viewer.json +++ b/qa/data/config/9.99/3d_viewer.json @@ -227,7 +227,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { diff --git a/qa/data/config/9.99/cvpcb.json b/qa/data/config/9.99/cvpcb.json index b9229b0862..138197bf35 100644 --- a/qa/data/config/9.99/cvpcb.json +++ b/qa/data/config/9.99/cvpcb.json @@ -40,7 +40,7 @@ "autozoom": true, "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { @@ -257,7 +257,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { diff --git a/qa/data/config/9.99/eeschema.json b/qa/data/config/9.99/eeschema.json index bfd62f2e08..705e147e85 100644 --- a/qa/data/config/9.99/eeschema.json +++ b/qa/data/config/9.99/eeschema.json @@ -202,7 +202,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { @@ -362,7 +362,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { @@ -466,7 +466,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { diff --git a/qa/data/config/9.99/fpedit.json b/qa/data/config/9.99/fpedit.json index 236d2bfc64..9bd5ac6e41 100644 --- a/qa/data/config/9.99/fpedit.json +++ b/qa/data/config/9.99/fpedit.json @@ -171,7 +171,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "footprint_text_shown_columns": "0 1 2 3 4 5 7", diff --git a/qa/data/config/9.99/kicad.json b/qa/data/config/9.99/kicad.json index e99cf25ac4..968ab4dea1 100644 --- a/qa/data/config/9.99/kicad.json +++ b/qa/data/config/9.99/kicad.json @@ -107,7 +107,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { diff --git a/qa/data/config/9.99/pcbnew.json b/qa/data/config/9.99/pcbnew.json index 3cd04968e9..03074a2565 100644 --- a/qa/data/config/9.99/pcbnew.json +++ b/qa/data/config/9.99/pcbnew.json @@ -153,7 +153,7 @@ "autozoom": true, "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "fp_list_width": 300, @@ -326,7 +326,7 @@ "footprint_wizard": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { @@ -635,7 +635,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "footprint_text_shown_columns": "0 1 2 3 4 5 7", diff --git a/qa/data/config/9.99/symbol_editor.json b/qa/data/config/9.99/symbol_editor.json index 3778b2e628..8736037037 100644 --- a/qa/data/config/9.99/symbol_editor.json +++ b/qa/data/config/9.99/symbol_editor.json @@ -124,7 +124,7 @@ "window": { "cursor": { "always_show_cursor": true, - "fullscreen_cursor": false + "cross_hair_mode": 0 }, "display": 0, "grid": { diff --git a/resources/bitmaps_png/CMakeLists.txt b/resources/bitmaps_png/CMakeLists.txt index 96205a90a8..8d7492c00d 100644 --- a/resources/bitmaps_png/CMakeLists.txt +++ b/resources/bitmaps_png/CMakeLists.txt @@ -239,6 +239,8 @@ set( BMAPS_MID convert copy copy_pad_settings + cursor_fullscreen + cursor_fullscreen45 cursor_shape cursor custom_pad_to_primitives diff --git a/resources/bitmaps_png/png/cursor_fullscreen45_16.png b/resources/bitmaps_png/png/cursor_fullscreen45_16.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5623d6813781078875b58f30d388ba404d45eb GIT binary patch literal 350 zcmV-k0iphhP)O^d9=I)N$AGrr&E4LiJicKw610>oGiORPez6;U_!U`>iABi^Xmmtl6=0jkctutExD>NT^ zB;R^Sl4t{9UQhsfAtWT^zgK*N8Fz6xzsv2r>YK{ZdQ+u3o*`7Ow%=q6%gJ z2xnzweP6U_krP$}aK$sS0U(@_k@0=Of(6bf2H?_+WWWa~9g3dV@M?w{us0$iLIFsB w1LFPYDVBjyb`A{<<%Am47aSaX4Lv&p01NJ&zr_Nhga7~l07*qoM6N<$f`g@r!2kdN literal 0 HcmV?d00001 diff --git a/resources/bitmaps_png/png/cursor_fullscreen45_24.png b/resources/bitmaps_png/png/cursor_fullscreen45_24.png new file mode 100644 index 0000000000000000000000000000000000000000..543780238d987ae9922858008fac8eeb20cdadbb GIT binary patch literal 466 zcmV;@0WJQCP)^DI0EC^B%KppLAD}Ff<7Vz#iXNdb3qaU4KL3Bh)NSj@vH+Arv1K%5 z3qUw6E$#oZWy{)0vH)N9N4Efk6B85vFIcdkhbRjOl`YsT0O8o!*#9$T%$S7N0z!u4 zu;3{Wx0RQdZvt9?Q9zPpII;!7!NGT+?4J=45mLBHVUi4oTJSG4G_)u%Fi;1?hFa2$ ztEeZ*a1aK%JOjzHy-*9D>C~39?1qC?*4gUeM2v@TO0Mh&di4`)}TL1t607*qo IM6N<$fTaCxnxE7l2<7{mgp+yoR8e z+X8q6!D8+Rzze}@-WOm{2sh?b01{&V@DxRg>Q}g+y#$q}XzdqN)F`w?_S8@4%Np32 zrW7Es`A106kfCp^xY-V6qfT#+6fZwnqbl>J3M<+(0q_rDH3vao*6%U{z_eS9LItg( z%K`?=;W>al3vyHHf#_BzsAx$y-*g>Zbco(jV>N%=nhyq`s4*C+X*|DGL?K!I11L08 zz5*ELT}vQI5?a{YMq&B#ZwXvNaBo5Y04;9h(d6#Af1A+hH#7l2OKUkawR7hEZwNsJ zf{R@sA^|`vsVy|C9DlLq4(7z7hhiLNt)bWo07|Z{qiVH!#R9>dSnL2m>2w-ZDwS&* z1b0?*0?=n7nMCDs`L-VfcS`LC07@hhs8lN5J3(;ga~eQA9`9r_8JLM1I|wdw3P3)a z&5qFyHC*NvfH$l=^Ia6h2SE@8F7?H}O9MoW=;^5(T55%nTcFyHYjOVm(A>?Mf7uf!lk2nz9{HD`|srYxI+ zB$#*?#s9#QP!Ti;V)OdG*u{07-OTLlW~YZANoOb9=h=_hnU~eN-7a9prfFUtjYisb z2(c0~v1`_s?IK}^r%w_nVm7S?%oSDPk?o?B)!LxE1Ph+p?H!braD)FxKvfAZ`2Pe{ zlb8h06i`Ki2i{d6Y6)I=Pl2c;MBpb1Oj|+}o=ad_5`N&h1;Uo_3oj%PmV^wvut3lf zvhcnH>=K5#4*F^j=I#wgv$f%uy|v-PL)DMF+zzfsi@%MSZnD zMi{UsRvQ`%En~N{Kef>|XMg=^4`j}w)b%@8AAENLu_WB!DYOq61}Omq*kD1~CA{Fb zvJsg;tU7$;0frfvf8ySU_7Rx?$I%0c&JIm{;Ng19QIGo00whfjmjYC4zwu zOyIA?+cge>^`PJb7l<(g7MJhCY;~ZvfY&9IN~Pe)rCT`KyixNKnsoh>0OeTmI_$gK zSL-I`8AdGu%89}X?7#C`one&cL1q`AoIJM-^S8TdJji&a5>5fisWU}5aC0sCsRYkt zjwL`@%3Xkk8!w}q%+X?mXFBaBKslW~3+Ep^pZ;{(T1oLNXuJd{xm*s~?e_E*G@{GE zNdlBiCIhWjEBqy;pEWFx041GHL$lcoZ&B}e0nRI6rCzT?;AIt=>Vc>LrBbPYVHj5f z5s)o?_z|F#%Vp?vIxA8FLDX$T!L!-yk3yjUrBVqRjfVf?ZV>PS0#EY!{GNC`zEiY# z7Am}ez-L|8XZ%zELxpDuj4@TrH^wlk`zd3F3hxjYCzHu*)P|pr83G?PP1_+V5h}b* z;1@y{tv39A5ZgAL5{X3OsAxesRQN4{pLle$jP?%WUU(r|6%Q4jg78bMc03Em83JEL zOZ$<%>_OK%%Dr<4y!Z36M`UlR;5C03p+8weDgM1E`o_v{1)qm=_(X2y00000NkvXX Hu0mjfk?(#^ literal 0 HcmV?d00001 diff --git a/resources/bitmaps_png/png/cursor_fullscreen45_64.png b/resources/bitmaps_png/png/cursor_fullscreen45_64.png new file mode 100644 index 0000000000000000000000000000000000000000..f334db3fcaf05115fed623090f318a5ce189a11a GIT binary patch literal 1104 zcmV-W1h4yvP)VEKQLpau`0rMbDe-T2^LO~Lzxg@snPz-us; zFSK3-S4hxWmCD6j_3UHbPGw_B2 zoFc(2JduD#m%su~ETB;(u)PiUeNprUZzVz!ToI08tWn!!rr6TY?qv z%mVC^U==(U0cssgq@SaX>BV*Lc>ZV8c;Sb4qLA{+`F*7AL0vefd@gR|^z>p0+O%TT ziu)}J9c{gpN4WE~@x6H>f7GZQr~`Ft&xbZE61XneaUZ8}wN&7VBxu1`1MVu`>y_M} z)cBSy>Il%3U<3~VZS(FgcLBJgYX$=9B#^*YVy)o?R32W4R00J&g0>r90Dgkw&VD5U z@|1^*;gG4uSDKkbn1J#yke3eQ4u2s8L$pJt;RSG(U>Urn0ys&q6y9BOX~@!100G7&u=yJ9yi zPaO6-OtBzhBmlzS)r}6sW}LAgLc1hJA^;)~>_Ue|9+a2FcrUpNT@)o1P>x^_jZNL< zzT_@+S)58hB_<~)xk?b5oM1u##OUZKnxCKNB0+3&f=K}ou~-b@|MP)Wg4pB)1_2Pm z!^0?($*izQ5SyI9C;(z`a1f=_Y10zKCMR$Z01=HwQ7V=CXhwqA_nN+y%5 zv=YQ7CvX%15e|n@B9Zt+BSCC(0v`cIeDyc_`}@(*&=88p<7jqvmiU<7VFR1pSGAYenM>?*Hx9bxc#0)oNd%K-k<5wL>C{8kxcUQGaodZfIv_`6FwcflJT*=xe!RRqkmx3_Om zmgAwY9e@8>O9C!G#wtM=yix$Z^7r9btqv}m(isL1S@Rf$!7BvZ(W~S4`Ns}hYgoK1Jkb*&aKzhN9{{H^mK&(KDW|$rf0a7%B_&6nq(TrjMAwzJyas70<{9fbfOm=Rd4j zwnh)d0DK7us__GuzH~1XBPkO~!uK!T-FyH1eFdNa-|k($w;v-j5z5Ywk3Hsu8q|01 e@||nw*%<&&Fr)LC^qIy00000TQxdPBM z#8?8SyTwX?xjn!6F7K6BYz0nmOM#+3-8Z$&#c4e+3gR2{x*i8UC;+J1t3UKReTsDp zyMp%wKboSgsO$Ya%fje87)V@s*%+b;nxG3KrE3?)&_pShcxkCu zP>PATGhU8!lxiuInbMZUAEwNt-`CT2X6g%v!(Sxx!C=tW&L9)n*q9{&lBIURL!r(Zhe?rE(E`VjP10}Q%j>Ig6x5IUTYN>+_Bx;2OZOYC$ zZNJ-93G-D0$7`Q<;VlXH`O>(t?CZyO!2PyAIlesYsQ|*ww;-QZVEg121`?&;TVPYd z(L;!pKmp8t@&<+k4>X^{ z60ozL(*$Jc>MfH@Lu@Cu$|PV1-b_Hv$P1zi*0hnooZTM{vxIblGD(CIT~t wD!kG*x<0o*&mU8d-2{C0Qvpc{(>~9?0oD2;N3C4Fng9R*07*qoM6N<$f;|ipt^fc4 literal 0 HcmV?d00001 diff --git a/resources/bitmaps_png/png/cursor_fullscreen45_dark_48.png b/resources/bitmaps_png/png/cursor_fullscreen45_dark_48.png new file mode 100644 index 0000000000000000000000000000000000000000..36569cf8954dc745a345abb08d5d4ac269df6c02 GIT binary patch literal 842 zcmV-Q1GW5#P)I+b#4@`XG8}O-5bln4ui4P1$pDB9*zJ@)9WDpFA@%h4Lj1n=lY%IjM z1XL1OVKYbz=!^+1IMip0?z|sb)0O_awnuLdzA3pL@cCS?*Skw2$z&4YG!u!$*=RHx zISK(*Up2Jd|5jU`fIX z{*VBx5_a%Y0<1|m!J7)OBH;$!QXp&zxA3+CVM&m{I||HNf)w7Bz^o*^z`GWpE#VcO zNPw1vA9!Mcpe6jmdlJz9@lq;{7FH@FPEf{kg8FTaSC{TQMJKGj2j`#;)a8omUMyQt z;Wxa(dlt|nVk=b@!yrQnHwvAT#`;hO=Zy7ZxBMKWq;&3e}_?ZYisqEqw*R?*20(M=f+mzAr+s|lTP}uB3PW>MQ zATQp3Lf4Co-NbH&QB45C*ZSyYQDJ8ob$*a3f?fdfrrt-l*A+G%WNxMsMghpXMi<>H z4VaipI8Nrw1R!-RaereF-ek`0blOS)(h|F9F<<-cXHi6bL1QNX>1=&OtIMmqUL~k6 z1DymQvM8b4v)orN64ckQZUnRxa)kk@1oZ_ti2$U;mxd$~)OQa^1t6Ono8wF-b0H7` zzgr((1R&Md)gRex_M$I=AoguM!2jH-ZSOZKb+nepk71okDAbf6x7+R0<#PEr z>E;<#c!DdS^m>P9rfwyu!kY*j;MQJ*Zeo<^iP8fv+n7}04FU(fru1-9){-8XT!kh= z=oqO4Rd}7iFWmAATA92fU&3X-jS~Hqbd7XFnJWB0fqmTacTLLkCO7kQ(p_ z60uE{3Iq`-6qYKOc3TvYLMd8JOw`D89#E+5PP-p7vmYG(>83k7^Zvh`{hE1G;&!`% z=x=p(^|7j|s*=?p^opL*dr4+vwLr)=kG}}uXx1O|L?@kUUdbzU$7(Q-{}(ObWb^+4 za4Ljio-`leB=d>@oB~0u2g4QE*?d6&c7>odX66;z$-F86c7dQbM(zz**}NtIR)t_R zCgBZQ$-FKAR)N4O2GavDyKTz^Vpf}$3rKWZmJLi)8(adsaVh}4yx)AA%S4ZzZ6u!AV2(imvHWGoMWF$8YrxdLDWfvb7$01QIlZe9q0 z6$mqFwdTvn%~6DTVF1c}$(=6B`@yZA32-Sq9rm=PN*w_J&C?!>XgoF|LsRc3sPN9@ zT>>H?m}Wj30P0EqN2v5Ag+nmSd@cagi{Loy^@;5XrkPg)fa(g3!vViI2&TRYyU1&B zE&x>DPz(;eoVMqyu$GUZ3V*6p2>>cYARKu$ZNHBpEuX^xu!aTz6_#RfJdkkQc);=- zUNHcuF-e9quczz-K+BMr8UU#1NDMA@ezE?LnASm2wE$2uQFDvmx`U#6hQ+l2$jIC3 z1z%aF0{|891)!#;=9DD>7@4ur3jo#K-VL?2wWm!5V06052mn-XM=#XX)txm3 z0E@XgqX1BY-2>2YyWzZ00IVh|SpYx{za4_cyNwrx0AM*w%L)MMeefN49(XQu1;BcW znk9gRx5mLyc$3MxyqVZYpv=-Bj7yQ-%oa_Vk@dL@ARN7c+e&5PVfiWz0NK~XWZ9fq zdB12{mgH-N%0z}ETZq};6bK2!3n%Tc8YC{s_i0Z9!%JuFuy~sElI_Isue>LLB)eHG up0>rxaeV9%(_dErL?0!F6Pt{#ApZwF>_Ek`dhmt-0000UVKD=}1&T07M83-A$YuB!oL)ZYNjx+p?OZOfi+W@J?!?UCskNlTvIP5~E0Y_JX z43KU-97?nSAZJT89GMN#eDpEc1&v3Jf%wu*M~g5F00z=@U|g?);pSy~4?s16v2{i( z$O~Y$a_f;F$ZCOj26m@69CZUZ8))mXkdTo7u5o$SWNY_CNHiSMA~_5|27qvAXy_&& z<|N4g$)+O(Fax0Y0MHPAk`fY{0U&%dARs`1R0BRh=}?lBa(a6D%ZP{w1)%0{K)j!1 n12%8oJQwPczTn{CYv}R-VO*y+tnZO#00000NkvXXu0mjf5CwH( literal 0 HcmV?d00001 diff --git a/resources/bitmaps_png/png/cursor_fullscreen_24.png b/resources/bitmaps_png/png/cursor_fullscreen_24.png new file mode 100644 index 0000000000000000000000000000000000000000..22d9f58607b5a7aa8c38e33dc61ec689d12520c9 GIT binary patch literal 308 zcmV-40n7f0P)UVDR}43o!3cG&p?I+|3@ttwSasJq#KX4$u}SQ529&efmGv>pFsQ{MAOQG|1dl> zEC7Wy(6Hag24lg$@x=)!Ronul3~X4j8Ph=PjMo2B4Tn+0KfCHz#)2WS?6d~!J=B0`F4IT_soD82`@ zNQEk85e^GL_<3Mppgt`ucnZWIpOpc95kfT!f`fzaK-oX376%{UVC3xq~oi}#v+GS0yeg-Ny;Qx*tJHkdCFzSF&2aHSy$TS>w2%UD|zt^OL3mF>z zGtt!n5)H={q#BR>1mgc7EZKCVfUXXZY&a4GvmA<7(A5FbjfX=~9dLBj@OFTB^Fc+) z#-qU?iy`<>ADRP>A>@FLYdU02H3xuFJ92^}7E3oA=_lv_U>?2+%FFn07%;2hvcx*0 z^}kfZVXShB%}4$dF#9e8s4)S=q4==p{r)g~n%IA0-0K)Hq zAz?$)_5c9~fbiGg;9#$Tbify&1MUX}1zFSE0cB}vX{BT>!^1y-QasSo0JJi}gXRv1kB|R9dGh2!5WAtFfeGk{J4lY$Mso+OUcDNnRSfiX yK9U1I(W6;@4^*qc__49E+(1WMfI5I+djJ4N#>mgl7}iMu00004zBR0>9vISYhLb}#t4GIkeRFAL)QKc*#O`78Aby% zKm#;D12jMbG(ZCs0?fJ(W0RHEQSzY4Fu09l$^fR^)^VcJV*SA}WdKm{TNHp}DghWT z8lV9hKm-uZ^H5ahuVQ1QGw3=o)Or5D8DyQnrQQ#h`#4Een?gmUH>)h+ihUOM8K;JN zy?!GdU|AMh+}ML}w;=~0yM+*dSuX9e>HXW`w~*|UI0Rr;*SFbB`I^Q_EIN($12DF2 z-xmsngfiprG@PjjQ>Ot*=%-+93Y?1 zGtcuF2X@Ih7tYB6YPA~o{s0_>6%OD-nHwC~@6cLz5kQ+Fpn>7N2R%OzML&mADZEa{ a-TyB-{;!S0v8coV0000I&$=S3Obn9dOx z^ugJjQJ%9w)J@&kWubk47YoYT>3P;!jMzE0b4KpG=e_tbb-eoif5+qdJm-C7a=9F{ zk|dMKVPKKx`Sz9g`AiK6_yI^DV8W~dBqWteO;G_<02M$5Pyti`6+i`00aO4LKm||% zQ~(t~z5s@m>PD{4NU_PZGghdg2AxV)q&#?CU?_ zOJRjc;ssba;Z)i1GEJ<|Lbw2NTup$L%N!tFKqjFkz{Uw)Du4>00;m8gz=#4i#pW6d z>pT=Rzk`-#L46q%vx;Nc%w_ogolGLJy59X=s#4$uDccngRzg29Vbx0O{!Jk+z&oE;sgzH6k3V*+K~W zc?%~vv7jjjtmj!J0mwmL*T>ervE${&T3DgIW$?j9GAcm@0WvR~PG>9GrLejHRHO3VX$sE!n0D;wE zIv5PDGo%3A6SPLeSv>+|3Ag=z{{}c8jZO-%rL8}AOM*M3C(5} zfIJ5Y+s!Nhc?S~O%qHLy@Dz9m;qSuhI5bfWBn!CZ^ZB-7NS0;mjD18#n}DyCTwx;% zSWXEz=3ktts>xAC=^;ts(|ao5*I#xq|y&`5+?vc#Y?X&eC?=O1xS>D-rn9P ze|LCrE7Ze#Z&iAMHX;Os!(qjfqVQWWpmG~rF}#3iG^%=3*5z{9A?$Yr2`^1?Rv3a# zD6Iy>{PQ%RctRAL90>cZjDTSh1Y86@^E|J5I1-mV+$SgrKNScBbe}8!1z)?O^F@rs QrT_o{07*qoM6N<$f}Z<`4*&oF literal 0 HcmV?d00001 diff --git a/resources/bitmaps_png/png/cursor_fullscreen_dark_16.png b/resources/bitmaps_png/png/cursor_fullscreen_dark_16.png new file mode 100644 index 0000000000000000000000000000000000000000..edc4be19ff342b1b0d79c49f203d49e970371dc8 GIT binary patch literal 293 zcmV+=0owkFP)D+Y(Aeta}*73*xouO>E zZO?uns|Dg2*qy%XtsBVMAe--9zWaa2nfuo~w!esQ-u70DQy>)5?PX zFg!FY0EIQsu;0iAW5K`i#R(`?+ybQxY}j?%a|{D#9e@1a8BGkN4u=_cN%q0L%Xj}T zJ^ARr%Z^vX`GC|o09gRVn;su~%t`e~MzR2i?;N;$<}N=~^8u;_V0`(}jYm>c%gIRWK>&eQvs@3!5)a;NOx)q5dSvjAx59Vq)J)#3nV z!QD%Di|$;!qXT6BgZScJGu15EuzEeb9J+t$?p|2o&9_z#dpxYPpx XZS_0YDnWP900000NkvXXu0mjf#H5sz literal 0 HcmV?d00001 diff --git a/resources/bitmaps_png/png/cursor_fullscreen_dark_32.png b/resources/bitmaps_png/png/cursor_fullscreen_dark_32.png new file mode 100644 index 0000000000000000000000000000000000000000..5df8c6bd5b88477081862645399f59c2e73c620b GIT binary patch literal 519 zcmV+i0{H!jP) zzfZzI6oAph$-!ACP2AlrCKS;qlTk2X(LX_1ocRmdvMG}eBw%DR(w50dB{o5zH5l(& zgC_haMq@O_>FiaAMMEJUz(KP|Q+rMnMPNCZhXmxyrYuSwTc)Deh z$muPbZ4sMGmQb6qAr>GQhVh#bILPd_5|Hx{Mbky(;i}(ai$`|_vvI@Wu(P8jz=sUU zt3h09c(du?HLnX`4$p61y{T%#5NBpMb=2}IXb5}&j-dcYY%RlP0iArYP#o)}07eE9 zn6y@auS}Z=U`nzmPg!~!;yO1Gz&t<+IxX!7+6Z7?U=DhFDex?dPyr$!Y!y&Muq6n> zkmW6zA?dwF&TuANB7_EP5dhiiN4(>e99U|a1qm!zE+7dKibvx?{H*=)ppu86Apk{~ zv|J#vz0=ecYXTdFS$MKsKua#;Tdnb4&X$L@#25MuXP)ASmJl1Qi1i8x~zMu8Gn|A~J9AVmW-Km#;D z12jMbG(ZCs0xV>4U^?H}NS!<)g}zgpGJxqq!{EU{43z*)0idZ807cON4bT8d0RB49 z2i5v+uo2Sw=|1t->-=vMd7q%IzUXiFQ8Ig63pJ?ivj?0B37|eBj-wPiz_9@L&OJ;P z>hS>LE+GO?au@fQD#lPkaZh3&K*?WLalTlWV-km5MtcF>Sl+EStjsTbFln=0ANy;N-NC2hnSk8)chx!PBPQZqBsUE9D z1#}TRrBbP1SwIJ2LC$sEK@|b7JRXnfny{(_fM4ycN~JOswrphl2kK$UMFv2dU+p#i z`4&XDCR>yp&~`1h+-bAfrsyse5&NVBfW@$Pr-d6B0qjUH znGdA{WOg&c_XGR}E-5IZ7iC^>P`&d3Uj+cBjDS;$=(p;w?JVIqE7DwC)mOMU)D8?Ggl?BCJc;LF%-wml84Tu-dv2LY6b5 zYZ`$TF2&9o8;oyuZ8hDU(aI<&%h&g9V@d6d?2P2j%oF~&AfxmBW|;TAc~4J$eZ6Nh z)B5XcCJ+eJY{uXBlmNhY2!-^x6@Y5#WdIC-0WbgtzyKHk17H9QfB`T72EYIqfb#*G zn`zm#_7H9Ad_b?a-+kmNfTM%CL)Exv1VFoDmbe%Q$)vjhWbnb)b^*Xobw9g76N3f7LU2odB5lauy8p+X!nb^ z)X(RNKHkq|t)92y!JQfKAqV=YRgm6Az&8erc zp(z*~=XC%uVqE@kd35$-p<{h~uEsyKxZ4q(pdNshIeAh(=;&5>9RSRG@|qlWGXUl@ z5lO9^0WixXLC(1u0J9<|t+DVJ7|~=xETPmkQSvXw*h>FOhe+3r;yN0GFjnR0O$b*q=d8|i-hCLY`sOs_y-pWLoSKcrV%wbx(7)Q^!e`OoS-&m-0($W66x0&btN;K207*qoM6N<$f|cf^-~a#s literal 0 HcmV?d00001 diff --git a/resources/bitmaps_png/png/cursor_shape_16.png b/resources/bitmaps_png/png/cursor_shape_16.png index 1ae0d504b58045f41a55592a19bdaf52a3d85c66..95206b80d8659a3e8f1a3172bc9319c5b4686742 100644 GIT binary patch delta 225 zcmV<703QFB0{sDyB!9$7L_t(I%VYTZ^(zAV3pww}OU#j7-3)u!pH6ETN)p+DT zK0^o?aC8;O0O`iVp+p-1arTkf5Y0y)gI&;g2Cu8jt*!YB=mdrU6G+feestJRC}rv!xo2%!X(_`WWnj#v{i-eCej6Mc4vqIxwzR z!Ep1ky$7J0z}PyY732jlTe`sO=muJ6wEmZBIE-$|7pnOnBqZd&T}sV= z>4rm;`v6;!m?UlGWONIl_#V(A6{?g)I4l6+=YfHN`n0g%DG-BvRtEG%2-PeI4i3Hp zW&fmF96&Aj2Xtu>FgSETY^Wv8RI>o+@(d))_QJxSCKXOlP>>_g@E;(HaH#Kt7OeJkloLeB?if zrileojYob0@qZ9aD+~U^@X)XT6xKk)ej^)<1^>nyC%{y33zRajVZ~-l1FbV!|4TI- zMiB$4!(qlo67t_JrRKkM!y)2)Kx!O-ECAuq(9lgl%#n~8bEPVD3!wNO&>|J8 zSc1a>5PlvQ7^qJR3!VZo$Y*6hUxZN2g5cobJ5csds>J~a09^@+*dkzX=l~7>2eqV` zY8FhGFyTLvZ}!5%pPCiUeHc3^D990L_z#dpxYPpxcqSL~nh=)f00000NkvXXu0mjf Dzd>w5 diff --git a/resources/bitmaps_png/png/cursor_shape_32.png b/resources/bitmaps_png/png/cursor_shape_32.png index 9f142f53fcda202e5dcec17387ad495c29a1fe97..2b7ef5a0715084a0f179ef906e84bfaf22d82838 100644 GIT binary patch delta 419 zcmV;U0bKs^1HA)~B!7fSL_t(o!(;gR^((_bVun!%j5=V{0izC}M6*o8VF#(kBMYP( zj}$UA{AZ%810))bD*!G33B>EHXW;qnEpsNF<8xMz~I^gK4;q3tN z=7WlojYoq)7DMo%J~Rg$L&yOg*L295Y7T&=_Md2RP7q5s9DnJjiUXt?j?BkpiFHQn zf2oGUxE%3?Dh>c;F#B8Yr^3ydNqB-C{&;getA|j*)%mGk*59kmT znmRzL;g}U32Y-O@^T5DBeVW#WpnQ(U0U-Py7!o!#Z4VG|00@5#4i5GjNC$iYI^cd# zP>?mf9Z;5*mc~l+CK-~2Z-Mv{j1TnnH3kL-MtV8mB`C!MEe${`6FlhQfG0qUH9+i! zh6W}e`wo&Lw$a=HKns delta 445 zcmV;u0Yd)01MvfpB!9R`L_t(o!((8e5bWH!^Tw`SyQ~=o3IHAOf5(m;VWSQhb-<_t zMy3N~8V);zPCM}5Ytq4m3=RL8=xVt{!*K8Lj`N8V+NXQ*1u+pMcqS89Bb|4psWT;Y!H0p7|a16?2=gWU8a8DT9~|a z4uIkVp`oGtbj^ln4)_mrz~zXD2&n;c02JQ?Iz)x04v=a%W`)NA zApATqFi@Yip#aS1cpL!2?|~s7YBrghkpR2 zc%Y>LXk~&2%^eUQAOC;ya|f(my&9!e4D@wAk^?@`qgj3r nxmJsfjpYV9;sVqG1lt1u7k(}_7&p~c00000NkvXXu0mjfhyK5k diff --git a/resources/bitmaps_png/png/cursor_shape_48.png b/resources/bitmaps_png/png/cursor_shape_48.png index dec8d9d7b9166ba305c1e86142fec410e623a54f..73039d8d22d868dfdf695b6276c48f91320581b2 100644 GIT binary patch delta 465 zcmV;?0WSWI1nUEkB!99=L_t(&-tF1HOT$1E2k;0Y{sAsV-E?vgTq_b$7YCtjg6U)^ z4o*49mmPL!1CG%j?@}qIN~&AvT>x(*TU;dH25W+icc>ETEl7 zfJ|}*U|x#F;(rWh0OlR;#2jY;CN7uDD`Yn`1^~2f?FH{52!dgbfKRvsPjGAiqQ(VqTB%egsS8mNbA5HZM4^-vM`*0W?^>p@E*Cg+V_jQz?8dbo(9u2P>5UpOs2Z00000NkvXX Hu0mjf4!Xuh delta 500 zcmVjhJvCsD~g%VClqLFuS2Vat2OSn(- za+i=;EaGZ( z2IJ*39v89SX@9gIK*{IxSH)sclV%<80^HmnBq1|^a-UA8CuIgup72ae%M75rWwY5u zwhuHu0F-w`lvqAe`UFtAn00nHdjSBw?65i$Apn5obg1k4fV2R2!8mIZKN7{)N0vIzlrU{NkU05nxvm{&o~o7@3itZnU8>cj26=q?q%in9dZ;Gln{ z#r-7qe|Qm@OlFoHpin44tyTj8>_l)a9I*q`>viG#0Xz%y0>Cpnzz;7t;#gXj9zdHT qph*#Zhc!QigTCucrT94&^!T5_cSqdZzl9wD0000FoGNcYcJPaIye_jfk6G0DNl^vWqd+{I$11Gv91#uU>%&UrjQBz9@C9f2QxaQ0*Etfo2r}7Ahwfv$VA75$+f}*#77>rL9y@aivJU4+!P)_ z)r}$7;+-^eIQ%C7bDRgD>ehb20jvrSAg&u(0w4eaAOHf0BEW``>Gt3AJTx>5g}UY? ze;PEap2srlDt~-_uTrV33>|>e-o9I+xMhlQFLANj8X5pRBk+gKHm7)Js4#OlGyu4& z^Hao*fnn_b{UW>w4FLR0?rXRJC_IzN*t-s&g0ng82jF{X0B`~07XY)n|Ad`5`=C*P znNWQRE`0O*1HkM#bll!}X6m1hkLi{cDgfNfz)cNjbAO{@08CHcfW7(j!?t`}ur+T_mp!;${Y}=Ys$^c?=Nk(Y!jWC@Yo$05b~+ zn`8#Syat4=G6P^f0z$WJ0AC=_Ay1(AhwyV87Ex^?1KiE!a$B%S##l?VZ;|l_@U4+E z9A$tx&TA)y2EYaf+FgwU@TycQtrivF&SHxTkA0tV)&sr50YFg`^=B5IJHqP#MFY6@ z_X-b&LMuG~fwLCq76Jgy{AGOX_8xfc9A_9@7Xjcr?>*^sIsxzb>4ET8ihG5j&>LQ} zffN9^$bn*ixBy&|=5BGE_V7AEUGcXHg+k!_ihluB5qgIPc@MJy0000XuhSVX5g@GbyOxD&CLz`=(ci8{=e+@o|9aQ+scSDKU|iMy_RVm@0b{Bkr)X!ec-x z!0`B*Y&@S{Pk#8sy?O}y`cL>$7=D6y0d|%@RW`g#Bg3~4E1B43@Q)&X5 zSl&kkPyti`6@Nel81dMYm~AMm^H9+I4qBFZ^<_}VDUM~t%kcS~mQ-qWt(Ld1mI+rS z_^jhXuC8{{!xe!OoBKE6<*C95ebs13@%jAEVq2;e?CP|H*wxclY=kOiTR*Soob$ji z3Yga$9vMt#D-Qv|y=lNf<4UUm2?Ca635q*JvB`n3-^&OXB0<1K;4{Z@s+%Km m*~8}qCE+K7!JzJa#lHZ^H~(sHFS9ZE>&z`uh;hW P00000NkvXXu0mjfr>tWK delta 259 zcmV+e0sQ`i0-pkqB!A{fL_t(I%VS_50Q&p;r!i0hfCj7_!UnkPe#c)rZ{q>74RG4= zdKM7>ciHjAg**dxzF7q_z-jxdP?DSt)HEBa`7zjl9dC|-_|Ds37h!0aFk!-UU_h;c z;nKP54nQS@d*&`bNrs>raQFZH%Xg37KYw3p4I#=sZ$TR;E+002ov JPDHLkV1nz@d?x?^ diff --git a/resources/bitmaps_png/png/cursor_shape_dark_24.png b/resources/bitmaps_png/png/cursor_shape_dark_24.png index 69993c628eed3801151400f886bca688fb1fc3e5..26b7489645dc232f4faab1420191eb6ca8c3f06c 100644 GIT binary patch delta 265 zcmV+k0rvjB0;2+uBYyzuNkl9e@1a8Pk$4RP({T%Xj}TJ^ARr z%Z^u+`v6-UfGmLGO^=T~=A?QgBUu2%cMjY=bC;j0`2f`dFn_-M=*A-{s^w%X7J%@* zJ6G?hP^B!wVF3s~zjx)HKJ_iQbm!^)%Xi!EU%69u@9Mn}s#yRu^bVB$lWK7Qwcy{~ zOLvRzT)d+LVncj!ubFBV09~E|XJ5Lz7Z(0Bsc;@#x#I{l{0GP)TxtN^K^V;LOt!HA P0000O|Nl`7MlB#8IPZMb=CbX@ ze-KR*3!HYm{t3kYK{Tx__z%NF!vauP0}cC)Y%mu58*iKdQ^hS%%D{$Qw>`%&aMtn1 z|DDmqK{=4jWMVt>vjRTMcP`v5!v46*$RF7mN3xN2}fxBn! z@>4Y*pjrUNmml4DBt^AUg~b98zIW&99Tlorg2Mt3etz%DJ$>q1aOuv|`|0#DEwO17g5m9?r^MT9VxzN%dBXMVb@}NXylcjN-iqp?{4OgaRblUu23?N%8iC z0y46@%mOm1zyH4hb82l=QkZz<+1RF=#L-bQ!h+!WfmC%5X0M7>kt2IA4J3OmzTYs+MU@a{U|PI`06$ zJVP0#xt<5Q05GqhL#~&Ax@Ce*Op+1`uuZb2X<9$`BNPJw c4qeX!9~$S2iT78+g8%>k07*qoM6N<$f(pyW#sB~S delta 481 zcmV<70UrL$1N#GzB!9w5L_t(o!|j&AOTthb$4%(ep>v%Ix_55{&MeAP6b4@EPbe>) z{R`Z@m8Uug8hMIz^VF%52Ikzt=)Em0P&cE9B09a^TS~KV3bhI4gAWXT@V=kD_kM44 zxqdhphACkvSFZ*RN0CTmwJ*>Y=nMQ$0bfSD+FqPj6hkudV(Qr?uGUny8JpmsV|$t5zXldM+LkYEnpV#^7Z|{Eilhl$7!y%Vgwu1A}s=3{p7Qz1?X&z`qk6^ z<-m0d(@h^=kzTf9J(+785<9&`vu$c~=?dyFHzWcS%d!D0f(QBCb^=NfqIj;1e4O^J zws>?`vYIypzYmY3cbgOraR#hAvEBK09q(qKavx#ieRZ_6=bkryMQdn zC>c+N$TNOpw_1dtDF7vywp}2$z0>knj0HAKtMFvI01j8oU$ttXI)sBSj1>@J$NzzM X+PLC+fQm`2^}Hh(k#)oE8nX5wN3#0Ef& z2_Q`&009U91dv(hWuN)=KJnMXN=txFB7Ct9?oi(YAPo=r7O2-My#m^Z{c5#3 zh!&6{d|nL0a2O-tMI}=4LXU5t0I1R4t=H=#wq*nHA86W?3j{!-Mtf6TU$cnNV=K@B zN$9h+v@Kverl(XX1CIodB!AXPL_t(&-tF1HOT$1E2k;6a{sB(TIt#A4SPK@N-Niq^#a$eo z%-|v}E^4uZ9Yots0T&S+G)cwMdr6HIp`}$6C$Z0arG*l%kSLKmxWJc&D}?(b?|y_N z5-}f!VH79{RS({Iq-cN!Xn+Q2fCgxQ255jn$8r`&lKIAV`hWZxDRfS4$^epuhQWh@ z7%Bmp0zgwG0E(gk8lVA^&GWodtwEiQkk-Gi69eY?zb5)R!I$}BZ@G_>g|k|yPVHSj z;e1E{T{B`o%-8|04S0CvW2#V(2M~7&5rC4re#CS!h7yW<5cdF-{7n^?igh^#aoB0J zAJC2MKltOytbYRn0L5h`HlZ?r^5Qz~l*$0gE0kbXWdP+9ELfEGg(d`m@&z`mO8H6| z5=Xu_!ihy?>pU3hn*iZt%@AhuF zTpp9AY<}?s>QaN1aj%b&Ph(l5Wz-HLL(!xDV z^7ii_qUx|Y=>T9c%pM)10Cp-E%qP+TG6xyq_W{0vO9{&8O*+7!4;)nQyu-HvfF&c~ rf+G5_dRLj|WmD@-rOaV7QLq04oRrN$;LBe300000NkvXXu0mjfZCd5` diff --git a/resources/bitmaps_png/png/cursor_shape_dark_64.png b/resources/bitmaps_png/png/cursor_shape_dark_64.png index f853164b0bc86ae715db6b54409d3ce42764290c..ade63e5f2b2d1ec30b149906f89a3199afbea75e 100644 GIT binary patch delta 793 zcmV+!1LpjS2d@T@BYy(+NklUJ!oz1^^ylyaGU`=H_Xi z)HFcOS2scH&hHTbBIGLcjHEYl3DgID1pt#7FsT8P8-HE^ATQrm=((9K5xzwQ^OA2H zA?tDw%mHX<8V1IB2LOniS3h5UzIeIOzHw3SOU$h74@D>F1Yl=LEviRD-3o630Qp4T zkrO-vK)w^1oaPw-vPuf%0?z=DHMO8#;TgaRDUzGPpB0vjdtL!-ga_Gdc2{s0Mg-%0 zD*zTkfqzVCnzkp90I(*=+UBRN0N4o66h+w=$hAS3%!p5~jJ5(`XHI#ebO&;Em{Pi9 z8vr0B)-WC9836K;HB3i%27oMAWTl5UfG;fbEP0j}EMp%^rLNEdupS_-6qLhIB-_6u z(67jNJOh3-bA*EouXRDnI#dJbwcFgxLK(TxWJ~!G%E0P;d0PMT*zyq-M^_JT< zN?tj@iv8_?P~+lVVNE8FoJIpK0N^2q75wX;kw7N5xp`Y0hCNs(*Z?R`*7B{tSNsR| X>JsL>`jlgM00000NkvXXu0mjff6ZST delta 884 zcmV-)1B?8x28sueBYy)?NklF|90&02A0$B?#9MTzbJSHRXx$~miYO8C z+9e1&MOc@xgVbqVFC}8wL2ca#Ac% zq82(VEo@`Hcwc0x5{l0LEPibS?KblOHKN{Bu=srZk<4zU0lb3NZ3f^K_2X>610+3c z1_1Yi1`fahIDY^K-~dh>2M6b?a`QYiG`T_xMby%!0HQu_bgWO*Z^GYhYzWg$<=Wn6 z%!?~oBGut^McEXOR|HNf@sEmMZJ1h0u^h$mZOyXOQgBsgrHGD+H1$~os2fPxIp-C~ zbp%M;Ego~R^G?wPVBu<<(4MESs9($$eY{`D*gbE}gMT|S;6(@$wv*-?T@S1RVEQL# zXsuM-@yG6|i#EJHJH$j1W!HBT}}AdqAeXtY!gxn1K&9;N(`U0ALmq#c3i{cy?FDc>UnA%zu%Rg!oaYSyFmg<}Gwjhd%$t;~RJ#q}J!A$FgFJ$C&n6O; z%mP3UFsQ_pJy;|hztPbRk;QkwC&yf2n*hru^ZzBL0kFY=w|c!HjyydVjYhYy3NWzR z;=*g$STV<7)vJ;B^Vt}yV_ + + + + + image/svg+xml + + cursor_shape + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cursor_shape + + + + + + + + diff --git a/resources/bitmaps_png/sources/dark/cursor_fullscreen45.svg b/resources/bitmaps_png/sources/dark/cursor_fullscreen45.svg new file mode 100644 index 0000000000..774ac201c6 --- /dev/null +++ b/resources/bitmaps_png/sources/dark/cursor_fullscreen45.svg @@ -0,0 +1,207 @@ + + + + + + image/svg+xml + + cursor_shape + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cursor_shape + + + + + + + + diff --git a/resources/bitmaps_png/sources/dark/cursor_shape.svg b/resources/bitmaps_png/sources/dark/cursor_shape.svg index 1fa92890ce..7b3227b57a 100644 --- a/resources/bitmaps_png/sources/dark/cursor_shape.svg +++ b/resources/bitmaps_png/sources/dark/cursor_shape.svg @@ -1,22 +1,22 @@ + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -60,16 +60,24 @@ id="namedview2367" showgrid="true" inkscape:zoom="45.254834" - inkscape:cx="10.543725" - inkscape:cy="13.371759" + inkscape:cx="10.551359" + inkscape:cy="13.368738" inkscape:window-x="1453" inkscape:window-y="97" inkscape:window-maximized="0" - inkscape:current-layer="Слой_1" - inkscape:document-rotation="0"> + inkscape:current-layer="g1564" + inkscape:document-rotation="0" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1"> + id="grid2947" + originx="0" + originy="0" + spacingy="1" + spacingx="1" + units="px" /> @@ -168,18 +176,7 @@ cursor_shape - - - + id="g1564" /> + + + + + image/svg+xml + + cursor_shape + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cursor_shape + + + + + + + + diff --git a/resources/bitmaps_png/sources/light/cursor_fullscreen45.svg b/resources/bitmaps_png/sources/light/cursor_fullscreen45.svg new file mode 100644 index 0000000000..c7c9bb1622 --- /dev/null +++ b/resources/bitmaps_png/sources/light/cursor_fullscreen45.svg @@ -0,0 +1,206 @@ + + + + + + image/svg+xml + + cursor_shape + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cursor_shape + + + + + + + + diff --git a/resources/bitmaps_png/sources/light/cursor_shape.svg b/resources/bitmaps_png/sources/light/cursor_shape.svg index 486697e651..825f8c887a 100644 --- a/resources/bitmaps_png/sources/light/cursor_shape.svg +++ b/resources/bitmaps_png/sources/light/cursor_shape.svg @@ -1,22 +1,22 @@ + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -60,16 +60,24 @@ id="namedview2367" showgrid="true" inkscape:zoom="45.254834" - inkscape:cx="10.543725" - inkscape:cy="13.371759" + inkscape:cx="10.551359" + inkscape:cy="13.368738" inkscape:window-x="1453" inkscape:window-y="97" inkscape:window-maximized="0" - inkscape:current-layer="Слой_1" - inkscape:document-rotation="0"> + inkscape:current-layer="g1564" + inkscape:document-rotation="0" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1"> + id="grid2947" + originx="0" + originy="0" + spacingy="1" + spacingx="1" + units="px" /> @@ -168,18 +176,7 @@ cursor_shape - - - + id="g1564" />