wxSVGDC class test sample

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15882 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Chris Elliott
2002-06-19 09:16:19 +00:00
parent 164e084ab4
commit cdf3a589b2
30 changed files with 4090 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
# Makefile for plot sample.
# $Id$
top_srcdir = @top_srcdir@/..
top_builddir = ../../..
program_dir = contrib/samples/svg
PROGRAM=svgtest
OBJECTS=svgtest.o
APPEXTRALIBS=$(top_builddir)/lib/libwx_dcsvg.@WX_TARGET_LIBRARY_TYPE@
APPEXTRADEFS=-I$(top_srcdir)/contrib/include
include $(top_builddir)/src/makeprog.env

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@@ -0,0 +1,310 @@
/* XPM */
static char *svgbitmap_xpm[] = {
/* columns rows colors chars-per-pixel */
"64 48 256 2",
" c #550000",
". c #5c0000",
"X c #5f000a",
"o c #5c033a",
"O c #5a3615",
"+ c #640000",
"@ c #640009",
"# c #680605",
"$ c #680807",
"% c #6d0e0e",
"& c #630015",
"* c #690717",
"= c #6d110e",
"- c #6e1412",
"; c #701513",
": c #721b16",
"> c #741c1a",
", c #650021",
"< c #65022b",
"1 c #65003d",
"2 c #650034",
"3 c #6b1132",
"4 c #711535",
"5 c #76221c",
"6 c #78211e",
"7 c #642939",
"8 c #643929",
"9 c #663336",
"0 c #772220",
"q c #792522",
"w c #7b2a23",
"e c #7d2d29",
"r c #7f312a",
"t c #5d004f",
"y c #560059",
"u c #5b005c",
"i c #5a0054",
"p c #5e0061",
"a c #64004a",
"s c #650046",
"d c #640150",
"f c #64025d",
"g c #660d58",
"h c #671746",
"j c #651352",
"k c #640064",
"l c #640069",
"z c #6d0e6c",
"x c #680767",
"c c #6e0f71",
"v c #6c106b",
"b c #6c1665",
"n c #711a6c",
"m c #731b72",
"M c #682847",
"N c #6d2653",
"B c #75236d",
"V c #7c2d74",
"C c #7d2c7a",
"Z c #782278",
"A c #7e3177",
"S c #565600",
"D c #5c5c00",
"F c #5e6100",
"G c #614416",
"H c #655f06",
"J c #655a0b",
"K c #70463b",
"L c #6e4538",
"P c #646400",
"I c #656a00",
"U c #6c6c0d",
"Y c #676708",
"T c #6d6914",
"R c #6d720f",
"E c #707014",
"W c #78781e",
"Q c #75771a",
"! c #75602d",
"~ c #7a7a23",
"^ c #7b7b2d",
"/ c #812e2a",
"( c #82392d",
") c #81332d",
"_ c #853a34",
"` c #843834",
"' c #833a7b",
"] c #8a443a",
"[ c #884438",
"{ c #8e4a42",
"} c #8d4542",
"| c #8b4055",
" . c #914e48",
".. c #94564a",
"X. c #955250",
"o. c #985b54",
"O. c #995d55",
"+. c #894679",
"@. c #90506f",
"#. c #995c7d",
"$. c #97624d",
"%. c #9e6a5b",
"&. c #9c6756",
"*. c #9e6460",
"=. c #8d6a64",
"-. c #a06a5d",
";. c #a1715d",
":. c #a26a66",
">. c #a97c6c",
",. c #a67568",
"<. c #ac7b74",
"1. c #ab7674",
"2. c #812f81",
"3. c #853a82",
"4. c #823081",
"5. c #8a4284",
"6. c #8d4a84",
"7. c #8f5080",
"8. c #945689",
"9. c #965792",
"0. c #9a6389",
"q. c #9d6397",
"w. c #a2658e",
"e. c #a16a99",
"r. c #a5778f",
"t. c #a77799",
"y. c #ad78aa",
"u. c #a76daa",
"i. c #81812b",
"p. c #878738",
"a. c #888837",
"s. c #8d8d40",
"d. c #919145",
"f. c #919149",
"g. c #979753",
"h. c #9c9c5a",
"j. c #9b9b54",
"k. c #9f8671",
"l. c #9b856c",
"z. c #aa826b",
"x. c #ae8772",
"c. c #b1847a",
"v. c #b08c75",
"b. c #b3897f",
"n. c #b19374",
"m. c #b6997d",
"M. c #a99e77",
"N. c #a1a25b",
"B. c #a4a465",
"V. c #abab73",
"C. c #adad79",
"Z. c #b6a079",
"A. c #b2b278",
"S. c #ab878d",
"D. c #ac8396",
"F. c #b78c86",
"G. c #b69182",
"H. c #b99c83",
"J. c #bc9a8b",
"K. c #bb9592",
"L. c #b183ab",
"P. c #b38ca3",
"I. c #bd98b7",
"U. c #b791a9",
"Y. c #bba385",
"T. c #bca696",
"R. c #bbbb8c",
"E. c #b8b785",
"W. c #bebe94",
"Q. c #bfa5a7",
"!. c #c19c97",
"~. c #c0a88d",
"^. c #c3a896",
"/. c #c3b48f",
"(. c #c7b698",
"). c #c6aba5",
"_. c #c6aab7",
"`. c #ccb7a8",
"'. c #cdb8b5",
"]. c #d0bbab",
"[. c #d1bbb3",
"{. c #c29bc2",
"}. c #caa9c6",
"|. c #d7bfd0",
" X c #d2b8ca",
".X c #c2c28e",
"XX c #c8c294",
"oX c #cbc59c",
"OX c #ccca9b",
"+X c #c4c595",
"@X c #cccaa3",
"#X c #ccc8a7",
"$X c #d0cba5",
"%X c #d3cbab",
"&X c #d1c5aa",
"*X c #d3c3b3",
"=X c #d8c4ba",
"-X c #d8cbbb",
";X c #d5cab7",
":X c #d4d4ab",
">X c #d6dcaa",
",X c #d8dbad",
"<X c #d2d5a3",
"1X c #d8d4b3",
"2X c #dbd4bc",
"3X c #dbdbb4",
"4X c #dcdcbb",
"5X c #d4d4b5",
"6X c #dbe3ab",
"7X c #dce1b4",
"8X c #dee3bb",
"9X c #dee9b8",
"0X c #e0e4bd",
"qX c #e1e8bc",
"wX c #e0e7b5",
"eX c #d9c8c3",
"rX c #dbc8d4",
"tX c #ddd3c1",
"yX c #dddbc2",
"uX c #dedaca",
"iX c #e1cecd",
"pX c #e0dcc4",
"aX c #e2d8cb",
"sX c #e6dcd2",
"dX c #e5d8d7",
"fX c #e1cfe0",
"gX c #e2e2c3",
"hX c #e3e2cb",
"jX c #e3eac3",
"kX c #e6eacb",
"lX c #e8ebcc",
"zX c #e5e4d3",
"xX c #eaead3",
"cX c #eeebde",
"vX c #e9e5d8",
"bX c #eaf1ce",
"nX c #e8f2c7",
"mX c #ebf2d3",
"MX c #eef2da",
"NX c #edf8d4",
"BX c #effad8",
"VX c #f0f6d6",
"CX c #f0f3dd",
"ZX c #f2fbda",
"AX c #edece1",
"SX c #efe6e7",
"DX c #f0ebe5",
"FX c #f2f3e4",
"GX c #f4f4ea",
"HX c #f4fae3",
"JX c #f6fbea",
"KX c #f8fdec",
"LX c #f8fee4",
"PX c #fbfdf4",
"IX c #fefefe",
"UX c #f8f4f2",
/* pixels */
"> % % % ; % % ; % % ; % % ; % % % % % % % ; % % % % % % % % % ; % % % % ; % % % = = % % % % = % % % % % ; % % ; % % ; % % ; % / ",
"% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # ",
"% + + + + + + + + + + + + + + + + + + = % = = % % % @ + + + + + + + + + + + % % % $ = $ % + + + + + + + # + + + + + + # + + + % ",
"% + + + + + + + + + + + + # + + + + % rXUXSXDXcXcXaX6 . + + + + + + + + + 6 oX$X@XoXXXOXZ.# + + + + + + + + + + + + + + + + + % ",
"% + + + + + + + + + + + + + # + + + . F.IXIXIXIXPXPX,.. + + + + + + + + + %.qX3X6X,X<X>X&.+ + + + + + + + + + + + + + + + + + ; ",
"% + + + + + + + # + + + + + + + + + + ` UXPXaX[.aXPX;X@ + + + + + + + + $ (.0X(.m./.<XOX5 + + + + + + + + + + + + + + + + + + % ",
"% + + + + + + + + + + # + + + + + + + + [.IXK. ` FXFX_ + + + + + + + . [ 4X,Xw . >.wXM.+ + + + + + + + + + + + + # + + + + + ; ",
"; + + + + + + + + + + + + # + + + + + . :.IXSX- . [.IXG.. + + + + + + + v.nXH.. = XX6X] + + + + + + + + + + + + + + + + + + + % ",
"; + + + + + + + + + + + + + + + + + + + > SXIXO. *.PXaX; + + + + + + ; %XjX.. ..6X(.= + + + + # + + + + + + + + + + + + + # % ",
"% + + + + + + + # + + + + # + + + + + + + !.IX[.. ; zXJXO.. + + + + . O.kX#X= + m.9Xz.. + + + + + + + + + + + + + + + # + + + % ",
"% + + + + + + + + + + + + + + + + + + + + } IXGXr J.IX).+ + + + + + ^.bXx. w :X<Xr + + + + + + # + + + + + # + + + + + + ; ",
"; + + + + + + + + + + # + + + # + + + + + # eXIXc. } HXxXe . + + . r 8X8X( ;.9XY.# + + + + + + + + + + + + + + + + + + + + % ",
"% + + + + + + + + + + + + + + + + + + + + 1.IXiX$ # ;XKX<.. + + + >.mX(.+ $ (.9X$.. + + + + + + + + + + + + + + + + + + + + ; ",
"% + + + + + + + + + + + # + + + + + + + + @ q GXPX . ,.KX-X$ + + $ #XbX&. [ 7X$X: + + + + + + + # + + + + + + + + # + + # + % ",
"; + + + + + + + + + + + + + + + + + + + + + + ).IX^.. q vXMX{ . . .kX5X> . n.jXn.+ + + + + + + + + + + + + + + + + + + + + + ; ",
"% + # + + + + + + + + % > ; $ + + + + + + + . o.PXvX> . ^.KXJ.+ + J.BXH.. : %X8X[ . + + + + + . $ / { ._ : + + + + + + + + + % ",
"% + + + + + + + > ,.`.aXpXpX].x.( + + + + + + - sXPX:. ..HXyX; : yXlX] &.jX(.$ + + + + . ; <.-XxXVXVXkX1XH.[ + + + + + + + % ",
"; + + + + + # 1.vXIXKXxXhXpXlXBX0Xm.: + + + + F.IX[.+ % tXHXO.%.MX&X% + /.jX;.. + + + + ..sXIXJXaX].^.%XgXNX8Xn.- + + + + + % ",
"% + + + + % ).IXPX`.O.e ; 6 ] v.1XnXoX( + + + + ` GXFX` c.HX;XyXmX>. r 8X3Xw + + + . 1.PXPX].X.% @ + + e >.1XjX/.: + + + + % ",
"% + + + @ ^.IXcXo.. + # + + 5 m.qX$X( . + + + [.PXb. ` lXxXlXgXe z.nXY.+ + + . :.IXGX,.@ $ w ) ; + w #X8X/.% + + + % ",
"* + + . 1.IXDX` > c.].2X%XH.] . . ;.,X(.5 . + . :.PXaX% + `.MXxX^.+ = %XjX.. + _ PXPXO. ; c.-XlXlXyX~.[ ;.3X7X>.$ + + + % ",
"v 2 + / UXUX} .sXHXMXxXlXBXkXm.) ..OX6Xn.+ + . > vXLXX. &.MXmXO. ..jX#X; + + # [.IX<. r eXPXCXpX-XpXMXgXjX3X..+ + + + * g ",
"c l t w.IXDXe ,.PXFXG.w _ >.1XjX3XqX7X<X+X5 + + + !.PX^.. : pXyX- . Y.bXx.+ + . X.IXeX+ 0 sXPX].] % $ 5 ,.3X%X[ . + + * a k c ",
"c k k l {.IXdX6 . b.LX;Xq X . > ~.1XZ.;.( - $ + + . { HXvXq . T.J.. w 2XgX_ . + + '.IXX. `.IXJ.# . + + + . ( w . @ < d l l k c ",
"c k k f x }.IXeX3 X J.JX;X: . . = - + . + + + + + + % -XKX,. ` 6 ,.bX(.$ + + > UXdX+ } IX=X$ + + + @ + + . & 1 f l l l k k c ",
"v k k k p z rXIX}.f d _.LX(.- + + + + + + + + + + + . <.KX*X$ . + $ `.bX;. + X.IXK.. !.IXX.. + + + @ , 1 f l l k k l k k k c ",
"c k k k k f m rXPXI.u n [.ZXT.< & @ + + + + + + + + + e vXcX] . . ] kX3X6 + + . 1.IX*.@ sXsX% @ , 2 d f f p p p f p p p f f k c ",
"c k k k k k f ' dXKXP.u n ;XNXP.f f a 1 < , & @ @ + + + (.KXF.. + G.BXH.+ + + . K.IX| 4 KX_.f f l l l l 6.6.6.6.6.+.+.+.+.+.z z ",
"c k k k k k k k 3.vXLXt.y C 2XnXt.p l l l l k k f a a o #.HXuX4 h 2XkX@.o a a t {.IX4.Z PXI.p k k k k z yXjXjX9XqX3X6X>X<XOXB v ",
"c k k k l k k k p 6.cXBX9.y 5.4XqX0.f k k l k l l k l l c aXMX9.9.bX;Xc p l l f {.IX3.m PX_.p l k k f z yX2X).).).T.T.T.XXOXn z ",
"K g l l k k k k k p 9.MXlX6.y 6.0X7X7.p k k k k k k k k f P.ZX=XtXbXt.f k k p u L.IX9.l SXrXx p k k k z yXQ.p f f p k l T.oXc b ",
"R H 8 g l l k x k k f e.BXgX' y 0.wX,X' p k k k k k k k p 3.xXlXlXhX' f k l k u q.IXy.u XJXC f l k f z yX'.C V A C x z oXR.9 T ",
"U I I H 8 j l p f k l f D.NX-XV y r.9X@XV k k k k k k k k x [.lXlX'.k k k k k f 2.IXrXu e.IXI.u f k k z yXkX4X3X3X`.x ' >XN.I E ",
"U P P P F D G M 2.x p p p U.nX&Xm p S.6X(.B p l k k k k k p e.mXlX0.p l k k k k x fXIXC x dXJX9.u p f z '.*X;X3XqXk.O B.>Xa.H R ",
"R P P U p.B.+XkXDXU.N i u f U.nX).b k K.6XT.b p k k k l l f Z hXpXm k k k k k k p y.IXI.y 9.KXFXq.x p p x A ).jX+XY Q <X+XU P U ",
"U P D C.IXIXIXGXGXKXyXV.=.+.P.0XnXt.u B <X<XA f k l k k l p f _.Q.p k k k l k k p m SXPX5.y y.JXLX XP.t.U.2XlXOXQ D A.3Xj.P P U ",
"U P P ~ AXIXyXp.a.5XGXKXMXlXmXkXE.K h S.6XS.k l l l k l l k k ' C f k k l l l l p p u.IXdXB o l.gXHXLXLXVXgXE.E S j.3X.XU P P U ",
"E P P S g.IXFXg.S P g.+X:X@XE.a.D F h.,XOX! 8 9 M h j j g f f x f f x x g g j h M 7 8 #XIXyX~ S U g.A.A.B.i.D P j.3X,Xa.H P P U ",
"yXf.P P D V.IXPXR.E S D P P D S E A.8X:Xa.P I I I I P Y Y H H J J J H H H P I P I I F E 2XIXvXB.Y S S S S P ~ E.0X3Xf.D P P P f.",
"IXIX5Xf.P D B.GXIXhXE.d.i.i.d.C.:XgX,Xa.P P P P P P P P I P P I P P P I P P I P P P I F T @XPXKXgXE.B.j.B.+X4XlX:Xd.P P P p.#XIX",
"IXIXIXIXyXh.T p.5XGXPXCXkXhXlXxXgX.X^ P P P P P P P P P P P P P P P P P P P P P P P P P D Y h.yXFXJXGXCXFXlX4XA.W H Y j.2XIXIXIX",
"IXIXIXIXIXIXAXE.p.d.R.5XgX3X@XC.a.I P P P P P P P P P P P P P P P P P P P P P P P P P P P P D U d.A.R.W.A.h.~ D ^ A.zXIXIXIXIXIX",
"IXIXIXIXIXIXIXIXIXuXC.p.E U Y P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P H D D P Y ^ V.yXIXIXIXIXIXIXIXIX",
"IXIXIXIXIXIXIXIXIXIXIXIXzXW.h.~ Y P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P W g.R.zXPXIXIXIXIXIXIXIXIXIXIX",
"IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXUXzX@XC.f.~ U P P P P P P P P P P P P P P P P P P P P P Y ~ d.V.+XhXPXIXIXIXIXIXIXIXIXIXIXIXIXIXIX",
"IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXAXyX#XW.C.B.h.f.s.p.p.a.a.p.s.f.j.B.C.R.#XyXAXPXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX",
"IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX",
"IXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIX"
};

