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
09701a74
Commit
09701a74
authored
Nov 12, 2008
by
charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Eeschema: solved minor problems in libedit in functions locate and move fields.
parent
97cfebcb
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
109 additions
and
94 deletions
+109
-94
classes_body_items.cpp
eeschema/classes_body_items.cpp
+70
-25
classes_body_items.h
eeschema/classes_body_items.h
+7
-0
libfield.cpp
eeschema/libfield.cpp
+27
-67
librairi.cpp
pcbnew/librairi.cpp
+5
-2
No files found.
eeschema/classes_body_items.cpp
View file @
09701a74
...
...
@@ -77,24 +77,24 @@ void LibDrawArc::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOffs
if
(
fill
==
FILLED_WITH_BG_BODYCOLOR
)
GRFilledArc
(
&
aPanel
->
m_ClipBox
,
aDC
,
posc
.
x
,
posc
.
y
,
pt1
,
pt2
,
m_Rayon
,
linewidth
,
color
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
m_Rayon
,
linewidth
,
color
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill
==
FILLED_SHAPE
&&
!
aData
)
GRFilledArc
(
&
aPanel
->
m_ClipBox
,
aDC
,
posc
.
x
,
posc
.
y
,
pt1
,
pt2
,
m_Rayon
,
color
,
color
);
m_Rayon
,
color
,
color
);
else
#ifdef DRAW_ARC_WITH_ANGLE
GRArc
(
&
aPanel
->
m_ClipBox
,
aDC
,
posc
.
x
,
posc
.
y
,
pt1
,
pt2
,
m_Rayon
,
linewidth
,
color
);
m_Rayon
,
linewidth
,
color
);
#else
GRArc1
(
&
aPanel
->
m_ClipBox
,
aDC
,
pos1
.
x
,
pos1
.
y
,
pos2
.
x
,
pos2
.
y
,
posc
.
x
,
posc
.
y
,
linewidth
,
color
);
posc
.
x
,
posc
.
y
,
linewidth
,
color
);
#endif
}
...
...
@@ -126,14 +126,14 @@ void LibDrawCircle::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aO
if
(
fill
==
FILLED_WITH_BG_BODYCOLOR
)
GRFilledCircle
(
&
aPanel
->
m_ClipBox
,
aDC
,
pos1
.
x
,
pos1
.
y
,
m_Rayon
,
linewidth
,
color
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
m_Rayon
,
linewidth
,
color
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill
==
FILLED_SHAPE
)
GRFilledCircle
(
&
aPanel
->
m_ClipBox
,
aDC
,
pos1
.
x
,
pos1
.
y
,
m_Rayon
,
0
,
color
,
color
);
m_Rayon
,
0
,
color
,
color
);
else
GRCircle
(
&
aPanel
->
m_ClipBox
,
aDC
,
pos1
.
x
,
pos1
.
y
,
m_Rayon
,
linewidth
,
color
);
m_Rayon
,
linewidth
,
color
);
}
...
...
@@ -162,9 +162,9 @@ void LibDrawText::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOff
int
t1
=
(
aTransformMatrix
[
0
][
0
]
!=
0
)
^
(
m_Horiz
!=
0
);
DrawGraphicText
(
aPanel
,
aDC
,
pos1
,
color
,
m_Text
,
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
,
m_Size
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
,
linewidth
);
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
,
m_Size
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
,
linewidth
);
}
...
...
@@ -195,14 +195,14 @@ void LibDrawSquare::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aO
if
(
fill
==
FILLED_WITH_BG_BODYCOLOR
&&
!
aData
)
GRFilledRect
(
&
aPanel
->
m_ClipBox
,
aDC
,
pos1
.
x
,
pos1
.
y
,
pos2
.
x
,
pos2
.
y
,
color
,
linewidth
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
color
,
linewidth
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
m_Fill
==
FILLED_SHAPE
&&
!
aData
)
GRFilledRect
(
&
aPanel
->
m_ClipBox
,
aDC
,
pos1
.
x
,
pos1
.
y
,
pos2
.
x
,
pos2
.
y
,
color
,
color
);
color
,
color
);
else
GRRect
(
&
aPanel
->
m_ClipBox
,
aDC
,
pos1
.
x
,
pos1
.
y
,
pos2
.
x
,
pos2
.
y
,
linewidth
,
color
);
linewidth
,
color
);
}
...
...
@@ -263,7 +263,7 @@ void LibDrawPolyline::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
{
Buf_Poly_Size
=
m_CornersCount
;
Buf_Poly_Drawings
=
(
int
*
)
realloc
(
Buf_Poly_Drawings
,
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
}
for
(
int
ii
=
0
,
jj
=
0
;
ii
<
m_CornersCount
;
ii
++
,
jj
+=
2
)
...
...
@@ -283,14 +283,14 @@ void LibDrawPolyline::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
if
(
fill
==
FILLED_WITH_BG_BODYCOLOR
)
GRPoly
(
&
aPanel
->
m_ClipBox
,
aDC
,
m_CornersCount
,
Buf_Poly_Drawings
,
1
,
linewidth
,
color
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
Buf_Poly_Drawings
,
1
,
linewidth
,
color
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill
==
FILLED_SHAPE
)
GRPoly
(
&
aPanel
->
m_ClipBox
,
aDC
,
m_CornersCount
,
Buf_Poly_Drawings
,
1
,
linewidth
,
color
,
color
);
Buf_Poly_Drawings
,
1
,
linewidth
,
color
,
color
);
else
GRPoly
(
&
aPanel
->
m_ClipBox
,
aDC
,
m_CornersCount
,
Buf_Poly_Drawings
,
0
,
linewidth
,
color
,
color
);
Buf_Poly_Drawings
,
0
,
linewidth
,
color
,
color
);
}
...
...
@@ -337,8 +337,53 @@ void LibDrawField::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, const wxPoint& aOf
wxString
*
text
=
aData
?
(
wxString
*
)
aData
:
&
m_Text
;
GRSetDrawMode
(
aDC
,
aDrawMode
);
DrawGraphicText
(
aPanel
,
aDC
,
text_pos
,
color
,
text
->
GetData
(),
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
m_Size
,
m_HJustify
,
m_VJustify
,
linewidth
);
color
,
text
->
GetData
(),
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
m_Size
,
m_HJustify
,
m_VJustify
,
linewidth
);
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test, in Field coordinate system
* @return bool - true if a hit, else false
*/
bool
LibDrawField
::
HitTest
(
const
wxPoint
&
refPos
)
{
EDA_Rect
bbox
;
// bounding box for the text
bbox
.
SetOrigin
(
m_Pos
);
int
dx
;
// X size for the full text
if
(
m_FieldId
==
REFERENCE
)
dx
=
m_Size
.
x
*
(
m_Text
.
Len
(
)
+
1
);
// The displayed text has one char more (U is displayed U?)
else
dx
=
m_Size
.
x
*
m_Text
.
Len
(
);
dx
=
(
int
)
((
double
)
dx
*
10.0
/
9
);
// spacing between char is 0.1 the char size
int
dy
=
m_Size
.
y
;
if
(
m_Orient
)
EXCHG
(
dx
,
dy
);
// Swap X and Y size for a vertical text
// adjust position of the left bottom corner according to the justification
// pos is at this point correct for a left and top justified text
// Horizontal justification
if
(
m_HJustify
==
GR_TEXT_HJUSTIFY_CENTER
)
bbox
.
Offset
(
-
dx
/
2
,
0
);
else
if
(
m_HJustify
==
GR_TEXT_HJUSTIFY_RIGHT
)
bbox
.
Offset
(
-
dx
,
0
);
// Vertical justification
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_CENTER
)
bbox
.
Offset
(
0
,
-
dy
/
2
);
else
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_TOP
)
bbox
.
Offset
(
0
,
-
dy
);
bbox
.
SetSize
(
dx
,
dy
);
if
(
bbox
.
Inside
(
refPos
)
)
return
true
;
return
false
;
}
eeschema/classes_body_items.h
View file @
09701a74
...
...
@@ -469,6 +469,13 @@ public:
void
Copy
(
LibDrawField
*
Target
);
void
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
int
aColor
,
int
aDrawMode
,
void
*
aData
,
int
aTransformMatrix
[
2
][
2
]
);
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test, in Field coordinate system
* @return bool - true if a hit, else false
*/
bool
HitTest
(
const
wxPoint
&
refPos
);
};
#endif // CLASSES_BODY_ITEMS_H
eeschema/libfield.cpp
View file @
09701a74
...
...
@@ -83,8 +83,6 @@ LibDrawField *Field = (LibDrawField *)CurrentDrawItem;
if
(
(
CurrentLibEntry
==
NULL
)
||
(
Field
==
NULL
)
)
return
;
GRSetDrawMode
(
DC
,
g_XorMode
);
switch
(
Field
->
m_FieldId
)
{
case
VALUE
:
...
...
@@ -100,15 +98,19 @@ LibDrawField *Field = (LibDrawField *)CurrentDrawItem;
break
;
}
int
LineWidth
=
MAX
(
Field
->
m_Width
,
g_DrawMinimunLineWidth
);
wxString
text
=
Field
->
m_Text
;
if
(
Field
->
m_FieldId
==
REFERENCE
)
text
<<
wxT
(
"?"
);
int
TransMat
[
2
][
2
];
TransMat
[
0
][
0
]
=
1
;
TransMat
[
1
][
1
]
=
-
1
;
TransMat
[
1
][
0
]
=
TransMat
[
0
][
1
]
=
0
;
if
(
Field
->
m_Attributs
&
TEXT_NO_VISIBLE
)
color
=
DARKGRAY
;
if
(
erase
)
DrawGraphicText
(
panel
,
DC
,
wxPoint
(
LastTextPosition
.
x
,
-
LastTextPosition
.
y
),
color
,
Field
->
m_Text
,
Field
->
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
Field
->
m_Size
,
Field
->
m_HJustify
,
Field
->
m_VJustify
,
LineWidth
);
Field
->
Draw
(
panel
,
DC
,
wxPoint
(
0
,
0
),
color
,
g_XorMode
,
&
text
,
TransMat
);
LastTextPosition
.
x
=
panel
->
GetScreen
()
->
m_Curseur
.
x
;
...
...
@@ -116,12 +118,9 @@ int LineWidth = MAX(Field->m_Width, g_DrawMinimunLineWidth);
Field
->
m_Pos
=
LastTextPosition
;
DrawGraphicText
(
panel
,
DC
,
wxPoint
(
LastTextPosition
.
x
,
-
LastTextPosition
.
y
),
color
,
Field
->
m_Text
,
Field
->
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
Field
->
m_Size
,
Field
->
m_HJustify
,
Field
->
m_VJustify
,
LineWidth
);
Field
->
Draw
(
panel
,
DC
,
wxPoint
(
0
,
0
),
color
,
g_XorMode
,
&
text
,
TransMat
);
}
/*******************************************************************/
...
...
@@ -289,68 +288,29 @@ int LineWidth = MAX(Field->m_Width, g_DrawMinimunLineWidth);
/****************************************************************************/
LibDrawField
*
WinEDA_LibeditFrame
::
LocateField
(
EDA_LibComponentStruct
*
LibEntry
)
/****************************************************************************/
/* Loca
lise le champ (ref ou name) pointe par la souris
retourne
:
pointe
ur sur le champ (NULL= Pas de champ
)
/* Loca
te the component fiels (ref, name or auxiliary fields) under the mouse cursor
return
:
pointe
r on the field (or NULL
)
*/
{
int
x0
,
y0
,
x1
,
y1
;
/* Rectangle d'encadrement des textes a localiser */
int
dx
,
dy
;
/* Dimensions du texte */
LibDrawField
*
Field
;
int
hjustify
,
vjustify
;
/* Localisation du Nom */
x0
=
LibEntry
->
m_Name
.
m_Pos
.
x
;
y0
=
-
LibEntry
->
m_Name
.
m_Pos
.
y
;
dx
=
LibEntry
->
m_Name
.
m_Size
.
x
*
LibEntry
->
m_Name
.
m_Text
.
Len
(),
dy
=
LibEntry
->
m_Name
.
m_Size
.
y
;
hjustify
=
LibEntry
->
m_Name
.
m_HJustify
;
vjustify
=
LibEntry
->
m_Name
.
m_VJustify
;
if
(
LibEntry
->
m_Name
.
m_Orient
)
EXCHG
(
dx
,
dy
);
if
(
hjustify
==
GR_TEXT_HJUSTIFY_CENTER
)
x0
-=
dx
/
2
;
else
if
(
hjustify
==
GR_TEXT_HJUSTIFY_RIGHT
)
x0
-=
dx
;
if
(
vjustify
==
GR_TEXT_VJUSTIFY_CENTER
)
y0
-=
dy
/
2
;
else
if
(
vjustify
==
GR_TEXT_VJUSTIFY_BOTTOM
)
y0
+=
dy
;
x1
=
x0
+
dx
;
y1
=
y0
+
dy
;
if
(
(
GetScreen
()
->
m_Curseur
.
x
>=
x0
)
&&
(
GetScreen
()
->
m_Curseur
.
x
<=
x1
)
&&
(
GetScreen
()
->
m_Curseur
.
y
>=
y0
)
&&
(
GetScreen
()
->
m_Curseur
.
y
<=
y1
)
)
wxPoint
refpos
;
refpos
.
x
=
GetScreen
()
->
m_Curseur
.
x
;
refpos
.
y
=
-
GetScreen
()
->
m_Curseur
.
y
;
// Y axis is from bottom to top in library
/* Test reference */
if
(
LibEntry
->
m_Name
.
HitTest
(
refpos
)
)
return
&
LibEntry
->
m_Name
;
/* Localisation du Prefix */
x0
=
LibEntry
->
m_Prefix
.
m_Pos
.
x
;
y0
=
-
LibEntry
->
m_Prefix
.
m_Pos
.
y
;
dx
=
LibEntry
->
m_Prefix
.
m_Size
.
x
*
LibEntry
->
m_Prefix
.
m_Text
.
Len
(),
dy
=
LibEntry
->
m_Prefix
.
m_Size
.
y
;
hjustify
=
LibEntry
->
m_Prefix
.
m_HJustify
;
vjustify
=
LibEntry
->
m_Prefix
.
m_VJustify
;
if
(
LibEntry
->
m_Prefix
.
m_Orient
)
EXCHG
(
dx
,
dy
);
if
(
hjustify
==
GR_TEXT_HJUSTIFY_CENTER
)
x0
-=
dx
/
2
;
else
if
(
hjustify
==
GR_TEXT_HJUSTIFY_RIGHT
)
x0
-=
dx
;
if
(
vjustify
==
GR_TEXT_VJUSTIFY_CENTER
)
y0
-=
dy
/
2
;
else
if
(
vjustify
==
GR_TEXT_VJUSTIFY_BOTTOM
)
y0
-=
dy
;
x1
=
x0
+
dx
;
y1
=
y0
+
dy
;
if
(
(
GetScreen
()
->
m_Curseur
.
x
>=
x0
)
&&
(
GetScreen
()
->
m_Curseur
.
x
<=
x1
)
&&
(
GetScreen
()
->
m_Curseur
.
y
>=
y0
)
&&
(
GetScreen
()
->
m_Curseur
.
y
<=
y1
)
)
/* Test Prefix */
if
(
LibEntry
->
m_Prefix
.
HitTest
(
refpos
)
)
return
&
LibEntry
->
m_Prefix
;
/* Localisation des autres fields */
for
(
Field
=
LibEntry
->
Fields
;
Field
!=
NULL
;
for
(
LibDrawField
*
Field
=
LibEntry
->
Fields
;
Field
!=
NULL
;
Field
=
(
LibDrawField
*
)
Field
->
Pnext
)
{
if
(
Field
->
m_Text
.
IsEmpty
()
)
continue
;
x0
=
Field
->
m_Pos
.
x
;
y0
=
-
Field
->
m_Pos
.
y
;
dx
=
Field
->
m_Size
.
x
*
Field
->
m_Text
.
Len
(),
dy
=
Field
->
m_Size
.
y
;
hjustify
=
Field
->
m_HJustify
;
vjustify
=
Field
->
m_VJustify
;
if
(
Field
->
m_Orient
)
EXCHG
(
dx
,
dy
);
if
(
LibEntry
->
m_Prefix
.
m_Orient
)
EXCHG
(
dx
,
dy
);
if
(
hjustify
==
GR_TEXT_HJUSTIFY_CENTER
)
x0
-=
dx
/
2
;
else
if
(
hjustify
==
GR_TEXT_HJUSTIFY_RIGHT
)
x0
-=
dx
;
if
(
vjustify
==
GR_TEXT_VJUSTIFY_CENTER
)
y0
-=
dy
/
2
;
else
if
(
vjustify
==
GR_TEXT_VJUSTIFY_BOTTOM
)
y0
-=
dy
;
x1
=
x0
+
dx
;
y1
=
y0
+
dy
;
if
(
(
GetScreen
()
->
m_Curseur
.
x
>=
x0
)
&&
(
GetScreen
()
->
m_Curseur
.
x
<=
x1
)
&&
(
GetScreen
()
->
m_Curseur
.
y
>=
y0
)
&&
(
GetScreen
()
->
m_Curseur
.
y
<=
y1
)
)
if
(
Field
->
HitTest
(
refpos
)
)
return
(
Field
);
}
...
...
pcbnew/librairi.cpp
View file @
09701a74
...
...
@@ -720,15 +720,18 @@ MODULE* WinEDA_BasePcbFrame::Create_1_Module( wxDC* DC, const wxString& module_n
/* Ask fo the new module reference */
if
(
module_name
.
IsEmpty
()
)
{
if
(
Get_Message
(
_
(
"Module Reference:"
),
_
(
"Create module"
),
Line
,
this
)
!=
0
)
if
(
Get_Message
(
_
(
"Module Reference:"
),
_
(
"Module Creation:"
),
Line
,
this
)
!=
0
)
{
DisplayInfo
(
this
,
_
(
"No reference, aborted"
));
return
NULL
;
}
else
Line
=
module_name
;
Line
.
Trim
(
TRUE
);
Line
.
Trim
(
FALSE
);
// Creates the new module and add it to t
e bigenning
of the linked list of modules
// Creates the new module and add it to t
he head
of the linked list of modules
Module
=
new
MODULE
(
m_Pcb
);
Module
->
Pnext
=
m_Pcb
->
m_Modules
;
...
...
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