Separate out axes definitions between ModEdit and PCBNew.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/5711
This commit is contained in:
Jeff Young 2023-10-25 13:59:12 +01:00
parent 881cf9dfcf
commit fc4bc10d27
10 changed files with 133 additions and 44 deletions

View File

@ -41,7 +41,9 @@ PANEL_GRID_SETTINGS::PANEL_GRID_SETTINGS( wxWindow* aParent, UNITS_PROVIDER* aUn
wxWindow* aEventSource, APP_SETTINGS_BASE* aCfg, wxWindow* aEventSource, APP_SETTINGS_BASE* aCfg,
FRAME_T aFrameType ) : FRAME_T aFrameType ) :
PANEL_GRID_SETTINGS_BASE( aParent ), PANEL_GRID_SETTINGS_BASE( aParent ),
m_unitsProvider( aUnitsProvider ), m_cfg( aCfg ), m_frameType( aFrameType ), m_unitsProvider( aUnitsProvider ),
m_cfg( aCfg ),
m_frameType( aFrameType ),
m_eventSource( aEventSource ) m_eventSource( aEventSource )
{ {
RebuildGridSizes(); RebuildGridSizes();

View File

@ -1140,6 +1140,7 @@ if( ADVANCED_CFG::GetCfg().m_EnableGit && false )
book->AddPage( new wxPanel( book ), _( "Footprint Editor" ) ); book->AddPage( new wxPanel( book ), _( "Footprint Editor" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_FP_DISPLAY_OPTIONS ), _( "Display Options" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_FP_DISPLAY_OPTIONS ), _( "Display Options" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_FP_GRIDS ), _( "Grids" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_FP_GRIDS ), _( "Grids" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_FP_ORIGINS_AXES ), _( "Origins & Axes" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_FP_EDIT_OPTIONS ), _( "Editing Options" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_FP_EDIT_OPTIONS ), _( "Editing Options" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_FP_COLORS ), _( "Colors" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_FP_COLORS ), _( "Colors" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_FP_DEFAULT_VALUES ), _( "Default Values" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_FP_DEFAULT_VALUES ), _( "Default Values" ) );
@ -1150,10 +1151,10 @@ if( ADVANCED_CFG::GetCfg().m_EnableGit && false )
book->AddPage( new wxPanel( book ), _( "PCB Editor" ) ); book->AddPage( new wxPanel( book ), _( "PCB Editor" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_DISPLAY_OPTS ), _( "Display Options" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_DISPLAY_OPTS ), _( "Display Options" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_GRIDS ), _( "Grids" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_GRIDS ), _( "Grids" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_ORIGINS_AXES ), _( "Origins & Axes" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_EDIT_OPTIONS ), _( "Editing Options" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_EDIT_OPTIONS ), _( "Editing Options" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_COLORS ), _( "Colors" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_COLORS ), _( "Colors" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_ACTION_PLUGINS ), _( "Action Plugins" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_ACTION_PLUGINS ), _( "Action Plugins" ) );
book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_ORIGINS_AXES ), _( "Origins & Axes" ) );
if( GetFrameType() == FRAME_PCB_DISPLAY3D ) if( GetFrameType() == FRAME_PCB_DISPLAY3D )
expand.push_back( (int) book->GetPageCount() ); expand.push_back( (int) book->GetPageCount() );

View File

@ -69,6 +69,8 @@ public:
USER_GRID m_UserGrid; USER_GRID m_UserGrid;
bool m_PolarCoords; bool m_PolarCoords;
bool m_DisplayInvertXAxis;
bool m_DisplayInvertYAxis;
EDA_ANGLE m_RotationAngle; EDA_ANGLE m_RotationAngle;

View File

