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
db74de74
Commit
db74de74
authored
Jun 25, 2013
by
Maciej Suminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added possibility to change cached layer color (for the purpose of high contrast display).
parent
0bac4a1e
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
161 additions
and
33 deletions
+161
-33
cairo_gal.cpp
common/gal/cairo/cairo_gal.cpp
+18
-0
opengl_gal.cpp
common/gal/opengl/opengl_gal.cpp
+7
-0
vbo_item.cpp
common/gal/opengl/vbo_item.cpp
+4
-5
view.cpp
common/view/view.cpp
+51
-2
cairo_gal.h
include/gal/cairo/cairo_gal.h
+3
-0
graphics_abstraction_layer.h
include/gal/graphics_abstraction_layer.h
+8
-0
opengl_gal.h
include/gal/opengl/opengl_gal.h
+3
-0
painter.h
include/painter.h
+14
-5
view.h
include/view/view.h
+23
-8
dialog_general_options.cpp
pcbnew/dialogs/dialog_general_options.cpp
+13
-11
pcb_painter.cpp
pcbnew/pcb_painter.cpp
+14
-1
pcb_painter.h
pcbnew/pcb_painter.h
+3
-1
No files found.
common/gal/cairo/cairo_gal.cpp
View file @
db74de74
...
@@ -801,6 +801,24 @@ void CAIRO_GAL::DrawGroup( int aGroupNumber )
...
@@ -801,6 +801,24 @@ void CAIRO_GAL::DrawGroup( int aGroupNumber )
}
}
void
CAIRO_GAL
::
ChangeGroupColor
(
int
aGroupNumber
,
const
COLOR4D
&
aNewColor
)
{
storePath
();
for
(
Group
::
iterator
it
=
groups
[
aGroupNumber
].
begin
();
it
!=
groups
[
aGroupNumber
].
end
();
++
it
)
{
if
(
it
->
command
==
CMD_SET_FILLCOLOR
||
it
->
command
==
CMD_SET_STROKECOLOR
)
{
it
->
arguments
[
0
]
=
aNewColor
.
r
;
it
->
arguments
[
1
]
=
aNewColor
.
g
;
it
->
arguments
[
2
]
=
aNewColor
.
b
;
it
->
arguments
[
3
]
=
aNewColor
.
a
;
}
}
}
void
CAIRO_GAL
::
Flush
()
void
CAIRO_GAL
::
Flush
()
{
{
storePath
();
storePath
();
...
...
common/gal/opengl/opengl_gal.cpp
View file @
db74de74
...
@@ -1628,6 +1628,13 @@ void OPENGL_GAL::DrawGroup( int aGroupNumber )
...
@@ -1628,6 +1628,13 @@ void OPENGL_GAL::DrawGroup( int aGroupNumber )
}
}
void
OPENGL_GAL
::
ChangeGroupColor
(
int
aGroupNumber
,
const
COLOR4D
&
aNewColor
)
{
vboItems
[
aGroupNumber
]
->
ChangeColor
(
aNewColor
);
vboNeedsUpdate
=
true
;
}
void
OPENGL_GAL
::
computeUnitCircle
()
void
OPENGL_GAL
::
computeUnitCircle
()
{
{
displayListCircle
=
glGenLists
(
1
);
displayListCircle
=
glGenLists
(
1
);
...
...
common/gal/opengl/vbo_item.cpp
View file @
db74de74
...
@@ -79,18 +79,17 @@ VBO_VERTEX* VBO_ITEM::GetVertices()
...
@@ -79,18 +79,17 @@ VBO_VERTEX* VBO_ITEM::GetVertices()
void
VBO_ITEM
::
ChangeColor
(
const
COLOR4D
&
aColor
)
void
VBO_ITEM
::
ChangeColor
(
const
COLOR4D
&
aColor
)
{
{
wxASSERT_MSG
(
false
,
wxT
(
"This was not tested yet"
)
);
if
(
m_isDirty
)
if
(
m_isDirty
)
Finish
();
Finish
();
// Point to color of vertices
VBO_VERTEX
*
vertexPtr
=
GetVertices
();
VBO_VERTEX
*
vertexPtr
=
GetVertices
();
const
GLfloat
newColor
[]
=
{
aColor
.
r
,
aColor
.
g
,
aColor
.
b
,
aColor
.
a
};
for
(
unsigned
int
i
=
0
;
i
<
m_size
;
++
i
)
for
(
unsigned
int
i
=
0
;
i
<
m_size
;
++
i
)
{
{
memcpy
(
&
vertexPtr
->
r
,
newColor
,
ColorByteSize
);
vertexPtr
->
r
=
aColor
.
r
;
vertexPtr
->
g
=
aColor
.
g
;
vertexPtr
->
b
=
aColor
.
b
;
vertexPtr
->
a
=
aColor
.
a
;
// Move on to the next vertex
// Move on to the next vertex
vertexPtr
++
;
vertexPtr
++
;
...
...
common/view/view.cpp
View file @
db74de74
...
@@ -307,6 +307,55 @@ void VIEW::SetLayerOrder( int aLayer, int aRenderingOrder )
...
@@ -307,6 +307,55 @@ void VIEW::SetLayerOrder( int aLayer, int aRenderingOrder )
}
}
struct
VIEW
::
updateItemsColor
{
updateItemsColor
(
int
aLayer
,
PAINTER
*
aPainter
,
GAL
*
aGal
)
:
layer
(
aLayer
),
painter
(
aPainter
),
gal
(
aGal
)
{
}
void
operator
()(
VIEW_ITEM
*
aItem
)
{
// Obtain the color that should be used for coloring the item
const
COLOR4D
color
=
painter
->
GetColor
(
aItem
,
layer
);
int
group
=
aItem
->
getGroup
(
layer
);
gal
->
ChangeGroupColor
(
group
,
color
);
}
int
layer
;
PAINTER
*
painter
;
GAL
*
gal
;
};
void
VIEW
::
UpdateLayerColor
(
int
aLayer
)
{
BOX2I
r
;
r
.
SetMaximum
();
updateItemsColor
visitor
(
aLayer
,
m_painter
,
m_gal
);
m_layers
[
aLayer
].
items
->
Query
(
r
,
visitor
);
}
void
VIEW
::
UpdateAllLayersColor
()
{
BOX2I
r
;
r
.
SetMaximum
();
for
(
LayerMapIter
i
=
m_layers
.
begin
();
i
!=
m_layers
.
end
();
++
i
)
{
VIEW_LAYER
*
l
=
&
(
(
*
i
).
second
);
updateItemsColor
visitor
(
l
->
id
,
m_painter
,
m_gal
);
l
->
items
->
Query
(
r
,
visitor
);
}
}
void
VIEW
::
SetTopLayer
(
int
aLayer
)
void
VIEW
::
SetTopLayer
(
int
aLayer
)
{
{
// Restore previous order
// Restore previous order
...
@@ -561,13 +610,13 @@ void VIEW::clearGroupCache()
...
@@ -561,13 +610,13 @@ void VIEW::clearGroupCache()
BOX2I
r
;
BOX2I
r
;
r
.
SetMaximum
();
r
.
SetMaximum
();
clearItemCache
visitor
(
this
);
for
(
LayerMapIter
i
=
m_layers
.
begin
();
i
!=
m_layers
.
end
();
++
i
)
for
(
LayerMapIter
i
=
m_layers
.
begin
();
i
!=
m_layers
.
end
();
++
i
)
{
{
VIEW_LAYER
*
l
=
&
(
(
*
i
).
second
);
VIEW_LAYER
*
l
=
&
(
(
*
i
).
second
);
clearItemCache
visitor
(
this
);
l
->
items
->
Query
(
r
,
visitor
);
l
->
items
->
Query
(
r
,
visitor
);
}
;
}
}
}
...
...
include/gal/cairo/cairo_gal.h
View file @
db74de74
...
@@ -209,6 +209,9 @@ public:
...
@@ -209,6 +209,9 @@ public:
/// @copydoc GAL::DrawGroup()
/// @copydoc GAL::DrawGroup()
virtual
void
DrawGroup
(
int
aGroupNumber
);
virtual
void
DrawGroup
(
int
aGroupNumber
);
/// @copydoc GAL::ChangeGroupColor()
virtual
void
ChangeGroupColor
(
int
aGroupNumber
,
const
COLOR4D
&
aNewColor
);
/// @copydoc GAL::DeleteGroup()
/// @copydoc GAL::DeleteGroup()
virtual
void
DeleteGroup
(
int
aGroupNumber
);
virtual
void
DeleteGroup
(
int
aGroupNumber
);
...
...
include/gal/graphics_abstraction_layer.h
View file @
db74de74
...
@@ -363,6 +363,14 @@ public:
...
@@ -363,6 +363,14 @@ public:
*/
*/
virtual
void
DrawGroup
(
int
aGroupNumber
)
=
0
;
virtual
void
DrawGroup
(
int
aGroupNumber
)
=
0
;
/**
* @brief Changes the color used to draw the group.
*
* @param aGroupNumber is the group number.
* @param aNewColor is the new color.
*/
virtual
void
ChangeGroupColor
(
int
aGroupNumber
,
const
COLOR4D
&
aNewColor
)
=
0
;
/**
/**
* @brief Delete the group from the memory.
* @brief Delete the group from the memory.
*
*
...
...
include/gal/opengl/opengl_gal.h
View file @
db74de74
...
@@ -234,6 +234,9 @@ public:
...
@@ -234,6 +234,9 @@ public:
/// @copydoc GAL::DrawGroup()
/// @copydoc GAL::DrawGroup()
virtual
void
DrawGroup
(
int
aGroupNumber
);
virtual
void
DrawGroup
(
int
aGroupNumber
);
/// @copydoc GAL::ChangeGroupColor()
virtual
void
ChangeGroupColor
(
int
aGroupNumber
,
const
COLOR4D
&
aNewColor
);
/// @copydoc GAL::DeleteGroup()
/// @copydoc GAL::DeleteGroup()
virtual
void
DeleteGroup
(
int
aGroupNumber
);
virtual
void
DeleteGroup
(
int
aGroupNumber
);
...
...
include/painter.h
View file @
db74de74
...
@@ -82,7 +82,7 @@ public:
...
@@ -82,7 +82,7 @@ public:
* (eg. highlighted, so it differs from other layers).
* (eg. highlighted, so it differs from other layers).
* @param aLayerId is a layer number that should be displayed in a specific mode.
* @param aLayerId is a layer number that should be displayed in a specific mode.
*/
*/
void
SetActiveLayer
(
int
aLayerId
)
inline
void
SetActiveLayer
(
int
aLayerId
)
{
{
m_activeLayer
=
aLayerId
;
m_activeLayer
=
aLayerId
;
}
}
...
@@ -94,7 +94,7 @@ public:
...
@@ -94,7 +94,7 @@ public:
* @param aNetCode is optional and if specified, turns on higlighting only for the net with
* @param aNetCode is optional and if specified, turns on higlighting only for the net with
* number given as the parameter.
* number given as the parameter.
*/
*/
void
SetHighlight
(
bool
aEnabled
,
int
aNetcode
=
-
1
)
inline
void
SetHighlight
(
bool
aEnabled
,
int
aNetcode
=
-
1
)
{
{
m_highlightEnabled
=
aEnabled
;
m_highlightEnabled
=
aEnabled
;
...
@@ -107,7 +107,7 @@ public:
...
@@ -107,7 +107,7 @@ public:
* Turns on/off high contrast display mode.
* Turns on/off high contrast display mode.
* @param aEnabled determines if high contrast display mode should be enabled or not.
* @param aEnabled determines if high contrast display mode should be enabled or not.
*/
*/
void
SetHighContrast
(
bool
aEnabled
)
inline
void
SetHighContrast
(
bool
aEnabled
)
{
{
m_hiContrastEnabled
=
aEnabled
;
m_hiContrastEnabled
=
aEnabled
;
}
}
...
@@ -200,7 +200,7 @@ public:
...
@@ -200,7 +200,7 @@ public:
/**
/**
* Function Draw
* Function Draw
* Takes an instance of
EDA
_ITEM and passes it to a function that know how to draw the item.
* Takes an instance of
VIEW
_ITEM and passes it to a function that know how to draw the item.
* @param aItem is an item to be drawn.
* @param aItem is an item to be drawn.
* @param aLayer tells which layer is currently rendered so that draw functions
* @param aLayer tells which layer is currently rendered so that draw functions
* may know what to draw (eg. for pads there are separate layers for holes, because they
* may know what to draw (eg. for pads there are separate layers for holes, because they
...
@@ -208,8 +208,17 @@ public:
...
@@ -208,8 +208,17 @@ public:
*/
*/
virtual
bool
Draw
(
const
VIEW_ITEM
*
aItem
,
int
aLayer
)
=
0
;
virtual
bool
Draw
(
const
VIEW_ITEM
*
aItem
,
int
aLayer
)
=
0
;
protected
:
/**
* Function GetColor
* Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer
* using currently used render settings.
* @param aItem is the VIEW_ITEM.
* @param aLayer is the layer.
* @return The color.
*/
virtual
const
COLOR4D
&
GetColor
(
const
VIEW_ITEM
*
aItem
,
int
aLayer
)
=
0
;
protected
:
/**
/**
* Function getLayerColor
* Function getLayerColor
* is used for obtaining color that should be used for specific layer/net
* is used for obtaining color that should be used for specific layer/net
...
...
include/view/view.h
View file @
db74de74
...
@@ -61,8 +61,8 @@ public:
...
@@ -61,8 +61,8 @@ public:
/**
/**
* Constructor.
* Constructor.
* @param aIsDynamic
:
decides whether we are creating a static or a dynamic VIEW.
* @param aIsDynamic decides whether we are creating a static or a dynamic VIEW.
* @param aUseGroups
: fixme
* @param aUseGroups
tells if items added to the VIEW should be stored in groups.
*/
*/
VIEW
(
bool
aIsDynamic
=
true
,
bool
aUseGroups
=
false
);
VIEW
(
bool
aIsDynamic
=
true
,
bool
aUseGroups
=
false
);
...
@@ -264,6 +264,21 @@ public:
...
@@ -264,6 +264,21 @@ public:
*/
*/
void
SetLayerOrder
(
int
aLayer
,
int
aRenderingOrder
);
void
SetLayerOrder
(
int
aLayer
,
int
aRenderingOrder
);
/**
* Function UpdateLayerColor()
* Applies the new coloring scheme held by RENDER_SETTINGS in case that it has changed.
* @param aLayer is a number of the layer to be updated.
* @see RENDER_SETTINGS
*/
void
UpdateLayerColor
(
int
aLayer
);
/**
* Function UpdateAllLayersColor()
* Applies the new coloring scheme to all layers. The used scheme is held by RENDER_SETTINGS.
* @see RENDER_SETTINGS
*/
void
UpdateAllLayersColor
();
/**
/**
* Function SetTopLayer()
* Function SetTopLayer()
* Sets given layer to be displayed on the top or sets back the default order of layers.
* Sets given layer to be displayed on the top or sets back the default order of layers.
...
@@ -313,7 +328,6 @@ public:
...
@@ -313,7 +328,6 @@ public:
static
const
int
TOP_LAYER
;
///* layer number for displaying items on the top
static
const
int
TOP_LAYER
;
///* layer number for displaying items on the top
private
:
private
:
struct
VIEW_LAYER
struct
VIEW_LAYER
{
{
bool
enabled
;
///* is the layer to be rendered?
bool
enabled
;
///* is the layer to be rendered?
...
@@ -338,6 +352,7 @@ private:
...
@@ -338,6 +352,7 @@ private:
struct
unlinkItem
;
struct
unlinkItem
;
struct
recacheItem
;
struct
recacheItem
;
struct
drawItem
;
struct
drawItem
;
struct
updateItemsColor
;
///* Saves current top layer settings in order to restore it when it's not top anymore
///* Saves current top layer settings in order to restore it when it's not top anymore
VIEW_LAYER
m_topLayer
;
VIEW_LAYER
m_topLayer
;
...
...
pcbnew/dialogs/dialog_general_options.cpp
View file @
db74de74
...
@@ -161,6 +161,12 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
...
@@ -161,6 +161,12 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
{
{
int
id
=
event
.
GetId
();
int
id
=
event
.
GetId
();
bool
state
=
event
.
IsChecked
();
bool
state
=
event
.
IsChecked
();
#ifdef KICAD_GAL
KiGfx
::
PCB_PAINTER
*
painter
=
static_cast
<
KiGfx
::
PCB_PAINTER
*>
(
m_galCanvas
->
GetView
()
->
GetPainter
()
);
KiGfx
::
PCB_RENDER_SETTINGS
*
settings
=
static_cast
<
KiGfx
::
PCB_RENDER_SETTINGS
*>
(
painter
->
GetSettings
()
);
#endif
/* KICAD_GAL */
switch
(
id
)
switch
(
id
)
{
{
...
@@ -221,7 +227,12 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
...
@@ -221,7 +227,12 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
case
ID_TB_OPTIONS_SHOW_HIGH_CONTRAST_MODE
:
case
ID_TB_OPTIONS_SHOW_HIGH_CONTRAST_MODE
:
DisplayOpt
.
ContrastModeDisplay
=
state
;
DisplayOpt
.
ContrastModeDisplay
=
state
;
#ifdef KICAD_GAL
#ifdef KICAD_GAL
// Apply new display options to the GAL canvas
settings
->
LoadDisplayOptions
(
DisplayOpt
);
m_galCanvas
->
GetView
()
->
EnableTopLayer
(
state
);
m_galCanvas
->
GetView
()
->
EnableTopLayer
(
state
);
m_galCanvas
->
GetView
()
->
UpdateAllLayersColor
();
if
(
!
IsGalCanvasActive
()
)
#endif
/* KICAD_GAL */
#endif
/* KICAD_GAL */
m_canvas
->
Refresh
();
m_canvas
->
Refresh
();
break
;
break
;
...
@@ -250,16 +261,7 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
...
@@ -250,16 +261,7 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
}
}
#ifdef KICAD_GAL
#ifdef KICAD_GAL
// Apply new display options to the GAL canvas
KiGfx
::
PCB_PAINTER
*
painter
=
static_cast
<
KiGfx
::
PCB_PAINTER
*>
(
m_galCanvas
->
GetView
()
->
GetPainter
()
);
KiGfx
::
PCB_RENDER_SETTINGS
*
settings
=
static_cast
<
KiGfx
::
PCB_RENDER_SETTINGS
*>
(
painter
->
GetSettings
()
);
settings
->
LoadDisplayOptions
(
DisplayOpt
);
if
(
IsGalCanvasActive
()
)
if
(
IsGalCanvasActive
()
)
{
m_galCanvas
->
Refresh
();
m_galCanvas
->
Refresh
();
}
#endif
/* KICAD_GAL */
#endif
}
}
pcbnew/pcb_painter.cpp
View file @
db74de74
...
@@ -117,6 +117,19 @@ PCB_PAINTER::PCB_PAINTER( GAL* aGal ) :
...
@@ -117,6 +117,19 @@ PCB_PAINTER::PCB_PAINTER( GAL* aGal ) :
}
}
const
COLOR4D
&
PCB_PAINTER
::
GetColor
(
const
VIEW_ITEM
*
aItem
,
int
aLayer
)
{
int
netCode
=
0
;
// Try to obtain the netcode for the item
const
BOARD_CONNECTED_ITEM
*
item
=
dynamic_cast
<
const
BOARD_CONNECTED_ITEM
*>
(
aItem
);
if
(
item
)
netCode
=
item
->
GetNet
();
return
getLayerColor
(
aLayer
,
netCode
);
}
const
COLOR4D
&
PCB_PAINTER
::
getLayerColor
(
int
aLayer
,
int
aNetCode
)
const
const
COLOR4D
&
PCB_PAINTER
::
getLayerColor
(
int
aLayer
,
int
aNetCode
)
const
{
{
if
(
m_pcbSettings
->
m_hiContrastEnabled
&&
m_pcbSettings
->
m_activeLayer
!=
aLayer
)
if
(
m_pcbSettings
->
m_hiContrastEnabled
&&
m_pcbSettings
->
m_activeLayer
!=
aLayer
)
...
@@ -211,7 +224,7 @@ bool PCB_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
...
@@ -211,7 +224,7 @@ bool PCB_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
break
;
break
;
default
:
default
:
// Painter does not know
Network:
how to draw the object
// Painter does not know how to draw the object
return
false
;
return
false
;
break
;
break
;
}
}
...
...
pcbnew/pcb_painter.h
View file @
db74de74
...
@@ -126,8 +126,10 @@ public:
...
@@ -126,8 +126,10 @@ public:
m_pcbSettings
=
dynamic_cast
<
PCB_RENDER_SETTINGS
*>
(
aSettings
);
m_pcbSettings
=
dynamic_cast
<
PCB_RENDER_SETTINGS
*>
(
aSettings
);
}
}
protected
:
/// @copydoc PAINTER::GetColor()
virtual
const
COLOR4D
&
GetColor
(
const
VIEW_ITEM
*
aItem
,
int
aLayer
);
protected
:
PCB_RENDER_SETTINGS
*
m_pcbSettings
;
PCB_RENDER_SETTINGS
*
m_pcbSettings
;
/// @copydoc PAINTER::getLayerColor()
/// @copydoc PAINTER::getLayerColor()
...
...
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