freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] gsoc-2019-veeki 3ff5821 3/3: Merge branch 'master' int


From: Veeki Yadav
Subject: [freetype2-demos] gsoc-2019-veeki 3ff5821 3/3: Merge branch 'master' into gsoc-2019-veeki
Date: Tue, 18 Jun 2019 21:40:00 -0400 (EDT)

branch: gsoc-2019-veeki
commit 3ff5821e2e3140c4d033742d6a4cc889fee77628
Merge: c3773ef 85f1bad
Author: gevic <address@hidden>
Commit: gevic <address@hidden>

    Merge branch 'master' into gsoc-2019-veeki
---
 ChangeLog              |  36 +++++++++++-
 graph/allegro/rules.mk |   3 +-
 graph/batch/rules.mk   |   3 +-
 graph/beos/rules.mk    |   3 +-
 graph/gblany.h         |  12 ++++
 graph/gblblit.c        | 153 +++++++++++++++++++------------------------------
 graph/gblblit.h        |  16 ++----
 graph/graph.h          |  11 +---
 graph/grblit.c         |  95 +++---------------------------
 graph/grdevice.c       |  12 ++--
 graph/grobjs.h         |   6 +-
 graph/os2/rules.mk     |   2 +-
 graph/win32/rules.mk   |   3 +-
 graph/x11/rules.mk     |   2 +-
 src/ftcommon.c         |   2 +
 src/ftdiff.c           |   4 +-
 src/ftgrid.c           |   2 +-
 src/ftmulti.c          |  41 ++++++-------
 src/ftstring.c         |   2 +-
 src/ftview.c           |   2 +-
 20 files changed, 170 insertions(+), 240 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4e38c02..085347a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,38 @@