@ -86,6 +86,7 @@ enum FRAME_T
PANEL_FP_EDIT_OPTIONS, PANEL_FP_EDIT_OPTIONS,
PANEL_FP_COLORS, PANEL_FP_COLORS,
PANEL_FP_DEFAULT_VALUES, PANEL_FP_DEFAULT_VALUES,
PANEL_FP_ORIGINS_AXES,
PANEL_PCB_DISPLAY_OPTS, PANEL_PCB_DISPLAY_OPTS,
PANEL_PCB_GRIDS, PANEL_PCB_GRIDS,

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com * Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -25,37 +25,52 @@
#include <pgm_base.h> #include <pgm_base.h>
#include <settings/settings_manager.h> #include <settings/settings_manager.h>
#include <pcbnew_settings.h> #include <pcbnew_settings.h>
#include <footprint_editor_settings.h>
#include <panel_pcbnew_display_origin.h> #include <panel_pcbnew_display_origin.h>
PANEL_PCBNEW_DISPLAY_ORIGIN::PANEL_PCBNEW_DISPLAY_ORIGIN( wxWindow* aParent ) : PANEL_PCBNEW_DISPLAY_ORIGIN::PANEL_PCBNEW_DISPLAY_ORIGIN( wxWindow* aParent,
PANEL_PCBNEW_DISPLAY_ORIGIN_BASE( aParent ) APP_SETTINGS_BASE* aCfg,
FRAME_T aFrameType ) :
PANEL_PCBNEW_DISPLAY_ORIGIN_BASE( aParent ),
m_cfg( aCfg ),
m_frameType( aFrameType )
{ {
m_DisplayOrigin->Show( m_frameType == FRAME_PCB_EDITOR );
} }
void PANEL_PCBNEW_DISPLAY_ORIGIN::loadPCBSettings( PCBNEW_SETTINGS* aCfg ) void PANEL_PCBNEW_DISPLAY_ORIGIN::loadSettings( APP_SETTINGS_BASE* aCfg )
{ {
int origin = 0; if( m_frameType == FRAME_FOOTPRINT_EDITOR )
switch( aCfg->m_Display.m_DisplayOrigin )
{ {
case PCB_DISPLAY_ORIGIN::PCB_ORIGIN_PAGE: origin = 0; break; FOOTPRINT_EDITOR_SETTINGS* cfg = static_cast<FOOTPRINT_EDITOR_SETTINGS*>( aCfg );
case PCB_DISPLAY_ORIGIN::PCB_ORIGIN_AUX: origin = 1; break;
case PCB_DISPLAY_ORIGIN::PCB_ORIGIN_GRID: origin = 2; break;
}
m_DisplayOrigin->SetSelection( origin ); m_XAxisDirection->SetSelection( cfg->m_DisplayInvertXAxis ? 1 : 0 );
m_XAxisDirection->SetSelection( aCfg->m_Display.m_DisplayInvertXAxis ? 1 : 0 ); m_YAxisDirection->SetSelection( cfg->m_DisplayInvertYAxis ? 0 : 1 );
m_YAxisDirection->SetSelection( aCfg->m_Display.m_DisplayInvertYAxis ? 0 : 1 ); }
else
{
PCBNEW_SETTINGS* cfg = static_cast<PCBNEW_SETTINGS*>( aCfg );
int origin = 0;
switch( cfg->m_Display.m_DisplayOrigin )
{
case PCB_DISPLAY_ORIGIN::PCB_ORIGIN_PAGE: origin = 0; break;
case PCB_DISPLAY_ORIGIN::PCB_ORIGIN_AUX: origin = 1; break;
case PCB_DISPLAY_ORIGIN::PCB_ORIGIN_GRID: origin = 2; break;
}
m_DisplayOrigin->SetSelection( origin );
m_XAxisDirection->SetSelection( cfg->m_Display.m_DisplayInvertXAxis ? 1 : 0 );
m_YAxisDirection->SetSelection( cfg->m_Display.m_DisplayInvertYAxis ? 0 : 1 );
}
} }
bool PANEL_PCBNEW_DISPLAY_ORIGIN::TransferDataToWindow() bool PANEL_PCBNEW_DISPLAY_ORIGIN::TransferDataToWindow()
{ {
PCBNEW_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>(); loadSettings( m_cfg );
loadPCBSettings( cfg );
return true; return true;
} }
@ -63,17 +78,27 @@ bool PANEL_PCBNEW_DISPLAY_ORIGIN::TransferDataToWindow()
bool PANEL_PCBNEW_DISPLAY_ORIGIN::TransferDataFromWindow() bool PANEL_PCBNEW_DISPLAY_ORIGIN::TransferDataFromWindow()
{ {
PCBNEW_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>(); if( m_frameType == FRAME_FOOTPRINT_EDITOR )
switch( m_DisplayOrigin->GetSelection() )
{ {
case 0: cfg->m_Display.m_DisplayOrigin = PCB_DISPLAY_ORIGIN::PCB_ORIGIN_PAGE; break; FOOTPRINT_EDITOR_SETTINGS* cfg = static_cast<FOOTPRINT_EDITOR_SETTINGS*>( m_cfg );
case 1: cfg->m_Display.m_DisplayOrigin = PCB_DISPLAY_ORIGIN::PCB_ORIGIN_AUX; break;
case 2: cfg->m_Display.m_DisplayOrigin = PCB_DISPLAY_ORIGIN::PCB_ORIGIN_GRID; break;
}
cfg->m_Display.m_DisplayInvertXAxis = m_XAxisDirection->GetSelection() != 0; cfg->m_DisplayInvertXAxis = m_XAxisDirection->GetSelection() != 0;
cfg->m_Display.m_DisplayInvertYAxis = m_YAxisDirection->GetSelection() == 0; cfg->m_DisplayInvertYAxis = m_YAxisDirection->GetSelection() == 0;
}
else
{
PCBNEW_SETTINGS* cfg = static_cast<PCBNEW_SETTINGS*>( m_cfg );
switch( m_DisplayOrigin->GetSelection() )
{
case 0: cfg->m_Display.m_DisplayOrigin = PCB_DISPLAY_ORIGIN::PCB_ORIGIN_PAGE; break;
case 1: cfg->m_Display.m_DisplayOrigin = PCB_DISPLAY_ORIGIN::PCB_ORIGIN_AUX; break;
case 2: cfg->m_Display.m_DisplayOrigin = PCB_DISPLAY_ORIGIN::PCB_ORIGIN_GRID; break;
}
cfg->m_Display.m_DisplayInvertXAxis = m_XAxisDirection->GetSelection() != 0;
cfg->m_Display.m_DisplayInvertYAxis = m_YAxisDirection->GetSelection() == 0;
}
return true; return true;
} }
@ -81,10 +106,20 @@ bool PANEL_PCBNEW_DISPLAY_ORIGIN::TransferDataFromWindow()
void PANEL_PCBNEW_DISPLAY_ORIGIN::ResetPanel() void PANEL_PCBNEW_DISPLAY_ORIGIN::ResetPanel()
{ {
PCBNEW_SETTINGS cfg; if( m_frameType == FRAME_FOOTPRINT_EDITOR )
cfg.Load(); // Loading without a file will init to defaults {
FOOTPRINT_EDITOR_SETTINGS cfg;
cfg.Load(); // Loading without a file will init to defaults
loadPCBSettings( &cfg ); loadSettings( &cfg );
}
else
{
PCBNEW_SETTINGS cfg;
cfg.Load(); // Loading without a file will init to defaults
loadSettings( &cfg );
}
} }

