diff --git a/src/style.cpp b/src/style.cpp
index b3cc370f9cdb39cb97ac2ae212c5d63da7178dc4..551dd658516b594ea794405040c0aa6427b0d73b 100644 (file)
--- a/src/style.cpp
+++ b/src/style.cpp
-#define __SP_STYLE_C__
-
/** @file
* @brief SVG stylesheets implementation.
*/
#include "svg/svg.h"
#include "svg/svg-color.h"
#include "svg/svg-icc-color.h"
-#include "svg/svg-device-color.h"
#include "display/canvas-bpath.h"
#include "attributes.h"
static void sp_style_read_ilengthornormal(SPILengthOrNormal *val, gchar const *str);
static void sp_style_read_itextdecoration(SPITextDecoration *val, gchar const *str);
static void sp_style_read_icolor(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocument *document);
-static void sp_style_read_ipaint(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocument *document);
static void sp_style_read_ifontsize(SPIFontSize *val, gchar const *str);
static void sp_style_read_ibaselineshift(SPIBaselineShift *val, gchar const *str);
static void sp_style_read_ifilter(gchar const *str, SPStyle *style, SPDocument *document);
g_return_val_if_fail(object != NULL, NULL);
g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
- SPStyle *style = sp_style_new(SP_OBJECT_DOCUMENT(object));
+ SPStyle *style = sp_style_new( object->document );
style->object = object;
style->release_connection = object->connectRelease(sigc::bind<1>(sigc::ptr_fun(&sp_style_object_release), style));
- if (object && SP_OBJECT_IS_CLONED(object)) {
+ if (object && object->cloned) {
style->cloned = true;
}
sp_style_clear(style);
- if (object && SP_OBJECT_IS_CLONED(object)) {
+ if (object && object->cloned) {
style->cloned = true;
}
if (!style->fill.set) {
val = repr->attribute("fill");
if (val) {
- sp_style_read_ipaint(&style->fill, val, style, (object) ? SP_OBJECT_DOCUMENT(object) : NULL);
+ style->fill.read( val, *style, (object) ? SP_OBJECT_DOCUMENT(object) : NULL );
}
}
/* fill-opacity */
if (!style->stroke.set) {
val = repr->attribute("stroke");
if (val) {
- sp_style_read_ipaint(&style->stroke, val, style, (object) ? SP_OBJECT_DOCUMENT(object) : NULL);
+ style->stroke.read( val, *style, (object) ? SP_OBJECT_DOCUMENT(object) : NULL );
}
}
SPS_READ_PLENGTH_IF_UNSET(&style->stroke_width, repr, "stroke-width");
}
case SP_PROP_FILL:
if (!style->fill.set) {
- sp_style_read_ipaint(&style->fill, val, style, (style->object) ? SP_OBJECT_DOCUMENT(style->object) : NULL);
+ style->fill.read( val, *style, (style->object) ? SP_OBJECT_DOCUMENT(style->object) : NULL );
}
break;
case SP_PROP_FILL_OPACITY:
case SP_PROP_STROKE:
if (!style->stroke.set) {
- sp_style_read_ipaint(&style->stroke, val, style, (style->object) ? SP_OBJECT_DOCUMENT(style->object) : NULL);
+ style->stroke.read( val, *style, (style->object) ? SP_OBJECT_DOCUMENT(style->object) : NULL );
}
break;
case SP_PROP_STROKE_WIDTH:
@@ -1370,12 +1366,12 @@ sp_style_merge_baseline_shift_from_parent(SPIBaselineShift &child, SPIBaselineSh
child.computed = 0; // No change
} else if (child.literal == SP_CSS_BASELINE_SHIFT_SUB ) {
// Should use subscript position from font relative to alphabetic baseline
- // In mean time use values from OpenOffice and Adobe
- child.computed = -0.33 * pfont_size.computed;
+ // OpenOffice, Adobe: -0.33, Word -0.14, LaTex about -0.2.
+ child.computed = -0.2 * pfont_size.computed;
} else if (child.literal == SP_CSS_BASELINE_SHIFT_SUPER ) {
// Should use superscript position from font relative to alphabetic baseline
- // In mean time use values from OpenOffice and Adobe
- child.computed = 0.33 * pfont_size.computed;
+ // OpenOffice, Adobe: 0.33, Word 0.35, LaTex about 0.45.
+ child.computed = 0.4 * pfont_size.computed;
} else {
/* Illegal value */
}
@@ -3201,18 +3197,17 @@ sp_style_read_icolor(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocume
*
* \pre paint == \&style.fill || paint == \&style.stroke.
*/
-static void
-sp_style_read_ipaint(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocument *document)
+void SPIPaint::read( gchar const *str, SPStyle &style, SPDocument *document )
{
while (g_ascii_isspace(*str)) {
++str;
}
- paint->clear();
+ clear();
if (streq(str, "inherit")) {
- paint->set = TRUE;
- paint->inherit = TRUE;
+ set = TRUE;
+ inherit = TRUE;
} else {
if ( strneq(str, "url", 3) ) {
gchar *uri = extract_uri( str, &str );
@@ -3220,33 +3215,33 @@ sp_style_read_ipaint(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocume
++str;
}
// TODO check on and comment the comparrison "paint != &style->color".
- if ( uri && *uri && (paint != &style->color) ) {
- paint->set = TRUE;
+ if ( uri && *uri && (this != &style.color) ) {
+ set = TRUE;
// it may be that this style's SPIPaint has not yet created its URIReference;
// now that we have a document, we can create it here
- if (!paint->value.href && document) {
- paint->value.href = new SPPaintServerReference(document);
- paint->value.href->changedSignal().connect(sigc::bind(sigc::ptr_fun((paint == &style->fill)? sp_style_fill_paint_server_ref_changed : sp_style_stroke_paint_server_ref_changed), style));
+ if (!value.href && document) {
+ value.href = new SPPaintServerReference(document);
+ value.href->changedSignal().connect(sigc::bind(sigc::ptr_fun((this == &style.fill)? sp_style_fill_paint_server_ref_changed : sp_style_stroke_paint_server_ref_changed), &style));
}
// TODO check what this does in light of move away from union
- sp_style_set_ipaint_to_uri_string (style, paint, uri);
+ sp_style_set_ipaint_to_uri_string (&style, this, uri);
}
g_free( uri );
}
- if (streq(str, "currentColor") && paint != &style->color) {
- paint->set = TRUE;
- paint->currentcolor = TRUE;
- } else if (streq(str, "none") && paint != &style->color) {
- paint->set = TRUE;
- paint->noneSet = TRUE;
+ if (streq(str, "currentColor") && (this != &style.color)) {
+ set = TRUE;
+ currentcolor = TRUE;
+ } else if (streq(str, "none") && (this != &style.color)) {
+ set = TRUE;
+ noneSet = TRUE;
} else {
guint32 const rgb0 = sp_svg_read_color(str, &str, 0xff);
if (rgb0 != 0xff) {
- paint->setColor( rgb0 );
- paint->set = TRUE;
+ setColor( rgb0 );
+ set = TRUE;
while (g_ascii_isspace(*str)) {
++str;
@@ -3257,18 +3252,7 @@ sp_style_read_ipaint(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocume
delete tmp;
tmp = 0;
}
- paint->value.color.icc = tmp;
- }
- if (strneq(str, "device-gray(", 12) ||
- strneq(str, "device-rgb(", 11) ||
- strneq(str, "device-cmyk(", 12) ||
- strneq(str, "device-nchannel(", 16)) {
- SVGDeviceColor* tmp = new SVGDeviceColor();
- if ( ! sp_svg_read_device_color( str, &str, tmp ) ) {
- delete tmp;
- tmp = 0;
- }
- paint->value.color.device = tmp;
+ value.color.icc = tmp;
}
}
}
return 0;
}
+SPIPaint::SPIPaint() :
+ set(0),
+ inherit(0),
+ currentcolor(0),
+ colorSet(0),
+ noneSet(0),
+ value()
+{
+ value.color.set( 0 );
+ value.href = 0;
+}
void SPIPaint::clear()
{
fill-column:99
End:
*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :