diff --git a/uppsrc/CtrlCore/EncodeRTF.cpp b/uppsrc/CtrlCore/EncodeRTF.cpp index 3d036f7eb..e36e9f0cb 100644 --- a/uppsrc/CtrlCore/EncodeRTF.cpp +++ b/uppsrc/CtrlCore/EncodeRTF.cpp @@ -289,7 +289,7 @@ void RTFEncoder::PutObject(const RichObject& object) Command("picwgoal", DotTwips(out_size.cx)); Command("pichgoal", DotTwips(out_size.cy)); Command("pngblip"); - PutBinHex(PNGEncoder().SaveString(object.ToImage(out_size))); + PutBinHex(PNGEncoder().SaveString(object.ToImage(out_size, charfmt.ink))); } bool RTFEncoder::PutParaFormat(const RichPara::Format& pf, const RichPara::Format& difpf) diff --git a/uppsrc/RichText/EncodeHTML.cpp b/uppsrc/RichText/EncodeHTML.cpp index 25346034c..5d8de869e 100644 --- a/uppsrc/RichText/EncodeHTML.cpp +++ b/uppsrc/RichText/EncodeHTML.cpp @@ -363,7 +363,7 @@ String DefaultHtmlObjectSaver::GetHtml(const RichObject& object, const String& l if(abs(100 * (psz.cx - sz.cx) / sz.cx) < imtolerance) sz = psz; PNGEncoder png; - png.SaveFile(AppendFileName(outdir, name), object.ToImage(psz)); + png.SaveFile(AppendFileName(outdir, name), object.ToImage(psz, SBlack())); String el = ""; if(IsNull(link)) { if(psz.cx * psz.cy != 0) diff --git a/uppsrc/RichText/Object.cpp b/uppsrc/RichText/Object.cpp index 9a6063715..694c3b016 100644 --- a/uppsrc/RichText/Object.cpp +++ b/uppsrc/RichText/Object.cpp @@ -100,23 +100,23 @@ Size RichObjectType::GetPixelSize(const Value& data, void *context) const Size RichObjectType::GetPixelSize(const Value& data) const { return Size(1, 1); } -void RichObjectType::Paint(const Value& data, Draw& w, Size sz, void *context) const +void RichObjectType::Paint(const Value& data, Draw& w, Size sz, Color ink, void *context) const { - Paint(data, w, sz); + Paint(data, w, sz, ink); } -void RichObjectType::Paint(const Value& data, Draw& w, Size sz) const {} +void RichObjectType::Paint(const Value& data, Draw& w, Size sz, Color ink) const {} -Image RichObjectType::ToImage(int64 serial_id, const Value& data, Size sz) const +Image RichObjectType::ToImage(int64 serial_id, const Value& data, Size sz, Color ink) const { - return ToImage(serial_id, data, sz, NULL); + return ToImage(serial_id, data, sz, ink, NULL); } -Image RichObjectType::ToImage(int64, const Value& data, Size sz, void *context) const +Image RichObjectType::ToImage(int64, const Value& data, Size sz, Color ink, void *context) const { ImageAnyDraw iw(sz); iw.DrawRect(sz, SColorPaper()); - Paint(data, iw, sz, context); + Paint(data, iw, sz, ink, context); return iw; } @@ -164,10 +164,10 @@ void RichObject::Register(const char *name, RichObjectType *type) Map().FindAdd(name, type); } -void RichObject::Paint(Draw& w, Size sz, void *context) const +void RichObject::Paint(Draw& w, Size sz, Color ink, void *context) const { if(type) - type->Paint(data, w, sz, context); + type->Paint(data, w, sz, ink, context); else { w.DrawRect(sz, SColorFace()); DrawFrame(w, sz, SColorText()); @@ -175,13 +175,13 @@ void RichObject::Paint(Draw& w, Size sz, void *context) const } } -Image RichObject::ToImage(Size sz, void *context) const +Image RichObject::ToImage(Size sz, Color ink, void *context) const { if(type) - return type->ToImage(serial, data, sz, context); + return type->ToImage(serial, data, sz, ink, context); else { ImageAnyDraw w(sz); - Paint(w, sz, context); + Paint(w, sz, ink, context); return w; } } diff --git a/uppsrc/RichText/ParaPaint.cpp b/uppsrc/RichText/ParaPaint.cpp index 37bc73708..4a4d49b39 100644 --- a/uppsrc/RichText/ParaPaint.cpp +++ b/uppsrc/RichText/ParaPaint.cpp @@ -129,6 +129,7 @@ bool RichPara::BreaksPage(const RichContext& rc, const Lines& pl, int i) const struct RichObjectImageMaker : ImageMaker { RichObject object; Size sz; + Color ink; void *context; virtual String Key() const; @@ -141,12 +142,13 @@ String RichObjectImageMaker::Key() const RawCat(b, object.GetSerialId()); RawCat(b, sz); RawCat(b, context); + RawCat(b, ink); return String(b); } Image RichObjectImageMaker::Make() const { - return object.ToImage(sz, context); + return object.ToImage(sz, ink, context); } void RichPara::DrawRuler(Draw& w, int x, int y, int cx, int cy, Color ink, int style) @@ -281,11 +283,12 @@ void RichPara::Paint(PageDraw& pw, RichContext rc, const PaintInfo& pi, RichObjectImageMaker im; im.object = o; im.sz = sz; + im.ink = (*i)->ink; im.context = pi.context; draw.DrawImage(0, 0, MakeImagePaintOnly(im)); } else - o.Paint(draw, sz, pi.context); + o.Paint(draw, sz, (*i)->ink, pi.context); draw.End(); } i++; diff --git a/uppsrc/RichText/RichImage.cpp b/uppsrc/RichText/RichImage.cpp index 25b18f323..a2f3b13ae 100644 --- a/uppsrc/RichText/RichImage.cpp +++ b/uppsrc/RichText/RichImage.cpp @@ -9,8 +9,8 @@ struct RichImage : public RichObjectType { virtual String GetTypeName(const Value& v) const; virtual Size GetPhysicalSize(const Value& data) const; virtual Size GetPixelSize(const Value& data) const; - virtual void Paint(const Value& data, Draw& w, Size sz, void *) const; - virtual Image ToImage(int64, const Value& data, Size sz, void *) const; + virtual void Paint(const Value& data, Draw& w, Size sz, Color, void *) const; + virtual Image ToImage(int64, const Value& data, Size sz, Color, void *) const; virtual bool Accept(PasteClip& clip); virtual Value Read(PasteClip& clip); @@ -81,13 +81,13 @@ Size RichImage::GetPhysicalSize(const Value& data) const return sz; } -void RichImage::Paint(const Value& data, Draw& w, Size sz, void *) const +void RichImage::Paint(const Value& data, Draw& w, Size sz, Color, void *) const { Image x = LoadImageFromString(data); w.DrawImage(0, 0, sz.cx, sz.cy, x); } -Image RichImage::ToImage(int64, const Value& data, Size sz, void *) const +Image RichImage::ToImage(int64, const Value& data, Size sz, Color, void *) const { return Rescale(LoadImageFromString(data), sz); } @@ -183,8 +183,8 @@ struct RichRawImage : public RichObjectType { virtual String Write(const Value& v) const; virtual Size GetPhysicalSize(const Value& data) const; virtual Size GetPixelSize(const Value& data) const; - virtual void Paint(const Value& data, Draw& w, Size sz, void *) const; - virtual Image ToImage(int64, const Value& data, Size sz, void *) const; + virtual void Paint(const Value& data, Draw& w, Size sz, Color, void *) const; + virtual Image ToImage(int64, const Value& data, Size sz, Color, void *) const; }; String RichRawImage::GetTypeName(const Value& v) const @@ -233,7 +233,7 @@ Size RichRawImage::GetPixelSize(const Value& data) const return Size(0, 0); } -void RichRawImage::Paint(const Value& data, Draw& w, Size sz, void *) const +void RichRawImage::Paint(const Value& data, Draw& w, Size sz, Color ink, void *) const { String s = data; StringStream ss(s); @@ -253,10 +253,10 @@ void RichRawImage::Paint(const Value& data, Draw& w, Size sz, void *) const } else if(IsSVG(s)) - w.DrawImage(0, 0, RenderSVGImage(sz, s)); + w.DrawImage(0, 0, RenderSVGImage(sz, s, ink)); } -Image RichRawImage::ToImage(int64 serial_id, const Value& data, Size sz, void *) const +Image RichRawImage::ToImage(int64 serial_id, const Value& data, Size sz, Color ink, void *) const { String s = data; StringStream ss(s); @@ -279,7 +279,7 @@ Image RichRawImage::ToImage(int64 serial_id, const Value& data, Size sz, void *) } else if(IsString(data) && IsSVG(~data)) - return RenderSVGImage(sz, ~data); + return RenderSVGImage(sz, ~data, ink); return Null; } diff --git a/uppsrc/RichText/RichText.h b/uppsrc/RichText/RichText.h index 5cbbc50b2..5cb2e4ca7 100644 --- a/uppsrc/RichText/RichText.h +++ b/uppsrc/RichText/RichText.h @@ -149,8 +149,8 @@ struct RichObjectType { virtual Size GetDefaultSize(const Value& data, Size maxsize, void *context) const; virtual Size GetPhysicalSize(const Value& data, void *context) const; virtual Size GetPixelSize(const Value& data, void *context) const; - virtual void Paint(const Value& data, Draw& w, Size sz, void *context) const; - virtual Image ToImage(int64 serial_id, const Value& data, Size sz, void *context) const; + virtual void Paint(const Value& data, Draw& w, Size sz, Color ink, void *context) const; + virtual Image ToImage(int64 serial_id, const Value& data, Size sz, Color ink, void *context) const; virtual void Menu(Bar& bar, RichObject& ex, void *context) const; virtual void DefaultAction(RichObject& ex, void *context) const; virtual String GetLink(const Value& data, Point pt, Size sz, void *context) const; @@ -164,8 +164,8 @@ protected: virtual Size GetDefaultSize(const Value& data, Size maxsize) const; virtual Size GetPhysicalSize(const Value& data) const; virtual Size GetPixelSize(const Value& data) const; - virtual void Paint(const Value& data, Draw& w, Size sz) const; - virtual Image ToImage(int64 serial_id, const Value& data, Size sz) const; + virtual void Paint(const Value& data, Draw& w, Size sz, Color ink) const; + virtual Image ToImage(int64 serial_id, const Value& data, Size sz, Color ink) const; virtual void Menu(Bar& bar, RichObject& ex) const; virtual void DefaultAction(RichObject& ex) const; virtual String GetLink(const Value& data, Point pt, Size sz) const; @@ -197,8 +197,8 @@ public: void SetSize(int cx, int cy) { size = Size(cx, cy); } void SetSize(Size sz) { SetSize(sz.cx, sz.cy); } Size GetSize() const { return size; } - void Paint(Draw& w, Size sz, void *context = NULL) const; - Image ToImage(Size sz, void *context = NULL) const; + void Paint(Draw& w, Size sz, Color ink, void *context = NULL) const; + Image ToImage(Size sz, Color ink, void *context = NULL) const; Size GetPhysicalSize() const { return physical_size; } Size GetPixelSize() const { return pixel_size; } Size GetDefaultSize(Size maxsize, void *context = NULL) const { return type ? type->GetDefaultSize(data, maxsize, context) : physical_size; }