ColorChanger::ColorChanger(FontInfo & font, ColorCode color, bool really_change_color) : Changer<FontInfo, ColorCode>(font, font.color()), change_(really_change_color) { if (change_) { font.setColor(color); } }
void InsetVSpace::draw(PainterInfo & pi, int x, int y) const { Dimension const dim = dimension(*pi.base.bv); x += ADD_TO_VSPACE_WIDTH; int const start = y - dim.asc; int const end = y + dim.des; // y-values for top arrow int ty1, ty2; // y-values for bottom arrow int by1, by2; if (space_.kind() == VSpace::VFILL) { ty1 = ty2 = start; by1 = by2 = end; } else { // adding or removing space bool const added = space_.kind() != VSpace::LENGTH || space_.length().len().value() >= 0.0; ty1 = added ? (start + vspace_arrow_size) : start; ty2 = added ? start : (start + vspace_arrow_size); by1 = added ? (end - vspace_arrow_size) : end; by2 = added ? end : (end - vspace_arrow_size); } int const midx = x + vspace_arrow_size; int const rightx = midx + vspace_arrow_size; // first the string int w = 0; int a = 0; int d = 0; FontInfo font; font.setColor(Color_added_space); font.decSize(); font.decSize(); docstring const lab = label(); theFontMetrics(font).rectText(lab, w, a, d); pi.pain.rectText(x + 2 * vspace_arrow_size + 5, start + (end - start) / 2 + (a - d) / 2, lab, font, Color_none, Color_none); // top arrow pi.pain.line(x, ty1, midx, ty2, Color_added_space); pi.pain.line(midx, ty2, rightx, ty1, Color_added_space); // bottom arrow pi.pain.line(x, by1, midx, by2, Color_added_space); pi.pain.line(midx, by2, rightx, by1, Color_added_space); // joining line pi.pain.line(midx, ty2, midx, by2, Color_added_space); }
FontInfo InsetNote::getFont() const { FontInfo font = getLayout().font(); // FIXME: This hardcoded color is a hack! if (params_.type == InsetNoteParams::Greyedout && buffer().params().notefontcolor != lyx::rgbFromHexName("#cccccc")) { ColorCode c = lcolor.getFromLyXName("notefontcolor"); if (c != Color_none) font.setColor(c); } return font; }
void InsetMathBrace::draw(PainterInfo & pi, int x, int y) const { FontInfo font = pi.base.font; augmentFont(font, from_ascii("mathnormal")); font.setShape(UP_SHAPE); font.setColor(Color_latex); Dimension t = theFontMetrics(font).dimension('{'); pi.pain.text(x, y, '{', font); cell(0).draw(pi, x + t.wid, y); Dimension const & dim0 = cell(0).dimension(*pi.base.bv); pi.pain.text(x + t.wid + dim0.width(), y, '}', font); drawMarkers(pi, x, y); }
void RenderButton::draw(PainterInfo & pi, int x, int y) const { // Draw it as a box with the LaTeX text FontInfo font = sane_font; font.setColor(Color_command); font.decSize(); if (editable_) { pi.pain.buttonText(x + 1, y, text_, font, renderState()); } else { pi.pain.rectText(x + 1, y, text_, font, Color_commandbg, Color_commandframe); } }
void InsetSpecialChar::draw(PainterInfo & pi, int x, int y) const { FontInfo font = pi.base.font; switch (kind_) { case HYPHENATION: { font.setColor(Color_special); pi.pain.text(x, y, char_type('-'), font); break; } case ALLOWBREAK: { // A small vertical line int const asc = theFontMetrics(pi.base.font).xHeight(); int const desc = theFontMetrics(pi.base.font).descent('g'); int const x0 = x; // x + 1; // FIXME: incline, int const x1 = x; // x - 1; // similar to LibreOffice? int const y0 = y + desc; int const y1 = y - asc / 3; pi.pain.line(x0, y1, x1, y0, Color_special); break; } case LIGATURE_BREAK: { font.setColor(Color_special); pi.pain.text(x, y, char_type('|'), font); break; } case END_OF_SENTENCE: { font.setColor(Color_special); pi.pain.text(x, y, char_type('.'), font); break; } case LDOTS: { font.setColor(Color_special); string ell = ". . . "; docstring dell(ell.begin(), ell.end()); pi.pain.text(x, y, dell, font); break; } case MENU_SEPARATOR: { frontend::FontMetrics const & fm = theFontMetrics(font); // There is a \thinspace on each side of the triangle x += fm.em() / 6; // ▹ U+25B9 WHITE RIGHT-POINTING SMALL TRIANGLE // ◃ U+25C3 WHITE LEFT-POINTING SMALL TRIANGLE char_type const c = pi.ltr_pos ? 0x25B9 : 0x25C3; font.setColor(Color_special); pi.pain.text(x, y, c, font); break; } case SLASH: { font.setColor(Color_special); pi.pain.text(x, y, char_type('/'), font); break; } case NOBREAKDASH: { font.setColor(Color_latex); pi.pain.text(x, y, char_type('-'), font); break; } case PHRASE_LYX: case PHRASE_TEX: case PHRASE_LATEX2E: case PHRASE_LATEX: drawLogo(pi, x, y, kind_); break; } }
void InsetSpecialChar::draw(PainterInfo & pi, int x, int y) const { FontInfo font = pi.base.font; switch (kind_) { case HYPHENATION: { font.setColor(Color_special); pi.pain.text(x, y, char_type('-'), font); break; } case LIGATURE_BREAK: { font.setColor(Color_special); pi.pain.text(x, y, char_type('|'), font); break; } case END_OF_SENTENCE: { font.setColor(Color_special); pi.pain.text(x, y, char_type('.'), font); break; } case LDOTS: { font.setColor(Color_special); string ell = ". . . "; docstring dell(ell.begin(), ell.end()); pi.pain.text(x, y, dell, font); break; } case MENU_SEPARATOR: { frontend::FontMetrics const & fm = theFontMetrics(font); // A triangle the width and height of an 'x' int w = fm.width(char_type('x')); int ox = fm.width(char_type(' ')) + x; int h = fm.ascent(char_type('x')); int xp[4], yp[4]; xp[0] = ox; yp[0] = y; xp[1] = ox; yp[1] = y - h; xp[2] = ox + w; yp[2] = y - h/2; xp[3] = ox; yp[3] = y; pi.pain.lines(xp, yp, 4, Color_special); break; } case SLASH: { font.setColor(Color_special); pi.pain.text(x, y, char_type('/'), font); break; } case NOBREAKDASH: { font.setColor(Color_latex); pi.pain.text(x, y, char_type('-'), font); break; } } }