< prev index next >

src/java.desktop/share/native/libfreetype/src/base/ftbitmap.c

Print this page




 905     final_ury = FT_MAX( source_ury, target_ury );
 906 
 907     final_width = ( final_urx - final_llx ) >> 6;
 908     final_rows  = ( final_ury - final_lly ) >> 6;
 909 
 910 #ifdef FT_DEBUG_LEVEL_TRACE
 911     FT_TRACE5(( "FT_Bitmap_Blend:\n"
 912                 "  source bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
 913       source_llx / 64, source_lly / 64,
 914       source_urx / 64, source_ury / 64,
 915       source_->width, source_->rows ));
 916 
 917     if ( target->width && target->rows )
 918       FT_TRACE5(( "  target bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
 919         target_llx / 64, target_lly / 64,
 920         target_urx / 64, target_ury / 64,
 921         target->width, target->rows ));
 922     else
 923       FT_TRACE5(( "  target bitmap: empty\n" ));
 924 

 925     FT_TRACE5(( "  final bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
 926       final_llx / 64, final_lly / 64,
 927       final_urx / 64, final_ury / 64,
 928       final_width, final_rows ));


 929 #endif /* FT_DEBUG_LEVEL_TRACE */
 930 



 931     /* for blending, set offset vector of final bitmap */
 932     /* temporarily to (0,0)                            */
 933     source_llx -= final_llx;
 934     source_lly -= final_lly;
 935 
 936     if ( target->width && target->rows )
 937     {
 938       target_llx -= final_llx;
 939       target_lly -= final_lly;
 940     }
 941 
 942     /* set up target bitmap */
 943     if ( target->pixel_mode == FT_PIXEL_MODE_NONE )
 944     {
 945       /* create new empty bitmap */
 946       target->width      = final_width;
 947       target->rows       = final_rows;
 948       target->pixel_mode = FT_PIXEL_MODE_BGRA;
 949       target->pitch      = (int)final_width * 4;
 950       target->num_grays  = 256;


 954         FT_TRACE5(( "FT_Blend_Bitmap: target bitmap too large (%d x %d)\n",
 955                      final_width, final_rows ));
 956         return FT_THROW( Invalid_Argument );
 957       }
 958 
 959       if ( FT_ALLOC( target->buffer, target->pitch * (int)target->rows ) )
 960         return error;
 961 
 962       free_target_bitmap_on_error = 1;
 963     }
 964     else if ( target->width != final_width ||
 965               target->rows  != final_rows  )
 966     {
 967       /* adjust old bitmap to enlarged size */
 968       int  pitch, new_pitch;
 969 
 970       unsigned char*  buffer = NULL;
 971 
 972 
 973       pitch = target->pitch;

 974       if ( pitch < 0 )
 975         pitch = -pitch;
 976 
 977       new_pitch = (int)final_width * 4;
 978 
 979       if ( FT_LONG_MAX / new_pitch < (int)final_rows )
 980       {
 981         FT_TRACE5(( "FT_Blend_Bitmap: target bitmap too large (%d x %d)\n",
 982                      final_width, final_rows ));
 983         return FT_THROW( Invalid_Argument );
 984       }
 985 
 986       /* TODO: provide an in-buffer solution for large bitmaps */
 987       /*       to avoid allocation of a new buffer             */
 988       if ( FT_ALLOC( buffer, new_pitch * (int)final_rows ) )
 989         goto Error;
 990 
 991       /* copy data to new buffer */
 992       x = target_llx >> 6;
 993       y = target_lly >> 6;




 905     final_ury = FT_MAX( source_ury, target_ury );
 906 
 907     final_width = ( final_urx - final_llx ) >> 6;
 908     final_rows  = ( final_ury - final_lly ) >> 6;
 909 
 910 #ifdef FT_DEBUG_LEVEL_TRACE
 911     FT_TRACE5(( "FT_Bitmap_Blend:\n"
 912                 "  source bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
 913       source_llx / 64, source_lly / 64,
 914       source_urx / 64, source_ury / 64,
 915       source_->width, source_->rows ));
 916 
 917     if ( target->width && target->rows )
 918       FT_TRACE5(( "  target bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
 919         target_llx / 64, target_lly / 64,
 920         target_urx / 64, target_ury / 64,
 921         target->width, target->rows ));
 922     else
 923       FT_TRACE5(( "  target bitmap: empty\n" ));
 924 
 925     if ( final_width && final_rows )
 926       FT_TRACE5(( "  final bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
 927         final_llx / 64, final_lly / 64,
 928         final_urx / 64, final_ury / 64,
 929         final_width, final_rows ));
 930     else
 931       FT_TRACE5(( "  final bitmap: empty\n" ));
 932 #endif /* FT_DEBUG_LEVEL_TRACE */
 933 
 934     if ( !( final_width && final_rows ) )
 935       return FT_Err_Ok;               /* nothing to do */
 936 
 937     /* for blending, set offset vector of final bitmap */
 938     /* temporarily to (0,0)                            */
 939     source_llx -= final_llx;
 940     source_lly -= final_lly;
 941 
 942     if ( target->width && target->rows )
 943     {
 944       target_llx -= final_llx;
 945       target_lly -= final_lly;
 946     }
 947 
 948     /* set up target bitmap */
 949     if ( target->pixel_mode == FT_PIXEL_MODE_NONE )
 950     {
 951       /* create new empty bitmap */
 952       target->width      = final_width;
 953       target->rows       = final_rows;
 954       target->pixel_mode = FT_PIXEL_MODE_BGRA;
 955       target->pitch      = (int)final_width * 4;
 956       target->num_grays  = 256;


 960         FT_TRACE5(( "FT_Blend_Bitmap: target bitmap too large (%d x %d)\n",
 961                      final_width, final_rows ));
 962         return FT_THROW( Invalid_Argument );
 963       }
 964 
 965       if ( FT_ALLOC( target->buffer, target->pitch * (int)target->rows ) )
 966         return error;
 967 
 968       free_target_bitmap_on_error = 1;
 969     }
 970     else if ( target->width != final_width ||
 971               target->rows  != final_rows  )
 972     {
 973       /* adjust old bitmap to enlarged size */
 974       int  pitch, new_pitch;
 975 
 976       unsigned char*  buffer = NULL;
 977 
 978 
 979       pitch = target->pitch;
 980 
 981       if ( pitch < 0 )
 982         pitch = -pitch;
 983 
 984       new_pitch = (int)final_width * 4;
 985 
 986       if ( FT_LONG_MAX / new_pitch < (int)final_rows )
 987       {
 988         FT_TRACE5(( "FT_Blend_Bitmap: target bitmap too large (%d x %d)\n",
 989                      final_width, final_rows ));
 990         return FT_THROW( Invalid_Argument );
 991       }
 992 
 993       /* TODO: provide an in-buffer solution for large bitmaps */
 994       /*       to avoid allocation of a new buffer             */
 995       if ( FT_ALLOC( buffer, new_pitch * (int)final_rows ) )
 996         goto Error;
 997 
 998       /* copy data to new buffer */
 999       x = target_llx >> 6;
1000       y = target_lly >> 6;


< prev index next >