int get_ot_math_kern(int f, int g, int sf, int sg, int cmd, int shift) { int rval = 0; if (fontarea[f] == OTGR_FONT_FLAG) { XeTeXFontInst* font = (XeTeXFontInst*)getFont((XeTeXLayoutEngine)fontlayoutengine[f]); int kern = 0, skern = 0; float corr_height_top = 0.0, corr_height_bot = 0.0; shift = Fix2D(shift); if (cmd == sup_cmd) { // superscript corr_height_top = font->pointsToUnits(glyph_height(f, g)); corr_height_bot = -font->pointsToUnits(glyph_depth(sf, sg) + shift); kern = getMathKernAt(f, g, topRight, corr_height_top); skern = getMathKernAt(sf, sg, bottomLeft, corr_height_top); rval = kern + skern; kern = getMathKernAt(f, g, topRight, corr_height_bot); skern = getMathKernAt(sf, sg, bottomLeft, corr_height_bot); if ((kern + skern) < rval) rval = kern + skern; } else if (cmd == sub_cmd) { // subscript corr_height_top = font->pointsToUnits(glyph_height(sf, sg) - shift); corr_height_bot = -font->pointsToUnits(glyph_depth(f, g)); kern = getMathKernAt(f, g, bottomRight, corr_height_top); skern = getMathKernAt(sf, sg, topLeft, corr_height_top); rval = kern + skern; kern = getMathKernAt(f, g, bottomRight, corr_height_bot); skern = getMathKernAt(sf, sg, topLeft, corr_height_bot); if ((kern + skern) < rval) rval = kern + skern; } else { assert(0); // we should not reach here } rval = D2Fix(font->unitsToPoints(rval)); } return rval; }
static int gtk_get_button_size (struct frame *f, Lisp_Object window, struct toolbar_button *tb, int vert, int pos) { int shadow_thickness = 2; int size; if (tb->blank) { if (!NILP (tb->down_glyph)) size = XINT (tb->down_glyph); else size = DEFAULT_TOOLBAR_BLANK_SIZE; } else { struct window *w = XWINDOW (window); Lisp_Object glyph = get_toolbar_button_glyph (w, tb); /* Unless, of course, the user has done something stupid like change the glyph out from under us. Use a blank placeholder in that case. */ if (NILP (glyph)) return XINT (f->toolbar_size[pos]); if (vert) size = glyph_height (glyph, window); else size = glyph_width (glyph, window); } if (!size) { /* If the glyph doesn't have a size we'll insert a blank placeholder instead. */ return XINT (f->toolbar_size[pos]); } size += shadow_thickness * 2; return (size); }