use strategy pattern for moving the cursor

CursorPosition was a mishmash of unrelated move methods that started to
grow without boundaries. With this changeset, the moves are separated
into several smaller classes that are used as strategy in Cursor. New
movements can be added easily without any influence on the rest.

This change has two good side effects:
1. No Graphics object is needed, when the triggering event for the move
is handled (e.g. the key event).
2. The Cursor does not need to expose so much internal state via its
public interface. Now only ICursorMove instances get this information. 

Signed-off-by: Florian Thienel <>
11 files changed