View File

@@ -0,0 +1,25 @@
/* XPM */
static char *help_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 4 1",
" c None",
". c Black",
"X c Blue",
"o c #000080",
/* pixels */
" ",
" ...... ",
" .XXXXX.. ",
" .XX...oX.. ",
" .X.. .X.. ",
" .X.. .XX.. ",
" .. .XX.. ",
" .XX.. ",
" .X.. ",
" .X.. ",
" .o.. ",
" .. ",
" .XX.. ",
" .XX.. ",
" ... "
};

View File

@@ -0,0 +1,24 @@
/* XPM */
static char *new_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
" c None",
". c Black",
"X c Gray100",
/* pixels */
" ",
" ........ ",
" .XXXXXX.. ",
" .XXXXXX.X. ",
" .XXXXXX.... ",
" .XXXXXXXXX. ",
" .XXXXXXXXX. ",
" .XXXXXXXXX. ",
" .XXXXXXXXX. ",
" .XXXXXXXXX. ",
" .XXXXXXXXX. ",
" .XXXXXXXXX. ",
" .XXXXXXXXX. ",
" ........... ",
" "
};

View File

@@ -0,0 +1,25 @@
/* XPM */
static char *save_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 4 1",
" c None",
". c Black",
"X c #808000",
"o c #808080",
/* pixels */
" ",
" .............. ",
" .X. . . ",
" .X. ... ",
" .X. .X. ",
" .X. .X. ",
" .X. .X. ",
" .X. .X. ",
" .XX........oX. ",
" .XXXXXXXXXXXX. ",
" .XX.........X. ",
" .XX...... .X. ",
" .XX...... .X. ",
" .XX...... .X. ",
" ............. "
};

