Roderick Colenbrander : gdi32: Route WGL font code through gdi32.dll.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Oct 4 04:25:10 CDT 2006


Module: wine
Branch: master
Commit: 95a67ab3733bb161433f9181c5d9c20586baff7d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=95a67ab3733bb161433f9181c5d9c20586baff7d

Author: Roderick Colenbrander <thunderbird2k at gmx.net>
Date:   Tue Oct  3 21:22:22 2006 +0200

gdi32: Route WGL font code through gdi32.dll.

---

 dlls/gdi/driver.c           |    2 ++
 dlls/gdi/gdi32.spec         |    2 ++
 dlls/gdi/gdi_private.h      |    2 ++
 dlls/gdi/opengl.c           |   38 ++++++++++++++++++++++++++++++++++++++
 dlls/opengl32/opengl32.spec |    4 ++--
 dlls/opengl32/wgl.c         |   28 ----------------------------
 dlls/winex11.drv/opengl.c   |   27 ++++++++-------------------
 7 files changed, 54 insertions(+), 49 deletions(-)

diff --git a/dlls/gdi/driver.c b/dlls/gdi/driver.c
index b0e3f24..16c48e5 100644
--- a/dlls/gdi/driver.c
+++ b/dlls/gdi/driver.c
@@ -198,6 +198,8 @@ #define GET_FUNC(name) driver->funcs.p##
         /* OpenGL32 */
         GET_FUNC(wglCreateContext);
         GET_FUNC(wglMakeCurrent);
+        GET_FUNC(wglUseFontBitmapsA);
+        GET_FUNC(wglUseFontBitmapsW);
 #undef GET_FUNC
     }
     else memset( &driver->funcs, 0, sizeof(driver->funcs) );
diff --git a/dlls/gdi/gdi32.spec b/dlls/gdi/gdi32.spec
index 73dd0c3..b1883a7 100644
--- a/dlls/gdi/gdi32.spec
+++ b/dlls/gdi/gdi32.spec
@@ -500,6 +500,8 @@ # Wine extensions: OpenGL support
 #
 @ stdcall wglCreateContext(long)
 @ stdcall wglMakeCurrent(long long)
+@ stdcall wglUseFontBitmapsA(long long long long)
+@ stdcall wglUseFontBitmapsW(long long long long)
 
 ################################################################
 # Wine extensions: Win16 functions that are needed by other dlls
diff --git a/dlls/gdi/gdi_private.h b/dlls/gdi/gdi_private.h
index e63308c..02a1348 100644
--- a/dlls/gdi/gdi_private.h
+++ b/dlls/gdi/gdi_private.h
@@ -186,6 +186,8 @@ typedef struct tagDC_FUNCS
     /* OpenGL32 */
     HGLRC    (*pwglCreateContext)(PHYSDEV);
     BOOL     (*pwglMakeCurrent)(PHYSDEV, HGLRC);
