freetype-commit
[Top][All Lists]
Advanced

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

[Git][freetype/freetype][master] [truetype] Reset cvt and storage in con


From: Werner Lemberg (@wl)
Subject: [Git][freetype/freetype][master] [truetype] Reset cvt and storage in context load.
Date: Sat, 07 Jan 2023 06:31:38 +0000

Werner Lemberg pushed to branch master at FreeType / FreeType

Commits:

  • 3481b154
    by Ben Wagner at 2023-01-07T07:28:04+01:00
    [truetype] Reset cvt and storage in context load.
    
    Currently the cvt and storage are saved and restored in `TT_RunIns`.
    However, this is too granular as the cvt and storage area should be set to
    the original cvt and storage area only when setting up the hinting context.
    This allows for the cvt and storage area to be modified while parsing
    multiple glyphs, as is the case with composite glyphs.
    
    * src/truetype/ttinterp.h (TT_ExecContextRec): Remove `origCvt` and
    `origStorage`.
    
    * src/truetype/ttinterp.c (TT_RunIns): Don't save and restore the cvt and
    storage area.
    (Modify_CVT_Check, Ins_WS): Switch from "if in glyph and using original data
    do copy on write" to "if in glyph and not using glyph specific data do copy
    on write".
    

2 changed files:

Changes:

  • src/truetype/ttinterp.c
    ... ... @@ -1527,9 +1527,8 @@
    1527 1527
       static void
    
    1528 1528
       Modify_CVT_Check( TT_ExecContext  exc )
    
    1529 1529
       {
    
    1530
    -    /* TT_RunIns sets origCvt and restores cvt to origCvt when done. */
    
    1531 1530
         if ( exc->iniRange == tt_coderange_glyph &&
    
    1532
    -         exc->cvt == exc->origCvt            )
    
    1531
    +         exc->cvt != exc->glyfCvt            )
    
    1533 1532
         {
    
    1534 1533
           exc->error = Update_Max( exc->memory,
    
    1535 1534
                                    &exc->glyfCvtSize,
    
    ... ... @@ -3115,10 +3114,8 @@
    3115 3114
         }
    
    3116 3115
         else
    
    3117 3116
         {
    
    3118
    -      /* TT_RunIns sets origStorage and restores storage to origStorage */
    
    3119
    -      /* when done.                                                     */
    
    3120 3117
           if ( exc->iniRange == tt_coderange_glyph &&
    
    3121
    -           exc->storage == exc->origStorage    )
    
    3118
    +           exc->storage != exc->glyfStorage    )
    
    3122 3119
           {
    
    3123 3120
             FT_ULong  tmp = (FT_ULong)exc->glyfStoreSize;
    
    3124 3121
     
    
    ... ... @@ -7832,8 +7829,6 @@
    7832 7829
           exc->func_move_cvt  = Move_CVT;
    
    7833 7830
         }
    
    7834 7831
     
    
    7835
    -    exc->origCvt     = exc->cvt;
    
    7836
    -    exc->origStorage = exc->storage;
    
    7837 7832
         exc->iniRange    = exc->curRange;
    
    7838 7833
     
    
    7839 7834
         Compute_Funcs( exc );
    
    ... ... @@ -8594,9 +8589,6 @@
    8594 8589
                     ins_counter,
    
    8595 8590
                     ins_counter == 1 ? "" : "s" ));
    
    8596 8591
     
    
    8597
    -    exc->cvt     = exc->origCvt;
    
    8598
    -    exc->storage = exc->origStorage;
    
    8599
    -
    
    8600 8592
         return FT_Err_Ok;
    
    8601 8593
     
    
    8602 8594
       LErrorCodeOverflow_:
    
    ... ... @@ -8606,9 +8598,6 @@
    8606 8598
         if ( exc->error && !exc->instruction_trap )
    
    8607 8599
           FT_TRACE1(( "  The interpreter returned error 0x%x\n", exc->error ));
    
    8608 8600
     
    
    8609
    -    exc->cvt     = exc->origCvt;
    
    8610
    -    exc->storage = exc->origStorage;
    
    8611
    -
    
    8612 8601
         return exc->error;
    
    8613 8602
       }
    
    8614 8603
     
    

  • src/truetype/ttinterp.h
    ... ... @@ -193,7 +193,6 @@ FT_BEGIN_HEADER
    193 193
         FT_Long*           cvt;       /* ! */
    
    194 194
         FT_ULong           glyfCvtSize;
    
    195 195
         FT_Long*           glyfCvt;   /* cvt working copy for glyph */
    
    196
    -    FT_Long*           origCvt;
    
    197 196
     
    
    198 197
         FT_UInt            glyphSize; /* ! glyph instructions buffer size */
    
    199 198
         FT_Byte*           glyphIns;  /* ! glyph instructions buffer      */
    
    ... ... @@ -224,7 +223,6 @@ FT_BEGIN_HEADER
    224 223
         FT_Long*           storage;      /* ! storage area            */
    
    225 224
         FT_UShort          glyfStoreSize;
    
    226 225
         FT_Long*           glyfStorage;  /* storage working copy for glyph */
    
    227
    -    FT_Long*           origStorage;
    
    228 226
     
    
    229 227
         FT_F26Dot6         period;     /* values used for the */
    
    230 228
         FT_F26Dot6         phase;      /* `SuperRounding'     */
    


  • reply via email to

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