/** * @brief Renders a text widget. * * @param txt Text widget to render. * @param bx Base X position. * @param by Base Y position. */ static void txt_render( Widget* txt, double bx, double by ) { /* Must have text to display. */ if (txt->dat.txt.text==NULL) return; if (txt->dat.txt.centered) gl_printMidRaw( txt->dat.txt.font, txt->w, bx + (double)SCREEN_W/2. + txt->x, by + (double)SCREEN_H/2. + txt->y, txt->dat.txt.colour, txt->dat.txt.text ); else gl_printTextRaw( txt->dat.txt.font, txt->w, txt->h, bx + (double)SCREEN_W/2. + txt->x, by + (double)SCREEN_H/2. + txt->y, txt->dat.txt.colour, txt->dat.txt.text ); }
/** * @brief Prints a block of text that fits in the dimensions given. * * Positions are based on origin being top-left. * * @param ft_font Font to use (NULL defaults to gl_defFont). * @param width Maximum width to print to. * @param height Maximum height to print to. * @param bx X position to display text at. * @param by Y position to display text at. * @param c Colour to use (NULL defaults to white). * @param fmt Text to display formatted like printf. * @return 0 on success. * prints text with line breaks included to a maximum width and height preset */ int gl_printText( const glFont *ft_font, const int width, const int height, double bx, double by, const glColour* c, const char *fmt, ... ) { /*float h = ft_font->h / .63;*/ /* slightly increase fontsize */ char text[4096]; /* holds the string */ va_list ap; if (fmt == NULL) return -1; else { /* convert the symbols to text */ va_start(ap, fmt); vsnprintf(text, 4096, fmt, ap); va_end(ap); } return gl_printTextRaw( ft_font, width, height, bx, by, c, text ); }
/** * @brief Renders a input widget. * * @param inp Input widget to render. * @param bx Base X position. * @param by Base Y position. */ static void inp_render( Widget* inp, double bx, double by ) { double x, y, ty; char buf[ PATH_MAX ]; int w; int m; x = bx + inp->x; y = by + inp->y; /* main background */ toolkit_drawRect( x, y, inp->w, inp->h, &cWhite, NULL ); /* center vertically */ if (inp->dat.inp.oneline) ty = y - (inp->h - gl_smallFont.h)/2.; else { WARN("Multi-line input widgets unsupported atm."); return; } /* Draw text. */ gl_printTextRaw( inp->dat.inp.font, inp->w-10., inp->h, x+5., ty, &cBlack, &inp->dat.inp.input[ inp->dat.inp.view ] ); /* Draw cursor. */ if (wgt_isFlag( inp, WGT_FLAG_FOCUSED )) { m = MIN( inp->dat.inp.pos - inp->dat.inp.view, PATH_MAX-1 ); strncpy( buf, &inp->dat.inp.input[ inp->dat.inp.view ], m ); buf[ m ] = '\0'; w = gl_printWidthRaw( inp->dat.inp.font, buf ); toolkit_drawRect( x+5.+w, y + (inp->h - inp->dat.inp.font->h - 4.)/2., 1., inp->dat.inp.font->h + 4., &cBlack, &cBlack ); } /* inner outline */ toolkit_drawOutline( x, y, inp->w, inp->h, 0., toolkit_colLight, toolkit_col ); /* outter outline */ toolkit_drawOutline( x, y, inp->w, inp->h, 1., toolkit_colDark, NULL ); }
/** * @brief Prints a block of text on the screen. * * @usage gfx.printText( true, 100, 50, 50, 100, 100, col ) -- Displays a 100x100 block of text * * @luaparam small Whether or not to use a small font. * @luaparam str String to print. * @luaparam x X position to print at. * @luaparam y Y position to print at. * @luaparam w Width of the block of text. * @luaparam h Height of the block of text. * @luaparam col Colour to print text. * @luafunc printText( small, str, x, y, w, h, col ) */ static int gfxL_printText( lua_State *L ) { glFont *font; const char *str; int w, h; double x, y; LuaColour *lc; /* Parse parameters. */ font = lua_toboolean(L,1) ? &gl_smallFont : &gl_defFont; str = luaL_checkstring(L,2); x = luaL_checknumber(L,3); y = luaL_checknumber(L,4); w = luaL_checkinteger(L,5); h = luaL_checkinteger(L,6); lc = luaL_checkcolour(L,7); /* Render. */ gl_printTextRaw( font, w, h, x, y, &lc->col, str ); return 0; }
/** * @brief Draws an alt text. * * @param bx X position to draw at. * @param by Y position to draw at. * @param alt Text to draw. */ void toolkit_drawAltText( int bx, int by, const char *alt ) { double w, h; double x, y, o; glColour c; glColour c2; /* Get dimensions. */ w = 160.; h = gl_printHeightRaw( &gl_smallFont, w, alt ); /* One check to make bigger. */ if (h > 160.) { w = 200; h = gl_printHeightRaw( &gl_smallFont, w, alt ); } /* Choose position. */ x = bx + 10.; y = by - h - gl_smallFont.h - 10.; if (y < -SCREEN_H/2+10) { o = -(SCREEN_H/2 + y) + 10; y += o; } /* Set colours. */ c.r = cGrey80.r; c.g = cGrey80.g; c.b = cGrey80.b; c.a = 0.8; c2.r = cGrey30.r; c2.g = cGrey30.g; c2.b = cGrey30.b; c2.a = 0.7; toolkit_drawRect( x-1, y-5, w+6, h+6, &c2, NULL ); toolkit_drawRect( x-3, y-3, w+6, h+6, &c, NULL ); gl_printTextRaw( &gl_smallFont, w, h, x+SCREEN_W/2, y+SCREEN_H/2, &cBlack, alt ); }