added commented lines for antialiasing; JL:cairo_set_line_width should only be called with has_x as xctx->cairo_ctx and xctx->cairo_save_ctx is NULL when run with -x; JL:XCopyArea must be called to draw correctly with Cairo on Windows

This commit is contained in:
stefan schippers 2022-12-02 16:43:01 +01:00
parent f18ed49f6f
commit b23988ccdf
5 changed files with 49 additions and 43 deletions

View File

@ -3540,9 +3540,11 @@ int XSetTile(Display* display, GC gc, Pixmap s_pixmap)
void MyXCopyArea(Display* display, Drawable src, Drawable dest, GC gc, int src_x, int src_y, void MyXCopyArea(Display* display, Drawable src, Drawable dest, GC gc, int src_x, int src_y,
unsigned int width, unsigned int height, int dest_x, int dest_y) unsigned int width, unsigned int height, int dest_x, int dest_y)
{ {
#if !defined(__unix__)
#if !defined(__unix__) && defined(HAS_CAIRO) XCopyArea(display, src, dest, gc, src_x, src_y, width, height, dest_x, dest_y);
#if defined(HAS_CAIRO)
my_cairo_fill(xctx->cairo_save_sfc, dest_x, dest_y, width, height); my_cairo_fill(xctx->cairo_save_sfc, dest_x, dest_y, width, height);
#endif
#elif (defined(__unix__) && defined(HAS_CAIRO)) || DRAW_ALL_CAIRO==1 #elif (defined(__unix__) && defined(HAS_CAIRO)) || DRAW_ALL_CAIRO==1
cairo_set_source_surface(xctx->cairo_ctx, xctx->cairo_save_sfc, 0, 0); cairo_set_source_surface(xctx->cairo_ctx, xctx->cairo_save_sfc, 0, 0);
cairo_paint(xctx->cairo_ctx); cairo_paint(xctx->cairo_ctx);
@ -3550,4 +3552,3 @@ void MyXCopyArea(Display* display, Drawable src, Drawable dest, GC gc, int src_x
XCopyArea(display, src, dest, gc, src_x, src_y, width, height, dest_x, dest_y); XCopyArea(display, src, dest, gc, src_x, src_y, width, height, dest_x, dest_y);
#endif #endif
} }

View File

@ -1734,8 +1734,10 @@ void change_linewidth(double w)
xctx->areah = xctx->areay2 - xctx->areay1; xctx->areah = xctx->areay2 - xctx->areay1;
} }
#if HAS_CAIRO==1 #if HAS_CAIRO==1
if(has_x) {
cairo_set_line_width(xctx->cairo_ctx, INT_WIDTH(xctx->lw)); cairo_set_line_width(xctx->cairo_ctx, INT_WIDTH(xctx->lw));
cairo_set_line_width(xctx->cairo_save_ctx, INT_WIDTH(xctx->lw)); cairo_set_line_width(xctx->cairo_save_ctx, INT_WIDTH(xctx->lw));
}
#endif #endif
} }
@ -1772,6 +1774,7 @@ static void resetcairo(int create, int clear, int force_or_resize)
} }
xctx->cairo_save_ctx = cairo_create(xctx->cairo_save_sfc); xctx->cairo_save_ctx = cairo_create(xctx->cairo_save_sfc);
/* cairo_set_antialias (xctx->cairo_save_ctx, CAIRO_ANTIALIAS_NONE); */
cairo_select_font_face(xctx->cairo_save_ctx, tclgetvar("cairo_font_name"), cairo_select_font_face(xctx->cairo_save_ctx, tclgetvar("cairo_font_name"),
CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(xctx->cairo_save_ctx, 20); cairo_set_font_size(xctx->cairo_save_ctx, 20);
@ -1792,6 +1795,7 @@ static void resetcairo(int create, int clear, int force_or_resize)
fprintf(errfp, "ERROR: invalid cairo surface\n"); fprintf(errfp, "ERROR: invalid cairo surface\n");
} }
xctx->cairo_ctx = cairo_create(xctx->cairo_sfc); xctx->cairo_ctx = cairo_create(xctx->cairo_sfc);
/* cairo_set_antialias (xctx->cairo_ctx, CAIRO_ANTIALIAS_NONE); */
cairo_select_font_face(xctx->cairo_ctx, tclgetvar("cairo_font_name"), cairo_select_font_face(xctx->cairo_ctx, tclgetvar("cairo_font_name"),
CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(xctx->cairo_ctx, 20); cairo_set_font_size(xctx->cairo_ctx, 20);

View File

@ -7,23 +7,23 @@ S {}
E {} E {}
B 2 860 -550 1360 -160 {flags=graph B 2 860 -550 1360 -160 {flags=graph
y1 = 0 y1 = 0
y2 = 6.6 y2 = 6
divy = 4 divy = 4
subdivy=1 subdivy=1
x1=0 x1=-0.0573452
x2=24 x2=22.5919
divx=8 divx=8
unitx=1 unitx=1
color=15 color=15
node=i(vload) node=i(vload)
dataset=-1} dataset=-1}
B 2 860 -790 1360 -550 {flags=graph B 2 860 -790 1360 -550 {flags=graph
y1 = 0 y1 = 7.29412e-05
y2 = 112 y2 = 99.9997
divy = 4 divy = 4
subdivy=1 subdivy=1
x1=0 x1=-0.0573452
x2=24 x2=22.5919
divx=8 divx=8
unitx=1 unitx=1
color=8 color=8
@ -32,47 +32,43 @@ plus
i(vload) i(vload)
*\\"" *\\""
dataset=-1} dataset=-1}
T {Voc = 22
Wp = 100W
Vmp = 17.5} 320 -550 0 0 0.4 0.4 {}
T {position the mouse close to one of the curves T {position the mouse close to one of the curves
and press 't' to display only that curve. and press 't' to display only that curve.
This allows you to annotate the active This allows you to annotate the active
waveform in the schematic.} 480 -470 0 0 0.3 0.3 {} waveform in the schematic.} 480 -370 0 0 0.3 0.3 {}
N 230 -440 230 -380 { N 430 -480 430 -420 {
lab=minus} lab=minus}
N 230 -530 230 -500 { N 430 -570 430 -540 {
lab=mn} lab=mn}
N 90 -420 110 -420 { N 290 -460 310 -460 {
lab=fade} lab=fade}
N 230 -660 230 -590 { N 430 -700 430 -630 {
lab=pn} lab=pn}
N 230 -760 230 -720 { N 430 -800 430 -760 {
lab=plus} lab=plus}
C {iopin.sym} 230 -760 2 1 {name=p1 lab=plus} C {iopin.sym} 430 -800 2 1 {name=p1 lab=plus}
C {iopin.sym} 230 -380 2 1 {name=p2 lab=minus} C {iopin.sym} 430 -420 2 1 {name=p2 lab=minus}
C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true} C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true}
C {ammeter.sym} 230 -470 2 1 {name=Vm} C {ammeter.sym} 430 -510 2 1 {name=Vm}
C {lab_pin.sym} 230 -610 2 0 {name=l2 sig_type=std_logic lab=pn} C {lab_pin.sym} 430 -650 2 0 {name=l2 sig_type=std_logic lab=pn}
C {lab_pin.sym} 230 -510 2 0 {name=l3 sig_type=std_logic lab=mn} C {lab_pin.sym} 430 -550 2 0 {name=l3 sig_type=std_logic lab=mn}
C {isource_arith.sym} 230 -560 2 0 {name=G1 C {isource_arith.sym} 430 -600 2 0 {name=G1
CUR="v(f) * 5.5 * (1 - exp( (v(pn,mn) CUR="v(f) * power * 2.16 / n * (1 - (3.5e-7 * exp( v(pn,mn) / n / 0.041)))"
+ -21 - v(f)*2.5 ) * 0.6) -
+ 0.002 * (v(pn,mn) - 21 - v(f)*2.5))"
} }
C {ipin.sym} 90 -420 2 1 {name=p2 lab=fade} C {ipin.sym} 290 -460 2 1 {name=p2 lab=fade}
C {ammeter.sym} 140 -420 3 0 {name=Vf} C {ammeter.sym} 340 -460 3 0 {name=Vf}
C {lab_pin.sym} 170 -420 2 0 {name=l3 sig_type=std_logic lab=f} C {lab_pin.sym} 370 -460 2 0 {name=l3 sig_type=std_logic lab=f}
C {ammeter.sym} 230 -690 2 1 {name=Vp} C {ammeter.sym} 430 -730 2 1 {name=Vp}
C {code_shown.sym} 30 -280 0 0 {name=CONTROL C {code_shown.sym} 30 -280 0 0 {name=CONTROL
only_toplevel=true only_toplevel=true
value=" value=".param power=100
.param n=36
vload plus minus 0 vload plus minus 0
vsun fade 0 0 vsun fade 0 0
vref minus 0 0 vref minus 0 0
.control .control
save plus i(vload) i(vm) n(pn) v(mn) save plus i(vload) i(vm) n(pn) v(mn)
dc vload 0 24 0.5 vsun 0.2 1.0 0.2 dc vload 0 48 0.2 vsun 0.2 1.0 0.2
write pv_ngspice.raw write pv_ngspice.raw
quit quit
.endc .endc
@ -262,7 +258,13 @@ AAAAAAAAAAA2QAAAAAAAADZAAAAAAAAAAADARn38MD4KQMBGffwwPgpAwEZ9/DA+CkAAAAAAAIA2QAAA
A0CQxRO3tvADQJDFE7e28ANAAAAAAAAAN0AAAAAAAAAAAAAAAAAAADdAAAAAAAAAN0AAAAAAAAAAAEB3KAhg5fY/QHcoCGDl9j9AdygIYOX2PwAAAAAAgDdAAAAAAAAA A0CQxRO3tvADQJDFE7e28ANAAAAAAAAAN0AAAAAAAAAAAAAAAAAAADdAAAAAAAAAN0AAAAAAAAAAAEB3KAhg5fY/QHcoCGDl9j9AdygIYOX2PwAAAAAAgDdAAAAAAAAA
AAAAAAAAAIA3QAAAAAAAgDdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QAAAAAAAAAAAAAAAAAAAOEAAAAAAAAA4QAAAAAAAAAAAgJ4EsCXg AAAAAAAAAIA3QAAAAAAAgDdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QAAAAAAAAAAAAAAAAAAAOEAAAAAAAAA4QAAAAAAAAAAAgJ4EsCXg
/r+AngSwJeD+v4CeBLAl4P6/"} /r+AngSwJeD+v4CeBLAl4P6/"}
C {ngspice_get_expr.sym} 280 -560 0 0 {name=r24 C {ngspice_get_expr.sym} 480 -600 0 0 {name=r24
node="[format %.4g [expr ([ngspice::get_voltage pn] - [ngspice::get_voltage mn]) * [ngspice::get_current Vm]]] W" node="[format %.4g [expr ([ngspice::get_voltage pn] - [ngspice::get_voltage mn]) * [ngspice::get_current Vm]]] W"
descr = power descr = power
} }
C {launcher.sym} 1300 -90 0 0 {name=h2
descr="Reload waves"
tclcommand="
xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw
"
}

View File

@ -2,11 +2,11 @@ v {xschem version=3.1.0 file_version=1.2
} }
G {} G {}
K {type=subcircuit K {type=subcircuit
format="@name @pinlist @symname m=@m" format="@name @pinlist @symname power=@power n=@n m=@m"
template="name=X1 m=1"} template="name=X1 power=100 n=36 m=1"}
V {} V {}
S {} S {}
E {} E {}
@ -22,7 +22,6 @@ B 5 -42.5 -2.5 -37.5 2.5 {name=fade dir=in}
P 4 7 -35 -30 -25 -20 -20 -25 -15 -10 -30 -15 -25 -20 -35 -30 {} P 4 7 -35 -30 -25 -20 -20 -25 -15 -10 -30 -15 -25 -20 -35 -30 {}
P 4 7 -35 -5 -25 5 -20 0 -15 15 -30 10 -25 5 -35 -5 {} P 4 7 -35 -5 -25 5 -20 0 -15 15 -30 10 -25 5 -35 -5 {}
T {@name} 15 -28.75 0 0 0.2 0.2 {} T {@name} 15 -28.75 0 0 0.2 0.2 {}
T {Voc = 22 T {Wp = @power
Wp = 100W n = @n} 30 -10 0 0 0.2 0.2 {}
Vmp = 17.5} 30 -10 0 0 0.2 0.2 {}
T {m=@m} -5 16.25 0 1 0.2 0.2 {} T {m=@m} -5 16.25 0 1 0.2 0.2 {}

View File

@ -275,7 +275,7 @@ tclcommand="
xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw tran xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw tran
" "
} }
C {pv_ngspice.sym} 370 -360 0 0 {name=X1 m=1} C {pv_ngspice.sym} 370 -360 0 0 {name=X1 m=1 power=100 n=36}
C {lab_pin.sym} 370 -280 0 0 {name=l12 lab=0 } C {lab_pin.sym} 370 -280 0 0 {name=l12 lab=0 }
C {capa.sym} 510 -410 0 0 {name=C11 C {capa.sym} 510 -410 0 0 {name=C11
m=1 m=1