You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by nd...@apache.org on 2007/04/13 00:03:09 UTC

svn commit: r528252 - in /harmony/enhanced/classlib/trunk/modules/awt/src/main/native: gl/windows/WinThemeGraphics.cpp win32wrapper/windows/org_apache_harmony_awt_nativebridge_windows_Win32.cpp

Author: ndbeyer
Date: Thu Apr 12 15:03:08 2007
New Revision: 528252

URL: http://svn.apache.org/viewvc?view=rev&rev=528252
Log:
Apply patch for HARMONY-3569:[classlib][awt] gl library depends on uxtheme.dll which is not present in Windows 2000

Modified:
    harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/windows/WinThemeGraphics.cpp
    harmony/enhanced/classlib/trunk/modules/awt/src/main/native/win32wrapper/windows/org_apache_harmony_awt_nativebridge_windows_Win32.cpp

Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/windows/WinThemeGraphics.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/windows/WinThemeGraphics.cpp?view=diff&rev=528252&r1=528251&r2=528252
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/windows/WinThemeGraphics.cpp (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/gl/windows/WinThemeGraphics.cpp Thu Apr 12 15:03:08 2007
@@ -24,7 +24,6 @@
 
 #include <windows.h>
 #include <objidl.h>
-#include <uxTheme.h>
 
 #include "gl_GDIPlus.h"
 #include "org_apache_harmony_awt_theme_windows_WinThemeGraphics.h"
@@ -80,14 +79,32 @@
     restoreGdiClip(gi->hdc, (HRGN)hOldClipRgn);
 }
 
+static void (__stdcall *drawThemeBackground) (void*, void*, int, int, void*, void*)(NULL);
+static BOOL isUxThemeAvailable(true);
+
 JNIEXPORT void JNICALL Java_org_apache_harmony_awt_theme_windows_WinThemeGraphics_drawXpBackground
         (JNIEnv * env, jclass clazz, jlong gip, jint x, jint y, jint w, jint h, 
         jlong hTheme, jint type, jint state) {
 
+    if (!isUxThemeAvailable) {
+        return;
+    }
+
+    if (drawThemeBackground == NULL) {
+        HMODULE libUxTheme = LoadLibrary("UxTheme");
+        isUxThemeAvailable = (libUxTheme != NULL);
+
+        if (!isUxThemeAvailable) {
+            return;
+        }
+
+        drawThemeBackground = (void (__stdcall *) (void*, void*, int, int, void*, void*)) GetProcAddress(libUxTheme, "DrawThemeBackground");
+    }
+
     GraphicsInfo *gi = (GraphicsInfo *)gip;
 
     RECT bounds = { (int)x, (int)y, (int)x + (int)w, (int)y + (int)h };
-    DrawThemeBackground((HTHEME)hTheme, gi->hdc, type, state, &bounds, NULL);
+    drawThemeBackground((void*) hTheme, (void*) gi->hdc, (int) type, (int) state, (void*) &bounds, (void*) NULL);
 }
 
 JNIEXPORT void JNICALL Java_org_apache_harmony_awt_theme_windows_WinThemeGraphics_drawClassicBackground

Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/native/win32wrapper/windows/org_apache_harmony_awt_nativebridge_windows_Win32.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/native/win32wrapper/windows/org_apache_harmony_awt_nativebridge_windows_Win32.cpp?view=diff&rev=528252&r1=528251&r2=528252
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/native/win32wrapper/windows/org_apache_harmony_awt_nativebridge_windows_Win32.cpp (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/native/win32wrapper/windows/org_apache_harmony_awt_nativebridge_windows_Win32.cpp Thu Apr 12 15:03:08 2007
@@ -161,6 +161,9 @@
 long  (__stdcall * p_nbridge_GetThemeSysFont) (void *, int, void *) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_GetThemeSysFont( JNIEnv *env, jobject self, jlong hTheme, jint iFontId, jlong plf) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_GetThemeSysFont == NULL) {
         p_nbridge_GetThemeSysFont = (long  (__stdcall *) (void *, int, void *)) FindFunction(libUxTheme, "GetThemeSysFont");
     }
@@ -269,6 +272,9 @@
 long  (__stdcall * p_nbridge_GetThemeSysInt) (void *, int, void *) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_GetThemeSysInt( JNIEnv *env, jobject self, jlong hTheme, jint iIntId, jlong piValue) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_GetThemeSysInt == NULL) {
         p_nbridge_GetThemeSysInt = (long  (__stdcall *) (void *, int, void *)) FindFunction(libUxTheme, "GetThemeSysInt");
     }
