From 653bab5531faa1e5bd74b8eeecc174723f7d04ef Mon Sep 17 00:00:00 2001 From: koldo Date: Wed, 11 Mar 2009 21:24:29 +0000 Subject: [PATCH] git-svn-id: svn://ultimatepp.org/upp/trunk@949 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- bazaar/PainterSvg demo/Demo.svg | 75 ++++++++ bazaar/PainterSvg demo/Examples.h | 39 ++++ bazaar/PainterSvg demo/Examples.lay | 29 +++ bazaar/PainterSvg demo/Glacier.jpg | Bin 0 -> 9998 bytes bazaar/PainterSvg demo/PainterSvg demo.upp | 16 ++ bazaar/PainterSvg demo/Piechart.svg | 32 ++++ bazaar/PainterSvg demo/SvgDemo.cpp | 25 +++ bazaar/PainterSvg demo/init | 6 + bazaar/PainterSvg demo/main.cpp | 206 +++++++++++++++++++++ 9 files changed, 428 insertions(+) create mode 100644 bazaar/PainterSvg demo/Demo.svg create mode 100644 bazaar/PainterSvg demo/Examples.h create mode 100644 bazaar/PainterSvg demo/Examples.lay create mode 100644 bazaar/PainterSvg demo/Glacier.jpg create mode 100644 bazaar/PainterSvg demo/PainterSvg demo.upp create mode 100644 bazaar/PainterSvg demo/Piechart.svg create mode 100644 bazaar/PainterSvg demo/SvgDemo.cpp create mode 100644 bazaar/PainterSvg demo/init create mode 100644 bazaar/PainterSvg demo/main.cpp diff --git a/bazaar/PainterSvg demo/Demo.svg b/bazaar/PainterSvg demo/Demo.svg new file mode 100644 index 000000000..774707a53 --- /dev/null +++ b/bazaar/PainterSvg demo/Demo.svg @@ -0,0 +1,75 @@ + + + + + + + + + + Draw + + + + Text +demo! + + + + + + + Nube + + + + + + + + + + Other text + + + More + text + diff --git a/bazaar/PainterSvg demo/Examples.h b/bazaar/PainterSvg demo/Examples.h new file mode 100644 index 000000000..ca1ec63c2 --- /dev/null +++ b/bazaar/PainterSvg demo/Examples.h @@ -0,0 +1,39 @@ +#ifndef _PainterExamples_Examples_h_ +#define _PainterExamples_Examples_h_ + +#include +#include + +using namespace Upp; + +#define LAYOUTFILE +#include + +void RegisterExample(const char *name, void (*ex)(Painter& pw)); + +struct App : TopWindow { + virtual void Paint(Draw& w); + + SplitterFrame split; + ArrayCtrl list; + FrameBottom< WithCtrlLayout > ctrl; + + typedef App CLASSNAME; + + void DoPaint0(Painter& sw); + void DoPaint(Painter& sw); + void Print(); + void Benchmark(); + void Sync(); + void ToSlider(EditDouble *e, SliderCtrl *slider); + void ToEdit(EditDouble *e, SliderCtrl *slider); + void Pair(EditDouble& e, SliderCtrl& slider); + void ToSlider(); + void Reset(); + void Serialize(Stream& s); + + App(); + ~App(); +}; + +#endif diff --git a/bazaar/PainterSvg demo/Examples.lay b/bazaar/PainterSvg demo/Examples.lay new file mode 100644 index 000000000..9269b11aa --- /dev/null +++ b/bazaar/PainterSvg demo/Examples.lay @@ -0,0 +1,29 @@ +LAYOUT(CtrlLayout, 212, 384) + ITEM(Label, dv___0, SetLabel(t_("Translate X")).LeftPosZ(4, 72).TopPosZ(4, 19)) + ITEM(EditDoubleSpin, translate_x, Min(0).Max(2000).LeftPosZ(4, 64).TopPosZ(24, 19)) + ITEM(SliderCtrl, translate_x_slider, HSizePosZ(72, 4).TopPosZ(22, 24)) + ITEM(Label, dv___3, SetLabel(t_("Translate Y")).LeftPosZ(4, 72).TopPosZ(48, 19)) + ITEM(EditDoubleSpin, translate_y, Min(0).Max(2000).LeftPosZ(4, 64).TopPosZ(68, 19)) + ITEM(SliderCtrl, translate_y_slider, HSizePosZ(72, 4).TopPosZ(66, 24)) + ITEM(Label, dv___6, SetLabel(t_("Rotate")).LeftPosZ(4, 52).TopPosZ(92, 19)) + ITEM(EditDoubleSpin, rotate, Min(0).Max(6.29).LeftPosZ(4, 64).TopPosZ(112, 19)) + ITEM(SliderCtrl, rotate_slider, HSizePosZ(72, 4).TopPosZ(110, 24)) + ITEM(Label, dv___9, SetLabel(t_("Scale")).LeftPosZ(4, 52).TopPosZ(136, 19)) + ITEM(EditDoubleSpin, scale, Min(0).Max(3).LeftPosZ(4, 64).TopPosZ(156, 19)) + ITEM(SliderCtrl, scale_slider, HSizePosZ(72, 4).TopPosZ(154, 24)) + ITEM(Label, dv___12, SetLabel(t_("Scale X")).LeftPosZ(4, 52).TopPosZ(180, 19)) + ITEM(EditDoubleSpin, scale_x, Min(0).Max(2).LeftPosZ(4, 64).TopPosZ(200, 19)) + ITEM(SliderCtrl, scale_x_slider, HSizePosZ(72, 4).TopPosZ(198, 24)) + ITEM(Label, dv___15, SetLabel(t_("Opacity")).LeftPosZ(4, 52).TopPosZ(224, 19)) + ITEM(EditDoubleSpin, opacity, SetInc(0.05).Min(0).Max(1).LeftPosZ(4, 64).TopPosZ(244, 19)) + ITEM(SliderCtrl, opacity_slider, HSizePosZ(72, 4).TopPosZ(242, 24)) + ITEM(Option, painting, SetLabel(t_("Paint through Painting")).LeftPosZ(4, 128).TopPosZ(268, 20)) + ITEM(DropList, linejoin, LeftPosZ(4, 100).BottomPosZ(33, 19)) + ITEM(DropList, linecap, RightPosZ(4, 100).BottomPosZ(33, 19)) + ITEM(Button, reset, SetLabel(t_("Reset")).LeftPosZ(4, 64).BottomPosZ(4, 24)) + ITEM(Button, print, SetLabel(t_("Print")).HSizePosZ(72, 80).BottomPosZ(4, 24)) + ITEM(Button, benchmark, SetLabel(t_("Benchmark")).RightPosZ(4, 72).BottomPosZ(4, 24)) + ITEM(Switch, quality, SetLabel(t_("Antialiased\nNoAA\nSubpixel")).LeftPosZ(4, 204).TopPosZ(312, 16)) + ITEM(Option, transparent, SetLabel(t_("Transparent background")).LeftPosZ(4, 204).TopPosZ(288, 20)) +END_LAYOUT + diff --git a/bazaar/PainterSvg demo/Glacier.jpg b/bazaar/PainterSvg demo/Glacier.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60881f67caeddb61c677bdc9cacda1e506ccea8b GIT binary patch literal 9998 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 literal 0 HcmV?d00001 diff --git a/bazaar/PainterSvg demo/PainterSvg demo.upp b/bazaar/PainterSvg demo/PainterSvg demo.upp new file mode 100644 index 000000000..96ac8413c --- /dev/null +++ b/bazaar/PainterSvg demo/PainterSvg demo.upp @@ -0,0 +1,16 @@ +description "Svg Painter demo"; + +uses + CtrlLib, + PainterSvg; + +file + Examples.h, + SvgDemo.cpp, + main.cpp, + Examples.lay; + +mainconfig + "" = "GUI", + "" = "GUI SSE2"; + diff --git a/bazaar/PainterSvg demo/Piechart.svg b/bazaar/PainterSvg demo/Piechart.svg new file mode 100644 index 000000000..c4b197039 --- /dev/null +++ b/bazaar/PainterSvg demo/Piechart.svg @@ -0,0 +1,32 @@ + + + + + + Average: 20.0 + + MagickWand for PHP + (10.0%) + + + MagickCore + (29.0%) + + + MagickWand + (22.9%) + + + JMagick + (10.6%) + + + Magick++ + (27.5%) + + ImageMagick + + + diff --git a/bazaar/PainterSvg demo/SvgDemo.cpp b/bazaar/PainterSvg demo/SvgDemo.cpp new file mode 100644 index 000000000..553080dba --- /dev/null +++ b/bazaar/PainterSvg demo/SvgDemo.cpp @@ -0,0 +1,25 @@ +#include "Examples.h" + +String file = "C:\\Demo.svg"; + +void SvgDemo(Painter& sw) +{ + try { + if (FileExists(file)) + ParseSVG(sw, LoadFileBOM(file), GetFileDirectory(file)); + else { + sw.Scale(1./20); + sw.Text(200, 200, "File '" + file + "' not found", Font(Font::ARIAL, 400)); + sw.Opacity(1); + sw.Stroke(1, Black()); + sw.Fill(Black()); + } + } + catch(XmlError e) { + LOG("SVG XML error: " + e); + } +} + +INITBLOCK { + RegisterExample("Svg demo", SvgDemo); +} diff --git a/bazaar/PainterSvg demo/init b/bazaar/PainterSvg demo/init new file mode 100644 index 000000000..6a440b6ef --- /dev/null +++ b/bazaar/PainterSvg demo/init @@ -0,0 +1,6 @@ +#ifndef _PainterSvg_demo_icpp_init_stub +#define _PainterSvg_demo_icpp_init_stub +#include "CtrlLib/init" +#include "PainterSvg/init" +#include "plugin\jpg/init" +#endif diff --git a/bazaar/PainterSvg demo/main.cpp b/bazaar/PainterSvg demo/main.cpp new file mode 100644 index 000000000..626ccfeaf --- /dev/null +++ b/bazaar/PainterSvg demo/main.cpp @@ -0,0 +1,206 @@ +#include "Examples.h" + +extern String file; + +struct Example { + void (*example)(Painter& pw); + String name; +}; + +Array& Examples() +{ + static Array x; + return x; +}; + +void RegisterExample(const char *name, void (*ex)(Painter& pw)) +{ + Example& x = Examples().Add(); + x.name = name; + x.example = ex; +} + +void App::DoPaint0(Painter& sw) +{ + sw.Translate(~ctrl.translate_x, ~ctrl.translate_y); + sw.Rotate(~ctrl.rotate); + sw.Scale(~ctrl.scale, (double)~ctrl.scale * (double)~ctrl.scale_x); + sw.Opacity(~ctrl.opacity); + sw.LineCap(~ctrl.linecap); + sw.LineJoin(~ctrl.linejoin); + { PAINTER_TIMING("FILL"); + if(ctrl.transparent) + sw.Clear(RGBAZero()); + else + sw.Clear(White()); + } + if(list.IsCursor()) + Examples()[list.GetCursor()].example(sw); +} + +void App::DoPaint(Painter& sw) +{ + if(ctrl.painting) { + PaintingPainter h(2000, 2000); + DoPaint0(h); + sw.Paint(h); + } + else + DoPaint0(sw); +} + +void App::Print() +{ + PaintingPainter sw(1000, 1000); + DoPaint(sw); + PrinterJob pb; + if(pb.Execute()) + pb.GetDraw().DrawPainting(0, 0, 4000, 4000, sw); +} + +void App::Benchmark() +{ + int time; + int time0 = GetTickCount(); + int n = 0; + for(;;) { + time = GetTickCount(); + if(time - time0 > 1000) break; + ImageBuffer ib(800, 600); + BufferPainter sw(ib, ctrl.quality); + PAINTER_TIMING("Paint"); + DoPaint(sw); + n++; + } + PromptOK("Benchmark: " + AsString(double(time - time0) / n) + " ms"); +} + +void App::Paint(Draw& w) +{ + Size sz = GetSize(); + if(ctrl.transparent) { + for(int y = 0; y + 32 < sz.cy; y += 32) + for(int x = 0; x + 32 < sz.cx; x += 32) + w.DrawRect(x, y, 32, 32, (x ^ y) & 32 ? Color(254, 172, 120) : Color(124, 135, 253)); + } + ImageBuffer ib(sz); + BufferPainter sw(ib, ctrl.quality); + DoPaint(sw); + w.DrawImage(0, 0, ib); +} + +void App::Sync() +{ + Refresh(); +} + +void App::ToSlider(EditDouble *e, SliderCtrl *slider) +{ + double v = ~*e; + *slider <<= fround(1000.0 * (v - e->GetMin()) / (e->GetMax() - e->GetMin())); + Refresh(); +} + +void App::ToEdit(EditDouble *e, SliderCtrl *slider) +{ + int x = ~*slider; + *e <<= x * (e->GetMax() - e->GetMin()) / 1000.0 + e->GetMin(); + Refresh(); +} + +void App::Pair(EditDouble& e, SliderCtrl& slider) +{ + e <<= THISBACK2(ToSlider, &e, &slider); + slider <<= THISBACK2(ToEdit, &e, &slider); + slider.MinMax(0, 1000); +} + +void App::ToSlider() +{ + ToSlider(&ctrl.rotate, &ctrl.rotate_slider); + ToSlider(&ctrl.scale, &ctrl.scale_slider); + ToSlider(&ctrl.scale_x, &ctrl.scale_x_slider); + ToSlider(&ctrl.translate_x, &ctrl.translate_x_slider); + ToSlider(&ctrl.translate_y, &ctrl.translate_y_slider); + ToSlider(&ctrl.opacity, &ctrl.opacity_slider); +} + +void App::Reset() +{ + ctrl.rotate <<= ctrl.translate_x <<= ctrl.translate_y <<= 0; + ctrl.scale <<= ctrl.scale_x <<= ctrl.opacity <<= 1.0; + ctrl.painting = false; + ctrl.quality = MODE_ANTIALIASED; + ctrl.linejoin <<= LINEJOIN_MITER; + ctrl.linecap <<= LINECAP_BUTT; + ToSlider(); +} + +void App::Serialize(Stream& s) +{ + s + % ctrl.rotate % ctrl.rotate_slider + % ctrl.scale % ctrl.scale_slider + % ctrl.scale_x % ctrl.scale_x_slider + % ctrl.translate_x % ctrl.translate_x_slider + % ctrl.translate_y % ctrl.translate_y_slider + % ctrl.opacity % ctrl.opacity_slider + % ctrl.painting % ctrl.quality % ctrl.transparent + ; +} + +App::App() { + AddFrame(split); + split.Left(list, HorzLayoutZoom(200)); + list.WhenSel = THISBACK(Sync); + list.AddColumn(); + list.NoHeader(); + for(int i = 0; i < Examples().GetCount(); i++) + list.Add(Examples()[i].name); + list.FindSetCursor(LoadFile(ConfigFile("last"))); + Sync(); + Sizeable().Zoomable(); + ctrl.Height(ctrl.GetLayoutSize().cy); + CtrlLayout(ctrl); + list.InsertFrame(0, ctrl); + Pair(ctrl.rotate, ctrl.rotate_slider); + Pair(ctrl.scale, ctrl.scale_slider); + Pair(ctrl.scale_x, ctrl.scale_x_slider); + Pair(ctrl.translate_x, ctrl.translate_x_slider); + Pair(ctrl.translate_y, ctrl.translate_y_slider); + Pair(ctrl.opacity, ctrl.opacity_slider); + ctrl.linecap.Add(LINECAP_BUTT, "Butt caps"); + ctrl.linecap.Add(LINECAP_SQUARE, "Square caps"); + ctrl.linecap.Add(LINECAP_ROUND, "Round caps"); + ctrl.linejoin.Add(LINEJOIN_MITER, "Miter joins"); + ctrl.linejoin.Add(LINEJOIN_ROUND, "Round joins"); + ctrl.linejoin.Add(LINEJOIN_BEVEL, "Bevel joins"); + ctrl.linecap <<= ctrl.linejoin <<= ctrl.painting <<= ctrl.quality <<= ctrl.transparent <<= THISBACK(Sync); + ctrl.reset <<= THISBACK(Reset); + ctrl.benchmark <<= THISBACK(Benchmark); + ctrl.print <<= THISBACK(Print); + Reset(); + LoadFromFile(*this); + Title("Painter 2.0"); + + if (!FileExists(file)) { + FileSel fsel; + + fsel.Type("Svg file", "*.svg"); + fsel <<= Nvl(file, GetHomeDirectory()); + if(fsel.ExecuteOpen("Choose file")) + file <<= ~fsel; + } +} + +App::~App() +{ + if(list.IsCursor()) + SaveFile(ConfigFile("last"), list.GetKey()); + StoreToFile(*this); +} + +GUI_APP_MAIN +{ + App().Run(); +}