mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-22 18:37:01 +00:00
GUI: clippingRect propagated deeper
This commit is contained in:
parent
d7278cc48b
commit
3d2730a0dd
@ -173,6 +173,7 @@ public:
|
||||
* @param r Radius of the corners.
|
||||
*/
|
||||
virtual void drawRoundedSquare(int x, int y, int r, int w, int h) = 0;
|
||||
virtual void drawRoundedSquareClip(int x, int y, int r, int w, int h, int cx, int cy, int cw, int ch) = 0;
|
||||
|
||||
/**
|
||||
* Draws a triangle starting at (x,y) with the given base and height.
|
||||
@ -379,7 +380,7 @@ public:
|
||||
void drawCallback_ROUNDSQ(const Common::Rect &area, const DrawStep &step, const Common::Rect &clip) { //TODO
|
||||
uint16 x, y, w, h;
|
||||
stepGetPositions(step, area, x, y, w, h);
|
||||
drawRoundedSquare(x, y, stepGetRadius(step, area), w, h);
|
||||
drawRoundedSquareClip(x, y, stepGetRadius(step, area), w, h, clip.left, clip.top, clip.right-clip.left, clip.bottom-clip.top);
|
||||
}
|
||||
|
||||
void drawCallback_FILLSURFACE(const Common::Rect &area, const DrawStep &step, const Common::Rect &clip) { //TODO
|
||||
|
@ -918,6 +918,29 @@ drawRoundedSquare(int x, int y, int r, int w, int h) {
|
||||
drawRoundedSquareAlg(x, y, r, w, h, _fgColor, Base::_fillMode);
|
||||
}
|
||||
|
||||
template<typename PixelType>
|
||||
void VectorRendererSpec<PixelType>::
|
||||
drawRoundedSquareClip(int x, int y, int r, int w, int h, int cx, int cy, int cw, int ch) {
|
||||
if (x + w > Base::_activeSurface->w || y + h > Base::_activeSurface->h ||
|
||||
w <= 0 || h <= 0 || x < 0 || y < 0 || r <= 0)
|
||||
return;
|
||||
|
||||
if ((r * 2) > w || (r * 2) > h)
|
||||
r = MIN(w / 2, h / 2);
|
||||
|
||||
if (r <= 0)
|
||||
return;
|
||||
|
||||
if (Base::_fillMode != kFillDisabled && Base::_shadowOffset
|
||||
&& x + w + Base::_shadowOffset + 1 < Base::_activeSurface->w
|
||||
&& y + h + Base::_shadowOffset + 1 < Base::_activeSurface->h
|
||||
&& h > (Base::_shadowOffset + 1) * 2) {
|
||||
drawRoundedSquareShadow(x, y, r, w, h, Base::_shadowOffset);
|
||||
}
|
||||
|
||||
drawRoundedSquareAlg(x, y, r, w, h, _fgColor, Base::_fillMode);
|
||||
}
|
||||
|
||||
template<typename PixelType>
|
||||
void VectorRendererSpec<PixelType>::
|
||||
drawTab(int x, int y, int r, int w, int h) {
|
||||
|
@ -54,6 +54,7 @@ public:
|
||||
void drawCircle(int x, int y, int r);
|
||||
void drawSquare(int x, int y, int w, int h);
|
||||
void drawRoundedSquare(int x, int y, int r, int w, int h);
|
||||
void drawRoundedSquareClip(int x, int y, int r, int w, int h, int cx, int cy, int cw, int ch);
|
||||
void drawTriangle(int x, int y, int base, int height, TriangleOrientation orient);
|
||||
void drawTab(int x, int y, int r, int w, int h);
|
||||
void drawBeveledSquare(int x, int y, int w, int h, int bevel) {
|
||||
|
@ -898,9 +898,8 @@ void ThemeEngine::queueDDClip(DrawData type, const Common::Rect &r, const Common
|
||||
|
||||
Common::Rect area = r;
|
||||
area.clip(_screen.w, _screen.h);
|
||||
area.clip(clippingRect);
|
||||
|
||||
ThemeItemDrawData *q = new ThemeItemDrawData(this, _widgets[type], area, dynamic);
|
||||
ThemeItemDrawDataClip *q = new ThemeItemDrawDataClip(this, _widgets[type], area, clippingRect, dynamic);
|
||||
|
||||
if (_buffering) {
|
||||
if (_widgets[type]->_buffer) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user