-2019-06-10  Alexei Podtelezhnikov  <address@hidden>
+2019-06-17  Alexei Podtelezhnikov  <address@hidden>
+
+       * src/ftmulti.c (bit): Surface bitmap must belong to surface.
+       * graph/graph.h (grBlitGlyphToBitmap): Clarify documentation.
+       * graph/grdevice.c (grNewSurface): Initialize default blender.
+
+2019-06-17  Alexei Podtelezhnikov  <address@hidden>
+
+       * graph/*/rules.mk: Add missing dependency.
+
+2019-06-16  Alexei Podtelezhnikov  <address@hidden>
+
+       * graph/grblit.c (grBlitGlyphToBitmap): Move code from here...
+       * graph/gblblit.c (gblender_blit_init): ... to here.
+       * graph/gblblit.h: Updated.
+
+2019-06-15  Alexei Podtelezhnikov  <address@hidden>
+
+       [graph] Relocate `gblender' to `grSurface'.
+
+       This will be needed for direct rendering and simplifies gamma setting.
+
+       * graph/grobjs.h (grSurface): Put `bitmap' on top, add `gblender'.
+       * graph/graph.h: s/grSetGlyphGamma/grSetTargetGamma/.
+       * graph/grblit.c (grSetTargetGamma): Move `gblender_init' here...
+       (grBlitGlyphToBitmap): ...from here.
+       * src/ftcommon.c (FTDemo_Display_New): Call `grSetTargetGamma'.
+       * src/ft{diff,grid,string,view,multi}.c: Updated.
+
+2019-06-14  Alexei Podtelezhnikov  <address@hidden>
+
+       * graph/gblblit.c (gblender_blit_init): Switch to lookup table.
+       * graph/gblany.h: Updated.
+
+2019-06-12  Alexei Podtelezhnikov  <address@hidden>
 
        * src/ttdebug.c (RunIns): Return error like `TT_RunIns'.
        (Abort): Add error messages.
diff --git a/graph/allegro/rules.mk b/graph/allegro/rules.mk
index 74da779..d278174 100644
--- a/graph/allegro/rules.mk
+++ b/graph/allegro/rules.mk
@@ -22,7 +22,8 @@ ifdef ALLEGRO
 
   # our compilation rule
   #
-  $(OBJ_DIR_2)/gralleg.$O : $(GR_ALLEG)/gralleg.c $(GR_ALLEG)/gralleg.h
+  $(OBJ_DIR_2)/gralleg.$O : $(GR_ALLEG)/gralleg.c $(GR_ALLEG)/gralleg.h \
+                            $(GRAPH_H)
          $(CC) $(CFLAGS) $(GRAPH_INCLUDES:%=$I%) \
                 $I$(subst /,$(COMPILER_SEP),$(GR_ALLEG)) \
                 $T$(subst /,$(COMPILER_SEP),$@ $<)
diff --git a/graph/batch/rules.mk b/graph/batch/rules.mk
index 2551484..6618c98 100644
--- a/graph/batch/rules.mk
+++ b/graph/batch/rules.mk
@@ -18,7 +18,8 @@ DEVICES += BATCH
 
 # batch driver compilation rule
 #
-$(OBJ_DIR_2)/grbatch.$O : $(GR_BATCH)/grbatch.c $(GR_BATCH)/grbatch.h
+$(OBJ_DIR_2)/grbatch.$O : $(GR_BATCH)/grbatch.c $(GR_BATCH)/grbatch.h \
+                          $(GRAPH_H)
 ifneq ($(LIBTOOL),)
        $(LIBTOOL) --mode=compile $(CC) -static $(CFLAGS) \
                 $(GRAPH_INCLUDES:%=$I%) \
diff --git a/graph/beos/rules.mk b/graph/beos/rules.mk
index cd61a39..c6aee02 100644
--- a/graph/beos/rules.mk
+++ b/graph/beos/rules.mk
@@ -20,7 +20,8 @@ ifeq ($(PLATFORM),beos)
 
   # the rule used to compile the graphics driver
   #
-  $(OBJ_DIR_2)/grbeos.$(O): $(GR_BEOS)/grbeos.cpp $(GR_BEOS)/grbeos.h
+  $(OBJ_DIR_2)/grbeos.$(O): $(GR_BEOS)/grbeos.cpp $(GR_BEOS)/grbeos.h \
+                            $(GRAPH_H)
   ifneq ($(LIBTOOL),)
          $(LIBTOOL) --mode=compile $(CC) -static $(CFLAGS) \
                      $(GRAPH_INCLUDES:%=$I%) \
diff --git a/graph/gblany.h b/graph/gblany.h
index 21a1721..7ae46a4 100644
--- a/graph/gblany.h
+++ b/graph/gblany.h
@@ -125,6 +125,18 @@ GCONCAT( _gblender_blit_bgra_, GDST_TYPE )( GBlenderBlit   
blit,
 }
 
 
+static const GBlenderBlitFunc
+GCONCAT( blit_funcs_, GDST_TYPE )[GBLENDER_SOURCE_MAX] =
+{
+  GCONCAT( _gblender_blit_gray8_, GDST_TYPE ),
+  GCONCAT( _gblender_blit_hrgb_, GDST_TYPE ),
+  GCONCAT( _gblender_blit_hbgr_, GDST_TYPE ),
+  GCONCAT( _gblender_blit_vrgb_, GDST_TYPE ),
+  GCONCAT( _gblender_blit_vbgr_, GDST_TYPE ),
+  GCONCAT( _gblender_blit_bgra_, GDST_TYPE )
+};
+
+
 /* unset the macros, to prevent accidental re-use
  */
 
diff --git a/graph/gblblit.c b/graph/gblblit.c
index 4ac0640..5476f16 100644
--- a/graph/gblblit.c
+++ b/graph/gblblit.c
@@ -1,3 +1,4 @@
+#include "grobjs.h"
 #include "gblblit.h"
 
 /* blitting gray glyphs
@@ -190,6 +191,17 @@
 
 /* */
 
+static const GBlenderBlitFunc*
+blit_funcs[GBLENDER_TARGET_MAX] =
+{
+  blit_funcs_gray8,
+  blit_funcs_rgb32,
+  blit_funcs_rgb24,
+  blit_funcs_rgb565,
+  blit_funcs_bgr565
+};
+
+
 static void
 _gblender_blit_dummy( GBlenderBlit   blit,
                       GBlenderPixel  color )
@@ -201,113 +213,58 @@ _gblender_blit_dummy( GBlenderBlit   blit,
 
 GBLENDER_APIDEF( int )
 gblender_blit_init( GBlenderBlit           blit,
-                    GBlender               blender,
                     int                    dst_x,
                     int                    dst_y,
-                    GBlenderSourceFormat   src_format,
-                    const unsigned char*   src_buffer,
-                    int                    src_pitch,
-                    int                    src_width,
-                    int                    src_height,
-                    GBlenderTargetFormat   dst_format,
-                    unsigned char*         dst_buffer,
-                    int                    dst_pitch,
-                    int                    dst_width,
-                    int                    dst_height )
+                    grBitmap*              target,
+                    grBitmap*              glyph )
 {
   int               src_x = 0;
   int               src_y = 0;
   int               delta;
-  GBlenderBlitFunc  blit_func = 0;
 
-  switch ( src_format )
+  GBlenderSourceFormat   src_format;
+  const unsigned char*   src_buffer = glyph->buffer;
+  int                    src_pitch  = glyph->pitch;
+  int                    src_width  = glyph->width;
+  int                    src_height = glyph->rows;
+  GBlenderTargetFormat   dst_format;
+  unsigned char*         dst_buffer = target->buffer;
+  int                    dst_pitch  = target->pitch;
+  int                    dst_width  = target->width;
+  int                    dst_height = target->rows;
+
+  grSurface*  surface = (grSurface*)target;
+
+
+  if ( glyph->grays != 256 )
+    return -2;
+
+  switch ( glyph->mode )
   {
-  case GBLENDER_SOURCE_GRAY8:
-      switch ( dst_format )
-      {
-      case GBLENDER_TARGET_RGB32:  blit_func = _gblender_blit_gray8_rgb32; 
break;
-      case GBLENDER_TARGET_RGB24:  blit_func = _gblender_blit_gray8_rgb24; 
break;
-      case GBLENDER_TARGET_RGB565: blit_func = _gblender_blit_gray8_rgb565; 
break;
-      case GBLENDER_TARGET_BGR565: blit_func = _gblender_blit_gray8_bgr565; 
break;
-      case GBLENDER_TARGET_GRAY8:  blit_func = _gblender_blit_gray8_gray8; 
break;
-      default:
-          ;
-      }
-      break;
-
-  case GBLENDER_SOURCE_HRGB:
-      switch ( dst_format )
-      {
-      case GBLENDER_TARGET_RGB32:  blit_func = _gblender_blit_hrgb_rgb32; 
break;
-      case GBLENDER_TARGET_RGB24:  blit_func = _gblender_blit_hrgb_rgb24; 
break;
-      case GBLENDER_TARGET_RGB565: blit_func = _gblender_blit_hrgb_rgb565; 
break;
-      case GBLENDER_TARGET_BGR565: blit_func = _gblender_blit_hrgb_bgr565; 
break;
-      case GBLENDER_TARGET_GRAY8:  blit_func = _gblender_blit_hrgb_gray8; 
break;
-      default:
-          ;
-      }
-      break;
-
-  case GBLENDER_SOURCE_HBGR:
-      switch ( dst_format )
-      {
-      case GBLENDER_TARGET_RGB32:  blit_func = _gblender_blit_hbgr_rgb32; 
break;
-      case GBLENDER_TARGET_RGB24:  blit_func = _gblender_blit_hbgr_rgb24; 
break;
-      case GBLENDER_TARGET_RGB565: blit_func = _gblender_blit_hbgr_rgb565; 
break;
-      case GBLENDER_TARGET_BGR565: blit_func = _gblender_blit_hbgr_bgr565; 
break;
-      case GBLENDER_TARGET_GRAY8:  blit_func = _gblender_blit_hbgr_gray8; 
break;
-      default:
-          ;
-      }
-      break;
-
-  case GBLENDER_SOURCE_VRGB:
-      switch ( dst_format )
-      {
-      case GBLENDER_TARGET_RGB32:  blit_func = _gblender_blit_vrgb_rgb32; 
break;
-      case GBLENDER_TARGET_RGB24:  blit_func = _gblender_blit_vrgb_rgb24; 
break;
-      case GBLENDER_TARGET_RGB565: blit_func = _gblender_blit_vrgb_rgb565; 
break;
-      case GBLENDER_TARGET_BGR565: blit_func = _gblender_blit_vrgb_bgr565; 
break;
-      case GBLENDER_TARGET_GRAY8:  blit_func = _gblender_blit_vrgb_gray8; 
break;
-      default:
-          ;
-      }
-      break;
-
-  case GBLENDER_SOURCE_VBGR:
-      switch ( dst_format )
-      {
-      case GBLENDER_TARGET_RGB32:  blit_func = _gblender_blit_vbgr_rgb32; 
break;
-      case GBLENDER_TARGET_RGB24:  blit_func = _gblender_blit_vbgr_rgb24; 
break;
-      case GBLENDER_TARGET_RGB565: blit_func = _gblender_blit_vbgr_rgb565; 
break;
-      case GBLENDER_TARGET_BGR565: blit_func = _gblender_blit_vbgr_bgr565; 
break;
-      case GBLENDER_TARGET_GRAY8:  blit_func = _gblender_blit_vbgr_gray8; 
break;
-      default:
-          ;
-      }
-      break;
-
-  case GBLENDER_SOURCE_BGRA:
-      switch ( dst_format )
-      {
-      case GBLENDER_TARGET_RGB32:  blit_func = _gblender_blit_bgra_rgb32; 
break;
-      case GBLENDER_TARGET_RGB24:  blit_func = _gblender_blit_bgra_rgb24; 
break;
-      case GBLENDER_TARGET_RGB565: blit_func = _gblender_blit_bgra_rgb565; 
break;
-      case GBLENDER_TARGET_BGR565: blit_func = _gblender_blit_bgra_bgr565; 
break;
-      case GBLENDER_TARGET_GRAY8:  blit_func = _gblender_blit_bgra_gray8; 
break;
-      default:
-          ;
-      }
-      break;
+  case gr_pixel_mode_gray:  src_format = GBLENDER_SOURCE_GRAY8; break;
+  case gr_pixel_mode_lcd:   src_format = GBLENDER_SOURCE_HRGB;  break;
+  case gr_pixel_mode_lcdv:  src_format = GBLENDER_SOURCE_VRGB;  break;
+  case gr_pixel_mode_lcd2:  src_format = GBLENDER_SOURCE_HBGR;  break;
+  case gr_pixel_mode_lcdv2: src_format = GBLENDER_SOURCE_VBGR;  break;
+  case gr_pixel_mode_bgra:  src_format = GBLENDER_SOURCE_BGRA;  break;
+  default:
+    return -2;
+  }
 
+  switch ( target->mode )
+  {
+  case gr_pixel_mode_gray:   dst_format = GBLENDER_TARGET_GRAY8; break;
+  case gr_pixel_mode_rgb32:  dst_format = GBLENDER_TARGET_RGB32; break;
+  case gr_pixel_mode_rgb24:  dst_format = GBLENDER_TARGET_RGB24; break;
+  case gr_pixel_mode_rgb565: dst_format = GBLENDER_TARGET_RGB565; break;
   default:
-    ;
+    return -2;
   }
 
-  blit->blender   = blender;
-  blit->blit_func = blit_func;
+  blit->blender   = surface->gblender;
+  blit->blit_func = blit_funcs[dst_format][src_format];
 
-  if ( blit_func == 0 )
+  if ( blit->blit_func == 0 )
   {
    /* unsupported blit mode
     */
@@ -315,6 +272,14 @@ gblender_blit_init( GBlenderBlit           blit,
     return -2;
   }
 
+  if ( glyph->mode == gr_pixel_mode_lcd  ||
+       glyph->mode == gr_pixel_mode_lcd2 )
+    src_width /= 3;
+
+  if ( glyph->mode == gr_pixel_mode_lcdv  ||
+       glyph->mode == gr_pixel_mode_lcdv2 )
+    src_height /= 3;
+
   if ( dst_x < 0 )
   {
     src_width += dst_x;
diff --git a/graph/gblblit.h b/graph/gblblit.h
index 4412178..082e7fe 100644
--- a/graph/gblblit.h
+++ b/graph/gblblit.h
@@ -1,6 +1,7 @@
 #ifndef GBLBLIT_H_
 #define GBLBLIT_H_
 
+#include "grobjs.h"
 #include "gblender.h"
 
 /*
@@ -60,22 +61,13 @@ typedef struct GBlenderBlitRec_
 } GBlenderBlitRec;
 
 
-
 GBLENDER_API( int )
 gblender_blit_init( GBlenderBlit           blit,
-                    GBlender               blender,
                     int                    dst_x,
                     int                    dst_y,
-                    GBlenderSourceFormat   src_format,
-                    const unsigned char*   src_buffer,
-                    int                    src_pitch,
-                    int                    src_width,
-                    int                    src_height,
-                    GBlenderTargetFormat   dst_format,
-                    unsigned char*         dst_buffer,
-                    int                    dst_pitch,
-                    int                    dst_width,
-                    int                    dst_height );
+                    grBitmap*              target,
+                    grBitmap*              glyph );
+
 
 #define  gblender_blit_run(b,color)  (b)->blit_func( (b), (color) )
 
diff --git a/graph/graph.h b/graph/graph.h
index c5cec9e..54d89d1 100644
--- a/graph/graph.h
+++ b/graph/graph.h
@@ -160,7 +160,7 @@
   *    writes a given glyph bitmap to a target surface.
   *
   * <Input>
-  *    target  :: handle to target bitmap
+  *    target  :: handle to target bitmap that belongs to surface
   *    glyph   :: handle to source glyph bitmap
   *    x       :: position of left-most pixel of glyph image in target surface
   *    y       :: position of top-most pixel of glyph image in target surface
@@ -475,11 +475,6 @@
   *               for the surface. the bitmap's 'pitch' and 'buffer'
   *               fields are ignored on input.
   *
-  *               On output, the bitmap describes the surface's image
-  *               completely. It is possible to write directly in it
-  *               with grBlitGlyphToBitmap, even though the use of
-  *               grBlitGlyphToSurface is recommended.
-  *
   * <Return>
   *    handle to the corresponding surface object. 0 in case of error
   *
@@ -663,7 +658,7 @@
  /**********************************************************************
   *
   * <Function>
-  *    grSetGlyphGamma
+  *    grSetTargetGamma
   *
   * <Description>
   *    set the gamma-correction coefficient. This is only used to
@@ -675,7 +670,7 @@
   **********************************************************************/
 
   extern
-  void  grSetGlyphGamma( double  gamma_value );
+  void  grSetTargetGamma( grBitmap*  target, double  gamma_value );
 
 /* */
 
diff --git a/graph/grblit.c b/graph/grblit.c
index 02b515c..7c22551 100644
--- a/graph/grblit.c
+++ b/graph/grblit.c
@@ -10,7 +10,6 @@
 /****************************************************************************/
 
 #include "grblit.h"
-#include "grobjs.h"
 
 #define  GRAY8
 
@@ -1749,25 +1748,6 @@
   }
 
 
- /**********************************************************************
-  *
-  * <Function>
-  *    grBlitGlyphToBitmap
-  *
-  * <Description>
-  *    writes a given glyph bitmap to a target surface.
-  *
-  * <Input>
-  *    surface :: handle to target surface
-  *    x       :: position of left-most pixel of glyph image in surface
-  *    y       :: position of top-most pixel of glyph image in surface
-  *    bitmap  :: source glyph image
-  *
-  * <Return>
-  *   Error code. 0 means success
-  *
-  **********************************************************************/
-
   typedef  void (*grColorGlyphBlitter)( grBlitter*  blit,
                                         grColor     color,
                                         int         max_gray );
@@ -1808,11 +1788,12 @@
 
 #include "gblblit.h"
 
-  static double    gr_glyph_gamma = 1.8;
-
-  void  grSetGlyphGamma( double  gamma )
+  void  grSetTargetGamma( grBitmap*  target, double  gamma )
   {
-    gr_glyph_gamma = gamma;
+    grSurface*  surface = (grSurface*)target;
+
+
+    gblender_init( surface->gblender, gamma );
   }
 
 
@@ -1843,74 +1824,16 @@
    /* short cut to alpha blender for certain glyph types
     */
     {
-      GBlenderSourceFormat  src_format;
-      GBlenderTargetFormat  dst_format;
-      int                   width, height;
       GBlenderBlitRec       gblit[1];
       GBlenderPixel         gcolor;
-      static GBlenderRec    gblender[1];
-      static double         gblender_gamma = -100.0;
-
-      if ( glyph->grays != 256 )
-        goto LegacyBlit;
-
-      switch ( glyph->mode )
-      {
-      case gr_pixel_mode_gray:  src_format = GBLENDER_SOURCE_GRAY8; break;
-      case gr_pixel_mode_lcd:   src_format = GBLENDER_SOURCE_HRGB;  break;
-      case gr_pixel_mode_lcdv:  src_format = GBLENDER_SOURCE_VRGB;  break;
-      case gr_pixel_mode_lcd2:  src_format = GBLENDER_SOURCE_HBGR;  break;
-      case gr_pixel_mode_lcdv2: src_format = GBLENDER_SOURCE_VBGR;  break;
-      case gr_pixel_mode_bgra:  src_format = GBLENDER_SOURCE_BGRA;  break;
-
-      default:
-          goto LegacyBlit;
-      }
 
-      width  = glyph->width;
-      height = glyph->rows;
 
-      if ( glyph->mode == gr_pixel_mode_lcd  ||
-           glyph->mode == gr_pixel_mode_lcd2 )
-        width /= 3;
-
-      if ( glyph->mode == gr_pixel_mode_lcdv  ||
-           glyph->mode == gr_pixel_mode_lcdv2 )
-        height /= 3;
-
-      switch ( target->mode )
-      {
-      case gr_pixel_mode_rgb32:  dst_format = GBLENDER_TARGET_RGB32; break;
-      case gr_pixel_mode_rgb24:  dst_format = GBLENDER_TARGET_RGB24; break;
-      case gr_pixel_mode_rgb565: dst_format = GBLENDER_TARGET_RGB565; break;
-      case gr_pixel_mode_gray:   dst_format = GBLENDER_TARGET_GRAY8; break;
-      default:
-          goto LegacyBlit;
-      }
-
-     /* initialize blender when needed, i.e. when gamma changes
-      */
-      if ( gblender_gamma != gr_glyph_gamma  )
+      switch ( gblender_blit_init( gblit, x, y, target, glyph ) )
       {
-        gblender_gamma = gr_glyph_gamma;
-        gblender_init( gblender, gblender_gamma );
-      }
-
-      if ( gblender_blit_init( gblit, gblender,
-                               x, y,
-                               src_format,
-                               glyph->buffer,
-                               glyph->pitch,
-                               width,
-                               height,
-                               dst_format,
-                               target->buffer,
-                               target->pitch,
-                               target->width,
-                               target->rows ) < 0 )
-      {
-        /* nothing to do */
+      case -1: /* nothing to do */
         return 0;
+      case -2:
+        goto LegacyBlit;
       }
 
       gcolor = ((GBlenderPixel)color.chroma[0] << 16) |
diff --git a/graph/grdevice.c b/graph/grdevice.c
index 27413ee..8b51dd8 100644
--- a/graph/grdevice.c
+++ b/graph/grdevice.c
@@ -110,11 +110,6 @@
   *               for the surface. the bitmap's 'pitch' and 'buffer'
   *               fields are ignored on input.
   *
-  *               On output, the bitmap describes the surface's image
-  *               completely. It is possible to write directly in it
-  *               with grBlitGlyphToBitmap, even though the use of
-  *               grBlitGlyphToSurface is recommended.
-  *
   * <Return>
   *    handle to the corresponding surface object. 0 in case of error
   *
@@ -137,8 +132,8 @@
   *
   **********************************************************************/
 
-  extern grSurface*  grNewSurface( const char*  device_name,
-                                   grBitmap*    bitmap )
+  grSurface*  grNewSurface( const char*  device_name,
+                            grBitmap*    bitmap )
   {
     grDevice*   device;
     grSurface*  surface;
@@ -155,6 +150,9 @@
       grFree( (void *)surface );
       surface = 0;
     }
+    else
+      grSetTargetGamma( (grBitmap*)surface, 1.8 );
+
     return surface;
   }
 
diff --git a/graph/grobjs.h b/graph/grobjs.h
index 0b615d6..92c7f9b 100644
--- a/graph/grobjs.h
+++ b/graph/grobjs.h
@@ -18,6 +18,7 @@
 #include "graph.h"
 #include "grconfig.h"
 #include "grtypes.h"
+#include "gblender.h"
 
 
   typedef struct grBiColor_
@@ -109,8 +110,11 @@
 
   struct grSurface_
   {
-    grDevice*          device;
     grBitmap           bitmap;
+
+    GBlenderRec        gblender[1];
+
+    grDevice*          device;
     grBool             refresh;
     grBool             owner;
 
diff --git a/graph/os2/rules.mk b/graph/os2/rules.mk
index 052ae2c..6305d92 100644
--- a/graph/os2/rules.mk
+++ b/graph/os2/rules.mk
@@ -22,7 +22,7 @@ ifeq ($(PLATFORM),os2)
 
   # the rule used to compile the graphics driver
   #
-  $(OBJ_DIR_2)/gros2pm.$O: $(GR_OS2)/gros2pm.c $(GR_OS2)/gros2pm.h
+  $(OBJ_DIR_2)/gros2pm.$O: $(GR_OS2)/gros2pm.c $(GR_OS2)/gros2pm.h $(GRAPH_H)
          $(CC) $(CFLAGS) $(GRAPH_INCLUDES:%=$I%) \
                 $I$(subst /,$(COMPILER_SEP),$(GR_OS2)) \
                 $T$(subst /,$(COMPILER_SEP),$@ $<)
diff --git a/graph/win32/rules.mk b/graph/win32/rules.mk
index ccd7850..ef4e749 100644
--- a/graph/win32/rules.mk
+++ b/graph/win32/rules.mk
@@ -19,7 +19,8 @@ ifeq ($(PLATFORM),win32)
 
   # the rule used to compile the graphics driver
   #
-  $(OBJ_DIR_2)/grwin32.$O: $(GR_WIN32)/grwin32.c $(GR_WIN32)/grwin32.h
+  $(OBJ_DIR_2)/grwin32.$O: $(GR_WIN32)/grwin32.c $(GR_WIN32)/grwin32.h \
+                           $(GRAPH_H)
          $(CC) $(CFLAGS) $(GRAPH_INCLUDES:%=$I%) \
                 $I$(subst /,$(COMPILER_SEP),$(GR_WIN32)) \
                 $T$(subst /,$(COMPILER_SEP),$@ $<)
diff --git a/graph/x11/rules.mk b/graph/x11/rules.mk
index a746a54..9aa219a 100644
--- a/graph/x11/rules.mk
+++ b/graph/x11/rules.mk
@@ -112,7 +112,7 @@ ifneq ($(X11_PATH),)
 
   # the rule used to compile the X11 driver
   #
-  $(OBJ_DIR_2)/grx11.$(O): $(GR_X11)/grx11.c $(GR_X11)/grx11.h
+  $(OBJ_DIR_2)/grx11.$(O): $(GR_X11)/grx11.c $(GR_X11)/grx11.h $(GRAPH_H)
   ifneq ($(LIBTOOL),)
          $(LIBTOOL) --mode=compile $(CC) -static $(CFLAGS) \
                      $(GRAPH_INCLUDES:%=$I%) \
diff --git a/src/ftcommon.c b/src/ftcommon.c
index 7f42a9b..19de19f 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -162,6 +162,8 @@
 
     display->gamma = GAMMA;
 
+    grSetTargetGamma( display->bitmap, display->gamma );
+
     return display;
   }
 
diff --git a/src/ftdiff.c b/src/ftdiff.c
index 3ab8ba1..d0489ce 100644
--- a/src/ftdiff.c
+++ b/src/ftdiff.c
@@ -1014,7 +1014,7 @@
     display->bitmap  = &surface->bitmap;
     display->gamma   = GAMMA;
 
-    grSetGlyphGamma( display->gamma );
+    grSetTargetGamma( display->bitmap, display->gamma );
 
     memset( &display->fore_color, 0, sizeof( grColor ) );
     memset( &display->back_color, 0xff, sizeof( grColor ) );
@@ -1123,7 +1123,7 @@
     else if ( display->gamma < 0.0001 )
       display->gamma = 0.0;
 
-    grSetGlyphGamma( display->gamma );
+    grSetTargetGamma( display->bitmap, display->gamma );
   }
 
 
diff --git a/src/ftgrid.c b/src/ftgrid.c
index 263043b..8dab729 100644
--- a/src/ftgrid.c
+++ b/src/ftgrid.c
@@ -1156,7 +1156,7 @@
     else if ( display->gamma < 0.0 )
       display->gamma = 0.0;
 
-    grSetGlyphGamma( display->gamma );
+    grSetTargetGamma( display->bitmap, display->gamma );
   }
 
 
