added hcenter and vcenter fields and function parameters for centered text (still to be implemented though); When using edit property combobox token selector multiple times update all changed token values in attribute string (instead of only last changed token value), thanks to Joanne Low for pointing out the issue
This commit is contained in:
parent
78188b64a6
commit
1fa99bd840
|
|
@ -1374,7 +1374,7 @@ void calc_drawing_bbox(Box *boundbox, int selected)
|
|||
customfont = set_text_custom_font(&textelement[i]);
|
||||
#endif
|
||||
if(text_bbox(textelement[i].txt_ptr, textelement[i].xscale,
|
||||
textelement[i].yscale,textelement[i].rot, textelement[i].flip,
|
||||
textelement[i].yscale,textelement[i].rot, textelement[i].flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0, textelement[i].y0,
|
||||
&tmp.x1,&tmp.y1, &tmp.x2,&tmp.y2) ) {
|
||||
count++;
|
||||
|
|
@ -2050,7 +2050,7 @@ void new_polygon(int what) /* 20171115 */
|
|||
|
||||
#ifdef HAS_CAIRO
|
||||
int text_bbox(char *str, double xscale, double yscale,
|
||||
int rot, int flip, double x1,double y1, double *rx1, double *ry1,
|
||||
int rot, int flip, int hcenter, int vcenter, double x1,double y1, double *rx1, double *ry1,
|
||||
double *rx2, double *ry2)
|
||||
{
|
||||
int c=0;
|
||||
|
|
@ -2106,11 +2106,11 @@ int text_bbox(char *str, double xscale, double yscale,
|
|||
return 1;
|
||||
}
|
||||
int text_bbox_nocairo(char * str,double xscale, double yscale,
|
||||
int rot, int flip, double x1,double y1, double *rx1, double *ry1,
|
||||
int rot, int flip, int hcenter, int vcenter, double x1,double y1, double *rx1, double *ry1,
|
||||
double *rx2, double *ry2)
|
||||
#else
|
||||
int text_bbox(char * str,double xscale, double yscale,
|
||||
int rot, int flip, double x1,double y1, double *rx1, double *ry1,
|
||||
int rot, int flip, int hcenter, int vcenter, double x1,double y1, double *rx1, double *ry1,
|
||||
double *rx2, double *ry2)
|
||||
#endif
|
||||
{
|
||||
|
|
@ -2184,6 +2184,12 @@ void place_text(int draw_text, double mx, double my)
|
|||
/* debug ... */
|
||||
/* textelement[lasttext].prop_ptr=NULL; */
|
||||
dbg(1, "place_text(): done text input\n");
|
||||
|
||||
strlayer = get_tok_value(textelement[lasttext].prop_ptr, "hcenter", 0);
|
||||
textelement[lasttext].hcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
strlayer = get_tok_value(textelement[lasttext].prop_ptr, "vcenter", 0);
|
||||
textelement[lasttext].vcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
|
||||
strlayer = get_tok_value(textelement[lasttext].prop_ptr, "layer", 0);
|
||||
if(strlayer[0]) textelement[lasttext].layer = atoi(strlayer);
|
||||
else textelement[lasttext].layer = -1;
|
||||
|
|
@ -2202,7 +2208,7 @@ void place_text(int draw_text, double mx, double my)
|
|||
#endif
|
||||
save_draw=draw_window; /* 20181009 */
|
||||
draw_window=1;
|
||||
if(draw_text) draw_string(textlayer, NOW, textelement[lasttext].txt_ptr, 0, 0,
|
||||
if(draw_text) draw_string(textlayer, NOW, textelement[lasttext].txt_ptr, 0, 0, textelement[lasttext].hcenter, textelement[lasttext].vcenter,
|
||||
textelement[lasttext].x0,textelement[lasttext].y0,
|
||||
textelement[lasttext].xscale, textelement[lasttext].yscale);
|
||||
draw_window = save_draw;
|
||||
|
|
|
|||
19
src/draw.c
19
src/draw.c
|
|
@ -278,7 +278,8 @@ void cairo_draw_string_line(cairo_t *ctx, char *s,
|
|||
}
|
||||
|
||||
/* CAIRO version */
|
||||
void draw_string(int layer, int what, char *s, int rot, int flip, double x, double y, double xscale, double yscale)
|
||||
void draw_string(int layer, int what, char *s, int rot, int flip, int hcenter, int vcenter,
|
||||
double x, double y, double xscale, double yscale)
|
||||
{
|
||||
char *tt, *ss;
|
||||
char c;
|
||||
|
|
@ -294,7 +295,7 @@ void draw_string(int layer, int what, char *s, int rot, int flip, double x, doub
|
|||
if(size*mooz<3.0) return; /* too small */
|
||||
if(size*mooz>800) return; /* too big */
|
||||
|
||||
text_bbox(s, xscale, yscale, rot, flip, x,y, &textx1,&texty1,&textx2,&texty2);
|
||||
text_bbox(s, xscale, yscale, rot, flip, hcenter, vcenter, x,y, &textx1,&texty1,&textx2,&texty2);
|
||||
if(!textclip(areax1,areay1,areax2,areay2,textx1,texty1,textx2,texty2)) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -338,7 +339,7 @@ void draw_string(int layer, int what, char *s, int rot, int flip, double x, doub
|
|||
#else /* !HAS_CAIRO */
|
||||
|
||||
/* no CAIRO version */
|
||||
void draw_string(int layer, int what, char *str, int rot, int flip,
|
||||
void draw_string(int layer, int what, char *str, int rot, int flip, int hcenter, int vcenter,
|
||||
double x1,double y1, double xscale, double yscale)
|
||||
{
|
||||
double a=0.0,yy;
|
||||
|
|
@ -357,7 +358,7 @@ void draw_string(int layer, int what, char *str, int rot, int flip,
|
|||
return;
|
||||
}
|
||||
else {
|
||||
text_bbox(str, xscale, yscale, rot, flip, x1,y1, &textx1,&texty1,&textx2,&texty2);
|
||||
text_bbox(str, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1, &textx1,&texty1,&textx2,&texty2);
|
||||
xscale*=nocairo_font_xscale;
|
||||
yscale*=nocairo_font_yscale;
|
||||
if(!textclip(areax1,areay1,areax2,areay2,textx1,texty1,textx2,texty2)) return;
|
||||
|
|
@ -399,12 +400,12 @@ void draw_string(int layer, int what, char *str, int rot, int flip,
|
|||
|
||||
#endif /* HAS_CAIRO */
|
||||
|
||||
void draw_temp_string(GC gctext, int what, char *str, int rot, int flip,
|
||||
void draw_temp_string(GC gctext, int what, char *str, int rot, int flip, int hcenter, int vcenter,
|
||||
double x1,double y1, double xscale, double yscale)
|
||||
{
|
||||
if(!has_x) return;
|
||||
dbg(2, "draw_string(): string=%s\n",str);
|
||||
if(!text_bbox(str, xscale, yscale, rot, flip, x1,y1, &textx1,&texty1,&textx2,&texty2)) return;
|
||||
if(!text_bbox(str, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1, &textx1,&texty1,&textx2,&texty2)) return;
|
||||
drawtemprect(gctext,what, textx1,texty1,textx2,texty2);
|
||||
}
|
||||
|
||||
|
|
@ -539,7 +540,7 @@ void draw_symbol(int what,int c, int n,int layer,int tmp_flip, int rot,
|
|||
#endif
|
||||
draw_string(textlayer, what, text.txt_ptr,
|
||||
(text.rot + ( (flip && (text.rot & 1) ) ? rot+2 : rot) ) & 0x3,
|
||||
flip^text.flip,
|
||||
flip^text.flip, text.hcenter, text.vcenter,
|
||||
x0+x1, y0+y1, text.xscale, text.yscale);
|
||||
#ifdef HAS_CAIRO
|
||||
if(textfont && textfont[0]) {
|
||||
|
|
@ -665,7 +666,7 @@ void draw_temp_symbol(int what, GC gc, int n,int layer,int tmp_flip, int rot,
|
|||
#endif
|
||||
if(text.txt_ptr[0]) draw_temp_string(gc, what, text.txt_ptr,
|
||||
(text.rot + ( (flip && (text.rot & 1) ) ? rot+2 : rot) ) & 0x3,
|
||||
flip^text.flip, x0+x1, y0+y1, text.xscale, text.yscale);
|
||||
flip^text.flip, text.hcenter, text.vcenter, x0+x1, y0+y1, text.xscale, text.yscale);
|
||||
#ifdef HAS_CAIRO
|
||||
if(customfont) cairo_restore(ctx);
|
||||
#endif
|
||||
|
|
@ -1616,7 +1617,7 @@ void draw(void)
|
|||
}
|
||||
#endif
|
||||
draw_string(textlayer, ADD, textelement[i].txt_ptr,
|
||||
textelement[i].rot, textelement[i].flip,
|
||||
textelement[i].rot, textelement[i].flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0,textelement[i].y0,
|
||||
textelement[i].xscale, textelement[i].yscale);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
|
|||
|
|
@ -700,7 +700,7 @@ void edit_text_property(int x)
|
|||
customfont = set_text_custom_font(&textelement[sel]);
|
||||
#endif
|
||||
text_bbox(textelement[sel].txt_ptr, textelement[sel].xscale,
|
||||
textelement[sel].yscale, rot, flip,
|
||||
textelement[sel].yscale, rot, flip, textelement[sel].hcenter, textelement[sel].vcenter,
|
||||
textelement[sel].x0, textelement[sel].y0,
|
||||
&xx1,&yy1,&xx2,&yy2);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -722,7 +722,7 @@ void edit_text_property(int x)
|
|||
customfont = set_text_custom_font(&textelement[sel]);
|
||||
#endif
|
||||
text_bbox(textelement[sel].txt_ptr, textelement[sel].xscale,
|
||||
textelement[sel].yscale, rot, flip,
|
||||
textelement[sel].yscale, rot, flip, textelement[sel].hcenter, textelement[sel].vcenter,
|
||||
textelement[sel].x0, textelement[sel].y0,
|
||||
&xx1,&yy1,&xx2,&yy2);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -761,6 +761,12 @@ void edit_text_property(int x)
|
|||
if(x==0) {
|
||||
my_strdup(75, &textelement[sel].prop_ptr,(char *) tclgetvar("props"));
|
||||
my_strdup(76, &textelement[sel].font, get_tok_value(textelement[sel].prop_ptr, "font", 0));/*20171206 */
|
||||
|
||||
strlayer = get_tok_value(textelement[sel].prop_ptr, "hcenter", 0);
|
||||
textelement[sel].hcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
strlayer = get_tok_value(textelement[sel].prop_ptr, "vcenter", 0);
|
||||
textelement[sel].vcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
|
||||
strlayer = get_tok_value(textelement[sel].prop_ptr, "layer", 0); /* 20171206 */
|
||||
if(strlayer[0]) textelement[sel].layer = atoi(strlayer);
|
||||
else textelement[sel].layer=-1;
|
||||
|
|
@ -773,7 +779,7 @@ void edit_text_property(int x)
|
|||
customfont = set_text_custom_font(&textelement[sel]);
|
||||
#endif
|
||||
text_bbox(textelement[sel].txt_ptr, textelement[sel].xscale,
|
||||
textelement[sel].yscale, rot, flip,
|
||||
textelement[sel].yscale, rot, flip, textelement[sel].hcenter, textelement[sel].vcenter,
|
||||
textelement[sel].x0, textelement[sel].y0,
|
||||
&xx1,&yy1,&xx2,&yy2);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -873,7 +879,9 @@ void update_symbol(const char *result, int x)
|
|||
|
||||
if(x == 0 && strcmp(tok, "<ALL>")) {
|
||||
|
||||
/* replace any occurrence of " in retval with \" */
|
||||
tcleval("regsub -all {\\\\?\"} $retval {\\\\\"} retval");
|
||||
/* put double quotes around retval */
|
||||
tcleval("set retval \\\"${retval}\\\"");
|
||||
|
||||
my_strdup(656, &new_prop,
|
||||
|
|
@ -1150,7 +1158,9 @@ void edit_property(int x)
|
|||
tok = tclgetvar("selected_tok");
|
||||
if(x == 0 && strcmp(tok, "<ALL>")) {
|
||||
|
||||
/* replace any occurrence of " in retval with \" */
|
||||
tcleval("regsub -all {\\\\?\"} $retval {\\\\\"} retval");
|
||||
/* put double quotes around retval */
|
||||
tcleval("set retval \\\"${retval}\\\"");
|
||||
|
||||
my_strdup(890, &new_prop,
|
||||
|
|
|
|||
|
|
@ -285,7 +285,7 @@ void find_closest_text(double mx,double my)
|
|||
customfont = set_text_custom_font(&textelement[i]);
|
||||
#endif
|
||||
text_bbox(textelement[i].txt_ptr,
|
||||
textelement[i].xscale, textelement[i].yscale, rot, flip,
|
||||
textelement[i].xscale, textelement[i].yscale, rot, flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0, textelement[i].y0,
|
||||
&xx1,&yy1, &xx2,&yy2);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
|
|||
17
src/move.c
17
src/move.c
|
|
@ -215,7 +215,7 @@ void draw_selection(GC g, int interruptable)
|
|||
draw_temp_string(g,ADD, textelement[n].txt_ptr,
|
||||
(textelement[n].rot +
|
||||
( (flip && (textelement[n].rot & 1) ) ? rot+2 : rot) ) & 0x3,
|
||||
textelement[n].flip^flip,
|
||||
textelement[n].flip^flip, textelement[n].hcenter, textelement[n].vcenter,
|
||||
rx1+deltax, ry1+deltay,
|
||||
textelement[n].xscale, textelement[n].yscale);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -701,7 +701,7 @@ void copy_objects(int what)
|
|||
customfont = set_text_custom_font(&textelement[n]);
|
||||
#endif
|
||||
text_bbox(textelement[n].txt_ptr, textelement[n].xscale,
|
||||
textelement[n].yscale, textelement[n].rot,textelement[n].flip,
|
||||
textelement[n].yscale, textelement[n].rot,textelement[n].flip, textelement[n].hcenter, textelement[n].vcenter,
|
||||
textelement[n].x0, textelement[n].y0,
|
||||
&rx1,&ry1, &rx2,&ry2);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -729,6 +729,13 @@ void copy_objects(int what)
|
|||
textelement[lasttext].font=NULL;
|
||||
my_strdup(230, &textelement[lasttext].prop_ptr, textelement[n].prop_ptr);
|
||||
my_strdup(231, &textelement[lasttext].font, get_tok_value(textelement[lasttext].prop_ptr, "font", 0));/*20171206 */
|
||||
|
||||
|
||||
strlayer = get_tok_value(textelement[lasttext].prop_ptr, "hcenter", 0);
|
||||
textelement[lasttext].hcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
strlayer = get_tok_value(textelement[lasttext].prop_ptr, "vcenter", 0);
|
||||
textelement[lasttext].vcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
|
||||
strlayer = get_tok_value(textelement[lasttext].prop_ptr, "layer", 0); /*20171206 */
|
||||
if(strlayer[0]) textelement[lasttext].layer = atoi(strlayer);
|
||||
else textelement[lasttext].layer = -1;
|
||||
|
|
@ -749,7 +756,7 @@ void copy_objects(int what)
|
|||
}
|
||||
#endif
|
||||
draw_string(textlayer, ADD, textelement[lasttext].txt_ptr, /* draw moved txt */
|
||||
textelement[lasttext].rot, textelement[lasttext].flip,
|
||||
textelement[lasttext].rot, textelement[lasttext].flip, textelement[lasttext].hcenter, textelement[lasttext].vcenter,
|
||||
rx1+deltax,ry1+deltay,
|
||||
textelement[lasttext].xscale, textelement[lasttext].yscale);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -1181,7 +1188,7 @@ void move_objects(int what, int merge, double dx, double dy)
|
|||
customfont = set_text_custom_font(&textelement[n]);
|
||||
#endif
|
||||
text_bbox(textelement[n].txt_ptr, textelement[n].xscale,
|
||||
textelement[n].yscale, textelement[n].rot,textelement[n].flip,
|
||||
textelement[n].yscale, textelement[n].rot,textelement[n].flip, textelement[n].hcenter, textelement[n].vcenter,
|
||||
textelement[n].x0, textelement[n].y0,
|
||||
&rx1,&ry1, &rx2,&ry2);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -1215,7 +1222,7 @@ void move_objects(int what, int merge, double dx, double dy)
|
|||
}
|
||||
#endif
|
||||
draw_string(textlayer, ADD, textelement[n].txt_ptr, /* draw moved txt */
|
||||
textelement[n].rot, textelement[n].flip,
|
||||
textelement[n].rot, textelement[n].flip, textelement[n].hcenter, textelement[n].vcenter,
|
||||
textelement[n].x0, textelement[n].y0,
|
||||
textelement[n].xscale, textelement[n].yscale);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
|
|||
|
|
@ -43,6 +43,13 @@ void merge_text(FILE *fd)
|
|||
textelement[i].sel=0;
|
||||
load_ascii_string(&textelement[i].prop_ptr,fd);
|
||||
my_strdup(302, &textelement[i].font, get_tok_value(textelement[i].prop_ptr, "font", 0));/*20171206 */
|
||||
|
||||
|
||||
strlayer = get_tok_value(textelement[i].prop_ptr, "hcenter", 0);
|
||||
textelement[i].hcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
strlayer = get_tok_value(textelement[i].prop_ptr, "vcenter", 0);
|
||||
textelement[i].vcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
|
||||
strlayer = get_tok_value(textelement[i].prop_ptr, "layer", 0); /*20171206 */
|
||||
if(strlayer[0]) textelement[i].layer = atoi(strlayer);
|
||||
else textelement[i].layer = -1;
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ static void ps_drawline(int gc, double linex1,double liney1,double linex2,double
|
|||
}
|
||||
|
||||
static void ps_draw_string(int gctext, char *str,
|
||||
int rot, int flip,
|
||||
int rot, int flip, int hcenter, int vcenter,
|
||||
double x1,double y1,
|
||||
double xscale, double yscale)
|
||||
|
||||
|
|
@ -176,9 +176,9 @@ static void ps_draw_string(int gctext, char *str,
|
|||
|
||||
if(str==NULL) return;
|
||||
#ifdef HAS_CAIRO
|
||||
text_bbox_nocairo(str, xscale, yscale, rot, flip, x1,y1, &rx1,&ry1,&rx2,&ry2);
|
||||
text_bbox_nocairo(str, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1, &rx1,&ry1,&rx2,&ry2);
|
||||
#else
|
||||
text_bbox(str, xscale, yscale, rot, flip, x1,y1, &rx1,&ry1,&rx2,&ry2);
|
||||
text_bbox(str, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1, &rx1,&ry1,&rx2,&ry2);
|
||||
#endif
|
||||
xscale*=nocairo_font_xscale;
|
||||
yscale*=nocairo_font_yscale;
|
||||
|
|
@ -347,7 +347,7 @@ static void ps_draw_symbol(int n,int layer,int tmp_flip, int rot,
|
|||
ROTATION(0.0,0.0,text.x0,text.y0,x1,y1);
|
||||
ps_draw_string(layer, text.txt_ptr,
|
||||
(text.rot + ( (flip && (text.rot & 1) ) ? rot+2 : rot) ) & 0x3,
|
||||
flip^text.flip,
|
||||
flip^text.flip, text.hcenter, text.vcenter,
|
||||
x0+x1, y0+y1, text.xscale, text.yscale);
|
||||
}
|
||||
restore_lw();
|
||||
|
|
@ -472,7 +472,7 @@ void ps_draw(void)
|
|||
for(i=0;i<lasttext;i++)
|
||||
{
|
||||
ps_draw_string(TEXTLAYER, textelement[i].txt_ptr,
|
||||
textelement[i].rot, textelement[i].flip,
|
||||
textelement[i].rot, textelement[i].flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0,textelement[i].y0,
|
||||
textelement[i].xscale, textelement[i].yscale);
|
||||
}
|
||||
|
|
|
|||
12
src/save.c
12
src/save.c
|
|
@ -475,6 +475,12 @@ static void load_text(FILE *fd)
|
|||
textelement[i].sel=0;
|
||||
load_ascii_string(&textelement[i].prop_ptr,fd);
|
||||
if( textelement[i].prop_ptr) my_strdup(318, &textelement[i].font, get_tok_value(textelement[i].prop_ptr, "font", 0));/*20171206 */
|
||||
|
||||
strlayer = get_tok_value(textelement[i].prop_ptr, "hcenter", 0);
|
||||
textelement[i].hcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
strlayer = get_tok_value(textelement[i].prop_ptr, "vcenter", 0);
|
||||
textelement[i].vcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
|
||||
strlayer = get_tok_value(textelement[i].prop_ptr, "layer", 0); /*20171206 */
|
||||
if(strlayer[0]) textelement[i].layer = atoi(strlayer);
|
||||
else textelement[i].layer = -1;
|
||||
|
|
@ -1485,6 +1491,12 @@ int load_sym_def(const char *name, FILE *embed_fd)
|
|||
dbg(2, "l_d_s(): loaded text\n");
|
||||
|
||||
my_strdup(351, &tt[i].font, get_tok_value(tt[i].prop_ptr, "font", 0));/*20171206 */
|
||||
|
||||
strlayer = get_tok_value(tt[i].prop_ptr, "hcenter", 0);
|
||||
tt[i].hcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
strlayer = get_tok_value(tt[i].prop_ptr, "vcenter", 0);
|
||||
tt[i].vcenter = strcmp(strlayer, "true") ? 0 : 1;
|
||||
|
||||
strlayer = get_tok_value(tt[i].prop_ptr, "layer", 0); /*20171206 */
|
||||
if(strlayer[0]) tt[i].layer = atoi(strlayer);
|
||||
else tt[i].layer = -1;
|
||||
|
|
|
|||
12
src/select.c
12
src/select.c
|
|
@ -78,7 +78,7 @@ void symbol_bbox(int i, double *x1,double *y1, double *x2, double *y2)
|
|||
#endif
|
||||
text_bbox(tmp_txt, text.xscale, text.yscale,
|
||||
(text.rot + ( (sym_flip && (text.rot & 1) ) ? sym_rot+2 : sym_rot)) &0x3,
|
||||
sym_flip ^ text.flip,
|
||||
sym_flip ^ text.flip, text.hcenter, text.vcenter,
|
||||
x0+text_x0,y0+text_y0, &xx1,&yy1,&xx2,&yy2);
|
||||
#ifdef HAS_CAIRO
|
||||
if(customfont) cairo_restore(ctx);
|
||||
|
|
@ -217,7 +217,7 @@ void delete(void)
|
|||
customfont = set_text_custom_font(&textelement[i]);
|
||||
#endif
|
||||
text_bbox(textelement[i].txt_ptr, textelement[i].xscale,
|
||||
textelement[i].yscale, rot, flip,
|
||||
textelement[i].yscale, rot, flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0, textelement[i].y0,
|
||||
&xx1,&yy1, &xx2,&yy2);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -495,7 +495,7 @@ void unselect_all(void)
|
|||
customfont = set_text_custom_font(& textelement[i]); /* needed for bbox calculation */
|
||||
#endif
|
||||
draw_temp_string(gctiled,ADD, textelement[i].txt_ptr,
|
||||
textelement[i].rot, textelement[i].flip,
|
||||
textelement[i].rot, textelement[i].flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0, textelement[i].y0,
|
||||
textelement[i].xscale, textelement[i].yscale);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -666,12 +666,12 @@ void select_text(int i,unsigned short select_mode, int fast)
|
|||
#endif
|
||||
if(select_mode)
|
||||
draw_temp_string(gc[SELLAYER],ADD, textelement[i].txt_ptr,
|
||||
textelement[i].rot, textelement[i].flip,
|
||||
textelement[i].rot, textelement[i].flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0, textelement[i].y0,
|
||||
textelement[i].xscale, textelement[i].yscale);
|
||||
else
|
||||
draw_temp_string(gctiled,NOW, textelement[i].txt_ptr,
|
||||
textelement[i].rot, textelement[i].flip,
|
||||
textelement[i].rot, textelement[i].flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0, textelement[i].y0,
|
||||
textelement[i].xscale, textelement[i].yscale);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
@ -910,7 +910,7 @@ void select_inside(double x1,double y1, double x2, double y2, int sel) /* 201509
|
|||
customfont = set_text_custom_font(&textelement[i]);
|
||||
#endif
|
||||
text_bbox(textelement[i].txt_ptr,
|
||||
textelement[i].xscale, textelement[i].yscale, rot, flip,
|
||||
textelement[i].xscale, textelement[i].yscale, rot, flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0, textelement[i].y0,
|
||||
&xx1,&yy1, &xx2,&yy2);
|
||||
#ifdef HAS_CAIRO
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ static void svg_drawline(int gc, double linex1,double liney1,double linex2,doubl
|
|||
}
|
||||
|
||||
static void svg_draw_string(int gctext, char *str,
|
||||
int rot, int flip,
|
||||
int rot, int flip, int hcenter, int vcenter,
|
||||
double x1,double y1,
|
||||
double xscale, double yscale)
|
||||
|
||||
|
|
@ -204,9 +204,9 @@ static void svg_draw_string(int gctext, char *str,
|
|||
|
||||
if(str==NULL) return;
|
||||
#ifdef HAS_CAIRO
|
||||
text_bbox_nocairo(str, xscale, yscale, rot, flip, x1,y1, &rx1,&ry1,&rx2,&ry2);
|
||||
text_bbox_nocairo(str, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1, &rx1,&ry1,&rx2,&ry2);
|
||||
#else
|
||||
text_bbox(str, xscale, yscale, rot, flip, x1,y1, &rx1,&ry1,&rx2,&ry2);
|
||||
text_bbox(str, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1, &rx1,&ry1,&rx2,&ry2);
|
||||
#endif
|
||||
xscale*=nocairo_font_xscale;
|
||||
yscale*=nocairo_font_yscale;
|
||||
|
|
@ -374,7 +374,7 @@ static void svg_draw_symbol(int n,int layer,int tmp_flip, int rot,
|
|||
ROTATION(0.0,0.0,text.x0,text.y0,x1,y1);
|
||||
svg_draw_string(layer, text.txt_ptr,
|
||||
(text.rot + ( (flip && (text.rot & 1) ) ? rot+2 : rot) ) & 0x3,
|
||||
flip^text.flip,
|
||||
flip^text.flip, text.hcenter, text.vcenter,
|
||||
x0+x1, y0+y1, text.xscale, text.yscale);
|
||||
}
|
||||
}
|
||||
|
|
@ -489,7 +489,7 @@ void svg_draw(void)
|
|||
for(i=0;i<lasttext;i++)
|
||||
{
|
||||
svg_draw_string(TEXTLAYER, textelement[i].txt_ptr,
|
||||
textelement[i].rot, textelement[i].flip,
|
||||
textelement[i].rot, textelement[i].flip, textelement[i].hcenter, textelement[i].vcenter,
|
||||
textelement[i].x0,textelement[i].y0,
|
||||
textelement[i].xscale, textelement[i].yscale);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -362,6 +362,7 @@ typedef struct
|
|||
double yscale;
|
||||
char *prop_ptr;
|
||||
int layer; /* 20171201 for cairo */
|
||||
int hcenter, vcenter;
|
||||
char *font; /* 20171201 for cairo */
|
||||
} Text;
|
||||
|
||||
|
|
@ -717,7 +718,7 @@ extern void arc_bbox(double x, double y, double r, double a, double b, double *b
|
|||
extern void bbox(int what,double x1,double y1, double x2, double y2);
|
||||
extern int set_text_custom_font(Text *txt);
|
||||
extern int text_bbox(char * str,double xscale, double yscale,
|
||||
int rot, int flip, double x1,double y1, double *rx1, double *ry1,
|
||||
int rot, int flip, int hcenter, int vcenter, double x1,double y1, double *rx1, double *ry1,
|
||||
double *rx2, double *ry2);
|
||||
|
||||
|
||||
|
|
@ -733,7 +734,7 @@ extern void free_int_hash(struct int_hashentry **table); /* 20180104 */
|
|||
|
||||
#ifdef HAS_CAIRO
|
||||
extern int text_bbox_nocairo(char * str,double xscale, double yscale,
|
||||
int rot, int flip, double x1,double y1, double *rx1, double *ry1,
|
||||
int rot, int flip, int hcenter, int vcenter, double x1,double y1, double *rx1, double *ry1,
|
||||
double *rx2, double *ry2);
|
||||
#endif
|
||||
|
||||
|
|
@ -758,7 +759,7 @@ extern Selected find_closest_obj(double mx,double my);
|
|||
extern void find_closest_net_or_symbol_pin(double mx,double my, double *x, double *y);
|
||||
|
||||
extern void drawline(int c, int what, double x1,double y1,double x2,double y2);
|
||||
extern void draw_string(int layer,int what, char *str, int rot, int flip,
|
||||
extern void draw_string(int layer,int what, char *str, int rot, int flip, int hcenter, int vcenter,
|
||||
double x1, double y1, double xscale, double yscale);
|
||||
extern void draw_symbol(int what,int c, int n,int layer,
|
||||
int tmp_flip, int tmp_rot, double xoffset, double yoffset);
|
||||
|
|
@ -779,7 +780,7 @@ extern void drawtemppolygon(GC gc, int what, double *x, double *y, int points);
|
|||
extern void drawpolygon(int c, int what, double *x, double *y, int points, int poly_fill);
|
||||
extern void draw_temp_symbol(int what, GC gc, int n,int layer,
|
||||
int tmp_flip, int tmp_rot, double xoffset, double yoffset);
|
||||
extern void draw_temp_string(GC gc,int what, char *str, int rot, int flip,
|
||||
extern void draw_temp_string(GC gc,int what, char *str, int rot, int flip, int hcenter, int vcenter,
|
||||
double x1, double y1, double xscale, double yscale);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1971,7 +1971,7 @@ proc change_color {} {
|
|||
proc edit_prop {txtlabel} {
|
||||
global edit_prop_size infowindow_text selected_tok edit_symbol_prop_new_sel edit_prop_pos
|
||||
global prev_symbol retval symbol rcode no_change_attrs preserve_unchanged_attrs copy_cell tcl_debug
|
||||
global user_wants_copy_cell editprop_sympath retval_orig
|
||||
global user_wants_copy_cell editprop_sympath retval_orig old_selected_tok
|
||||
set user_wants_copy_cell 0
|
||||
set rcode {}
|
||||
set retval_orig $retval
|
||||
|
|
@ -2021,7 +2021,15 @@ proc edit_prop {txtlabel} {
|
|||
}
|
||||
|
||||
button .dialog.f1.b1 -text "OK" -command {
|
||||
|
||||
set retval [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
if { $selected_tok ne {<ALL>} } {
|
||||
regsub -all {\\?"} $retval {\\"} retval
|
||||
set retval \"${retval}\"
|
||||
set retval [xschem subst_tok $retval_orig $selected_tok $retval]
|
||||
set selected_tok {<ALL>}
|
||||
}
|
||||
|
||||
set symbol [.dialog.f1.e2 get]
|
||||
set abssymbol [abs_sym_path $symbol]
|
||||
set rcode {ok}
|
||||
|
|
@ -2081,6 +2089,7 @@ proc edit_prop {txtlabel} {
|
|||
checkbutton .dialog.f2.r3 -text "Copy cell" -variable copy_cell -state normal
|
||||
set tok_list "<ALL> [xschem list_tokens $retval 0]"
|
||||
set selected_tok {<ALL>}
|
||||
set old_selected_tok {<ALL>}
|
||||
label .dialog.f2.r4 -text { Edit Attr:}
|
||||
ttk::combobox .dialog.f2.r5 -values $tok_list -textvariable selected_tok -width 14
|
||||
|
||||
|
|
@ -2107,6 +2116,16 @@ proc edit_prop {txtlabel} {
|
|||
}
|
||||
|
||||
bind .dialog.f2.r5 <<ComboboxSelected>> {
|
||||
if {$old_selected_tok ne $selected_tok} {
|
||||
if { $old_selected_tok eq {<ALL>} } {
|
||||
set retval_orig [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
} else {
|
||||
set retval [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
regsub -all {\\?"} $retval {\\"} retval
|
||||
set retval \"${retval}\"
|
||||
set retval_orig [xschem subst_tok $retval_orig $old_selected_tok $retval]
|
||||
}
|
||||
}
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
set retval $retval_orig
|
||||
} else {
|
||||
|
|
@ -2115,10 +2134,21 @@ proc edit_prop {txtlabel} {
|
|||
}
|
||||
.dialog.e1 delete 1.0 end
|
||||
.dialog.e1 insert 1.0 $retval
|
||||
set old_selected_tok $selected_tok
|
||||
}
|
||||
|
||||
bind .dialog.f2.r5 <KeyRelease> {
|
||||
set selected_tok [.dialog.f2.r5 get]
|
||||
if { $old_selected_tok eq {<ALL>}} {
|
||||
set retval_orig [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
} else {
|
||||
set retval [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
if {$retval ne {}} {
|
||||
regsub -all {\\?"} $retval {\\"} retval
|
||||
set retval \"${retval}\"
|
||||
set retval_orig [xschem subst_tok $retval_orig $old_selected_tok $retval]
|
||||
}
|
||||
}
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
set retval $retval_orig
|
||||
} else {
|
||||
|
|
@ -2127,6 +2157,7 @@ proc edit_prop {txtlabel} {
|
|||
}
|
||||
.dialog.e1 delete 1.0 end
|
||||
.dialog.e1 insert 1.0 $retval
|
||||
set old_selected_tok $selected_tok
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2170,7 +2201,7 @@ proc write_data {data f} {
|
|||
|
||||
proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
||||
global text_line_default_geometry preserve_unchanged_attrs
|
||||
global retval rcode tcl_debug tok_list selected_tok retval_orig
|
||||
global retval rcode tcl_debug tok_list selected_tok retval_orig old_selected_tok
|
||||
set retval_orig $retval
|
||||
if $clear==1 then {set retval ""}
|
||||
if $tcl_debug<=-1 then {puts " text_line{}: clear=$clear"}
|
||||
|
|
@ -2184,6 +2215,7 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
|
||||
set tok_list "<ALL> [xschem list_tokens $retval 0]"
|
||||
set selected_tok {<ALL>}
|
||||
set old_selected_tok {<ALL>}
|
||||
# 20160325 change and remember widget size
|
||||
bind .dialog <Configure> {
|
||||
# puts [wm geometry .dialog]
|
||||
|
|
@ -2209,6 +2241,12 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
button .dialog.f1.b1 -text "OK" -command \
|
||||
{
|
||||
set retval [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
if { $selected_tok ne {<ALL>} } {
|
||||
regsub -all {\\?"} $retval {\\"} retval
|
||||
set retval \"${retval}\"
|
||||
set retval [xschem subst_tok $retval_orig $selected_tok $retval]
|
||||
set selected_tok {<ALL>}
|
||||
}
|
||||
destroy .dialog
|
||||
set rcode {ok}
|
||||
}
|
||||
|
|
@ -2231,7 +2269,6 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
{
|
||||
.dialog.e1 delete 1.0 end
|
||||
}
|
||||
set selected_tok {<ALL>}
|
||||
label .dialog.f1.r4 -text { Edit Attr:}
|
||||
ttk::combobox .dialog.f1.r5 -values $tok_list -textvariable selected_tok -width 14
|
||||
|
||||
|
|
@ -2258,6 +2295,16 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
}
|
||||
|
||||
bind .dialog.f1.r5 <<ComboboxSelected>> {
|
||||
if {$old_selected_tok ne $selected_tok} {
|
||||
if { $old_selected_tok eq {<ALL>} } {
|
||||
set retval_orig [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
} else {
|
||||
set retval [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
regsub -all {\\?"} $retval {\\"} retval
|
||||
set retval \"${retval}\"
|
||||
set retval_orig [xschem subst_tok $retval_orig $old_selected_tok $retval]
|
||||
}
|
||||
}
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
set retval $retval_orig
|
||||
} else {
|
||||
|
|
@ -2266,10 +2313,10 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
}
|
||||
.dialog.e1 delete 1.0 end
|
||||
.dialog.e1 insert 1.0 $retval
|
||||
set old_selected_tok $selected_tok
|
||||
}
|
||||
|
||||
|
||||
|
||||
bind .dialog.f1.r5 <KeyRelease> {
|
||||
set selected_tok [.dialog.f1.r5 get]
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
|
|
@ -2282,6 +2329,29 @@ proc text_line {txtlabel clear {preserve_disabled disabled} } {
|
|||
.dialog.e1 insert 1.0 $retval
|
||||
}
|
||||
|
||||
bind .dialog.f1.r5 <KeyRelease> {
|
||||
set selected_tok [.dialog.f1.r5 get]
|
||||
if { $old_selected_tok eq {<ALL>}} {
|
||||
set retval_orig [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
} else {
|
||||
set retval [.dialog.e1 get 1.0 {end - 1 chars}]
|
||||
if {$retval ne {}} {
|
||||
regsub -all {\\?"} $retval {\\"} retval
|
||||
set retval \"${retval}\"
|
||||
set retval_orig [xschem subst_tok $retval_orig $old_selected_tok $retval]
|
||||
}
|
||||
}
|
||||
if {$selected_tok eq {<ALL>} } {
|
||||
set retval $retval_orig
|
||||
} else {
|
||||
set retval [xschem get_tok $retval_orig $selected_tok]
|
||||
regsub -all {\\?"} $retval {"} retval
|
||||
}
|
||||
.dialog.e1 delete 1.0 end
|
||||
.dialog.e1 insert 1.0 $retval
|
||||
set old_selected_tok $selected_tok
|
||||
}
|
||||
|
||||
|
||||
bind .dialog <Control-Return> {.dialog.f1.b1 invoke}
|
||||
#tkwait visibility .dialog
|
||||
|
|
|
|||
Loading…
Reference in New Issue