예제 #1
0
		int LOBJECT_METHOD(getFontOutline, TTF_Font * font){
			int result = TTF_GetFontOutline(font);
			state.push_integer(result);
			return 1;
		}
예제 #2
0
파일: SDLFont.cpp 프로젝트: benzap/Kampf
//TTF_GetFontOutline
int SDLFont::getOutline() {
    return TTF_GetFontOutline(this->fontContext);
}
예제 #3
0
void draw_table(int x0, int y0)
{
    int i,w=0,h;
    SDL_Rect r, r2;
    Uint32 color[7];

    SDL_Color fg={0,0,0,255};
#if RENDER_MODE==1
    SDL_Color bg={255,255,255,255};
#endif
    color[0]=SDL_MapRGB(screen->format,255,0,0);
    color[1]=SDL_MapRGB(screen->format,255,128,0);
    color[2]=SDL_MapRGB(screen->format,255,255,0);
    color[3]=SDL_MapRGB(screen->format,0,0,0);
    color[4]=SDL_MapRGB(screen->format,0,255,0);
    color[5]=SDL_MapRGB(screen->format,0,0,255);
    color[6]=SDL_MapRGB(screen->format,128,0,128);

    /* detemine max font advance for this page */
    for(i=0;i<128;i++)
        if(w<gm[i].advance)
            w=gm[i].advance;

    h=TTF_FontLineSkip(font);

    for(i=0; i<17; i++)
    {
        /* draw max font advance grid (for this page) */
        r.x=x0+i*(w+SPACING)-SPACING/2-1;
        r.y=y0-SPACING/2-1;
        r.w=1;
        r.h=(h+SPACING)*8+1;
        SDL_FillRect(screen,&r,color[5]);
    }

    for(i=0; i<9; i++)
    {
        if(i<8)
        {
            /* draw font ascent line */
            r.x=x0-SPACING/2-1;
            r.y=y0+i*(h+SPACING)-SPACING/2+TTF_FontAscent(font);
            r.w=(w+SPACING)*16;
            printf("1111 x: %d y: %d w: %d \n", r.x, r.y, r.w);
            r.h=1;
            SDL_FillRect(screen,&r,color[3]);
            /* draw font height line */
            r.x=x0-SPACING/2-1;
            r.y=y0+i*(h+SPACING)-SPACING/2+TTF_FontHeight(font);
            r.w=(w+SPACING)*16;
            r.h=1;
            SDL_FillRect(screen,&r,color[2]);
        }
        /* draw max height grid */
        r.x=x0-SPACING/2-1;
        r.y=y0+i*(h+SPACING)-SPACING/2-1;
        r.w=(w+SPACING)*16;
        r.h=1;
        printf("222 x: %d y: %d w: %d \n", r.x, r.y, r.w);
        SDL_FillRect(screen,&r,color[5]);
    }

    r.x=x0;
    r.y=y0-h;
    for(i=0;i<128;i++)
    {
        /* relocate for next line... */
        if(!(i%16))
        {
            r.x=x0;
            r.y+=h+SPACING;
        }

        /* draw the bounding box */
#if RENDER_MODE==1
        r2.x=r.x+gm[i].minx-1;
        r2.y=r.y+TTF_FontAscent(font)-gm[i].maxy-1;
        r2.w=text[i]->w+2;
        r2.h=text[i]->h+2;
        SDL_FillRect(screen,&r2,color[4]);
#else
        r2.x=r.x+gm[i].minx-1;
        r2.y=r.y+TTF_FontAscent(font)-gm[i].maxy-1;
        r2.w=text[i]->w+2;
        r2.h=1;
        SDL_FillRect(screen,&r2,color[4]);
        r2.x=r.x+gm[i].minx-1;
        r2.y=r.y+TTF_FontAscent(font)-gm[i].maxy-1;
        r2.w=1;
        r2.h=text[i]->h+2;
        SDL_FillRect(screen,&r2,color[4]);
        r2.x=r.x+gm[i].minx-1;
        r2.y=r.y+TTF_FontAscent(font)-gm[i].maxy+text[i]->h;
        r2.w=text[i]->w+2;
        r2.h=1;
        SDL_FillRect(screen,&r2,color[4]);
        r2.x=r.x+gm[i].minx+text[i]->w;
        r2.y=r.y+TTF_FontAscent(font)-gm[i].maxy-1;
        r2.w=1;
        r2.h=text[i]->h+2;
        SDL_FillRect(screen,&r2,color[4]);
#endif

        /* draw advance line */
        r2.x=r.x+gm[i].advance;
        r2.w=1;
        r2.y=r.y;
        r2.h=h;
        SDL_FillRect(screen,&r2,color[0]);

        /* draw the glyph (from cache) */
        r2.x=r.x+gm[i].minx-TTF_GetFontOutline(font);
        r2.y=r.y+TTF_FontAscent(font)-gm[i].maxy-TTF_GetFontOutline(font);
        SDL_BlitSurface(text[i],0,screen,&r2);

        r.x+=w+SPACING;
    }
    r.x=x0-TTF_GetFontOutline(font);
    r.y+=h+SPACING-TTF_GetFontOutline(font);
    {
        /* pick a panagram... */
        const char *msg="Sphinx of black quartz, judge my vow!";
        /*"The quick brown fox jumps over the lazy dog";*/
        SDL_Surface *surf=
#if RENDER_MODE==0
            TTF_RenderText_Solid(font,msg,fg);
#elif RENDER_MODE==1
            TTF_RenderText_Shaded(font,msg,fg,bg);
#elif RENDER_MODE==2
            TTF_RenderText_Blended(font,msg,fg);
#endif
        if(surf)
        {
            SDL_BlitSurface(surf,0,screen,&r);
            SDL_FreeSurface(surf);
        }
    }
}
예제 #4
0
static mrb_value
mrb_sdl2_ttf_font_get_outline(mrb_state *mrb, mrb_value self)
{
  return mrb_fixnum_value(TTF_GetFontOutline(mrb_sdl2_font_get_ptr(mrb, self)));
}