added everything
This commit is contained in:
517
engine/gui/core/guiDefaultControlRender.cc
Executable file
517
engine/gui/core/guiDefaultControlRender.cc
Executable file
@@ -0,0 +1,517 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (c) 2002 GarageGames.Com
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "dgl/dgl.h"
|
||||
#include "gui/core/guiDefaultControlRender.h"
|
||||
#include "gui/core/guiTypes.h"
|
||||
#include "core/color.h"
|
||||
#include "math/mRect.h"
|
||||
|
||||
static ColorI colorLightGray(192, 192, 192);
|
||||
static ColorI colorGray(128, 128, 128);
|
||||
static ColorI colorDarkGray(64, 64, 64);
|
||||
static ColorI colorWhite(255,255,255);
|
||||
static ColorI colorBlack(0,0,0);
|
||||
|
||||
void renderRaisedBox(RectI &bounds, GuiControlProfile *profile)
|
||||
{
|
||||
S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1;
|
||||
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1;
|
||||
|
||||
dglDrawRectFill( bounds, profile->mFillColor);
|
||||
dglDrawLine(l, t, l, b - 1, profile->mBevelColorHL);
|
||||
dglDrawLine(l, t, r - 1, t, profile->mBevelColorHL);
|
||||
|
||||
dglDrawLine(l, b, r, b, profile->mBevelColorLL);
|
||||
dglDrawLine(r, b - 1, r, t, profile->mBevelColorLL);
|
||||
|
||||
dglDrawLine(l + 1, b - 1, r - 1, b - 1, profile->mBorderColor);
|
||||
dglDrawLine(r - 1, b - 2, r - 1, t + 1, profile->mBorderColor);
|
||||
}
|
||||
|
||||
void renderSlightlyRaisedBox(RectI &bounds, GuiControlProfile *profile)
|
||||
{
|
||||
S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1;
|
||||
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1;
|
||||
|
||||
dglDrawRectFill( bounds, profile->mFillColor);
|
||||
dglDrawLine(l, t, l, b, profile->mBevelColorHL);
|
||||
dglDrawLine(l, t, r, t, profile->mBevelColorHL);
|
||||
dglDrawLine(l + 1, b, r, b, profile->mBorderColor);
|
||||
dglDrawLine(r, t + 1, r, b - 1, profile->mBorderColor);
|
||||
}
|
||||
|
||||
void renderLoweredBox(RectI &bounds, GuiControlProfile *profile)
|
||||
{
|
||||
S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1;
|
||||
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1;
|
||||
|
||||
dglDrawRectFill( bounds, profile->mFillColor);
|
||||
|
||||
dglDrawLine(l, b, r, b, profile->mBevelColorHL);
|
||||
dglDrawLine(r, b - 1, r, t, profile->mBevelColorHL);
|
||||
|
||||
dglDrawLine(l, t, r - 1, t, profile->mBevelColorLL);
|
||||
dglDrawLine(l, t + 1, l, b - 1, profile->mBevelColorLL);
|
||||
|
||||
dglDrawLine(l + 1, t + 1, r - 2, t + 1, profile->mBorderColor);
|
||||
dglDrawLine(l + 1, t + 2, l + 1, b - 2, profile->mBorderColor);
|
||||
}
|
||||
|
||||
void renderSlightlyLoweredBox(RectI &bounds, GuiControlProfile *profile)
|
||||
{
|
||||
S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1;
|
||||
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1;
|
||||
|
||||
dglDrawRectFill( bounds, profile->mFillColor);
|
||||
dglDrawLine(l, b, r, b, profile->mBevelColorHL);
|
||||
dglDrawLine(r, t, r, b - 1, profile->mBevelColorHL);
|
||||
dglDrawLine(l, t, l, b - 1, profile->mBorderColor);
|
||||
dglDrawLine(l + 1, t, r - 1, t, profile->mBorderColor);
|
||||
}
|
||||
|
||||
void renderBorder(RectI &bounds, GuiControlProfile *profile)
|
||||
{
|
||||
S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1;
|
||||
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1;
|
||||
|
||||
switch(profile->mBorder)
|
||||
{
|
||||
case 1:
|
||||
dglDrawRect(bounds, profile->mBorderColor);
|
||||
break;
|
||||
case 2:
|
||||
dglDrawLine(l + 1, t + 1, l + 1, b - 2, profile->mBevelColorHL);
|
||||
dglDrawLine(l + 2, t + 1, r - 2, t + 1, profile->mBevelColorHL);
|
||||
dglDrawLine(r, t, r, b, profile->mBevelColorHL);
|
||||
dglDrawLine(l, b, r - 1, b, profile->mBevelColorHL);
|
||||
dglDrawLine(l, t, r - 1, t, profile->mBorderColorNA);
|
||||
dglDrawLine(l, t + 1, l, b - 1, profile->mBorderColorNA);
|
||||
dglDrawLine(l + 1, b - 1, r - 1, b - 1, profile->mBorderColorNA);
|
||||
dglDrawLine(r - 1, t + 1, r - 1, b - 2, profile->mBorderColorNA);
|
||||
break;
|
||||
case 3:
|
||||
dglDrawLine(l, b, r, b, profile->mBevelColorHL);
|
||||
dglDrawLine(r, t, r, b - 1, profile->mBevelColorHL);
|
||||
dglDrawLine(l + 1, b - 1, r - 1, b - 1, profile->mFillColor);
|
||||
dglDrawLine(r - 1, t + 1, r - 1, b - 2, profile->mFillColor);
|
||||
dglDrawLine(l, t, l, b - 1, profile->mBorderColorNA);
|
||||
dglDrawLine(l + 1, t, r - 1, t, profile->mBorderColorNA);
|
||||
dglDrawLine(l + 1, t + 1, l + 1, b - 2, profile->mBevelColorLL);
|
||||
dglDrawLine(l + 2, t + 1, r - 2, t + 1, profile->mBevelColorLL);
|
||||
break;
|
||||
case 4:
|
||||
dglDrawLine(l, t, l, b - 1, profile->mBevelColorHL);
|
||||
dglDrawLine(l + 1, t, r, t, profile->mBevelColorHL);
|
||||
dglDrawLine(l, b, r, b, profile->mBevelColorLL);
|
||||
dglDrawLine(r, t + 1, r, b - 1, profile->mBevelColorLL);
|
||||
dglDrawLine(l + 1, b - 1, r - 1, b - 1, profile->mBorderColor);
|
||||
dglDrawLine(r - 1, t + 1, r - 1, b - 2, profile->mBorderColor);
|
||||
break;
|
||||
case 5:
|
||||
renderFilledBorder( bounds, profile );
|
||||
break;
|
||||
// DAW:
|
||||
case -1:
|
||||
// Draw a simple sizable border with corners
|
||||
// Taken from the 'Skinnable GUI Controls in TGE' resource by Justin DuJardin
|
||||
if(profile->mBitmapArrayRects.size() >= 8)
|
||||
{
|
||||
dglClearBitmapModulation();
|
||||
|
||||
RectI destRect;
|
||||
RectI stretchRect;
|
||||
RectI* mBitmapBounds = profile->mBitmapArrayRects.address();
|
||||
|
||||
// DAW: Indices into the bitmap array
|
||||
enum
|
||||
{
|
||||
BorderTopLeft = 0,
|
||||
BorderTop,
|
||||
BorderTopRight,
|
||||
BorderLeft,
|
||||
//Fill,
|
||||
BorderRight,
|
||||
BorderBottomLeft,
|
||||
BorderBottom,
|
||||
BorderBottomRight,
|
||||
NumBitmaps
|
||||
};
|
||||
|
||||
// Draw all corners first.
|
||||
|
||||
//top left border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x,bounds.point.y),mBitmapBounds[BorderTopLeft]);
|
||||
//top right border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x + bounds.extent.x - mBitmapBounds[BorderTopRight].extent.x,bounds.point.y),mBitmapBounds[BorderTopRight]);
|
||||
|
||||
//bottom left border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x,bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottomLeft].extent.y),mBitmapBounds[BorderBottomLeft]);
|
||||
//bottom right border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(
|
||||
bounds.point.x + bounds.extent.x - mBitmapBounds[BorderBottomRight].extent.x,
|
||||
bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottomRight].extent.y),
|
||||
mBitmapBounds[BorderBottomRight]);
|
||||
|
||||
// End drawing corners
|
||||
|
||||
// Begin drawing sides and top stretched borders
|
||||
|
||||
//start with top line stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderTopRight].extent.x;
|
||||
destRect.extent.x = bounds.extent.x - mBitmapBounds[BorderTopRight].extent.x - mBitmapBounds[BorderTopLeft].extent.x;
|
||||
destRect.extent.y = mBitmapBounds[BorderTop].extent.y;
|
||||
destRect.point.y = bounds.point.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderTop];
|
||||
stretchRect.inset(1,0);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//bottom line stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderBottomRight].extent.x;
|
||||
destRect.extent.x = bounds.extent.x - mBitmapBounds[BorderBottomRight].extent.x - mBitmapBounds[BorderBottomLeft].extent.x;
|
||||
destRect.extent.y = mBitmapBounds[BorderBottom].extent.y;
|
||||
destRect.point.y = bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottom].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderBottom];
|
||||
stretchRect.inset(1,0);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//left line stretch
|
||||
destRect.point.x = bounds.point.x;
|
||||
destRect.extent.x = mBitmapBounds[BorderLeft].extent.x;
|
||||
destRect.extent.y = bounds.extent.y - mBitmapBounds[BorderTopLeft].extent.y - mBitmapBounds[BorderBottomLeft].extent.y;
|
||||
destRect.point.y = bounds.point.y + mBitmapBounds[BorderTopLeft].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderLeft];
|
||||
stretchRect.inset(0,1);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//left line stretch
|
||||
destRect.point.x = bounds.point.x + bounds.extent.x - mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.x = mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.y = bounds.extent.y - mBitmapBounds[BorderTopRight].extent.y - mBitmapBounds[BorderBottomRight].extent.y;
|
||||
destRect.point.y = bounds.point.y + mBitmapBounds[BorderTopRight].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderRight];
|
||||
stretchRect.inset(0,1);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
|
||||
// End drawing sides and top stretched borders
|
||||
break;
|
||||
}
|
||||
case -2:
|
||||
// Draw a simple sizable border with corners that is filled in
|
||||
renderSizableBitmapBordersFilled(bounds, 1, profile);
|
||||
break;
|
||||
case -3:
|
||||
// Draw a simple fixed height border with center fill horizontally.
|
||||
renderFixedBitmapBordersFilled( bounds, 1, profile );
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void renderFilledBorder( RectI &bounds, GuiControlProfile *profile )
|
||||
{
|
||||
renderFilledBorder( bounds, profile->mBorderColor, profile->mFillColor );
|
||||
}
|
||||
|
||||
void renderFilledBorder( RectI &bounds, ColorI &borderColor, ColorI &fillColor )
|
||||
{
|
||||
S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1;
|
||||
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1;
|
||||
|
||||
RectI fillBounds = bounds;
|
||||
fillBounds.inset( 1, 1 );
|
||||
dglDrawRect( bounds, borderColor );
|
||||
dglDrawRectFill( fillBounds, fillColor );
|
||||
}
|
||||
|
||||
// DAW: Render out the sizable bitmap borders based on a multiplier into the bitmap array
|
||||
// Based on the 'Skinnable GUI Controls in TGE' resource by Justin DuJardin
|
||||
void renderSizableBitmapBordersFilled(RectI &bounds, S32 baseMultiplier, GuiControlProfile *profile)
|
||||
{
|
||||
// DAW: Indices into the bitmap array
|
||||
S32 NumBitmaps = 9;
|
||||
S32 BorderTopLeft = NumBitmaps * baseMultiplier - NumBitmaps;
|
||||
S32 BorderTop = 1 + BorderTopLeft;
|
||||
S32 BorderTopRight = 2 + BorderTopLeft;
|
||||
S32 BorderLeft = 3 + BorderTopLeft;
|
||||
S32 Fill = 4 + BorderTopLeft;
|
||||
S32 BorderRight = 5 + BorderTopLeft;
|
||||
S32 BorderBottomLeft = 6 + BorderTopLeft;
|
||||
S32 BorderBottom = 7 + BorderTopLeft;
|
||||
S32 BorderBottomRight = 8 + BorderTopLeft;
|
||||
|
||||
dglClearBitmapModulation();
|
||||
if(profile->mBitmapArrayRects.size() >= (NumBitmaps * baseMultiplier))
|
||||
{
|
||||
RectI destRect;
|
||||
RectI stretchRect;
|
||||
RectI* mBitmapBounds = profile->mBitmapArrayRects.address();
|
||||
|
||||
// Draw all corners first.
|
||||
|
||||
//top left border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x,bounds.point.y),mBitmapBounds[BorderTopLeft]);
|
||||
//top right border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x + bounds.extent.x - mBitmapBounds[BorderTopRight].extent.x,bounds.point.y),mBitmapBounds[BorderTopRight]);
|
||||
|
||||
//bottom left border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x,bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottomLeft].extent.y),mBitmapBounds[BorderBottomLeft]);
|
||||
//bottom right border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(
|
||||
bounds.point.x + bounds.extent.x - mBitmapBounds[BorderBottomRight].extent.x,
|
||||
bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottomRight].extent.y),
|
||||
mBitmapBounds[BorderBottomRight]);
|
||||
|
||||
// End drawing corners
|
||||
|
||||
// Begin drawing sides and top stretched borders
|
||||
|
||||
//start with top line stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderTopRight].extent.x;
|
||||
destRect.extent.x = bounds.extent.x - mBitmapBounds[BorderTopRight].extent.x - mBitmapBounds[BorderTopLeft].extent.x;
|
||||
destRect.extent.y = mBitmapBounds[BorderTop].extent.y;
|
||||
destRect.point.y = bounds.point.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderTop];
|
||||
stretchRect.inset(1,0);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//bottom line stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderBottomRight].extent.x;
|
||||
destRect.extent.x = bounds.extent.x - mBitmapBounds[BorderBottomRight].extent.x - mBitmapBounds[BorderBottomLeft].extent.x;
|
||||
destRect.extent.y = mBitmapBounds[BorderBottom].extent.y;
|
||||
destRect.point.y = bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottom].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderBottom];
|
||||
stretchRect.inset(1,0);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//left line stretch
|
||||
destRect.point.x = bounds.point.x;
|
||||
destRect.extent.x = mBitmapBounds[BorderLeft].extent.x;
|
||||
destRect.extent.y = bounds.extent.y - mBitmapBounds[BorderTopLeft].extent.y - mBitmapBounds[BorderBottomLeft].extent.y;
|
||||
destRect.point.y = bounds.point.y + mBitmapBounds[BorderTopLeft].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderLeft];
|
||||
stretchRect.inset(0,1);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//left line stretch
|
||||
destRect.point.x = bounds.point.x + bounds.extent.x - mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.x = mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.y = bounds.extent.y - mBitmapBounds[BorderTopRight].extent.y - mBitmapBounds[BorderBottomRight].extent.y;
|
||||
destRect.point.y = bounds.point.y + mBitmapBounds[BorderTopRight].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderRight];
|
||||
stretchRect.inset(0,1);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//fill stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderLeft].extent.x;
|
||||
destRect.extent.x = (bounds.extent.x) - mBitmapBounds[BorderLeft].extent.x - mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.y = bounds.extent.y - mBitmapBounds[BorderTop].extent.y - mBitmapBounds[BorderBottom].extent.y;
|
||||
destRect.point.y = bounds.point.y + mBitmapBounds[BorderTop].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[Fill];
|
||||
stretchRect.inset(1,1);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
|
||||
// End drawing sides and top stretched borders
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// DAW: Render out the sizable bitmap borders based on a multiplier into the bitmap array
|
||||
// Based on the 'Skinnable GUI Controls in TGE' resource by Justin DuJardin
|
||||
void renderSizableBitmapBordersFilledIndex(RectI &bounds, S32 startIndex, GuiControlProfile *profile)
|
||||
{
|
||||
// DAW: Indices into the bitmap array
|
||||
S32 NumBitmaps = 9;
|
||||
S32 BorderTopLeft = startIndex;
|
||||
S32 BorderTop = 1 + BorderTopLeft;
|
||||
S32 BorderTopRight = 2 + BorderTopLeft;
|
||||
S32 BorderLeft = 3 + BorderTopLeft;
|
||||
S32 Fill = 4 + BorderTopLeft;
|
||||
S32 BorderRight = 5 + BorderTopLeft;
|
||||
S32 BorderBottomLeft = 6 + BorderTopLeft;
|
||||
S32 BorderBottom = 7 + BorderTopLeft;
|
||||
S32 BorderBottomRight = 8 + BorderTopLeft;
|
||||
|
||||
dglClearBitmapModulation();
|
||||
if(profile->mBitmapArrayRects.size() >= (startIndex + NumBitmaps))
|
||||
{
|
||||
RectI destRect;
|
||||
RectI stretchRect;
|
||||
RectI* mBitmapBounds = profile->mBitmapArrayRects.address();
|
||||
|
||||
// Draw all corners first.
|
||||
|
||||
//top left border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x,bounds.point.y),mBitmapBounds[BorderTopLeft]);
|
||||
//top right border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x + bounds.extent.x - mBitmapBounds[BorderTopRight].extent.x,bounds.point.y),mBitmapBounds[BorderTopRight]);
|
||||
|
||||
//bottom left border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x,bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottomLeft].extent.y),mBitmapBounds[BorderBottomLeft]);
|
||||
//bottom right border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(
|
||||
bounds.point.x + bounds.extent.x - mBitmapBounds[BorderBottomRight].extent.x,
|
||||
bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottomRight].extent.y),
|
||||
mBitmapBounds[BorderBottomRight]);
|
||||
|
||||
// End drawing corners
|
||||
|
||||
// Begin drawing sides and top stretched borders
|
||||
|
||||
//start with top line stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderTopLeft].extent.x;
|
||||
destRect.extent.x = bounds.extent.x - mBitmapBounds[BorderTopRight].extent.x - mBitmapBounds[BorderTopLeft].extent.x;
|
||||
destRect.extent.y = mBitmapBounds[BorderTop].extent.y;
|
||||
destRect.point.y = bounds.point.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderTop];
|
||||
stretchRect.inset(1,0);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//bottom line stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderBottomLeft].extent.x;
|
||||
destRect.extent.x = bounds.extent.x - mBitmapBounds[BorderBottomRight].extent.x - mBitmapBounds[BorderBottomLeft].extent.x;
|
||||
destRect.extent.y = mBitmapBounds[BorderBottom].extent.y;
|
||||
destRect.point.y = bounds.point.y + bounds.extent.y - mBitmapBounds[BorderBottom].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderBottom];
|
||||
stretchRect.inset(1,0);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//left line stretch
|
||||
destRect.point.x = bounds.point.x;
|
||||
destRect.extent.x = mBitmapBounds[BorderLeft].extent.x;
|
||||
destRect.extent.y = bounds.extent.y - mBitmapBounds[BorderTopLeft].extent.y - mBitmapBounds[BorderBottomLeft].extent.y;
|
||||
destRect.point.y = bounds.point.y + mBitmapBounds[BorderTopLeft].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderLeft];
|
||||
stretchRect.inset(0,1);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//left line stretch
|
||||
destRect.point.x = bounds.point.x + bounds.extent.x - mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.x = mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.y = bounds.extent.y - mBitmapBounds[BorderTopRight].extent.y - mBitmapBounds[BorderBottomRight].extent.y;
|
||||
destRect.point.y = bounds.point.y + mBitmapBounds[BorderTopRight].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[BorderRight];
|
||||
stretchRect.inset(0,1);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
//fill stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderLeft].extent.x;
|
||||
destRect.extent.x = (bounds.extent.x) - mBitmapBounds[BorderLeft].extent.x - mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.y = bounds.extent.y - mBitmapBounds[BorderTop].extent.y - mBitmapBounds[BorderBottom].extent.y;
|
||||
destRect.point.y = bounds.point.y + mBitmapBounds[BorderTop].extent.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[Fill];
|
||||
stretchRect.inset(1,1);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
|
||||
// End drawing sides and top stretched borders
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// DAW: Render out the fixed bitmap borders based on a multiplier into the bitmap array
|
||||
// It renders left and right caps, with a sizable fill area in the middle to reach
|
||||
// the x extent. It does not stretch in the y direction.
|
||||
void renderFixedBitmapBordersFilled(RectI &bounds, S32 baseMultiplier, GuiControlProfile *profile)
|
||||
{
|
||||
// DAW: Indices into the bitmap array
|
||||
S32 NumBitmaps = 3;
|
||||
S32 BorderLeft = NumBitmaps * baseMultiplier - NumBitmaps;
|
||||
S32 Fill = 1 + BorderLeft;
|
||||
S32 BorderRight = 2 + BorderLeft;
|
||||
|
||||
dglClearBitmapModulation();
|
||||
if(profile->mBitmapArrayRects.size() >= (NumBitmaps * baseMultiplier))
|
||||
{
|
||||
RectI destRect;
|
||||
RectI stretchRect;
|
||||
RectI* mBitmapBounds = profile->mBitmapArrayRects.address();
|
||||
|
||||
// Draw all corners first.
|
||||
|
||||
//left border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x,bounds.point.y),mBitmapBounds[BorderLeft]);
|
||||
//right border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x + bounds.extent.x - mBitmapBounds[BorderRight].extent.x,bounds.point.y),mBitmapBounds[BorderRight]);
|
||||
|
||||
// End drawing corners
|
||||
|
||||
// Begin drawing fill
|
||||
|
||||
//fill stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderLeft].extent.x;
|
||||
destRect.extent.x = (bounds.extent.x) - mBitmapBounds[BorderLeft].extent.x - mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.y = mBitmapBounds[Fill].extent.y;
|
||||
destRect.point.y = bounds.point.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[Fill];
|
||||
stretchRect.inset(1,0);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
|
||||
// End drawing fill
|
||||
}
|
||||
}
|
||||
|
||||
// DAW: Render out the fixed bitmap borders based on a multiplier into the bitmap array
|
||||
// It renders left and right caps, with a sizable fill area in the middle to reach
|
||||
// the x extent. It does not stretch in the y direction.
|
||||
void renderFixedBitmapBordersFilledIndex(RectI &bounds, S32 startIndex, GuiControlProfile *profile)
|
||||
{
|
||||
// DAW: Indices into the bitmap array
|
||||
S32 NumBitmaps = 3;
|
||||
S32 BorderLeft = startIndex;
|
||||
S32 Fill = 1 + startIndex;
|
||||
S32 BorderRight = 2 + startIndex;
|
||||
|
||||
dglClearBitmapModulation();
|
||||
if(profile->mBitmapArrayRects.size() >= (startIndex + NumBitmaps))
|
||||
{
|
||||
RectI destRect;
|
||||
RectI stretchRect;
|
||||
RectI* mBitmapBounds = profile->mBitmapArrayRects.address();
|
||||
|
||||
// Draw all corners first.
|
||||
|
||||
//left border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x,bounds.point.y),mBitmapBounds[BorderLeft]);
|
||||
//right border
|
||||
dglDrawBitmapSR(profile->mTextureHandle,Point2I(bounds.point.x + bounds.extent.x - mBitmapBounds[BorderRight].extent.x,bounds.point.y),mBitmapBounds[BorderRight]);
|
||||
|
||||
// End drawing corners
|
||||
|
||||
// Begin drawing fill
|
||||
|
||||
//fill stretch
|
||||
destRect.point.x = bounds.point.x + mBitmapBounds[BorderLeft].extent.x;
|
||||
destRect.extent.x = (bounds.extent.x) - mBitmapBounds[BorderLeft].extent.x - mBitmapBounds[BorderRight].extent.x;
|
||||
destRect.extent.y = mBitmapBounds[Fill].extent.y;
|
||||
destRect.point.y = bounds.point.y;
|
||||
//stretch it
|
||||
stretchRect = mBitmapBounds[Fill];
|
||||
stretchRect.inset(1,0);
|
||||
//draw it
|
||||
dglDrawBitmapStretchSR(profile->mTextureHandle,destRect,stretchRect);
|
||||
|
||||
// End drawing fill
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user