//----------------------------------------------------------------------
// InkDropShadow.cs (c) 2005 by Charles Petzold, www.charlespetzold.com
//----------------------------------------------------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.Ink;

class InkDropShadow: Form
{
	InkOverlay inkov;

	public static void Main()
	{
		Application.Run(new InkDropShadow());
	}
	public InkDropShadow()
	{
		Text = "Ink Drop Shadow";
		BackColor = Color.White;
		Size = new Size(640, 480);

		// Create the Menu
		Menu = new MainMenu();
		Menu.MenuItems.Add("&Shadow!", new EventHandler(MenuShadowOnClick));
		Menu.MenuItems.Add("&Clear!", new EventHandler(MenuClearOnClick));

		// Create InkOverlay object attached to form
		inkov = new InkOverlay(this);
		inkov.DefaultDrawingAttributes.Width = 1000;			// = 1 centimeter
		inkov.DefaultDrawingAttributes.IgnorePressure = true;
		inkov.Enabled = true;
	}
	void MenuShadowOnClick(object objSrc, EventArgs args)
	{
		Ink ink = inkov.Ink;
		Strokes stks = ink.Strokes;

		// Shadows first
		foreach (Stroke stk in stks)
		{
			Stroke stkShadow = ink.CreateStroke(stk.GetPoints());
			stkShadow.DrawingAttributes = stk.DrawingAttributes.Clone();
			stkShadow.DrawingAttributes.Color = Color.Gray;
			stkShadow.Move(250, 250);
		}

		// Then the foreground text
		foreach (Stroke stk in stks)
		{
			Stroke stkText = ink.CreateStroke(stk.GetPoints());
			stkText.DrawingAttributes = stk.DrawingAttributes.Clone();
		}

		// Delete the original stroke from the Ink object
		foreach (Stroke stk in stks)
			ink.DeleteStroke(stk);

		Invalidate();
	}
	void MenuClearOnClick(object objSrc, EventArgs args)
	{
		inkov.Ink.DeleteStrokes();
		Refresh();
	}
}