Simple Paint Application

Here's a screenshot of a typical "Paint" application:


It has the following features:

  1. The "pencil" or "brush" tool let you draw freely on the canvas.
    You can select the color from either Black, Red, Green, or Blue.
    You can also select from four different thicknesses.
  2. The "text" tool lets you add text on the canvas.
  3. The "line" tool lets you draw straight lines on the canvas.
  4. The "rectangle" tool lets you draw rectangles on the canvas.
  5. The "ellipse" tool lets you draw ellipses on the canvas.
  6. The "rounded rectangle" tool lets you draw rectangles with rounded corners.

There is no support for saving or opening files, no undo, no eraser, etc.

It can be easily implemented in WPF and C# by using a combination of InkCanvas and other built-in WPF controls.  The layout and look of the buttons is irrelevant and can be changed, as long as it's obvious what they do.

I am looking for the ability to write clean and elegant code that is easily maintainable.  I don't want to see messy code even if it successfully implements all of the features.  Research software will always evolve over time and if the code is too messy or too hard to change then it may get thrown away.  This doesn't mean that the code should be "reusable" or "extensible".  Rather, the code should be "evolvable", meaning it should be easy to understand and easy to change.