1 /* 2 * Copyright (c) 1999, 2014, 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 #include "awt.h" 27 #include <sun_awt_Win32GraphicsConfig.h> 28 #include "awt_Win32GraphicsConfig.h" 29 #include "awt_Canvas.h" 30 #include "awt_Win32GraphicsDevice.h" 31 #include "Devices.h" 32 33 //Info for building a ColorModel 34 #include "java_awt_image_DataBuffer.h" 35 36 37 //Local utility functions 38 static int shiftToMask(int numBits, int shift); 39 40 /* 41 * AwtWin32GraphicsConfig fields 42 */ 43 44 jfieldID AwtWin32GraphicsConfig::win32GCVisualID; 45 46 /* 47 * Class: sun_awt_Win32GraphicsConfig 48 * Method: initIDs 49 * Signature: ()V 50 */ 51 52 JNIEXPORT void JNICALL 53 Java_sun_awt_Win32GraphicsConfig_initIDs 54 (JNIEnv *env, jclass thisCls) 55 { 56 TRY; 57 AwtWin32GraphicsConfig::win32GCVisualID = env->GetFieldID(thisCls, 58 "visual", "I"); 59 DASSERT(AwtWin32GraphicsConfig::win32GCVisualID); 60 CATCH_BAD_ALLOC; 61 } 62 63 /* 64 * shiftToMask: 65 * This function converts between cXXXBits and cXXXShift 66 * fields in the Windows GDI PIXELFORMATDESCRIPTOR and the mask 67 * fields passed to the DirectColorModel constructor. 68 */ 69 inline int shiftToMask(int numBits, int shift) { 70 int mask = 0xFFFFFFFF; 71 72 //Shift in numBits 0s 73 mask = mask << numBits; 74 mask = ~mask; 75 //shift left by value of shift 76 mask = mask << shift; 77 return mask; 78 } 79 80 /* 81 * Class: sun_awt_Win32GraphicsConfig 82 * Method: getBounds 83 * Signature: ()Ljava/awt/Rectangle 84 */ 85 JNIEXPORT jobject JNICALL 86 Java_sun_awt_Win32GraphicsConfig_getBounds(JNIEnv *env, jobject thisobj, 87 jint screen) 88 { 89 jclass clazz; 90 jmethodID mid; 91 jobject bounds = NULL; 92 93 clazz = env->FindClass("java/awt/Rectangle"); 94 CHECK_NULL_RETURN(clazz, NULL); 95 mid = env->GetMethodID(clazz, "<init>", "(IIII)V"); 96 if (mid != 0) { 97 RECT rRW = {0, 0, 0, 0}; 98 if (TRUE == MonitorBounds(AwtWin32GraphicsDevice::GetMonitor(screen), &rRW)) { 99 bounds = env->NewObject(clazz, mid, 100 rRW.left, rRW.top, 101 rRW.right - rRW.left, 102 rRW.bottom - rRW.top); 103 } 104 else { 105 // 4910760 - don't return a null bounds, return the bounds of the 106 // primary screen 107 bounds = env->NewObject(clazz, mid, 108 0, 0, 109 ::GetSystemMetrics(SM_CXSCREEN), 110 ::GetSystemMetrics(SM_CYSCREEN)); 111 } 112 if (safe_ExceptionOccurred(env)) { 113 return 0; 114 } 115 } 116 return bounds; 117 }