コード例 #1
0
ファイル: fontbmp.c プロジェクト: sesc4mt/mvcdecoder
ALLEGRO_FONT *_al_load_bitmap_font(const char *fname, int size, int flags)
{
   ALLEGRO_BITMAP *import_bmp;
   ALLEGRO_FONT *f;
   ALLEGRO_STATE backup;
   int range[2];
   ASSERT(fname);

   (void)size;
   (void)flags;

   al_store_state(&backup, ALLEGRO_STATE_NEW_BITMAP_PARAMETERS);
   al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
   al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ANY_WITH_ALPHA);
   import_bmp = al_load_bitmap(fname);
   al_restore_state(&backup);

   if (!import_bmp) 
     return NULL;

   /* We assume a single unicode range, starting at the space
    * character.
    */
   range[0] = 32;
   range[1] = 32 + bitmap_font_count(import_bmp) - 1;

   f = al_grab_font_from_bitmap(import_bmp, 1, range);

   al_destroy_bitmap(import_bmp);

   return f;
}
コード例 #2
0
ファイル: Font.hpp プロジェクト: SpaceManiac/ALX
 /**
     Creates a font from a bitmap.
     @param bmp bitmap.
     @param ranges ranges.
     @return true on success.
  */
 bool grab(const Bitmap &bmp, const std::vector<std::tuple<int, int>> &ranges) {
     std::vector<int> rangeBuffer;
     for(auto t : ranges) {
         rangeBuffer.push_back(std::get<0>(t));
         rangeBuffer.push_back(std::get<1>(t));
     }
     reset(al_grab_font_from_bitmap(bmp.get(), rangeBuffer.size(), rangeBuffer.data()), al_destroy_font);
     return (bool)(*this);
 }
コード例 #3
0
ファイル: Font.cpp プロジェクト: ArekX/RAGE
		void Font::get_font_from_bitmap(ALLEGRO_BITMAP *bmp, int num_ranges, int *ranges)
		{
			RAGE_CHECK_DISPOSED(disposed);

			font = al_grab_font_from_bitmap(bmp, num_ranges, ranges);

			if (font == nullptr)
			{
				rb_raise(rb_eException, RAGE_ERROR_FONT_LOAD_FAIL, RAGE_BITMAP);
				return;
			}
		}
コード例 #4
0
void init_fonts() {
    int font_ranges[] = {
        0x0020, 0x007E, // ASCII
        0x00A0, 0x00A1, // Non-breaking space and inverted !
        0x00BF, 0x00FF, // Inverted ? and European vowels and such
    };
    int counter_font_ranges[] = {
        0x002D, 0x002D, // Dash
        0x002F, 0x0039, // Slash and numbers
        0x0078, 0x0078, // x
    };
    int value_font_ranges[] = {
        0x0024, 0x0024, // Dollar sign
        0x002D, 0x002D, // Dash
        0x0030, 0x0039, // Numbers
    };
    
    // We can't load the font directly because we want to set the ranges.
    // So we load into a bitmap first.
    ALLEGRO_BITMAP* temp_font_bitmap = load_bmp("Font.png");
    if(temp_font_bitmap) font = al_grab_font_from_bitmap(temp_font_bitmap, 3, font_ranges);
    al_destroy_bitmap(temp_font_bitmap);
    
    temp_font_bitmap = load_bmp("Area_name_font.png");
    if(temp_font_bitmap) font_area_name = al_grab_font_from_bitmap(temp_font_bitmap, 3, font_ranges);
    al_destroy_bitmap(temp_font_bitmap);
    
    temp_font_bitmap = load_bmp("Counter_font.png");
    if(temp_font_bitmap) font_counter = al_grab_font_from_bitmap(temp_font_bitmap, 3, counter_font_ranges);
    al_destroy_bitmap(temp_font_bitmap);
    
    temp_font_bitmap = load_bmp("Value_font.png");
    if(temp_font_bitmap) font_value = al_grab_font_from_bitmap(temp_font_bitmap, 3, value_font_ranges);
    al_destroy_bitmap(temp_font_bitmap);
    
    if(font) font_h = al_get_font_line_height(font);
    if(font_counter) font_counter_h = al_get_font_line_height(font_counter);
}
コード例 #5
0
ファイル: bitmaps.c プロジェクト: JustAnotherG/Watson
void create_font_symbols(Board *b){
    ALLEGRO_BITMAP *bmp = NULL, *currbuf = al_get_target_bitmap();
    ALLEGRO_FONT *newfont=NULL;
    int i, j;
    int texth = al_get_font_line_height(b->text_font);
    int bitmap_w, bitmap_h;
    int bw = al_get_bitmap_width(b->clue_unit_bmp[0][0]);
    int bh = al_get_bitmap_height(b->clue_unit_bmp[0][0]);
    int nbw, nbh;
    int range[2];
    al_set_target_bitmap(NULL);
    nbw = bw*(float)texth/bh;
    nbh = texth;
    
    bitmap_w = 4 + b->n*(2+nbw); // extra column for buttons, n>=4
    bitmap_h = 4 + (b->h+1)*(2+nbh);
    
    bmp = al_create_bitmap(bitmap_w, bitmap_h);
    al_set_target_bitmap(bmp);
    al_clear_to_color(NULL_COLOR);
    for(j=0; j<b->h; j++){
        for(i=0; i<b->n; i++){
        // the rectangle is to guarantee the right height for al_grab_font
            al_draw_scaled_bitmap(b->clue_unit_bmp[j][i], 0, 0, bw, bh, 2+i*(2+nbw), 2+ j*(2+nbh), nbw, nbh, 0);
            al_draw_rectangle( 2+i*(2+nbw)+0.5, 2+ j*(2+nbh) + 0.5,  2+i*(2+nbw) + nbw -0.5, 2+j*(2+nbh) + nbh- 0.5, al_map_rgba(1,1,1,1),1);
        }
    }
    
 //    draw the buttons. now j= b->h
    for(i=0;i<b->n;i++){
        bw=al_get_bitmap_width(b->button_bmp[i%4]);
        bh=al_get_bitmap_height(b->button_bmp[i%4]);
        al_draw_scaled_bitmap(b->button_bmp[i%4], 0, 0, bw, bh, 2+i*(2+nbw), 2+ j*(2+nbh), nbw, nbh, 0);
        al_draw_rectangle( 2+i*(2+nbw)+0.5, 2+ j*(2+nbh) + 0.5,  2+i*(2+nbw) + nbw -0.5, 2+j*(2+nbh) + nbh- 0.5, al_map_rgba(1,1,1,1),1);
    }
    
    
    range[0] = BF_CODEPOINT_START;
    range[1] = BF_CODEPOINT_START + b->n*b->h-1 + 4;
    newfont = al_grab_font_from_bitmap(bmp, 1, range);
    al_set_fallback_font(b->text_font, newfont);
    al_set_target_bitmap(currbuf);
    al_destroy_bitmap(bmp);
}
コード例 #6
0
ファイル: ex_ttf.c プロジェクト: HaoDongGuo/allegro5
int main(int argc, char **argv)
{
    ALLEGRO_DISPLAY *display;
    ALLEGRO_TIMER *timer;
    ALLEGRO_EVENT_QUEUE *queue;
    int redraw = 0;
    double t = 0;

    if (!al_init()) {
        abort_example("Could not init Allegro.\n");
    }

    open_log_monospace();

    al_init_primitives_addon();
    al_install_mouse();
    al_init_font_addon();
    al_init_ttf_addon();
    al_init_image_addon();
    init_platform_specific();

#ifdef ALLEGRO_IPHONE
    al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW);
