Changeset 3298 for libcaca/trunk


Ignore:
Timestamp:
Nov 6, 2008, 8:45:11 PM (11 years ago)
Author:
bsittler
Message:

fix impedence mismatch between libgd alpha (0 = opaque, 127 = transparent) and libcaca alpha (0 = transparent, 255 = opaque)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca-php/php_caca.c

    r3291 r3298  
    228228        le_caca_display = zend_register_list_destructors_ex(php_caca_display_dtor, NULL, PHP_CACA_DISPLAY_RES_NAME, module_number);
    229229        le_caca_event = zend_register_list_destructors_ex(php_caca_event_dtor, NULL, PHP_CACA_EVENT_RES_NAME, module_number);
    230        
     230
    231231        REGISTER_LONG_CONSTANT("CACA_BLACK", CACA_BLACK, CONST_CS | CONST_PERSISTENT);
    232232        REGISTER_LONG_CONSTANT("CACA_BLUE", CACA_BLUE, CONST_CS | CONST_PERSISTENT);
     
    326326                RETURN_FALSE; \
    327327        } \
    328         ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas); 
     328        ZEND_FETCH_RESOURCE(canvas, caca_canvas_t*, &_zval, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_canvas);
    329329
    330330#define FETCH_DISPLAY(display) \
     
    333333                RETURN_FALSE; \
    334334        } \
    335         ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display); 
     335        ZEND_FETCH_RESOURCE(display, caca_display_t*, &_zval, -1, PHP_CACA_DISPLAY_RES_NAME, le_caca_display);
    336336
    337337#define FETCH_EVENT(event) \
     
    340340                RETURN_FALSE; \
    341341        } \
    342         ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event); 
     342        ZEND_FETCH_RESOURCE(event, caca_event_t*, &_zval, -1, PHP_CACA_EVENT_RES_NAME, le_caca_event);
    343343
    344344#define FETCH_LONG(l) \
     
    364364        int resource_type;
    365365        void *result = zend_list_find(resource_id, &resource_type);
    366         if (!result) 
     366        if (!result)
    367367                return NULL;
    368368        char *resource_type_name = zend_rsrc_list_get_rsrc_type(resource_id);
     
    375375void *gd_get_pixels(gdImage *img) {
    376376        void *result;
    377         int j, pitch;           
     377        int i, j, pitch;
    378378        if (img->trueColor)  {
    379379                pitch = img->sx * sizeof(int);
    380380                result = malloc(img->sy * pitch);
    381                 for (j = 0; j < img->sy; j++)
    382                         memcpy(result + (j * pitch), (const void *) img->tpixels[j], pitch);
     381                if (result)
     382                {
     383                        for (i = 0; i < img->sy; i++) {
     384                                for (j = 0; j < img->sx; j++) {
     385                                        uint8_t *dst = ((uint8_t *) result) + i * pitch + j * 4;
     386
     387                                        dst[0] = (127 - (img->tpixels[i][j] & 0x7f000000) >> 24);
     388                                        dst[1] = (img->tpixels[i][j] & 0x00ff0000) >> 16;
     389                                        dst[2] = (img->tpixels[i][j] & 0x0000ff00) >> 8;
     390                                        dst[3] = img->tpixels[i][j] & 0x000000ff;
     391                                }
     392                        }
     393                }
    383394        }
    384395        else {
     
    448459        caca_canvas_t *canvas;
    449460        FETCH_CANVAS(canvas);
    450         RETURN_STRING((char *) caca_get_canvas_chars(canvas), 1); 
     461        RETURN_STRING((char *) caca_get_canvas_chars(canvas), 1);
    451462}
    452463
     
    779790        tbl_x = malloc(sizeof(int) * lenmax);
    780791        tbl_y = malloc(sizeof(int) * lenmax);
    781        
     792
    782793        HashPosition pos;
    783794        zval **pt, **x, **y;
    784795        for (
    785                 zend_hash_internal_pointer_reset_ex(arr_hash, &pos); 
    786                 zend_hash_get_current_data_ex(arr_hash, (void**) &pt, &pos) == SUCCESS; 
     796                zend_hash_internal_pointer_reset_ex(arr_hash, &pos);
     797                zend_hash_get_current_data_ex(arr_hash, (void**) &pt, &pos) == SUCCESS;
    787798                zend_hash_move_forward_ex(arr_hash, &pos)
    788799        ) {
    789800                if (
    790                         Z_TYPE_P(*pt) == IS_ARRAY 
     801                        Z_TYPE_P(*pt) == IS_ARRAY
    791802                        && (zend_hash_index_find(Z_ARRVAL_P(*pt), 0, (void**) &x) != FAILURE)
    792803                        && (zend_hash_index_find(Z_ARRVAL_P(*pt), 1, (void**) &y) != FAILURE)
     
    835846                RETURN_FALSE;
    836847        }
    837        
     848
    838849        HashPosition pos;
    839850        zval **pt, **x, **y;
    840851        for (
    841                 zend_hash_internal_pointer_reset_ex(arr_hash, &pos); 
    842                 zend_hash_get_current_data_ex(arr_hash, (void**) &pt, &pos) == SUCCESS; 
     852                zend_hash_internal_pointer_reset_ex(arr_hash, &pos);
     853                zend_hash_get_current_data_ex(arr_hash, (void**) &pt, &pos) == SUCCESS;
    843854                zend_hash_move_forward_ex(arr_hash, &pos)
    844855        ) {
    845856                if (
    846                         Z_TYPE_P(*pt) == IS_ARRAY 
     857                        Z_TYPE_P(*pt) == IS_ARRAY
    847858                        && (zend_hash_index_find(Z_ARRVAL_P(*pt), 0, (void**) &x) != FAILURE)
    848859                        && (zend_hash_index_find(Z_ARRVAL_P(*pt), 1, (void**) &y) != FAILURE)
     
    11761187        char const * const *list = caca_get_dither_antialias_list(dither);
    11771188        int i;
    1178         array_init(return_value);       
     1189        array_init(return_value);
    11791190        for(i = 0; list[i]; i += 1)
    11801191                add_next_index_string(return_value, (char*) list[i], 1);
     
    12131224        char const * const *list = caca_get_dither_antialias_list(dither);
    12141225        int i;
    1215         array_init(return_value);       
     1226        array_init(return_value);
    12161227        for(i = 0; list[i]; i += 2)
    12171228                add_assoc_string(return_value, (char*) list[i], (char*) list[i + 1], 1);
     
    12501261        char const * const *list = caca_get_dither_charset_list(dither);
    12511262        int i;
    1252         array_init(return_value);       
     1263        array_init(return_value);
    12531264        for(i = 0; list[i]; i += 2)
    12541265                add_assoc_string(return_value, (char*) list[i], (char*) list[i + 1], 1);
     
    12871298        char const * const *list = caca_get_dither_algorithm_list(dither);
    12881299        int i;
    1289         array_init(return_value);       
     1300        array_init(return_value);
    12901301        for(i = 0; list[i]; i += 2)
    12911302                add_assoc_string(return_value, (char*) list[i], (char*) list[i + 1], 1);
     
    13721383        char const * const *list = caca_get_font_list();
    13731384        int i;
    1374         array_init(return_value);       
     1385        array_init(return_value);
    13751386        for(i = 0; list[i]; i += 1)
    13761387                add_next_index_string(return_value, (char*) list[i], 1);
     
    14081419
    14091420        int i;
    1410         array_init(return_value);       
     1421        array_init(return_value);
    14111422        for(i = 0; list[i]; i += 1)
    14121423                add_next_index_long(return_value, list[i]);
     
    14401451                for (j = 0; j < img->sx; j++) {
    14411452                        uint8_t *src = buffer + i * pitch + j * 4;
    1442                         img->tpixels[i][j] = *(src + 3) | (*(src + 2) << 8) | (*(src + 1) << 16) | ((*(src + 0) & 0xfe) << 23);
     1453                        img->tpixels[i][j] = *(src + 3) | (*(src + 2) << 8) | (*(src + 1) << 16) | (((127 - *(src + 0)) & 0xfe) << 23);
    14431454                }
    14441455        }
    1445        
     1456
    14461457        free(buffer);
    14471458        RETURN_TRUE;
     
    15411552        caca_file_read(file, buffer, len);
    15421553
    1543         RETURN_STRINGL(buffer, len, 1); 
     1554        RETURN_STRINGL(buffer, len, 1);
    15441555}
    15451556
     
    15761587                RETURN_FALSE;
    15771588        }
    1578         RETURN_STRINGL(result, len, 1); 
     1589        RETURN_STRINGL(result, len, 1);
    15791590}
    15801591
     
    16211632        char const * const *list = caca_get_import_list();
    16221633        int i;
    1623         array_init(return_value);       
     1634        array_init(return_value);
    16241635        for(i = 0; list[i]; i += 2)
    16251636                add_assoc_string(return_value, (char*) list[i], (char*) list[i + 1], 1);
     
    16461657        free(buffer);
    16471658
    1648         RETURN_STRINGL((char*) copy, len, 0); 
     1659        RETURN_STRINGL((char*) copy, len, 0);
    16491660}
    16501661
     
    16551666        char const * const *list = caca_get_export_list();
    16561667        int i;
    1657         array_init(return_value);       
     1668        array_init(return_value);
    16581669        for(i = 0; list[i]; i += 2)
    16591670                add_assoc_string(return_value, (char*) list[i], (char*) list[i + 1], 1);
     
    16941705        char const * const *list = caca_get_display_driver_list();
    16951706        int i;
    1696         array_init(return_value);       
     1707        array_init(return_value);
    16971708        for(i = 0; list[i]; i += 2)
    16981709                add_assoc_string(return_value, (char*) list[i], (char*) list[i + 1], 1);
     
    18211832
    18221833        if (caca_get_event_type(event) == CACA_EVENT_NONE) {
    1823                 efree(event);   
     1834                efree(event);
    18241835                RETURN_FALSE;
    18251836        }
Note: See TracChangeset for help on using the changeset viewer.