+    BOOL     (*pwglUseFontBitmapsA)(PHYSDEV, DWORD, DWORD, DWORD);
+    BOOL     (*pwglUseFontBitmapsW)(PHYSDEV, DWORD, DWORD, DWORD);
 } DC_FUNCTIONS;
 
 /* It should not be necessary to access the contents of the GdiPath
diff --git a/dlls/gdi/opengl.c b/dlls/gdi/opengl.c
index b601250..25ca345 100644
--- a/dlls/gdi/opengl.c
+++ b/dlls/gdi/opengl.c
@@ -74,3 +74,41 @@ BOOL WINAPI wglMakeCurrent(HDC hdc, HGLR
     GDI_ReleaseObj( hdc);
     return ret;
 }
+
+/***********************************************************************
+ *		wglUseFontBitmapsA (OPENGL32.@)
+ */
+BOOL WINAPI wglUseFontBitmapsA(HDC hdc, DWORD first, DWORD count, DWORD listBase)
+{
+    BOOL ret = FALSE;
+    DC * dc = DC_GetDCPtr( hdc );
+
+    TRACE("(%p, %ld, %ld, %ld)\n", hdc, first, count, listBase);
+
+    if (!dc) return FALSE;
+
+    if (!dc->funcs->pwglUseFontBitmapsA) FIXME(" :stub\n");
+    else ret = dc->funcs->pwglUseFontBitmapsA(dc->physDev, first, count, listBase);
+
+    GDI_ReleaseObj( hdc);
+    return ret;
+}
+
+/***********************************************************************
+ *		wglUseFontBitmapsW (OPENGL32.@)
+ */
+BOOL WINAPI wglUseFontBitmapsW(HDC hdc, DWORD first, DWORD count, DWORD listBase)
+{
+    BOOL ret = FALSE;
+    DC * dc = DC_GetDCPtr( hdc );
+
+    TRACE("(%p, %ld, %ld, %ld)\n", hdc, first, count, listBase);
+
+    if (!dc) return FALSE;
+
+    if (!dc->funcs->pwglUseFontBitmapsW) FIXME(" :stub\n");
+    else ret = dc->funcs->pwglUseFontBitmapsW(dc->physDev, first, count, listBase);
+
+    GDI_ReleaseObj( hdc);
+    return ret;
+}
diff --git a/dlls/opengl32/opengl32.spec b/dlls/opengl32/opengl32.spec
index dbd93b2..7fb060c 100644
--- a/dlls/opengl32/opengl32.spec
+++ b/dlls/opengl32/opengl32.spec
@@ -394,7 +394,7 @@
 @  stdcall wglShareLists(long long)
 @  stdcall wglSwapBuffers(long) gdi32.SwapBuffers
 @  stdcall wglSwapLayerBuffers(long long)
-@  stdcall wglUseFontBitmapsA(long long long long)
-@  stdcall wglUseFontBitmapsW(long long long long)
+@  stdcall wglUseFontBitmapsA(long long long long) gdi32.wglUseFontBitmapsA
+@  stdcall wglUseFontBitmapsW(long long long long) gdi32.wglUseFontBitmapsW
 @  stdcall wglUseFontOutlinesA(long long long long long long long ptr)
 @  stdcall wglUseFontOutlinesW(long long long long long long long ptr)
diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c
index f593b01..516e096 100644
--- a/dlls/opengl32/wgl.c
+++ b/dlls/opengl32/wgl.c
@@ -52,8 +52,6 @@ typedef struct wine_wgl_s {
     HDC WINAPI   (*p_wglGetCurrentDC)(void);
     PROC WINAPI  (*p_wglGetProcAddress)(LPCSTR  lpszProc);
     BOOL WINAPI  (*p_wglShareLists)(HGLRC hglrc1, HGLRC hglrc2);
-    BOOL WINAPI  (*p_wglUseFontBitmapsA)(HDC hdc, DWORD first, DWORD count, DWORD listBase);
-    BOOL WINAPI  (*p_wglUseFontBitmapsW)(HDC hdc, DWORD first, DWORD count, DWORD listBase);
 
     void WINAPI  (*p_wglGetIntegerv)(GLenum pname, GLint* params);
 } wine_wgl_t;
@@ -327,30 +325,6 @@ BOOL WINAPI wglSwapLayerBuffers(HDC hdc,
   return TRUE;
 }
 
-/***********************************************************************
- *		wglUseFontBitmapsA (OPENGL32.@)
- */
-BOOL WINAPI wglUseFontBitmapsA(HDC hdc,
-			       DWORD first,
-			       DWORD count,
-			       DWORD listBase)
-{
-    TRACE("(%p, %ld, %ld, %ld)\n", hdc, first, count, listBase);
-    return wine_wgl.p_wglUseFontBitmapsA(hdc, first, count, listBase);
-}
-
-/***********************************************************************
- *		wglUseFontBitmapsW (OPENGL32.@)
- */
-BOOL WINAPI wglUseFontBitmapsW(HDC hdc,
-			       DWORD first,
-			       DWORD count,
-			       DWORD listBase)
-{
-    TRACE("(%p, %ld, %ld, %ld)\n", hdc, first, count, listBase);
-    return wine_wgl.p_wglUseFontBitmapsW(hdc, first, count, listBase);
-}
-
 #ifdef HAVE_GL_GLU_H
 
 static void fixed_to_double(POINTFX fixed, UINT em_size, GLdouble vertex[3])
