DXライブラリで角丸四角形を描く

要するに某アニメのEDで見た

こういうのがやってみたかっただけという。

作ったのがこれです。ろくなエラー処理してません。正方形前提なので縦横の長さが違うと失敗します。

int DrawRoundBox( int x1 , int y1 , int x2 , int y2 , int Color )
{
    int result = -1;
    int r = static_cast<int>(((x2 - x1) * 0.17 )/ 2);

    if(x2 - x1 != y2 - y1) return result;

    /* 四隅の円 */
    if((result = DrawCircle(x1 + r,     y1 + r,     r, Color, TRUE)) != 0)
        return result;
    if((result = DrawCircle(x2 - r - 1, y1 + r,     r, Color, TRUE)) != 0)
        return result;
    if((result = DrawCircle(x1 + r,     y2 - r - 1, r, Color, TRUE)) != 0)
        return result;
    if((result = DrawCircle(x2 - r - 1, y2 - r - 1, r, Color, TRUE)) != 0)
        return result;

    /* 円に被らない長方形 */
    if((result = DrawBox(x1, y1 + r, x2, y2 - r, Color, TRUE)) != 0)
        return result;
    if((result = DrawBox(x1 + r, y1, x2 - r, y2, Color, TRUE)) != 0)
        return result;

    return result;
}

描画イメージはこのように、四隅に適当な大きさの円を描いてからそれに被らない長方形を縦横それぞれ描いています。

適当に敷き詰めたらこんな感じになりました。まあいい感じ。