view dmdrawline.h @ 60:f28cd66356f6

Initial work for bitmapped fonts and text drawing. Also moved TTF header stuff to dmtext.h.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 01 Oct 2012 09:46:56 +0300
parents 997e26f17946
children 92cc5e1fa180
line wrap: on
line source


static int DM_DRAWLINE_NAME (SDL_Surface *screen, int x0, int y0, int x1, int y1, const Uint32 col)
{
    int dx, dy, xstep, ystep;
    const int qpitch = screen->pitch / DM_DRAWLINE_DST_BYTES;

    // Clipping
    if (dmClipLineCoords(&x0, &y0, &x1, &y1, screen))
        return -1;

    // Compute initial deltas
    dx = (x1 - x0) * 2;
    dy = (y1 - y0) * 2;

    if (dx < 0)
    {
        dx = -dx;
        xstep = -1;
    }
    else
        xstep = 1;

    if (dy < 0)
    {
        dy = -dy;
        ystep = -qpitch;
    }
    else
        ystep = qpitch;

    // Compute offsets
    y0 *= qpitch;
    y1 *= qpitch;

    DM_DRAWLINE_DST_TYPE *pix = screen->pixels;

    // Continue based on which delta is larger
    if (dx > dy)
    {
        int afrac = dy - (dx / 2);
        while (x0 != x1)
        {
            if (afrac >= 0)
            {
                y0 += ystep;
                afrac -= dx;
            }

            x0 += xstep;
            afrac += dy;
            
            DM_DRAWLINE_INNER
        }
    }
    else
    {
        int afrac = dx - (dy / 2);
        while (y0 != y1)
        {
            if (afrac >= 0)
            {
                x0 += xstep;
                afrac -= dy;
            }

            y0 += ystep;
            afrac += dx;

            DM_DRAWLINE_INNER
        }
    }

    return 0;
}

#undef DM_DRAWLINE_NAME
#undef DM_DRAWLINE_DST_BYTES
#undef DM_DRAWLINE_DST_TYPE