FIX_BROKEN_TILED_FILL can now be changed runtime (fix_broken_tiled_fill)

This commit is contained in:
stefan schippers 2023-09-27 01:28:31 +02:00
parent 9316878559
commit f3230ceb42
12 changed files with 142 additions and 86 deletions

View File

@ -511,6 +511,7 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
<li><kbd> abort_operation</kbd></li><pre>
@ -668,6 +669,7 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
<li><kbd> currsch </kbd> hierarchy level of current schematic (start at 0) </li>
<li><kbd> debug_var </kbd> debug level (0 = no debug, 1, 2, 3,...) </li>
<li><kbd> draw_window </kbd> direct draw into window </li>
<li><kbd> fix_broken_tiled_fill </kbd> get drawing method setting (for broken GPUs) </li>
<li><kbd> format </kbd> alternate format attribute to use in netlist (or NULL) </li>
<li><kbd> graph_lastsel </kbd> number of last graph that was clicked </li>
<li><kbd> gridlayer </kbd> layer number for grid </li>
@ -1060,6 +1062,8 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
afterward </pre>
<li><kbd> reset_flags</kbd></li><pre>
Reset cached instance and symbol cached flags (inst-&gt;flags, sym-&gt;flags) </pre>
<li><kbd> resetwin create_pixmap clear_pixmap force w h</kbd></li><pre>
internal command: calls resetwin() </pre>
<li><kbd> resolved_net [net]</kbd></li><pre>
if 'net' is given return its topmost full hierarchy name
else returns the topmost full hierarchy name of selected net/pin/label.
@ -1141,6 +1145,7 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
<li><kbd> color_ps </kbd> set color psoscript (1 or 0) </li>
<li><kbd> constrained_move </kbd> set constrained move (1=horiz, 2=vert, 0=none) </li>
<li><kbd> draw_window </kbd> set drawing to window (1 or 0) </li>
<li><kbd> fix_broken_tiled_fill </kbd> alternate drawing method for broken GPUs </li>
<li><kbd> format </kbd> set name of custom format attribute used for netlisting </li>
<li><kbd> header_text </kbd> set header metadata (used for license info) </li>
<li><kbd> hide_symbols </kbd> set to 0,1,2 for various hiding level of symbols </li>
@ -1328,7 +1333,6 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
</ul>

View File

