Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
9eb39168
Commit
9eb39168
authored
Sep 10, 2013
by
tomasz.wlostowski@cern.ch
Browse files
Options
Browse Files
Download
Plain Diff
Merged kicad-gal-orson
parents
fa817b74
5659dd47
Changes
78
Show whitespace changes
Inline
Side-by-side
Showing
78 changed files
with
995 additions
and
394 deletions
+995
-394
3d_draw_basic_functions.cpp
3d-viewer/3d_draw_basic_functions.cpp
+1
-1
vrmlmodelparser.cpp
3d-viewer/vrmlmodelparser.cpp
+4
-4
x3dmodelparser.cpp
3d-viewer/x3dmodelparser.cpp
+9
-9
dialog_page_settings.cpp
common/dialogs/dialog_page_settings.cpp
+1
-1
drawframe.cpp
common/drawframe.cpp
+19
-15
cairo_gal.cpp
common/gal/cairo/cairo_gal.cpp
+9
-3
opengl_compositor.cpp
common/gal/opengl/opengl_compositor.cpp
+2
-1
opengl_gal.cpp
common/gal/opengl/opengl_gal.cpp
+1
-0
context_menu.cpp
common/tool/context_menu.cpp
+12
-4
tool_manager.cpp
common/tool/tool_manager.cpp
+3
-2
view.cpp
common/view/view.cpp
+31
-15
view_group.cpp
common/view/view_group.cpp
+10
-17
wx_view_controls.cpp
common/view/wx_view_controls.cpp
+16
-16
zoom.cpp
common/zoom.cpp
+12
-3
fctsys.h
include/fctsys.h
+2
-2
layers_id_colors_and_visibility.h
include/layers_id_colors_and_visibility.h
+2
-1
context_menu.h
include/tool/context_menu.h
+2
-2
tool_dispatcher.h
include/tool/tool_dispatcher.h
+1
-1
tool_manager.h
include/tool/tool_manager.h
+6
-2
view.h
include/view/view.h
+28
-13
view_controls.h
include/view/view_controls.h
+85
-23
wx_view_controls.h
include/view/wx_view_controls.h
+9
-59
worksheet_shape_builder.h
include/worksheet_shape_builder.h
+2
-3
wxBasePcbFrame.h
include/wxBasePcbFrame.h
+4
-0
wxstruct.h
include/wxstruct.h
+7
-3
CMakeLists.txt
pcbnew/CMakeLists.txt
+1
-0
automove.cpp
pcbnew/autorouter/automove.cpp
+1
-1
basepcbframe.cpp
pcbnew/basepcbframe.cpp
+68
-54
board_items_to_polygon_shape_transform.cpp
pcbnew/board_items_to_polygon_shape_transform.cpp
+1
-1
board_undo_redo.cpp
pcbnew/board_undo_redo.cpp
+3
-3
class_dimension.cpp
pcbnew/class_dimension.cpp
+1
-1
class_module.cpp
pcbnew/class_module.cpp
+1
-1
class_pcb_layer_widget.cpp
pcbnew/class_pcb_layer_widget.cpp
+6
-11
class_pcb_text.cpp
pcbnew/class_pcb_text.cpp
+1
-1
class_text_mod.cpp
pcbnew/class_text_mod.cpp
+17
-1
class_text_mod.h
pcbnew/class_text_mod.h
+9
-0
deltrack.cpp
pcbnew/deltrack.cpp
+2
-2
dialog_display_options.cpp
pcbnew/dialogs/dialog_display_options.cpp
+1
-1
dialog_drc.cpp
pcbnew/dialogs/dialog_drc.cpp
+1
-1
dialog_fp_lib_table.cpp
pcbnew/dialogs/dialog_fp_lib_table.cpp
+5
-5
dialog_general_options.cpp
pcbnew/dialogs/dialog_general_options.cpp
+7
-7
dialog_global_deletion.cpp
pcbnew/dialogs/dialog_global_deletion.cpp
+1
-1
dialog_global_edit_tracks_and_vias.cpp
pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp
+1
-1
dialog_global_modules_fields_edition.cpp
pcbnew/dialogs/dialog_global_modules_fields_edition.cpp
+1
-1
dialog_orient_footprints.cpp
pcbnew/dialogs/dialog_orient_footprints.cpp
+1
-1
dialog_set_grid.cpp
pcbnew/dialogs/dialog_set_grid.cpp
+1
-1
eagle_plugin.cpp
pcbnew/eagle_plugin.cpp
+1
-1
edit.cpp
pcbnew/edit.cpp
+8
-8
edit_pcb_text.cpp
pcbnew/edit_pcb_text.cpp
+4
-4
editmod.cpp
pcbnew/editmod.cpp
+2
-2
editrack.cpp
pcbnew/editrack.cpp
+12
-12
edtxtmod.cpp
pcbnew/edtxtmod.cpp
+1
-1
event_handlers_tracks_vias_sizes.cpp
pcbnew/event_handlers_tracks_vias_sizes.cpp
+1
-1
footprint_wizard.cpp
pcbnew/footprint_wizard.cpp
+1
-1
footprint_wizard_frame.cpp
pcbnew/footprint_wizard_frame.cpp
+2
-2
gen_modules_placefile.cpp
pcbnew/gen_modules_placefile.cpp
+2
-2
hotkeys_board_editor.cpp
pcbnew/hotkeys_board_editor.cpp
+15
-3
modedit.cpp
pcbnew/modedit.cpp
+9
-9
modedit_onclick.cpp
pcbnew/modedit_onclick.cpp
+6
-6
modedit_undo_redo.cpp
pcbnew/modedit_undo_redo.cpp
+2
-2
modules.cpp
pcbnew/modules.cpp
+3
-3
modview.cpp
pcbnew/modview.cpp
+1
-1
modview_frame.cpp
pcbnew/modview_frame.cpp
+3
-3
move_or_drag_track.cpp
pcbnew/move_or_drag_track.cpp
+1
-1
netlist.cpp
pcbnew/netlist.cpp
+1
-1
pcb_painter.cpp
pcbnew/pcb_painter.cpp
+34
-4
pcbframe.cpp
pcbnew/pcbframe.cpp
+2
-4
pcbnew.cpp
pcbnew/pcbnew.cpp
+3
-0
sel_layer.cpp
pcbnew/sel_layer.cpp
+1
-1
specctra_export.cpp
pcbnew/specctra_export.cpp
+3
-3
move_tool.cpp
pcbnew/tools/move_tool.cpp
+188
-0
move_tool.h
pcbnew/tools/move_tool.h
+113
-0
pcb_tools.cpp
pcbnew/tools/pcb_tools.cpp
+2
-0
selection_tool.cpp
pcbnew/tools/selection_tool.cpp
+84
-14
selection_tool.h
pcbnew/tools/selection_tool.h
+77
-5
xchgmod.cpp
pcbnew/xchgmod.cpp
+3
-3
zones_by_polygon.cpp
pcbnew/zones_by_polygon.cpp
+1
-1
zones_by_polygon_fill_functions.cpp
pcbnew/zones_by_polygon_fill_functions.cpp
+1
-1
No files found.
3d-viewer/3d_draw_basic_functions.cpp
View file @
9eb39168
...
...
@@ -415,6 +415,6 @@ void CALLBACK tessErrorCB( GLenum errorCode )
errorStr
=
gluErrorString
(
errorCode
);
// DEBUG //
D
(
printf
(
"Tess ERROR: %s
\n
"
,
errorStr
);
)
D
BG
(
printf
(
"Tess ERROR: %s
\n
"
,
errorStr
);
)
#endif
}
3d-viewer/vrmlmodelparser.cpp
View file @
9eb39168
...
...
@@ -115,7 +115,7 @@ int VRML_MODEL_PARSER::readMaterial( FILE* file, int* LineNum )
}
}
D
(
printf
(
"ReadMaterial error: material not found
\n
"
)
);
D
BG
(
printf
(
"ReadMaterial error: material not found
\n
"
)
);
return
0
;
}
...
...
@@ -207,7 +207,7 @@ int VRML_MODEL_PARSER::readChildren( FILE* file, int* LineNum )
}
else
{
D
(
printf
(
"ReadChildren error line %d <%s>
\n
"
,
*
LineNum
,
text
)
);
D
BG
(
printf
(
"ReadChildren error line %d <%s>
\n
"
,
*
LineNum
,
text
)
);
break
;
}
}
...
...
@@ -241,7 +241,7 @@ int VRML_MODEL_PARSER::readShape( FILE* file, int* LineNum )
}
else
{
D
(
printf
(
"ReadShape error line %d <%s>
\n
"
,
*
LineNum
,
text
)
);
D
BG
(
printf
(
"ReadShape error line %d <%s>
\n
"
,
*
LineNum
,
text
)
);
break
;
}
}
...
...
@@ -271,7 +271,7 @@ int VRML_MODEL_PARSER::readAppearance( FILE* file, int* LineNum )
}
else
{
D
(
printf
(
"ReadAppearance error line %d <%s>
\n
"
,
*
LineNum
,
text
)
);
D
BG
(
printf
(
"ReadAppearance error line %d <%s>
\n
"
,
*
LineNum
,
text
)
);
break
;
}
}
...
...
3d-viewer/x3dmodelparser.cpp
View file @
9eb39168
...
...
@@ -197,19 +197,19 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"diffuseColor"
)
],
material
->
m_DiffuseColor
)
)
{
D
(
printf
(
"diffuseColor parsing error"
)
);
D
BG
(
printf
(
"diffuseColor parsing error"
)
);
}
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"specularColor"
)
],
material
->
m_SpecularColor
)
)
{
D
(
printf
(
"specularColor parsing error"
)
);
D
BG
(
printf
(
"specularColor parsing error"
)
);
}
if
(
!
parseDoubleTriplet
(
properties
[
wxT
(
"emissiveColor"
)
],
material
->
m_EmissiveColor
)
)
{
D
(
printf
(
"emissiveColor parsing error"
)
);
D
BG
(
printf
(
"emissiveColor parsing error"
)
);
}
wxStringTokenizer
values
;
...
...
@@ -221,7 +221,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
}
else
{
D
(
printf
(
"ambienterror"
)
);
D
BG
(
printf
(
"ambienterror"
)
);
}
values
.
SetString
(
properties
[
wxT
(
"shininess"
)
]
);
...
...
@@ -232,7 +232,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
}
else
{
D
(
printf
(
"shininess error"
)
);
D
BG
(
printf
(
"shininess error"
)
);
}
values
.
SetString
(
properties
[
wxT
(
"transparency"
)
]
);
...
...
@@ -243,7 +243,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
}
else
{
D
(
printf
(
"trans error"
)
);
D
BG
(
printf
(
"trans error"
)
);
}
material
->
SetMaterial
();
...
...
@@ -303,7 +303,7 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
}
}
D
(
printf
(
"ReadMaterial error: material not found
\n
"
)
);
D
BG
(
printf
(
"ReadMaterial error: material not found
\n
"
)
);
}
}
...
...
@@ -373,7 +373,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
tokens
.
GetNextToken
().
ToDouble
(
&
rotation
.
z
)
&&
tokens
.
GetNextToken
().
ToDouble
(
&
angle
)
)
)
{
D
(
printf
(
"rotation read error"
)
);
D
BG
(
printf
(
"rotation read error"
)
);
}
double
vrmlunits_to_3Dunits
=
g_Parm_3D_Visu
.
m_BiuTo3Dunits
*
...
...
@@ -407,7 +407,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
if
(
points
.
size
()
%
3
!=
0
)
{
D
(
printf
(
"Number of points is incorrect"
)
);
D
BG
(
printf
(
"Number of points is incorrect"
)
);
return
;
}
...
...
common/dialogs/dialog_page_settings.cpp
View file @
9eb39168
...
...
@@ -222,7 +222,7 @@ void DIALOG_PAGES_SETTINGS::OnOkClick( wxCommandEvent& event )
if
(
SavePageSettings
()
)
{
m_screen
->
SetModify
();
m_parent
->
GetCanvas
()
->
Refresh
();
m_parent
->
RefreshCanvas
();
if
(
m_localPrjConfigChanged
)
m_parent
->
SaveProjectSettings
(
true
);
...
...
common/drawframe.cpp
View file @
9eb39168
...
...
@@ -234,13 +234,14 @@ void EDA_DRAW_FRAME::SkipNextLeftButtonReleaseEvent()
void
EDA_DRAW_FRAME
::
OnToggleGridState
(
wxCommandEvent
&
aEvent
)
{
SetGridVisibility
(
!
IsGridVisible
()
);
if
(
m_galCanvasActive
)
{
m_galCanvas
->
GetGAL
()
->
SetGridVisibility
(
IsGridVisible
()
);
m_galCanvas
->
Refresh
(
);
m_galCanvas
->
GetView
()
->
MarkTargetDirty
(
KiGfx
::
TARGET_NONCACHED
);
}
else
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
@@ -395,11 +396,12 @@ void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event )
if
(
m_galCanvasActive
)
{
KiGfx
::
GAL
*
gal
=
m_galCanvas
->
GetGAL
();
gal
->
SetGridSize
(
VECTOR2D
(
screen
->
GetGrid
().
m_Size
.
x
,
screen
->
GetGrid
().
m_Size
.
y
)
);
m_galCanvas
->
GetGAL
()
->
SetGridSize
(
VECTOR2D
(
screen
->
GetGrid
().
m_Size
.
x
,
screen
->
GetGrid
().
m_Size
.
y
)
);
m_galCanvas
->
GetView
()
->
MarkTargetDirty
(
KiGfx
::
TARGET_NONCACHED
);
}
Refresh
();
Refresh
Canvas
();
}
...
...
@@ -979,18 +981,18 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable )
// Switch to GAL rendering
if
(
!
m_galCanvasActive
)
{
// Change view settings only if GAL was not active previously
double
zoom
=
1.0
/
(
zoomFactor
*
m_canvas
->
GetZoom
()
);
view
->
SetScale
(
zoom
);
view
->
SetCenter
(
VECTOR2D
(
m_canvas
->
GetScreenCenterLogicalPosition
()
)
);
}
// Set up grid settings
gal
->
SetGridVisibility
(
IsGridVisible
()
);
gal
->
SetGridSize
(
VECTOR2D
(
screen
->
GetGridSize
().
x
,
screen
->
GetGridSize
().
y
)
);
gal
->
SetGridOrigin
(
VECTOR2D
(
screen
->
GetGridOrigin
()
)
);
gal
->
SetGridOriginMarkerSize
(
15
);
gal
->
SetGridDrawThreshold
(
10
);
// Set up viewport
double
zoom
=
1.0
/
(
zoomFactor
*
m_canvas
->
GetZoom
()
);
view
->
SetScale
(
zoom
);
view
->
SetCenter
(
VECTOR2D
(
m_canvas
->
GetScreenCenterLogicalPosition
()
)
);
}
}
else
{
...
...
@@ -1014,6 +1016,8 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable )
m_auimgr
.
GetPane
(
wxT
(
"DrawFrameGal"
)
).
Show
(
aEnable
);
m_auimgr
.
Update
();
m_galCanvas
->
SetFocus
();
m_galCanvasActive
=
aEnable
;
if
(
aEnable
)
m_galCanvas
->
SetFocus
();
}
common/gal/cairo/cairo_gal.cpp
View file @
9eb39168
...
...
@@ -736,8 +736,13 @@ void CAIRO_GAL::SetTarget( RenderTarget aTarget )
return
;
// Cairo grouping prevents display of overlapping items on the same layer in the lighter color
if
(
isInitialized
)
{
storePath
();
cairo_pop_group_to_source
(
currentContext
);
cairo_paint_with_alpha
(
currentContext
,
fillColor
.
a
);
}
switch
(
aTarget
)
{
...
...
@@ -752,6 +757,7 @@ void CAIRO_GAL::SetTarget( RenderTarget aTarget )
break
;
}
if
(
isInitialized
)
cairo_push_group
(
currentContext
);
currentTarget
=
aTarget
;
...
...
common/gal/opengl/opengl_compositor.cpp
View file @
9eb39168
...
...
@@ -167,8 +167,9 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
}
}
ClearBuffer
();
// Return to direct rendering (we were asked only to create a buffer, not switch to one)
glBindFramebuffer
(
GL_FRAMEBUFFER
,
DIRECT_RENDERING
);
m_currentFbo
=
DIRECT_RENDERING
;
...
...
common/gal/opengl/opengl_gal.cpp
View file @
9eb39168
...
...
@@ -471,6 +471,7 @@ void OPENGL_GAL::DrawPolygon( const std::deque<VECTOR2D>& aPointList )
// Any non convex polygon needs to be tesselated
// for this purpose the GLU standard functions are used
currentManager
->
Shader
(
SHADER_NONE
);
currentManager
->
Color
(
fillColor
.
r
,
fillColor
.
g
,
fillColor
.
b
,
fillColor
.
a
);
TessParams
params
=
{
currentManager
,
tessIntersects
};
gluTessBeginPolygon
(
tesselator
,
&
params
);
...
...
common/tool/context_menu.cpp
View file @
9eb39168
...
...
@@ -44,7 +44,7 @@ public:
if
(
type
==
wxEVT_MENU_HIGHLIGHT
)
evt
=
TOOL_EVENT
(
TC_Command
,
TA_ContextMenuUpdate
,
aEvent
.
GetId
()
);
else
if
(
type
==
wxEVT_COMMAND_MENU_SELECTED
)
else
if
(
type
==
wxEVT_COMMAND_MENU_SELECTED
)
evt
=
TOOL_EVENT
(
TC_Command
,
TA_ContextMenuChoice
,
aEvent
.
GetId
()
);
m_menu
->
m_tool
->
GetManager
()
->
ProcessEvent
(
evt
);
...
...
@@ -60,8 +60,15 @@ CONTEXT_MENU::CONTEXT_MENU()
m_tool
=
NULL
;
m_menu
=
new
wxMenu
();
m_handler
=
new
CMEventHandler
(
this
);
m_menu
->
Connect
(
wxEVT_MENU_HIGHLIGHT
,
wxEventHandler
(
CMEventHandler
::
onEvent
),
NULL
,
m_handler
);
m_menu
->
Connect
(
wxEVT_COMMAND_MENU_SELECTED
,
wxEventHandler
(
CMEventHandler
::
onEvent
),
NULL
,
m_handler
);
m_menu
->
Connect
(
wxEVT_MENU_HIGHLIGHT
,
wxEventHandler
(
CMEventHandler
::
onEvent
),
NULL
,
m_handler
);
m_menu
->
Connect
(
wxEVT_COMMAND_MENU_SELECTED
,
wxEventHandler
(
CMEventHandler
::
onEvent
),
NULL
,
m_handler
);
// Workaround for the case when mouse cursor never reaches menu (it hangs up tools using menu)
wxMenuEvent
menuEvent
(
wxEVT_MENU_HIGHLIGHT
,
0
,
m_menu
);
m_menu
->
AddPendingEvent
(
menuEvent
);
m_titleSet
=
false
;
}
...
...
@@ -75,6 +82,7 @@ CONTEXT_MENU::~CONTEXT_MENU()
void
CONTEXT_MENU
::
SetTitle
(
const
wxString
&
aTitle
)
{
// Unfortunately wxMenu::SetTitle() does nothing..
if
(
m_titleSet
)
{
m_menu
->
Delete
(
m_menu
->
FindItemByPosition
(
0
)
);
// fixme: this is LAME!
...
...
@@ -87,7 +95,7 @@ void CONTEXT_MENU::SetTitle( const wxString& aTitle )
}
void
CONTEXT_MENU
::
Add
(
const
wxString
&
aItem
,
int
aId
)
void
CONTEXT_MENU
::
Add
(
const
wxString
&
aItem
,
int
aId
)
{
m_menu
->
Append
(
new
wxMenuItem
(
m_menu
,
aId
,
aItem
,
wxEmptyString
,
wxITEM_NORMAL
)
);
}
...
...
common/tool/tool_manager.cpp
View file @
9eb39168
...
...
@@ -210,9 +210,9 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent )
st
->
wakeupEvent
=
aEvent
;
st
->
pendingWait
=
false
;
st
->
waitEvents
.
clear
();
st
->
cofunc
->
Resume
();
if
(
!
st
->
cofunc
->
Running
()
)
if
(
!
st
->
cofunc
->
Resume
()
)
{
// The couroutine has finished
finishTool
(
st
);
}
...
...
@@ -261,6 +261,7 @@ void TOOL_MANAGER::finishTool( TOOL_STATE* aState )
{
wxASSERT
(
m_activeTools
.
front
()
==
aState
->
theTool
->
GetId
()
);
// Deactivate the most recent tool and remove it from the active tools queue
aState
->
idle
=
true
;
m_activeTools
.
erase
(
m_activeTools
.
begin
()
);
...
...
common/view/view.cpp
View file @
9eb39168
...
...
@@ -98,9 +98,9 @@ void VIEW::Add( VIEW_ITEM* aItem )
for
(
int
i
=
0
;
i
<
layers_count
;
i
++
)
{
VIEW_LAYER
*
l
=
&
m_layers
[
layers
[
i
]];
l
->
items
->
Insert
(
aItem
);
l
->
dirtyExtents
.
Merge
(
aItem
->
ViewBBox
()
)
;
VIEW_LAYER
&
l
=
m_layers
[
layers
[
i
]];
l
.
items
->
Insert
(
aItem
);
l
.
isDirty
=
true
;
}
if
(
m_dynamic
)
...
...
@@ -386,7 +386,7 @@ struct VIEW::updateItemsColor
void
VIEW
::
UpdateLayerColor
(
int
aLayer
)
{
// There is no point in updating non-cached layers
if
(
!
i
sCached
(
aLayer
)
)
if
(
!
I
sCached
(
aLayer
)
)
return
;
BOX2I
r
;
...
...
@@ -409,7 +409,7 @@ void VIEW::UpdateAllLayersColor()
VIEW_LAYER
*
l
=
&
(
(
*
i
).
second
);
// There is no point in updating non-cached layers
if
(
!
i
sCached
(
l
->
id
)
)
if
(
!
I
sCached
(
l
->
id
)
)
continue
;
updateItemsColor
visitor
(
l
->
id
,
m_painter
,
m_gal
);
...
...
@@ -441,7 +441,7 @@ struct VIEW::changeItemsDepth
void
VIEW
::
ChangeLayerDepth
(
int
aLayer
,
int
aDepth
)
{
// There is no point in updating non-cached layers
if
(
!
i
sCached
(
aLayer
)
)
if
(
!
I
sCached
(
aLayer
)
)
return
;
BOX2I
r
;
...
...
@@ -564,6 +564,7 @@ void VIEW::redrawRect( const BOX2I& aRect )
m_gal
->
SetLayerDepth
(
l
->
renderingOrder
);
l
->
items
->
Query
(
aRect
,
drawFunc
);
}
l
->
isDirty
=
false
;
}
}
...
...
@@ -571,7 +572,7 @@ void VIEW::redrawRect( const BOX2I& aRect )
void
VIEW
::
draw
(
VIEW_ITEM
*
aItem
,
int
aLayer
,
bool
aImmediate
)
const
{
if
(
i
sCached
(
aLayer
)
&&
!
aImmediate
)
if
(
I
sCached
(
aLayer
)
&&
!
aImmediate
)
{
// Draw using cached information or create one
int
group
=
aItem
->
getGroup
(
aLayer
);
...
...
@@ -697,6 +698,7 @@ void VIEW::Clear()
{
VIEW_LAYER
*
l
=
&
(
(
*
i
).
second
);
unlinkItem
v
;
if
(
m_dynamic
)
l
->
items
->
Query
(
r
,
v
);
...
...
@@ -789,6 +791,9 @@ void VIEW::invalidateItem( VIEW_ITEM* aItem, int aUpdateFlags )
int
layers
[
VIEW_MAX_LAYERS
],
layers_count
;
aItem
->
getLayers
(
layers
,
layers_count
);
if
(
aUpdateFlags
&
VIEW_ITEM
::
GEOMETRY
)
updateBbox
(
aItem
);
// Iterate through layers used by the item and recache it immediately
for
(
int
i
=
0
;
i
<
layers_count
;
i
++
)
{
...
...
@@ -796,12 +801,8 @@ void VIEW::invalidateItem( VIEW_ITEM* aItem, int aUpdateFlags )
if
(
aUpdateFlags
&
VIEW_ITEM
::
GEOMETRY
)
{
// Reinsert item in order to update bounding box
Remove
(
aItem
);
Add
(
aItem
);
if
(
isCached
(
layerId
)
)
updateItemGeometry
(
aItem
,
layerId
);
/// TODO is it still necessary?
if
(
IsCached
(
layerId
)
)
updateItemGeometry
(
aItem
,
layerId
);
}
else
if
(
aUpdateFlags
&
VIEW_ITEM
::
COLOR
)
{
...
...
@@ -860,6 +861,21 @@ void VIEW::updateItemGeometry( VIEW_ITEM* aItem, int aLayer )
}
void
VIEW
::
updateBbox
(
VIEW_ITEM
*
aItem
)
{
int
layers
[
VIEW_MAX_LAYERS
],
layers_count
;
aItem
->
ViewGetLayers
(
layers
,
layers_count
);
for
(
int
i
=
0
;
i
<
layers_count
;
i
++
)
{
VIEW_LAYER
&
l
=
m_layers
[
layers
[
i
]];
l
.
items
->
Remove
(
aItem
);
l
.
items
->
Insert
(
aItem
);
l
.
isDirty
=
true
;
}
}
bool
VIEW
::
areRequiredLayersEnabled
(
int
aLayerId
)
const
{
wxASSERT
(
(
unsigned
)
aLayerId
<
m_layers
.
size
()
);
...
...
@@ -893,13 +909,13 @@ void VIEW::RecacheAllItems( bool aImmediately )
{
VIEW_LAYER
*
l
=
&
(
(
*
i
).
second
);
if
(
i
sCached
(
l
->
id
)
)
if
(
I
sCached
(
l
->
id
)
)
{
m_gal
->
SetTarget
(
l
->
target
);
m_gal
->
SetLayerDepth
(
l
->
renderingOrder
);
recacheLayer
visitor
(
this
,
m_gal
,
l
->
id
,
aImmediately
);
l
->
items
->
Query
(
r
,
visitor
);
l
->
isDirty
=
fals
e
;
l
->
isDirty
=
tru
e
;
}
}
...
...
common/view/view_group.cpp
View file @
9eb39168
...
...
@@ -56,21 +56,18 @@ VIEW_GROUP::~VIEW_GROUP()
void
VIEW_GROUP
::
Add
(
VIEW_ITEM
*
aItem
)
{
m_items
.
insert
(
aItem
);
updateBbox
();
}
void
VIEW_GROUP
::
Remove
(
VIEW_ITEM
*
aItem
)
{
m_items
.
erase
(
aItem
);
updateBbox
();
}
void
VIEW_GROUP
::
Clear
()
{
m_items
.
clear
();
updateBbox
();
}
void
VIEW_GROUP
::
FreeItems
()
...
...
@@ -90,15 +87,9 @@ unsigned int VIEW_GROUP::GetSize() const
const
BOX2I
VIEW_GROUP
::
ViewBBox
()
const
{
BOX2I
box
;
// Merge all bounding boxes, so the returned one contains all stored items
BOOST_FOREACH
(
VIEW_ITEM
*
item
,
m_items
)
{
box
.
Merge
(
item
->
ViewBBox
()
);
}
return
box
;
BOX2I
maxBox
;
maxBox
.
SetMaximum
();
return
maxBox
;
}
...
...
@@ -114,20 +105,22 @@ void VIEW_GROUP::ViewDraw( int aLayer, GAL* aGal, const BOX2I& aVisibleArea ) co
m_view
->
SortLayers
(
layers
,
layers_count
);
for
(
int
i
=
0
;
i
<
layers_count
;
i
++
)
{
if
(
m_view
->
IsCached
(
layers
[
i
]
)
&&
m_view
->
IsLayerVisible
(
layers
[
i
]
)
)
{
aGal
->
SetLayerDepth
(
m_view
->
GetLayerOrder
(
layers
[
i
]
)
);
if
(
!
painter
->
Draw
(
item
,
layers
[
i
]
)
)
item
->
ViewDraw
(
layers
[
i
],
aGal
,
aVisibleArea
);
// Alternative drawing method
}
/// m_view->Draw( item, true );
}
}
}
void
VIEW_GROUP
::
ViewGetLayers
(
int
aLayers
[],
int
&
aCount
)
const
{
// Everything is displayed on a single layer
aLayers
[
0
]
=
m_layer
;
aCount
=
1
;
}
...
...
common/view/wx_view_controls.cpp
View file @
9eb39168
...
...
@@ -34,11 +34,6 @@ using namespace KiGfx;
WX_VIEW_CONTROLS
::
WX_VIEW_CONTROLS
(
VIEW
*
aView
,
wxWindow
*
aParentPanel
)
:
VIEW_CONTROLS
(
aView
),
m_state
(
IDLE
),
m_grabMouse
(
false
),
m_snappingEnabled
(
true
),
m_autoPanEnabled
(
false
),
m_autoPanMargin
(
0.1
),
m_autoPanSpeed
(
0.15
),
m_parentPanel
(
aParentPanel
)
{
m_parentPanel
->
Connect
(
wxEVT_MOTION
,
wxMouseEventHandler
(
...
...
@@ -49,6 +44,10 @@ WX_VIEW_CONTROLS::WX_VIEW_CONTROLS( VIEW* aView, wxWindow* aParentPanel ) :
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
m_parentPanel
->
Connect
(
wxEVT_MIDDLE_DOWN
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
m_parentPanel
->
Connect
(
wxEVT_LEFT_UP
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
m_parentPanel
->
Connect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
#if defined _WIN32 || defined _WIN64
m_parentPanel
->
Connect
(
wxEVT_ENTER_WINDOW
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onEnter
),
NULL
,
this
);
...
...
@@ -64,6 +63,12 @@ void WX_VIEW_CONTROLS::onMotion( wxMouseEvent& aEvent )
{
m_mousePosition
.
x
=
aEvent
.
GetX
();
m_mousePosition
.
y
=
aEvent
.
GetY
();
if
(
m_snappingEnabled
)
m_cursorPosition
=
m_view
->
GetGAL
()
->
GetGridPoint
(
m_mousePosition
);
else
m_cursorPosition
=
m_mousePosition
;
bool
isAutoPanning
=
false
;
if
(
m_autoPanEnabled
)
...
...
@@ -150,6 +155,11 @@ void WX_VIEW_CONTROLS::onButton( wxMouseEvent& aEvent )
m_lookStartPoint
=
m_view
->
GetCenter
();
m_state
=
DRAG_PANNING
;
}
if
(
aEvent
.
LeftUp
()
)
{
m_state
=
IDLE
;
// Stop autopanning when user release left mouse button
}
break
;
case
DRAG_PANNING
:
...
...
@@ -187,8 +197,7 @@ void WX_VIEW_CONTROLS::onTimer( wxTimerEvent& aEvent )
dir
=
m_view
->
ToWorld
(
dir
,
false
);
m_view
->
SetCenter
(
m_view
->
GetCenter
()
+
dir
*
m_autoPanSpeed
);
wxPaintEvent
redrawEvent
;
wxPostEvent
(
m_parentPanel
,
redrawEvent
);
m_parentPanel
->
Refresh
();
}
break
;
...
...
@@ -210,15 +219,6 @@ void WX_VIEW_CONTROLS::SetGrabMouse( bool aEnabled )
}
VECTOR2D
WX_VIEW_CONTROLS
::
GetCursorPosition
()
const
{
if
(
m_snappingEnabled
)
return
m_view
->
GetGAL
()
->
GetGridPoint
(
m_mousePosition
);
return
m_mousePosition
;
}
bool
WX_VIEW_CONTROLS
::
handleAutoPanning
(
const
wxMouseEvent
&
aEvent
)
{
VECTOR2D
p
(
aEvent
.
GetX
(),
aEvent
.
GetY
()
);
...
...
common/zoom.cpp
View file @
9eb39168
...
...
@@ -52,7 +52,7 @@ void EDA_DRAW_FRAME::RedrawScreen( const wxPoint& aCenterPoint, bool aWarpPointe
if
(
aWarpPointer
)
m_canvas
->
MoveCursorToCrossHair
();
m_canvas
->
Refresh
();
RefreshCanvas
();
m_canvas
->
Update
();
}
...
...
@@ -64,11 +64,20 @@ void EDA_DRAW_FRAME::RedrawScreen2( const wxPoint& posBefore )
AdjustScrollBars
(
newCenter
);
m_canvas
->
Refresh
();
RefreshCanvas
();
m_canvas
->
Update
();
}
void
EDA_DRAW_FRAME
::
RefreshCanvas
()
{
if
(
m_galCanvasActive
)
m_galCanvas
->
Refresh
();
else
m_canvas
->
Refresh
();
}
void
EDA_DRAW_FRAME
::
Zoom_Automatique
(
bool
aWarpPointer
)
{
BASE_SCREEN
*
screen
=
GetScreen
();
...
...
@@ -160,7 +169,7 @@ void EDA_DRAW_FRAME::OnZoom( wxCommandEvent& event )
break
;
case
ID_ZOOM_REDRAW
:
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_ZOOM_CENTER
:
...
...
include/fctsys.h
View file @
9eb39168
...
...
@@ -21,9 +21,9 @@
#define WIN_STRING_DIR_SEP wxT( "\\" )
#ifdef DEBUG
#define D(x) x
#define D
BG
(x) x
#else
#define D(x) // nothing
#define D
BG
(x) // nothing
#endif
/**
...
...
include/layers_id_colors_and_visibility.h
View file @
9eb39168
...
...
@@ -240,6 +240,7 @@ enum PCB_VISIBLE
PAD_BK_NETNAMES_VISIBLE
,
PADS_NETNAMES_VISIBLE
,
SELECTION
,
GP_OVERLAY
,
// General purpose overlay
END_PCB_VISIBLE_LIST
// sentinel
...
...
@@ -258,7 +259,7 @@ enum PCB_VISIBLE
/// means that layer is displayed closer to the user, ie. on the top).
const
LAYER_NUM
GalLayerOrder
[]
=
{
ITEM_GAL_LAYER
(
GP_OVERLAY
),
ITEM_GAL_LAYER
(
GP_OVERLAY
),
ITEM_GAL_LAYER
(
SELECTION
),
ITEM_GAL_LAYER
(
PADS_NETNAMES_VISIBLE
),
DRAW_N
,
COMMENT_N
,
ECO1_N
,
ECO2_N
,
EDGE_N
,
UNUSED_LAYER_29
,
UNUSED_LAYER_30
,
UNUSED_LAYER_31
,
...
...
include/tool/context_menu.h
View file @
9eb39168
...
...
@@ -44,7 +44,7 @@ public:
~
CONTEXT_MENU
();
void
SetTitle
(
const
wxString
&
aTitle
);
void
Add
(
const
wxString
&
aItem
,
int
aId
);
void
Add
(
const
wxString
&
aItem
,
int
aId
);
// fixme: unimplemented
// void Add ( const TOOL_ACTION& aAction, int aId = -1 );
...
...
@@ -61,7 +61,7 @@ private:
friend
class
TOOL_INTERACTIVE
;
void
setTool
(
TOOL_INTERACTIVE
*
aTool
)
void
setTool
(
TOOL_INTERACTIVE
*
aTool
)
{
m_tool
=
aTool
;
}
...
...
include/tool/tool_dispatcher.h
View file @
9eb39168
...
...
@@ -36,7 +36,7 @@ class TOOL_MANAGER;
class
PCB_BASE_FRAME
;
namespace
KiGfx
{
class
VIEW
;
class
VIEW
;
};
/**
...
...
include/tool/tool_manager.h
View file @
9eb39168
...
...
@@ -71,6 +71,8 @@ public:
* Function InvokeTool()
* Calls a tool by sending a tool activation event to tool of given ID or name.
* An user-defined parameter object can be also passed
*
* @return True if the requested tool was invoked successfully.
*/
bool
InvokeTool
(
TOOL_ID
aToolId
);
bool
InvokeTool
(
const
std
::
string
&
aName
);
...
...
@@ -81,6 +83,8 @@ public:
/**
* Function FindTool()
* Searches for a tool with given name or ID
*
* @return Pointer to the request tool of NULL in case of failure.
*/
TOOL_BASE
*
FindTool
(
int
aId
)
const
;
TOOL_BASE
*
FindTool
(
const
std
::
string
&
aName
)
const
;
...
...
@@ -100,7 +104,7 @@ public:
/**
* Sets the work environment (model, view, view controls and the parent window).
* These are made available to the tool. Called by the parent frame (PCB_EDIT_FRAME)
* when the board is set up
* when the board is set up
.
*/
void
SetEnvironment
(
EDA_ITEM
*
aModel
,
KiGfx
::
VIEW
*
aView
,
KiGfx
::
VIEW_CONTROLS
*
aViewControls
,
wxWindow
*
aFrame
);
...
...
@@ -154,7 +158,7 @@ public:
CONTEXT_MENU_TRIGGER
aTrigger
);
/**
* Allows a tool
pass the already handled event to be passed
to the next tool on the stack.
* Allows a tool
to pass the already handled event
to the next tool on the stack.
*/
void
PassEvent
()
{
...
...
include/view/view.h
View file @
9eb39168
...
...
@@ -262,14 +262,28 @@ public:
/**
* Function SetLayerVisible()
* Controls the visibility of a particular layer.
* @param aLayer: the layer to show/hide. When ALL_LAYERS constant is given, all layers'
* visibility is updated
* @param aVisible: the obivous
* @param aLayer: the layer to show/hide
* @param aVisible: the obvious
*/
inline
void
SetLayerVisible
(
int
aLayer
,
bool
aVisible
=
true
)
{
if
(
m_layers
[
aLayer
].
enabled
!=
aVisible
)
{
// Target has to be redrawn after changing its visibility
MarkTargetDirty
(
m_layers
[
aLayer
].
target
);
m_layers
[
aLayer
].
enabled
=
aVisible
;
}
}
/**
* Function IsLayerVisible()
* Returns information about visibility of a particular layer.
* @param aLayer: true if the layer is visible, false otherwise
*/
inline
bool
IsLayerVisible
(
int
aLayer
)
const
{
return
m_layers
.
at
(
aLayer
).
enabled
;
}
/**
* Function SetLayerTarget()
...
...
@@ -423,6 +437,13 @@ public:
m_dirtyTargets
[
aTarget
]
=
true
;
}
/// Returns true if the layer is cached
inline
bool
IsCached
(
int
aLayer
)
const
{
return
(
m_layers
.
at
(
aLayer
).
target
==
TARGET_CACHED
);
}
static
const
int
VIEW_MAX_LAYERS
=
128
;
///* maximum number of layers that may be shown
private
:
...
...
@@ -432,11 +453,8 @@ private:
bool
isDirty
;
///* does it contain any dirty items (updated since last redraw)
bool
displayOnly
;
///* is the layer display only?
VIEW_RTREE
*
items
;
///* R-tree indexing all items on this layer.
std
::
vector
<
VIEW_ITEM
*>
dirtyItems
;
///* set of dirty items collected since last redraw
int
renderingOrder
;
///* rendering order of this layer
int
id
;
///* layer ID
BOX2I
extents
;
///* sum of bboxes of all items on the layer
BOX2I
dirtyExtents
;
///* sum of bboxes of all dirty items on the layer
RenderTarget
target
;
///* where the layer should be rendered
std
::
set
<
int
>
requiredLayers
;
///* layers that are required to be enabled to show the layer
};
...
...
@@ -515,6 +533,9 @@ private:
/// Updates all informations needed to draw an item
void
updateItemGeometry
(
VIEW_ITEM
*
aItem
,
int
aLayer
);
/// Updates bounding box of an item
void
updateBbox
(
VIEW_ITEM
*
aItem
);
/// Determines rendering order of layers. Used in display order sorting function.
static
bool
compareRenderingOrder
(
VIEW_LAYER
*
i
,
VIEW_LAYER
*
j
)
{
...
...
@@ -524,12 +545,6 @@ private:
/// Checks if every layer required by the aLayerId layer is enabled.
bool
areRequiredLayersEnabled
(
int
aLayerId
)
const
;
/// Returns true if the layer is cached
inline
bool
isCached
(
int
aLayer
)
const
{
return
(
m_layers
.
at
(
aLayer
).
target
==
TARGET_CACHED
);
}
///* Whether to use rendering order modifier or not
bool
m_enableOrderModifier
;
...
...
include/view/view_controls.h
View file @
9eb39168
...
...
@@ -46,23 +46,31 @@ class VIEW;
class
VIEW_CONTROLS
{
public
:
VIEW_CONTROLS
(
VIEW
*
aView
)
:
m_view
(
aView
)
{};
VIEW_CONTROLS
(
VIEW
*
aView
)
:
m_view
(
aView
),
m_snappingEnabled
(
false
),
m_grabMouse
(
false
),
m_autoPanEnabled
(
false
),
m_autoPanMargin
(
0
.
1
),
m_autoPanSpeed
(
0
.
15
)
{};
virtual
~
VIEW_CONTROLS
()
{};
/**
* Function
Activate
*
Determines if all view related events (mouse wheel, right click panning, etc.), should be
*
handled or not. If not - they can be processed by the legacy view.
* @param aEnabled
tells if events should be hand
led.
* Function
SetSnapping()
*
Enables/disables snapping cursor to grid.
*
* @param aEnabled
says whether the opion should be enabled or disab
led.
*/
virtual
void
Activate
(
bool
aEnabled
)
{};
void
SetSnapping
(
bool
aEnabled
)
{
m_snappingEnabled
=
aEnabled
;
}
/**
* Function SetGrabMouse
* Turns on/off mouse grabbing. When the mouse is grabbed, it cannot go outside the VIEW.
* @param aEnabled tells if mouse should be grabbed or not.
*/
virtual
void
SetGrabMouse
(
bool
aEnabled
)
{};
virtual
void
SetGrabMouse
(
bool
aEnabled
)
{
m_grabMouse
=
aEnabled
;
}
/**
* Function SetAutoPan
...
...
@@ -70,36 +78,90 @@ public:
* track) and user moves mouse to the VIEW edge - then the view can be translated or not).
* @param aEnabled tells if the autopanning should be active.
*/
virtual
void
SetAutoPan
(
bool
aEnabled
)
{}
virtual
void
SetAutoPan
(
bool
aEnabled
)
{
m_autoPanEnabled
=
aEnabled
;
}
/**
* Function Set
PanSpeed
* Sets speed of panning.
* @param aSpeed is a new speed for panning.
* Function Set
AutoPanSpeed()
* Sets speed of
auto
panning.
* @param aSpeed is a new speed for
auto
panning.
*/
virtual
void
SetPanSpeed
(
float
aSpeed
)
{};
virtual
void
SetAutoPanSpeed
(
float
aSpeed
)
{
m_autoPanSpeed
=
aSpeed
;
}
/**
* Function Set
ZoomSpeed
*
Determines how much zoom factor should be affected on one zoom event (eg. mouse wheel
).
* @param aSpeed is a new
zooming speed
.
* Function Set
AutoPanMArgin()
*
Sets margin for autopanning (ie. the area when autopanning becomes active
).
* @param aSpeed is a new
margin for autopanning
.
*/
virtual
void
SetZoomSpeed
(
float
aSpeed
)
{};
virtual
void
SetAutoPanMargin
(
float
aMargin
)
{
m_autoPanMargin
=
aMargin
;
};
/**
* Function AnimatedZoom
* // TODO
* Function GetMousePosition()
* Returns the current mouse pointer position in the screen coordinates. Note, that it may be
* different from the cursor position if snapping is enabled (@see GetCursorPosition()).
*
* @return The current mouse pointer position.
*/
virtual
void
AnimatedZoom
(
const
BOX2I
&
aExtents
)
{};
virtual
const
VECTOR2D
&
GetMousePosition
()
const
{
return
m_mousePosition
;
}
virtual
void
WarpCursor
(
const
VECTOR2D
&
aPosition
)
{};
virtual
void
ShowCursor
(
bool
aEnabled
)
{};
/**
* Function GetCursorPosition()
* Returns the current cursor position in the screen coordinates. Note, that it may be
* different from the mouse pointer position if snapping is enabled (@see GetMousePosition()).
*
* @return The current cursor position in screen coordinates.
*/
virtual
const
VECTOR2D
&
GetCursorPosition
()
const
{
return
m_cursorPosition
;
}
/**
* Function SetCursorPosition()
* Allows to move the cursor to a different location.
*
* @param aPosition is the new location expressed in screen coordinates.
*/
virtual
void
SetCursorPosition
(
const
VECTOR2D
&
aPosition
)
{
m_cursorPosition
=
aPosition
;
}
protected
:
/// Pointer to controlled VIEW.
VIEW
*
m_view
;
/// Current mouse position
VECTOR2D
m_mousePosition
;
/// Current cursor position
VECTOR2D
m_cursorPosition
;
/// Should the cursor snap to grid or move freely
bool
m_snappingEnabled
;
/// Flag for grabbing the mouse cursor
bool
m_grabMouse
;
/// Flag for turning on autopanning
bool
m_autoPanEnabled
;
/// Distance from cursor to VIEW edge when panning is active
float
m_autoPanMargin
;
/// How fast is panning when in auto mode
float
m_autoPanSpeed
;
};
}
// namespace KiGfx
...
...
include/view/wx_view_controls.h
View file @
9eb39168
...
...
@@ -54,8 +54,8 @@ public:
void
onWheel
(
wxMouseEvent
&
aEvent
);
void
onMotion
(
wxMouseEvent
&
aEvent
);
void
onButton
(
wxMouseEvent
&
aEvent
);
void
onEnter
(
wxMouseEvent
&
aEvent
);
void
onTimer
(
wxTimerEvent
&
aEvent
);
void
onEnter
(
wxMouseEvent
&
WXUNUSED
(
aEvent
)
);
void
onTimer
(
wxTimerEvent
&
WXUNUSED
(
aEvent
)
);
/**
* Function SetGrabMouse()
...
...
@@ -65,17 +65,6 @@ public:
*/
void
SetGrabMouse
(
bool
aEnabled
);
/**
* Function SetSnapping()
* Enables/disables snapping cursor to grid.
*
* @param aEnabled says whether the opion should be enabled or disabled.
*/
void
SetSnapping
(
bool
aEnabled
)
{
m_snappingEnabled
=
aEnabled
;
}
/**
* Function SetAutoPan()
* Enables/disables autopanning (panning when mouse cursor reaches the panel border).
...
...
@@ -89,29 +78,8 @@ public:
m_state
=
IDLE
;
}
/**
* Function GetMousePosition()
* Returns the current mouse pointer position in the screen coordinates. Note, that it may be
* different from the cursor position if snapping is enabled (@see GetCursorPosition()).
*
* @return The current mouse pointer position.
*/
const
VECTOR2D
&
GetMousePosition
()
const
{
return
m_mousePosition
;
}
/**
* Function GetCursorPosition()
* Returns the current cursor position in the screen coordinates. Note, that it may be
* different from the mouse pointer position if snapping is enabled (@see GetMousePosition()).
*
* @return The current cursor position.
*/
VECTOR2D
GetCursorPosition
()
const
;
private
:
/// Possible states for WX_VIEW_CONTROLS
enum
State
{
IDLE
=
1
,
DRAG_PANNING
,
...
...
@@ -131,24 +99,6 @@ private:
/// Current state of VIEW_CONTROLS
State
m_state
;
/// Current mouse position
VECTOR2D
m_mousePosition
;
/// Flag for grabbing the mouse cursor
bool
m_grabMouse
;
/// Should the cursor snap to grid or move freely
bool
m_snappingEnabled
;
/// Flag for turning on autopanning
bool
m_autoPanEnabled
;
/// Distance from cursor to VIEW edge when panning is active
float
m_autoPanMargin
;
/// How fast is panning when in auto mode
float
m_autoPanSpeed
;
/// Panel that is affected by VIEW_CONTROLS
wxWindow
*
m_parentPanel
;
...
...
include/worksheet_shape_builder.h
View file @
9eb39168
...
...
@@ -39,7 +39,6 @@ protected:
// to the parent WORKSHEET_DATAITEM item,
// in page layout editor
protected
:
WS_DRAW_ITEM_BASE
(
WORKSHEET_DATAITEM
*
aParent
,
WS_DRAW_TYPE
aType
,
EDA_COLOR_T
aColor
)
{
...
...
@@ -53,8 +52,8 @@ public:
virtual
~
WS_DRAW_ITEM_BASE
()
{}
// Accessors:
EDA_COLOR_T
GetColor
()
{
return
m_color
;
}
WS_DRAW_TYPE
GetType
()
{
return
m_type
;
};
EDA_COLOR_T
GetColor
()
const
{
return
m_color
;
}
WS_DRAW_TYPE
GetType
()
const
{
return
m_type
;
};
WORKSHEET_DATAITEM
*
GetParent
()
{
return
m_parent
;
}
...
...
include/wxBasePcbFrame.h
View file @
9eb39168
...
...
@@ -174,6 +174,8 @@ public:
return
m_Pcb
;
}
void
ViewReloadBoard
(
const
BOARD
*
aBoard
)
const
;
// General
virtual
void
OnCloseWindow
(
wxCloseEvent
&
Event
)
=
0
;
virtual
void
RedrawActiveWindow
(
wxDC
*
DC
,
bool
EraseBg
)
{
}
...
...
@@ -671,6 +673,8 @@ public:
void
OnUpdateSelectGrid
(
wxUpdateUIEvent
&
aEvent
);
void
OnUpdateSelectZoom
(
wxUpdateUIEvent
&
aEvent
);
virtual
void
UseGalCanvas
(
bool
aEnable
);
DECLARE_EVENT_TABLE
()
};
...
...
include/wxstruct.h
View file @
9eb39168
...
...
@@ -452,8 +452,6 @@ protected:
wxOverlay
m_overlay
;
#endif
protected
:
void
SetScreen
(
BASE_SCREEN
*
aScreen
)
{
m_currentScreen
=
aScreen
;
}
/**
...
...
@@ -692,6 +690,12 @@ public:
*/
void
RedrawScreen2
(
const
wxPoint
&
posBefore
);
/**
* Function RefreshCanvas
* Depending on the current state of GAL - it refreshes the default canvas of the GAL canvas.
*/
void
RefreshCanvas
();
/**
* Function Zoom_Automatique
* redraws the screen with best zoom level and the best centering
...
...
@@ -899,7 +903,7 @@ public:
*
* @param aEnable True for GAL-based canvas, false for standard canvas.
*/
void
UseGalCanvas
(
bool
aEnable
);
v
irtual
v
oid
UseGalCanvas
(
bool
aEnable
);
/**
* Function IsNewCanvasActive
...
...
pcbnew/CMakeLists.txt
View file @
9eb39168
...
...
@@ -221,6 +221,7 @@ set(PCBNEW_CLASS_SRCS
tools/selection_tool.cpp
tools/selection_area.cpp
tools/move_tool.cpp
tools/pcb_tools.cpp
)
...
...
pcbnew/autorouter/automove.cpp
View file @
9eb39168
...
...
@@ -293,7 +293,7 @@ void PCB_EDIT_FRAME::AutoMoveModulesOnPcb( bool PlaceModulesHorsPcb )
if
(
newList
.
GetCount
()
)
SaveCopyInUndoList
(
newList
,
UR_CHANGED
);
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
pcbnew/basepcbframe.cpp
View file @
9eb39168
...
...
@@ -136,31 +136,44 @@ void PCB_BASE_FRAME::SetBoard( BOARD* aBoard )
if
(
m_galCanvas
)
{
KiGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
ViewReloadBoard
(
m_Pcb
);
// update the tool manager with the new board and its view.
if
(
m_toolManager
)
m_toolManager
->
SetEnvironment
(
m_Pcb
,
view
,
m_galCanvas
->
GetViewControls
(),
this
);
}
}
void
PCB_BASE_FRAME
::
ViewReloadBoard
(
const
BOARD
*
aBoard
)
const
{
KiGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
view
->
Clear
();
// All of PCB drawing elements should be added to the VIEW
// in order to be displayed
// Load zones
for
(
int
i
=
0
;
i
<
m_Pcb
->
GetAreaCount
();
++
i
)
for
(
int
i
=
0
;
i
<
aBoard
->
GetAreaCount
();
++
i
)
{
view
->
Add
(
(
KiGfx
::
VIEW_ITEM
*
)
(
m_Pcb
->
GetArea
(
i
)
)
);
view
->
Add
(
(
KiGfx
::
VIEW_ITEM
*
)
(
aBoard
->
GetArea
(
i
)
)
);
}
// Load drawings
for
(
BOARD_ITEM
*
drawing
=
m_Pcb
->
m_Drawings
;
drawing
;
drawing
=
drawing
->
Next
()
)
for
(
BOARD_ITEM
*
drawing
=
aBoard
->
m_Drawings
;
drawing
;
drawing
=
drawing
->
Next
()
)
{
view
->
Add
(
drawing
);
}
// Load tracks
for
(
TRACK
*
track
=
m_Pcb
->
m_Track
;
track
;
track
=
track
->
Next
()
)
for
(
TRACK
*
track
=
aBoard
->
m_Track
;
track
;
track
=
track
->
Next
()
)
{
view
->
Add
(
track
);
}
// Load modules and its additional elements
for
(
MODULE
*
module
=
m_Pcb
->
m_Modules
;
module
;
module
=
module
->
Next
()
)
for
(
MODULE
*
module
=
aBoard
->
m_Modules
;
module
;
module
=
module
->
Next
()
)
{
// Load module's pads
for
(
D_PAD
*
pad
=
module
->
Pads
().
GetFirst
();
pad
;
pad
=
pad
->
Next
()
)
...
...
@@ -184,20 +197,15 @@ void PCB_BASE_FRAME::SetBoard( BOARD* aBoard )
}
// Segzones (equivalent of ZONE_CONTAINER for legacy boards)
for
(
SEGZONE
*
zone
=
m_Pcb
->
m_Zone
;
zone
;
zone
=
zone
->
Next
()
)
for
(
SEGZONE
*
zone
=
aBoard
->
m_Zone
;
zone
;
zone
=
zone
->
Next
()
)
{
view
->
Add
(
zone
);
}
view
->
RecacheAllItems
(
true
);
if
(
m_galCanvasActive
)
m_galCanvas
->
Refresh
();
// update the tool manager with the new board and its view.
if
(
m_toolManager
)
m_toolManager
->
SetEnvironment
(
m_Pcb
,
view
,
m_galCanvas
->
GetViewControls
(),
this
);
}
}
...
...
@@ -431,7 +439,7 @@ void PCB_BASE_FRAME::SwitchLayer( wxDC* DC, LAYER_NUM layer )
GetScreen
()
->
m_Active_Layer
=
layer
;
if
(
DisplayOpt
.
ContrastModeDisplay
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
@@ -455,10 +463,7 @@ void PCB_BASE_FRAME::OnTogglePadDrawMode( wxCommandEvent& aEvent )
settings
->
LoadDisplayOptions
(
DisplayOpt
);
m_galCanvas
->
GetView
()
->
RecacheAllItems
(
true
);
if
(
IsGalCanvasActive
()
)
m_galCanvas
->
Refresh
();
else
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
@@ -526,6 +531,14 @@ void PCB_BASE_FRAME::OnUpdateSelectZoom( wxUpdateUIEvent& aEvent )
}
void
PCB_BASE_FRAME
::
UseGalCanvas
(
bool
aEnable
)
{
EDA_DRAW_FRAME
::
UseGalCanvas
(
aEnable
);
ViewReloadBoard
(
m_Pcb
);
}
void
PCB_BASE_FRAME
::
ProcessItemSelection
(
wxCommandEvent
&
aEvent
)
{
int
id
=
aEvent
.
GetId
();
...
...
@@ -625,8 +638,8 @@ void PCB_BASE_FRAME::SetToolID( int aId, int aCursor, const wxString& aToolMsg )
// must do this after the tool has been set, otherwise pad::Draw() does
// not show proper color when DisplayOpt.ContrastModeDisplay is true.
if
(
redraw
&&
m_canvas
)
m_canvas
->
Refresh
();
if
(
redraw
&&
m_canvas
)
RefreshCanvas
();
}
...
...
@@ -831,6 +844,7 @@ void PCB_BASE_FRAME::LoadSettings()
view
->
SetRequired
(
ITEM_GAL_LAYER
(
PADS_NETNAMES_VISIBLE
),
ITEM_GAL_LAYER
(
PADS_VISIBLE
)
);
view
->
SetRequired
(
ITEM_GAL_LAYER
(
PAD_FR_NETNAMES_VISIBLE
),
ITEM_GAL_LAYER
(
PAD_FR_VISIBLE
)
);
view
->
SetRequired
(
ITEM_GAL_LAYER
(
PAD_BK_NETNAMES_VISIBLE
),
ITEM_GAL_LAYER
(
PAD_BK_VISIBLE
)
);
view
->
SetLayerTarget
(
ITEM_GAL_LAYER
(
SELECTION
),
KiGfx
::
TARGET_OVERLAY
);
view
->
SetLayerTarget
(
ITEM_GAL_LAYER
(
GP_OVERLAY
),
KiGfx
::
TARGET_OVERLAY
);
// Apply layer coloring scheme & display options
...
...
pcbnew/board_items_to_polygon_shape_transform.cpp
View file @
9eb39168
...
...
@@ -143,7 +143,7 @@ void MODULE::TransformGraphicShapesWithClearanceToPolygonSet(
break
;
default
:
D
(
printf
(
"Error: Shape %d not implemented!
\n
"
,
D
BG
(
printf
(
"Error: Shape %d not implemented!
\n
"
,
outline
->
GetShape
()
);
)
break
;
}
...
...
pcbnew/board_undo_redo.cpp
View file @
9eb39168
...
...
@@ -367,7 +367,7 @@ void PCB_EDIT_FRAME::SaveCopyInUndoList( BOARD_ITEM* aItem,
if
(
aItem
->
Type
()
==
PCB_MODULE_T
)
if
(
((
MODULE
*
)
aItem
)
->
GetFlags
()
&
MODULE_to_PLACE
)
break
;
m_canvas
->
Refresh
();
RefreshCanvas
();
#endif
case
UR_MOVED
:
case
UR_FLIPPED
:
...
...
@@ -622,7 +622,7 @@ void PCB_EDIT_FRAME::GetBoardFromUndoList( wxCommandEvent& event )
GetScreen
()
->
PushCommandToRedoList
(
List
);
OnModify
();
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
@@ -650,7 +650,7 @@ void PCB_EDIT_FRAME::GetBoardFromRedoList( wxCommandEvent& event )
GetScreen
()
->
PushCommandToUndoList
(
List
);
OnModify
();
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
pcbnew/class_dimension.cpp
View file @
9eb39168
...
...
@@ -495,7 +495,7 @@ void DIMENSION::ViewGetLayers( int aLayers[], int& aCount ) const
aLayers
[
0
]
=
m_Layer
;
// On the general purpose overlay there is a selection box displayed
aLayers
[
1
]
=
ITEM_GAL_LAYER
(
GP_OVERLAY
);
aLayers
[
1
]
=
ITEM_GAL_LAYER
(
SELECTION
);
aCount
=
2
;
}
...
...
pcbnew/class_module.cpp
View file @
9eb39168
...
...
@@ -1028,5 +1028,5 @@ void MODULE::SetOrientation( double newangle )
void
MODULE
::
ViewGetLayers
(
int
aLayers
[],
int
&
aCount
)
const
{
aCount
=
1
;
aLayers
[
0
]
=
ITEM_GAL_LAYER
(
GP_OVERLAY
);
// Selection box
aLayers
[
0
]
=
ITEM_GAL_LAYER
(
SELECTION
);
// Selection box
}
pcbnew/class_pcb_layer_widget.cpp
View file @
9eb39168
...
...
@@ -346,7 +346,7 @@ void PCB_LAYER_WIDGET::OnLayerColorChange( LAYER_NUM aLayer, EDA_COLOR_T aColor
{
myframe
->
GetBoard
()
->
SetLayerColor
(
aLayer
,
aColor
);
myframe
->
ReCreateLayerBox
(
NULL
);
myframe
->
GetCanvas
()
->
Refresh
();
myframe
->
RefreshCanvas
();
}
...
...
@@ -359,7 +359,7 @@ bool PCB_LAYER_WIDGET::OnLayerSelect( LAYER_NUM aLayer )
if
(
m_alwaysShowActiveCopperLayer
)
OnLayerSelected
();
else
if
(
DisplayOpt
.
ContrastModeDisplay
)
myframe
->
GetCanvas
()
->
Refresh
();
myframe
->
RefreshCanvas
();
return
true
;
}
...
...
@@ -393,7 +393,7 @@ void PCB_LAYER_WIDGET::OnLayerVisible( LAYER_NUM aLayer, bool isVisible, bool is
brd
->
SetVisibleLayers
(
visibleLayers
);
EDA_DRAW_PANEL_GAL
*
galCanvas
=
myframe
->
GetGalCanvas
();
EDA_DRAW_PANEL_GAL
*
galCanvas
=
myframe
->
GetGalCanvas
();
if
(
galCanvas
)
{
KiGfx
::
VIEW
*
view
=
galCanvas
->
GetView
();
...
...
@@ -401,18 +401,13 @@ void PCB_LAYER_WIDGET::OnLayerVisible( LAYER_NUM aLayer, bool isVisible, bool is
}
if
(
isFinal
)
{
if
(
myframe
->
IsGalCanvasActive
()
)
galCanvas
->
Refresh
();
else
myframe
->
GetCanvas
()
->
Refresh
();
}
myframe
->
RefreshCanvas
();
}
void
PCB_LAYER_WIDGET
::
OnRenderColorChange
(
int
aId
,
EDA_COLOR_T
aColor
)
{
myframe
->
GetBoard
()
->
SetVisibleElementColor
(
aId
,
aColor
);
myframe
->
GetCanvas
()
->
Refresh
();
myframe
->
RefreshCanvas
();
}
void
PCB_LAYER_WIDGET
::
OnRenderEnable
(
int
aId
,
bool
isEnabled
)
...
...
@@ -430,7 +425,7 @@ void PCB_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled )
if
(
myframe
->
IsGalCanvasActive
()
)
galCanvas
->
Refresh
();
else
myframe
->
GetCanvas
()
->
Refresh
();
myframe
->
RefreshCanvas
();
}
//-----</LAYER_WIDGET callbacks>------------------------------------------
pcbnew/class_pcb_text.cpp
View file @
9eb39168
...
...
@@ -231,7 +231,7 @@ void TEXTE_PCB::ViewGetLayers( int aLayers[], int& aCount ) const
aLayers
[
0
]
=
m_Layer
;
// On the general purpose overlay there is a selection box displayed
aLayers
[
1
]
=
ITEM_GAL_LAYER
(
GP_OVERLAY
);
aLayers
[
1
]
=
ITEM_GAL_LAYER
(
SELECTION
);
aCount
=
2
;
}
pcbnew/class_text_mod.cpp
View file @
9eb39168
...
...
@@ -87,6 +87,22 @@ TEXTE_MODULE::~TEXTE_MODULE()
}
void
TEXTE_MODULE
::
Rotate
(
const
wxPoint
&
aRotCentre
,
double
aAngle
)
{
RotatePoint
(
&
m_Pos
,
aRotCentre
,
aAngle
);
m_Orient
+=
aAngle
;
NORMALIZE_ANGLE_360
(
m_Orient
);
}
void
TEXTE_MODULE
::
Flip
(
const
wxPoint
&
aCentre
)
{
m_Pos
.
y
=
aCentre
.
y
-
(
m_Pos
.
y
-
aCentre
.
y
);
SetLayer
(
FlipLayer
(
GetLayer
()
)
);
m_Mirror
=
!
m_Mirror
;
}
void
TEXTE_MODULE
::
Copy
(
TEXTE_MODULE
*
source
)
{
if
(
source
==
NULL
)
...
...
@@ -457,7 +473,7 @@ void TEXTE_MODULE::ViewGetLayers( int aLayers[], int& aCount ) const
}
// On the general purpose overlay there is a selection box displayed
aLayers
[
1
]
=
ITEM_GAL_LAYER
(
GP_OVERLAY
);
aLayers
[
1
]
=
ITEM_GAL_LAYER
(
SELECTION
);
aCount
=
2
;
}
pcbnew/class_text_mod.h
View file @
9eb39168
...
...
@@ -89,6 +89,15 @@ public:
m_Pos
=
aPos
;
}
void
Move
(
const
wxPoint
&
aMoveVector
)
{
m_Pos
+=
aMoveVector
;
}
void
Rotate
(
const
wxPoint
&
aRotCentre
,
double
aAngle
);
void
Flip
(
const
wxPoint
&
aCentre
);
TEXTE_MODULE
*
Next
()
const
{
return
(
TEXTE_MODULE
*
)
Pnext
;
}
TEXTE_MODULE
*
Back
()
const
{
return
(
TEXTE_MODULE
*
)
Pback
;
}
...
...
pcbnew/deltrack.cpp
View file @
9eb39168
...
...
@@ -55,7 +55,7 @@ TRACK* PCB_EDIT_FRAME::Delete_Segment( wxDC* DC, TRACK* aTrack )
{
LAYER_NUM
previous_layer
=
getActiveLayer
();
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
)
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
)
// Delete the current trace
ShowNewTrackWhenMovingCursor
(
m_canvas
,
DC
,
wxDefaultPosition
,
false
);
...
...
@@ -215,7 +215,7 @@ void PCB_EDIT_FRAME::Remove_One_Track( wxDC* DC, TRACK* pt_segm )
next_track
=
tracksegment
->
Next
();
tracksegment
->
SetState
(
BUSY
,
false
);
D
(
std
::
cout
<<
__func__
<<
": track "
<<
tracksegment
<<
" status="
\
D
BG
(
std
::
cout
<<
__func__
<<
": track "
<<
tracksegment
<<
" status="
\
<<
TO_UTF8
(
TRACK
::
ShowState
(
tracksegment
->
GetStatus
()
)
)
\
<<
std
::
endl
;
)
...
...
pcbnew/dialogs/dialog_display_options.cpp
View file @
9eb39168
...
...
@@ -180,7 +180,7 @@ void DIALOG_DISPLAY_OPTIONS::OnOkClick(wxCommandEvent& event)
if
(
m_Parent
->
IsGalCanvasActive
()
)
m_Parent
->
GetGalCanvas
()
->
Refresh
();
else
m_Parent
->
GetCanvas
()
->
Refresh
();
m_Parent
->
RefreshCanvas
();
EndModal
(
1
);
}
pcbnew/dialogs/dialog_drc.cpp
View file @
9eb39168
...
...
@@ -548,7 +548,7 @@ void DIALOG_DRC_CONTROL::OnUnconnectedSelectionEvent( wxCommandEvent& event )
void
DIALOG_DRC_CONTROL
::
RedrawDrawPanel
()
{
m_Parent
->
GetCanvas
()
->
Refresh
();
m_Parent
->
RefreshCanvas
();
}
...
...
pcbnew/dialogs/dialog_fp_lib_table.cpp
View file @
9eb39168
...
...
@@ -252,7 +252,7 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
wxArrayInt
cols
=
m_cur_grid
->
GetSelectedCols
();
wxArrayInt
rows
=
m_cur_grid
->
GetSelectedRows
();
D
(
printf
(
"topLeft.Count():%zd botRight:Count():%zd
\n
"
,
topLeft
.
Count
(),
botRight
.
Count
()
);)
D
BG
(
printf
(
"topLeft.Count():%zd botRight:Count():%zd
\n
"
,
topLeft
.
Count
(),
botRight
.
Count
()
);)
if
(
topLeft
.
Count
()
&&
botRight
.
Count
()
)
{
...
...
@@ -284,7 +284,7 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
selColCount
=
0
;
}
// D(printf("selRowStart:%d selColStart:%d selRowCount:%d selColCount:%d\n", selRowStart, selColStart, selRowCount, selColCount );)
// D
BG
(printf("selRowStart:%d selColStart:%d selRowCount:%d selColCount:%d\n", selRowStart, selColStart, selRowCount, selColCount );)
}
void
rightClickCellPopupMenu
()
...
...
@@ -353,7 +353,7 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
break
;
case
ID_PASTE
:
D
(
printf
(
"paste
\n
"
);)
D
BG
(
printf
(
"paste
\n
"
);)
// assume format came from a spreadsheet or us.
if
(
wxTheClipboard
->
Open
()
)
{
...
...
@@ -471,7 +471,7 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
m_cur_grid
->
SetGridCursor
(
curRow
,
curCol
);
}
D
(
printf
(
"%s
\n
"
,
__func__
);)
D
BG
(
printf
(
"%s
\n
"
,
__func__
);)
}
void
onCancelButtonClick
(
wxCommandEvent
&
event
)
...
...
@@ -522,7 +522,7 @@ class DIALOG_FP_LIB_TABLE : public DIALOG_FP_LIB_TABLE_BASE
m_cur_row
=
event
.
GetRow
();
m_cur_col
=
event
.
GetCol
();
D
(
printf
(
"change cursor(%d,%d)
\n
"
,
m_cur_row
,
m_cur_col
);)
D
BG
(
printf
(
"change cursor(%d,%d)
\n
"
,
m_cur_row
,
m_cur_col
);)
// somebody else wants this
event
.
Skip
();
...
...
pcbnew/dialogs/dialog_general_options.cpp
View file @
9eb39168
...
...
@@ -185,7 +185,7 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
if
(
state
&&
(
GetBoard
()
->
m_Status_Pcb
&
LISTE_RATSNEST_ITEM_OK
)
==
0
)
Compile_Ratsnest
(
NULL
,
true
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_TB_OPTIONS_SHOW_MODULE_RATSNEST
:
...
...
@@ -200,35 +200,35 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
DisplayOpt
.
DisplayZonesMode
=
0
;
recache
=
true
;
if
(
!
m_galCanvasActive
)
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_TB_OPTIONS_SHOW_ZONES_DISABLE
:
DisplayOpt
.
DisplayZonesMode
=
1
;
recache
=
true
;
if
(
!
m_galCanvasActive
)
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_TB_OPTIONS_SHOW_ZONES_OUTLINES_ONLY
:
DisplayOpt
.
DisplayZonesMode
=
2
;
recache
=
true
;
if
(
!
m_galCanvasActive
)
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_TB_OPTIONS_SHOW_VIAS_SKETCH
:
m_DisplayViaFill
=
DisplayOpt
.
DisplayViaFill
=
!
state
;
recache
=
true
;
if
(
!
m_galCanvasActive
)
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_TB_OPTIONS_SHOW_TRACKS_SKETCH
:
m_DisplayPcbTrackFill
=
DisplayOpt
.
DisplayPcbTrackFill
=
!
state
;
recache
=
true
;
if
(
!
m_galCanvasActive
)
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_TB_OPTIONS_SHOW_HIGH_CONTRAST_MODE
:
...
...
@@ -244,7 +244,7 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
if
(
m_galCanvasActive
)
m_galCanvas
->
Refresh
();
else
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
}
...
...
pcbnew/dialogs/dialog_global_deletion.cpp
View file @
9eb39168
...
...
@@ -182,7 +182,7 @@ void DIALOG_GLOBAL_DELETION::AcceptPcbDelete( )
m_Parent
->
Compile_Ratsnest
(
NULL
,
true
);
}
m_Parent
->
GetCanvas
()
->
Refresh
();
m_Parent
->
RefreshCanvas
();
m_Parent
->
OnModify
();
EndModal
(
1
);
...
...
pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp
View file @
9eb39168
...
...
@@ -206,7 +206,7 @@ void DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::OnOkClick( wxCommandEvent& event )
EndModal
(
1
);
if
(
change
)
m_Parent
->
GetCanvas
()
->
Refresh
();
m_Parent
->
RefreshCanvas
();
}
...
...
pcbnew/dialogs/dialog_global_modules_fields_edition.cpp
View file @
9eb39168
...
...
@@ -136,7 +136,7 @@ void PCB_EDIT_FRAME::OnResetModuleTextSizes( wxCommandEvent& event )
DIALOG_GLOBAL_MODULES_FIELDS_EDITION
dlg
(
this
);
dlg
.
ShowModal
();
m_canvas
->
Refresh
();
RefreshCanvas
();
}
void
PCB_BASE_FRAME
::
ResetModuleTextSizes
(
const
wxString
&
aFilter
,
bool
aRef
,
...
...
pcbnew/dialogs/dialog_orient_footprints.cpp
View file @
9eb39168
...
...
@@ -104,7 +104,7 @@ void PCB_EDIT_FRAME::OnOrientFootprints( wxCommandEvent& event )
if
(
ReOrientModules
(
text
,
dlg
.
GetOrientation
(),
dlg
.
ApplyToLockedModules
()
)
)
{
m_canvas
->
Refresh
();
RefreshCanvas
();
Compile_Ratsnest
(
NULL
,
true
);
}
}
...
...
pcbnew/dialogs/dialog_set_grid.cpp
View file @
9eb39168
...
...
@@ -216,7 +216,7 @@ bool PCB_BASE_FRAME::InvokeDialogGrid()
if
(
GetScreen
()
->
GetGridId
()
==
ID_POPUP_GRID_USER
)
GetScreen
()
->
SetGrid
(
ID_POPUP_GRID_USER
);
m_canvas
->
Refresh
();
RefreshCanvas
();
return
true
;
}
...
...
pcbnew/eagle_plugin.cpp
View file @
9eb39168
...
...
@@ -2674,7 +2674,7 @@ LAYER_NUM EAGLE_PLUGIN::kicad_layer( int aEagleLayer ) const
case
95
:
kiLayer
=
ECO1_N
;
break
;
case
96
:
kiLayer
=
ECO2_N
;
break
;
default
:
D
(
printf
(
"unsupported eagle layer: %d
\n
"
,
aEagleLayer
);)
D
BG
(
printf
(
"unsupported eagle layer: %d
\n
"
,
aEagleLayer
);)
kiLayer
=
-
1
;
break
;
// some layers do not map to KiCad
}
}
...
...
pcbnew/edit.cpp
View file @
9eb39168
...
...
@@ -399,7 +399,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
GetDesignSettings
().
m_CurrentViaType
=
v_type
;
if
(
DisplayOpt
.
ContrastModeDisplay
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
break
;
...
...
@@ -572,7 +572,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
case
ID_POPUP_PCB_FILL_ALL_ZONES
:
m_canvas
->
MoveCursorToCrossHair
();
Fill_All_Zones
(
this
);
m_canvas
->
Refresh
();
RefreshCanvas
();
SetMsgPanel
(
GetBoard
()
);
break
;
...
...
@@ -584,7 +584,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
TestNetConnection
(
NULL
,
zone_container
->
GetNet
()
);
OnModify
();
SetMsgPanel
(
GetBoard
()
);
m_canvas
->
Refresh
();
RefreshCanvas
();
}
SetCurItem
(
NULL
);
break
;
...
...
@@ -604,7 +604,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
TestForActiveLinksInRatsnest
(
0
);
// Recalculate the active ratsnest, i.e. the unconnected links
OnModify
();
SetMsgPanel
(
GetBoard
()
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_PCB_FILL_ZONE
:
...
...
@@ -612,7 +612,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
Fill_Zone
(
(
ZONE_CONTAINER
*
)
GetCurItem
()
);
TestNetConnection
(
NULL
,
(
(
ZONE_CONTAINER
*
)
GetCurItem
()
)
->
GetNet
()
);
SetMsgPanel
(
GetBoard
()
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST
:
...
...
@@ -1040,7 +1040,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
Delete_Drawings_All_Layer
(
GetCurItem
()
->
GetLayer
()
);
SetCurItem
(
NULL
);
m_canvas
->
MoveCursorToCrossHair
();
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_PCB_EDIT_DRAWING
:
...
...
@@ -1287,7 +1287,7 @@ void PCB_EDIT_FRAME::SwitchLayer( wxDC* DC, LAYER_NUM layer )
if
(
Other_Layer_Route
(
(
TRACK
*
)
GetScreen
()
->
GetCurItem
(),
DC
)
)
{
if
(
DisplayOpt
.
ContrastModeDisplay
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
// if the via was allowed by DRC, then the layer swap has already
...
...
@@ -1306,7 +1306,7 @@ void PCB_EDIT_FRAME::SwitchLayer( wxDC* DC, LAYER_NUM layer )
setActiveLayer
(
layer
);
if
(
DisplayOpt
.
ContrastModeDisplay
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
pcbnew/edit_pcb_text.cpp
View file @
9eb39168
...
...
@@ -126,7 +126,7 @@ void PCB_EDIT_FRAME::Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
TextePcb
->
ClearFlags
();
#ifdef USE_WX_OVERLAY
m_canvas
->
Refresh
();
RefreshCanvas
();
#endif
}
...
...
@@ -144,7 +144,7 @@ void PCB_EDIT_FRAME::StartMoveTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC, bool aE
SetMsgPanel
(
aTextePcb
);
#ifdef USE_WX_OVERLAY
m_canvas
->
Refresh
();
RefreshCanvas
();
#endif
GetScreen
()
->
SetCrossHairPosition
(
aTextePcb
->
GetTextPosition
()
);
...
...
@@ -257,7 +257,7 @@ void PCB_EDIT_FRAME::Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
OnModify
();
#ifdef USE_WX_OVERLAY
m_canvas
->
Refresh
();
RefreshCanvas
();
#endif
}
...
...
@@ -281,6 +281,6 @@ void PCB_EDIT_FRAME::FlipTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC )
OnModify
();
#ifdef USE_WX_OVERLAY
m_canvas
->
Refresh
();
RefreshCanvas
();
#endif
}
pcbnew/editmod.cpp
View file @
9eb39168
...
...
@@ -68,7 +68,7 @@ void PCB_EDIT_FRAME::InstallModuleOptionsFrame( MODULE* Module, wxDC* DC )
#ifdef __WXMAC__
// If something edited, push a refresh request
if
(
retvalue
==
0
||
retvalue
==
1
)
m_canvas
->
Refresh
();
RefreshCanvas
();
#endif
if
(
retvalue
==
2
)
...
...
@@ -120,7 +120,7 @@ void FOOTPRINT_EDIT_FRAME::RemoveStruct( EDA_ITEM* Item )
case
PCB_MODULE_EDGE_T
:
Delete_Edge_Module
(
(
EDGE_MODULE
*
)
Item
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
PCB_MODULE_T
:
...
...
pcbnew/editrack.cpp
View file @
9eb39168
...
...
@@ -153,11 +153,11 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC )
GetBoard
()
->
SetHighLightNet
(
zone
->
GetNet
()
);
}
D
(
g_CurrentTrackList
.
VerifyListIntegrity
()
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
()
);
BuildAirWiresTargetsList
(
LockPoint
,
wxPoint
(
0
,
0
),
true
);
D
(
g_CurrentTrackList
.
VerifyListIntegrity
()
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
()
);
GetBoard
()
->
HighLightON
();
GetBoard
()
->
DrawHighLight
(
m_canvas
,
aDC
,
GetBoard
()
->
GetHighLightNetCode
()
);
...
...
@@ -191,7 +191,7 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC )
// Create 2nd segment
g_CurrentTrackList
.
PushBack
(
(
TRACK
*
)
g_CurrentTrackSegment
->
Clone
()
);
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
g_CurrentTrackSegment
->
start
=
g_FirstTrackSegment
;
g_FirstTrackSegment
->
end
=
g_CurrentTrackSegment
;
...
...
@@ -199,7 +199,7 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC )
g_FirstTrackSegment
->
SetState
(
BEGIN_ONPAD
|
END_ONPAD
,
false
);
}
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
SetMsgPanel
(
g_CurrentTrackSegment
);
SetCurItem
(
g_CurrentTrackSegment
,
false
);
...
...
@@ -246,11 +246,11 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC )
if
(
CanCreateNewSegment
)
{
// Erase old track on screen
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
ShowNewTrackWhenMovingCursor
(
m_canvas
,
aDC
,
wxDefaultPosition
,
false
);
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
if
(
g_Raccord_45_Auto
)
Add45DegreeSegment
(
aDC
);
...
...
@@ -273,7 +273,7 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC )
newTrack
->
start
=
previousTrack
->
end
;
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
newTrack
->
SetStart
(
newTrack
->
GetEnd
()
);
...
...
@@ -282,7 +282,7 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC )
if
(
!
GetBoard
()
->
GetDesignSettings
().
m_UseConnectedTrackWidth
)
newTrack
->
SetWidth
(
GetBoard
()
->
GetCurrentTrackWidth
()
);
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
// Show the new position
ShowNewTrackWhenMovingCursor
(
m_canvas
,
aDC
,
wxDefaultPosition
,
false
);
...
...
@@ -422,7 +422,7 @@ bool PCB_EDIT_FRAME::End_Route( TRACK* aTrack, wxDC* aDC )
// Saving the coordinate of end point of the trace
wxPoint
pos
=
g_CurrentTrackSegment
->
GetEnd
();
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
if
(
Begin_Route
(
aTrack
,
aDC
)
==
NULL
)
return
false
;
...
...
@@ -439,7 +439,7 @@ bool PCB_EDIT_FRAME::End_Route( TRACK* aTrack, wxDC* aDC )
* }
*/
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
/* The track here is now chained to the list of track segments.
...
...
@@ -670,7 +670,7 @@ inline void DrawViaCirclesWhenEditingNewTrack( EDA_RECT* aPanelClipBox,
void
ShowNewTrackWhenMovingCursor
(
EDA_DRAW_PANEL
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aPosition
,
bool
aErase
)
{
// D( g_CurrentTrackList.VerifyListIntegrity(); );
// D
BG
( g_CurrentTrackList.VerifyListIntegrity(); );
PCB_SCREEN
*
screen
=
(
PCB_SCREEN
*
)
aPanel
->
GetScreen
();
PCB_BASE_FRAME
*
frame
=
(
PCB_BASE_FRAME
*
)
aPanel
->
GetParent
();
...
...
@@ -764,7 +764,7 @@ void ShowNewTrackWhenMovingCursor( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPo
}
// Redraw the new track
D
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
D
BG
(
g_CurrentTrackList
.
VerifyListIntegrity
();
);
DrawTraces
(
aPanel
,
aDC
,
g_FirstTrackSegment
,
g_CurrentTrackList
.
GetCount
(),
GR_XOR
);
if
(
showTrackClearanceMode
>=
SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS
)
...
...
pcbnew/edtxtmod.cpp
View file @
9eb39168
...
...
@@ -349,7 +349,7 @@ void PCB_BASE_FRAME::ResetTextSize( BOARD_ITEM* aItem, wxDC* aDC )
text
->
SetThickness
(
newThickness
);
if
(
aDC
)
m_canvas
->
Refresh
();
RefreshCanvas
();
OnModify
();
}
pcbnew/event_handlers_tracks_vias_sizes.cpp
View file @
9eb39168
...
...
@@ -118,5 +118,5 @@ void PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event( wxCommandEvent& event )
}*/
//+hp
//Refresh canvas, that we can see changes instantly. I use this because it dont,t throw mouse up-left corner.
m_canvas
->
Refresh
();
RefreshCanvas
();
}
pcbnew/footprint_wizard.cpp
View file @
9eb39168
...
...
@@ -117,7 +117,7 @@ void FOOTPRINT_WIZARD_FRAME::ReloadFootprint()
printf
(
"footprintWizard->GetModule() returns NULL
\n
"
);
}
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
pcbnew/footprint_wizard_frame.cpp
View file @
9eb39168
...
...
@@ -408,7 +408,7 @@ void FOOTPRINT_WIZARD_FRAME::ReCreatePageList()
ReCreateParameterList
();
ReCreateHToolbar
();
DisplayWizardInfos
();
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
@@ -506,7 +506,7 @@ void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event )
return
;
ReCreateParameterList
();
m_canvas
->
Refresh
();
RefreshCanvas
();
DisplayWizardInfos
();
}
...
...
pcbnew/gen_modules_placefile.cpp
View file @
9eb39168
...
...
@@ -376,7 +376,7 @@ int PCB_EDIT_FRAME::DoGenFootprintsPositionFile( const wxString& aFullFileName,
if
(
module
->
GetAttributes
()
&
MOD_VIRTUAL
)
{
D
(
printf
(
"skipping module %s because it's virtual
\n
"
,
D
BG
(
printf
(
"skipping module %s because it's virtual
\n
"
,
TO_UTF8
(
module
->
GetReference
()
)
);)
continue
;
}
...
...
@@ -393,7 +393,7 @@ int PCB_EDIT_FRAME::DoGenFootprintsPositionFile( const wxString& aFullFileName,
}
else
{
D
(
printf
(
"skipping %s because its attribute is not CMS and it has non SMD pins
\n
"
,
D
BG
(
printf
(
"skipping %s because its attribute is not CMS and it has non SMD pins
\n
"
,
TO_UTF8
(
module
->
GetReference
())
)
);
continue
;
}
...
...
pcbnew/hotkeys_board_editor.cpp
View file @
9eb39168
...
...
@@ -357,7 +357,7 @@ void PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosit
DisplayOpt
.
DisplayPcbTrackFill
^=
1
;
DisplayOpt
.
DisplayPcbTrackFill
&=
1
;
m_DisplayPcbTrackFill
=
DisplayOpt
.
DisplayPcbTrackFill
;
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
HK_DELETE
:
...
...
@@ -454,7 +454,7 @@ void PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosit
{
Other_Layer_Route
(
NULL
,
aDC
);
if
(
DisplayOpt
.
ContrastModeDisplay
)
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
}
...
...
@@ -538,7 +538,19 @@ void PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosit
case
HK_SWITCH_HIGHCONTRAST_MODE
:
// switch to high contrast mode and refresh the canvas
DisplayOpt
.
ContrastModeDisplay
=
!
DisplayOpt
.
ContrastModeDisplay
;
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
HK_CANVAS_CAIRO
:
evt_type
=
ID_MENU_CANVAS_CAIRO
;
break
;
case
HK_CANVAS_OPENGL
:
evt_type
=
ID_MENU_CANVAS_OPENGL
;
break
;
case
HK_CANVAS_DEFAULT
:
evt_type
=
ID_MENU_CANVAS_DEFAULT
;
break
;
}
...
...
pcbnew/modedit.cpp
View file @
9eb39168
...
...
@@ -542,7 +542,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
GetScreen
()
->
GetCurItem
()
->
ClearFlags
();
if
(
ret
>
0
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
break
;
...
...
@@ -572,7 +572,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
m_canvas
->
MoveCursorToCrossHair
();
if
(
ret
>
0
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
break
;
...
...
@@ -661,38 +661,38 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
m_canvas
->
MoveCursorToCrossHair
();
if
(
edge
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
break
;
case
ID_POPUP_MODEDIT_EDIT_BODY_ITEM
:
m_canvas
->
MoveCursorToCrossHair
();
InstallFootprintBodyItemPropertiesDlg
(
(
EDGE_MODULE
*
)
GetScreen
()
->
GetCurItem
()
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_MODEDIT_EDIT_WIDTH_CURRENT_EDGE
:
m_canvas
->
MoveCursorToCrossHair
();
Edit_Edge_Width
(
(
EDGE_MODULE
*
)
GetScreen
()
->
GetCurItem
()
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_MODEDIT_EDIT_WIDTH_ALL_EDGE
:
m_canvas
->
MoveCursorToCrossHair
();
Edit_Edge_Width
(
NULL
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_MODEDIT_EDIT_LAYER_CURRENT_EDGE
:
m_canvas
->
MoveCursorToCrossHair
();
Edit_Edge_Layer
(
(
EDGE_MODULE
*
)
GetScreen
()
->
GetCurItem
()
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_MODEDIT_EDIT_LAYER_ALL_EDGE
:
m_canvas
->
MoveCursorToCrossHair
();
Edit_Edge_Layer
(
NULL
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
case
ID_POPUP_PCB_DELETE_EDGE
:
...
...
@@ -775,7 +775,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
}
if
(
redraw
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
pcbnew/modedit_onclick.cpp
View file @
9eb39168
...
...
@@ -97,13 +97,13 @@ void FOOTPRINT_EDIT_FRAME::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
{
End_Edge_Module
(
(
EDGE_MODULE
*
)
item
);
SetCurItem
(
NULL
);
m_canvas
->
Refresh
();
RefreshCanvas
();
}
else
if
(
(
(
EDGE_MODULE
*
)
item
)
->
GetShape
()
==
S_ARC
)
{
End_Edge_Module
(
(
EDGE_MODULE
*
)
item
);
SetCurItem
(
NULL
);
m_canvas
->
Refresh
();
RefreshCanvas
();
}
else
if
(
(
(
EDGE_MODULE
*
)
item
)
->
GetShape
()
==
S_SEGMENT
)
{
...
...
@@ -150,7 +150,7 @@ void FOOTPRINT_EDIT_FRAME::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
// so deselect the active tool
SetToolID
(
ID_NO_TOOL_SELECTED
,
m_canvas
->
GetDefaultCursor
(),
wxEmptyString
);
SetCurItem
(
NULL
);
m_canvas
->
Refresh
();
RefreshCanvas
();
}
break
;
...
...
@@ -436,7 +436,7 @@ void FOOTPRINT_EDIT_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& MousePos )
m_canvas
->
MoveCursorToCrossHair
();
if
(
ret
>
0
)
m_canvas
->
Refresh
();
RefreshCanvas
();
}
break
;
...
...
@@ -448,7 +448,7 @@ void FOOTPRINT_EDIT_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& MousePos )
case
PCB_MODULE_EDGE_T
:
m_canvas
->
MoveCursorToCrossHair
();
InstallFootprintBodyItemPropertiesDlg
(
(
EDGE_MODULE
*
)
item
);
m_canvas
->
Refresh
();
RefreshCanvas
();
break
;
default
:
...
...
@@ -463,7 +463,7 @@ void FOOTPRINT_EDIT_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& MousePos )
{
End_Edge_Module
(
(
EDGE_MODULE
*
)
item
);
SetCurItem
(
NULL
);
m_canvas
->
Refresh
();
RefreshCanvas
();
}
break
;
...
...
pcbnew/modedit_undo_redo.cpp
View file @
9eb39168
...
...
@@ -72,7 +72,7 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event )
SetCurItem
(
NULL
);
OnModify
();
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
@@ -101,5 +101,5 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& event )
SetCurItem
(
NULL
);
OnModify
();
m_canvas
->
Refresh
();
RefreshCanvas
();
}
pcbnew/modules.cpp
View file @
9eb39168
...
...
@@ -285,7 +285,7 @@ bool PCB_EDIT_FRAME::Delete_Module( MODULE* aModule, wxDC* aDC, bool aAskBeforeD
// Redraw the full screen to ensure perfect display of board and ratsnest.
if
(
aDC
)
m_canvas
->
Refresh
();
RefreshCanvas
();
return
true
;
}
...
...
@@ -421,7 +421,7 @@ void PCB_BASE_FRAME::PlaceModule( MODULE* aModule, wxDC* aDC, bool aDoNotRecreat
Compile_Ratsnest
(
aDC
,
true
);
if
(
aDC
)
m_canvas
->
Refresh
();
RefreshCanvas
();
SetMsgPanel
(
aModule
);
}
...
...
@@ -490,7 +490,7 @@ void PCB_BASE_FRAME::Rotate_Module( wxDC* DC, MODULE* module, double angle, bool
}
if
(
module
->
GetFlags
()
==
0
)
// module not in edit: redraw full screen
m_canvas
->
Refresh
();
RefreshCanvas
();
}
}
...
...
pcbnew/modview.cpp
View file @
9eb39168
...
...
@@ -165,7 +165,7 @@ void FOOTPRINT_VIEWER_FRAME::SelectCurrentFootprint( wxCommandEvent& event )
SetCurItem
(
NULL
);
Zoom_Automatique
(
false
);
m_canvas
->
Refresh
();
RefreshCanvas
();
Update3D_Frame
();
m_FootprintList
->
SetStringSelection
(
m_footprintName
);
}
...
...
pcbnew/modview_frame.cpp
View file @
9eb39168
...
...
@@ -411,7 +411,7 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList()
ReCreateFootprintList
();
ReCreateHToolbar
();
DisplayLibInfos
();
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
@@ -477,7 +477,7 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& event )
m_libraryName
=
name
;
ReCreateFootprintList
();
m_canvas
->
Refresh
();
RefreshCanvas
();
DisplayLibInfos
();
ReCreateHToolbar
();
}
...
...
@@ -525,7 +525,7 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList( wxCommandEvent& event )
DisplayLibInfos
();
Zoom_Automatique
(
false
);
m_canvas
->
Refresh
();
RefreshCanvas
();
Update3D_Frame
();
}
}
...
...
pcbnew/move_or_drag_track.cpp
View file @
9eb39168
...
...
@@ -894,7 +894,7 @@ bool PCB_EDIT_FRAME::PlaceDraggedOrMovedTrackSegment( TRACK* Track, wxDC* DC )
if
(
current_net_code
>
0
)
TestNetConnection
(
DC
,
current_net_code
);
m_canvas
->
Refresh
();
RefreshCanvas
();
return
true
;
}
pcbnew/netlist.cpp
View file @
9eb39168
...
...
@@ -109,7 +109,7 @@ void PCB_EDIT_FRAME::ReadPcbNetlist( const wxString& aNetlistFileName,
// Rebuild the board connectivity:
Compile_Ratsnest
(
NULL
,
true
);
SetMsgPanel
(
GetBoard
()
);
m_canvas
->
Refresh
();
RefreshCanvas
();
}
...
...
pcbnew/pcb_painter.cpp
View file @
9eb39168
...
...
@@ -574,10 +574,40 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
break
;
case
PAD_RECT
:
case
PAD_TRAPEZOID
:
m_gal
->
DrawRectangle
(
VECTOR2D
(
-
size
.
x
,
-
size
.
y
),
VECTOR2D
(
size
.
x
,
size
.
y
)
);
break
;
case
PAD_TRAPEZOID
:
{
std
::
deque
<
VECTOR2D
>
pointList
;
wxPoint
corners
[
4
];
VECTOR2D
padSize
=
VECTOR2D
(
aPad
->
GetSize
().
x
,
aPad
->
GetSize
().
y
)
/
2
;
VECTOR2D
deltaPadSize
=
size
-
padSize
;
// = solder[Paste/Mask]Margin or 0
VECTOR2D
delta
=
VECTOR2D
(
aPad
->
GetDelta
().
x
/
2
,
aPad
->
GetDelta
().
y
/
2
);
VECTOR2D
inflate
=
VECTOR2D
(
delta
.
y
*
(
deltaPadSize
.
x
/
size
.
x
),
delta
.
x
*
(
deltaPadSize
.
y
/
size
.
y
)
);
aPad
->
BuildPadPolygon
(
corners
,
wxSize
(
deltaPadSize
.
x
,
deltaPadSize
.
y
),
0.0
);
pointList
.
push_back
(
VECTOR2D
(
corners
[
0
]
)
);
pointList
.
push_back
(
VECTOR2D
(
corners
[
1
]
)
);
pointList
.
push_back
(
VECTOR2D
(
corners
[
2
]
)
);
pointList
.
push_back
(
VECTOR2D
(
corners
[
3
]
)
);
if
(
m_pcbSettings
->
m_sketchModeSelect
[
PADS_VISIBLE
]
)
{
// Add the beginning point to close the outline
pointList
.
push_back
(
pointList
.
front
()
);
m_gal
->
DrawPolyline
(
pointList
);
}
else
{
m_gal
->
DrawPolygon
(
pointList
);
}
}
break
;
case
PAD_CIRCLE
:
m_gal
->
DrawCircle
(
VECTOR2D
(
0.0
,
0.0
),
size
.
x
);
break
;
...
...
@@ -672,7 +702,7 @@ void PCB_PAINTER::draw( const MODULE* aModule )
void
PCB_PAINTER
::
draw
(
const
TEXTE_PCB
*
aText
,
int
aLayer
)
{
if
(
aLayer
==
ITEM_GAL_LAYER
(
GP_OVERLAY
)
)
if
(
aLayer
==
ITEM_GAL_LAYER
(
SELECTION
)
)
{
if
(
aText
->
IsSelected
()
)
drawSelectionBox
(
aText
);
...
...
@@ -696,7 +726,7 @@ void PCB_PAINTER::draw( const TEXTE_PCB* aText, int aLayer )
void
PCB_PAINTER
::
draw
(
const
TEXTE_MODULE
*
aText
,
int
aLayer
)
{
if
(
aLayer
==
ITEM_GAL_LAYER
(
GP_OVERLAY
)
)
if
(
aLayer
==
ITEM_GAL_LAYER
(
SELECTION
)
)
{
if
(
aText
->
IsSelected
()
)
drawSelectionBox
(
aText
);
...
...
@@ -790,7 +820,7 @@ void PCB_PAINTER::draw( const ZONE_CONTAINER* aZone )
void
PCB_PAINTER
::
draw
(
const
DIMENSION
*
aDimension
,
int
aLayer
)
{
if
(
aLayer
==
ITEM_GAL_LAYER
(
GP_OVERLAY
)
)
if
(
aLayer
==
ITEM_GAL_LAYER
(
SELECTION
)
)
{
if
(
aDimension
->
IsSelected
()
)
drawSelectionBox
(
aDimension
);
...
...
pcbnew/pcbframe.cpp
View file @
9eb39168
...
...
@@ -335,7 +335,7 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( wxWindow* parent, const wxString& title,
if
(
screenHeight
<=
900
)
pointSize
=
(
pointSize
*
8
)
/
10
;
m_Layers
=
new
PCB_LAYER_WIDGET
(
this
,
m_
c
anvas
,
pointSize
);
m_Layers
=
new
PCB_LAYER_WIDGET
(
this
,
m_
galC
anvas
,
pointSize
);
m_drc
=
new
DRC
(
this
);
// these 2 objects point to each other
...
...
@@ -792,11 +792,9 @@ void PCB_EDIT_FRAME::setHighContrastLayer( LAYER_NUM aLayer )
rSettings
->
SetActiveLayer
(
ITEM_GAL_LAYER
(
PAD_FR_NETNAMES_VISIBLE
)
);
}
}
view
->
UpdateAllLayersOrder
();
view
->
UpdateAllLayersColor
();
if
(
m_galCanvasActive
)
m_galCanvas
->
Refresh
();
}
}
...
...
pcbnew/pcbnew.cpp
View file @
9eb39168
...
...
@@ -314,6 +314,9 @@ bool EDA_APP::OnInit()
frame
->
SetFocus
();
frame
->
GetCanvas
()
->
SetFocus
();
// Activate the GAL
frame
->
UseGalCanvas
(
true
);
return
true
;
}
...
...
pcbnew/sel_layer.cpp
View file @
9eb39168
...
...
@@ -243,7 +243,7 @@ void PCB_BASE_FRAME::SelectLayerPair()
// because the PAD_SMD pads may change color.
if
(
result
>=
0
&&
DisplayOpt
.
ContrastModeDisplay
)
{
m_canvas
->
Refresh
();
RefreshCanvas
();
}
}
...
...
pcbnew/specctra_export.cpp
View file @
9eb39168
...
...
@@ -601,7 +601,7 @@ PADSTACK* SPECCTRA_DB::makePADSTACK( BOARD* aBoard, D_PAD* aPad )
polygon
->
AppendPoint
(
lowerRight
);
}
D
(
printf
(
"m_DeltaSize: %d,%d
\n
"
,
aPad
->
GetDelta
().
x
,
aPad
->
GetDelta
().
y
);
)
D
BG
(
printf
(
"m_DeltaSize: %d,%d
\n
"
,
aPad
->
GetDelta
().
x
,
aPad
->
GetDelta
().
y
);
)
// this string _must_ be unique for a given physical shape
snprintf
(
name
,
sizeof
(
name
),
"Trapz%sPad_%.6gx%.6g_%c%.6gx%c%.6g_um"
,
...
...
@@ -793,7 +793,7 @@ IMAGE* SPECCTRA_DB::makeIMAGE( BOARD* aBoard, MODULE* aModule )
case
S_RECT
:
case
S_ARC
:
default
:
D
(
printf
(
"makeIMAGE(): unsupported shape %s
\n
"
,
D
BG
(
printf
(
"makeIMAGE(): unsupported shape %s
\n
"
,
TO_UTF8
(
BOARD_ITEM
::
ShowShape
(
(
STROKE_T
)
graphic
->
GetShape
()
)
)
);
)
continue
;
}
...
...
@@ -908,7 +908,7 @@ void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary ) throw( IO_ER
}
else
// remove graphics not on EDGE_N layer
{
D
(
items
[
i
]
->
Show
(
0
,
std
::
cout
);)
D
BG
(
items
[
i
]
->
Show
(
0
,
std
::
cout
);)
++
i
;
}
}
...
...
pcbnew/tools/move_tool.cpp
0 → 100644
View file @
9eb39168
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 CERN
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
* 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 Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <class_board.h>
#include <class_module.h>
#include <tool/tool_manager.h>
#include <view/view_group.h>
#include <view/view_controls.h>
#include "selection_tool.h"
#include "move_tool.h"
using
namespace
KiGfx
;
using
boost
::
optional
;
MOVE_TOOL
::
MOVE_TOOL
()
:
TOOL_INTERACTIVE
(
"pcbnew.InteractiveMove"
),
m_selectionTool
(
NULL
)
{
}
MOVE_TOOL
::~
MOVE_TOOL
()
{
}
void
MOVE_TOOL
::
Reset
()
{
// Find the selection tool, so they can cooperate
TOOL_BASE
*
selectionTool
=
m_toolMgr
->
FindTool
(
std
::
string
(
"pcbnew.InteractiveSelection"
)
);
if
(
selectionTool
)
{
m_selectionTool
=
static_cast
<
SELECTION_TOOL
*>
(
selectionTool
);
}
else
{
wxLogError
(
"pcbnew.InteractiveSelection tool is not available"
);
return
;
}
// the tool launches upon reception of activate ("pcbnew.InteractiveMove")
Go
(
&
MOVE_TOOL
::
Main
,
TOOL_EVENT
(
TC_Command
,
TA_ActivateTool
,
GetName
()
)
);
//"pcbnew.InteractiveMove"));
}
int
MOVE_TOOL
::
Main
(
TOOL_EVENT
&
aEvent
)
{
VECTOR2D
dragPosition
;
bool
dragging
=
false
;
bool
restore
=
false
;
VIEW
*
view
=
m_toolMgr
->
GetView
();
std
::
set
<
BOARD_ITEM
*>
selection
;
VIEW_GROUP
items
(
view
);
view
->
Add
(
&
items
);
m_toolMgr
->
GetViewControls
()
->
SetSnapping
(
true
);
// Main loop: keep receiving events
while
(
OPT_TOOL_EVENT
evt
=
Wait
()
)
{
if
(
evt
->
IsCancel
()
)
{
restore
=
true
;
m_toolMgr
->
PassEvent
();
break
;
// Finish
}
if
(
evt
->
IsDrag
(
MB_Left
)
)
{
if
(
dragging
)
{
// Dragging is alre
VECTOR2D
movement
=
(
evt
->
Position
()
-
dragPosition
);
std
::
set
<
BOARD_ITEM
*>::
iterator
it
,
it_end
;
for
(
it
=
selection
.
begin
(),
it_end
=
selection
.
end
();
it
!=
it_end
;
++
it
)
{
(
*
it
)
->
Move
(
wxPoint
(
movement
.
x
,
movement
.
y
)
);
}
items
.
ViewUpdate
(
VIEW_ITEM
::
GEOMETRY
);
}
else
{
// Begin dragging
selection
=
m_selectionTool
->
GetSelection
();
std
::
set
<
BOARD_ITEM
*>::
iterator
it
;
for
(
it
=
selection
.
begin
();
it
!=
selection
.
end
();
++
it
)
{
viewGroupAdd
(
*
it
,
&
items
);
// but if a MODULE was selected, then we need to redraw all of it's parts
if
(
(
*
it
)
->
Type
()
==
PCB_MODULE_T
)
{
MODULE
*
module
=
static_cast
<
MODULE
*>
(
*
it
);
// Move everything that belongs to the module
for
(
D_PAD
*
pad
=
module
->
Pads
().
GetFirst
();
pad
;
pad
=
pad
->
Next
()
)
viewGroupAdd
(
pad
,
&
items
);
for
(
BOARD_ITEM
*
drawing
=
module
->
GraphicalItems
().
GetFirst
();
drawing
;
drawing
=
drawing
->
Next
()
)
viewGroupAdd
(
drawing
,
&
items
);
viewGroupAdd
(
&
module
->
Reference
(),
&
items
);
viewGroupAdd
(
&
module
->
Value
(),
&
items
);
}
}
items
.
ViewUpdate
(
VIEW_ITEM
::
GEOMETRY
);
dragging
=
true
;
}
dragPosition
=
evt
->
Position
();
}
else
if
(
evt
->
Category
()
==
TC_Mouse
)
// Filter out other events
{
if
(
dragging
)
{
break
;
// Finish
}
}
}
// Clean-up after movement
std
::
deque
<
ITEM_STATE
>::
iterator
it
,
it_end
;
if
(
restore
)
{
// Movement has to be rollbacked, so restore previous state of items
for
(
it
=
m_itemsState
.
begin
(),
it_end
=
m_itemsState
.
end
();
it
!=
it_end
;
++
it
)
it
->
Restore
();
}
else
{
// Apply changes
for
(
it
=
m_itemsState
.
begin
(),
it_end
=
m_itemsState
.
end
();
it
!=
it_end
;
++
it
)
{
it
->
RestoreVisibility
();
it
->
item
->
ViewUpdate
(
VIEW_ITEM
::
GEOMETRY
);
}
}
m_itemsState
.
clear
();
items
.
Clear
();
view
->
Remove
(
&
items
);
m_toolMgr
->
GetViewControls
()
->
SetSnapping
(
false
);
return
0
;
}
void
MOVE_TOOL
::
viewGroupAdd
(
BOARD_ITEM
*
aItem
,
KiGfx
::
VIEW_GROUP
*
aGroup
)
{
// Save the state of the selected items, in case it has to be restored
ITEM_STATE
state
;
state
.
Save
(
aItem
);
m_itemsState
.
push_back
(
state
);
// Add items to the VIEW_GROUP, so they will be displayed on the overlay
// while dragging
aGroup
->
Add
(
aItem
);
// Set the original item as invisible
aItem
->
ViewSetVisible
(
false
);
}
pcbnew/tools/move_tool.h
0 → 100644
View file @
9eb39168
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 CERN
* @author @author Maciej Suminski <maciej.suminski@cern.ch>
*
* 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 Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __MOVE_TOOL_H
#define __MOVE_TOOL_H
#include <math/vector2d.h>
#include <tool/tool_interactive.h>
class
BOARD_ITEM
;
class
SELECTION_TOOL
;
namespace
KiGfx
{
class
VIEW_GROUP
;
}
/**
* Class MOVE_TOOL
* /// TODO DOCS!!
* Our sample move tool: currently supports:
* - pick single objects (click LMB)
* - add objects to existing move (Shift+LMB)
* - draw move box (drag LMB)
*
* WORK IN PROGRESS. CONSIDER AS A DEMO!
*/
class
MOVE_TOOL
:
public
TOOL_INTERACTIVE
{
public
:
MOVE_TOOL
();
~
MOVE_TOOL
();
/**
* Function Reset()
*
* Resets the tool and initializes it.
*/
void
Reset
();
/**
* Function Main()
*
* Main loop in which events are handled.
*/
int
Main
(
TOOL_EVENT
&
aEvent
);
private
:
void
viewGroupAdd
(
BOARD_ITEM
*
aItem
,
KiGfx
::
VIEW_GROUP
*
aGroup
);
/// Structure for (re)storing BOARD_ITEM state
typedef
struct
{
BOARD_ITEM
*
item
;
/// Pointer to the item
VECTOR2D
position
;
/// Original position of the item
bool
visible
;
/// Original visibility flag
void
Save
(
BOARD_ITEM
*
aItem
)
{
wxPoint
pos
=
aItem
->
GetPosition
();
item
=
aItem
;
position
.
x
=
pos
.
x
;
position
.
y
=
pos
.
y
;
visible
=
aItem
->
ViewIsVisible
();
}
void
RestorePosition
()
{
item
->
SetPosition
(
wxPoint
(
position
.
x
,
position
.
y
)
);
}
void
RestoreVisibility
()
{
item
->
ViewSetVisible
(
visible
);
}
void
Restore
()
{
RestorePosition
();
RestoreVisibility
();
}
}
ITEM_STATE
;
/// Selection tool used for obtaining selected items
SELECTION_TOOL
*
m_selectionTool
;
std
::
deque
<
ITEM_STATE
>
m_itemsState
;
};
#endif
pcbnew/tools/pcb_tools.cpp
View file @
9eb39168
...
...
@@ -35,6 +35,7 @@
#include <pcbnew_id.h>
#include "selection_tool.h"
#include "move_tool.h"
#include <router/router_tool.h>
void
PCB_EDIT_FRAME
::
setupTools
()
...
...
@@ -47,6 +48,7 @@ void PCB_EDIT_FRAME::setupTools()
// register our selection tool.
m_toolManager
->
RegisterTool
(
new
SELECTION_TOOL
);
m_toolManager
->
RegisterTool
(
new
ROUTER_TOOL
);
m_toolManager
->
RegisterTool
(
new
MOVE_TOOL
);
}
...
...
pcbnew/tools/selection_tool.cpp
View file @
9eb39168
...
...
@@ -28,6 +28,7 @@
#include <class_drawpanel_gal.h>
#include <class_board.h>
#include <class_board_item.h>
#include <class_track.h>
#include <class_module.h>
#include <wxPcbStruct.h>
...
...
@@ -43,7 +44,7 @@ using namespace KiGfx;
using
boost
::
optional
;
SELECTION_TOOL
::
SELECTION_TOOL
()
:
TOOL_INTERACTIVE
(
"pcbnew.InteractiveSelection"
)
TOOL_INTERACTIVE
(
"pcbnew.InteractiveSelection"
)
,
m_multiple
(
false
)
{
m_selArea
=
new
SELECTION_AREA
;
}
...
...
@@ -68,6 +69,11 @@ void SELECTION_TOOL::Reset()
int
SELECTION_TOOL
::
Main
(
TOOL_EVENT
&
aEvent
)
{
bool
dragging
=
false
;
bool
allowMultiple
=
true
;
BOARD
*
board
=
getModel
<
BOARD
>
(
PCB_T
);
if
(
!
board
)
return
0
;
// Main loop: keep receiving events
while
(
OPT_TOOL_EVENT
evt
=
Wait
()
)
...
...
@@ -86,6 +92,10 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
if
(
evt
->
IsClick
(
MB_Left
)
)
selectSingle
(
evt
->
Position
()
);
// unlock the multiple selection box
if
(
evt
->
IsMouseUp
(
MB_Left
)
)
allowMultiple
=
true
;
// drag with LMB? Select multiple objects (or at least draw a selection box) or drag them
if
(
evt
->
IsDrag
(
MB_Left
)
)
{
...
...
@@ -96,14 +106,14 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
{
// If nothings has been selected or user wants to select more
// draw the selection box
selectMultiple
();
if
(
allowMultiple
)
allowMultiple
=
!
selectMultiple
();
}
else
{
// Now user wants to drag the selected items
m_toolMgr
->
InvokeTool
(
"pcbnew.InteractiveMove"
);
}
}
else
if
(
dragging
)
{
...
...
@@ -131,9 +141,13 @@ void SELECTION_TOOL::toggleSelection( BOARD_ITEM* aItem )
if
(
!
m_additive
)
clearSelection
();
// Prevent selection of invisible items
if
(
selectable
(
aItem
)
)
{
aItem
->
SetSelected
();
m_selectedItems
.
insert
(
aItem
);
}
}
}
...
...
@@ -214,22 +228,25 @@ BOARD_ITEM* SELECTION_TOOL::pickSmallestComponent( GENERAL_COLLECTOR* aCollector
}
void
SELECTION_TOOL
::
handleHighlight
(
const
VECTOR2D
&
aP
)
{
}
void
SELECTION_TOOL
::
selectMultiple
()
bool
SELECTION_TOOL
::
selectMultiple
()
{
OPT_TOOL_EVENT
evt
;
VIEW
*
v
=
getView
();
bool
cancelled
=
false
;
m_multiple
=
true
;
// Those 2 lines remove the blink-in-the-random-place effect
m_selArea
->
SetOrigin
(
VECTOR2I
(
0
,
0
)
);
m_selArea
->
SetEnd
(
VECTOR2I
(
0
,
0
)
);
v
->
Add
(
m_selArea
);
while
(
evt
=
Wait
()
)
{
if
(
evt
->
IsCancel
()
)
{
cancelled
=
true
;
break
;
}
if
(
evt
->
IsDrag
(
MB_Left
)
)
{
...
...
@@ -258,19 +275,21 @@ void SELECTION_TOOL::selectMultiple()
{
BOARD_ITEM
*
item
=
static_cast
<
BOARD_ITEM
*>
(
it
->
first
);
// Add only those items which are
fully within a
selection box
if
(
selectionBox
.
Contains
(
item
->
ViewBBox
()
)
)
// Add only those items which are
visible and fully within the
selection box
if
(
select
able
(
item
)
&&
select
ionBox
.
Contains
(
item
->
ViewBBox
()
)
)
{
item
->
SetSelected
();
m_selectedItems
.
insert
(
item
);
}
}
break
;
}
}
v
->
Remove
(
m_selArea
);
m_multiple
=
false
;
return
cancelled
;
}
...
...
@@ -331,3 +350,54 @@ BOARD_ITEM* SELECTION_TOOL::disambiguationMenu( GENERAL_COLLECTOR* aCollector )
return
NULL
;
}
bool
SELECTION_TOOL
::
selectable
(
const
BOARD_ITEM
*
aItem
)
{
BOARD
*
board
=
getModel
<
BOARD
>
(
PCB_T
);
switch
(
aItem
->
Type
()
)
{
case
PCB_VIA_T
:
{
// For vias it is enough if only one of layers is visible
LAYER_NUM
top
,
bottom
;
static_cast
<
const
SEGVIA
*>
(
aItem
)
->
ReturnLayerPair
(
&
top
,
&
bottom
);
return
(
board
->
IsLayerVisible
(
top
)
||
board
->
IsLayerVisible
(
bottom
)
);
}
break
;
case
PCB_PAD_T
:
{
// Pads are not selectable in multiple selection mode
if
(
m_multiple
)
return
false
;
// Pads are supposed to be on top, bottom or both at the same time (THT)
if
(
aItem
->
IsOnLayer
(
LAYER_N_FRONT
)
&&
board
->
IsLayerVisible
(
LAYER_N_FRONT
)
)
return
true
;
if
(
aItem
->
IsOnLayer
(
LAYER_N_BACK
)
&&
board
->
IsLayerVisible
(
LAYER_N_BACK
)
)
return
true
;
return
false
;
}
break
;
case
PCB_MODULE_TEXT_T
:
// Module texts are not selectable in multiple selection mode
if
(
m_multiple
)
return
false
;
break
;
case
PCB_MODULE_EDGE_T
:
// These are not selectable, otherwise silkscreen drawings would be easily destroyed
return
false
;
break
;
}
// All other items are selected only if the layer on which they exist is visible
return
board
->
IsLayerVisible
(
aItem
->
GetLayer
()
);
}
pcbnew/tools/selection_tool.h
View file @
9eb39168
...
...
@@ -35,7 +35,6 @@ class SELECTION_AREA;
class
BOARD_ITEM
;
class
GENERAL_COLLECTOR
;
/**
* Class SELECTION_TOOL
*
...
...
@@ -43,8 +42,6 @@ class GENERAL_COLLECTOR;
* - pick single objects (click LMB)
* - add objects to existing selection (Shift+LMB)
* - draw selection box (drag LMB)
*
* WORK IN PROGRESS. CONSIDER AS A DEMO!
*/
class
SELECTION_TOOL
:
public
TOOL_INTERACTIVE
...
...
@@ -53,26 +50,101 @@ public:
SELECTION_TOOL
();
~
SELECTION_TOOL
();
/**
* Function Reset()
*
* Initializes the selection tool.
*/
void
Reset
();
/**
* Function Main()
*
* The main loop.
*/
int
Main
(
TOOL_EVENT
&
aEvent
);
/**
* Function GetSelection()
*
* Returns the set of currently selected items.
*/
const
std
::
set
<
BOARD_ITEM
*>&
GetSelection
()
const
{
return
m_selectedItems
;
}
private
:
/**
* Function selectSingle()
* Selects an item pointed by the parameter aWhere. If there is more than one item at that
* place, there is a menu displayed that allows to choose the item.
*
* @param aWhere is the place where the item should be selected.
*/
void
selectSingle
(
const
VECTOR2I
&
aWhere
);
void
selectMultiple
();
void
handleHighlight
(
const
VECTOR2D
&
aP
);
/**
* Function selectMultiple()
* Handles drawing a selection box that allows to select many items at the same time.
*
* @return true if the function was cancelled (ie. CancelEvent was received).
*/
bool
selectMultiple
();
/**
* Function disambiguationMenu()
* Handles the menu that allows to select one of many items in case there is more than one
* item at the selected point (@see selectSingle()).
*
* @param aItems contains list of items that are displayed to the user.
*/
BOARD_ITEM
*
disambiguationMenu
(
GENERAL_COLLECTOR
*
aItems
);
/**
* Function pickSmallestComponent()
* Allows to find the smallest (in terms of bounding box area) item from the list.
*
* @param aCollector containes the list of items.
*/
BOARD_ITEM
*
pickSmallestComponent
(
GENERAL_COLLECTOR
*
aCollector
);
/**
* Function toggleSelection()
* Changes selection status of a given item.
*
* @param aItem is the item to have selection status changed.
*/
void
toggleSelection
(
BOARD_ITEM
*
aItem
);
/**
* Function clearSelection()
* Clears selections of currently selected items.
*/
void
clearSelection
();
/**
* Function selectable()
* Checks conditions for an item to be selected.
*
* @return True if the item fulfills conditions to be selected.
*/
bool
selectable
(
const
BOARD_ITEM
*
aItem
);
/// Container storing currently selected items
std
::
set
<
BOARD_ITEM
*>
m_selectedItems
;
/// Visual representation of selection area
SELECTION_AREA
*
m_selArea
;
/// Menu shown in case of selection ambiguity
boost
::
shared_ptr
<
CONTEXT_MENU
>
m_menu
;
/// Flag saying if items should be added to the current selection or rather replace it
bool
m_additive
;
/// Flag saying if multiple selection mode is active
bool
m_multiple
;
};
#endif
pcbnew/xchgmod.cpp
View file @
9eb39168
...
...
@@ -281,7 +281,7 @@ void DIALOG_EXCHANGE_MODULE::Change_Current_Module()
if
(
m_Parent
->
GetBoard
()
->
IsElementVisible
(
RATSNEST_VISIBLE
)
)
m_Parent
->
Compile_Ratsnest
(
NULL
,
true
);
m_Parent
->
GetCanvas
()
->
Refresh
();
m_Parent
->
RefreshCanvas
();
}
if
(
pickList
.
GetCount
()
)
...
...
@@ -370,7 +370,7 @@ void DIALOG_EXCHANGE_MODULE::Change_ModuleId( bool aUseValue )
if
(
m_Parent
->
GetBoard
()
->
IsElementVisible
(
RATSNEST_VISIBLE
)
)
m_Parent
->
Compile_Ratsnest
(
NULL
,
true
);
m_Parent
->
GetCanvas
()
->
Refresh
();
m_Parent
->
RefreshCanvas
();
}
if
(
pickList
.
GetCount
()
)
...
...
@@ -423,7 +423,7 @@ void DIALOG_EXCHANGE_MODULE::Change_ModuleAll()
if
(
m_Parent
->
GetBoard
()
->
IsElementVisible
(
RATSNEST_VISIBLE
)
)
m_Parent
->
Compile_Ratsnest
(
NULL
,
true
);
m_Parent
->
GetCanvas
()
->
Refresh
();
m_Parent
->
RefreshCanvas
();
}
if
(
pickList
.
GetCount
()
)
...
...
pcbnew/zones_by_polygon.cpp
View file @
9eb39168
...
...
@@ -333,7 +333,7 @@ void PCB_EDIT_FRAME::End_Move_Zone_Corner_Or_Outlines( wxDC* DC, ZONE_CONTAINER*
// Combine zones if possible
wxBusyCursor
dummy
;
GetBoard
()
->
OnAreaPolygonModified
(
&
s_AuxiliaryList
,
aZone
);
m_canvas
->
Refresh
();
RefreshCanvas
();
int
ii
=
GetBoard
()
->
GetAreaIndex
(
aZone
);
// test if aZone exists
...
...
pcbnew/zones_by_polygon_fill_functions.cpp
View file @
9eb39168
...
...
@@ -80,7 +80,7 @@ void PCB_EDIT_FRAME::Delete_OldZone_Fill( SEGZONE* aZone, time_t aTimestamp )
if
(
modify
)
{
OnModify
();
m_canvas
->
Refresh
();
RefreshCanvas
();
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment