freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2-demos] master 1b0a3ed: [graph/win32] Explicitly use BITMAPINF


From: Alexei Podtelezhnikov
Subject: [freetype2-demos] master 1b0a3ed: [graph/win32] Explicitly use BITMAPINFO.
Date: Sun, 18 Oct 2020 23:10:21 -0400 (EDT)

branch: master
commit 1b0a3edd0c9ff419b92366599f5f82ebbff724f9
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    [graph/win32] Explicitly use BITMAPINFO.
    
    * graph/win32/grwin32.c (grWin32Surface): Replace `pbmi' and `bmi'
    with `bmiHeader' and `bmiColors'.
    (gr_win32_surface_{init,resize}, Message_Process): Updated.
---
 ChangeLog             |  8 +++++++
 graph/win32/grwin32.c | 66 ++++++++++++++++++++-------------------------------
 2 files changed, 34 insertions(+), 40 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index a41fe82..5437153 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2020-10-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+       [graph/win32] Explicitly use BITMAPINFO.
+
+       * graph/win32/grwin32.c (grWin32Surface): Replace `pbmi' and `bmi'
+       with `bmiHeader' and `bmiColors'.
+       (gr_win32_surface_{init,resize}, Message_Process): Updated.
+
 2020-10-17  Alexei Podtelezhnikov  <apodtele@gmail.com>
 
        * src/strbuf.c (strbuf_init): Adjust to fix `FTDemo_Version'.
diff --git a/graph/win32/grwin32.c b/graph/win32/grwin32.c
index 4bc2cb9..cc1597e 100644
--- a/graph/win32/grwin32.c
+++ b/graph/win32/grwin32.c
@@ -61,8 +61,6 @@
 /*  Custom messages. */
 #define WM_RESIZE  WM_USER+517
 
-/* These values can be changed, but WIN_WIDTH should remain for now a  */
-/* multiple of 32 to avoid padding issues.                             */
 
   typedef struct  Translator_
   {
@@ -108,8 +106,8 @@
     HWND          window;
     HICON         sIcon;
     HICON         bIcon;
-    LPBITMAPINFO  pbmi;
-    char          bmi[ sizeof(BITMAPINFO) + 256*sizeof(RGBQUAD) ];
+    BITMAPINFOHEADER  bmiHeader;
+    RGBQUAD           bmiColors[256];
     grBitmap      bgrBitmap;  /* windows wants data in BGR format !! */
 #ifdef SWIZZLE
     grBitmap      swizzle_bitmap;
@@ -330,7 +328,6 @@ gr_win32_surface_resize( grWin32Surface*  surface,
                          int              height )
 {
   grBitmap*       bitmap = &surface->root.bitmap;
-  LPBITMAPINFO    pbmi = surface->pbmi;
 
   /* resize root bitmap */
   if ( grNewBitmap( bitmap->mode,
@@ -364,8 +361,8 @@ gr_win32_surface_resize( grWin32Surface*  surface,
 #endif
 
   /* update the header to appropriate values */
-  pbmi->bmiHeader.biWidth  = width;
-  pbmi->bmiHeader.biHeight = height;
+  surface->bmiHeader.biWidth  = width;
+  surface->bmiHeader.biHeight = height;
 
   return surface;
 }
@@ -442,7 +439,6 @@ gr_win32_surface_init( grWin32Surface*  surface,
 {
   static RGBQUAD  black = {    0,    0,    0, 0 };
   static RGBQUAD  white = { 0xFF, 0xFF, 0xFF, 0 };
-  LPBITMAPINFO    pbmi;
 
   LOG(( "Win32: init_surface( %p, %p )\n", surface, bitmap ));
 
@@ -490,37 +486,31 @@ gr_win32_surface_init( grWin32Surface*  surface,
   LOG(( "       --   width  = %d\n", bitmap->width ));
   LOG(( "       --   height = %d\n", bitmap->rows ));
 
-  /* find some memory for the bitmap header */
-  surface->pbmi = pbmi = (LPBITMAPINFO) surface->bmi;
-
-  /* initialize the header to appropriate values */
-  memset( pbmi, 0, sizeof ( BITMAPINFO ) + sizeof ( RGBQUAD ) * 256 );
-
-  pbmi->bmiHeader.biSize   = sizeof ( BITMAPINFOHEADER );
-  pbmi->bmiHeader.biWidth  = bitmap->width;
-  pbmi->bmiHeader.biHeight = bitmap->rows;
-  pbmi->bmiHeader.biPlanes = 1;
+  surface->bmiHeader.biSize   = sizeof( BITMAPINFOHEADER );
+  surface->bmiHeader.biWidth  = bitmap->width;
+  surface->bmiHeader.biHeight = bitmap->rows;
+  surface->bmiHeader.biPlanes = 1;
 
   switch ( bitmap->mode )
   {
   case gr_pixel_mode_mono:
-    pbmi->bmiHeader.biBitCount = 1;
-    pbmi->bmiColors[0] = white;
-    pbmi->bmiColors[1] = black;
+    surface->bmiHeader.biBitCount = 1;
+    surface->bmiColors[0] = white;
+    surface->bmiColors[1] = black;
     break;
 
   case gr_pixel_mode_rgb24:
-    pbmi->bmiHeader.biBitCount    = 24;
-    pbmi->bmiHeader.biCompression = BI_RGB;
+    surface->bmiHeader.biBitCount    = 24;
+    surface->bmiHeader.biCompression = BI_RGB;
     break;
 
   case gr_pixel_mode_gray:
-    pbmi->bmiHeader.biBitCount = 8;
-    pbmi->bmiHeader.biClrUsed  = bitmap->grays;
+    surface->bmiHeader.biBitCount = 8;
+    surface->bmiHeader.biClrUsed  = bitmap->grays;
     {
       int   count = bitmap->grays;
       int   x;
-      RGBQUAD*  color = pbmi->bmiColors;
+      RGBQUAD*  color = surface->bmiColors;
 
       for ( x = 0; x < count; x++, color++ )
       {
@@ -628,28 +618,24 @@ LRESULT CALLBACK Message_Process( HWND handle, UINT mess,
 
     case WM_PAINT:
       {
-      HDC           hDC;
-      PAINTSTRUCT   ps;
-      LPBITMAPINFO  pbmi = surface->pbmi;
+        HDC           hDC;
+        PAINTSTRUCT   ps;
 
-      hDC   = BeginPaint ( handle, &ps );
-      if ( pbmi )
-      {
+        hDC   = BeginPaint ( handle, &ps );
         SetDIBitsToDevice( hDC, 0, 0,
-                           pbmi->bmiHeader.biWidth,
-                           pbmi->bmiHeader.biHeight,
+                           surface->bmiHeader.biWidth,
+                           surface->bmiHeader.biHeight,
                            0, 0, 0,
-                           pbmi->bmiHeader.biHeight,
+                           surface->bmiHeader.biHeight,
                            surface->bgrBitmap.buffer,
-                           pbmi,
+                           (LPBITMAPINFO)&surface->bmiHeader,
                            DIB_RGB_COLORS );
-      }
-      EndPaint ( handle, &ps );
-      return 0;
+        EndPaint ( handle, &ps );
+        return 0;
       }
 
     default:
-       return DefWindowProc( handle, mess, wParam, lParam );
+      return DefWindowProc( handle, mess, wParam, lParam );
     }
     return 0;
   }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]