View File

@ -25,13 +25,14 @@
#ifndef PANEL_PCBNEW_DISPLAY_ORIGIN_H #ifndef PANEL_PCBNEW_DISPLAY_ORIGIN_H
#define PANEL_PCBNEW_DISPLAY_ORIGIN_H 1 #define PANEL_PCBNEW_DISPLAY_ORIGIN_H 1
#include <frame_type.h>
#include "panel_pcbnew_display_origin_base.h" #include "panel_pcbnew_display_origin_base.h"
class PANEL_PCBNEW_DISPLAY_ORIGIN : public PANEL_PCBNEW_DISPLAY_ORIGIN_BASE class PANEL_PCBNEW_DISPLAY_ORIGIN : public PANEL_PCBNEW_DISPLAY_ORIGIN_BASE
{ {
public: public:
PANEL_PCBNEW_DISPLAY_ORIGIN( wxWindow* aParent ); PANEL_PCBNEW_DISPLAY_ORIGIN( wxWindow* aParent, APP_SETTINGS_BASE* aCfg, FRAME_T aFrameType );
bool TransferDataToWindow() override; bool TransferDataToWindow() override;
bool TransferDataFromWindow() override; bool TransferDataFromWindow() override;
@ -39,7 +40,11 @@ public:
void ResetPanel() override; void ResetPanel() override;
private: private:
void loadPCBSettings( PCBNEW_SETTINGS* aCfg ); void loadSettings( APP_SETTINGS_BASE* aCfg );
private:
APP_SETTINGS_BASE* m_cfg;
FRAME_T m_frameType;
}; };

