+ int kmax = 16;
+ for (int k = kmax ; k != 0 ; k /= 2) {
+ int kk = 2 * k;
+ double ar = k * p.Rscale;
+ double ai = k * p.Iscale;
+ cr = p.Rmin;
+ for (x = 0 ; x < w.width ; x += k) {
+ ci = p.Imax;
+ for (y = 0 ; y < w.height ; y += k) {
+ if (x % kk != 0 || y % kk != 0 || k == kmax) {
+ int i = check_point(p, cr, ci);
+ if (i != iprev) {
+ set_color(w, p, i);
+ iprev = 1;
+ }
+ if (k > 2) {
+ w.fillRect(x, y, x + k - 1, y + k - 1);
+ } else {
+ w.drawPoint(x, y);
+ if (k == 2) {
+ w.drawPoint(x + 1, y);
+ w.drawPoint(x, y + 1);
+ w.drawPoint(x + 1, y + 1);
+ }
+ }
+ }
+ ci -= ai;
+ }
+ cr += ar;
+ }
+ }
+}
+
+// Fonction de dessin principale, calcule la zone d'intérêt, appelle
+// do_mandel(), pour dessiner l'ensemle, et permet le zoom.
+void mandel(DrawingWindow &w)
+{
+ parameters p = initial_parameters;