Changeset 1343 for lang/c

Show
Ignore:
Timestamp:
11/12/07 23:09:50 (6 years ago)
Author:
gyuque
Message:

lang/c/cairo-hacking: added experimental API "cairo_set_mask_blur_radius"

Location:
lang/c/cairo-hacking/src
Files:
14 modified

Legend:

Unmodified
Added
Removed
  • lang/c/cairo-hacking/src/cairo-analysis-surface.c

    r1307 r1343  
    133133                              cairo_fill_rule_t          fill_rule, 
    134134                              double                     tolerance, 
    135                               cairo_antialias_t          antialias) 
     135                              cairo_antialias_t          antialias, 
     136                                  unsigned int mask_blur_radius) 
    136137{ 
    137138    cairo_analysis_surface_t *surface = abstract_surface; 
     
    143144        status = (*surface->target->backend->fill) (surface->target, op, 
    144145                                                    source, path, fill_rule, 
    145                                                     tolerance, antialias); 
     146                                                    tolerance, antialias, mask_blur_radius); 
    146147    if (status == CAIRO_INT_STATUS_UNSUPPORTED) { 
    147148        surface->fallback = TRUE; 
  • lang/c/cairo-hacking/src/cairo-clip.c

    r1307 r1343  
    422422                                                  surface, 
    423423                                                  antialias, 
     424                                                  0,/*XX*/ 
    424425                                                  0, 0, 
    425426                                                  0, 0, 
  • lang/c/cairo-hacking/src/cairo-gstate-private.h

    r1307 r1343  
    6666    cairo_pattern_t *source; 
    6767 
     68        unsigned int mask_blur_radius; 
    6869    struct _cairo_gstate *next; 
    6970}; 
  • lang/c/cairo-hacking/src/cairo-gstate.c

    r1307 r1343  
    10481048                                  gstate->fill_rule, 
    10491049                                  gstate->tolerance, 
    1050                                   gstate->antialias); 
     1050                                  gstate->antialias, 
     1051                                  gstate->mask_blur_radius); 
    10511052 
    10521053    _cairo_pattern_fini (&pattern.base); 
     
    16431644} 
    16441645 
     1646 
     1647cairo_status_t 
     1648_cairo_gstate_set_mask_blur_radius (cairo_gstate_t *gstate, 
     1649                             unsigned int radius) 
     1650{ 
     1651        gstate->mask_blur_radius = radius; 
     1652 
     1653    return CAIRO_STATUS_SUCCESS; 
     1654} 
     1655 
    16451656cairo_antialias_t 
    16461657_cairo_gstate_get_antialias (cairo_gstate_t *gstate) 
  • lang/c/cairo-hacking/src/cairo-image-surface.c

    r1309 r1343  
    976976                                           void                 *abstract_dst, 
    977977                                           cairo_antialias_t    antialias, 
     978                                           unsigned int mask_blur_radius, 
    978979                                           int                  src_x, 
    979980                                           int                  src_y, 
     
    10621063    } 
    10631064 
     1065        if (mask_blur_radius) 
    10641066        { 
    10651067                ret = pixman_format_init (&blur_format, PIXMAN_FORMAT_NAME_A8); 
     
    10861088                           (pixman_trapezoid_t *) traps, num_traps); 
    10871089 
    1088         _make_blur_mask(blur_mask, mask, 2); 
    1089  
    1090         pixman_composite (_pixman_operator (op), 
    1091                     src->pixman_image, 
    1092                     blur_mask, 
    1093                     dst->pixman_image, 
    1094                     src_x + attributes.x_offset, 
    1095                     src_y + attributes.y_offset, 
    1096                     0, 0, 
    1097                     dst_x, dst_y, 
    1098                     width, height); 
    1099                          
    1100 /* 
    1101     pixman_composite (_pixman_operator (op), 
    1102                       src->pixman_image, 
    1103                       mask, 
    1104                       dst->pixman_image, 
    1105                       src_x + attributes.x_offset, 
    1106                       src_y + attributes.y_offset, 
    1107                       0, 0, 
    1108                       dst_x, dst_y, 
    1109                       width, height); 
    1110 */ 
     1090        if (blur_mask) 
     1091        { 
     1092                _make_blur_mask(blur_mask, mask, mask_blur_radius); 
     1093 
     1094                pixman_composite (_pixman_operator (op), 
     1095                                src->pixman_image, 
     1096                                blur_mask, 
     1097                                dst->pixman_image, 
     1098                                src_x + attributes.x_offset, 
     1099                                src_y + attributes.y_offset, 
     1100                                0, 0, 
     1101                                dst_x, dst_y, 
     1102                                width, height); 
     1103        } 
     1104        else 
     1105        { 
     1106                pixman_composite (_pixman_operator (op), 
     1107                                src->pixman_image, 
     1108                                mask, 
     1109                                dst->pixman_image, 
     1110                                src_x + attributes.x_offset, 
     1111                                src_y + attributes.y_offset, 
     1112                                0, 0, 
     1113                                dst_x, dst_y, 
     1114                                width, height); 
     1115        } 
     1116 
    11111117    if (!_cairo_operator_bounded_by_mask (op)) 
    11121118        status = _cairo_surface_composite_shape_fixup_unbounded (&dst->base, 
     
    11221128 CLEANUP_IMAGE_DATA: 
    11231129    free (mask_data); 
    1124     free (blur_mask_data); 
     1130 
     1131        if (blur_mask_data) 
     1132                free (blur_mask_data); 
    11251133 
    11261134 CLEANUP_SOURCE: 
  • lang/c/cairo-hacking/src/cairo-meta-surface-private.h

    r1307 r1343  
    9191    double                       tolerance; 
    9292    cairo_antialias_t            antialias; 
     93        unsigned int mask_blur_radius; 
    9394} cairo_command_fill_t; 
    9495 
  • lang/c/cairo-hacking/src/cairo-meta-surface.c

    r1307 r1343  
    377377                          cairo_fill_rule_t      fill_rule, 
    378378                          double                 tolerance, 
    379                           cairo_antialias_t      antialias) 
     379                          cairo_antialias_t      antialias, 
     380                          unsigned int mask_blur_radius) 
    380381{ 
    381382    cairo_status_t status; 
     
    401402    command->tolerance = tolerance; 
    402403    command->antialias = antialias; 
     404        command->mask_blur_radius = mask_blur_radius; 
    403405 
    404406    status = _cairo_array_append (&meta->commands, &command); 
     
    727729                                          command->fill.fill_rule, 
    728730                                          command->fill.tolerance, 
    729                                           command->fill.antialias); 
     731                                          command->fill.antialias, 
     732                                          command->fill.mask_blur_radius); 
    730733            break; 
    731734        case CAIRO_COMMAND_SHOW_GLYPHS: 
  • lang/c/cairo-hacking/src/cairo-paginated-surface.c

    r1307 r1343  
    442442    return _cairo_surface_fill (surface->meta, op, source, 
    443443                                path, fill_rule, 
    444                                 tolerance, antialias); 
     444                                tolerance, antialias, 0 /*XX*/); 
    445445} 
    446446 
  • lang/c/cairo-hacking/src/cairo-surface-fallback-private.h

    r1307 r1343  
    6969                              cairo_fill_rule_t          fill_rule, 
    7070                              double                     tolerance, 
    71                               cairo_antialias_t          antialias); 
     71                              cairo_antialias_t          antialias, 
     72                                  unsigned int mask_blur_radius); 
    7273 
    7374cairo_private cairo_status_t 
     
    108109                                              cairo_surface_t          *dst, 
    109110                                              cairo_antialias_t         antialias, 
     111                                              unsigned int      mask_blur_radius, 
    110112                                              int                       src_x, 
    111113                                              int                       src_y, 
  • lang/c/cairo-hacking/src/cairo-surface-fallback.c

    r1307 r1343  
    475475    cairo_traps_t *traps; 
    476476    cairo_antialias_t antialias; 
     477        unsigned int mask_blur_radius; 
    477478} cairo_composite_traps_info_t; 
    478479 
     
    500501    status = _cairo_surface_composite_trapezoids (op, 
    501502                                                  src, dst, info->antialias, 
     503                                                  info->mask_blur_radius, 
    502504                                                  extents->x,         extents->y, 
    503505                                                  extents->x - dst_x, extents->y - dst_y, 
     
    517519                                cairo_traps_t *traps, 
    518520                                cairo_clip_t *clip, 
    519                                 cairo_antialias_t antialias) 
     521                                cairo_antialias_t antialias, 
     522                                unsigned int mask_blur_radius) 
    520523{ 
    521524    cairo_status_t status; 
     
    660663    traps_info.traps = traps; 
    661664    traps_info.antialias = antialias; 
     665        traps_info.mask_blur_radius = mask_blur_radius; 
    662666 
    663667// GYUQUE: 
    664         extents.width += 40; 
    665         extents.height += 40; 
    666         extents.x -= 20; 
    667         extents.y -= 20; 
     668        if (mask_blur_radius) 
     669        { 
     670                extents.width += mask_blur_radius<<1; 
     671                extents.height += mask_blur_radius<<1; 
     672                extents.x -= mask_blur_radius; 
     673                extents.y -= mask_blur_radius; 
     674        } 
    668675 
    669676    status = _clip_and_composite (clip, op, src, 
     
    721728                                             &traps, 
    722729                                             surface->clip, 
    723                                              CAIRO_ANTIALIAS_NONE); 
     730                                             CAIRO_ANTIALIAS_NONE, 
     731                                                 0/*XX*/); 
    724732 
    725733    _cairo_traps_fini (&traps); 
     
    855863                                             &traps, 
    856864                                             surface->clip, 
    857                                              antialias); 
     865                                             antialias, 
     866                                                 0/*XX*/); 
    858867 
    859868    _cairo_traps_fini (&traps); 
     
    869878                              cairo_fill_rule_t          fill_rule, 
    870879                              double                     tolerance, 
    871                               cairo_antialias_t          antialias) 
     880                              cairo_antialias_t          antialias, 
     881                                  unsigned int mask_blur_radius) 
    872882{ 
    873883    cairo_status_t status; 
     
    916926                                             &traps, 
    917927                                             surface->clip, 
    918                                              antialias); 
     928                                             antialias, 
     929                                                 mask_blur_radius); 
    919930 
    920931    _cairo_traps_fini (&traps); 
     
    12061217                                              cairo_surface_t          *dst, 
    12071218                                              cairo_antialias_t         antialias, 
     1219                                                  unsigned int  mask_blur_radius, 
    12081220                                              int                       src_x, 
    12091221                                              int                       src_y, 
     
    12441256                                                  &state.image->base, 
    12451257                                                  antialias, 
     1258                                                  mask_blur_radius, 
    12461259                                                  src_x, src_y, 
    12471260                                                  dst_x - state.image_rect.x, 
  • lang/c/cairo-hacking/src/cairo-surface.c

    r1307 r1343  
    14321432                     cairo_fill_rule_t   fill_rule, 
    14331433                     double              tolerance, 
    1434                      cairo_antialias_t   antialias) 
     1434                     cairo_antialias_t   antialias, 
     1435                         unsigned int mask_blur_radius) 
    14351436{ 
    14361437    cairo_status_t status; 
     
    14461447        status = surface->backend->fill (surface, op, &dev_source.base, 
    14471448                                         path, fill_rule, 
    1448                                          tolerance, antialias); 
     1449                                         tolerance, antialias, 
     1450                                         mask_blur_radius); 
    14491451 
    14501452        if (status != CAIRO_INT_STATUS_UNSUPPORTED) 
     
    14541456    status = _cairo_surface_fallback_fill (surface, op, &dev_source.base, 
    14551457                                           path, fill_rule, 
    1456                                            tolerance, antialias); 
     1458                                           tolerance, antialias, mask_blur_radius); 
    14571459 
    14581460 FINISH: 
     
    14671469                                     cairo_surface_t            *dst, 
    14681470                                     cairo_antialias_t          antialias, 
     1471                                         unsigned int   mask_blur_radius, 
    14691472                                     int                        src_x, 
    14701473                                     int                        src_y, 
     
    14951498                                                     pattern, dst, 
    14961499                                                     antialias, 
     1500                                                         mask_blur_radius, 
    14971501                                                     src_x, src_y, 
    14981502                                                     dst_x, dst_y, 
     
    15051509    return  _cairo_surface_fallback_composite_trapezoids (op, pattern, dst, 
    15061510                                                          antialias, 
     1511                                                          mask_blur_radius, 
    15071512                                                          src_x, src_y, 
    15081513                                                          dst_x, dst_y, 
  • lang/c/cairo-hacking/src/cairo.c

    r1307 r1343  
    894894        _cairo_set_error (cr, status); 
    895895} 
     896 
     897/** 
     898*/ 
     899 
     900void 
     901cairo_set_mask_blur_radius (cairo_t *cr, unsigned int radius) 
     902{ 
     903    cairo_status_t status; 
     904 
     905    if (cr->status) 
     906        return; 
     907 
     908    status = _cairo_gstate_set_mask_blur_radius (cr->gstate, radius); 
     909    if (status) 
     910        _cairo_set_error (cr, status); 
     911} 
     912 
    896913 
    897914/** 
  • lang/c/cairo-hacking/src/cairo.h

    r1307 r1343  
    408408cairo_public void 
    409409cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias); 
     410 
     411/**/ 
     412 
     413cairo_public void 
     414cairo_set_mask_blur_radius (cairo_t *cr, unsigned int radius); 
    410415 
    411416/** 
  • lang/c/cairo-hacking/src/cairoint.h

    r1307 r1343  
    750750                                 void                   *dst, 
    751751                                 cairo_antialias_t       antialias, 
     752                                 unsigned int    mask_blur_radius, 
    752753                                 int                     src_x, 
    753754                                 int                     src_y, 
     
    889890                                 cairo_fill_rule_t       fill_rule, 
    890891                                 double                  tolerance, 
    891                                  cairo_antialias_t       antialias); 
     892                                 cairo_antialias_t       antialias, 
     893                                 unsigned int mask_blur_radius); 
    892894 
    893895    cairo_warn cairo_int_status_t 
     
    18211823                     cairo_fill_rule_t   fill_rule, 
    18221824                     double              tolerance, 
    1823                      cairo_antialias_t   antialias); 
     1825                     cairo_antialias_t   antialias, 
     1826                         unsigned int mask_blur_radius); 
    18241827 
    18251828cairo_private cairo_status_t 
     
    18361839                                     cairo_surface_t    *dst, 
    18371840                                     cairo_antialias_t  antialias, 
     1841                                         unsigned int mask_blur_radius, 
    18381842                                     int                src_x, 
    18391843                                     int                src_y, 
     
    23442348_cairo_gstate_set_antialias (cairo_gstate_t *gstate, 
    23452349                             cairo_antialias_t antialias); 
     2350 
     2351cairo_private cairo_status_t 
     2352_cairo_gstate_set_mask_blur_radius(cairo_gstate_t *gstate, 
     2353                             unsigned int radius); 
    23462354 
    23472355cairo_private cairo_antialias_t