Split gerbview diff and xor into two separate view modes.

Fixes https://gitlab.com/kicad/code/kicad/issues/10122
This commit is contained in:
Jeff Young 2022-11-17 15:42:12 +00:00
parent cab5f65685
commit b09a106880
20 changed files with 335 additions and 64 deletions

View File

@ -303,6 +303,7 @@ void BuildBitmapInfo( std::unordered_map<BITMAPS, std::vector<BITMAP_INFO>>& aBi
aBitmapInfoCache[BITMAPS::find_replace].emplace_back( BITMAPS::find_replace, wxT( "find_replace_24.png" ), 24, wxT( "light" ) );
aBitmapInfoCache[BITMAPS::flag].emplace_back( BITMAPS::flag, wxT( "flag_24.png" ), 24, wxT( "light" ) );
aBitmapInfoCache[BITMAPS::flip_board].emplace_back( BITMAPS::flip_board, wxT( "flip_board_24.png" ), 24, wxT( "light" ) );
aBitmapInfoCache[BITMAPS::gbr_select_mode1].emplace_back( BITMAPS::gbr_select_mode1, wxT( "gbr_select_mode1_24.png" ), 24, wxT( "light" ) );
aBitmapInfoCache[BITMAPS::gbr_select_mode2].emplace_back( BITMAPS::gbr_select_mode2, wxT( "gbr_select_mode2_24.png" ), 24, wxT( "light" ) );
aBitmapInfoCache[BITMAPS::gerbview_show_negative_objects].emplace_back( BITMAPS::gerbview_show_negative_objects, wxT( "gerbview_show_negative_objects_24.png" ), 24, wxT( "light" ) );
aBitmapInfoCache[BITMAPS::general_deletions].emplace_back( BITMAPS::general_deletions, wxT( "general_deletions_24.png" ), 24, wxT( "light" ) );
@ -684,6 +685,7 @@ void BuildBitmapInfo( std::unordered_map<BITMAPS, std::vector<BITMAP_INFO>>& aBi
aBitmapInfoCache[BITMAPS::find_replace].emplace_back( BITMAPS::find_replace, wxT( "find_replace_dark_24.png" ), 24, wxT( "dark" ) );
aBitmapInfoCache[BITMAPS::flag].emplace_back( BITMAPS::flag, wxT( "flag_dark_24.png" ), 24, wxT( "dark" ) );
aBitmapInfoCache[BITMAPS::flip_board].emplace_back( BITMAPS::flip_board, wxT( "flip_board_dark_24.png" ), 24, wxT( "dark" ) );
aBitmapInfoCache[BITMAPS::gbr_select_mode1].emplace_back( BITMAPS::gbr_select_mode1, wxT( "gbr_select_mode1_dark_24.png" ), 24, wxT( "dark" ) );
aBitmapInfoCache[BITMAPS::gbr_select_mode2].emplace_back( BITMAPS::gbr_select_mode2, wxT( "gbr_select_mode2_dark_24.png" ), 24, wxT( "dark" ) );
aBitmapInfoCache[BITMAPS::gerbview_show_negative_objects].emplace_back( BITMAPS::gerbview_show_negative_objects, wxT( "gerbview_show_negative_objects_dark_24.png" ), 24, wxT( "dark" ) );
aBitmapInfoCache[BITMAPS::general_deletions].emplace_back( BITMAPS::general_deletions, wxT( "general_deletions_dark_24.png" ), 24, wxT( "dark" ) );

View File

@ -428,7 +428,7 @@ bool GERBVIEW_FRAME::unarchiveFiles( const wxString& aFullFileName, REPORTER* aR
// Extract the path of aFullFileName. We use it to store temporary files
wxFileName fn( aFullFileName );
wxString unzipDir = fn.GetPath();
wxString unzipDir = fn.GetPath();
wxFFileInputStream zipFile( aFullFileName );
@ -455,16 +455,17 @@ bool GERBVIEW_FRAME::unarchiveFiles( const wxString& aFullFileName, REPORTER* aR
wxString unzipped_tempfile = temp_fn.GetFullPath();
bool success = true;
bool success = true;
wxZipInputStream zipArchive( zipFile );
wxZipEntry* entry;
bool reported_no_more_layer = false;
wxZipEntry* entry;
bool reported_no_more_layer = false;
KIGFX::VIEW* view = GetCanvas()->GetView();
while( ( entry = zipArchive.GetNextEntry() ) )
{
wxString fname = entry->GetName();
wxString fname = entry->GetName();
wxFileName uzfn = fname;
wxString curr_ext = uzfn.GetExt().Lower();
wxString curr_ext = uzfn.GetExt().Lower();
// The archive contains Gerber and/or Excellon drill files. Use the right loader.
// However it can contain a few other files (reports, pdf files...),
@ -560,8 +561,10 @@ bool GERBVIEW_FRAME::unarchiveFiles( const wxString& aFullFileName, REPORTER* aR
read_ok = Read_GERBER_File( unzipped_tempfile );
if( read_ok )
GetCanvas()->GetView()->SetLayerHasNegatives(
GERBER_DRAW_LAYER( layer ), GetGbrImage( layer )->HasNegativeItems() );
{
view->SetLayerHasNegatives( GERBER_DRAW_LAYER( layer ),
GetGbrImage( layer )->HasNegativeItems() );
}
}
// Select the first added layer by default when done loading

View File

@ -41,6 +41,7 @@ public:
bool m_DisplayPageLimits;
bool m_IsPrinting; ///< true when printing a page, false when drawing on screen
bool m_DiffMode; ///< Display layers in diff mode
bool m_XORMode; ///< Display layers in exclusive-or mode
bool m_HighContrastMode; ///< High contrast mode (dim un-highlighted objects)
bool m_FlipGerberView; ///< Display as a mirror image
COLOR4D m_NegativeDrawColor; ///< The color used to draw negative objects, usually the
@ -57,6 +58,7 @@ public:
m_IsPrinting = false;
m_NegativeDrawColor = COLOR4D( DARKGRAY );
m_DiffMode = false;
m_XORMode = false;
m_HighContrastMode = false;
m_FlipGerberView = false;
}

View File

@ -559,7 +559,7 @@ void GERBVIEW_FRAME::RemapLayers( std::unordered_map<int, int> remapping )
}
void GERBVIEW_FRAME::UpdateDiffLayers()
void GERBVIEW_FRAME::UpdateXORLayers()
{
auto target = GetCanvas()->GetBackend() == GERBVIEW_DRAW_PANEL_GAL::GAL_TYPE_OPENGL
? KIGFX::TARGET_CACHED
@ -570,7 +570,7 @@ void GERBVIEW_FRAME::UpdateDiffLayers()
for( int i = 0; i < GERBER_DRAWLAYERS_COUNT; i++ )
{
view->SetLayerDiff( GERBER_DRAW_LAYER( i ), gvconfig()->m_Display.m_DiffMode );
view->SetLayerDiff( GERBER_DRAW_LAYER( i ), gvconfig()->m_Display.m_XORMode );
// Caching doesn't work with layered rendering of diff'd layers
if( gvconfig()->m_Display.m_DiffMode )
@ -799,8 +799,8 @@ void GERBVIEW_FRAME::SetActiveLayer( int aLayer, bool doLayerWidgetUpdate )
{
m_activeLayer = aLayer;
if( gvconfig()->m_Display.m_DiffMode )
UpdateDiffLayers();
if( gvconfig()->m_Display.m_XORMode )
UpdateXORLayers();
if( doLayerWidgetUpdate )
m_LayersManager->SelectLayer( aLayer );
@ -1079,6 +1079,12 @@ void GERBVIEW_FRAME::setupUIConditions()
return gvconfig()->m_Display.m_DiffMode;
};
auto xorModeCond =
[this] ( const SELECTION& )
{
return gvconfig()->m_Display.m_XORMode;
};
auto highContrastModeCond =
[this] ( const SELECTION& )
{
@ -1103,6 +1109,7 @@ void GERBVIEW_FRAME::setupUIConditions()
mgr->SetConditions( GERBVIEW_ACTIONS::negativeObjectDisplay, CHECK( negativeObjectsCond ) );
mgr->SetConditions( GERBVIEW_ACTIONS::dcodeDisplay, CHECK( dcodeCond ) );
mgr->SetConditions( GERBVIEW_ACTIONS::toggleDiffMode, CHECK( diffModeCond ) );
mgr->SetConditions( GERBVIEW_ACTIONS::toggleXORMode, CHECK( xorModeCond ) );
mgr->SetConditions( GERBVIEW_ACTIONS::flipGerberView, CHECK( flipGerberCond ) );
mgr->SetConditions( ACTIONS::highContrastMode, CHECK( highContrastModeCond ) );
mgr->SetConditions( GERBVIEW_ACTIONS::toggleLayerManager, CHECK( layersManagerShownCondition ) );
@ -1118,8 +1125,7 @@ void GERBVIEW_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars
SetPageSettings( PAGE_INFO( gvconfig()->m_Appearance.page_type ) );
if( gvconfig()->m_Display.m_DiffMode )
UpdateDiffLayers();
UpdateXORLayers();
SetElementVisibility( LAYER_DCODES, gvconfig()->m_Appearance.show_dcodes );

View File

@ -361,10 +361,10 @@ public:
void RemapLayers( std::unordered_map<int, int> remapping );
/**
* Update each layers' differential option. Needed when diff mode changes or the active layer
* changes (due to changing rendering order) which matters for diff mode but not otherwise.
* Update each layers' differential option. Needed when xor mode changes or the active layer
* changes (due to changing rendering order) which matters for xor mode but not otherwise.
*/
void UpdateDiffLayers();
void UpdateXORLayers();
/*
* Do nothing in GerbView.

View File

@ -60,10 +60,15 @@ void GERBVIEW_RENDER_SETTINGS::LoadColors( const COLOR_SETTINGS* aSettings )
for( int i = GERBVIEW_LAYER_ID_START;
i < GERBVIEW_LAYER_ID_START + GERBER_DRAWLAYERS_COUNT; i++ )
{
m_layerColors[i] = aSettings->GetColor( i );
m_layerColorsHi[i] = m_layerColors[i].Brightened( 0.5 );
m_layerColorsSel[i] = m_layerColors[i].Brightened( 0.8 );
m_layerColorsDark[i] = m_layerColors[i].Darkened( 0.25 );
COLOR4D baseColor = aSettings->GetColor( i );
if( gvconfig()->m_Display.m_DiffMode )
baseColor.a = 0.75;
m_layerColors[i] = baseColor;
m_layerColorsHi[i] = baseColor.Brightened( 0.5 );
m_layerColorsSel[i] = baseColor.Brightened( 0.8 );
m_layerColorsDark[i] = baseColor.Darkened( 0.25 );
}
// Draw layers specific to Gerbview:

View File

@ -200,6 +200,7 @@ void GERBVIEW_FRAME::ReCreateMenuBar()
viewMenu->Add( GERBVIEW_ACTIONS::dcodeDisplay, ACTION_MENU::CHECK );
viewMenu->Add( GERBVIEW_ACTIONS::negativeObjectDisplay, ACTION_MENU::CHECK );
viewMenu->Add( GERBVIEW_ACTIONS::toggleDiffMode, ACTION_MENU::CHECK );
viewMenu->Add( GERBVIEW_ACTIONS::toggleXORMode, ACTION_MENU::CHECK );
viewMenu->Add( ACTIONS::highContrastMode, ACTION_MENU::CHECK );
viewMenu->Add( GERBVIEW_ACTIONS::flipGerberView, ACTION_MENU::CHECK );

View File

@ -255,7 +255,9 @@ void GERBVIEW_FRAME::ReCreateOptToolbar()
m_optionsToolBar->Add( GERBVIEW_ACTIONS::polygonsDisplayOutlines, ACTION_TOOLBAR::TOGGLE );
m_optionsToolBar->Add( GERBVIEW_ACTIONS::negativeObjectDisplay, ACTION_TOOLBAR::TOGGLE );
m_optionsToolBar->Add( GERBVIEW_ACTIONS::dcodeDisplay, ACTION_TOOLBAR::TOGGLE );
m_optionsToolBar->AddScaledSeparator( this );
m_optionsToolBar->Add( GERBVIEW_ACTIONS::toggleDiffMode, ACTION_TOOLBAR::TOGGLE );
m_optionsToolBar->Add( GERBVIEW_ACTIONS::toggleXORMode, ACTION_TOOLBAR::TOGGLE );
m_optionsToolBar->Add( ACTIONS::highContrastMode, ACTION_TOOLBAR::TOGGLE );
m_optionsToolBar->Add( GERBVIEW_ACTIONS::flipGerberView, ACTION_TOOLBAR::TOGGLE );

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 Jon Evans <jon@craftyjon.com>
* Copyright (C) 2017-2019 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2022 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@ -188,7 +188,12 @@ TOOL_ACTION GERBVIEW_ACTIONS::dcodeDisplay( "gerbview.Control.dcodeDisplay",
TOOL_ACTION GERBVIEW_ACTIONS::toggleDiffMode( "gerbview.Control.toggleDiffMode",
AS_GLOBAL, 0, "",
_( "Show in Differential Mode" ), _( "Show layers in diff (compare) mode" ),
_( "Show in Differential Mode" ), _( "Show layers in differential compare mode" ),
BITMAPS::gbr_select_mode1 );
TOOL_ACTION GERBVIEW_ACTIONS::toggleXORMode( "gerbview.Control.toggleXORMode",
AS_GLOBAL, 0, "",
_( "Show in XOR Mode" ), _( "Show layers in exclusive-or compare mode" ),
BITMAPS::gbr_select_mode2 );
TOOL_ACTION GERBVIEW_ACTIONS::flipGerberView( "gerbview.Control.flipGerberView",

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 Jon Evans <jon@craftyjon.com>
* Copyright (C) 2017-2021 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2022 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@ -64,6 +64,7 @@ public:
static TOOL_ACTION negativeObjectDisplay;
static TOOL_ACTION dcodeDisplay;
static TOOL_ACTION toggleDiffMode;
static TOOL_ACTION toggleXORMode;
static TOOL_ACTION flipGerberView;
// Layer control

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 Jon Evans <jon@craftyjon.com>
* Copyright (C) 2017-2021 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2022 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@ -307,7 +307,21 @@ int GERBVIEW_CONTROL::DisplayControl( const TOOL_EVENT& aEvent )
else if( aEvent.IsAction( &GERBVIEW_ACTIONS::toggleDiffMode ) )
{
cfg->m_Display.m_DiffMode = !cfg->m_Display.m_DiffMode;
m_frame->UpdateDiffLayers();
if( cfg->m_Display.m_DiffMode && cfg->m_Display.m_XORMode )
{
cfg->m_Display.m_XORMode = false;
m_frame->UpdateXORLayers();
}
}
else if( aEvent.IsAction( &GERBVIEW_ACTIONS::toggleXORMode ) )
{
cfg->m_Display.m_XORMode = !cfg->m_Display.m_XORMode;
if( cfg->m_Display.m_XORMode && cfg->m_Display.m_DiffMode )
cfg->m_Display.m_DiffMode = false;
m_frame->UpdateXORLayers();
}
else if( aEvent.IsAction( &GERBVIEW_ACTIONS::flipGerberView ) )
{
@ -533,6 +547,7 @@ void GERBVIEW_CONTROL::setTransitions()
Go( &GERBVIEW_CONTROL::DisplayControl, ACTIONS::highContrastMode.MakeEvent() );
Go( &GERBVIEW_CONTROL::DisplayControl, ACTIONS::highContrastModeCycle.MakeEvent() );
Go( &GERBVIEW_CONTROL::DisplayControl, GERBVIEW_ACTIONS::toggleDiffMode.MakeEvent() );
Go( &GERBVIEW_CONTROL::DisplayControl, GERBVIEW_ACTIONS::toggleXORMode.MakeEvent() );
Go( &GERBVIEW_CONTROL::DisplayControl, GERBVIEW_ACTIONS::flipGerberView.MakeEvent() );
Go( &GERBVIEW_CONTROL::UpdateMessagePanel, EVENTS::SelectedEvent );

View File

@ -280,6 +280,7 @@ set( BMAPS_MID
find_replace
flag
flip_board
gbr_select_mode1
gbr_select_mode2
gerbview_show_negative_objects
general_deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 603 B

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 604 B

After

Width:  |  Height:  |  Size: 593 B

View File

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="24"
width="24"
version="1.1"
id="svg2"
inkscape:version="1.2.1 (9c6d41e, 2022-07-14)"
sodipodi:docname="gbr_select_mode1.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
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/">
<metadata
id="metadata40">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:prohibits
rdf:resource="http://creativecommons.org/ns#CommercialUse" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1309"
inkscape:window-height="861"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="16.236259"
inkscape:cx="18.877501"
inkscape:cy="19.123863"
inkscape:window-x="0"
inkscape:window-y="38"
inkscape:window-maximized="0"
inkscape:current-layer="svg2"
inkscape:document-rotation="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid3017"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
</sodipodi:namedview>
<defs
id="defs4" />
<g
transform="matrix(1.6382539,0,0,1.5572263,-0.2427793,0.36314149)"
id="g16"
style="opacity:1">
<rect
height="16"
width="16"
y="0"
x="0"
id="rect18"
style="fill-opacity:0" />
</g>
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3831"
d="m 23.5,-0.5 h 5 v 22 h -28 z"
style="fill:#42B8EB;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="mix-blend-mode:exclusion;fill:#f2647e;fill-opacity:0.71;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 15.5,-0.5 h 13 v 13 h -28 z"
id="rect3828"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="24"
width="24"
version="1.1"
id="svg2"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="gbr_select_mode2.svg">
inkscape:version="1.2.1 (9c6d41e, 2022-07-14)"
sodipodi:docname="gbr_select_mode2.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
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/">
<metadata
id="metadata40">
<rdf:RDF>
@ -21,7 +21,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
@ -53,20 +53,23 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="2099"
inkscape:window-width="1510"
inkscape:window-height="750"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="16.236259"
inkscape:cx="18.442399"
inkscape:cy="18.96033"
inkscape:cx="22.66532"
inkscape:cy="15.397636"
inkscape:window-x="0"
inkscape:window-y="37"
inkscape:window-maximized="1"
inkscape:window-y="38"
inkscape:window-maximized="0"
inkscape:current-layer="svg2"
inkscape:document-rotation="0">
inkscape:document-rotation="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid3017"
@ -98,9 +101,9 @@
inkscape:connector-curvature="0"
id="path3831"
d="m 23.5,-0.5 h 5 v 22 h -28 z"
style="fill:#42B8EB;fill-opacity:1;stroke:#DED3DD;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:#42B8EB;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:#f2647e;fill-opacity:0.70999998;stroke:#DED3DD;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:#f2647e;fill-opacity:0.70999998;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 15.5,-0.5 h 13 v 13 h -28 z"
id="rect3828"
inkscape:connector-curvature="0"

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="24"
width="24"
version="1.1"
id="svg2"
inkscape:version="1.2.1 (9c6d41e, 2022-07-14)"
sodipodi:docname="gbr_select_mode1.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
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/">
<metadata
id="metadata40">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:prohibits
rdf:resource="http://creativecommons.org/ns#CommercialUse" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1309"
inkscape:window-height="938"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="16.236259"
inkscape:cx="17.892053"
inkscape:cy="19.647383"
inkscape:window-x="0"
inkscape:window-y="38"
inkscape:window-maximized="0"
inkscape:current-layer="svg2"
inkscape:document-rotation="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid3017"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
</sodipodi:namedview>
<defs
id="defs4" />
<g
transform="matrix(1.6382539,0,0,1.5572263,-0.2427793,0.36314149)"
id="g16"
style="opacity:1">
<rect
height="16"
width="16"
y="0"
x="0"
id="rect18"
style="fill-opacity:0" />
</g>
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3831"
d="m 23.5,-0.5 h 5 v 22 h -28 z"
style="mix-blend-mode:multiply;fill:#1a81c4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="mix-blend-mode:exclusion;fill:#bf2641;fill-opacity:0.71;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 15.5,-0.5 h 13 v 13 h -28 z"
id="rect3828"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="24"
width="24"
version="1.1"
id="svg2"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="gbr_select_mode2.svg">
inkscape:version="1.2.1 (9c6d41e, 2022-07-14)"
sodipodi:docname="gbr_select_mode2.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
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/">
<metadata
id="metadata40">
<rdf:RDF>
@ -21,7 +21,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
@ -53,20 +53,23 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="2099"
inkscape:window-width="1309"
inkscape:window-height="866"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="16.236259"
inkscape:cx="18.442399"
inkscape:cy="18.96033"
inkscape:cx="12.164132"
inkscape:cy="-2.0324879"
inkscape:window-x="0"
inkscape:window-y="37"
inkscape:window-maximized="1"
inkscape:window-y="38"
inkscape:window-maximized="0"
inkscape:current-layer="svg2"
inkscape:document-rotation="0">
inkscape:document-rotation="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid3017"
@ -98,9 +101,9 @@
inkscape:connector-curvature="0"
id="path3831"
d="m 23.5,-0.5 h 5 v 22 h -28 z"
style="fill:#1a81c4;fill-opacity:1;stroke:#545454;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:#1a81c4;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:#bf2641;fill-opacity:0.70999998;stroke:#545454;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:#bf2641;fill-opacity:0.70999998;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 15.5,-0.5 h 13 v 13 h -28 z"
id="rect3828"
inkscape:connector-curvature="0"

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB