| /* | |
| * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. | |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| * | |
| * This code is free software; you can redistribute it and/or modify it | |
| * under the terms of the GNU General Public License version 2 only, as | |
| * published by the Free Software Foundation. Oracle designates this | |
| * particular file as subject to the "Classpath" exception as provided | |
| * by Oracle in the LICENSE file that accompanied this code. | |
| * | |
| * This code is distributed in the hope that it will be useful, but WITHOUT | |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| * version 2 for more details (a copy is included in the LICENSE file that | |
| * accompanied this code). | |
| * | |
| * You should have received a copy of the GNU General Public License version | |
| * 2 along with this work; if not, write to the Free Software Foundation, | |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| * | |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| * or visit www.oracle.com if you need additional information or have any | |
| * questions. | |
| */ | |
| #import "PrinterSurfaceData.h" | |
| #import "jni_util.h" | |
| //#define DEBUG 1 | |
| #if defined DEBUG | |
| #define PRINT(msg) {fprintf(stderr, "%s\n", msg);} | |
| #else | |
| #define PRINT(msg) {} | |
| #endif | |
| static LockFunc PrintSD_Lock; | |
| static UnlockFunc PrintSD_Unlock; | |
| static GetRasInfoFunc PrintSD_GetRasInfo; | |
| static ReleaseFunc PrintSD_ReleaseRasInfo; | |
| static void flush(JNIEnv *env, QuartzSDOps *qsdo); | |
| static void PrintSD_startCGContext(JNIEnv *env, QuartzSDOps *qsdo, SDRenderType renderType) | |
| { | |
| PRINT(" PrintSD_startCGContext") | |
| if (qsdo->cgRef != NULL) | |
| { | |
| flush(env, qsdo); | |
| SetUpCGContext(env, qsdo, renderType); | |
| } | |
| } | |
| static void PrintSD_finishCGContext(JNIEnv *env, QuartzSDOps *qsdo) | |
| { | |
| PRINT(" PrintSD_finishCGContext") | |
| if (qsdo->cgRef != NULL) | |
| { | |
| CompleteCGContext(env, qsdo); | |
| } | |
| } | |
| static void PrintSD_dispose(JNIEnv *env, SurfaceDataOps *sdo) | |
| { | |
| PRINT(" PrintSD_dispose") | |
| QuartzSDOps *qsdo = (QuartzSDOps *)sdo; | |
| (*env)->DeleteGlobalRef(env, qsdo->javaGraphicsStatesObjects); | |
| if (qsdo->graphicsStateInfo.batchedLines != NULL) | |
| { | |
| free(qsdo->graphicsStateInfo.batchedLines); | |
| qsdo->graphicsStateInfo.batchedLines = NULL; | |
| } | |
| qsdo->BeginSurface = NULL; | |
| qsdo->FinishSurface = NULL; | |
| } | |
| JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPrinterSurfaceData_initOps(JNIEnv *env, jobject jthis, jlong nsRef, jobject jGraphicsState, jobjectArray jGraphicsStateObject, jint width, jint height) | |
| { | |
| JNI_COCOA_ENTER(env); | |
| PRINT("Java_sun_lwawt_macosx_CPrinterSurfaceData_initOps") | |
| PrintSDOps *psdo = (PrintSDOps*)SurfaceData_InitOps(env, jthis, sizeof(PrintSDOps)); | |
| if (psdo == NULL) { | |
| JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed."); | |
| return; | |
| } | |
| psdo->nsRef = (NSGraphicsContext*)jlong_to_ptr(nsRef); | |
| psdo->width = width; | |
| psdo->height = height; | |
| QuartzSDOps *qsdo = (QuartzSDOps*)psdo; | |
| qsdo->BeginSurface = PrintSD_startCGContext; | |
| qsdo->FinishSurface = PrintSD_finishCGContext; | |
| qsdo->cgRef = [psdo->nsRef graphicsPort]; | |
| qsdo->javaGraphicsStates = (jint*)((*env)->GetDirectBufferAddress(env, jGraphicsState)); | |
| qsdo->javaGraphicsStatesObjects = (*env)->NewGlobalRef(env, jGraphicsStateObject); | |
| qsdo->graphicsStateInfo.batchedLines = NULL; | |
| qsdo->graphicsStateInfo.batchedLinesCount = 0; | |
| SurfaceDataOps *sdo = (SurfaceDataOps*)qsdo; | |
| sdo->Lock = PrintSD_Lock; | |
| sdo->Unlock = PrintSD_Unlock; | |
| sdo->GetRasInfo = PrintSD_GetRasInfo; | |
| sdo->Release = PrintSD_ReleaseRasInfo; | |
| sdo->Setup = NULL; | |
| sdo->Dispose = PrintSD_dispose; | |
| JNI_COCOA_EXIT(env); | |
| } | |
| static jint PrintSD_Lock(JNIEnv *env, SurfaceDataOps *sdo, SurfaceDataRasInfo *pRasInfo, jint lockflags) | |
| { | |
| PRINT(" PrintSD_Lock") | |
| jint status = SD_FAILURE; | |
| //QuartzSDOps *qsdo = (QuartzSDOps*)sdo; | |
| //PrintSD_startCGContext(env, qsdo, SD_Image); | |
| status = SD_SUCCESS; | |
| return status; | |
| } | |
| static void PrintSD_Unlock(JNIEnv *env, SurfaceDataOps *sdo, SurfaceDataRasInfo *pRasInfo) | |
| { | |
| PRINT(" PrintSD_Unlock") | |
| //QuartzSDOps *qsdo = (QuartzSDOps*)sdo; | |
| //PrintSD_finishCGContext(env, qsdo); | |
| } | |
| static void PrintSD_GetRasInfo(JNIEnv *env, SurfaceDataOps *sdo, SurfaceDataRasInfo *pRasInfo) | |
| { | |
| PRINT(" PrintSD_GetRasInfo") | |
| PrintSDOps *psdo = (PrintSDOps*)sdo; | |
| pRasInfo->pixelStride = 4; // ARGB | |
| pRasInfo->scanStride = psdo->width * pRasInfo->pixelStride; | |
| pRasInfo->rasBase = NULL; //psdo->dataForSun2D; | |
| } | |
| static void PrintSD_ReleaseRasInfo(JNIEnv *env, SurfaceDataOps *sdo, SurfaceDataRasInfo *pRasInfo) | |
| { | |
| PRINT(" PrintSD_ReleaseRasInfo") | |
| pRasInfo->pixelStride = 0; | |
| pRasInfo->scanStride = 0; | |
| pRasInfo->rasBase = NULL; | |
| } | |
| static void dataProvider_FreeSun2DPixels(void *info, const void *data, size_t size) | |
| { | |
| PRINT("dataProvider_FreeSun2DPixels") | |
| // CGBitmapFreeData(info); | |
| free(info); | |
| } | |
| JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPrinterSurfaceData__1flush | |
| (JNIEnv *env, jobject jsurfacedata) | |
| { | |
| flush(env, (QuartzSDOps*)SurfaceData_GetOps(env, jsurfacedata)); | |
| } | |
| static void flush(JNIEnv *env, QuartzSDOps *qsdo) | |
| { | |
| } |