1 /*
2  * Checkout program for the EMF library
3  * Copyright (C) 2002, 2003 lignum Computing, Inc. <dallenbarnett@users.sourceforge.net>
4  * $Id: check1.c 70 2015-11-21 21:14:35Z dallenbarnett $
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21 
22 #include <libEMF/emf.h>
23 
24 static XFORM xform = { 2., 0., 0., 2., -3., -4. };
25 
26 static POINT plarray[4] = { { -4, -3 }, { -2, -1 }, { 0, 1 }, { 2, 3 } };
27 static POINT plarrayl[4] = { { -400000, -300000 }, { -200000, -100000 },
28 			     { 0, 100000 }, { 200000, 300000 } };
29 static POINT pltoarray[4] = { { -10, -20 }, { -30, -40 }, { 50, 61 }, { 72, 83 } };
30 static POINT pltoarrayl[4] = { { -1000000, -2000000 }, { -3000000, -4000000 },
31 			       { 5000000, 6100000 }, { 7200000, 8300000 } };
32 static POINT pgarray[4] = {
33   { -400, -300 }, { -200, -100 }, { 0, 100 }, { 200, 300 }
34 };
35 static POINT pgarrayl[4] = {
36   { -40000000, -30000000 }, { -20000000, -10000000 },
37   { 0, 10000000 }, { 20000000, 30000000 }
38 };
39 static INT advances[7] = { 11, 22, 33, 44, 55, 66, 77 };
40 static POINT plplarray[7] = { { -101, -201 }, { -301, -401 }, { -501, -601 },
41 			      { 101, 201 }, { 301, 401 }, { 501, 601 }, { 701, 801 } };
42 static POINT plplarrayl[7] = { { -10100000, -20100000 }, { -30100000, -40100000 },
43 			       { -50100000, -60100000 },
44 			       { 10100000, 20100000 }, { 30100000, 40100000 },
45 			       { 50100000, 60100000 }, { 70100000, 80100000 } };
46 static INT plplsizes[2] = { 3, 4 };
47 static LOGPEN lpen = { PS_SOLID, {20,20}, RGB(0,0xff,0xff) };
48 static LOGBRUSH lbrush = { BS_HATCHED, RGB(0x0,0x0,0xff), HS_DIAGCROSS };
49 
main(int argc,char * argv[])50 int main ( int argc, char* argv[] )
51 {
52   (void)argc;
53   (void)argv;
54 
55   HWND desktop = GetDesktopWindow();
56   HDC dc = GetDC( desktop );
57 
58   RECT size = { 0, 0, 10000, 20000 }; /* 10cm x 20cm */
59   PCSTR filename = "check1.emf";
60   PCSTR description = "Test metafile created\0with libEMF\0";
61 
62   HENHMETAFILE mfh;
63   HDC metaDC = CreateEnhMetaFile( dc, filename, &size, description );
64 
65   HPEN pen;
66   HBRUSH brush;
67   HFONT font;
68 
69   FLOAT old_miter_limit;
70 
71   SetViewportOrgEx( metaDC, 123, 456, 0 );
72   SetViewportExtEx( metaDC, 789, 1011, 0 );
73   ScaleViewportExtEx( metaDC, 1, 2, 1, 2, 0 );
74 
75   SetWindowOrgEx( metaDC, 124, 248, 0 );
76   SetWindowExtEx( metaDC, 481, 812, 0 );
77   ScaleWindowExtEx( metaDC, 1, 2, 1, 2, 0 );
78 
79   ModifyWorldTransform( metaDC, &xform, MWT_IDENTITY );
80   SetWorldTransform( metaDC, &xform );
81 
82   SetTextColor( metaDC, RGB(0x12,0x34,0x56) );
83   SetTextAlign( metaDC, TA_CENTER+TA_BASELINE );
84   SetBkMode( metaDC, TRANSPARENT );
85   SetBkColor( metaDC, RGB(0x78,0x9a,0xbc) );
86   SetPolyFillMode( metaDC, WINDING );
87   SetMapMode( metaDC, MM_ANISOTROPIC );
88 
89   SelectObject( metaDC, GetStockObject( WHITE_BRUSH ) );
90 
91   MoveToEx( metaDC, 123, 456, 0 );
92   LineTo( metaDC, 789, 1011 );
93 
94   Arc( metaDC, 12, 23, 34, 45, 56, 67, 78, 89 );
95   ArcTo( metaDC, 12, 23, 34, 45, 56, 67, 78, 89 );
96 
97   Rectangle( metaDC, 98, 76, 54, 32 );
98   Ellipse( metaDC, 32, 54, 76, 98 );
99 
100   SetMiterLimit( metaDC, 20.f, &old_miter_limit );
101   Polyline( metaDC, plarray, 4 );
102   Polyline( metaDC, plarrayl, 4 );
103   PolylineTo( metaDC, pltoarray, 4 );
104   PolylineTo( metaDC, pltoarrayl, 4 );
105   PolyBezier( metaDC, plarray, 4 );
106   PolyBezier( metaDC, plarrayl, 4 );
107   PolyBezierTo( metaDC, pltoarray, 4 );
108   PolyBezierTo( metaDC, pltoarrayl, 4 );
109   Polygon( metaDC, pgarray, 4 );
110   Polygon( metaDC, pgarrayl, 4 );
111   PolyPolygon( metaDC, plplarray, plplsizes, 2 );
112   PolyPolygon( metaDC, plplarrayl, plplsizes, 2 );
113 
114   TextOut( metaDC, 50, 75, "A larger font, e?", 17 );
115   ExtTextOut( metaDC, 100, 200, ETO_GRAYED|ETO_CLIPPED, 0, "And now", 7, advances );
116 
117   pen = CreatePenIndirect( &lpen );
118   SelectObject( metaDC, pen );
119   SelectObject( metaDC, GetStockObject( GRAY_BRUSH ) );
120   DeleteObject( GetStockObject( GRAY_BRUSH ) );
121 
122   brush = CreateBrushIndirect( &lbrush );
123   SelectObject( metaDC, brush );
124 
125   font = CreateFont( -11, 0, 0, 0, FW_BOLD, 0, 0, 0, ANSI_CHARSET,
126 		     OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
127 		     DEFAULT_PITCH | FF_DONTCARE, "Helvetica" );
128   SelectObject( metaDC, font );
129   DeleteObject( font );
130   DeleteObject( brush );
131   DeleteObject( pen );
132 
133   BeginPath( metaDC );
134   EndPath( metaDC );
135   CloseFigure( metaDC );
136 
137   FillPath( metaDC );
138   StrokePath( metaDC );
139   StrokeAndFillPath( metaDC );
140 
141   SetPixel( metaDC, 123, 456, RGB(0x24,0x68,0xac) );
142 
143   SaveDC( metaDC );
144   SetMetaRgn( metaDC );
145   RestoreDC( metaDC, 1 );
146 
147   pen = ExtCreatePen( PS_SOLID, 1, &lbrush, 0, 0 );
148   SelectObject( metaDC, pen );
149   DeleteObject( pen );
150 
151   mfh = CloseEnhMetaFile( metaDC );
152   DeleteEnhMetaFile( mfh );
153   DeleteDC( metaDC );
154 
155   return 0;
156 }
157