View File

@ -43,6 +43,8 @@ FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS() :
m_Display(), m_Display(),
m_UserGrid(), m_UserGrid(),
m_PolarCoords( false ), m_PolarCoords( false ),
m_DisplayInvertXAxis( false ),
m_DisplayInvertYAxis( false ),
m_RotationAngle( ANGLE_90 ), m_RotationAngle( ANGLE_90 ),
m_Use45Limit( true ), m_Use45Limit( true ),
m_ArcEditMode( ARC_EDIT_MODE::KEEP_CENTER_ADJUST_ANGLE_RADIUS ), m_ArcEditMode( ARC_EDIT_MODE::KEEP_CENTER_ADJUST_ANGLE_RADIUS ),
@ -102,6 +104,12 @@ FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS() :
m_params.emplace_back( new PARAM<bool>( "editing.polar_coords", m_params.emplace_back( new PARAM<bool>( "editing.polar_coords",
&m_PolarCoords, false ) ); &m_PolarCoords, false ) );
m_params.emplace_back( new PARAM<bool>( "origin_invert_x_axis",
&m_DisplayInvertXAxis, false ) );
m_params.emplace_back( new PARAM<bool>( "origin_invert_y_axis",
&m_DisplayInvertYAxis, false ) );
m_params.emplace_back( new PARAM_LAMBDA<int>( "editing.rotation_angle", m_params.emplace_back( new PARAM_LAMBDA<int>( "editing.rotation_angle",
[this] () -> int [this] () -> int
{ {

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2019-2020 Reece R. Pollack <reece@his.com> * Copyright (C) 2019-2020 Reece R. Pollack <reece@his.com>
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -25,6 +25,7 @@
#include <wx/debug.h> // for wxASSERT #include <wx/debug.h> // for wxASSERT
#include <pcb_base_frame.h> #include <pcb_base_frame.h>
#include <pcbnew_settings.h> #include <pcbnew_settings.h>
#include <footprint_editor_settings.h>
#include <pcb_origin_transforms.h> #include <pcb_origin_transforms.h>
using COORD_TYPE = ORIGIN_TRANSFORMS::COORD_TYPES_T; using COORD_TYPE = ORIGIN_TRANSFORMS::COORD_TYPES_T;
@ -119,10 +120,16 @@ int PCB_ORIGIN_TRANSFORMS::getUserYOrigin() const
bool PCB_ORIGIN_TRANSFORMS::invertXAxis() const bool PCB_ORIGIN_TRANSFORMS::invertXAxis() const
{ {
return m_pcbBaseFrame.GetPcbNewSettings()->m_Display.m_DisplayInvertXAxis; if( m_pcbBaseFrame.GetFrameType() == FRAME_PCB_EDITOR )
return m_pcbBaseFrame.GetPcbNewSettings()->m_Display.m_DisplayInvertXAxis;
else
return m_pcbBaseFrame.GetFootprintEditorSettings()->m_DisplayInvertXAxis;
} }
bool PCB_ORIGIN_TRANSFORMS::invertYAxis() const bool PCB_ORIGIN_TRANSFORMS::invertYAxis() const
{ {
return m_pcbBaseFrame.GetPcbNewSettings()->m_Display.m_DisplayInvertYAxis; if( m_pcbBaseFrame.GetFrameType() == FRAME_PCB_EDITOR )
return m_pcbBaseFrame.GetPcbNewSettings()->m_Display.m_DisplayInvertYAxis;
else
return m_pcbBaseFrame.GetFootprintEditorSettings()->m_DisplayInvertYAxis;
} }

View File

@ -210,11 +210,19 @@ static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
case PANEL_PCB_DISPLAY_OPTS: case PANEL_PCB_DISPLAY_OPTS:
{ {
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager(); SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
APP_SETTINGS_BASE* cfg = mgr.GetAppSettings<PCBNEW_SETTINGS>(); APP_SETTINGS_BASE* cfg = mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>();
return new PANEL_PCB_DISPLAY_OPTIONS( aParent, cfg ); return new PANEL_PCB_DISPLAY_OPTIONS( aParent, cfg );
} }
case PANEL_FP_ORIGINS_AXES:
{
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
APP_SETTINGS_BASE* cfg = mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>();
return new PANEL_PCBNEW_DISPLAY_ORIGIN( aParent, cfg, FRAME_FOOTPRINT_EDITOR );
}
case PANEL_PCB_GRIDS: case PANEL_PCB_GRIDS:
{ {
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager(); SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
@ -264,7 +272,12 @@ static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
return new PANEL_PCBNEW_ACTION_PLUGINS( aParent ); return new PANEL_PCBNEW_ACTION_PLUGINS( aParent );
case PANEL_PCB_ORIGINS_AXES: case PANEL_PCB_ORIGINS_AXES:
return new PANEL_PCBNEW_DISPLAY_ORIGIN( aParent ); {
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
APP_SETTINGS_BASE* cfg = mgr.GetAppSettings<PCBNEW_SETTINGS>();
return new PANEL_PCBNEW_DISPLAY_ORIGIN( aParent, cfg, FRAME_PCB_EDITOR );
}
case PANEL_3DV_DISPLAY_OPTIONS: case PANEL_3DV_DISPLAY_OPTIONS:
return new PANEL_3D_DISPLAY_OPTIONS( aParent ); return new PANEL_3D_DISPLAY_OPTIONS( aParent );

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2020-2022 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2020-2023 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -199,13 +199,20 @@ int PCB_VIEWER_TOOLS::MeasureTool( const TOOL_EVENT& aEvent )
frame()->PushTool( aEvent ); frame()->PushTool( aEvent );
bool invertXAxis = displayOptions().m_DisplayInvertXAxis;
bool invertYAxis = displayOptions().m_DisplayInvertYAxis;
if( IsFootprintFrame() )
{
invertXAxis = frame()->GetFootprintEditorSettings()->m_DisplayInvertXAxis;
invertYAxis = frame()->GetFootprintEditorSettings()->m_DisplayInvertYAxis;
}
TWO_POINT_GEOMETRY_MANAGER twoPtMgr; TWO_POINT_GEOMETRY_MANAGER twoPtMgr;
PCB_GRID_HELPER grid( m_toolMgr, frame()->GetMagneticItemsSettings() ); PCB_GRID_HELPER grid( m_toolMgr, frame()->GetMagneticItemsSettings() );
bool originSet = false; bool originSet = false;
EDA_UNITS units = frame()->GetUserUnits(); EDA_UNITS units = frame()->GetUserUnits();
KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr, pcbIUScale, units, KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr, pcbIUScale, units, invertXAxis, invertYAxis );
displayOptions().m_DisplayInvertXAxis,
displayOptions().m_DisplayInvertYAxis );
view.Add( &ruler ); view.Add( &ruler );
view.SetVisible( &ruler, false ); view.SetVisible( &ruler, false );
@ -323,8 +330,16 @@ int PCB_VIEWER_TOOLS::MeasureTool( const TOOL_EVENT& aEvent )
} }
else if( evt->IsAction( &ACTIONS::updatePreferences ) ) else if( evt->IsAction( &ACTIONS::updatePreferences ) )
{ {
ruler.UpdateDir( displayOptions().m_DisplayInvertXAxis, invertXAxis = displayOptions().m_DisplayInvertXAxis;
displayOptions().m_DisplayInvertYAxis ); invertYAxis = displayOptions().m_DisplayInvertYAxis;
if( IsFootprintFrame() )
{
invertXAxis = frame()->GetFootprintEditorSettings()->m_DisplayInvertXAxis;
invertYAxis = frame()->GetFootprintEditorSettings()->m_DisplayInvertYAxis;
}
ruler.UpdateDir( invertXAxis, invertYAxis );
view.Update( &ruler, KIGFX::GEOMETRY ); view.Update( &ruler, KIGFX::GEOMETRY );
canvas()->Refresh(); canvas()->Refresh();