diff --git a/src/ftmulti.c b/src/ftmulti.c
index c7313bc..a3b1182 100644
--- a/src/ftmulti.c
+++ b/src/ftmulti.c
@@ -79,7 +79,7 @@
   static FT_Error      error;        /* error returned by FreeType? */
 
   static grSurface*    surface;      /* current display surface     */
-  static grBitmap      bit;          /* current display bitmap      */
+  static grBitmap*     bit;          /* current display bitmap      */
 
   static int  width     = DIM_X;     /* window width                */
   static int  height    = DIM_Y;     /* window height               */
@@ -277,12 +277,12 @@
   static void
   Clear_Display( void )
   {
-    long  bitmap_size = (long)bit.pitch * bit.rows;
+    long  bitmap_size = (long)bit->pitch * bit->rows;
 
 
     if ( bitmap_size < 0 )
       bitmap_size = -bitmap_size;
-    memset( bit.buffer, 0, (unsigned long)bitmap_size );
+    memset( bit->buffer, 0, (unsigned long)bitmap_size );
   }
 
 
@@ -290,17 +290,17 @@
   static void
   Init_Display( void )
   {
-    grInitDevices();
+    grBitmap  bitmap = { height, width, 0, gr_pixel_mode_gray, 256, NULL };
+
 
-    bit.mode  = gr_pixel_mode_gray;
-    bit.width = width;
-    bit.rows  = height;
-    bit.grays = 256;
+    grInitDevices();
 
-    surface = grNewSurface( 0, &bit );
+    surface = grNewSurface( 0, &bitmap );
     if ( !surface )
       PanicZ( "could not allocate display surface\n" );
 
+    bit = (grBitmap*)surface;
+
     graph_init = 1;
   }
 
