summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
Diffstat (limited to 'src/display')
-rw-r--r--src/display/cairo-utils.h3
-rw-r--r--src/display/canvas-grid.cpp8
-rw-r--r--src/display/canvas-grid.h10
-rw-r--r--src/display/drawing.cpp29
-rw-r--r--src/display/drawing.h5
5 files changed, 32 insertions, 23 deletions
diff --git a/src/display/cairo-utils.h b/src/display/cairo-utils.h
index d240545eb..e88c6d4e8 100644
--- a/src/display/cairo-utils.h
+++ b/src/display/cairo-utils.h
@@ -87,7 +87,10 @@ public:
* Only the address of the structure is used, it is never initialized. See:
* http://www.cairographics.org/manual/cairo-Types.html#cairo-user-data-key-t
*/
+// TODO fixme check this usage. A static here in a header file is probably not doing what was intended:
static cairo_user_data_key_t ci_key;
+
+
SPColorInterpolation get_cairo_surface_ci(cairo_surface_t *surface);
void set_cairo_surface_ci(cairo_surface_t *surface, SPColorInterpolation cif);
void copy_cairo_surface_ci(cairo_surface_t *in, cairo_surface_t *out);
diff --git a/src/display/canvas-grid.cpp b/src/display/canvas-grid.cpp
index 329b621ae..5fd38a473 100644
--- a/src/display/canvas-grid.cpp
+++ b/src/display/canvas-grid.cpp
@@ -183,19 +183,19 @@ CanvasGrid::~CanvasGrid()
}
const char *
-CanvasGrid::getName()
+CanvasGrid::getName() const
{
return _(grid_name[gridtype]);
}
const char *
-CanvasGrid::getSVGName()
+CanvasGrid::getSVGName() const
{
return grid_svgname[gridtype];
}
GridType
-CanvasGrid::getGridType()
+CanvasGrid::getGridType() const
{
return gridtype;
}
@@ -369,7 +369,7 @@ CanvasGrid::on_repr_attr_changed(Inkscape::XML::Node *repr, gchar const *key, gc
(static_cast<CanvasGrid*>(data))->onReprAttrChanged(repr, key, oldval, newval, is_interactive);
}
-bool CanvasGrid::isEnabled()
+bool CanvasGrid::isEnabled() const
{
if (snapper == NULL) {
return false;
diff --git a/src/display/canvas-grid.h b/src/display/canvas-grid.h
index bba9b7e95..7eaef407f 100644
--- a/src/display/canvas-grid.h
+++ b/src/display/canvas-grid.h
@@ -61,9 +61,9 @@ public:
virtual ~CanvasGrid();
// TODO: see effect.h and effect.cpp from live_effects how to link enums to SVGname to typename properly. (johan)
- const char * getName();
- const char * getSVGName();
- GridType getGridType();
+ const char * getName() const;
+ const char * getSVGName() const;
+ GridType getGridType() const;
static const char * getName(GridType type);
static const char * getSVGName(GridType type);
static GridType getGridTypeFromSVGName(const char * typestr);
@@ -97,8 +97,8 @@ public:
static void on_repr_attr_changed (Inkscape::XML::Node * repr, const gchar *key, const gchar *oldval, const gchar *newval, bool is_interactive, void * data);
- bool isVisible() { return (isEnabled() &&visible); };
- bool isEnabled();
+ bool isVisible() const { return (isEnabled() &&visible); };
+ bool isEnabled() const;
protected:
CanvasGrid(SPNamedView * nv, Inkscape::XML::Node * in_repr, SPDocument *in_doc, GridType type);
diff --git a/src/display/drawing.cpp b/src/display/drawing.cpp
index 171cc014f..c192e4565 100644
--- a/src/display/drawing.cpp
+++ b/src/display/drawing.cpp
@@ -16,13 +16,20 @@
#include "nr-filter-types.h"
//grayscale colormode:
-#include "nr-filter-colormatrix.h"
#include "cairo-templates.h"
#include "drawing-context.h"
namespace Inkscape {
+// hardcoded grayscale color matrix values as default
+static const gdouble grayscale_value_matrix[20] = {
+ 0.21, 0.72, 0.072, 0, 0,
+ 0.21, 0.72, 0.072, 0, 0,
+ 0.21, 0.72, 0.072, 0, 0,
+ 0 , 0 , 0 , 1, 0
+};
+
Drawing::Drawing(SPCanvasArena *arena)
: _root(NULL)
, outlinecolor(0x000000ff)
@@ -34,6 +41,7 @@ Drawing::Drawing(SPCanvasArena *arena)
, _filter_quality(Filters::FILTER_QUALITY_BEST)
, _cache_score_threshold(50000.0)
, _cache_budget(0)
+ , _grayscale_colormatrix(std::vector<gdouble> (grayscale_value_matrix, grayscale_value_matrix + 20 ))
, _canvasarena(arena)
{
@@ -143,6 +151,12 @@ Drawing::setCacheBudget(size_t bytes)
}
void
+Drawing::setGrayscaleMatrix(gdouble value_matrix[20]) {
+ _grayscale_colormatrix = Filters::FilterColorMatrix::ColorMatrixMatrix(
+ std::vector<gdouble> (value_matrix, value_matrix + 20) );
+}
+
+void
Drawing::update(Geom::IntRect const &area, UpdateContext const &ctx, unsigned flags, unsigned reset)
{
if (_root) {
@@ -152,17 +166,6 @@ Drawing::update(Geom::IntRect const &area, UpdateContext const &ctx, unsigned fl
_pickItemsForCaching();
}
-// hardcoded grayscale color matrix values. could be turned into preference settings in future.
-static const gdouble grayscale_value_matrix[] = {
- 0.21, 0.72, 0.072, 0, 0,
- 0.21, 0.72, 0.072, 0, 0,
- 0.21, 0.72, 0.072, 0, 0,
- 0 , 0 , 0 , 1, 0
-};
-static Filters::FilterColorMatrix::ColorMatrixMatrix grayscale_colormatrix(
- std::vector<gdouble> (grayscale_value_matrix, grayscale_value_matrix + sizeof(grayscale_value_matrix) / sizeof(grayscale_value_matrix[0]) )
-);
-
void
Drawing::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flags)
{
@@ -174,7 +177,7 @@ Drawing::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flags)
// apply grayscale filter on top of everything
cairo_surface_t *input = ct.rawTarget();
cairo_surface_t *out = ink_cairo_surface_create_identical(input);
- ink_cairo_surface_filter(input, out, grayscale_colormatrix);
+ ink_cairo_surface_filter(input, out, _grayscale_colormatrix);
Geom::Point origin = ct.targetLogicalBounds().min();
ct.setSource(out, origin[Geom::X], origin[Geom::Y]);
ct.setOperator(CAIRO_OPERATOR_SOURCE);
diff --git a/src/display/drawing.h b/src/display/drawing.h
index 8154f0783..74ab57fae 100644
--- a/src/display/drawing.h
+++ b/src/display/drawing.h
@@ -20,7 +20,7 @@
#include <2geom/rect.h>
#include "display/drawing-item.h"
#include "display/rendermode.h"
-
+#include "nr-filter-colormatrix.h"
typedef struct _SPCanvasArena SPCanvasArena;
@@ -65,6 +65,8 @@ public:
OutlineColors const &colors() const { return _colors; }
+ void setGrayscaleMatrix(gdouble value_matrix[20]);
+
void update(Geom::IntRect const &area = Geom::IntRect::infinite(), UpdateContext const &ctx = UpdateContext(), unsigned flags = DrawingItem::STATE_ALL, unsigned reset = 0);
void render(DrawingContext &ct, Geom::IntRect const &area, unsigned flags = 0);
DrawingItem *pick(Geom::Point const &p, double delta, unsigned flags);
@@ -97,6 +99,7 @@ private:
size_t _cache_budget; ///< maximum allowed size of cache
OutlineColors _colors;
+ Filters::FilterColorMatrix::ColorMatrixMatrix _grayscale_colormatrix;
SPCanvasArena *_canvasarena; // may be NULL is this arena is not the screen
// but used for export etc.