From a0576e2a50547352329552f5417b499a2b5b54eb Mon Sep 17 00:00:00 2001 From: EvilSpirit Date: Mon, 22 Feb 2016 01:07:58 +0600 Subject: [PATCH] Allow changing text size for default styles. This is especially useful for High-DPI displays on non-OS X. --- src/drawconstraint.cpp | 36 +++++++++++++++--------------------- src/sketch.h | 1 + src/style.cpp | 15 +++++++++------ 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/drawconstraint.cpp b/src/drawconstraint.cpp index e689ecad..1ceb37d8 100644 --- a/src/drawconstraint.cpp +++ b/src/drawconstraint.cpp @@ -10,21 +10,13 @@ void Constraint::LineDrawOrGetDistance(Vector a, Vector b) { if(dogd.drawing) { - // Draw comments in the specified style, but everything else in the - // default style for constraints. - hStyle hs; - if(type == COMMENT && disp.style.v) { - hs = disp.style; - } else { - hs.v = Style::CONSTRAINT; - } + hStyle hs = disp.style; + if(hs.v == 0) hs.v = Style::CONSTRAINT; if(dogd.sel) { dogd.sel->AddEdge(a, b, hs.v); } else { - // The only constraints with styles should be comments, so don't - // check otherwise, save looking up the styles constantly. - if(type == COMMENT && Style::Width(hs) >= 3.0) { + if(Style::Width(hs) >= 3.0) { ssglFatLine(a, b, Style::Width(hs) / SS.GW.scale); } else { glBegin(GL_LINE_STRIP); @@ -85,12 +77,9 @@ std::string Constraint::Label(void) { } void Constraint::DoLabel(Vector ref, Vector *labelPos, Vector gr, Vector gu) { - double th; - if(type == COMMENT) { - th = Style::TextHeight(disp.style); - } else { - th = Style::DefaultTextHeight(); - } + hStyle hs = disp.style; + if(hs.v == 0) hs.v = Style::CONSTRAINT; + double th = Style::TextHeight(hs); std::string s = Label(); double swidth = ssglStrWidth(s, th), @@ -159,13 +148,16 @@ void Constraint::DoProjectedPoint(Vector *r) { // depending whether that extension was from A or from B. //----------------------------------------------------------------------------- int Constraint::DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b) { + hStyle hs = disp.style; + if(hs.v == 0) hs.v = Style::CONSTRAINT; + double th = Style::TextHeight(hs); Vector gu = SS.GW.projUp.WithMagnitude(1), gr = SS.GW.projRight.WithMagnitude(1); double pixels = 1.0 / SS.GW.scale; std::string s = Label(); - double swidth = ssglStrWidth(s, Style::DefaultTextHeight()) + 4*pixels, - sheight = ssglStrHeight(Style::DefaultTextHeight()) + 8*pixels; + double swidth = ssglStrWidth(s, th) + 4*pixels, + sheight = ssglStrHeight(th) + 8*pixels; struct { Vector n; @@ -1077,9 +1069,11 @@ s: void Constraint::Draw(void) { dogd.drawing = true; dogd.sel = NULL; + hStyle hs = disp.style; + if(hs.v == 0) hs.v = Style::CONSTRAINT; - ssglLineWidth(Style::Width(Style::CONSTRAINT)); - ssglColorRGB(Style::Color(Style::CONSTRAINT)); + ssglLineWidth(Style::Width(hs)); + ssglColorRGB(Style::Color(hs)); DrawOrGetDistance(NULL); } diff --git a/src/sketch.h b/src/sketch.h index 17d38010..a6bdd42c 100644 --- a/src/sketch.h +++ b/src/sketch.h @@ -787,6 +787,7 @@ public: static std::string CnfColor(const std::string &prefix); static std::string CnfWidth(const std::string &prefix); + static std::string CnfTextHeight(const std::string &prefix); static std::string CnfPrefixToName(const std::string &prefix); static void CreateAllDefaultStyles(void); diff --git a/src/style.cpp b/src/style.cpp index 48a52a70..1bfd2cb8 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -33,6 +33,9 @@ std::string Style::CnfColor(const std::string &prefix) { std::string Style::CnfWidth(const std::string &prefix) { return "Style_" + prefix + "_Width"; } +std::string Style::CnfTextHeight(const std::string &prefix) { + return "Style_" + prefix + "_TextHeight"; +} std::string Style::CnfPrefixToName(const std::string &prefix) { std::string name = "#def-"; @@ -83,7 +86,7 @@ void Style::FillDefaultStyle(Style *s, const Default *d) { s->color = CnfThawColor(d->color, CnfColor(d->cnfPrefix)); s->width = CnfThawFloat((float)(d->width), CnfWidth(d->cnfPrefix)); s->widthAs = UNITS_AS_PIXELS; - s->textHeight = DEFAULT_TEXT_HEIGHT; + s->textHeight = CnfThawFloat(DEFAULT_TEXT_HEIGHT, CnfTextHeight(d->cnfPrefix)); s->textHeightAs = UNITS_AS_PIXELS; s->textOrigin = 0; s->textAngle = 0; @@ -125,6 +128,7 @@ void Style::FreezeDefaultStyles(void) { for(d = &(Defaults[0]); d->h.v; d++) { CnfFreezeColor(Color(d->h), CnfColor(d->cnfPrefix)); CnfFreezeFloat((float)Width(d->h), CnfWidth(d->cnfPrefix)); + CnfFreezeFloat((float)TextHeight(d->h), CnfTextHeight(d->cnfPrefix)); } } @@ -810,7 +814,7 @@ void TextWindow::ShowStyleInfo(void) { if(s->h.v < Style::FIRST_CUSTOM) { Printf(false," %Ftin units of %Fdpixels%E"); } else { - Printf(false," %Ftin units of %Fd" + Printf(false,"%Ba %Ftin units of %Fd" "%D%f%LW%s pixels%E " "%D%f%Lw%s %s", s->h.v, &ScreenChangeStyleYesNo, @@ -877,19 +881,18 @@ void TextWindow::ShowStyleInfo(void) { // The text height, and its units Printf(false, ""); - Printf(false, "%Ft text comment style%E"); + Printf(false, "%Ft text style%E"); - const char *chng = (s->h.v < Style::FIRST_CUSTOM) ? "" : "[change]"; if(s->textHeightAs == Style::UNITS_AS_PIXELS) { Printf(false, "%Ba %Ftheight %E%@ %D%f%Lt%Fl%s%E", s->textHeight, s->h.v, &ScreenChangeStyleMetric, - chng); + "[change]"); } else { Printf(false, "%Ba %Ftheight %E%s %D%f%Lt%Fl%s%E", SS.MmToString(s->textHeight).c_str(), s->h.v, &ScreenChangeStyleMetric, - chng); + "[change]"); } bool textHeightpx = (s->textHeightAs == Style::UNITS_AS_PIXELS);