⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gralleg.c

📁 freetype库的应用demo,里面包含freetype的很多实例
💻 C
字号:
/******************************************************************* * *  ft2demos/graph/allegro/gralleg.c * *  Allegro driver for MiGS (minimalist graphics subsystem). Allegro *  (Allegro Low LEvel Gaming ROutines) is a library for sound, *  graphics, timers, etc., and is available on 32-bit DOS, Windows, *  UNIX (X11, DGA, DGA2), Linux (svgalib, framebuffer) and BeOS. * *    http://www.talula.demon.co.uk/allegro/ *    http://sourceforge.net/projects/alleg/ * ******************************************************************//* FT graphics subsystem */#include "grobjs.h"#include "grdevice.h"/* Allegro header */#include <allegro.h>static void set_graypalette(){    PALETTE pal;    int i = 0;    for(; i < 256; i++) {        pal[i].r = i >> 2;        pal[i].g = i >> 2;        pal[i].b = i >> 2;    }    set_palette(pal);}static int almodes[] = {    32,    24,    16,    15,    8,    0};static int gray[256];static int init_device(void){    int* almode = almodes;    if(allegro_init()) return -1;    if(install_keyboard()) return -1;    while(*almode) {        set_color_depth(*almode);        if(*almode == 8) set_graypalette();        if(set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) == 0) {            int i = 0;            for(; i < 256; i++) gray[i] = makecol(i, i, i);            clear(screen);            return 0;        }        almode++;    }    return -1;}static void done_device(void){    allegro_exit();}static void alset_title(grSurface* surface, const char* title_string){    set_window_title(title_string);}static void alrefresh_rect(grSurface* surface, int x, int y, int width, int height){    unsigned char* bufptr = surface->bitmap.buffer;    int cx = 0, cy = 0;    switch(surface->bitmap.mode) {        case gr_pixel_mode_mono:            for(; cy < height; cy++) {                for(cx = 0; cx < width; cx++) {                    putpixel(screen, cx + x, cy + y, (*bufptr++ ? gray[255] : gray[0]));                }            }            break;        case gr_pixel_mode_gray:            for(; cy < height; cy++) {                for(cx = 0; cx < width; cx++) {                    putpixel(screen, cx + x, cy + y, gray[*bufptr++]);                }            }            break;        default:            break;    }}static void aldone(grSurface* surface){    grDoneBitmap(&(surface->bitmap));}static int key_translator[] = {    KEY_F1, grKeyF1,    KEY_F2, grKeyF2,    KEY_F3, grKeyF3,    KEY_F4, grKeyF4,    KEY_F5, grKeyF5,    KEY_F6, grKeyF6,    KEY_F7, grKeyF7,    KEY_F8, grKeyF8,    KEY_F9, grKeyF9,    KEY_F10, grKeyF10,    KEY_F11, grKeyF11,    KEY_F12, grKeyF12,    KEY_LEFT, grKeyLeft,    KEY_RIGHT, grKeyRight,    KEY_UP, grKeyUp,    KEY_DOWN, grKeyDown,    KEY_INSERT, grKeyIns,    KEY_DEL, grKeyDel,    KEY_HOME, grKeyHome,    KEY_END, grKeyEnd,    KEY_PGUP, grKeyPageUp,    KEY_PGDN, grKeyPageDown,    KEY_ESC, grKeyEsc,    KEY_TAB, grKeyTab,    KEY_BACKSPACE, grKeyBackSpace,    KEY_ENTER, grKeyReturn,    0, 0};static int translateKey(int scancode){    int* trans = key_translator;    while(*trans) {        if(scancode == *trans++) {            return *trans;        }        trans++;    }    return 0;}static int allisten_event(grSurface* surface, int event_mode, grEvent* event){    int ch = 0, ascii = 0, scancode = 0, shifts = 0;    event->type = gr_event_key;    while(1) {        ch = readkey();        shifts = 0;        if(key_shifts & KB_SHIFT_FLAG) shifts |= grKeyShift;        if(key_shifts & KB_CTRL_FLAG) shifts |= grKeyCtrl;        if(key_shifts & KB_ALT_FLAG) shifts |= grKeyAlt;        ascii = ch & 0xFF;        scancode = ch >> 8;        if(ascii > 31 && ascii < 127) {            event->key = ascii | shifts;            return 1;        }        if( (ch = translateKey(scancode)) ) {            event->key = ch | shifts;            return 1;        }    }    return 0;}static int init_surface(grSurface* surface, grBitmap* bitmap){    if(grNewBitmap(bitmap->mode, bitmap->grays, bitmap->width, bitmap->rows, bitmap)) return 0;    surface->device = &gr_alleg_device;    surface->bitmap = *bitmap;    surface->refresh = 0;    surface->owner = 0;    surface->saturation = 0;    surface->blit_mono = 0;    surface->refresh_rect = alrefresh_rect;    surface->set_title = alset_title;    surface->listen_event = allisten_event;    surface->done = aldone;    return 1;}grDevice gr_alleg_device ={    sizeof(grSurface),    "Allegro",    init_device,    done_device,    init_surface,    0,    0};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -