+ if (start < 0 && end < 0) {
+ return oneSegment(length + start, length + end, path);
+ } else if (start > 0 && end > 0) {
+ if (start > length && end > length)
+ return oneSegment(start - length, end - length, path);
+ else if (start < length && end < length)
+ return oneSegment(start, end, path);
+ else {
+ float len1 = start > end ? start - length : end - length;
+ float start2 = start < end ? start : end;
+ float gap1 = start2 - len1;
+ float array[5] = {len1, gap1, length - start2, 1000, 0.0f};
+ VDasher dasher(array, 5);
+ return dasher.dashed(path);
+ }
+ } else {
+ float len1 = start > end ? start : end;
+ float start2 = start < end ? length + start : length + end;
+ float gap1 = start2 - len1;
+ float array[5] = {len1, gap1, length - start2, 1000, 0.0f};
+ VDasher dasher(array, 5);
+ return dasher.dashed(path);
+ }
+ }