135 lines
4.8 KiB
C++
135 lines
4.8 KiB
C++
#include <mixer/graphic.hpp>
|
|
#include <common/resbmp.hpp>
|
|
#include <common/dib.hpp>
|
|
|
|
char Graphic::szClassName[]="Graphic";
|
|
|
|
Graphic::Graphic(GUIWindow &parentWnd,const String &strBitmapName,UINT controlID,UINT extraStyles,const Rect &initRect,const Font &bannerFont)
|
|
: mBannerFont(bannerFont), mParentWnd(parentWnd), mxIndent(Indent),
|
|
myBorder(::GetSystemMetrics(SM_CYDLGFRAME)<<1), mInitRect(initRect)
|
|
{
|
|
mRibbonBitmap=new ResBitmap(strBitmapName);
|
|
mRibbonBitmap.disposition(PointerDisposition::Delete);
|
|
mPaintHandler.setCallback(this,&Graphic::paintHandler);
|
|
mCreateHandler.setCallback(this,&Graphic::createHandler);
|
|
mDestroyHandler.setCallback(this,&Graphic::destroyHandler);
|
|
mSizeHandler.setCallback(this,&Graphic::sizeHandler);
|
|
mEraseBackgroundHandler.setCallback(this,&Graphic::eraseBackgroundHandler);
|
|
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
|
|
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
insertHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler);
|
|
mParentWnd.insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
|
registerClass();
|
|
createWindow(parentWnd,controlID,extraStyles);
|
|
}
|
|
|
|
Graphic::~Graphic()
|
|
{
|
|
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
|
|
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
removeHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler);
|
|
mParentWnd.removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
|
}
|
|
|
|
Graphic &Graphic::operator=(const Graphic &/*someGraphic*/)
|
|
{ // private implementation
|
|
return *this;
|
|
}
|
|
|
|
void Graphic::registerClass(void)
|
|
{
|
|
HINSTANCE hProcessInstance(processInstance());
|
|
WNDCLASS wndClass;
|
|
|
|
if(::GetClassInfo(hProcessInstance,szClassName,(WNDCLASS FAR *)&wndClass))return;
|
|
wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC;
|
|
wndClass.lpfnWndProc =(WNDPROC)Window::WndProc;
|
|
wndClass.cbClsExtra =0;
|
|
wndClass.cbWndExtra =sizeof(Graphic*);
|
|
wndClass.hInstance =hProcessInstance;
|
|
wndClass.hIcon =0;
|
|
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
|
|
wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH);
|
|
wndClass.lpszMenuName =0;
|
|
wndClass.lpszClassName =szClassName;
|
|
::RegisterClass(&wndClass);
|
|
}
|
|
|
|
void Graphic::createWindow(GUIWindow &parentWindow,UINT controlID,UINT extraStyles)
|
|
{
|
|
if(!mInitRect.right())mInitRect.right(mRibbonBitmap->width());
|
|
if(!mInitRect.bottom())mInitRect.bottom(mRibbonBitmap->height());
|
|
::CreateWindowEx(0,(LPSTR)szClassName,(LPSTR)0,
|
|
WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|extraStyles,mInitRect.left(),mInitRect.top(),mInitRect.right(),mInitRect.bottom(),
|
|
|
|
|
|
parentWindow,(HMENU)controlID,processInstance(),(LPSTR)(Window*)this);
|
|
}
|
|
|
|
CallbackData::ReturnType Graphic::createHandler(CallbackData &someCallbackData)
|
|
{
|
|
if(!mRibbonBitmap->isOkay())return (CallbackData::ReturnType)FALSE;
|
|
myIndent=mBannerFont.charHeight()/4;
|
|
mPureDevice=new PureDevice(*this);
|
|
mPureDevice.disposition(PointerDisposition::Delete);
|
|
mDIBitmap=new DIBitmap(*mPureDevice,*mRibbonBitmap,*mRibbonBitmap);
|
|
mDIBitmap.disposition(PointerDisposition::Delete);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType Graphic::destroyHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType Graphic::eraseBackgroundHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)TRUE;
|
|
}
|
|
|
|
CallbackData::ReturnType Graphic::sizeHandler(CallbackData &someCallbackData)
|
|
{
|
|
if(!mInitRect.right())width(mParentWnd.width());
|
|
myIndent=mBannerFont.charHeight()/4;
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType Graphic::paintHandler(CallbackData &someCallbackData)
|
|
{
|
|
if(!mRibbonBitmap.isOkay())return (CallbackData::ReturnType)FALSE;
|
|
PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam();
|
|
mDIBitmap->copyBits(mRibbonBitmap->ptrData(),mRibbonBitmap->imageExtent());
|
|
mDIBitmap->usePalette(*mPureDevice,TRUE);
|
|
mDIBitmap->stretchBlt(*mPureDevice,Rect(0,0,width(),height()));
|
|
mDIBitmap->usePalette(*mPureDevice,FALSE);
|
|
mPureDevice->select((GDIObj)mBannerFont,TRUE);
|
|
mPureDevice->setTextColor(RGBColor(255,255,255));
|
|
mPureDevice->setBkMode(PureDevice::Transparent);
|
|
mPureDevice->textOut(indent(),myIndent,mCaptionString);
|
|
mPureDevice->select((GDIObj)mBannerFont,FALSE);
|
|
postPaint(*mPureDevice);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
BOOL Graphic::setCaption(const String &captionString)
|
|
{
|
|
mCaptionString=captionString;
|
|
invalidate(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
const String &Graphic::getCaption(void)const
|
|
{
|
|
return mCaptionString;
|
|
}
|
|
|
|
// **************************************************************************************************
|
|
// virtuals
|
|
|
|
void Graphic::postPaint(PureDevice &pureDevice)
|
|
{
|
|
}
|
|
|