this is fucking expensive ;) I would suggest to override dirty() and extend it with a orientationDirty flag to only calculate this when neccessary