Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/painting/qgrayraster.c

    r651 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    157157#define ErrRaster_Invalid_Argument  -3
    158158#define ErrRaster_Memory_Overflow   -4
     159#define ErrRaster_OutOfMemory       -6
    159160
    160161#define QT_FT_BEGIN_HEADER
     
    223224#endif
    224225
    225 
    226226  /*************************************************************************/
    227227  /*                                                                       */
     
    234234
    235235  typedef int   TCoord;   /* integer scanline/pixel coordinate */
    236   typedef long  TPos;     /* sub-pixel coordinate              */
     236  typedef int   TPos;     /* sub-pixel coordinate              */
    237237
    238238  /* determine the type used to store cell areas.  This normally takes at */
     
    318318    int        ycount;
    319319
     320    int        skip_spans;
    320321  } TWorker, *PWorker;
    321322
     
    325326    void*    buffer;
    326327    long     buffer_size;
     328    long     buffer_allocated_size;
    327329    int      band_size;
    328330    void*    memory;
     
    331333  } TRaster, *PRaster;
    332334
    333 
     335  int q_gray_rendered_spans(TRaster *raster)
     336  {
     337    if ( raster && raster->worker )
     338      return raster->worker->skip_spans > 0 ? 0 : -raster->worker->skip_spans;
     339    return 0;
     340  }
    334341
    335342  /*************************************************************************/
     
    539546  {
    540547    TCoord  ex1, ex2, fx1, fx2, delta;
    541     long    p, first, dx;
     548    int     p, first, dx;
    542549    int     incr, lift, mod, rem;
    543550
     
    644651    TCoord  ey1, ey2, fy1, fy2;
    645652    TPos    dx, dy, x, x2;
    646     long    p, first;
     653    int     p, first;
    647654    int     delta, rem, mod, lift, incr;
    648655
     
    976983    if ( dx < 0 )
    977984      dx = -dx;
    978     dy = DOWNSCALE( ras.y ) + to->y - 3 * ( control1->x + control2->y );
     985    dy = DOWNSCALE( ras.y ) + to->y - 3 * ( control1->y + control2->y );
    979986    if ( dy < 0 )
    980987      dy = -dy;
     
    11831190    QT_FT_Span*  span;
    11841191    int       coverage;
     1192    int       skip;
    11851193
    11861194
     
    12331241      if ( ras.num_gray_spans >= QT_FT_MAX_GRAY_SPANS )
    12341242      {
    1235         if ( ras.render_span )
    1236           ras.render_span( ras.num_gray_spans, ras.gray_spans,
     1243        if ( ras.render_span && ras.num_gray_spans > ras.skip_spans )
     1244        {
     1245          skip = ras.skip_spans > 0 ? ras.skip_spans : 0;
     1246          ras.render_span( ras.num_gray_spans - skip,
     1247                           ras.gray_spans + skip,
    12371248                           ras.render_span_data );
     1249        }
     1250
     1251        ras.skip_spans -= ras.num_gray_spans;
     1252
    12381253        /* ras.render_span( span->y, ras.gray_spans, count ); */
    12391254
     
    13601375  /*    outline        :: A pointer to the source target.                  */
    13611376  /*                                                                       */
    1362   /*    func_interface :: A table of `emitters', i.e,. function pointers   */
    1363   /*                      called during decomposition to indicate path     */
    1364   /*                      operations.                                      */
    1365   /*                                                                       */
    13661377  /*    user           :: A typeless pointer which is passed to each       */
    13671378  /*                      emitter during the decomposition.  It can be     */
     
    13741385  static
    13751386  int  QT_FT_Outline_Decompose( const QT_FT_Outline*        outline,
    1376                              const QT_FT_Outline_Funcs*  func_interface,
    13771387                             void*                    user )
    13781388  {
    13791389#undef SCALED
    1380 #if 0
    1381 #define SCALED( x )  ( ( (x) << shift ) - delta )
    1382 #else
    13831390#define SCALED( x )  (x)
    1384 #endif
    13851391
    13861392    QT_FT_Vector   v_last;
     
    13961402    int   error;
    13971403    char  tag;       /* current point's state           */
    1398 
    1399 #if 0
    1400     int   shift = func_interface->shift;
    1401     TPos  delta = func_interface->delta;
    1402 #endif
    1403 
    14041404
    14051405    first = 0;
     
    14561456      }
    14571457
    1458       error = func_interface->move_to( &v_start, user );
     1458      error = gray_move_to( &v_start, user );
    14591459      if ( error )
    14601460        goto Exit;
     
    14761476            vec.y = SCALED( point->y );
    14771477
    1478             error = func_interface->line_to( &vec, user );
     1478            error = gray_line_to( &vec, user );
    14791479            if ( error )
    14801480              goto Exit;
     
    15031503              if ( tag == QT_FT_CURVE_TAG_ON )
    15041504              {
    1505                 error = func_interface->conic_to( &v_control, &vec,
     1505                error = gray_conic_to( &v_control, &vec,
    15061506                                                  user );
    15071507                if ( error )
     
    15161516              v_middle.y = ( v_control.y + vec.y ) / 2;
    15171517
    1518               error = func_interface->conic_to( &v_control, &v_middle,
     1518              error = gray_conic_to( &v_control, &v_middle,
    15191519                                                user );
    15201520              if ( error )
     
    15251525            }
    15261526
    1527             error = func_interface->conic_to( &v_control, &v_start,
     1527            error = gray_conic_to( &v_control, &v_start,
    15281528                                              user );
    15291529            goto Close;
     
    15561556              vec.y = SCALED( point->y );
    15571557
    1558               error = func_interface->cubic_to( &vec1, &vec2, &vec, user );
     1558              error = gray_cubic_to( &vec1, &vec2, &vec, user );
    15591559              if ( error )
    15601560                goto Exit;
     
    15621562            }
    15631563
    1564             error = func_interface->cubic_to( &vec1, &vec2, &v_start, user );
     1564            error = gray_cubic_to( &vec1, &vec2, &v_start, user );
    15651565            goto Close;
    15661566          }
     
    15691569
    15701570      /* close the contour with a line segment */
    1571       error = func_interface->line_to( &v_start, user );
     1571      error = gray_line_to( &v_start, user );
    15721572
    15731573   Close:
     
    15971597  gray_convert_glyph_inner( RAS_ARG )
    15981598  {
    1599     static
    1600     const QT_FT_Outline_Funcs  func_interface =
    1601     {
    1602       (QT_FT_Outline_MoveTo_Func) gray_move_to,
    1603       (QT_FT_Outline_LineTo_Func) gray_line_to,
    1604       (QT_FT_Outline_ConicTo_Func)gray_conic_to,
    1605       (QT_FT_Outline_CubicTo_Func)gray_cubic_to,
    1606       0,
    1607       0
    1608     };
    1609 
    16101599    volatile int  error = 0;
    16111600
    16121601    if ( qt_ft_setjmp( ras.jump_buffer ) == 0 )
    16131602    {
    1614       error = QT_FT_Outline_Decompose( &ras.outline, &func_interface, &ras );
     1603      error = QT_FT_Outline_Decompose( &ras.outline, &ras );
    16151604      gray_record_cell( RAS_VAR );
    16161605    }
     
    16311620    int volatile     n, num_bands;
    16321621    TPos volatile    min, max, max_y;
    1633     QT_FT_BBox*         clip;
     1622    QT_FT_BBox*      clip;
     1623    int              skip;
    16341624
    16351625    ras.num_gray_spans = 0;
     
    17011691          PCell  cells_max;
    17021692          int    yindex;
    1703           long   cell_start, cell_end, cell_mod;
     1693          int    cell_start, cell_end, cell_mod;
    17041694
    17051695
     
    17581748          fprintf( stderr, "Rotten glyph!\n" );
    17591749#endif
    1760           /* == Raster_Err_OutOfMemory in qblackraster.c */
    1761           return -6;
     1750          return ErrRaster_OutOfMemory;
    17621751        }
    17631752
     
    17731762    }
    17741763
    1775     if ( ras.render_span && ras.num_gray_spans > 0 )
    1776         ras.render_span( ras.num_gray_spans,
    1777                          ras.gray_spans, ras.render_span_data );
     1764    if ( ras.render_span && ras.num_gray_spans > ras.skip_spans )
     1765    {
     1766        skip = ras.skip_spans > 0 ? ras.skip_spans : 0;
     1767        ras.render_span( ras.num_gray_spans - skip,
     1768                         ras.gray_spans + skip,
     1769                         ras.render_span_data );
     1770    }
     1771
     1772    ras.skip_spans -= ras.num_gray_spans;
    17781773
    17791774    if ( ras.band_shoot > 8 && ras.band_size > 16 )
     
    17851780
    17861781  static int
    1787   gray_raster_render( PRaster                  raster,
     1782  gray_raster_render( QT_FT_Raster                  raster,
    17881783                      const QT_FT_Raster_Params*  params )
    17891784  {
     
    17951790    if ( !raster || !raster->buffer || !raster->buffer_size )
    17961791      return ErrRaster_Invalid_Argument;
     1792
     1793    if ( raster->worker )
     1794      raster->worker->skip_spans = params->skip_spans;
     1795
     1796    // If raster object and raster buffer are allocated, but
     1797    // raster size isn't of the minimum size, indicate out of
     1798    // memory.
     1799    if (raster->buffer_allocated_size < MINIMUM_POOL_SIZE )
     1800      return ErrRaster_OutOfMemory;
    17971801
    17981802    /* return immediately if the outline is empty */
     
    18751879
    18761880  static int
    1877   gray_raster_new( void *  memory,
    1878                    QT_FT_Raster*  araster )
    1879   {
    1880     if (memory)
    1881       fprintf(stderr, "gray_raster_new(), memory ignored");
    1882     memory = malloc(sizeof(TRaster));
    1883     if (!memory) {
     1881  gray_raster_new( QT_FT_Raster*  araster )
     1882  {
     1883    *araster = malloc(sizeof(TRaster));
     1884    if (!*araster) {
    18841885        *araster = 0;
    18851886        return ErrRaster_Memory_Overflow;
    18861887    }
    1887     QT_FT_MEM_ZERO(memory, sizeof(TRaster));
    1888 
    1889     *araster = (QT_FT_Raster) memory;
     1888    QT_FT_MEM_ZERO(*araster, sizeof(TRaster));
     1889
    18901890    return 0;
    18911891  }
     
    19061906    PRaster  rast = (PRaster)raster;
    19071907
    1908 
    19091908    if ( raster )
    19101909    {
    1911       if ( pool_base && pool_size >= (long)sizeof ( TWorker ) + 2048 )
     1910      if ( pool_base && ( pool_size >= MINIMUM_POOL_SIZE ) )
    19121911      {
    19131912        PWorker  worker = (PWorker)pool_base;
     
    19241923                                     ( sizeof ( TCell ) * 8 ) );
    19251924      }
     1925      else if ( pool_base)
     1926      { // Case when there is a raster pool allocated, but it
     1927        // doesn't have the minimum size (and so memory will be reallocated)
     1928          rast->buffer = pool_base;
     1929          rast->worker = NULL;
     1930          rast->buffer_size = pool_size;
     1931      }
    19261932      else
    19271933      {
     
    19301936        rast->worker      = NULL;
    19311937      }
     1938      rast->buffer_allocated_size = pool_size;
    19321939    }
    19331940  }
Note: See TracChangeset for help on using the changeset viewer.