1 /* 2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 27 #include "PiscesSurface.h" 28 29 #include <PiscesUtil.h> 30 31 #include <PiscesSysutils.h> 32 33 static INLINE void surface_dispose(Surface* surface); 34 35 static INLINE void surface_setRGB(Surface* dstSurface, jint x, jint y, 36 jint width, jint height, jint* data, 37 jint scanLength); 38 39 40 static void setRGB(jint* src, jint srcScanLength, jint* dst, jint dstScanLength, 41 jint width, jint height); 42 43 44 static INLINE void 45 surface_dispose(Surface* surface) { 46 my_free(surface); 47 } 48 49 static INLINE void 50 surface_setRGB(Surface* dstSurface, jint x, jint y, 51 jint width, jint height, jint* data, jint scanLength) { 52 if (dstSurface->data == NULL) return; 53 setRGB((jint*)dstSurface->data + y * dstSurface->width + x, 54 dstSurface->width, data, scanLength, width, height); 55 } 56 57 58 static void 59 setRGB(jint* dst, jint dstScanLength, jint* src, jint srcScanLength, 60 jint width, jint height) { 61 jint srcScanRest = srcScanLength - width; 62 jint dstScanRest = dstScanLength - width; 63 64 for (; height > 0; --height) { 65 jint w2 = width; 66 for (; w2 > 0; --w2) { 67 *dst++ = *src++; 68 } 69 src += srcScanRest; 70 dst += dstScanRest; 71 } 72 } 73