mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-26 03:52:01 +02:00
Implemeted wider lines for upscaled mode
This commit is contained in:
parent
095f5b5e60
commit
6a17c08b7e
@ -145,19 +145,14 @@ void Canvas::drawPoint(const Point & dest, const ColorRGBA & color)
|
||||
|
||||
void Canvas::drawLine(const Point & from, const Point & dest, const ColorRGBA & colorFrom, const ColorRGBA & colorDest)
|
||||
{
|
||||
CSDL_Ext::drawLine(surface, transformPos(from), transformPos(dest), CSDL_Ext::toSDL(colorFrom), CSDL_Ext::toSDL(colorDest));
|
||||
}
|
||||
|
||||
void Canvas::drawLineDashed(const Point & from, const Point & dest, const ColorRGBA & color)
|
||||
{
|
||||
CSDL_Ext::drawLineDashed(surface, transformPos(from), transformPos(dest), CSDL_Ext::toSDL(color));
|
||||
CSDL_Ext::drawLine(surface, transformPos(from), transformPos(dest), CSDL_Ext::toSDL(colorFrom), CSDL_Ext::toSDL(colorDest), getScalingFactor());
|
||||
}
|
||||
|
||||
void Canvas::drawBorder(const Rect & target, const ColorRGBA & color, int width)
|
||||
{
|
||||
Rect realTarget = target * getScalingFactor() + renderArea.topLeft();
|
||||
|
||||
CSDL_Ext::drawBorder(surface, realTarget.x, realTarget.y, realTarget.w, realTarget.h, CSDL_Ext::toSDL(color), width);
|
||||
CSDL_Ext::drawBorder(surface, realTarget.x, realTarget.y, realTarget.w, realTarget.h, CSDL_Ext::toSDL(color), width * getScalingFactor());
|
||||
}
|
||||
|
||||
void Canvas::drawBorderDashed(const Rect & target, const ColorRGBA & color)
|
||||
|
@ -91,9 +91,6 @@ public:
|
||||
/// renders continuous, 1-pixel wide line with color gradient
|
||||
void drawLine(const Point & from, const Point & dest, const ColorRGBA & colorFrom, const ColorRGBA & colorDest);
|
||||
|
||||
/// renders dashed, 1-pixel wide line with specified color
|
||||
void drawLineDashed(const Point & from, const Point & dest, const ColorRGBA & color);
|
||||
|
||||
/// renders rectangular, solid-color border in specified location
|
||||
void drawBorder(const Rect & target, const ColorRGBA & color, int width = 1);
|
||||
|
||||
|
@ -449,32 +449,35 @@ static void drawLineY(SDL_Surface * sur, int x1, int y1, int x2, int y2, const S
|
||||
}
|
||||
}
|
||||
|
||||
void CSDL_Ext::drawLine(SDL_Surface * sur, const Point & from, const Point & dest, const SDL_Color & color1, const SDL_Color & color2)
|
||||
void CSDL_Ext::drawLine(SDL_Surface * sur, const Point & from, const Point & dest, const SDL_Color & color1, const SDL_Color & color2, int thickness)
|
||||
{
|
||||
//FIXME: duplicated code with drawLineDashed
|
||||
int width = std::abs(from.x - dest.x);
|
||||
int height = std::abs(from.y - dest.y);
|
||||
|
||||
if ( width == 0 && height == 0)
|
||||
if(width == 0 && height == 0)
|
||||
{
|
||||
uint8_t *p = CSDL_Ext::getPxPtr(sur, from.x, from.y);
|
||||
uint8_t * p = CSDL_Ext::getPxPtr(sur, from.x, from.y);
|
||||
ColorPutter<4>::PutColorAlpha(p, color1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (width > height)
|
||||
for(int i = 0; i < thickness; ++i)
|
||||
{
|
||||
if ( from.x < dest.x)
|
||||
drawLineX(sur, from.x, from.y, dest.x, dest.y, color1, color2);
|
||||
if(width > height)
|
||||
{
|
||||
if(from.x < dest.x)
|
||||
drawLineX(sur, from.x, from.y + i, dest.x, dest.y + i, color1, color2);
|
||||
else
|
||||
drawLineX(sur, dest.x, dest.y, from.x, from.y, color2, color1);
|
||||
drawLineX(sur, dest.x, dest.y + i, from.x, from.y + i, color2, color1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( from.y < dest.y)
|
||||
drawLineY(sur, from.x, from.y, dest.x, dest.y, color1, color2);
|
||||
if(from.y < dest.y)
|
||||
drawLineY(sur, from.x + i, from.y, dest.x + i, dest.y, color1, color2);
|
||||
else
|
||||
drawLineY(sur, dest.x, dest.y, from.x, from.y, color2, color1);
|
||||
drawLineY(sur, dest.x + i, dest.y, from.x + i, from.y, color2, color1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,7 @@ using TColorPutterAlpha = void (*)(uint8_t *&, const uint8_t &, const uint8_t &,
|
||||
int blit8bppAlphaTo24bpp(const SDL_Surface * src, const Rect & srcRect, SDL_Surface * dst, const Point & dstPoint, uint8_t alpha); //blits 8 bpp surface with alpha channel to 24 bpp surface
|
||||
uint32_t colorTouint32_t(const SDL_Color * color); //little endian only
|
||||
|
||||
void drawLine(SDL_Surface * sur, const Point & from, const Point & dest, const SDL_Color & color1, const SDL_Color & color2);
|
||||
void drawLine(SDL_Surface * sur, const Point & from, const Point & dest, const SDL_Color & color1, const SDL_Color & color2, int width);
|
||||
void drawLineDashed(SDL_Surface * sur, const Point & from, const Point & dest, const SDL_Color & color);
|
||||
|
||||
void drawBorder(SDL_Surface * sur, int x, int y, int w, int h, const SDL_Color & color, int depth = 1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user