void KisOutlineGenerator::nextOutlineEdge(StorageStrategy &storage, EdgeType *edge, qint32 *row, qint32 *col, qint32 width, qint32 height) { int original_row = *row; int original_col = *col; switch (*edge) { case RightEdge: TRY_PIXEL(-1, 0, RightEdge); TRY_PIXEL(-1, 1, BottomEdge); break; case TopEdge: TRY_PIXEL(0, -1, TopEdge); TRY_PIXEL(-1, -1, RightEdge); break; case LeftEdge: TRY_PIXEL(1, 0, LeftEdge); TRY_PIXEL(1, -1, TopEdge); break; case BottomEdge: TRY_PIXEL(0, 1, BottomEdge); TRY_PIXEL(1, 1, LeftEdge); break; default: break; } if (*row == original_row && *col == original_col) *edge = nextEdge(*edge); }
void KisPixelSelection::nextOutlineEdge(EdgeType *edge, qint32 *row, qint32 *col, quint8* buffer, qint32 width, qint32 height) { int original_row = *row; int original_col = *col; switch (*edge) { case RightEdge: TRY_PIXEL(-1, 0, RightEdge); TRY_PIXEL(-1, 1, BottomEdge); break; case TopEdge: TRY_PIXEL(0, -1, TopEdge); TRY_PIXEL(-1, -1, RightEdge); break; case LeftEdge: TRY_PIXEL(1, 0, LeftEdge); TRY_PIXEL(1, -1, TopEdge); break; case BottomEdge: TRY_PIXEL(0, 1, BottomEdge); TRY_PIXEL(1, 1, LeftEdge); break; default: break; } if (*row == original_row && *col == original_col) *edge = nextEdge(*edge); }