summaryrefslogtreecommitdiffstats
path: root/src/extension
diff options
context:
space:
mode:
authorLiam P. White <inkscapebrony@gmail.com>2014-07-27 01:17:50 +0000
committerLiam P. White <inkscapebrony@gmail.com>2014-07-27 01:17:50 +0000
commit0ac6f5cccf5aaa8bb8d97fdf96d040646b7056c1 (patch)
treef3f00d4c95db349232b1e201fd2e45118d511f6e /src/extension
parentFix for 1309050 (diff)
parentProperly fix 1309050, revert incorrect fix for 601336 (diff)
downloadinkscape-0ac6f5cccf5aaa8bb8d97fdf96d040646b7056c1.tar.gz
inkscape-0ac6f5cccf5aaa8bb8d97fdf96d040646b7056c1.zip
Merge from trunk 13472
(bzr r13341.1.102)
Diffstat (limited to 'src/extension')
-rw-r--r--src/extension/internal/emf-inout.cpp22
-rw-r--r--src/extension/internal/emf-print.cpp6
-rw-r--r--src/extension/internal/emf-print.h2
-rw-r--r--src/extension/internal/text_reassemble.c20
-rw-r--r--src/extension/internal/wmf-inout.cpp5
-rw-r--r--src/extension/internal/wmf-print.cpp2
-rw-r--r--src/extension/internal/wmf-print.h2
7 files changed, 38 insertions, 21 deletions
diff --git a/src/extension/internal/emf-inout.cpp b/src/extension/internal/emf-inout.cpp
index 863d1e006..084fbcd58 100644
--- a/src/extension/internal/emf-inout.cpp
+++ b/src/extension/internal/emf-inout.cpp
@@ -1641,11 +1641,19 @@ int Emf::myEnhMetaFileProc(char *contents, unsigned int length, PEMF_CALLBACK_DA
// next record is valid type and forces pending text to be drawn immediately
if ((d->dc[d->level].dirty & DIRTY_TEXT) || ((emr_mask != U_EMR_INVALID) && (emr_mask & U_DRAW_TEXT) && d->tri->dirty)){
TR_layout_analyze(d->tri);
+ if (d->dc[d->level].clip_id){
+ SVGOStringStream tmp_clip;
+ tmp_clip << "\n<g\n\tclip-path=\"url(#clipEmfPath" << d->dc[d->level].clip_id << ")\"\n>";
+ d->outsvg += tmp_clip.str().c_str();
+ }
TR_layout_2_svg(d->tri);
SVGOStringStream ts;
ts << d->tri->out;
d->outsvg += ts.str().c_str();
d->tri = trinfo_clear(d->tri);
+ if (d->dc[d->level].clip_id){
+ d->outsvg += "\n</g>\n";
+ }
}
if(d->dc[d->level].dirty){ //Apply the delayed background changes, clear the flag
d->dc[d->level].bkMode = tbkMode;
@@ -2524,8 +2532,8 @@ std::cout << "BEFORE DRAW"
double cx = pix_to_x_point( d, (rclBox.left + rclBox.right)/2.0, (rclBox.bottom + rclBox.top)/2.0 );
double cy = pix_to_y_point( d, (rclBox.left + rclBox.right)/2.0, (rclBox.bottom + rclBox.top)/2.0 );
- double rx = pix_to_abs_size( d, fabs(rclBox.right - rclBox.left )/2.0 );
- double ry = pix_to_abs_size( d, fabs(rclBox.top - rclBox.bottom)/2.0 );
+ double rx = pix_to_abs_size( d, std::abs(rclBox.right - rclBox.left )/2.0 );
+ double ry = pix_to_abs_size( d, std::abs(rclBox.top - rclBox.bottom)/2.0 );
SVGOStringStream tmp_ellipse;
tmp_ellipse << "cx=\"" << cx << "\" ";
@@ -3141,11 +3149,19 @@ std::cout << "BEFORE DRAW"
int status = trinfo_load_textrec(d->tri, &tsp, tsp.ori,TR_EMFBOT); // ori is actually escapement
if(status==-1){ // change of escapement, emit what we have and reset
TR_layout_analyze(d->tri);
+ if (d->dc[d->level].clip_id){
+ SVGOStringStream tmp_clip;
+ tmp_clip << "\n<g\n\tclip-path=\"url(#clipEmfPath" << d->dc[d->level].clip_id << ")\"\n>";
+ d->outsvg += tmp_clip.str().c_str();
+ }
TR_layout_2_svg(d->tri);
ts << d->tri->out;
d->outsvg += ts.str().c_str();
d->tri = trinfo_clear(d->tri);
(void) trinfo_load_textrec(d->tri, &tsp, tsp.ori,TR_EMFBOT); // ignore return status, it must work
+ if (d->dc[d->level].clip_id){
+ d->outsvg += "\n</g>\n";
+ }
}
g_free(escaped_text);
@@ -3479,7 +3495,7 @@ Emf::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
if (d.pDesc){ free( d.pDesc ); }
-// std::cout << "SVG Output: " << std::endl << *(d.outsvg) << std::endl;
+// std::cout << "SVG Output: " << std::endl << d.outsvg << std::endl;
SPDocument *doc = SPDocument::createNewDocFromMem(d.outsvg.c_str(), strlen(d.outsvg.c_str()), TRUE);
diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp
index 9c68e40a4..e054829b5 100644
--- a/src/extension/internal/emf-print.cpp
+++ b/src/extension/internal/emf-print.cpp
@@ -977,8 +977,8 @@ unsigned int PrintEmf::fill(
using Geom::X;
using Geom::Y;
- SPItem *item = SP_ITEM(style->object);
- SPClipPath *scp = (item->clip_ref ? item->clip_ref->getObject() : NULL);
+ //SPItem *item = SP_ITEM(style->object);
+ //SPClipPath *scp = (item->clip_ref ? item->clip_ref->getObject() : NULL);
Geom::Affine tf = m_tr_stack.top();
@@ -1882,7 +1882,7 @@ unsigned int PrintEmf::text(Inkscape::Extension::Print * /*mod*/, char const *te
fix90n = 1; //assume vertical
rot = (double)(((int) round(rot)) - irem);
rotb = rot * M_PI / 1800.0;
- if (abs(rot) == 900.0) {
+ if (std::abs(rot) == 900.0) {
fix90n = 2;
}
}
diff --git a/src/extension/internal/emf-print.h b/src/extension/internal/emf-print.h
index 1e4970a46..9a1251b38 100644
--- a/src/extension/internal/emf-print.h
+++ b/src/extension/internal/emf-print.h
@@ -29,7 +29,7 @@ namespace Internal {
class PrintEmf : public PrintMetafile
{
- uint32_t hbrush, hbrushOld, hpen, hpenOld;
+ uint32_t hbrush, hbrushOld, hpen;
unsigned int print_pathv (Geom::PathVector const &pathv, const Geom::Affine &transform);
bool print_simple_shape (Geom::PathVector const &pathv, const Geom::Affine &transform);
diff --git a/src/extension/internal/text_reassemble.c b/src/extension/internal/text_reassemble.c
index 810e3f8cc..4dfc49420 100644
--- a/src/extension/internal/text_reassemble.c
+++ b/src/extension/internal/text_reassemble.c
@@ -67,8 +67,8 @@ Optional compiler switches for development:
File: text_reassemble.c
-Version: 0.0.14
-Date: 25-MAR-2014
+Version: 0.0.15
+Date: 24-JUL-2014
Author: David Mathog, Biology Division, Caltech
email: mathog@caltech.edu
Copyright: 2014 David Mathog and California Institute of Technology (Caltech)
@@ -550,7 +550,7 @@ int TR_check_set_vadvance(TR_INFO *tri, int src, int lines){
See if the line to be added is compatible.
All text fields in a complex have the same advance, so just set/check the first one.
vadvance must be within 1% or do not add a new line */
- if(fabs(1.0 - (tpi->chunks[trec].vadvance/newV) > 0.01)){
+ if(fabs(1.0 - (tpi->chunks[trec].vadvance/newV)) > 0.01){
status = 1;
}
else { /* recalculate the weighted vadvance */
@@ -1820,7 +1820,9 @@ printf("Face idx:%d bbox: xMax/Min:%ld,%ld yMax/Min:%ld,%ld UpEM:%d asc/des:%d,%
fasc = ((double) (fsp->face->ascender) )/64.0;
fdsc = ((double) (fsp->face->descender))/64.0;
- if(tri->load_flags & FT_LOAD_NO_SCALE) xe *= tsp->fs/32.0;
+ /* originally the denominator was just 32.0, but it broke when units_per_EM wasn't 2048 */
+ double fixscale = tsp->fs/(((double) fsp->face->units_per_EM)/64.0);
+ if(tri->load_flags & FT_LOAD_NO_SCALE) xe *= fixscale;
/* now place the rectangle using ALN information */
if( taln & ALIHORI & ALILEFT ){
@@ -1837,11 +1839,11 @@ printf("Face idx:%d bbox: xMax/Min:%ld,%ld yMax/Min:%ld,%ld UpEM:%d asc/des:%d,%
}
tpi->chunks[current].ldir = tsp->ldir;
- if(tri->load_flags & FT_LOAD_NO_SCALE){
- asc *= tsp->fs/32.0;
- dsc *= tsp->fs/32.0;
- fasc *= tsp->fs/32.0;
- fdsc *= tsp->fs/32.0;
+ if(tri->load_flags & FT_LOAD_NO_SCALE){
+ asc *= fixscale;
+ dsc *= fixscale;
+ fasc *= fixscale;
+ fdsc *= fixscale;
}
diff --git a/src/extension/internal/wmf-inout.cpp b/src/extension/internal/wmf-inout.cpp
index 85060470b..beb6190d3 100644
--- a/src/extension/internal/wmf-inout.cpp
+++ b/src/extension/internal/wmf-inout.cpp
@@ -63,7 +63,6 @@ namespace Extension {
namespace Internal {
-static U_RECT16 rc_old;
static bool clipset = false;
static uint32_t BLTmode=0;
@@ -2054,8 +2053,8 @@ std::cout << "BEFORE DRAW"
double cx = pix_to_x_point( d, (rc.left + rc.right)/2.0, (rc.bottom + rc.top)/2.0 );
double cy = pix_to_y_point( d, (rc.left + rc.right)/2.0, (rc.bottom + rc.top)/2.0 );
- double rx = pix_to_abs_size( d, fabs(rc.right - rc.left )/2.0 );
- double ry = pix_to_abs_size( d, fabs(rc.top - rc.bottom)/2.0 );
+ double rx = pix_to_abs_size( d, std::abs(rc.right - rc.left )/2.0 );
+ double ry = pix_to_abs_size( d, std::abs(rc.top - rc.bottom)/2.0 );
SVGOStringStream tmp_ellipse;
tmp_ellipse << "cx=\"" << cx << "\" ";
diff --git a/src/extension/internal/wmf-print.cpp b/src/extension/internal/wmf-print.cpp
index 55ad5da5f..e5ff34009 100644
--- a/src/extension/internal/wmf-print.cpp
+++ b/src/extension/internal/wmf-print.cpp
@@ -1396,7 +1396,7 @@ unsigned int PrintWmf::text(Inkscape::Extension::Print * /*mod*/, char const *te
fix90n = 1; //assume vertical
rot = (double)(((int) round(rot)) - irem);
rotb = rot * M_PI / 1800.0;
- if (abs(rot) == 900.0) {
+ if (std::abs(rot) == 900.0) {
fix90n = 2;
}
}
diff --git a/src/extension/internal/wmf-print.h b/src/extension/internal/wmf-print.h
index 1e5d4c323..e4cf19184 100644
--- a/src/extension/internal/wmf-print.h
+++ b/src/extension/internal/wmf-print.h
@@ -28,7 +28,7 @@ namespace Internal {
class PrintWmf : public PrintMetafile
{
- uint32_t hbrush, hpen, hpenOld, hbrush_null, hpen_null;
+ uint32_t hbrush, hpen, hbrush_null, hpen_null;
uint32_t hmiterlimit; // used to minimize redundant records that set this
unsigned int print_pathv (Geom::PathVector const &pathv, const Geom::Affine &transform);