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
18e9b0bf
Commit
18e9b0bf
authored
Jun 13, 2009
by
charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Eeschema: code cleanup, new file added
parent
535a4d1f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
243 additions
and
0 deletions
+243
-0
class_BodyItem_Text.cpp
eeschema/class_BodyItem_Text.cpp
+243
-0
No files found.
eeschema/class_BodyItem_Text.cpp
0 → 100644
View file @
18e9b0bf
/***************************/
/* class_BodyItem_Text.cpp */
/***************************/
/**
* class LibDrawText : describes a graphic text used to draw component shapes
* This is only a graphic item
*/
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "class_drawpanel.h"
#include "drawtxt.h"
#include "trigo.h"
#include "program.h"
#include "libcmp.h"
#include "general.h"
#include "protos.h"
LibDrawText
::
LibDrawText
()
:
LibEDA_BaseStruct
(
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
),
EDA_TextStruct
()
{
m_Size
=
wxSize
(
50
,
50
);
m_typeName
=
_
(
"Text"
);
}
bool
LibDrawText
::
Save
(
FILE
*
ExportFile
)
const
{
wxString
text
=
m_Text
;
// Spaces are not allowed in text because it is not double quoted:
// changed to '~'
text
.
Replace
(
wxT
(
" "
),
wxT
(
"~"
)
);
fprintf
(
ExportFile
,
"T %d %d %d %d %d %d %d %s "
,
m_Orient
,
m_Pos
.
x
,
m_Pos
.
y
,
m_Size
.
x
,
m_Attributs
,
m_Unit
,
m_Convert
,
CONV_TO_UTF8
(
text
)
);
fprintf
(
ExportFile
,
" %s %d"
,
m_Italic
?
"Italic"
:
"Normal"
,
(
m_Bold
>
0
)
?
1
:
0
);
char
hjustify
=
'C'
;
if
(
m_HJustify
==
GR_TEXT_HJUSTIFY_LEFT
)
hjustify
=
'L'
;
else
if
(
m_HJustify
==
GR_TEXT_HJUSTIFY_RIGHT
)
hjustify
=
'R'
;
char
vjustify
=
'C'
;
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_BOTTOM
)
vjustify
=
'B'
;
else
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_TOP
)
vjustify
=
'T'
;
fprintf
(
ExportFile
,
" %c %c"
,
hjustify
,
vjustify
);
fprintf
(
ExportFile
,
"
\n
"
);
return
true
;
}
bool
LibDrawText
::
Load
(
char
*
line
,
wxString
&
errorMsg
)
{
int
cnt
,
thickness
;
char
hjustify
=
'C'
,
vjustify
=
'C'
;
char
buf
[
256
];
char
tmp
[
256
];
buf
[
0
]
=
0
;
tmp
[
0
]
=
0
;
// For italic option, Not in old versions
cnt
=
sscanf
(
&
line
[
2
],
"%d %d %d %d %d %d %d %s %s %d %c %c"
,
&
m_Orient
,
&
m_Pos
.
x
,
&
m_Pos
.
y
,
&
m_Size
.
x
,
&
m_Attributs
,
&
m_Unit
,
&
m_Convert
,
buf
,
tmp
,
&
thickness
,
&
hjustify
,
&
vjustify
);
if
(
cnt
<
8
)
{
errorMsg
.
Printf
(
_
(
"text only had %d parameters of the required 8"
),
cnt
);
return
false
;
}
m_Size
.
y
=
m_Size
.
x
;
if
(
strnicmp
(
tmp
,
"Italic"
,
6
)
==
0
)
m_Italic
=
true
;
if
(
thickness
>
0
)
{
m_Bold
=
true
;
}
switch
(
hjustify
)
{
case
'L'
:
m_HJustify
=
GR_TEXT_HJUSTIFY_LEFT
;
break
;
case
'C'
:
m_HJustify
=
GR_TEXT_HJUSTIFY_CENTER
;
break
;
case
'R'
:
m_HJustify
=
GR_TEXT_HJUSTIFY_RIGHT
;
break
;
}
switch
(
vjustify
)
{
case
'T'
:
m_VJustify
=
GR_TEXT_VJUSTIFY_TOP
;
break
;
case
'C'
:
m_VJustify
=
GR_TEXT_VJUSTIFY_CENTER
;
break
;
case
'B'
:
m_VJustify
=
GR_TEXT_VJUSTIFY_BOTTOM
;
break
;
}
/* Convert '~' to spaces. */
m_Text
=
CONV_FROM_UTF8
(
buf
);
m_Text
.
Replace
(
wxT
(
"~"
),
wxT
(
" "
)
);
return
true
;
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
LibDrawText
::
HitTest
(
const
wxPoint
&
refPos
)
{
return
HitTest
(
refPos
,
0
,
DefaultTransformMatrix
);
}
/** Function HitTest
* @return true if the point aPosRef is near this item
* @param aPosRef = a wxPoint to test, in eeschema space
* @param aThreshold = unused here (TextHitTest calculates its threshold )
* @param aTransMat = the transform matrix
*/
bool
LibDrawText
::
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
)
{
wxPoint
physicalpos
=
TransformCoordinate
(
aTransMat
,
m_Pos
);
wxPoint
tmp
=
m_Pos
;
m_Pos
=
physicalpos
;
/* The text orientation may need to be flipped if the
* transformation matrix causes xy axes to be flipped.
* this simple algo works only for schematic matrix (rot 90 or/and mirror)
*/
int
t1
=
(
aTransMat
[
0
][
0
]
!=
0
)
^
(
m_Orient
!=
0
);
int
orient
=
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
;
EXCHG
(
m_Orient
,
orient
);
bool
hit
=
TextHitTest
(
aPosRef
);
EXCHG
(
m_Orient
,
orient
);
m_Pos
=
tmp
;
return
hit
;
}
LibDrawText
*
LibDrawText
::
GenCopy
()
{
LibDrawText
*
newitem
=
new
LibDrawText
();
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Orient
=
m_Orient
;
newitem
->
m_Size
=
m_Size
;
newitem
->
m_Attributs
=
m_Attributs
;
newitem
->
m_Unit
=
m_Unit
;
newitem
->
m_Convert
=
m_Convert
;
newitem
->
m_Flags
=
m_Flags
;
newitem
->
m_Text
=
m_Text
;
newitem
->
m_Width
=
m_Width
;
newitem
->
m_Italic
=
m_Italic
;
newitem
->
m_Bold
=
m_Bold
;
newitem
->
m_HJustify
=
m_HJustify
;
newitem
->
m_VJustify
=
m_VJustify
;
return
newitem
;
}
void
LibDrawText
::
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
int
aColor
,
int
aDrawMode
,
void
*
aData
,
const
int
aTransformMatrix
[
2
][
2
]
)
{
wxPoint
pos1
,
pos2
;
int
color
=
ReturnLayerColor
(
LAYER_DEVICE
);
int
linewidth
=
m_Width
;
if
(
linewidth
==
0
)
// Use default values for pen size
{
if
(
m_Bold
)
linewidth
=
GetPenSizeForBold
(
m_Size
.
x
);
else
linewidth
=
g_DrawDefaultLineThickness
;
}
// Clip pen size for small texts:
linewidth
=
Clamp_Text_PenSize
(
linewidth
,
m_Size
,
m_Bold
);
if
(
aColor
<
0
)
// Used normal color or selected color
{
if
(
(
m_Selected
&
IS_SELECTED
)
)
color
=
g_ItemSelectetColor
;
}
else
color
=
aColor
;
pos1
=
TransformCoordinate
(
aTransformMatrix
,
m_Pos
)
+
aOffset
;
/* The text orientation may need to be flipped if the
* transformation matrix causes xy axes to be flipped. */
int
t1
=
(
aTransformMatrix
[
0
][
0
]
!=
0
)
^
(
m_Orient
!=
0
);
DrawGraphicText
(
aPanel
,
aDC
,
pos1
,
(
EDA_Colors
)
color
,
m_Text
,
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
,
m_Size
,
m_HJustify
,
m_VJustify
,
linewidth
,
m_Italic
,
m_Bold
);
}
void
LibDrawText
::
DisplayInfo
(
WinEDA_DrawFrame
*
frame
)
{
wxString
msg
;
LibEDA_BaseStruct
::
DisplayInfo
(
frame
);
msg
=
ReturnStringFromValue
(
g_UnitMetric
,
m_Width
,
EESCHEMA_INTERNAL_UNIT
,
true
);
frame
->
MsgPanel
->
Affiche_1_Parametre
(
20
,
_
(
"Line width"
),
msg
,
BLUE
);
}
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