@@ -13,6 +13,7 @@ public partial class Form1 : Form
1313 public Win32Surface Surface1 { get ; private set ; }
1414
1515 private readonly byte [ ] romedalenPngData ;
16+ private string lastSelected = "none" ;
1617
1718 public Form1 ( )
1819 {
@@ -40,6 +41,7 @@ protected override void OnPaint(PaintEventArgs e)
4041
4142 private void arcToolStripMenuItem_Click ( object sender , EventArgs e )
4243 {
44+ lastSelected = "arc" ;
4345 OnPaintAction = cr =>
4446 {
4547 double xc = 128.0 ;
@@ -71,6 +73,7 @@ private void arcToolStripMenuItem_Click(object sender, EventArgs e)
7173
7274 private void arcNegativeToolStripMenuItem_Click ( object sender , EventArgs e )
7375 {
76+ lastSelected = "arcNegative" ;
7477 OnPaintAction = cr =>
7578 {
7679 double xc = 128.0 ;
@@ -102,6 +105,7 @@ private void arcNegativeToolStripMenuItem_Click(object sender, EventArgs e)
102105
103106 private void clipToolStripMenuItem_Click ( object sender , EventArgs e )
104107 {
108+ lastSelected = "clip" ;
105109 OnPaintAction = cr =>
106110 {
107111 cr . Arc ( 128.0 , 128.0 , 76.8 , 0 , 2 * Math . PI ) ;
@@ -124,6 +128,7 @@ private void clipToolStripMenuItem_Click(object sender, EventArgs e)
124128
125129 private void clipImageToolStripMenuItem_Click ( object sender , EventArgs e )
126130 {
131+ lastSelected = "clipImage" ;
127132 OnPaintAction = cr =>
128133 {
129134 int w , h ;
@@ -150,6 +155,7 @@ private void clipImageToolStripMenuItem_Click(object sender, EventArgs e)
150155
151156 private void curveRectangleToolStripMenuItem_Click ( object sender , EventArgs e )
152157 {
158+ lastSelected = "curveRectangle" ;
153159 OnPaintAction = cr =>
154160 {
155161 /* a custom shape that could be wrapped in a function */
@@ -222,6 +228,7 @@ private void curveRectangleToolStripMenuItem_Click(object sender, EventArgs e)
222228
223229 private void curveToToolStripMenuItem_Click ( object sender , EventArgs e )
224230 {
231+ lastSelected = "curveTo" ;
225232 OnPaintAction = cr =>
226233 {
227234 double x = 25.6 , y = 128.0 ;
@@ -247,6 +254,7 @@ private void curveToToolStripMenuItem_Click(object sender, EventArgs e)
247254
248255 private void dashToolStripMenuItem_Click ( object sender , EventArgs e )
249256 {
257+ lastSelected = "dash" ;
250258 OnPaintAction = cr =>
251259 {
252260 double [ ] dashes =
@@ -274,6 +282,7 @@ private void dashToolStripMenuItem_Click(object sender, EventArgs e)
274282
275283 private void fillAndStroke2ToolStripMenuItem_Click ( object sender , EventArgs e )
276284 {
285+ lastSelected = "fillAndStroke2" ;
277286 OnPaintAction = cr =>
278287 {
279288 cr . MoveTo ( 128.0 , 25.6 ) ;
@@ -300,6 +309,7 @@ private void fillAndStroke2ToolStripMenuItem_Click(object sender, EventArgs e)
300309
301310 private void fillStyleToolStripMenuItem_Click ( object sender , EventArgs e )
302311 {
312+ lastSelected = "fillStyle" ;
303313 OnPaintAction = cr =>
304314 {
305315 cr . LineWidth = 6 ;
@@ -327,6 +337,7 @@ private void fillStyleToolStripMenuItem_Click(object sender, EventArgs e)
327337
328338 private void gradientToolStripMenuItem_Click ( object sender , EventArgs e )
329339 {
340+ lastSelected = "gradient" ;
330341 OnPaintAction = cr =>
331342 {
332343 Gradient pat = new LinearGradient ( 0.0 , 0.0 , 0.0 , 256.0 ) ;
@@ -352,6 +363,7 @@ private void gradientToolStripMenuItem_Click(object sender, EventArgs e)
352363
353364 private void imageToolStripMenuItem_Click ( object sender , EventArgs e )
354365 {
366+ lastSelected = "image" ;
355367 OnPaintAction = cr =>
356368 {
357369 int w , h ;
@@ -376,6 +388,7 @@ private void imageToolStripMenuItem_Click(object sender, EventArgs e)
376388
377389 private void imagepatternToolStripMenuItem_Click ( object sender , EventArgs e )
378390 {
391+ lastSelected = "imagepattern" ;
379392 OnPaintAction = cr =>
380393 {
381394 int w , h ;
@@ -413,6 +426,7 @@ private void imagepatternToolStripMenuItem_Click(object sender, EventArgs e)
413426
414427 private void multiSegmentCapsToolStripMenuItem_Click ( object sender , EventArgs e )
415428 {
429+ lastSelected = "multiSegmentCaps" ;
416430 OnPaintAction = cr =>
417431 {
418432 cr . MoveTo ( 50.0 , 75.0 ) ;
@@ -434,6 +448,7 @@ private void multiSegmentCapsToolStripMenuItem_Click(object sender, EventArgs e)
434448
435449 private void roundedRectangleToolStripMenuItem_Click ( object sender , EventArgs e )
436450 {
451+ lastSelected = "roundedRectangle" ;
437452 OnPaintAction = cr =>
438453 {
439454 /* a custom shape that could be wrapped in a function */
@@ -466,6 +481,7 @@ private void roundedRectangleToolStripMenuItem_Click(object sender, EventArgs e)
466481
467482 private void setLineCapToolStripMenuItem_Click ( object sender , EventArgs e )
468483 {
484+ lastSelected = "setLineCap" ;
469485 OnPaintAction = cr =>
470486 {
471487 cr . LineWidth = 30.0 ;
@@ -493,6 +509,7 @@ private void setLineCapToolStripMenuItem_Click(object sender, EventArgs e)
493509
494510 private void setLineJoinToolStripMenuItem_Click ( object sender , EventArgs e )
495511 {
512+ lastSelected = "setLineJoin" ;
496513 OnPaintAction = cr =>
497514 {
498515 cr . LineWidth = 40.96 ;
@@ -520,6 +537,7 @@ private void setLineJoinToolStripMenuItem_Click(object sender, EventArgs e)
520537
521538 private void textToolStripMenuItem_Click ( object sender , EventArgs e )
522539 {
540+ lastSelected = "text" ;
523541 OnPaintAction = cr =>
524542 {
525543 cr . SelectFontFace ( "Microsoft Sans Serif" , FontSlant . Normal , FontWeight . Bold ) ;
@@ -549,6 +567,7 @@ private void textToolStripMenuItem_Click(object sender, EventArgs e)
549567
550568 private void textAlignCenterToolStripMenuItem_Click ( object sender , EventArgs e )
551569 {
570+ lastSelected = "textAlignCenter" ;
552571 OnPaintAction = cr =>
553572 {
554573 string text = "cairo" ;
@@ -582,6 +601,7 @@ private void textAlignCenterToolStripMenuItem_Click(object sender, EventArgs e)
582601
583602 private void textExtentsToolStripMenuItem_Click ( object sender , EventArgs e )
584603 {
604+ lastSelected = "textExtents" ;
585605 OnPaintAction = cr =>
586606 {
587607 string text = "cairo" ;
@@ -613,5 +633,21 @@ private void textExtentsToolStripMenuItem_Click(object sender, EventArgs e)
613633
614634 Invalidate ( ) ;
615635 }
636+
637+ private void saveAsPngToolStripMenuItem_Click ( object sender , EventArgs e )
638+ {
639+ SaveFileDialog dialog = new SaveFileDialog ( ) ;
640+ dialog . Filter = "PNG|*.png" ;
641+ dialog . FileName = lastSelected ;
642+ if ( dialog . ShowDialog ( ) == DialogResult . OK )
643+ {
644+ using ( this . Graphics1 = this . CreateGraphics ( ) )
645+ using ( Surface1 = new Win32Surface ( Graphics1 . GetHdc ( ) ) )
646+ using ( Context1 = new Context ( Surface1 ) )
647+ {
648+ Surface1 . WriteToPng ( dialog . FileName ) ;
649+ }
650+ }
651+ }
616652 }
617653}
0 commit comments