@@ -345,7 +345,8 @@
     x_top = x_offset + glyph->bitmap_left;
     y_top = y_offset - glyph->bitmap_top;
 
-    grBlitGlyphToBitmap( &bit, &bit3, x_top, y_top, fore_color );
+    grBlitGlyphToBitmap( bit, &bit3,
+                         x_top, y_top, fore_color );
 
     return 0;
   }
@@ -422,12 +423,12 @@
 
         x += ( ( glyph->metrics.horiAdvance + 32 ) >> 6 ) + 1;
 
-        if ( x + size->metrics.x_ppem > bit.width )
+        if ( x + size->metrics.x_ppem > bit->width )
         {
           x  = start_x;
           y += step_y;
 
-          if ( y >= bit.rows )
+          if ( y >= bit->rows )
             return FT_Err_Ok;
         }
       }
@@ -490,12 +491,12 @@
 
         x += ( ( glyph->metrics.horiAdvance + 32 ) >> 6 ) + 1;
 
-        if ( x + size->metrics.x_ppem > bit.width )
+        if ( x + size->metrics.x_ppem > bit->width )
         {
           x  = start_x;
           y += step_y;
 
-          if ( y >= bit.rows )
+          if ( y >= bit->rows )
             return FT_Err_Ok;
         }
       }
