added "pixel32" typedef for 32bit rgb data
added a single gradient texture type (vertical)
This commit is contained in:
parent
e6c12f8fd9
commit
31c20197e5
2 changed files with 65 additions and 29 deletions
|
@ -99,6 +99,50 @@ static inline void renderPixel(XImage *im, unsigned char *dp,
|
|||
}
|
||||
}
|
||||
|
||||
void TrueRenderControl::drawGradientBackground(
|
||||
Surface &sf, const RenderTexture &texture) const
|
||||
{
|
||||
int w = sf.width(), h = sf.height();
|
||||
|
||||
const ScreenInfo *info = display->screenInfo(_screen);
|
||||
XImage *im = XCreateImage(**display, info->visual(), info->depth(),
|
||||
ZPixmap, 0, NULL, w, h, 32, 0);
|
||||
|
||||
pixel32 *data = new pixel32[sf.height()*sf.width()];
|
||||
pixel32 current;
|
||||
pixel32 *dp = data;
|
||||
float dr, dg, db;
|
||||
unsigned int r,g,b;
|
||||
|
||||
dr = (float)(texture.secondary_color().red() - texture.color().red());
|
||||
dr/= (float)sf.height();
|
||||
|
||||
dg = (float)(texture.secondary_color().green() - texture.color().green());
|
||||
dg/= (float)sf.height();
|
||||
|
||||
db = (float)(texture.secondary_color().blue() - texture.color().blue());
|
||||
db/= (float)sf.height();
|
||||
|
||||
for (int y = 0; y < h; ++y) {
|
||||
r = texture.color().red() + (int)(dr * y);
|
||||
g = texture.color().green() + (int)(dg * y);
|
||||
b = texture.color().blue() + (int)(db * y);
|
||||
current = (r << 16)
|
||||
+ (g << 8)
|
||||
+ b;
|
||||
for (int x = 0; x < w; ++x, dp ++)
|
||||
*dp = current;
|
||||
}
|
||||
|
||||
im->data = (char*) data;
|
||||
|
||||
sf.setPixmap(im);
|
||||
|
||||
delete [] im->data;
|
||||
im->data = NULL;
|
||||
XDestroyImage(im);
|
||||
}
|
||||
|
||||
void TrueRenderControl::drawBackground(Surface& sf,
|
||||
const RenderTexture &texture) const
|
||||
{
|
||||
|
@ -108,35 +152,7 @@ void TrueRenderControl::drawBackground(Surface& sf,
|
|||
if (texture.gradient() == RenderTexture::Solid) {
|
||||
drawSolidBackground(sf, texture);
|
||||
} else {
|
||||
int w = sf.width(), h = sf.height();
|
||||
|
||||
const ScreenInfo *info = display->screenInfo(_screen);
|
||||
XImage *im = XCreateImage(**display, info->visual(), info->depth(),
|
||||
ZPixmap, 0, NULL, w, h, 32, 0);
|
||||
|
||||
unsigned char *data = new unsigned char[im->bytes_per_line * h];
|
||||
unsigned char *dp = data;
|
||||
unsigned int bytes_per_pixel = im->bits_per_pixel/8;
|
||||
|
||||
for (int y = 0; y < h/3; ++y)
|
||||
for (int x = 0; x < w; ++x, dp += bytes_per_pixel)
|
||||
renderPixel(im, dp, (255*x/w) >> _red_shift << _red_offset);
|
||||
for (int y = 0; y < h/3; ++y)
|
||||
for (int x = 0; x < w; ++x, dp += bytes_per_pixel)
|
||||
renderPixel(im, dp, (255*x/w) >> _green_shift << _green_offset);
|
||||
for (int y = 0; y < h/3; ++y)
|
||||
for (int x = 0; x < w; ++x, dp += bytes_per_pixel)
|
||||
renderPixel(im, dp, (255*x/w) >> _blue_shift << _blue_offset);
|
||||
|
||||
im->data = (char*) data;
|
||||
|
||||
// sf.setPixmap(im);
|
||||
sf.setPixmap(texture.color());
|
||||
// sf.setPixmap(RenderColor(_screen, 0xff, 0xff, 0));
|
||||
|
||||
delete [] im->data;
|
||||
im->data = NULL;
|
||||
XDestroyImage(im);
|
||||
drawGradientBackground(sf, texture);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,10 +4,28 @@
|
|||
|
||||
#include "rendercontrol.hh"
|
||||
|
||||
extern "C" {
|
||||
|
||||
#ifdef HAVE_STDINT_H
|
||||
# include <stdint.h>
|
||||
#else
|
||||
# ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace otk {
|
||||
|
||||
#ifdef HAVE_STDINT_H
|
||||
typedef uint32_t pixel32;
|
||||
#else
|
||||
typedef u_int32_t pixel32;
|
||||
#endif
|
||||
|
||||
class TrueRenderControl : public RenderControl {
|
||||
private:
|
||||
// the number of bits to shift a color value (from 0-255) to the right, to
|
||||
|
@ -26,6 +44,8 @@ public:
|
|||
virtual ~TrueRenderControl();
|
||||
|
||||
virtual void drawBackground(Surface& sf, const RenderTexture &texture) const;
|
||||
virtual void drawGradientBackground(Surface &sf,
|
||||
const RenderTexture &texture) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue