mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
uppdev sync
git-svn-id: svn://ultimatepp.org/upp/trunk@683 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
dce1fcc0eb
commit
8f0b78606c
214 changed files with 79311 additions and 166 deletions
205
uppdev/AggCtrl/AggCtrlWin32.cpp
Normal file
205
uppdev/AggCtrl/AggCtrlWin32.cpp
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
#include "AggCtrl.h"
|
||||
|
||||
#ifdef PLATFORM_WIN32
|
||||
|
||||
static void ConvertPmap(agg::rendering_buffer* dst,const agg::rendering_buffer* src,agg::pix_format_e format){
|
||||
switch(format){
|
||||
case agg::pix_format_gray8: break;
|
||||
case agg::pix_format_gray16: agg::color_conv(dst, src, agg::color_conv_gray16_to_gray8()); break;
|
||||
case agg::pix_format_rgb565: agg::color_conv(dst, src, agg::color_conv_rgb565_to_rgb555());break;
|
||||
case agg::pix_format_rgbAAA: agg::color_conv(dst, src, agg::color_conv_rgbAAA_to_bgr24()); break;
|
||||
case agg::pix_format_bgrAAA: agg::color_conv(dst, src, agg::color_conv_bgrAAA_to_bgr24()); break;
|
||||
case agg::pix_format_rgbBBA: agg::color_conv(dst, src, agg::color_conv_rgbBBA_to_bgr24()); break;
|
||||
case agg::pix_format_bgrABB: agg::color_conv(dst, src, agg::color_conv_bgrABB_to_bgr24()); break;
|
||||
case agg::pix_format_rgb24: agg::color_conv(dst, src, agg::color_conv_rgb24_to_bgr24()); break;
|
||||
case agg::pix_format_rgb48: agg::color_conv(dst, src, agg::color_conv_rgb48_to_bgr24()); break;
|
||||
case agg::pix_format_bgr48: agg::color_conv(dst, src, agg::color_conv_bgr48_to_bgr24()); break;
|
||||
case agg::pix_format_abgr32: agg::color_conv(dst, src, agg::color_conv_abgr32_to_bgra32());break;
|
||||
case agg::pix_format_argb32: agg::color_conv(dst, src, agg::color_conv_argb32_to_bgra32());break;
|
||||
case agg::pix_format_rgba32: agg::color_conv(dst, src, agg::color_conv_rgba32_to_bgra32());break;
|
||||
case agg::pix_format_bgra64: agg::color_conv(dst, src, agg::color_conv_bgra64_to_bgra32());break;
|
||||
case agg::pix_format_abgr64: agg::color_conv(dst, src, agg::color_conv_abgr64_to_bgra32());break;
|
||||
case agg::pix_format_argb64: agg::color_conv(dst, src, agg::color_conv_argb64_to_bgra32());break;
|
||||
case agg::pix_format_rgba64: agg::color_conv(dst, src, agg::color_conv_rgba64_to_bgra32());break;
|
||||
}
|
||||
};
|
||||
|
||||
AggCtrl::AggCtrl(agg::pix_format_e format):
|
||||
pixformat(format), bpp(0),
|
||||
sysformat(agg::pix_format_undefined),
|
||||
flip_y(false),
|
||||
cx(16),cy(16)
|
||||
{
|
||||
// Set bpp and sysbpp from pixel format
|
||||
switch(pixformat)
|
||||
{
|
||||
case agg::pix_format_bw:
|
||||
sysformat = agg::pix_format_bw;
|
||||
bpp = 1;
|
||||
sysbpp = 1;
|
||||
break;
|
||||
case agg::pix_format_gray8:
|
||||
sysformat = agg::pix_format_gray8;
|
||||
bpp = 8;
|
||||
sysbpp = 8;
|
||||
break;
|
||||
case agg::pix_format_gray16:
|
||||
sysformat = agg::pix_format_gray8;
|
||||
bpp = 16;
|
||||
sysbpp = 8;
|
||||
break;
|
||||
case agg::pix_format_rgb565:
|
||||
case agg::pix_format_rgb555:
|
||||
sysformat = agg::pix_format_rgb555;
|
||||
bpp = 16;
|
||||
sysbpp = 16;
|
||||
break;
|
||||
case agg::pix_format_rgbAAA:
|
||||
case agg::pix_format_bgrAAA:
|
||||
case agg::pix_format_rgbBBA:
|
||||
case agg::pix_format_bgrABB:
|
||||
sysformat = agg::pix_format_bgr24;
|
||||
bpp = 32;
|
||||
sysbpp = 24;
|
||||
break;
|
||||
case agg::pix_format_rgb24:
|
||||
case agg::pix_format_bgr24:
|
||||
sysformat = agg::pix_format_bgr24;
|
||||
bpp = 24;
|
||||
sysbpp = 24;
|
||||
break;
|
||||
case agg::pix_format_rgb48:
|
||||
case agg::pix_format_bgr48:
|
||||
sysformat = agg::pix_format_bgr24;
|
||||
bpp = 48;
|
||||
sysbpp = 24;
|
||||
break;
|
||||
case agg::pix_format_bgra32:
|
||||
case agg::pix_format_abgr32:
|
||||
case agg::pix_format_argb32:
|
||||
case agg::pix_format_rgba32:
|
||||
sysformat = agg::pix_format_bgra32;
|
||||
bpp = 32;
|
||||
sysbpp = 32;
|
||||
break;
|
||||
case agg::pix_format_bgra64:
|
||||
case agg::pix_format_abgr64:
|
||||
case agg::pix_format_argb64:
|
||||
case agg::pix_format_rgba64:
|
||||
sysformat = agg::pix_format_bgra32;
|
||||
bpp = 64;
|
||||
sysbpp = 32;
|
||||
break;
|
||||
}
|
||||
CreatePmap(cx,cy,&rbuf);
|
||||
// User initialization code
|
||||
onInit();
|
||||
};
|
||||
void AggCtrl::CreatePmap(unsigned width,unsigned height,agg::rendering_buffer* rb){
|
||||
// Create a pixmap and attach a buffer to it
|
||||
pmap.create(width,height,agg::org_e(bpp));
|
||||
rb->attach(pmap.buf(),pmap.width(),pmap.height(),flip_y ?pmap.stride():-pmap.stride());
|
||||
};
|
||||
void AggCtrl::PaintAgg(Upp::Draw& dest){PaintAgg(&rbuf,dest);};
|
||||
void AggCtrl::PaintAgg(const agg::rendering_buffer* src,Upp::Draw& dest){
|
||||
if(sysformat==pixformat){
|
||||
// Pixmap is in the right format, put it on display
|
||||
pmap.draw(dest.GetHandle());
|
||||
}else{
|
||||
// Pixmap must be converted to the right pixel format first
|
||||
agg::pixel_map pmap_tmp;
|
||||
pmap_tmp.create(pmap.width(),pmap.height(),agg::org_e(sysbpp));
|
||||
agg::rendering_buffer rbuf_tmp;
|
||||
rbuf_tmp.attach(pmap_tmp.buf(),pmap_tmp.width(),pmap_tmp.height(),flip_y?pmap_tmp.stride():-pmap_tmp.stride());
|
||||
ConvertPmap(&rbuf_tmp, src, pixformat);
|
||||
pmap_tmp.draw(dest.GetHandle());
|
||||
}
|
||||
};
|
||||
void AggCtrl::Resized(){
|
||||
// Update the dimensions and reinitialize the pixmap with new size
|
||||
cx=GetSize().cx;cy=GetSize().cy;
|
||||
CreatePmap(cx,cy,&rbuf);
|
||||
// User resize code
|
||||
onResize(cx,cy);
|
||||
};
|
||||
AggCtrl::~AggCtrl() {
|
||||
pmap.destroy();
|
||||
};
|
||||
void AggCtrl::Paint(Upp::Draw& draw) {
|
||||
// Check if the control was resized
|
||||
if(cx!=GetSize().cx||cy!=GetSize().cy){Resized();}
|
||||
// User Drawing code
|
||||
onDraw(draw);
|
||||
// Draw to screen
|
||||
PaintAgg(draw);
|
||||
};
|
||||
void AggCtrl::SetPixFmt(agg::pix_format_e format){
|
||||
pixformat=format;
|
||||
switch(pixformat)
|
||||
{
|
||||
case agg::pix_format_bw:
|
||||
sysformat = agg::pix_format_bw;
|
||||
bpp = 1;
|
||||
sysbpp = 1;
|
||||
break;
|
||||
case agg::pix_format_gray8:
|
||||
sysformat = agg::pix_format_gray8;
|
||||
bpp = 8;
|
||||
sysbpp = 8;
|
||||
break;
|
||||
case agg::pix_format_gray16:
|
||||
sysformat = agg::pix_format_gray8;
|
||||
bpp = 16;
|
||||
sysbpp = 8;
|
||||
break;
|
||||
case agg::pix_format_rgb565:
|
||||
case agg::pix_format_rgb555:
|
||||
sysformat = agg::pix_format_rgb555;
|
||||
bpp = 16;
|
||||
sysbpp = 16;
|
||||
break;
|
||||
case agg::pix_format_rgbAAA:
|
||||
case agg::pix_format_bgrAAA:
|
||||
case agg::pix_format_rgbBBA:
|
||||
case agg::pix_format_bgrABB:
|
||||
sysformat = agg::pix_format_bgr24;
|
||||
bpp = 32;
|
||||
sysbpp = 24;
|
||||
break;
|
||||
case agg::pix_format_rgb24:
|
||||
case agg::pix_format_bgr24:
|
||||
sysformat = agg::pix_format_bgr24;
|
||||
bpp = 24;
|
||||
sysbpp = 24;
|
||||
break;
|
||||
case agg::pix_format_rgb48:
|
||||
case agg::pix_format_bgr48:
|
||||
sysformat = agg::pix_format_bgr24;
|
||||
bpp = 48;
|
||||
sysbpp = 24;
|
||||
break;
|
||||
case agg::pix_format_bgra32:
|
||||
case agg::pix_format_abgr32:
|
||||
case agg::pix_format_argb32:
|
||||
case agg::pix_format_rgba32:
|
||||
sysformat = agg::pix_format_bgra32;
|
||||
bpp = 32;
|
||||
sysbpp = 32;
|
||||
break;
|
||||
case agg::pix_format_bgra64:
|
||||
case agg::pix_format_abgr64:
|
||||
case agg::pix_format_argb64:
|
||||
case agg::pix_format_rgba64:
|
||||
sysformat = agg::pix_format_bgra32;
|
||||
bpp = 64;
|
||||
sysbpp = 32;
|
||||
break;
|
||||
}
|
||||
Resized();
|
||||
};
|
||||
|
||||
void AggCtrl::onDraw(Upp::Draw& dest){};
|
||||
void AggCtrl::onInit(){};
|
||||
void AggCtrl::onResize(int width,int height){};
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue