Changeset 846 for trunk/src/gui/painting/qgrayraster.c
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/painting/qgrayraster.c
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 157 157 #define ErrRaster_Invalid_Argument -3 158 158 #define ErrRaster_Memory_Overflow -4 159 #define ErrRaster_OutOfMemory -6 159 160 160 161 #define QT_FT_BEGIN_HEADER … … 223 224 #endif 224 225 225 226 226 /*************************************************************************/ 227 227 /* */ … … 234 234 235 235 typedef int TCoord; /* integer scanline/pixel coordinate */ 236 typedef longTPos; /* sub-pixel coordinate */236 typedef int TPos; /* sub-pixel coordinate */ 237 237 238 238 /* determine the type used to store cell areas. This normally takes at */ … … 318 318 int ycount; 319 319 320 int skip_spans; 320 321 } TWorker, *PWorker; 321 322 … … 325 326 void* buffer; 326 327 long buffer_size; 328 long buffer_allocated_size; 327 329 int band_size; 328 330 void* memory; … … 331 333 } TRaster, *PRaster; 332 334 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 } 334 341 335 342 /*************************************************************************/ … … 539 546 { 540 547 TCoord ex1, ex2, fx1, fx2, delta; 541 longp, first, dx;548 int p, first, dx; 542 549 int incr, lift, mod, rem; 543 550 … … 644 651 TCoord ey1, ey2, fy1, fy2; 645 652 TPos dx, dy, x, x2; 646 longp, first;653 int p, first; 647 654 int delta, rem, mod, lift, incr; 648 655 … … 976 983 if ( dx < 0 ) 977 984 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 ); 979 986 if ( dy < 0 ) 980 987 dy = -dy; … … 1183 1190 QT_FT_Span* span; 1184 1191 int coverage; 1192 int skip; 1185 1193 1186 1194 … … 1233 1241 if ( ras.num_gray_spans >= QT_FT_MAX_GRAY_SPANS ) 1234 1242 { 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, 1237 1248 ras.render_span_data ); 1249 } 1250 1251 ras.skip_spans -= ras.num_gray_spans; 1252 1238 1253 /* ras.render_span( span->y, ras.gray_spans, count ); */ 1239 1254 … … 1360 1375 /* outline :: A pointer to the source target. */ 1361 1376 /* */ 1362 /* func_interface :: A table of `emitters', i.e,. function pointers */1363 /* called during decomposition to indicate path */1364 /* operations. */1365 /* */1366 1377 /* user :: A typeless pointer which is passed to each */ 1367 1378 /* emitter during the decomposition. It can be */ … … 1374 1385 static 1375 1386 int QT_FT_Outline_Decompose( const QT_FT_Outline* outline, 1376 const QT_FT_Outline_Funcs* func_interface,1377 1387 void* user ) 1378 1388 { 1379 1389 #undef SCALED 1380 #if 01381 #define SCALED( x ) ( ( (x) << shift ) - delta )1382 #else1383 1390 #define SCALED( x ) (x) 1384 #endif1385 1391 1386 1392 QT_FT_Vector v_last; … … 1396 1402 int error; 1397 1403 char tag; /* current point's state */ 1398 1399 #if 01400 int shift = func_interface->shift;1401 TPos delta = func_interface->delta;1402 #endif1403 1404 1404 1405 1405 first = 0; … … 1456 1456 } 1457 1457 1458 error = func_interface->move_to( &v_start, user );1458 error = gray_move_to( &v_start, user ); 1459 1459 if ( error ) 1460 1460 goto Exit; … … 1476 1476 vec.y = SCALED( point->y ); 1477 1477 1478 error = func_interface->line_to( &vec, user );1478 error = gray_line_to( &vec, user ); 1479 1479 if ( error ) 1480 1480 goto Exit; … … 1503 1503 if ( tag == QT_FT_CURVE_TAG_ON ) 1504 1504 { 1505 error = func_interface->conic_to( &v_control, &vec,1505 error = gray_conic_to( &v_control, &vec, 1506 1506 user ); 1507 1507 if ( error ) … … 1516 1516 v_middle.y = ( v_control.y + vec.y ) / 2; 1517 1517 1518 error = func_interface->conic_to( &v_control, &v_middle,1518 error = gray_conic_to( &v_control, &v_middle, 1519 1519 user ); 1520 1520 if ( error ) … … 1525 1525 } 1526 1526 1527 error = func_interface->conic_to( &v_control, &v_start,1527 error = gray_conic_to( &v_control, &v_start, 1528 1528 user ); 1529 1529 goto Close; … … 1556 1556 vec.y = SCALED( point->y ); 1557 1557 1558 error = func_interface->cubic_to( &vec1, &vec2, &vec, user );1558 error = gray_cubic_to( &vec1, &vec2, &vec, user ); 1559 1559 if ( error ) 1560 1560 goto Exit; … … 1562 1562 } 1563 1563 1564 error = func_interface->cubic_to( &vec1, &vec2, &v_start, user );1564 error = gray_cubic_to( &vec1, &vec2, &v_start, user ); 1565 1565 goto Close; 1566 1566 } … … 1569 1569 1570 1570 /* close the contour with a line segment */ 1571 error = func_interface->line_to( &v_start, user );1571 error = gray_line_to( &v_start, user ); 1572 1572 1573 1573 Close: … … 1597 1597 gray_convert_glyph_inner( RAS_ARG ) 1598 1598 { 1599 static1600 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 01608 };1609 1610 1599 volatile int error = 0; 1611 1600 1612 1601 if ( qt_ft_setjmp( ras.jump_buffer ) == 0 ) 1613 1602 { 1614 error = QT_FT_Outline_Decompose( &ras.outline, & func_interface, &ras );1603 error = QT_FT_Outline_Decompose( &ras.outline, &ras ); 1615 1604 gray_record_cell( RAS_VAR ); 1616 1605 } … … 1631 1620 int volatile n, num_bands; 1632 1621 TPos volatile min, max, max_y; 1633 QT_FT_BBox* clip; 1622 QT_FT_BBox* clip; 1623 int skip; 1634 1624 1635 1625 ras.num_gray_spans = 0; … … 1701 1691 PCell cells_max; 1702 1692 int yindex; 1703 longcell_start, cell_end, cell_mod;1693 int cell_start, cell_end, cell_mod; 1704 1694 1705 1695 … … 1758 1748 fprintf( stderr, "Rotten glyph!\n" ); 1759 1749 #endif 1760 /* == Raster_Err_OutOfMemory in qblackraster.c */ 1761 return -6; 1750 return ErrRaster_OutOfMemory; 1762 1751 } 1763 1752 … … 1773 1762 } 1774 1763 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; 1778 1773 1779 1774 if ( ras.band_shoot > 8 && ras.band_size > 16 ) … … 1785 1780 1786 1781 static int 1787 gray_raster_render( PRaster raster,1782 gray_raster_render( QT_FT_Raster raster, 1788 1783 const QT_FT_Raster_Params* params ) 1789 1784 { … … 1795 1790 if ( !raster || !raster->buffer || !raster->buffer_size ) 1796 1791 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; 1797 1801 1798 1802 /* return immediately if the outline is empty */ … … 1875 1879 1876 1880 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) { 1884 1885 *araster = 0; 1885 1886 return ErrRaster_Memory_Overflow; 1886 1887 } 1887 QT_FT_MEM_ZERO(memory, sizeof(TRaster)); 1888 1889 *araster = (QT_FT_Raster) memory; 1888 QT_FT_MEM_ZERO(*araster, sizeof(TRaster)); 1889 1890 1890 return 0; 1891 1891 } … … 1906 1906 PRaster rast = (PRaster)raster; 1907 1907 1908 1909 1908 if ( raster ) 1910 1909 { 1911 if ( pool_base && pool_size >= (long)sizeof ( TWorker ) + 2048)1910 if ( pool_base && ( pool_size >= MINIMUM_POOL_SIZE ) ) 1912 1911 { 1913 1912 PWorker worker = (PWorker)pool_base; … … 1924 1923 ( sizeof ( TCell ) * 8 ) ); 1925 1924 } 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 } 1926 1932 else 1927 1933 { … … 1930 1936 rast->worker = NULL; 1931 1937 } 1938 rast->buffer_allocated_size = pool_size; 1932 1939 } 1933 1940 }
Note:
See TracChangeset
for help on using the changeset viewer.