@ -3452,17 +3452,17 @@ void select_rect(int what, int select)
{
RECTORDER(xctx->nl_xr,xctx->nl_yr,xctx->nl_xr2,xctx->nl_yr2);
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
/*
* MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
* xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
*/
if(fix_broken_tiled_fill || !_unix) {
/*
* MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
* xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
*/
MyXCopyAreaDouble(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
xctx->nl_xr, xctx->nl_yr, xctx->nl_xr2, xctx->nl_yr2, xctx->nl_xr, xctx->nl_yr, xctx->lw);
#else
drawtemprect(xctx->gctiled, NOW, xctx->nl_xr,xctx->nl_yr,xctx->nl_xr2,xctx->nl_yr2);
#endif
MyXCopyAreaDouble(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
xctx->nl_xr, xctx->nl_yr, xctx->nl_xr2, xctx->nl_yr2, xctx->nl_xr, xctx->nl_yr, xctx->lw);
} else {
drawtemprect(xctx->gctiled, NOW, xctx->nl_xr,xctx->nl_yr,xctx->nl_xr2,xctx->nl_yr2);
}
/* draw_selection(xctx->gc[SELLAYER], 0); */
select_inside(xctx->nl_xr,xctx->nl_yr,xctx->nl_xr2,xctx->nl_yr2, xctx->nl_sel);

View File

@ -992,17 +992,17 @@ void draw_crosshair(int del)
xctx->draw_pixmap = 0;
xctx->draw_window = 1;
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
0, (int)Y_TO_SCREEN(xctx->prev_crossy) - 2 * INT_WIDTH(xctx->lw),
xctx->xrect[0].width, 4 * INT_WIDTH(xctx->lw),
0, (int)Y_TO_SCREEN(xctx->prev_crossy) - 2 * INT_WIDTH(xctx->lw));
if(fix_broken_tiled_fill || !_unix) {
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
0, (int)Y_TO_SCREEN(xctx->prev_crossy) - 2 * INT_WIDTH(xctx->lw),
xctx->xrect[0].width, 4 * INT_WIDTH(xctx->lw),
0, (int)Y_TO_SCREEN(xctx->prev_crossy) - 2 * INT_WIDTH(xctx->lw));
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
(int)X_TO_SCREEN(xctx->prev_crossx) - 2 * INT_WIDTH(xctx->lw), 0,
4 * INT_WIDTH(xctx->lw), xctx->xrect[0].height,
(int)X_TO_SCREEN(xctx->prev_crossx) - 2 * INT_WIDTH(xctx->lw), 0);
#endif
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
(int)X_TO_SCREEN(xctx->prev_crossx) - 2 * INT_WIDTH(xctx->lw), 0,
4 * INT_WIDTH(xctx->lw), xctx->xrect[0].height,
(int)X_TO_SCREEN(xctx->prev_crossx) - 2 * INT_WIDTH(xctx->lw), 0);
}
draw_selection(xctx->gc[SELLAYER], 0);
drawtempline(xctx->gctiled, NOW, X_TO_XSCHEM(xctx->areax1),
xctx->prev_crossy, X_TO_XSCHEM(xctx->areax2), xctx->prev_crossy);
@ -1184,16 +1184,16 @@ int draw_xhair = tclgetboolvar("draw_crosshair");
break;
}
if(xctx->ui_state & STARTPAN) pan(RUBBER, mx, my);
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if ((xctx->ui_state & STARTWIRE) || (xctx->ui_state & STARTARC) ||
(xctx->ui_state & STARTLINE) || (xctx->ui_state & STARTMOVE) ||
(xctx->ui_state & STARTCOPY) || (xctx->ui_state & STARTRECT) ||
(xctx->ui_state & STARTPOLYGON) || /* (xctx->ui_state & STARTPAN) || */
(xctx->ui_state & STARTSELECT)) {
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
if(fix_broken_tiled_fill || !_unix) {
if ((xctx->ui_state & STARTWIRE) || (xctx->ui_state & STARTARC) ||
(xctx->ui_state & STARTLINE) || (xctx->ui_state & STARTMOVE) ||
(xctx->ui_state & STARTCOPY) || (xctx->ui_state & STARTRECT) ||
(xctx->ui_state & STARTPOLYGON) || /* (xctx->ui_state & STARTPAN) || */
(xctx->ui_state & STARTSELECT)) {
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
}
}
#endif
if(draw_xhair) {
draw_crosshair(0);
}

View File

@ -406,9 +406,9 @@ void draw_temp_string(GC gctext, int what, const char *str, short rot, short fli
int tmp;
double dtmp;
if(!has_x) return;
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if(gctext == xctx->gctiled) return;
#endif
if(fix_broken_tiled_fill || !_unix) {
if(gctext == xctx->gctiled) return;
}
dbg(2, "draw_string(): string=%s\n",str);
if(!text_bbox(str, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1,
@ -728,9 +728,9 @@ void draw_temp_symbol(int what, GC gc, int n,int layer,short tmp_flip, short rot
if(xctx->inst[n].ptr == -1) return;
if(!has_x) return;
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if(gc == xctx->gctiled) return;
#endif
if(fix_broken_tiled_fill || !_unix) {
if(gc == xctx->gctiled) return;
}
if( (xctx->inst[n].flags & HIDE_INST) ||
(xctx->hide_symbols==1 && (xctx->inst[n].ptr+ xctx->sym)->prop_ptr &&
@ -1161,9 +1161,9 @@ void drawtempline(GC gc, int what, double linex1,double liney1,double linex2,dou
double x1,y1,x2,y2;
if(!has_x) return;
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if(gc == xctx->gctiled) return;
#endif
if(fix_broken_tiled_fill || !_unix) {
if(gc == xctx->gctiled) return;
}
if(what & ADD)
{
@ -1238,9 +1238,9 @@ void drawtemparc(GC gc, int what, double x, double y, double r, double a, double
double xx1, yy1, xx2, yy2; /* complete circle bbox in screen coords */
if(!has_x) return;
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if(gc == xctx->gctiled) return;
#endif
if(fix_broken_tiled_fill || !_unix) {
if(gc == xctx->gctiled) return;
}
if(what & ADD)
{
@ -1673,9 +1673,9 @@ void drawtemppolygon(GC g, int what, double *x, double *y, int points)
int i;
short sx, sy;
if(!has_x) return;
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if(g == xctx->gctiled) return;
#endif
if(fix_broken_tiled_fill || !_unix) {
if(g == xctx->gctiled) return;
}
polygon_bbox(x, y, points, &x1,&y1,&x2,&y2);
x1=X_TO_SCREEN(x1);
@ -1767,9 +1767,9 @@ void drawtemprect(GC gc, int what, double rectx1,double recty1,double rectx2,dou
double x1,y1,x2,y2;
if(!has_x) return;
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if(gc == xctx->gctiled) return;
#endif
if(fix_broken_tiled_fill || !_unix) {
if(gc == xctx->gctiled) return;
}
if(what & NOW)
{

View File

@ -131,6 +131,17 @@ Pixmap cad_icon_pixmap=0, cad_icon_mask=0;
/* char *cad_icon[] */
Pixmap *pixmap = NULL;
Visual *visual;
#ifdef __unix__
int _unix = 1;
#else
int _unix = 0;
#endif
#ifdef FIX_BROKEN_TILED_FILL
int fix_broken_tiled_fill = 1;
#else
int fix_broken_tiled_fill = 0;
#endif
/* ---------------------------------------------- */
/* These variables are mirrored in tcl code */

View File

@ -195,13 +195,13 @@ void draw_selection(GC g, int interruptable)
dbg(1,"draw_selection\n");
if(g != xctx->gctiled) xctx->movelastsel = xctx->lastsel;
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
else {
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
if(tclgetboolvar("draw_crosshair")) draw_crosshair(0);
if(fix_broken_tiled_fill || !_unix) {
if(g == xctx->gctiled) {
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
if(tclgetboolvar("draw_crosshair")) draw_crosshair(0);
}
}
#endif
for(i=0;i<xctx->movelastsel; ++i)
{
c = xctx->sel_array[i].col;n = xctx->sel_array[i].n;
@ -678,10 +678,10 @@ void copy_objects(int what)
if(tclgetintvar("connect_by_kissing") == 2) tclsetintvar("connect_by_kissing", 0);
}
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
#endif
if(fix_broken_tiled_fill || !_unix) {
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
}
xctx->move_rot = xctx->move_flip = 0;
xctx->deltax = xctx->deltay = 0.;
@ -1124,11 +1124,11 @@ void move_objects(int what, int merge, double dx, double dy)
pop_undo(0, 0);
if(tclgetintvar("connect_by_kissing") == 2) tclsetintvar("connect_by_kissing", 0);
}
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if(fix_broken_tiled_fill || !_unix) {
if(xctx->save_pixmap && xctx->window)
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
#endif
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
}
xctx->move_rot=xctx->move_flip=0;
xctx->deltax=xctx->deltay=0.;

View File

@ -1010,6 +1010,10 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
}
break;
case 'f':
if(!strcmp(argv[2], "fix_broken_tiled_fill")) { /* get drawing method setting (for broken GPUs) */
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
Tcl_SetResult(interp, my_itoa(fix_broken_tiled_fill),TCL_VOLATILE);
}
if(!strcmp(argv[2], "format")) { /* alternate format attribute to use in netlist (or NULL) */
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
if(!xctx->format ) Tcl_SetResult(interp, "<NULL>",TCL_STATIC);
@ -3317,6 +3321,17 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
Tcl_ResetResult(interp);
}
/* resetwin create_pixmap clear_pixmap force w h
* internal command: calls resetwin() */
else if(!strcmp(argv[1], "resetwin"))
{
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
if(argc > 6) {
resetwin(atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), atoi(argv[6]));
}
Tcl_ResetResult(interp);
}
/* resolved_net [net]
* if 'net' is given return its topmost full hierarchy name
* else returns the topmost full hierarchy name of selected net/pin/label.
@ -3748,6 +3763,10 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
xctx->draw_window=atoi(argv[3]);
}
else if(!strcmp(argv[2], "fix_broken_tiled_fill")) { /* alternate drawing method for broken GPUs */
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
fix_broken_tiled_fill = atoi(argv[3]);
}
else if(!strcmp(argv[2], "format")) { /* set name of custom format attribute used for netlisting */
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
my_strdup(_ALLOC_ID_, &xctx->format, argv[3]);

View File

@ -924,13 +924,13 @@ void unselect_all(int dr)
xctx->ui_state &= ~SELECTION;
my_snprintf(str, S(str), "%s/%s", user_conf_dir, ".selection.sch"); /* 20161115 PWD->HOME */
xunlink(str);
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
if(xctx->save_pixmap && xctx->window) {
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
if(tclgetboolvar("draw_crosshair")) draw_crosshair(0);
if(fix_broken_tiled_fill || !_unix) {
if(xctx->save_pixmap && xctx->window) {
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], xctx->xrect[0].x, xctx->xrect[0].y,
xctx->xrect[0].width, xctx->xrect[0].height, xctx->xrect[0].x, xctx->xrect[0].y);
if(tclgetboolvar("draw_crosshair")) draw_crosshair(0);
}
}
#endif
dbg(2, "unselect_all(1): done\n");
}

View File

@ -2096,10 +2096,8 @@ void resetwin(int create_pixmap, int clear_pixmap, int force, int w, int h)
XFreeGC(display,xctx->gctiled);
}
if(create_pixmap) {
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
XGCValues gcv;
unsigned long gcvm;
#endif
#ifdef __unix__
xctx->save_pixmap = XCreatePixmap(display, xctx->window,
@ -2109,16 +2107,16 @@ void resetwin(int create_pixmap, int clear_pixmap, int force, int w, int h)
xctx->xrect[0].width, xctx->xrect[0].height, screendepth);
#endif
#if defined(FIX_BROKEN_TILED_FILL) || !defined(__unix__)
gcv.function = GXnoop; /* disable all graphic operations with gctiled */
gcvm = GCFunction;
xctx->gctiled = XCreateGC(display,xctx->window, gcvm, &gcv); /* noop for gctiled */
XSetFillStyle(display,xctx->gctiled,FillSolid);
#else
xctx->gctiled = XCreateGC(display,xctx->window,0L, NULL);
XSetTile(display,xctx->gctiled, xctx->save_pixmap);
XSetFillStyle(display,xctx->gctiled,FillTiled);
#endif
if(fix_broken_tiled_fill || !_unix) {
gcv.function = GXnoop; /* disable all graphic operations with gctiled */
gcvm = GCFunction;
xctx->gctiled = XCreateGC(display,xctx->window, gcvm, &gcv); /* noop for gctiled */
XSetFillStyle(display,xctx->gctiled,FillSolid);
} else {
xctx->gctiled = XCreateGC(display,xctx->window,0L, NULL);
XSetTile(display,xctx->gctiled, xctx->save_pixmap);
XSetFillStyle(display,xctx->gctiled,FillTiled);
}
/* whenever a pixmap is recreated all GC attributes must be reissued */
resetcairo(1, 0, 1); /* create, clear, force */
@ -2490,6 +2488,7 @@ int Tcl_AppInit(Tcl_Interp *inter)
l_width=atoi(tclgetvar("line_width"));
if(tclgetboolvar("change_lw")) l_width = 0.0;
cadlayers=atoi(tclgetvar("cadlayers"));
fix_broken_tiled_fill = tclgetboolvar("fix_broken_tiled_fill");
if(debug_var==-10) debug_var=0;
my_snprintf(tmp, S(tmp), "%.16g",CADGRID);
tclvareval("set_ne cadgrid ", tmp, NULL);

View File

@ -1079,11 +1079,13 @@ typedef struct {
/* GLOBAL VARIABLES */
/*********** X11 specific globals ***********/
/*********** X11/system specific globals ***********/
extern Colormap colormap;
extern unsigned char **pixdata;
extern unsigned char pixdata_init[22][32];
extern Display *display;
extern int _unix; /* set to 1 on unix systems */
extern int fix_broken_tiled_fill; /* if set to 1 work around some GPUs with rotten tiled fill operations */
#ifdef HAS_XCB
extern xcb_connection_t *xcb_conn;

View File

@ -5593,8 +5593,8 @@ set tctx::global_list {
delay_flag dim_bg dim_value
disable_unique_names do_all_inst draw_crosshair draw_grid draw_window edit_prop_pos edit_prop_size
edit_symbol_prop_new_sel editprop_sympath en_hilight_conn_inst enable_dim_bg enable_stretch
filetmp flat_netlist fullscreen gaw_fd gaw_tcp_address graph_bus graph_change_done graph_digital
graph_linewidth_mult graph_logx
filetmp fix_broken_tiled_fill flat_netlist fullscreen gaw_fd gaw_tcp_address graph_bus
graph_change_done graph_digital graph_linewidth_mult graph_logx
graph_logy graph_rainbow graph_raw_level graph_schname graph_sel_color graph_sel_wave
graph_selected graph_sort graph_unlocked hide_empty_graphs hide_symbols hsize
incr_hilight infowindow_text input_line_cmd input_line_data launcher_default_program
@ -6116,9 +6116,6 @@ proc build_widgets { {topwin {} } } {
-command {
input_line "Enter grid spacing (float):" "xschem set cadgrid" $cadgrid
}
$topwin.menubar.view.menu add checkbutton -label "View only Probes" -variable only_probes \
-accelerator {5} \
-command { xschem only_probes }
$topwin.menubar.view.menu add command -label "Toggle colorscheme" -accelerator {Shift+O} -command {
xschem toggle_colorscheme
xschem build_colors
@ -6150,6 +6147,19 @@ proc build_widgets { {topwin {} } } {
-command {
if { $draw_window == 1} { xschem set draw_window 1} else { xschem set draw_window 0}
}
$topwin.menubar.view.menu add checkbutton -label "Fix for GPUs with broken tiled fill" \
-variable fix_broken_tiled_fill \
-command {
if { $fix_broken_tiled_fill == 1} {
xschem set fix_broken_tiled_fill 1
} else {
xschem set fix_broken_tiled_fill 0
}
xschem resetwin 1 1 0 0 0
xschem redraw
}
$topwin.menubar.view.menu add checkbutton -label "Symbol text" -variable sym_txt \
-accelerator {Ctrl+B} -command { xschem set sym_txt $sym_txt; xschem redraw }
$topwin.menubar.view.menu add checkbutton -label "Toggle variable line width" -variable change_lw \
@ -6278,6 +6288,9 @@ proc build_widgets { {topwin {} } } {
xschem redraw } \
-variable compare_sch \
-accelerator {Alt-X}
$topwin.menubar.hilight.menu add checkbutton -label "View only Probes" -variable only_probes \
-accelerator {5} \
-command { xschem only_probes }
$topwin.menubar.hilight.menu add command \
-label {Highlight net-pin mismatches on sel. instances} \
-command "xschem net_pin_mismatch" \
@ -6845,6 +6858,7 @@ set_ne dark_colorscheme 1
set_ne enable_dim_bg 0
set_ne dim_bg 0.0
set_ne dim_value 0.0
set_ne fix_broken_tiled_fill 0 ;# set to 1 on some broken X11 drivers / GPUs that show garbage on screen */
##### set colors
if {!$rainbow_colors} {
set_ne cadlayers 22

View File

@ -469,3 +469,10 @@
#### Instead, additional drives can be added using XSCHEM_LIBRARY_PATH
#### default: 1
# set add_all_windows_drives 0
###########################################################################
#### FIX GRAPHIC PROBLEMS ON SOME DRIVERS/GPU CONFIGURATIONS
###########################################################################
#### if you see garbage on screen / graphic artifacts while editing with
#### xschem try to set this to 1. Default: not enabled (0)
# set fix_broken_tiled_fill 0