Go to the documentation of this file.00001 #include "../../Library/SDK_Manila_Sense.h"
00002
00003 void MyPictureBox::loadSurf(){
00004
00005 DWORD dwWidth = GetSystemMetrics(SM_CXSCREEN);
00006 DWORD dwHeight = GetSystemMetrics(SM_CYSCREEN);
00007 if(this->getRight()==dwHeight){
00008 this->setRight(dwWidth);
00009 }
00010 }
00011
00012 MyPictureBox::MyPictureBox(int idElement, int x,int y,DIRECTDRAW_GDI *i,int nbImg):Element(idElement, x,y,TYPE_PICTURE){
00013 pImage=i;
00014 nbMaxImage=nbImg;
00015 widthImg=0;
00016 if(i!=NULL){
00017 widthImg=pImage->width/nbMaxImage;
00018 this->setWidth(widthImg);
00019 this->setHeight(pImage->height);
00020 }
00021 loadSurf();
00022 positionAbsolute.left=0;
00023 positionAbsolute.top=0;
00024 positionAbsolute.right=0;
00025 positionAbsolute.bottom=0;
00026
00027 numImage=0;
00028 this->canScal=false;
00029 };
00030
00031 MyPictureBox::MyPictureBox(int idElement, int x,int y,wstring img,int nbImg,bool rescall):Element(idElement,x,y,TYPE_PICTURE)
00032 {
00033 this->pImage=Element::loadImage(&img,rescall);
00034 nbMaxImage=nbImg;
00035 widthImg=pImage->width/nbMaxImage;
00036
00037 this->setWidth(widthImg);
00038 this->setHeight(pImage->height);
00039 loadSurf();
00040 positionAbsolute.left=0;
00041 positionAbsolute.top=0;
00042 positionAbsolute.right=0;
00043 positionAbsolute.bottom=0;
00044 numImage=0;
00045 this->canScal=false;
00046 }
00047
00048 MyPictureBox::~MyPictureBox(void)
00049 {
00050 DirectDrawWarp::deleteSurf(&pImage);
00051 }
00052
00053
00054 void MyPictureBox::paint(DIRECTDRAW_GDI* lpDDraw,int x,int y){
00055
00056 if(pImage==NULL)
00057 return;
00058
00059 positionAbsolute.top=this->getTop()+y;
00060 positionAbsolute.bottom=positionAbsolute.top+this->getHeight();
00061 positionAbsolute.left=this->getLeft()+x;
00062 positionAbsolute.right=positionAbsolute.left+getWidth();
00063
00064 double scallingX=(double)widthImg/(double)getWidth();
00065 double scallingY=(double)pImage->height/(double)getHeight();
00066 if(!canScal){
00067 scallingX=1;
00068 scallingY=1;
00069 }
00070
00071
00072
00073 if(positionAbsolute.top>=gi->rcUpdateRegion.bottom||positionAbsolute.bottom<=gi->rcUpdateRegion.top||
00074 positionAbsolute.left>=gi->rcUpdateRegion.right||positionAbsolute.right<=gi->rcUpdateRegion.left)
00075 return;
00076
00077 if(positionAbsolute.top<gi->rcUpdateRegion.top){
00078 clipping.top=(gi->rcUpdateRegion.top-positionAbsolute.top)*scallingY;
00079 positionAbsolute.top=gi->rcUpdateRegion.top;
00080 }else{
00081 clipping.top=0;
00082 }
00083 if(positionAbsolute.bottom>gi->rcUpdateRegion.bottom){
00084 clipping.bottom=pImage->height-(positionAbsolute.bottom-gi->rcUpdateRegion.bottom)*scallingY;
00085 positionAbsolute.bottom=gi->rcUpdateRegion.bottom;
00086 }else{
00087 clipping.bottom=pImage->height;
00088 }
00089 if(positionAbsolute.left<gi->rcUpdateRegion.left){
00090 clipping.left=(numImage)*widthImg+(gi->rcUpdateRegion.left-positionAbsolute.left)*scallingX;
00091 positionAbsolute.left=gi->rcUpdateRegion.left;
00092 }else{
00093 clipping.left=(numImage)*widthImg;
00094 }
00095 if(positionAbsolute.right>gi->rcUpdateRegion.right){
00096 clipping.right=(numImage+1)*widthImg-(positionAbsolute.right-gi->rcUpdateRegion.right)*scallingX;
00097 positionAbsolute.right=gi->rcUpdateRegion.right;
00098 }else{
00099 clipping.right=(numImage+1)*widthImg;
00100 }
00101 HRESULT hres;
00102 if(!canScal&&widthImg<positionAbsolute.right-positionAbsolute.left){
00103 RECT clTmp={clipping.left+5,clipping.top,
00104 clipping.left+6,clipping.bottom};
00105 RECT posTmp={positionAbsolute.left,positionAbsolute.top,
00106 positionAbsolute.left+((positionAbsolute.right-positionAbsolute.left)-widthImg),positionAbsolute.bottom};
00107
00108 hres= gi->window->BltFast(lpDDraw,&posTmp, pImage,&clTmp, DDBLT_WAITNOTBUSY,NULL);
00109 if (hres != DD_OK){
00110 LocalisedString::explainFailDirectDraw(hres,L"MyPictureBox Blt(max)");
00111 return;
00112 }
00113 positionAbsolute.left=posTmp.right;
00114 }
00115 hres= gi->window->BltFast(lpDDraw,&positionAbsolute, pImage,&clipping, DDBLT_WAITNOTBUSY,NULL);
00116 if (hres != DD_OK){
00117 LocalisedString::explainFailDirectDraw(hres,L"MyPictureBox Blt(rest)");
00118 return;
00119 }
00120
00121
00122 positionAbsolute.top=this->getTop()+y;
00123 positionAbsolute.left=this->getLeft()+x;
00124 };
00125
00126 Element* MyPictureBox::isClicked(int x,int y){
00127
00128 if(x>positionAbsolute.left&&x<positionAbsolute.right&&y>positionAbsolute.top&&y<positionAbsolute.bottom){
00129 this->isActivated=true;
00130 return this;
00131 }
00132 return NULL;
00133 };