void shapeReset(SwShape& shape);
bool shapeGenOutline(SwShape& shape, const Shape* sdata);
-bool shapeGenRle(SwShape& shape, const Shape* sdata, const SwSize& clip, const Matrix* transform);
+bool shapePrepare(SwShape& shape, const Shape* sdata, const SwSize& clip, const Matrix* transform);
+bool shapeGenRle(SwShape& shape, const Shape* sdata, const SwSize& clip);
void shapeDelOutline(SwShape& shape);
void shapeResetStroke(SwShape& shape, const Shape* sdata);
bool shapeGenStrokeRle(SwShape& shape, const Shape* sdata, const SwSize& clip);
shapeReset(task->shape);
uint8_t alpha = 0;
task->sdata->fill(nullptr, nullptr, nullptr, &alpha);
- if (alpha > 0 || task->sdata->fill() || strokeAlpha > 0) {
- if (!shapeGenRle(task->shape, task->sdata, task->clip, task->transform)) return;
+ bool renderShape = (alpha > 0 || task->sdata->fill());
+ if (renderShape || strokeAlpha > 0) {
+ if (!shapePrepare(task->shape, task->sdata, task->clip, task->transform)) return;
+ if (renderShape) {
+ if (!shapeGenRle(task->shape, task->sdata, task->clip)) return;
+ }
}
}
//Fill
/* External Class Implementation */
/************************************************************************/
-bool shapeGenRle(SwShape& shape, const Shape* sdata, const SwSize& clip, const Matrix* transform)
+bool shapePrepare(SwShape& shape, const Shape* sdata, const SwSize& clip, const Matrix* transform)
{
if (!shapeGenOutline(shape, sdata)) return false;
_transformOutline(shape.outline, transform);
- if (!_updateBBox(shape.outline, shape.bbox)) goto end;
+ if (!_updateBBox(shape.outline, shape.bbox)) return false;
- if (!_checkValid(shape.outline, shape.bbox, clip)) goto end;
+ if (!_checkValid(shape.outline, shape.bbox, clip)) return false;
+
+ return true;
+}
- //Case: Fast Track Rectangle Drawing
- if ((shape.rect = _fastTrack(shape.outline))) return true;
+bool shapeGenRle(SwShape& shape, const Shape* sdata, const SwSize& clip)
+{
+ //FIXME: Should we draw it?
//Case: Stroke Line
- if (shape.outline->opened) return true;
+ //if (shape.outline->opened) return true;
+
+ //Case A: Fast Track Rectangle Drawing
+ if ((shape.rect = _fastTrack(shape.outline))) return true;
+ //Case B: Normale Shape RLE Drawing
+ if ((shape.rle = rleRender(shape.outline, shape.bbox, clip))) return true;
- shape.rle = rleRender(shape.outline, shape.bbox, clip);
-end:
- if (shape.rle) return true;
return false;
}