View File

@@ -0,0 +1,18 @@
#
# File: makefile.b32
# Author: Julian Smart Chris Elliott
# Created: 1999/2002
# Updated:
# Copyright:
#
# Makefile : Builds sample for 32-bit BC++
EXTRALIBS=$(WXDIR)\lib\dcsvg.lib
WXDIR = $(WXWIN)
TARGET=svgtest
OBJECTS = $(TARGET).obj
!include $(WXDIR)\src\makeprog.b32

View File

@@ -0,0 +1,15 @@
# File: makefile.g95 for svgtest demo
# Author: Julian Smart
# Created: 2001-06-12
# Updated:
WXDIR = ../../..
TARGET = svgtest
OBJECTS = $(TARGET).o
EXTRAINC = -I$(WXDIR)/contrib/include
RCEXTRAINC = --include-dir $(WXDIR)/contrib/include
EXTRALIBS = -ldcsvg
include $(WXDIR)/src/makeprog.g95

View File

@@ -0,0 +1,14 @@
# File: makefile.vc for svgtest sample
# Author: Julian Smart
# Created: 2001-06-12
# Updated:
WXDIR = $(WXWIN)
PROGRAM = svgtest
OBJECTS = $(PROGRAM).obj
EXTRALIBS = $(WXDIR)\lib\dcsvg$(LIBEXT).lib
EXTRAINC = -I$(WXDIR)\contrib\include
!include $(WXDIR)\src\makeprog.vc

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

