diff --git a/include/ZE_ZImage.h b/include/ZE_ZImage.h index a6c76e8..f87c5df 100644 --- a/include/ZE_ZImage.h +++ b/include/ZE_ZImage.h @@ -13,7 +13,7 @@ \brief Definition file for ZImage. Definition file for ZImage, the OpenGL version of the ZImage class for ZEngine. -
$Id: ZE_ZImage.h,v 1.23 2003/09/01 00:22:27 cozman Exp $
+
$Id: ZE_ZImage.h,v 1.24 2003/09/01 03:30:39 cozman Exp $
\author James Turk **/ @@ -215,6 +215,17 @@ class ZImage **/ void Draw(int x, int y) const; + /*! + \brief Draw Clipped Image to screen. + + Image is drawn such that only portions of image which fall within a certain area appear. + \since 0.8.5 + \param x X coord to draw Image to. + \param y Y coord to draw Image to. + \param clipRect Rectangle to clip within. + **/ + void DrawClipped(int x, int y, ZRect clipRect) const; + #if (GFX_BACKEND == ZE_OGL) /*! \brief Draw Image to Screen. diff --git a/src/ZE_ZImage.cpp b/src/ZE_ZImage.cpp index a7c86a8..42a5816 100644 --- a/src/ZE_ZImage.cpp +++ b/src/ZE_ZImage.cpp @@ -13,7 +13,7 @@ \brief Source file for ZImage. Implementation of ZImage, the Image class for ZEngine. -
$Id: ZE_ZImage.cpp,v 1.42 2003/09/01 00:22:35 cozman Exp $
+
$Id: ZE_ZImage.cpp,v 1.43 2003/09/01 03:30:39 cozman Exp $
\author James Turk **/ @@ -197,6 +197,11 @@ void ZImage::Draw(int x, int y) const Draw(static_cast(x),static_cast(y)); } +void ZImage::DrawClipped(int x, int y, ZRect clipRect) const +{ + DrawClipped(static_cast(x),static_cast(y),clipRect); +} + void ZImage::Draw(float x, float y) const { glColor4ub(255,255,255,rAlpha); //sets the color correctly @@ -400,6 +405,14 @@ void ZImage::Draw(int x, int y) const SDL_BlitSurface(rImage, NULL, rEngine->Display(), &rect); } +void ZImage::DrawClipped(int x, int y, ZRect clipRect) const +{ + SDL_Rect rect; + rect.x = static_cast(x); + rect.y = static_cast(y); + SDL_BlitSurface(rImage, &clipRect.SDLrect(), rEngine->Display(), &rect); +} + bool ZImage::IsLoaded() const { return rImage ? true : false; diff --git a/test/ZImageTest.cpp b/test/ZImageTest.cpp index d848657..992b097 100644 --- a/test/ZImageTest.cpp +++ b/test/ZImageTest.cpp @@ -9,7 +9,7 @@ This example file is in the public domain, it may be used with no restrictions. and the home of this Library is http://www.zengine.sourceforge.net *******************************************************************************/ -/*$Id: ZImageTest.cpp,v 1.20 2003/08/02 01:18:45 cozman Exp $*/ +/*$Id: ZImageTest.cpp,v 1.21 2003/09/01 03:30:39 cozman Exp $*/ #include #include @@ -39,13 +39,14 @@ bool Initialize() void Test() { ZEngine *engine = ZEngine::GetInstance(); - float angle=0.0f; + float angle=0.0f,movDelta; Uint8 alpha=128,alphaDelta=1; //Open and Setup all the Images// SDL_Surface *temp; - ZImage image1, image2, image3, textImage; + ZImage image1,image2,image3,image4,textImage; ZFont font("data/almontew.ttf",30); + ZRect clipRect(400,300,30,30); font.SetColor(0,255,0); font.SetBGColor(0,0,255); @@ -54,9 +55,11 @@ void Test() image1.Attach(temp); //this attaches the surface into itself image2.Open("data/test01.bmp"); image3.OpenFromImage(image2.Surface(),5,5,20,20); + image4.Open("data/rainbow.bmp"); temp = NULL; //and temp will now be controlled and freed by image1 image1.SetColorKey(255,0,255); image2.SetColorKey(255,0,255); + image4.Resize(400,300); font.DrawShadedText("ZImage Test.",textImage); do @@ -75,11 +78,29 @@ void Test() engine->SetReloadNeed(false); //very important for speed, without this you'd be reloading every frame } - if(engine->KeyIsPressed(SDLK_s)) + //movement// + movDelta = static_cast(engine->GetFrameTime()*30); + if(engine->KeyIsPressed(SDLK_LEFT)) + clipRect.MoveRel(-movDelta,0); + if(engine->KeyIsPressed(SDLK_RIGHT)) + clipRect.MoveRel(movDelta,0); + if(engine->KeyIsPressed(SDLK_UP)) + clipRect.MoveRel(0,-movDelta); + if(engine->KeyIsPressed(SDLK_DOWN)) + clipRect.MoveRel(0,movDelta); + if(engine->KeyIsPressed(SDLK_EQUALS)) { - //code to toggle screen// - engine->ToggleFullscreen(); + clipRect.MoveRel(-1,-1); + clipRect.ResizeRel(2,2); } + if(engine->KeyIsPressed(SDLK_MINUS)) + { + clipRect.MoveRel(1,1); + clipRect.ResizeRel(-2,-2); + } + + if(engine->KeyIsPressed(SDLK_s)) + engine->ToggleFullscreen(); if(engine->KeyIsPressed(SDLK_ESCAPE)) engine->RequestQuit(); @@ -100,6 +121,7 @@ void Test() #endif image3.Draw(200,0); + image4.DrawClipped(400,300,clipRect); textImage.Draw(0,100); engine->Update(); //update the screen }