#endif
    display = al_create_display(640, 480);
    if (!display) {
        abort_example("Could not create display.\n");
    }
    al_install_keyboard();

    if (argc >= 2) {
        font_file = argv[1];
    }

    ex.f1 = al_load_font(font_file, 48, 0);
    ex.f2 = al_load_font(font_file, 48, ALLEGRO_TTF_NO_KERNING);
    ex.f3 = al_load_font(font_file, 12, 0);
    /* Specifying negative values means we specify the glyph height
     * in pixels, not the usual font size.
     */
    ex.f4 = al_load_font(font_file, -140, 0);
    ex.f5 = al_load_font(font_file, 12, ALLEGRO_TTF_MONOCHROME);

    {
        int ranges[] = {0x1F40A, 0x1F40A};
        ALLEGRO_BITMAP *icon = al_load_bitmap("data/icon.png");
		if (!icon) {
			abort_example("Couldn't load data/icon.png.\n");
		}
        ALLEGRO_BITMAP *glyph = al_create_bitmap(50, 50);
        al_set_target_bitmap(glyph);
        al_clear_to_color(al_map_rgba_f(0, 0, 0, 0));
        al_draw_rectangle(0.5, 0.5, 49.5, 49.5, al_map_rgb_f(1, 1, 0),
         1);
        al_draw_bitmap(icon, 1, 1, 0);
        al_set_target_backbuffer(display);
        ex.f_alex = al_grab_font_from_bitmap(glyph, 1, ranges);
    }

    if (!ex.f1 || !ex.f2 || !ex.f3 || !ex.f4 || !ex.f_alex) {
        abort_example("Could not load font: %s\n", font_file);
    }

    al_set_fallback_font(ex.f3, ex.f_alex);

    ex.ranges_count = al_get_font_ranges(ex.f1, 0, NULL);
    print_ranges(ex.f1);

    ex.config = al_load_config_file("data/ex_ttf.ini");
    if (!ex.config) {
        abort_example("Could not data/ex_ttf.ini\n");
    }

    timer = al_create_timer(1.0 / 60);

    queue = al_create_event_queue();
    al_register_event_source(queue, al_get_keyboard_event_source());
    al_register_event_source(queue, al_get_display_event_source(display));
    al_register_event_source(queue, al_get_timer_event_source(timer));

    al_start_timer(timer);
    while (true) {
        ALLEGRO_EVENT event;
        al_wait_for_event(queue, &event);
        if (event.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            break;
        if (event.type == ALLEGRO_EVENT_KEY_DOWN &&
                event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
            break;
        }
        if (event.type == ALLEGRO_EVENT_TIMER)
            redraw++;

        while (redraw > 0 && al_is_event_queue_empty(queue)) {
            double dt;
            redraw--;

            dt = al_get_time();
            render();
            dt = al_get_time() - dt;

            t = 0.99 * t + 0.01 * dt;

            ex.fps = 1.0 / t;
            al_flip_display();
        }
    }

    al_destroy_font(ex.f1);
    al_destroy_font(ex.f2);
    al_destroy_font(ex.f3);
    al_destroy_font(ex.f4);
    al_destroy_font(ex.f5);
    al_destroy_config(ex.config);

    close_log(false);

    return 0;
}