View File

@@ -0,0 +1,44 @@
/* XPM */
static char *mondrian_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 6 1",
" c Black",
". c Blue",
"X c #00bf00",
"o c Red",
"O c Yellow",
"+ c Gray100",
/* pixels */
" ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" "
};

View File

@@ -0,0 +1,602 @@
// biol75@york.ac.uk (Chris Elliott) March 2000
#ifdef __BIDE__
#define _NO_VCL
#include "condefs.h"
USERC("svg.rc");
//---------------------------------------------------------------------------
#define WinMain WinMain
#endif
/////////////////////////////////////////////////////////////////////////////
// Name: svgtest.cpp
// Purpose: SVG sample
// Author: Chris Elliott
// Modified by:
// RCS-ID: $Id$
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ===========================================================================
// declarations
// ===========================================================================
// ---------------------------------------------------------------------------
// headers
// ---------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#include "wx/mdi.h"
#endif
#include <wx/toolbar.h>
#include <wx/svg/dcsvg.h>
#include "bitmaps/new.xpm"
#include "bitmaps/save.xpm"
#include "bitmaps/help.xpm"
#include "SVGlogo24.xpm"
class MyChild;
// Define a new application
class MyApp : public wxApp
{
public:
bool OnInit();
};
// Define a new frame
class MyFrame : public wxMDIParentFrame
{
public:
int nWinCreated;
wxList m_children;
MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
const wxPoint& pos, const wxSize& size, const long style);
void InitToolBar(wxToolBar* toolBar);
void OnSize(wxSizeEvent& event);
void OnAbout(wxCommandEvent& event);
void OnNewWindow(wxCommandEvent& event);
void OnQuit(wxCommandEvent& event);
void OnClose(wxCloseEvent& event);
void FileSavePicture (wxCommandEvent & WXUNUSED(event) ) ;
DECLARE_EVENT_TABLE()
};
class MyCanvas : public wxScrolledWindow
{
public:
int m_index ;
MyChild * m_child ;
MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size);
virtual void OnDraw(wxDC& dc);
DECLARE_EVENT_TABLE()
};
class MyChild: public wxMDIChildFrame
{
public:
MyCanvas *m_canvas;
MyFrame *m_frame ;
//////////////////// Methods
MyChild(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);
~MyChild();
void OnActivate(wxActivateEvent& event);
void OnQuit(wxCommandEvent& event);
void OnClose(wxCloseEvent& event);
bool OnSave(wxString filename) ;
DECLARE_EVENT_TABLE()
};
// menu items ids
enum
{
MDI_QUIT = 100,
MDI_NEW_WINDOW,
MDI_SAVE,
MDI_REFRESH,
MDI_CHILD_QUIT,
MDI_ABOUT
};
IMPLEMENT_APP(MyApp)
// ---------------------------------------------------------------------------
// global variables
// ---------------------------------------------------------------------------
MyFrame *frame = (MyFrame *) NULL;
// ---------------------------------------------------------------------------
// event tables
// ---------------------------------------------------------------------------
BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame)
EVT_MENU(MDI_ABOUT, MyFrame::OnAbout)
EVT_MENU(MDI_NEW_WINDOW, MyFrame::OnNewWindow)
EVT_MENU(MDI_QUIT, MyFrame::OnQuit)
EVT_MENU (MDI_SAVE, MyFrame::FileSavePicture)
EVT_CLOSE(MyFrame::OnClose)
EVT_SIZE(MyFrame::OnSize)
END_EVENT_TABLE()
// ===========================================================================
// implementation
// ===========================================================================
// ---------------------------------------------------------------------------
// MyApp
// ---------------------------------------------------------------------------
// Initialise this in OnInit, not statically
bool MyApp::OnInit()
{
// Create the main frame window
frame = new MyFrame((wxFrame *)NULL, -1, wxT("SVG Demo"),
wxPoint(-1, -1), wxSize(500, 400),
wxDEFAULT_FRAME_STYLE | wxHSCROLL | wxVSCROLL);
// Make a menubar
wxMenu *file_menu = new wxMenu;
file_menu->Append(MDI_NEW_WINDOW, wxT("&New test\tCtrl+N"));
file_menu->Append(MDI_QUIT, wxT("&Exit\tAlt+X"));
wxMenu *help_menu = new wxMenu;
help_menu->Append(MDI_ABOUT, wxT("&About"));
wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append(file_menu, wxT("&File"));
menu_bar->Append(help_menu, wxT("&Help"));
// Associate the menu bar with the frame
frame->SetMenuBar(menu_bar);
frame->CreateStatusBar();
frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}
// ---------------------------------------------------------------------------
// MyFrame
// ---------------------------------------------------------------------------
// Define my frame constructor
MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
const wxPoint& pos, const wxSize& size, const long style)
: wxMDIParentFrame(parent, id, title, pos, size, style)
{
nWinCreated = 0 ;
// Give it an icon
SetIcon(wxICON(mondrian));
CreateToolBar(wxNO_BORDER | wxTB_FLAT | wxTB_HORIZONTAL);
InitToolBar(GetToolBar());
}
void MyFrame::OnClose(wxCloseEvent& event)
{
if ( !event.CanVeto() )
{
event.Skip();
return ;
}
if ( m_children.Number () < 1 )
{
event.Skip();
return ;
}
// now try the children
wxNode * pNode = m_children.GetFirst ();
wxNode * pNext ;
MyChild * pChild ;
while ( pNode )
{
pNext = pNode -> GetNext ();
pChild = (MyChild*) pNode -> Data ();
if (pChild -> Close ())
{
delete pNode ;
}
else
{
event.Veto();
return;
}
pNode = pNext ;
}
event.Skip();
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close();
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
{
(void)wxMessageBox(wxT("wxWindows 2.0 SVG 1.0 Test\n"
"Author: Chris Elliott (c) 2002\n"
"Usage: svg.exe \nClick File | New to show tests\n\n"), wxT("About SVG Test"));
}
void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) )
{
// Make another frame, containing a canvas
MyChild *subframe ;
m_children.Append (new MyChild(frame, wxT("SVG Frame"),
wxPoint(-1, -1), wxSize(-1, -1),
wxDEFAULT_FRAME_STYLE ) ) ;
subframe = (MyChild *) m_children.GetLast() -> Data ();
wxString title;
title.Printf(wxT("SVG Test Window %d"), nWinCreated );
// counts number of children previously, even if now closed
nWinCreated ++ ;
// Give it a title and icon
subframe->SetTitle(title);
subframe->SetIcon(wxICON(mondrian));
// Make a menubar
wxMenu *file_menu = new wxMenu;
file_menu->Append(MDI_NEW_WINDOW, wxT("&Another test\tCtrl+N"));
file_menu->Append(MDI_SAVE, wxT("&Save\tCtrl+S"), wxT("Save in SVG format"));
file_menu->Append(MDI_CHILD_QUIT, wxT("&Close child\tCtrl+F4"));
file_menu->Append(MDI_QUIT, wxT("&Exit\tAlt+X"));
wxMenu *help_menu = new wxMenu;
help_menu->Append(MDI_ABOUT, wxT("&About"));
wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append(file_menu, wxT("&File"));
menu_bar->Append(help_menu, wxT("&Help"));
// Associate the menu bar with the frame
subframe->SetMenuBar(menu_bar);
subframe->Show(TRUE);
}
void MyFrame::OnSize(wxSizeEvent& WXUNUSED(event))
{
int w, h;
GetClientSize(&w, &h);
GetClientWindow()->SetSize(0, 0, w, h);
}
void MyFrame::InitToolBar(wxToolBar* toolBar)
{
const int maxBitmaps = 3 ;
wxBitmap* bitmaps[maxBitmaps];
bitmaps[0] = new wxBitmap( new_xpm );
bitmaps[1] = new wxBitmap( save_xpm );
bitmaps[2] = new wxBitmap( help_xpm );
int width = 16;
int currentX = 5;
toolBar->AddTool( MDI_NEW_WINDOW, *(bitmaps[0]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("New SVG test window"));
currentX += width + 5;
toolBar->AddTool( MDI_SAVE, *bitmaps[1], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, wxT("Save test in SVG format"));
currentX += width + 5;
toolBar->AddSeparator();
toolBar->AddTool(MDI_ABOUT, *bitmaps[2], wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, wxT("Help"));
toolBar->Realize();
int i;
for (i = 0; i < maxBitmaps; i++)
delete bitmaps[i];
}
void MyFrame::FileSavePicture (wxCommandEvent & WXUNUSED(event) )
{
MyChild * pChild = (MyChild *)GetActiveChild ();
if (pChild == NULL)
{
return ;
}
wxFileDialog dialog(this, wxT("Save Picture as"), wxEmptyString, pChild->GetTitle(),
wxT("SVG vector picture files (*.svg)|*.svg"),
wxSAVE|wxOVERWRITE_PROMPT);
if (dialog.ShowModal() == wxID_OK)
{
if (!pChild -> OnSave ( dialog.GetPath() ))
{
return ;
}
}
return ;
}
// Note that MDI_NEW_WINDOW and MDI_ABOUT commands get passed
// to the parent window for processing, so no need to
// duplicate event handlers here.
BEGIN_EVENT_TABLE(MyChild, wxMDIChildFrame)
EVT_MENU(MDI_CHILD_QUIT, MyChild::OnQuit)
EVT_CLOSE(MyChild::OnClose)
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
END_EVENT_TABLE()
// ---------------------------------------------------------------------------
// MyCanvas
// ---------------------------------------------------------------------------
// Define a constructor for my canvas
MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size)
: wxScrolledWindow(parent, -1, pos, size,
wxSUNKEN_BORDER|wxVSCROLL|wxHSCROLL)
{
m_child = (MyChild *) parent ;
SetBackgroundColour(wxColour("WHITE"));
m_index = m_child->m_frame->nWinCreated % 7 ;
}
// Define the repainting behaviour
void MyCanvas::OnDraw(wxDC& dc)
{
// vars to use ...
wxString s ;
wxPen wP ;
wxBrush wB ;
wxPoint points[6];
wxColour wC;
wxFont wF ;
dc.SetFont(*wxSWISS_FONT);
dc.SetPen(*wxGREEN_PEN);
switch (m_index)
{
default:
case 0:
// draw lines to make a cross
dc.DrawLine(0, 0, 200, 200);
dc.DrawLine(200, 0, 0, 200);
// draw point colored line and spline
wP = *wxCYAN_PEN ;
wP.SetWidth(3);
dc.SetPen(wP);
dc.DrawPoint (25,15) ;
dc.DrawLine(50, 30, 200, 30);
dc.DrawSpline(50, 200, 50, 100, 200, 10);
s = wxT("Green Cross, Cyan Line and spline");
break ;
case 1:
// draw standard shapes
dc.SetBrush(*wxCYAN_BRUSH);
dc.SetPen(*wxRED_PEN);
dc.DrawRectangle(10, 10, 100, 70);
wB = wxBrush ("DARK ORCHID", wxTRANSPARENT);
dc.SetBrush (wB);
dc.DrawRoundedRectangle(50, 50, 100, 70, 20);
dc.SetBrush (wxBrush("GOLDENROD", wxSOLID) );
dc.DrawEllipse(100, 100, 100, 50);
points[0].x = 100; points[0].y = 200;
points[1].x = 70; points[1].y = 260;
points[2].x = 160; points[2].y = 230;
points[3].x = 40; points[3].y = 230;
points[4].x = 130; points[4].y = 260;
points[5].x = 100; points[5].y = 200;
dc.DrawPolygon(5, points);
dc.DrawLines (6, points, 160);
s = wxT("Blue rectangle, red edge, clear rounded rectangle, gold ellipse, gold and clear stars");
break ;
case 2:
// draw text in Arial or similar font
dc.DrawLine(50,25,50,35);
dc.DrawLine(45,30,55,30);
dc.DrawText(wxT("This is a Swiss-style string"), 50, 30);
wC = dc.GetTextForeground() ;
dc.SetTextForeground ("FIREBRICK");
// no effect in msw ??
dc.SetTextBackground ("WHEAT");
dc.DrawText(wxT("This is a Red string"), 50, 200);
dc.DrawRotatedText(wxT("This is a 45 deg string"), 50, 200, 45);
dc.DrawRotatedText(wxT("This is a 90 deg string"), 50, 200, 90);
wF = wxFont ( 18, wxROMAN, wxITALIC, wxBOLD, FALSE, wxT("Times New Roman"));
dc.SetFont(wF);
dc.SetTextForeground (wC) ;
dc.DrawText(wxT("This is a Times-style string"), 50, 60);
s = wxT("Swiss, Times text; red text, rotated and colored orange");
break ;
case 3 :
// four arcs start and end points, center
dc.SetBrush(*wxGREEN_BRUSH);
dc.DrawArc ( 200,300, 370,230, 300.0,300.0 );
dc.SetBrush(*wxBLUE_BRUSH);
dc.DrawArc ( 270-50, 270-86, 270-86, 270-50, 270.0,270.0 );
dc.SetDeviceOrigin(-10,-10);
dc.DrawArc ( 270-50, 270-86, 270-86, 270-50, 270.0,270.0 );
dc.SetDeviceOrigin(0,0);
wP.SetColour ("CADET BLUE");
dc.SetPen(wP);
dc.DrawArc ( 75,125, 110, 40, 75.0, 75.0 );
wP.SetColour ("SALMON");
dc.SetPen(wP);
dc.SetBrush(*wxRED_BRUSH);
//top left corner, width and height, start and end angle
// 315 same center and x-radius as last pie-arc, half Y radius
dc.DrawEllipticArc(25,50,100,50,180.0,45.0) ;
wP = *wxCYAN_PEN ;
wP.SetWidth(3);
dc.SetPen(wP);
//wxTRANSPARENT));
dc.SetBrush (wxBrush ("SALMON",wxSOLID)) ;
dc.DrawEllipticArc(300, 0,200,100, 0.0,145.0) ;
//same end point
dc.DrawEllipticArc(300, 50,200,100,90.0,145.0) ;
dc.DrawEllipticArc(300,100,200,100,90.0,345.0) ;
s = wxT("This is an arc test page");
break ;
case 4:
dc.DrawCheckMark ( 30,30,25,25);
dc.SetBrush (wxBrush ("SALMON",wxTRANSPARENT));
dc.DrawCheckMark ( 80,50,75,75);
dc.DrawRectangle ( 80,50,75,75);
s = wxT("Two check marks");
break ;
case 5:
wF = wxFont ( 18, wxROMAN, wxITALIC, wxBOLD, FALSE, wxT("Times New Roman"));
dc.SetFont(wF);
dc.DrawLine(0, 0, 200, 200);
dc.DrawLine(200, 0, 0, 200);
dc.DrawText(wxT("This is an 18pt string"), 50, 60);
// rescale and draw in blue
wP = *wxCYAN_PEN ;
dc.SetPen(wP);
dc.SetUserScale (2.0,0.5);
dc.SetDeviceOrigin(200,0);
dc.DrawLine(0, 0, 200, 200);
dc.DrawLine(200, 0, 0, 200);
dc.DrawText(wxT("This is an 18pt string 2 x 0.5 UserScaled"), 50, 60);
dc.SetUserScale (2.0,2.0);
dc.SetDeviceOrigin(200,200);
dc.DrawText(wxT("This is an 18pt string 2 x 2 UserScaled"), 50, 60);
wP = *wxRED_PEN ;
dc.SetPen(wP);
dc.SetUserScale (1.0,1.0);
dc.SetDeviceOrigin(0,10);
dc.SetMapMode (wxMM_METRIC) ; //svg ignores this
dc.DrawLine(0, 0, 200, 200);
dc.DrawLine(200, 0, 0, 200);
dc.DrawText(wxT("This is an 18pt string in MapMode"), 50, 60);
s = wxT("Scaling test page");
break ;
case 6:
dc.DrawIcon( wxICON(mondrian), 10, 10 );
dc.DrawBitmap ( wxBITMAP (svgbitmap), 50,15);
s = wxT("Icon and Bitmap ");
break ;
}
m_child->SetStatusText(s);
}
// ---------------------------------------------------------------------------
// MyChild
// ---------------------------------------------------------------------------
MyChild::MyChild(wxMDIParentFrame *parent, const wxString& title,
const wxPoint& pos, const wxSize& size,
const long style)
: wxMDIChildFrame(parent, -1, title, pos, size, style)
{
m_frame = (MyFrame *) parent ;
CreateStatusBar();
SetStatusText(title);
int w, h ;
GetClientSize ( &w, &h );
m_canvas = new MyCanvas(this, wxPoint(0, 0), wxSize (w,h) );
// Give it scrollbars
m_canvas->SetScrollbars(20, 20, 50, 50);
}
MyChild::~MyChild()
{
m_frame->m_children.DeleteObject(this);
}
void MyChild::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(TRUE);
}
bool MyChild::OnSave(wxString filename)
{
wxSVGFileDC svgDC (filename, 600, 650) ;
m_canvas->OnDraw (svgDC);
return svgDC.Ok();
}
void MyChild::OnActivate(wxActivateEvent& event)
{
if ( event.GetActive() && m_canvas )
m_canvas->SetFocus();
}
void MyChild::OnClose(wxCloseEvent& event)
{
event.Skip();
}