Lines 332-338
void checkGC (int mask) {
Link Here
|
332 |
if ((state & DRAW_OFFSET) != 0) { |
332 |
if ((state & DRAW_OFFSET) != 0) { |
333 |
data.cairoXoffset = data.cairoYoffset = 0; |
333 |
data.cairoXoffset = data.cairoYoffset = 0; |
334 |
double[] matrix = new double[6]; |
334 |
double[] matrix = new double[6]; |
335 |
Cairo.cairo_get_matrix(cairo, matrix); |
335 |
cairo_get_matrix(cairo, matrix); |
336 |
double[] dx = new double[]{1}; |
336 |
double[] dx = new double[]{1}; |
337 |
double[] dy = new double[]{1}; |
337 |
double[] dy = new double[]{1}; |
338 |
Cairo.cairo_user_to_device_distance(cairo, dx, dy); |
338 |
Cairo.cairo_user_to_device_distance(cairo, dx, dy); |
Lines 659-664
void disposeLayout() {
Link Here
|
659 |
|
659 |
|
660 |
@Override |
660 |
@Override |
661 |
void destroy() { |
661 |
void destroy() { |
|
|
662 |
if (OS.GTK_VERSION >= OS.VERSION(3, 9, 0)) { |
663 |
Cairo.cairo_restore(data.cairo); |
664 |
} |
662 |
if (data.disposeCairo) { |
665 |
if (data.disposeCairo) { |
663 |
long /*int*/ cairo = data.cairo; |
666 |
long /*int*/ cairo = data.cairo; |
664 |
if (cairo != 0) Cairo.cairo_destroy(cairo); |
667 |
if (cairo != 0) Cairo.cairo_destroy(cairo); |
Lines 1447-1453
void drawPolyline(long /*int*/ cairo, int[] pointArray, boolean close) {
Link Here
|
1447 |
for (int i = 1, j=2; i < count; i++, j += 2) { |
1450 |
for (int i = 1, j=2; i < count; i++, j += 2) { |
1448 |
Cairo.cairo_line_to(cairo, pointArray[j] + xOffset, pointArray[j + 1] + yOffset); |
1451 |
Cairo.cairo_line_to(cairo, pointArray[j] + xOffset, pointArray[j + 1] + yOffset); |
1449 |
} |
1452 |
} |
1450 |
if (close) Cairo.cairo_close_path(cairo); |
1453 |
//if (close) Cairo.cairo_close_path(cairo); |
1451 |
} |
1454 |
} |
1452 |
|
1455 |
|
1453 |
/** |
1456 |
/** |
Lines 2055-2060
public void fillPolygon(int[] pointArray) {
Link Here
|
2055 |
checkGC(FILL); |
2058 |
checkGC(FILL); |
2056 |
long /*int*/ cairo = data.cairo; |
2059 |
long /*int*/ cairo = data.cairo; |
2057 |
if (cairo != 0) { |
2060 |
if (cairo != 0) { |
|
|
2061 |
System.out.println(pointArray.length); |
2062 |
if (pointArray.length >= 80) |
2063 |
return; |
2058 |
drawPolyline(cairo, pointArray, true); |
2064 |
drawPolyline(cairo, pointArray, true); |
2059 |
Cairo.cairo_fill(cairo); |
2065 |
Cairo.cairo_fill(cairo); |
2060 |
return; |
2066 |
return; |
Lines 2419-2425
public Rectangle getClipping() {
Link Here
|
2419 |
/* Convert to user space */ |
2425 |
/* Convert to user space */ |
2420 |
if (cairo != 0) { |
2426 |
if (cairo != 0) { |
2421 |
double[] matrix = new double[6]; |
2427 |
double[] matrix = new double[6]; |
2422 |
Cairo.cairo_get_matrix(cairo, matrix); |
2428 |
cairo_get_matrix(cairo, matrix); |
2423 |
Cairo.cairo_matrix_invert(matrix); |
2429 |
Cairo.cairo_matrix_invert(matrix); |
2424 |
clipRgn = convertRgn(rgn, matrix); |
2430 |
clipRgn = convertRgn(rgn, matrix); |
2425 |
OS.gdk_region_destroy(rgn); |
2431 |
OS.gdk_region_destroy(rgn); |
Lines 2435-2440
public Rectangle getClipping() {
Link Here
|
2435 |
return new Rectangle(x, y, width, height); |
2441 |
return new Rectangle(x, y, width, height); |
2436 |
} |
2442 |
} |
2437 |
|
2443 |
|
|
|
2444 |
void cairo_get_matrix(long /*int*/ cairo, double[] matrix) { |
2445 |
//TODO cairo_get_matrix behavior changed in GTK 3.10 |
2446 |
matrix[0] = 1; |
2447 |
matrix[1] = 0; |
2448 |
matrix[2] = 0; |
2449 |
matrix[3] = 1; |
2450 |
matrix[4] = 0; |
2451 |
matrix[5] = 0; |
2452 |
} |
2453 |
|
2438 |
/** |
2454 |
/** |
2439 |
* Sets the region managed by the argument to the current |
2455 |
* Sets the region managed by the argument to the current |
2440 |
* clipping region of the receiver. |
2456 |
* clipping region of the receiver. |
Lines 2480-2486
public void getClipping(Region region) {
Link Here
|
2480 |
/* Convert to user space */ |
2496 |
/* Convert to user space */ |
2481 |
if (cairo != 0) { |
2497 |
if (cairo != 0) { |
2482 |
double[] matrix = new double[6]; |
2498 |
double[] matrix = new double[6]; |
2483 |
Cairo.cairo_get_matrix(cairo, matrix); |
2499 |
cairo_get_matrix(cairo, matrix); |
2484 |
Cairo.cairo_matrix_invert(matrix); |
2500 |
Cairo.cairo_matrix_invert(matrix); |
2485 |
long /*int*/ rgn = convertRgn(clipping, matrix); |
2501 |
long /*int*/ rgn = convertRgn(clipping, matrix); |
2486 |
OS.gdk_region_subtract(clipping, clipping); |
2502 |
OS.gdk_region_subtract(clipping, clipping); |
Lines 2852-2858
public void getTransform(Transform transform) {
Link Here
|
2852 |
if (transform.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); |
2868 |
if (transform.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT); |
2853 |
long /*int*/ cairo = data.cairo; |
2869 |
long /*int*/ cairo = data.cairo; |
2854 |
if (cairo != 0) { |
2870 |
if (cairo != 0) { |
2855 |
Cairo.cairo_get_matrix(cairo, transform.handle); |
2871 |
cairo_get_matrix(cairo, transform.handle); |
2856 |
double[] identity = identity(); |
2872 |
double[] identity = identity(); |
2857 |
Cairo.cairo_matrix_invert(identity); |
2873 |
Cairo.cairo_matrix_invert(identity); |
2858 |
Cairo.cairo_matrix_multiply(transform.handle, transform.handle, identity); |
2874 |
Cairo.cairo_matrix_multiply(transform.handle, transform.handle, identity); |
Lines 2935-2940
void init(Drawable drawable, GCData data, long /*int*/ gdkGC) {
Link Here
|
2935 |
if (OS.USE_CAIRO) { |
2951 |
if (OS.USE_CAIRO) { |
2936 |
long /*int*/ cairo = data.cairo = handle; |
2952 |
long /*int*/ cairo = data.cairo = handle; |
2937 |
Cairo.cairo_set_fill_rule(cairo, Cairo.CAIRO_FILL_RULE_EVEN_ODD); |
2953 |
Cairo.cairo_set_fill_rule(cairo, Cairo.CAIRO_FILL_RULE_EVEN_ODD); |
|
|
2954 |
if (OS.GTK_VERSION >= OS.VERSION(3, 9, 0)) { |
2955 |
Cairo.cairo_save(cairo); |
2956 |
} |
2938 |
data.state &= ~(BACKGROUND | FOREGROUND | FONT | LINE_WIDTH | LINE_CAP | LINE_JOIN | LINE_STYLE | DRAW_OFFSET); |
2957 |
data.state &= ~(BACKGROUND | FOREGROUND | FONT | LINE_WIDTH | LINE_CAP | LINE_JOIN | LINE_STYLE | DRAW_OFFSET); |
2939 |
} else if (OS.INIT_CAIRO) { |
2958 |
} else if (OS.INIT_CAIRO) { |
2940 |
initCairo(); |
2959 |
initCairo(); |
Lines 3285-3298
static void setCairoPatternColor(long /*int*/ pattern, int offset, Color c, int
Link Here
|
3285 |
|
3304 |
|
3286 |
void setCairoClip(long /*int*/ damageRgn, long /*int*/ clipRgn) { |
3305 |
void setCairoClip(long /*int*/ damageRgn, long /*int*/ clipRgn) { |
3287 |
long /*int*/ cairo = data.cairo; |
3306 |
long /*int*/ cairo = data.cairo; |
3288 |
if (OS.GTK_VERSION >= OS.VERSION(2,18,0) && data.drawable != 0 && !OS.GTK3) { |
3307 |
if (OS.GTK_VERSION >= OS.VERSION(3, 9, 0)) { |
3289 |
OS.gdk_cairo_reset_clip(cairo, data.drawable); |
3308 |
Cairo.cairo_restore(cairo); |
|
|
3309 |
Cairo.cairo_save(cairo); |
3310 |
data.state &= ~(BACKGROUND | FOREGROUND | LINE_CAP | LINE_JOIN | LINE_WIDTH | LINE_STYLE | LINE_MITERLIMIT); |
3290 |
} else { |
3311 |
} else { |
3291 |
Cairo.cairo_reset_clip(cairo); |
3312 |
if (OS.GTK_VERSION >= OS.VERSION(2,18,0) && data.drawable != 0 && !OS.GTK3) { |
|
|
3313 |
OS.gdk_cairo_reset_clip(cairo, data.drawable); |
3314 |
} else { |
3315 |
Cairo.cairo_reset_clip(cairo); |
3316 |
} |
3292 |
} |
3317 |
} |
3293 |
if (damageRgn != 0) { |
3318 |
if (damageRgn != 0) { |
3294 |
double[] matrix = new double[6]; |
3319 |
double[] matrix = new double[6]; |
3295 |
Cairo.cairo_get_matrix(cairo, matrix); |
3320 |
cairo_get_matrix(cairo, matrix); |
3296 |
double[] identity = new double[6]; |
3321 |
double[] identity = new double[6]; |
3297 |
Cairo.cairo_matrix_init_identity(identity); |
3322 |
Cairo.cairo_matrix_init_identity(identity); |
3298 |
Cairo.cairo_set_matrix(cairo, identity); |
3323 |
Cairo.cairo_set_matrix(cairo, identity); |
Lines 3326-3332
void setClipping(long /*int*/ clipRgn) {
Link Here
|
3326 |
OS.gdk_region_union(data.clipRgn, clipRgn); |
3351 |
OS.gdk_region_union(data.clipRgn, clipRgn); |
3327 |
if (cairo != 0) { |
3352 |
if (cairo != 0) { |
3328 |
if (data.clippingTransform == null) data.clippingTransform = new double[6]; |
3353 |
if (data.clippingTransform == null) data.clippingTransform = new double[6]; |
3329 |
Cairo.cairo_get_matrix(cairo, data.clippingTransform); |
3354 |
cairo_get_matrix(cairo, data.clippingTransform); |
3330 |
setCairoClip(data.damageRgn, clipRgn); |
3355 |
setCairoClip(data.damageRgn, clipRgn); |
3331 |
} else { |
3356 |
} else { |
3332 |
long /*int*/ clipping = clipRgn; |
3357 |
long /*int*/ clipping = clipRgn; |