diff options
| author | Rick Yorgason <rick@firefang.com> | 2018-10-18 03:06:34 +0000 |
|---|---|---|
| committer | Rick Yorgason <rick@firefang.com> | 2018-10-18 03:06:34 +0000 |
| commit | 33131a183f9f34d798a741f317a91d87537684f6 (patch) | |
| tree | 5753465248676eb17c48029e676e99ed69ad37e8 /src/display | |
| parent | Code cleanup and adding comments. (diff) | |
| download | inkscape-33131a183f9f34d798a741f317a91d87537684f6.tar.gz inkscape-33131a183f9f34d798a741f317a91d87537684f6.zip | |
New "Outline thin strokes" view mode which draws thin strokes in outline mode so they're easier to see, while still drawing everything else normally. Very useful for making hairline strokes (0.001") for laser cutters.
Diffstat (limited to 'src/display')
| -rw-r--r-- | src/display/drawing-context.h | 2 | ||||
| -rw-r--r-- | src/display/drawing-shape.cpp | 22 | ||||
| -rw-r--r-- | src/display/drawing-text.cpp | 10 | ||||
| -rw-r--r-- | src/display/drawing.cpp | 7 | ||||
| -rw-r--r-- | src/display/drawing.h | 1 | ||||
| -rw-r--r-- | src/display/rendermode.h | 3 |
6 files changed, 43 insertions, 2 deletions
diff --git a/src/display/drawing-context.h b/src/display/drawing-context.h index 8587fbf66..12d192a7c 100644 --- a/src/display/drawing-context.h +++ b/src/display/drawing-context.h @@ -52,6 +52,8 @@ public: void translate(double dx, double dy) { cairo_translate(_ct, dx, dy); } void scale(Geom::Scale const &s) { cairo_scale(_ct, s[Geom::X], s[Geom::Y]); } void scale(double sx, double sy) { cairo_scale(_ct, sx, sy); } + void device_to_user_distance(double &dx, double &dy) { cairo_device_to_user_distance(_ct, &dx, &dy); } + void user_to_device_distance(double &dx, double &dy) { cairo_user_to_device_distance(_ct, &dx, &dy); } void moveTo(Geom::Point const &p) { cairo_move_to(_ct, p[Geom::X], p[Geom::Y]); } void lineTo(Geom::Point const &p) { cairo_line_to(_ct, p[Geom::X], p[Geom::Y]); } diff --git a/src/display/drawing-shape.cpp b/src/display/drawing-shape.cpp index 63db9475d..c2208d161 100644 --- a/src/display/drawing-shape.cpp +++ b/src/display/drawing-shape.cpp @@ -185,6 +185,17 @@ DrawingShape::_renderStroke(DrawingContext &dc) dc.save(); } _nrstyle.applyStroke(dc); + + // Special handling for thin outline mode when we're drawing lines smaller than half a + // pixel + if (_drawing.outlineThin()) { + double outline_thin_size = 0.5, trash = 0.5; + dc.device_to_user_distance(outline_thin_size, trash); + if (_nrstyle.stroke_width < outline_thin_size) { + dc.setLineWidth(outline_thin_size); + } + } + dc.strokePreserve(); dc.newPath(); // clear path } @@ -255,6 +266,17 @@ DrawingShape::_renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigne } if (has_stroke) { _nrstyle.applyStroke(dc); + + // Special handling for thin outline mode when we're drawing lines smaller than + // half a pixel + if (_drawing.outlineThin()) { + double outline_thin_size = 0.5, trash = 0.5; + dc.device_to_user_distance(outline_thin_size, trash); + if (_nrstyle.stroke_width < outline_thin_size) { + dc.setLineWidth(outline_thin_size); + } + } + dc.strokePreserve(); } dc.newPath(); // clear path diff --git a/src/display/drawing-text.cpp b/src/display/drawing-text.cpp index 76c392d67..b48ce7d31 100644 --- a/src/display/drawing-text.cpp +++ b/src/display/drawing-text.cpp @@ -603,6 +603,16 @@ unsigned DrawingText::_renderItem(DrawingContext &dc, Geom::IntRect const &/*are } if (has_stroke) { _nrstyle.applyStroke(dc); + + // Special handling for thin outline mode when we're drawing lines smaller than half a pixel + if (_drawing.outlineThin()) { + double outline_thin_size = 0.5, trash = 0.5; + dc.device_to_user_distance(outline_thin_size, trash); + if (_nrstyle.stroke_width < outline_thin_size) { + dc.setLineWidth(outline_thin_size); + } + } + dc.strokePreserve(); } } diff --git a/src/display/drawing.cpp b/src/display/drawing.cpp index 18c2d98e8..7ecaea987 100644 --- a/src/display/drawing.cpp +++ b/src/display/drawing.cpp @@ -79,9 +79,14 @@ Drawing::outline() const return renderMode() == RENDERMODE_OUTLINE; } bool +Drawing::outlineThin() const +{ + return renderMode() == RENDERMODE_OUTLINE_THIN; +} +bool Drawing::renderFilters() const { - return renderMode() == RENDERMODE_NORMAL; + return renderMode() == RENDERMODE_NORMAL || renderMode() == RENDERMODE_OUTLINE_THIN; } int Drawing::blurQuality() const diff --git a/src/display/drawing.h b/src/display/drawing.h index 1348f02af..1669cc3a4 100644 --- a/src/display/drawing.h +++ b/src/display/drawing.h @@ -50,6 +50,7 @@ public: RenderMode renderMode() const; ColorMode colorMode() const; bool outline() const; + bool outlineThin() const; bool renderFilters() const; int blurQuality() const; int filterQuality() const; diff --git a/src/display/rendermode.h b/src/display/rendermode.h index cbd35de73..36dd0ead3 100644 --- a/src/display/rendermode.h +++ b/src/display/rendermode.h @@ -12,7 +12,8 @@ namespace Inkscape { enum RenderMode { RENDERMODE_NORMAL, RENDERMODE_NO_FILTERS, - RENDERMODE_OUTLINE + RENDERMODE_OUTLINE, + RENDERMODE_OUTLINE_THIN }; enum ColorMode { |
