/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * Contributor(s): * * IBM * - Binding to permit interfacing between Cairo and SWT * - Copyright (C) 2005, 2012 IBM Corp. All Rights Reserved. * * ***** END LICENSE BLOCK ***** */ #include "swt.h" #include "cairo_structs.h" #ifndef NO_cairo_font_extents_t typedef struct cairo_font_extents_t_FID_CACHE { int cached; jclass clazz; jfieldID ascent, descent, height, max_x_advance, max_y_advance; } cairo_font_extents_t_FID_CACHE; cairo_font_extents_t_FID_CACHE cairo_font_extents_tFc; void cachecairo_font_extents_tFields(JNIEnv *env, jobject lpObject) { if (cairo_font_extents_tFc.cached) return; cairo_font_extents_tFc.clazz = (*env)->GetObjectClass(env, lpObject); cairo_font_extents_tFc.ascent = (*env)->GetFieldID(env, cairo_font_extents_tFc.clazz, "ascent", "D"); cairo_font_extents_tFc.descent = (*env)->GetFieldID(env, cairo_font_extents_tFc.clazz, "descent", "D"); cairo_font_extents_tFc.height = (*env)->GetFieldID(env, cairo_font_extents_tFc.clazz, "height", "D"); cairo_font_extents_tFc.max_x_advance = (*env)->GetFieldID(env, cairo_font_extents_tFc.clazz, "max_x_advance", "D"); cairo_font_extents_tFc.max_y_advance = (*env)->GetFieldID(env, cairo_font_extents_tFc.clazz, "max_y_advance", "D"); cairo_font_extents_tFc.cached = 1; } cairo_font_extents_t *getcairo_font_extents_tFields(JNIEnv *env, jobject lpObject, cairo_font_extents_t *lpStruct) { if (!cairo_font_extents_tFc.cached) cachecairo_font_extents_tFields(env, lpObject); lpStruct->ascent = (*env)->GetDoubleField(env, lpObject, cairo_font_extents_tFc.ascent); lpStruct->descent = (*env)->GetDoubleField(env, lpObject, cairo_font_extents_tFc.descent); lpStruct->height = (*env)->GetDoubleField(env, lpObject, cairo_font_extents_tFc.height); lpStruct->max_x_advance = (*env)->GetDoubleField(env, lpObject, cairo_font_extents_tFc.max_x_advance); lpStruct->max_y_advance = (*env)->GetDoubleField(env, lpObject, cairo_font_extents_tFc.max_y_advance); return lpStruct; } void setcairo_font_extents_tFields(JNIEnv *env, jobject lpObject, cairo_font_extents_t *lpStruct) { if (!cairo_font_extents_tFc.cached) cachecairo_font_extents_tFields(env, lpObject); (*env)->SetDoubleField(env, lpObject, cairo_font_extents_tFc.ascent, (jdouble)lpStruct->ascent); (*env)->SetDoubleField(env, lpObject, cairo_font_extents_tFc.descent, (jdouble)lpStruct->descent); (*env)->SetDoubleField(env, lpObject, cairo_font_extents_tFc.height, (jdouble)lpStruct->height); (*env)->SetDoubleField(env, lpObject, cairo_font_extents_tFc.max_x_advance, (jdouble)lpStruct->max_x_advance); (*env)->SetDoubleField(env, lpObject, cairo_font_extents_tFc.max_y_advance, (jdouble)lpStruct->max_y_advance); } #endif #ifndef NO_cairo_path_data_t typedef struct cairo_path_data_t_FID_CACHE { int cached; jclass clazz; jfieldID type, length; } cairo_path_data_t_FID_CACHE; cairo_path_data_t_FID_CACHE cairo_path_data_tFc; void cachecairo_path_data_tFields(JNIEnv *env, jobject lpObject) { if (cairo_path_data_tFc.cached) return; cairo_path_data_tFc.clazz = (*env)->GetObjectClass(env, lpObject); cairo_path_data_tFc.type = (*env)->GetFieldID(env, cairo_path_data_tFc.clazz, "type", "I"); cairo_path_data_tFc.length = (*env)->GetFieldID(env, cairo_path_data_tFc.clazz, "length", "I"); cairo_path_data_tFc.cached = 1; } cairo_path_data_t *getcairo_path_data_tFields(JNIEnv *env, jobject lpObject, cairo_path_data_t *lpStruct) { if (!cairo_path_data_tFc.cached) cachecairo_path_data_tFields(env, lpObject); lpStruct->header.type = (*env)->GetIntField(env, lpObject, cairo_path_data_tFc.type); lpStruct->header.length = (*env)->GetIntField(env, lpObject, cairo_path_data_tFc.length); return lpStruct; } void setcairo_path_data_tFields(JNIEnv *env, jobject lpObject, cairo_path_data_t *lpStruct) { if (!cairo_path_data_tFc.cached) cachecairo_path_data_tFields(env, lpObject); (*env)->SetIntField(env, lpObject, cairo_path_data_tFc.type, (jint)lpStruct->header.type); (*env)->SetIntField(env, lpObject, cairo_path_data_tFc.length, (jint)lpStruct->header.length); } #endif #ifndef NO_cairo_path_t typedef struct cairo_path_t_FID_CACHE { int cached; jclass clazz; jfieldID status, data, num_data; } cairo_path_t_FID_CACHE; cairo_path_t_FID_CACHE cairo_path_tFc; void cachecairo_path_tFields(JNIEnv *env, jobject lpObject) { if (cairo_path_tFc.cached) return; cairo_path_tFc.clazz = (*env)->GetObjectClass(env, lpObject); cairo_path_tFc.status = (*env)->GetFieldID(env, cairo_path_tFc.clazz, "status", "I"); cairo_path_tFc.data = (*env)->GetFieldID(env, cairo_path_tFc.clazz, "data", I_J); cairo_path_tFc.num_data = (*env)->GetFieldID(env, cairo_path_tFc.clazz, "num_data", "I"); cairo_path_tFc.cached = 1; } cairo_path_t *getcairo_path_tFields(JNIEnv *env, jobject lpObject, cairo_path_t *lpStruct) { if (!cairo_path_tFc.cached) cachecairo_path_tFields(env, lpObject); lpStruct->status = (*env)->GetIntField(env, lpObject, cairo_path_tFc.status); lpStruct->data = (cairo_path_data_t *)(*env)->GetIntLongField(env, lpObject, cairo_path_tFc.data); lpStruct->num_data = (*env)->GetIntField(env, lpObject, cairo_path_tFc.num_data); return lpStruct; } void setcairo_path_tFields(JNIEnv *env, jobject lpObject, cairo_path_t *lpStruct) { if (!cairo_path_tFc.cached) cachecairo_path_tFields(env, lpObject); (*env)->SetIntField(env, lpObject, cairo_path_tFc.status, (jint)lpStruct->status); (*env)->SetIntLongField(env, lpObject, cairo_path_tFc.data, (jintLong)lpStruct->data); (*env)->SetIntField(env, lpObject, cairo_path_tFc.num_data, (jint)lpStruct->num_data); } #endif #ifndef NO_cairo_text_extents_t typedef struct cairo_text_extents_t_FID_CACHE { int cached; jclass clazz; jfieldID x_bearing, y_bearing, width, height, x_advance, y_advance; } cairo_text_extents_t_FID_CACHE; cairo_text_extents_t_FID_CACHE cairo_text_extents_tFc; void cachecairo_text_extents_tFields(JNIEnv *env, jobject lpObject) { if (cairo_text_extents_tFc.cached) return; cairo_text_extents_tFc.clazz = (*env)->GetObjectClass(env, lpObject); cairo_text_extents_tFc.x_bearing = (*env)->GetFieldID(env, cairo_text_extents_tFc.clazz, "x_bearing", "D"); cairo_text_extents_tFc.y_bearing = (*env)->GetFieldID(env, cairo_text_extents_tFc.clazz, "y_bearing", "D"); cairo_text_extents_tFc.width = (*env)->GetFieldID(env, cairo_text_extents_tFc.clazz, "width", "D"); cairo_text_extents_tFc.height = (*env)->GetFieldID(env, cairo_text_extents_tFc.clazz, "height", "D"); cairo_text_extents_tFc.x_advance = (*env)->GetFieldID(env, cairo_text_extents_tFc.clazz, "x_advance", "D"); cairo_text_extents_tFc.y_advance = (*env)->GetFieldID(env, cairo_text_extents_tFc.clazz, "y_advance", "D"); cairo_text_extents_tFc.cached = 1; } cairo_text_extents_t *getcairo_text_extents_tFields(JNIEnv *env, jobject lpObject, cairo_text_extents_t *lpStruct) { if (!cairo_text_extents_tFc.cached) cachecairo_text_extents_tFields(env, lpObject); lpStruct->x_bearing = (*env)->GetDoubleField(env, lpObject, cairo_text_extents_tFc.x_bearing); lpStruct->y_bearing = (*env)->GetDoubleField(env, lpObject, cairo_text_extents_tFc.y_bearing); lpStruct->width = (*env)->GetDoubleField(env, lpObject, cairo_text_extents_tFc.width); lpStruct->height = (*env)->GetDoubleField(env, lpObject, cairo_text_extents_tFc.height); lpStruct->x_advance = (*env)->GetDoubleField(env, lpObject, cairo_text_extents_tFc.x_advance); lpStruct->y_advance = (*env)->GetDoubleField(env, lpObject, cairo_text_extents_tFc.y_advance); return lpStruct; } void setcairo_text_extents_tFields(JNIEnv *env, jobject lpObject, cairo_text_extents_t *lpStruct) { if (!cairo_text_extents_tFc.cached) cachecairo_text_extents_tFields(env, lpObject); (*env)->SetDoubleField(env, lpObject, cairo_text_extents_tFc.x_bearing, (jdouble)lpStruct->x_bearing); (*env)->SetDoubleField(env, lpObject, cairo_text_extents_tFc.y_bearing, (jdouble)lpStruct->y_bearing); (*env)->SetDoubleField(env, lpObject, cairo_text_extents_tFc.width, (jdouble)lpStruct->width); (*env)->SetDoubleField(env, lpObject, cairo_text_extents_tFc.height, (jdouble)lpStruct->height); (*env)->SetDoubleField(env, lpObject, cairo_text_extents_tFc.x_advance, (jdouble)lpStruct->x_advance); (*env)->SetDoubleField(env, lpObject, cairo_text_extents_tFc.y_advance, (jdouble)lpStruct->y_advance); } #endif