Exemplo n.º 1
0
int mlua_sizeof_font(lua_State* L)
{
	assert(L);

	Font* font = pop_font(L, 1);
	const char* text = luaL_checkstring(L, 2);
	lua_Number w, h;
	font_get_textsize(font, text, &w, &h, -1);
	lua_pushnumber(L, w);
	lua_pushnumber(L, h);
	return 2;
}
Exemplo n.º 2
0
void update(objectmachine_t *obj, player_t **team, int team_size, brick_list_t *brick_list, item_list_t *item_list, object_list_t *object_list)
{
    objectdecorator_t *dec = (objectdecorator_t*)obj;
    objectmachine_t *decorated_machine = dec->decorated_machine;
    objectdecorator_textout_t *me = (objectdecorator_textout_t*)obj;
    object_t *object = obj->get_object_instance(obj);
    symboltable_t *st = objectvm_get_symbol_table(object->vm);
    char *processed_text;
    int start, length;
    float wpx;
    v2d_t pos;

    /* 문자열의 범위를 계산한다 ( clip()할 필요가 없다 ) */
    start = (int)expression_evaluate(me->index_of_first_char);
    length = (int)expression_evaluate(me->length);

    /* 글꼴 구성 */
    font_use_substring(me->fnt, start, length);
    font_set_width(me->fnt, (int)expression_evaluate(me->max_width));

    /* 글꼴 텍스트 */
    processed_text = nanocalc_interpolate_string(me->text, st);
    font_set_text(me->fnt, "%s", processed_text);
    free(processed_text);

    /* symbol table tricks */
    symboltable_set(st, "$_STRLEN", tagged_strlen(font_get_text(me->fnt))); /* $_STRLEN의 텍스트 길이를 저장한다. */

    /* 글꼴 위치 */
    pos = v2d_new(expression_evaluate(me->xpos), expression_evaluate(me->ypos));
    wpx = font_get_textsize(me->fnt).x;
    switch(me->style) {
    case TEXTOUT_LEFT: break;
    case TEXTOUT_CENTRE: pos.x -= wpx/2; break;
    case TEXTOUT_RIGHT: pos.x -= wpx; break;
    }
    font_set_position(me->fnt, v2d_add(object->actor->position, pos));

    /* done! */
    decorated_machine->update(decorated_machine, team, team_size, brick_list, item_list, object_list);
}