From a7d00ae558afb7390f249db234a1e83c280365df Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Tue, 23 Jul 2024 17:18:40 +0200 Subject: [PATCH] Resize line sizes and widths dynamically in test/line_style_docs Resize the window to see the effect: line sizes increase with the box size and become wider depending on the box size. Minimal line width of the "wide" lines has been changed from 4 to 5, maximal width is now 9. Distinct widths are { 5, 7, 8, 9 }. Note: the default (thin) line width is now 1 rather than 0 since the default 0 may render badly. Screenshot in documentation has been updated. --- documentation/src/fl_line_style.png | Bin 15818 -> 20661 bytes test/line_style_docs.cxx | 88 +++++++++++++++++++--------- 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/documentation/src/fl_line_style.png b/documentation/src/fl_line_style.png index 2e0b29cdbc98cb934d14aec70e88bcf70eef968c..eab01492cdf8bc99c3394910bae8a9d08e72f8bc 100644 GIT binary patch literal 20661 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�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 BO{D+; diff --git a/test/line_style_docs.cxx b/test/line_style_docs.cxx index 650918474..5bf45fd42 100644 --- a/test/line_style_docs.cxx +++ b/test/line_style_docs.cxx @@ -14,6 +14,15 @@ // https://www.fltk.org/bugs.php // +// Notes to devs (and users): +// +// 1. Run this program to create the screenshot for the fl_line_style() docs. +// Save a screenshot of its original size to documentation/src/fl_line_style.png +// 2. For further tests it's possible to resize the window. Line sizes and widths +// are adjusted (resized) as well, depending on the window size. +// 3. Some lines may draw outside their boxes in unusual window width/height ratios. +// These effects are intentionally ignored. + #include #include #include @@ -22,9 +31,8 @@ // constants -static const int len = 35; // length of line segments -static const int sep = 15; // separation between items -static const int width[] = {0, 4}; // line widths (thin + thick) +static const int sep = 22; // separation between items +static int width[] = {1, 4}; // line widths (thin + thick/dyn.) // This class draws a box with one line style inside an Fl_Grid widget. // Row and column parameters are used to position the box inside the grid. @@ -57,37 +65,66 @@ public: } } void draw() FL_OVERRIDE { - int X = x() + sep / 2; - int Y = y() + (h() - len) / 2; draw_box(); + if (style < 0) // draw an empty box + return; + + // set font and measure widest text fl_font(FL_HELVETICA, 12); fl_color(FL_BLACK); + static int text_width = 0; + if (!text_width) { + int h = 0; // dummy + fl_measure("FL_DASHDOTDOT", text_width, h); + } + // draw the text + int X = x() + sep / 2; fl_draw(style_str(style), X, y() + h()/2 + fl_height()/2 - 2); - X += 110; - for (int i = 0; i < 2; i++, X += len + sep) { // thin + thick lines + + // calculate dynamic line sizes and widths + X += text_width + sep / 2; + int dx = (w() - text_width - 5 * sep) / 4; // horizontal distance + int dy = h() - sep; + int Y = y() + sep / 2; + if (dx >= 80 || dy >= 80) + width[1] = 9; + else if (dx >= 60 || dy >= 60) + width[1] = 8; + else if (dx >= 40 || dy >= 40) + width[1] = 7; + else + width[1] = 5; + + // draw the lines + for (int i = 0; i < 2; i++, X += dx + sep) { // thin + thick lines fl_line_style(style, width[i]); // ___ // | // | - fl_line(X, Y, X + len, Y, X + len, Y + len); - X += len + sep; + fl_line(X, Y, X + dx, Y, X + dx, Y + dy); + X += dx + sep; // ___ // / // / - fl_line(X, Y, X + len, Y, X, Y + len); + fl_line(X, Y, X + dx, Y, X, Y + dy); } - fl_line_style(FL_SOLID, 0); // restore to default + + // restore line settings to default + fl_line_style(FL_SOLID, 0); } }; int main(int argc, char **argv) { - Fl_Double_Window win(660, 340, "fl_line_style()"); + Fl_Double_Window win(740, 400, "fl_line_style()"); win.color(FL_WHITE); + + // create grid with a nice white 4px border and a + // light gray background (color) so margins and gaps show thru Fl_Grid grid(4, 4, win.w() - 8, win.h() - 8); grid.box(FL_FLAT_BOX); - grid.color(0xd0d0d000); // margins and gaps - grid.layout(6, 2, 4, 4); // 6 rows, 2 columns + grid.color(0xd0d0d000); + grid.layout(6, 2, 4, 4); // 6 rows, 2 columns, ... // first column StyleBox sb00(FL_SOLID, 0, 0); @@ -95,25 +132,20 @@ int main(int argc, char **argv) { StyleBox sb02(FL_DOT, 2, 0); StyleBox sb03(FL_DASHDOT, 3, 0); StyleBox sb04(FL_DASHDOTDOT, 4, 0); - - // empty box in row 5 - Fl_Box empty(0, 0, 0, 0); - empty.box(FL_FLAT_BOX); - empty.color(FL_WHITE); - grid.widget(&empty, 5, 0, FL_GRID_FILL); + StyleBox sb05(-1, 5, 0); // empty box // second column - StyleBox sb05(FL_CAP_FLAT, 0, 1); - StyleBox sb06(FL_CAP_ROUND, 1, 1); - StyleBox sb07(FL_CAP_SQUARE, 2, 1); - StyleBox sb08(FL_JOIN_MITER, 3, 1); - StyleBox sb09(FL_JOIN_ROUND, 4, 1); - StyleBox sb10(FL_JOIN_BEVEL, 5, 1); + StyleBox sb10(FL_CAP_FLAT, 0, 1); + StyleBox sb11(FL_CAP_ROUND, 1, 1); + StyleBox sb12(FL_CAP_SQUARE, 2, 1); + StyleBox sb13(FL_JOIN_MITER, 3, 1); + StyleBox sb14(FL_JOIN_ROUND, 4, 1); + StyleBox sb15(FL_JOIN_BEVEL, 5, 1); grid.end(); win.end(); - // win.resizable(win); - // win.size_range(win.w(), win.h()); // don't allow to shrink + win.resizable(win); + win.size_range(660, 340); // don't allow to shrink too much win.show(argc, argv); return Fl::run(); }