comparison dwt/graphics/Path.d @ 33:27324bbbac70

changed to regenerated BCD bindings
author Frank Benoit <benoit@tionex.de>
date Thu, 10 Jan 2008 02:18:07 +0100
parents fc2b263b8a3f
children 93981635e709
comparison
equal deleted inserted replaced
32:b7c28480e3e0 33:27324bbbac70
11 module dwt.graphics.Path; 11 module dwt.graphics.Path;
12 12
13 import dwt.SWT; 13 import dwt.SWT;
14 import dwt.internal.Compatibility; 14 import dwt.internal.Compatibility;
15 import dwt.internal.cairo.Cairo; 15 import dwt.internal.cairo.Cairo;
16 import dwt.internal.gtk.c.cairotypes;
17 import dwt.graphics.Resource; 16 import dwt.graphics.Resource;
18 import dwt.graphics.Device; 17 import dwt.graphics.Device;
19 import dwt.graphics.Font; 18 import dwt.graphics.Font;
20 import dwt.graphics.GC; 19 import dwt.graphics.GC;
21 import dwt.graphics.GCData; 20 import dwt.graphics.GCData;
82 public this (Device device) { 81 public this (Device device) {
83 if (device is null) device = Device.getDevice(); 82 if (device is null) device = Device.getDevice();
84 if (device is null) SWT.error(SWT.ERROR_NULL_ARGUMENT); 83 if (device is null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
85 this.device = device; 84 this.device = device;
86 device.checkCairo(); 85 device.checkCairo();
87 auto surface = Cairo.cairo_image_surface_create(cast(cairo_format_t)Cairo.CAIRO_FORMAT_ARGB32, 1, 1); 86 auto surface = Cairo.cairo_image_surface_create(Cairo.CAIRO_FORMAT_ARGB32, 1, 1);
88 if (surface is null) SWT.error(SWT.ERROR_NO_HANDLES); 87 if (surface is null) SWT.error(SWT.ERROR_NO_HANDLES);
89 handle = Cairo.cairo_create(surface); 88 handle = Cairo.cairo_create(surface);
90 Cairo.cairo_surface_destroy(surface); 89 Cairo.cairo_surface_destroy(surface);
91 if (handle is null) SWT.error(SWT.ERROR_NO_HANDLES); 90 if (handle is null) SWT.error(SWT.ERROR_NO_HANDLES);
92 if (device.tracking) device.new_Object(this); 91 if (device.tracking) device.new_Object(this);
335 maxX = maxY = -double.max; 334 maxX = maxY = -double.max;
336 int i = 0; 335 int i = 0;
337 cairo_path_data_t* data = new cairo_path_data_t(); 336 cairo_path_data_t* data = new cairo_path_data_t();
338 while (i < path.num_data) { 337 while (i < path.num_data) {
339 *data = path.data[i]; 338 *data = path.data[i];
340 switch (data.type) { 339 switch (data.header.type) {
341 case Cairo.CAIRO_PATH_MOVE_TO: 340 case Cairo.CAIRO_PATH_MOVE_TO:
342 minX = Math.min(minX, path.data[i+1].x); 341 minX = Math.min(minX, path.data[i+1].point.x);
343 minY = Math.min(minY, path.data[i+1].y); 342 minY = Math.min(minY, path.data[i+1].point.y);
344 maxX = Math.max(maxX, path.data[i+1].x); 343 maxX = Math.max(maxX, path.data[i+1].point.x);
345 maxY = Math.max(maxY, path.data[i+1].y); 344 maxY = Math.max(maxY, path.data[i+1].point.y);
346 break; 345 break;
347 case Cairo.CAIRO_PATH_LINE_TO: 346 case Cairo.CAIRO_PATH_LINE_TO:
348 minX = Math.min(minX, path.data[i+1].x); 347 minX = Math.min(minX, path.data[i+1].point.x);
349 minY = Math.min(minY, path.data[i+1].y); 348 minY = Math.min(minY, path.data[i+1].point.y);
350 maxX = Math.max(maxX, path.data[i+1].x); 349 maxX = Math.max(maxX, path.data[i+1].point.x);
351 maxY = Math.max(maxY, path.data[i+1].y); 350 maxY = Math.max(maxY, path.data[i+1].point.y);
352 break; 351 break;
353 case Cairo.CAIRO_PATH_CURVE_TO: 352 case Cairo.CAIRO_PATH_CURVE_TO:
354 minX = Math.min(minX, path.data[i+1].x); 353 minX = Math.min(minX, path.data[i+1].point.x);
355 minY = Math.min(minY, path.data[i+1].y); 354 minY = Math.min(minY, path.data[i+1].point.y);
356 maxX = Math.max(maxX, path.data[i+1].x); 355 maxX = Math.max(maxX, path.data[i+1].point.x);
357 maxY = Math.max(maxY, path.data[i+1].y); 356 maxY = Math.max(maxY, path.data[i+1].point.y);
358 minX = Math.min(minX, path.data[i+2].x); 357 minX = Math.min(minX, path.data[i+2].point.x);
359 minY = Math.min(minY, path.data[i+2].y); 358 minY = Math.min(minY, path.data[i+2].point.y);
360 maxX = Math.max(maxX, path.data[i+2].x); 359 maxX = Math.max(maxX, path.data[i+2].point.x);
361 maxY = Math.max(maxY, path.data[i+2].y); 360 maxY = Math.max(maxY, path.data[i+2].point.y);
362 minX = Math.min(minX, path.data[i+3].x); 361 minX = Math.min(minX, path.data[i+3].point.x);
363 minY = Math.min(minY, path.data[i+3].y); 362 minY = Math.min(minY, path.data[i+3].point.y);
364 maxX = Math.max(maxX, path.data[i+3].x); 363 maxX = Math.max(maxX, path.data[i+3].point.x);
365 maxY = Math.max(maxY, path.data[i+3].y); 364 maxY = Math.max(maxY, path.data[i+3].point.y);
366 break; 365 break;
367 case Cairo.CAIRO_PATH_CLOSE_PATH: break; 366 case Cairo.CAIRO_PATH_CLOSE_PATH: break;
368 } 367 }
369 i += data.length; 368 i += data.header.length;
370 } 369 }
371 } 370 }
372 bounds[0] = cast(float)minX; 371 bounds[0] = cast(float)minX;
373 bounds[1] = cast(float)minY; 372 bounds[1] = cast(float)minY;
374 bounds[2] = cast(float)(maxX - minX); 373 bounds[2] = cast(float)(maxX - minX);
423 if (path.num_data > 0) { 422 if (path.num_data > 0) {
424 int i = 0; 423 int i = 0;
425 double[] points = new double[6]; 424 double[] points = new double[6];
426 cairo_path_data_t* data = new cairo_path_data_t(); 425 cairo_path_data_t* data = new cairo_path_data_t();
427 while (i < path.num_data) { 426 while (i < path.num_data) {
428 switch (data.type) { 427 switch (data.header.type) {
429 case Cairo.CAIRO_PATH_MOVE_TO: 428 case Cairo.CAIRO_PATH_MOVE_TO:
430 types[typeIndex++] = SWT.PATH_MOVE_TO; 429 types[typeIndex++] = SWT.PATH_MOVE_TO;
431 pts[ptsIndex++] = cast(float)path.data[i+1].x; 430 pts[ptsIndex++] = cast(float)path.data[i+1].point.x;
432 pts[ptsIndex++] = cast(float)path.data[i+1].y; 431 pts[ptsIndex++] = cast(float)path.data[i+1].point.y;
433 break; 432 break;
434 case Cairo.CAIRO_PATH_LINE_TO: 433 case Cairo.CAIRO_PATH_LINE_TO:
435 types[typeIndex++] = SWT.PATH_LINE_TO; 434 types[typeIndex++] = SWT.PATH_LINE_TO;
436 pts[ptsIndex++] = cast(float)path.data[i+1].x; 435 pts[ptsIndex++] = cast(float)path.data[i+1].point.x;
437 pts[ptsIndex++] = cast(float)path.data[i+1].y; 436 pts[ptsIndex++] = cast(float)path.data[i+1].point.y;
438 break; 437 break;
439 case Cairo.CAIRO_PATH_CURVE_TO: 438 case Cairo.CAIRO_PATH_CURVE_TO:
440 types[typeIndex++] = SWT.PATH_CUBIC_TO; 439 types[typeIndex++] = SWT.PATH_CUBIC_TO;
441 pts[ptsIndex++] = cast(float)path.data[i+1].x; 440 pts[ptsIndex++] = cast(float)path.data[i+1].point.x;
442 pts[ptsIndex++] = cast(float)path.data[i+1].y; 441 pts[ptsIndex++] = cast(float)path.data[i+1].point.y;
443 pts[ptsIndex++] = cast(float)path.data[i+2].x; 442 pts[ptsIndex++] = cast(float)path.data[i+2].point.x;
444 pts[ptsIndex++] = cast(float)path.data[i+2].y; 443 pts[ptsIndex++] = cast(float)path.data[i+2].point.y;
445 pts[ptsIndex++] = cast(float)path.data[i+3].x; 444 pts[ptsIndex++] = cast(float)path.data[i+3].point.x;
446 pts[ptsIndex++] = cast(float)path.data[i+3].y; 445 pts[ptsIndex++] = cast(float)path.data[i+3].point.y;
447 break; 446 break;
448 case Cairo.CAIRO_PATH_CLOSE_PATH: 447 case Cairo.CAIRO_PATH_CLOSE_PATH:
449 types[typeIndex++] = SWT.PATH_CLOSE; 448 types[typeIndex++] = SWT.PATH_CLOSE;
450 break; 449 break;
451 } 450 }
452 i += data.length; 451 i += data.header.length;
453 } 452 }
454 } 453 }
455 if (typeIndex != types.length) { 454 if (typeIndex != types.length) {
456 byte[] newTypes = new byte[typeIndex]; 455 byte[] newTypes = new byte[typeIndex];
457 System.arraycopy(types, 0, newTypes, 0, typeIndex); 456 System.arraycopy(types, 0, newTypes, 0, typeIndex);