summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
Diffstat (limited to 'src/display')
-rw-r--r--src/display/drawing-context.h2
-rw-r--r--src/display/drawing-shape.cpp22
-rw-r--r--src/display/drawing-text.cpp10
-rw-r--r--src/display/drawing.cpp7
-rw-r--r--src/display/drawing.h1
-rw-r--r--src/display/rendermode.h3
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 {