X



トップページLinux
922コメント335KB
GTK+プログラミング
0836login:Penguin
垢版 |
2017/11/01(水) 19:11:17.65ID:6RRJjvM+
>>820はGTK+3でBITMAPを表示する方法がわからなかったので
ネットで調べてとりあえず作ってみたものです

それとgtk_widget_queue_draw()をスレッド側で使う場合
下記のようにしないとダメなようです

gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave();
0837login:Penguin
垢版 |
2017/11/01(水) 19:12:33.94ID:6RRJjvM+
デモとして違うのも作ってみました
>>820-825のプログラムのthread_func()関数を下のものに差し替えてみてください

static gpointer thread_func( gpointer data){
int i, j, col, i1, depth;
double xgap, ygap, xx, yy, a1, b1, x1, y1, tmp1, x2, y2;
double xcorner, ycorner, length;
cairo_t *ic;
int count01;
struct {
double xcorner;
double ycorner;
double length;
} param[8];

param[0].xcorner = -1.785666666666666e+000; param[0].ycorner = -2.508333333333312e-002;
param[0].length = 5.000000000000000e-002;

param[1].xcorner = -1.759984700520832e+000; param[1].ycorner = -1.518603515624978e-002;
param[1].length = 9.765625000000001e-005;

param[2].xcorner = -1.759906697591145e+000; param[2].ycorner = -1.515360514322895e-002;
param[2].length = 6.103515625000000e-006;

param[3].xcorner = -1.759901244004566e+000; param[3].ycorner = -1.515219028790770e-002;
param[3].length = 4.768371582031250e-008;

param[4].xcorner = -1.759901209723814e+000; param[4].ycorner = -1.515217680089193e-002;
param[4].length = 5.820766091346741e-012;

param[5].xcorner = -2.112213541666665e-001; param[5].ycorner = -7.939140624999994e-001;
param[5].length = 1.562500000000000e-003;
0838login:Penguin
垢版 |
2017/11/01(水) 19:13:17.37ID:6RRJjvM+
続き

param[6].xcorner = -2.238124999999996e-001; param[6].ycorner = -6.581041666666665e-001;
param[6].length = 1.250000000000000e-002;

param[7].xcorner = -2.137343749999995e-001; param[7].ycorner = -6.554270833333333e-001;
param[7].length = 3.906250000000000e-004;

ic = cairo_create (glob.image);
for (count01 = 0; count01 < 8; count01++) {
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
cairo_stroke_preserve(ic);
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_fill(ic);

xcorner = param[count01].xcorner;
ycorner = param[count01].ycorner;
length = param[count01].length;
depth = 1000;

xgap = length / BITMAP_WIDTH;
ygap = length / BITMAP_HEIGHT;
xx = xcorner;
yy = ycorner;
for(j = 0; j < BITMAP_WIDTH; j++) {
ic = cairo_create (glob.image);
for(i = 0; i < BITMAP_HEIGHT; i++) {
a1 = xx; b1 = yy;
i1 = 0; x1 = 0; y1 = 0;
x2 = x1 * x1;
y2 = y1 * y1;
0839login:Penguin
垢版 |
2017/11/01(水) 19:13:57.79ID:6RRJjvM+
終わり
while ((i1 < depth) && (x2+y2 <=4)) {
tmp1 = x2 - y2 + a1;
y1 = 2 * x1 * y1 + b1; x1 = tmp1;
x2 = x1 * x1; y2 = y1 * y1; i1++;
}
if (i1 == depth) i1 = 0;
else i1++;
col = i1;
gdk_threads_enter();
cairo_set_source_rgb(ic, (col % 256) / 256.0, 0.0, 0.0);
cairo_rectangle(ic, (double)i, (double)j, 1.0, 1.0);
cairo_stroke(ic);
gdk_threads_leave();
xx = xx + xgap;
}
yy = yy + ygap; xx = xcorner;
if (j % 5 == 0) {
gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave();
}
usleep(1000);
}
gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave();
usleep(50000);
}
cairo_destroy (ic);
execflag01 = 0;
}
レスを投稿する


ニューススポーツなんでも実況