Mercurial > projects > dwt-linux
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); |