@@ -404,6 +410,9 @@
 long  (__stdcall * p_nbridge_DrawThemeBackground) (void *, void *, int, int, void *, void *) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_DrawThemeBackground( JNIEnv *env, jobject self, jlong hTheme, jlong hdc, jint iPartId, jint iStateId, jlong pRect, jlong pClipRect) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_DrawThemeBackground == NULL) {
         p_nbridge_DrawThemeBackground = (long  (__stdcall *) (void *, void *, int, int, void *, void *)) FindFunction(libUxTheme, "DrawThemeBackground");
     }
@@ -881,6 +890,9 @@
 long  (__stdcall * p_nbridge_GetCurrentThemeName) (void *, int, void *, int, void *, int) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_GetCurrentThemeName( JNIEnv *env, jobject self, jlong pszThemeFileName, jint cchMaxNameChars, jlong pszColorBuff, jint cchMaxColorChars, jlong pszSizeBuff, jint cchMaxSizeChars) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_GetCurrentThemeName == NULL) {
         p_nbridge_GetCurrentThemeName = (long  (__stdcall *) (void *, int, void *, int, void *, int)) FindFunction(libUxTheme, "GetCurrentThemeName");
     }
@@ -1007,6 +1019,9 @@
 int  (__stdcall * p_nbridge_IsThemeActive) () = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_IsThemeActive( JNIEnv *env, jobject self) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_IsThemeActive == NULL) {
         p_nbridge_IsThemeActive = (int  (__stdcall *) ()) FindFunction(libUxTheme, "IsThemeActive");
     }
@@ -1016,6 +1031,9 @@
 unsigned long  (__stdcall * p_nbridge_GetThemeSysColor) (void *, int) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_GetThemeSysColor( JNIEnv *env, jobject self, jlong hTheme, jint iColorId) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_GetThemeSysColor == NULL) {
         p_nbridge_GetThemeSysColor = (unsigned long  (__stdcall *) (void *, int)) FindFunction(libUxTheme, "GetThemeSysColor");
     }
@@ -1070,6 +1088,9 @@
 long  (__stdcall * p_nbridge_CloseThemeData) (void *) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_CloseThemeData( JNIEnv *env, jobject self, jlong hTheme) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_CloseThemeData == NULL) {
         p_nbridge_CloseThemeData = (long  (__stdcall *) (void *)) FindFunction(libUxTheme, "CloseThemeData");
     }
@@ -1097,6 +1118,9 @@
 int (__stdcall * p_nbridge_GetThemeSysSize) (void *, int) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_GetThemeSysSize( JNIEnv *env, jobject self, jlong hTheme, jint iSizeId) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_GetThemeSysSize == NULL) {
         p_nbridge_GetThemeSysSize = (int (__stdcall *) (void *, int)) FindFunction(libUxTheme, "GetThemeSysSize");
     }
@@ -1394,6 +1418,9 @@
 int  (__stdcall * p_nbridge_GetThemeSysBool) (void *, int) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_GetThemeSysBool( JNIEnv *env, jobject self, jlong hTheme, jint iBoolId) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_GetThemeSysBool == NULL) {
         p_nbridge_GetThemeSysBool = (int  (__stdcall *) (void *, int)) FindFunction(libUxTheme, "GetThemeSysBool");
     }
@@ -1421,6 +1448,9 @@
 void * (__stdcall * p_nbridge_OpenThemeData) (void *, void *) = NULL;
 
 JNIEXPORT jlong  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_OpenThemeData( JNIEnv *env, jobject self, jlong hwnd, jlong pszClassList) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_OpenThemeData == NULL) {
         p_nbridge_OpenThemeData = (void * (__stdcall *) (void *, void *)) FindFunction(libUxTheme, "OpenThemeData");
     }
@@ -1484,6 +1514,9 @@
 long  (__stdcall * p_nbridge_EnableTheming) (int) = NULL;
 
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_EnableTheming( JNIEnv *env, jobject self, jint fEnable) {
+    if (libUxTheme == NULL) {
+        return 0;
+    }
     if (p_nbridge_EnableTheming == NULL) {
         p_nbridge_EnableTheming = (long  (__stdcall *) (int)) FindFunction(libUxTheme, "EnableTheming");
     }
@@ -2233,5 +2266,6 @@
 JNIEXPORT jint  JNICALL Java_org_apache_harmony_awt_nativebridge_windows_Win32_proxycall191( JNIEnv *env, jobject self, jlong fnptr1234, jlong This, jint param_1, jlong param_2) {
     return (jint)((long  (__stdcall *) (void *, long, void *)) fnptr1234)((void *) This, (long) param_1, (void *) param_2);
 }
+