// offset is expected to be between minOffset and maxOffset for this fragment
 float offsetToX(int offset) {
   return delegate.offsetToX(startX, 0, getRelativeOffset(offset));
 }
 // both startOffset and offset are expected to be between minOffset and maxOffset for this
 // fragment
 float offsetToX(float startX, int startOffset, int offset) {
   return delegate.offsetToX(startX, getRelativeOffset(startOffset), getRelativeOffset(offset));
 }
 float getEndX() {
   return delegate.offsetToX(startX, 0, getLength());
 }