@@ -532,7 +533,7 @@
     grSetLineHeight( 10 );
     grGotoxy( 0, 0 );
     grSetMargin( 2, 1 );
-    grGotobitmap( &bit );
+    grGotobitmap( bit );
 
     sprintf( buf,
              "FreeType MM Glyph Viewer - part of the FreeType %s test suite",
@@ -1165,12 +1166,12 @@
         if ( !new_header )
           new_header = Header;
 
-        grWriteCellString( &bit, 0, 0, new_header, fore_color );
+        grWriteCellString( bit, 0, 0, new_header, fore_color );
         new_header = NULL;
 
         sprintf( Header, "PS name: %s",
                          FT_Get_Postscript_Name( face ) );
-        grWriteCellString( &bit, 0, 16, Header, fore_color );
+        grWriteCellString( bit, 0, 16, Header, fore_color );
 
         sprintf( Header, "axes:" );
         {
@@ -1195,7 +1196,7 @@
                      sizeof ( Header ) - strlen( Header ) - 1 );
           }
         }
-        grWriteCellString( &bit, 0, 24, Header, fore_color );
+        grWriteCellString( bit, 0, 24, Header, fore_color );
 
         if ( num_shown_axes > MAX_MM_AXES / 2 )
         {
@@ -1220,7 +1221,7 @@
                      sizeof ( Header ) - strlen( Header ) - 1 );
           }
 
