inner implementation still only handles one dirty rectangle, but this way we can prepare supporting applictions for the future.