@@ -680,8 +654,6 @@ static BOOL process_attach(void)
   wine_wgl.p_wglGetCurrentDC = (void *)GetProcAddress(mod, "wglGetCurrentDC");
   wine_wgl.p_wglGetProcAddress = (void *)GetProcAddress(mod, "wglGetProcAddress");
   wine_wgl.p_wglShareLists = (void *)GetProcAddress(mod, "wglShareLists");
-  wine_wgl.p_wglUseFontBitmapsA = (void*)GetProcAddress(mod, "wglUseFontBitmapsA");
-  wine_wgl.p_wglUseFontBitmapsW = (void*)GetProcAddress(mod, "wglUseFontBitmapsW");
 
   /* Interal WGL function */
   wine_wgl.p_wglGetIntegerv = (void *)GetProcAddress(mod, "wglGetIntegerv");
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 6a77a27..24b30cb 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -516,17 +516,6 @@ inline static void set_drawable( HDC hdc
     ExtEscape( hdc, X11DRV_ESCAPE, sizeof(escape), (LPCSTR)&escape, 0, NULL );
 }
 
-/* retrieve the X font to use on a given DC */
-inline static Font get_font( HDC hdc )
-{
-    Font font;
-    enum x11drv_escape_codes escape = X11DRV_GET_FONT;
-
-    if (!ExtEscape( hdc, X11DRV_ESCAPE, sizeof(escape), (LPCSTR)&escape,
-                    sizeof(font), (LPSTR)&font )) font = 0;
-    return font;
-}
-
 /** for use of wglGetCurrentReadDCARB */
 inline static HDC get_hdc_from_Drawable(GLXDrawable d)
 {
@@ -1589,14 +1578,14 @@ static BOOL internal_wglUseFontBitmaps(H
 }
 
 /* OpenGL32 wglUseFontBitmapsA */
-BOOL WINAPI X11DRV_wglUseFontBitmapsA(HDC hdc, DWORD first, DWORD count, DWORD listBase)
+BOOL X11DRV_wglUseFontBitmapsA(X11DRV_PDEVICE *physDev, DWORD first, DWORD count, DWORD listBase)
 {
-     Font fid = get_font( hdc );
+     Font fid = physDev->font;
 
-     TRACE("(%p, %ld, %ld, %ld) using font %ld\n", hdc, first, count, listBase, fid);
+     TRACE("(%p, %ld, %ld, %ld) using font %ld\n", physDev->hdc, first, count, listBase, fid);
 
      if (fid == 0) {
-         return internal_wglUseFontBitmaps(hdc, first, count, listBase, GetGlyphOutlineA);
+         return internal_wglUseFontBitmaps(physDev->hdc, first, count, listBase, GetGlyphOutlineA);
      }
 
      wine_tsx11_lock();
@@ -1607,14 +1596,14 @@ BOOL WINAPI X11DRV_wglUseFontBitmapsA(HD
 }
 
 /* OpenGL32 wglUseFontBitmapsW */
-BOOL WINAPI X11DRV_wglUseFontBitmapsW(HDC hdc, DWORD first, DWORD count, DWORD listBase)
+BOOL X11DRV_wglUseFontBitmapsW(X11DRV_PDEVICE *physDev, DWORD first, DWORD count, DWORD listBase)
 {
-     Font fid = get_font( hdc );
+     Font fid = physDev->font;
 
-     TRACE("(%p, %ld, %ld, %ld) using font %ld\n", hdc, first, count, listBase, fid);
+     TRACE("(%p, %ld, %ld, %ld) using font %ld\n", physDev->hdc, first, count, listBase, fid);
 
      if (fid == 0) {
-         return internal_wglUseFontBitmaps(hdc, first, count, listBase, GetGlyphOutlineW);
+         return internal_wglUseFontBitmaps(physDev->hdc, first, count, listBase, GetGlyphOutlineW);
      }
 
      WARN("Using the glX API for the WCHAR variant - some characters may come out incorrectly !\n");




More information about the wine-cvs mailing list