-          grWriteCellString( &bit, 0, 32, Header, fore_color );
+          grWriteCellString( bit, 0, 32, Header, fore_color );
         }
 
         {
@@ -1258,7 +1259,7 @@
         sprintf( Header, "%.100s: not an MM font file, or could not be opened",
                          ft_basename( argv[file] ) );
 
-      grWriteCellString( &bit, 0, 8, Header, fore_color );
+      grWriteCellString( bit, 0, 8, Header, fore_color );
       grRefreshSurface( surface );
 
       if ( !( key = Process_Event() ) )
diff --git a/src/ftstring.c b/src/ftstring.c
index f44303f..5e4c973 100644
--- a/src/ftstring.c
+++ b/src/ftstring.c
@@ -395,7 +395,7 @@
     else if ( display->gamma < 0.1 )
       display->gamma = 0.1;
 
-    grSetGlyphGamma( display->gamma );
+    grSetTargetGamma( display->bitmap, display->gamma );
   }
 
 
diff --git a/src/ftview.c b/src/ftview.c
index 78e9113..f196f99 100644
--- a/src/ftview.c
+++ b/src/ftview.c
@@ -919,7 +919,7 @@
     else if ( display->gamma < 0.0 )
       display->gamma = 0.0;
 
-    grSetGlyphGamma( display->gamma );
+    grSetTargetGamma( display->bitmap, display->gamma );
   }
 
 



reply via email to

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