Blob Blame Raw
using System;

namespace Assistance {
	[Flags]
	public enum Modifiers {
		None = 0,
		Interpolation = 1,
		Guideline = 2,
		Multiline = 4
	};

	public class Tool {
		public Modifiers getAvailableModifiers()
			{ return Modifiers.None; }

		public void activate() { }

		public void keyPress(Gdk.Key key, InputState state) { }
		public void keyRelease(Gdk.Key key, InputState state) { }
		public void buttonPress(Gdk.Device device, uint button, InputState state) { }
		public void buttonRelease(Gdk.Device device, uint button, InputState state) { }
	
		public bool paintBegin() { return false; }
		public void paintTrackBegin(Track track) { }
		public void paintTrackPoint(Track track) { }
		public void paintTrackEnd(Track track) { }
		public bool paintApply() { return false; }
		public void paintCancel() { }

		public void draw(Cairo.Context context) { }

		public void deactivate() { }
	}
}

/*
TODO:
		//////////////////////////////////////////
		// deprecated
		//////////////////////////////////////////

		public static readonly Pen pen = new Pen("Dark Green", 3.0);
		public static readonly Pen penSpecial = new Pen("Blue", 3.0);
		public static readonly Pen penPreview = new Pen("Dark Green", 1.0, 0.25);

		public void draw(Cairo.Context context, bool preview = false) {
			if (preview) {
				if (points.Count < 2)
					return;
				context.Save();
				penPreview.apply(context);
				context.MoveTo(points[0].point.x, points[0].point.y);
				for(int i = 1; i < points.Count; ++i)
					context.LineTo(points[i].point.x, points[i].point.y);
				context.Stroke();
				context.Restore();
			} else {
				context.Save();
				pen.apply(context);
				foreach(TrackPoint p in points) {
					double t = p.keyState.howLongPressed(Gdk.Key.m)
					         + p.buttonState.howLongPressed(3);
					double w = p.pressure*pen.width + 5.0*t;
					context.Arc(p.point.x, p.point.y, 2.0*w, 0.0, 2.0*Math.PI);
					context.Fill();
				}
				context.Restore();
			}
		}
		
		public Rectangle getBounds() {
			if (points.Count == 0)
				return new Rectangle();
			Rectangle bounds = new Rectangle(points[0].point);
			foreach(TrackPoint p in points)
				bounds = bounds.expand(p.point);
			return bounds.inflate(Math.Max(pen.width, penPreview.width) + 2.0);
		}
*/