From 47904bc7b2992189bb554833f00a79ff0fea9fb8 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 6 Aug 2010 13:13:25 +0000 Subject: SWORD25: Mass-astyle. svn-id: r53222 --- engines/sword25/gfx/animation.cpp | 361 ++++------- engines/sword25/gfx/animation.h | 148 ++--- engines/sword25/gfx/animationdescription.cpp | 8 +- engines/sword25/gfx/animationdescription.h | 70 ++- engines/sword25/gfx/animationresource.cpp | 170 +++-- engines/sword25/gfx/animationresource.h | 58 +- engines/sword25/gfx/animationtemplate.cpp | 116 ++-- engines/sword25/gfx/animationtemplate.h | 74 ++- engines/sword25/gfx/animationtemplateregistry.cpp | 20 +- engines/sword25/gfx/animationtemplateregistry.h | 16 +- engines/sword25/gfx/bitmap.cpp | 70 +-- engines/sword25/gfx/bitmap.h | 139 +++-- engines/sword25/gfx/bitmapresource.cpp | 13 +- engines/sword25/gfx/bitmapresource.h | 191 +++--- engines/sword25/gfx/dynamicbitmap.cpp | 66 +- engines/sword25/gfx/dynamicbitmap.h | 25 +- engines/sword25/gfx/fontresource.cpp | 90 ++- engines/sword25/gfx/fontresource.h | 76 ++- engines/sword25/gfx/framecounter.cpp | 11 +- engines/sword25/gfx/framecounter.h | 12 +- engines/sword25/gfx/graphicengine.cpp | 84 ++- engines/sword25/gfx/graphicengine.h | 162 +++-- engines/sword25/gfx/graphicengine_script.cpp | 721 ++++++++-------------- engines/sword25/gfx/image/b25sloader.cpp | 61 +- engines/sword25/gfx/image/b25sloader.h | 20 +- engines/sword25/gfx/image/image.h | 176 +++--- engines/sword25/gfx/image/imageloader.cpp | 64 +- engines/sword25/gfx/image/imageloader.h | 342 +++++----- engines/sword25/gfx/image/imageloader_ids.h | 17 +- engines/sword25/gfx/image/pngloader.cpp | 187 +++--- engines/sword25/gfx/image/pngloader.h | 44 +- engines/sword25/gfx/image/vectorimage.cpp | 376 +++++------ engines/sword25/gfx/image/vectorimage.h | 169 +++-- engines/sword25/gfx/image/vectorimagerenderer.cpp | 90 ++- engines/sword25/gfx/image/vectorimagerenderer.h | 19 +- engines/sword25/gfx/opengl/glimage.cpp | 85 ++- engines/sword25/gfx/opengl/glimage.h | 81 ++- engines/sword25/gfx/opengl/glvectorimageblit.cpp | 54 +- engines/sword25/gfx/opengl/openglgfx.cpp | 207 +++---- engines/sword25/gfx/opengl/openglgfx.h | 50 +- engines/sword25/gfx/opengl/swimage.cpp | 43 +- engines/sword25/gfx/opengl/swimage.h | 65 +- engines/sword25/gfx/panel.cpp | 32 +- engines/sword25/gfx/panel.h | 22 +- engines/sword25/gfx/renderobject.cpp | 179 ++---- engines/sword25/gfx/renderobject.h | 444 ++++++------- engines/sword25/gfx/renderobjectmanager.cpp | 34 +- engines/sword25/gfx/renderobjectmanager.h | 73 +-- engines/sword25/gfx/renderobjectptr.cpp | 4 +- engines/sword25/gfx/renderobjectptr.h | 19 +- engines/sword25/gfx/renderobjectregistry.cpp | 8 +- engines/sword25/gfx/renderobjectregistry.h | 8 +- engines/sword25/gfx/rootrenderobject.h | 16 +- engines/sword25/gfx/screenshot.cpp | 75 +-- engines/sword25/gfx/screenshot.h | 11 +- engines/sword25/gfx/staticbitmap.cpp | 93 ++- engines/sword25/gfx/staticbitmap.h | 33 +- engines/sword25/gfx/text.cpp | 164 ++--- engines/sword25/gfx/text.h | 116 ++-- engines/sword25/gfx/timedrenderobject.cpp | 8 +- engines/sword25/gfx/timedrenderobject.h | 15 +- 61 files changed, 2827 insertions(+), 3378 deletions(-) (limited to 'engines/sword25/gfx') diff --git a/engines/sword25/gfx/animation.cpp b/engines/sword25/gfx/animation.cpp index deeca40df7..f906f05828 100644 --- a/engines/sword25/gfx/animation.cpp +++ b/engines/sword25/gfx/animation.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -57,9 +57,8 @@ namespace Sword25 { // Konstruktion / Destruktion // -------------------------- -BS_Animation::BS_Animation(BS_RenderObjectPtr ParentPtr, const Common::String & FileName) : - BS_TimedRenderObject(ParentPtr, BS_RenderObject::TYPE_ANIMATION) -{ +BS_Animation::BS_Animation(BS_RenderObjectPtr ParentPtr, const Common::String &FileName) : + BS_TimedRenderObject(ParentPtr, BS_RenderObject::TYPE_ANIMATION) { // Das BS_RenderObject konnte nicht erzeugt werden, daher muss an dieser Stelle abgebrochen werden. if (!m_InitSuccess) return; @@ -69,16 +68,15 @@ BS_Animation::BS_Animation(BS_RenderObjectPtr ParentPtr, const m_InitSuccess = false; InitializeAnimationResource(FileName); - + // Erfolg signalisieren. m_InitSuccess = true; } // ----------------------------------------------------------------------------- -BS_Animation::BS_Animation(BS_RenderObjectPtr ParentPtr, const BS_AnimationTemplate & Template) : - BS_TimedRenderObject(ParentPtr, BS_RenderObject::TYPE_ANIMATION) -{ +BS_Animation::BS_Animation(BS_RenderObjectPtr ParentPtr, const BS_AnimationTemplate &Template) : + BS_TimedRenderObject(ParentPtr, BS_RenderObject::TYPE_ANIMATION) { // Das BS_RenderObject konnte nicht erzeugt werden, daher muss an dieser Stelle abgebrochen werden. if (!m_InitSuccess) return; @@ -95,9 +93,8 @@ BS_Animation::BS_Animation(BS_RenderObjectPtr ParentPtr, const // ----------------------------------------------------------------------------- -BS_Animation::BS_Animation(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : - BS_TimedRenderObject(ParentPtr, BS_RenderObject::TYPE_ANIMATION, Handle) -{ +BS_Animation::BS_Animation(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : + BS_TimedRenderObject(ParentPtr, BS_RenderObject::TYPE_ANIMATION, Handle) { // Das BS_RenderObject konnte nicht erzeugt werden, daher muss an dieser Stelle abgebrochen werden. if (!m_InitSuccess) return; @@ -109,14 +106,12 @@ BS_Animation::BS_Animation(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr // ----------------------------------------------------------------------------- -void BS_Animation::InitializeAnimationResource(const Common::String &FileName) -{ +void BS_Animation::InitializeAnimationResource(const Common::String &FileName) { // Die Resource wird für die gesamte Lebensdauer des Animations-Objektes gelockt. - BS_Resource * ResourcePtr = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(FileName); + BS_Resource *ResourcePtr = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(FileName); if (ResourcePtr && ResourcePtr->GetType() == BS_Resource::TYPE_ANIMATION) m_AnimationResourcePtr = static_cast(ResourcePtr); - else - { + else { BS_LOG_ERRORLN("The resource \"%s\" could not be requested. The Animation can't be created.", FileName.c_str()); return; } @@ -127,8 +122,7 @@ void BS_Animation::InitializeAnimationResource(const Common::String &FileName) // ----------------------------------------------------------------------------- -void BS_Animation::InitMembers() -{ +void BS_Animation::InitMembers() { m_CurrentFrame = 0; m_CurrentFrameTime = 0; m_Direction = FORWARD; @@ -146,17 +140,15 @@ void BS_Animation::InitMembers() // ----------------------------------------------------------------------------- -BS_Animation::~BS_Animation() -{ - if (GetAnimationDescription()) - { +BS_Animation::~BS_Animation() { + if (GetAnimationDescription()) { Stop(); GetAnimationDescription()->Unlock(); } // Delete Callbacks Common::Array::iterator it = m_DeleteCallbacks.begin(); - for (; it != m_DeleteCallbacks.end(); it++) ((*it).Callback)((*it).Data); + for (; it != m_DeleteCallbacks.end(); it++)((*it).Callback)((*it).Data); } @@ -164,8 +156,7 @@ BS_Animation::~BS_Animation() // Steuermethoden // ----------------------------------------------------------------------------- -void BS_Animation::Play() -{ +void BS_Animation::Play() { // Wenn die Animation zuvor komplett durchgelaufen ist, wird sie wieder von Anfang abgespielt if (m_Finished) Stop(); @@ -175,16 +166,14 @@ void BS_Animation::Play() // ----------------------------------------------------------------------------- -void BS_Animation::Pause() -{ +void BS_Animation::Pause() { m_Running = false; UnlockAllFrames(); } // ----------------------------------------------------------------------------- -void BS_Animation::Stop() -{ +void BS_Animation::Stop() { m_CurrentFrame = 0; m_CurrentFrameTime = 0; m_Direction = FORWARD; @@ -193,15 +182,13 @@ void BS_Animation::Stop() // ----------------------------------------------------------------------------- -void BS_Animation::SetFrame(unsigned int Nr) -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +void BS_Animation::SetFrame(unsigned int Nr) { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - if (Nr >= animationDescriptionPtr->GetFrameCount()) - { + if (Nr >= animationDescriptionPtr->GetFrameCount()) { BS_LOG_ERRORLN("Tried to set animation to illegal frame (%d). Value must be between 0 and %d.", - Nr, animationDescriptionPtr->GetFrameCount()); + Nr, animationDescriptionPtr->GetFrameCount()); return; } @@ -215,37 +202,33 @@ void BS_Animation::SetFrame(unsigned int Nr) // Rendern // ----------------------------------------------------------------------------- -bool BS_Animation::DoRender() -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +bool BS_Animation::DoRender() { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); BS_ASSERT(m_CurrentFrame < animationDescriptionPtr->GetFrameCount()); // Bitmap des aktuellen Frames holen - BS_Resource* pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(animationDescriptionPtr->GetFrame(m_CurrentFrame).FileName); + BS_Resource *pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(animationDescriptionPtr->GetFrame(m_CurrentFrame).FileName); BS_ASSERT(pResource); BS_ASSERT(pResource->GetType() == BS_Resource::TYPE_BITMAP); - BS_BitmapResource * pBitmapResource = static_cast(pResource); + BS_BitmapResource *pBitmapResource = static_cast(pResource); // Framebufferobjekt holen - BS_GraphicEngine * pGfx = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); + BS_GraphicEngine *pGfx = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); BS_ASSERT(pGfx); // Bitmap zeichnen bool Result; - if (IsScalingAllowed() && (m_Width != pBitmapResource->GetWidth() || m_Height != pBitmapResource->GetHeight())) - { + if (IsScalingAllowed() && (m_Width != pBitmapResource->GetWidth() || m_Height != pBitmapResource->GetHeight())) { Result = pBitmapResource->Blit(m_AbsoluteX, m_AbsoluteY, - (animationDescriptionPtr->GetFrame(m_CurrentFrame).FlipV ? BS_BitmapResource::FLIP_V : 0) | - (animationDescriptionPtr->GetFrame(m_CurrentFrame).FlipH ? BS_BitmapResource::FLIP_H : 0), - 0, m_ModulationColor, m_Width, m_Height); - } - else - { + (animationDescriptionPtr->GetFrame(m_CurrentFrame).FlipV ? BS_BitmapResource::FLIP_V : 0) | + (animationDescriptionPtr->GetFrame(m_CurrentFrame).FlipH ? BS_BitmapResource::FLIP_H : 0), + 0, m_ModulationColor, m_Width, m_Height); + } else { Result = pBitmapResource->Blit(m_AbsoluteX, m_AbsoluteY, - (animationDescriptionPtr->GetFrame(m_CurrentFrame).FlipV ? BS_BitmapResource::FLIP_V : 0) | - (animationDescriptionPtr->GetFrame(m_CurrentFrame).FlipH ? BS_BitmapResource::FLIP_H : 0), - 0, m_ModulationColor, -1, -1); + (animationDescriptionPtr->GetFrame(m_CurrentFrame).FlipV ? BS_BitmapResource::FLIP_V : 0) | + (animationDescriptionPtr->GetFrame(m_CurrentFrame).FlipH ? BS_BitmapResource::FLIP_H : 0), + 0, m_ModulationColor, -1, -1); } // Resource freigeben @@ -258,15 +241,13 @@ bool BS_Animation::DoRender() // Frame Notifikation // ----------------------------------------------------------------------------- -void BS_Animation::FrameNotification(int TimeElapsed) -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +void BS_Animation::FrameNotification(int TimeElapsed) { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); BS_ASSERT(TimeElapsed >= 0); // Nur wenn die Animation läuft wird sie auch weiterbewegt - if (m_Running) - { + if (m_Running) { int OldFrame = m_CurrentFrame; // Gesamte vergangene Zeit bestimmen (inkl. Restzeit des aktuellen Frames) @@ -280,8 +261,7 @@ void BS_Animation::FrameNotification(int TimeElapsed) // Neuen Frame bestimmen (je nach aktuellener Abspielrichtung wird addiert oder subtrahiert) int TmpCurFrame = m_CurrentFrame; - switch (m_Direction) - { + switch (m_Direction) { case FORWARD: TmpCurFrame += SkipFrames; break; @@ -292,20 +272,16 @@ void BS_Animation::FrameNotification(int TimeElapsed) default: BS_ASSERT(0); - } + } // Überläufe behandeln - if (TmpCurFrame < 0) - { + if (TmpCurFrame < 0) { // Loop-Point Callbacks Common::Array::iterator it = m_LoopPointCallbacks.begin(); - while (it != m_LoopPointCallbacks.end()) - { - if (((*it).Callback)((*it).Data) == false) - { + while (it != m_LoopPointCallbacks.end()) { + if (((*it).Callback)((*it).Data) == false) { it = m_LoopPointCallbacks.erase(it); - } - else + } else it++; } @@ -313,21 +289,17 @@ void BS_Animation::FrameNotification(int TimeElapsed) BS_ASSERT(animationDescriptionPtr->GetAnimationType() == AT_JOJO); TmpCurFrame = - TmpCurFrame; m_Direction = FORWARD; - } - else if (static_cast(TmpCurFrame) >= animationDescriptionPtr->GetFrameCount()) - { + } else if (static_cast(TmpCurFrame) >= animationDescriptionPtr->GetFrameCount()) { // Loop-Point Callbacks Common::Array::iterator it = m_LoopPointCallbacks.begin(); - while (it != m_LoopPointCallbacks.end()) - { + while (it != m_LoopPointCallbacks.end()) { if (((*it).Callback)((*it).Data) == false) it = m_LoopPointCallbacks.erase(it); else it++; } - switch (animationDescriptionPtr->GetAnimationType()) - { + switch (animationDescriptionPtr->GetAnimationType()) { case AT_ONESHOT: TmpCurFrame = animationDescriptionPtr->GetFrameCount() - 1; m_Finished = true; @@ -348,16 +320,13 @@ void BS_Animation::FrameNotification(int TimeElapsed) } } - if (m_CurrentFrame != TmpCurFrame) - { + if (m_CurrentFrame != TmpCurFrame) { ForceRefresh(); - - if (animationDescriptionPtr->GetFrame(m_CurrentFrame).Action != "") - { + + if (animationDescriptionPtr->GetFrame(m_CurrentFrame).Action != "") { // Action Callbacks Common::Array::iterator it = m_ActionCallbacks.begin(); - while (it != m_ActionCallbacks.end()) - { + while (it != m_ActionCallbacks.end()) { if (((*it).Callback)((*it).Data) == false) it = m_ActionCallbacks.erase(it); else @@ -378,23 +347,22 @@ void BS_Animation::FrameNotification(int TimeElapsed) // ----------------------------------------------------------------------------- -void BS_Animation::ComputeCurrentCharacteristics() -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +void BS_Animation::ComputeCurrentCharacteristics() { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - const BS_AnimationResource::Frame & CurFrame = animationDescriptionPtr->GetFrame(m_CurrentFrame); + const BS_AnimationResource::Frame &CurFrame = animationDescriptionPtr->GetFrame(m_CurrentFrame); - BS_Resource* pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(CurFrame.FileName); + BS_Resource *pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(CurFrame.FileName); BS_ASSERT(pResource); BS_ASSERT(pResource->GetType() == BS_Resource::TYPE_BITMAP); - BS_BitmapResource* pBitmap = static_cast(pResource); + BS_BitmapResource *pBitmap = static_cast(pResource); // Größe des Bitmaps auf die Animation übertragen m_Width = static_cast(pBitmap->GetWidth() * m_ScaleFactorX); m_Height = static_cast(pBitmap->GetHeight() * m_ScaleFactorY); // Position anhand des Hotspots berechnen und setzen - int PosX = m_RelX + ComputeXModifier(); + int PosX = m_RelX + ComputeXModifier(); int PosY = m_RelY + ComputeYModifier(); BS_RenderObject::SetPos(PosX, PosY); @@ -404,16 +372,12 @@ void BS_Animation::ComputeCurrentCharacteristics() // ----------------------------------------------------------------------------- -bool BS_Animation::LockAllFrames() -{ - if (!m_FramesLocked) - { - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +bool BS_Animation::LockAllFrames() { + if (!m_FramesLocked) { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - for (unsigned int i = 0; i < animationDescriptionPtr->GetFrameCount(); ++i) - { - if (!BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(animationDescriptionPtr->GetFrame(i).FileName)) - { + for (unsigned int i = 0; i < animationDescriptionPtr->GetFrameCount(); ++i) { + if (!BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(animationDescriptionPtr->GetFrame(i).FileName)) { BS_LOG_ERRORLN("Could not lock all animation frames."); return false; } @@ -427,17 +391,13 @@ bool BS_Animation::LockAllFrames() // ----------------------------------------------------------------------------- -bool BS_Animation::UnlockAllFrames() -{ - if (m_FramesLocked) - { - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +bool BS_Animation::UnlockAllFrames() { + if (m_FramesLocked) { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - for (unsigned int i = 0; i < animationDescriptionPtr->GetFrameCount(); ++i) - { - BS_Resource* pResource; - if (!(pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(animationDescriptionPtr->GetFrame(i).FileName))) - { + for (unsigned int i = 0; i < animationDescriptionPtr->GetFrameCount(); ++i) { + BS_Resource *pResource; + if (!(pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(animationDescriptionPtr->GetFrame(i).FileName))) { BS_LOG_ERRORLN("Could not unlock all animation frames."); return false; } @@ -457,54 +417,48 @@ bool BS_Animation::UnlockAllFrames() // Getter // ----------------------------------------------------------------------------- -BS_Animation::ANIMATION_TYPES BS_Animation::GetAnimationType() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +BS_Animation::ANIMATION_TYPES BS_Animation::GetAnimationType() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); return animationDescriptionPtr->GetAnimationType(); } // ----------------------------------------------------------------------------- -int BS_Animation::GetFPS() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +int BS_Animation::GetFPS() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); return animationDescriptionPtr->GetFPS(); } // ----------------------------------------------------------------------------- -int BS_Animation::GetFrameCount() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +int BS_Animation::GetFrameCount() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); return animationDescriptionPtr->GetFrameCount(); } // ----------------------------------------------------------------------------- -bool BS_Animation::IsScalingAllowed() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +bool BS_Animation::IsScalingAllowed() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); return animationDescriptionPtr->IsScalingAllowed(); } // ----------------------------------------------------------------------------- -bool BS_Animation::IsAlphaAllowed() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +bool BS_Animation::IsAlphaAllowed() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); return animationDescriptionPtr->IsAlphaAllowed(); } // ----------------------------------------------------------------------------- -bool BS_Animation::IsColorModulationAllowed() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +bool BS_Animation::IsColorModulationAllowed() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); return animationDescriptionPtr->IsColorModulationAllowed(); } @@ -513,8 +467,7 @@ bool BS_Animation::IsColorModulationAllowed() const // Positionieren // ----------------------------------------------------------------------------- -void BS_Animation::SetPos(int RelX, int RelY) -{ +void BS_Animation::SetPos(int RelX, int RelY) { m_RelX = RelX; m_RelY = RelY; @@ -523,8 +476,7 @@ void BS_Animation::SetPos(int RelX, int RelY) // ----------------------------------------------------------------------------- -void BS_Animation::SetX(int RelX) -{ +void BS_Animation::SetX(int RelX) { m_RelX = RelX; ComputeCurrentCharacteristics(); @@ -532,8 +484,7 @@ void BS_Animation::SetX(int RelX) // ----------------------------------------------------------------------------- -void BS_Animation::SetY(int RelY) -{ +void BS_Animation::SetY(int RelY) { m_RelY = RelY; ComputeCurrentCharacteristics(); @@ -543,19 +494,16 @@ void BS_Animation::SetY(int RelY) // Darstellungsart festlegen // ----------------------------------------------------------------------------- -void BS_Animation::SetAlpha(int Alpha) -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +void BS_Animation::SetAlpha(int Alpha) { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - if (!animationDescriptionPtr->IsAlphaAllowed()) - { + if (!animationDescriptionPtr->IsAlphaAllowed()) { BS_LOG_WARNINGLN("Tried to set alpha value on an animation that does not support alpha. Call was ignored."); return; } unsigned int NewModulationColor = (m_ModulationColor & 0x00ffffff) | Alpha << 24; - if (NewModulationColor != m_ModulationColor) - { + if (NewModulationColor != m_ModulationColor) { m_ModulationColor = NewModulationColor; ForceRefresh(); } @@ -563,19 +511,16 @@ void BS_Animation::SetAlpha(int Alpha) // ----------------------------------------------------------------------------- -void BS_Animation::SetModulationColor(unsigned int ModulationColor) -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +void BS_Animation::SetModulationColor(unsigned int ModulationColor) { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - if (!animationDescriptionPtr->IsColorModulationAllowed()) - { + if (!animationDescriptionPtr->IsColorModulationAllowed()) { BS_LOG_WARNINGLN("Tried to set modulation color on an animation that does not support color modulation. Call was ignored"); return; } unsigned int NewModulationColor = (ModulationColor & 0x00ffffff) | (m_ModulationColor & 0xff000000); - if (NewModulationColor != m_ModulationColor) - { + if (NewModulationColor != m_ModulationColor) { m_ModulationColor = NewModulationColor; ForceRefresh(); } @@ -583,26 +528,22 @@ void BS_Animation::SetModulationColor(unsigned int ModulationColor) // ----------------------------------------------------------------------------- -void BS_Animation::SetScaleFactor(float ScaleFactor) -{ +void BS_Animation::SetScaleFactor(float ScaleFactor) { SetScaleFactorX(ScaleFactor); SetScaleFactorY(ScaleFactor); } // ----------------------------------------------------------------------------- -void BS_Animation::SetScaleFactorX(float ScaleFactorX) -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +void BS_Animation::SetScaleFactorX(float ScaleFactorX) { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - if (!animationDescriptionPtr->IsScalingAllowed()) - { + if (!animationDescriptionPtr->IsScalingAllowed()) { BS_LOG_WARNINGLN("Tried to set x scale factor on an animation that does not support scaling. Call was ignored"); return; } - if (ScaleFactorX != m_ScaleFactorX) - { + if (ScaleFactorX != m_ScaleFactorX) { m_ScaleFactorX = ScaleFactorX; if (m_ScaleFactorX <= 0.0f) m_ScaleFactorX = 0.001f; ForceRefresh(); @@ -612,18 +553,15 @@ void BS_Animation::SetScaleFactorX(float ScaleFactorX) // ----------------------------------------------------------------------------- -void BS_Animation::SetScaleFactorY(float ScaleFactorY) -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +void BS_Animation::SetScaleFactorY(float ScaleFactorY) { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - if (!animationDescriptionPtr->IsScalingAllowed()) - { + if (!animationDescriptionPtr->IsScalingAllowed()) { BS_LOG_WARNINGLN("Tried to set y scale factor on an animation that does not support scaling. Call was ignored"); return; } - if (ScaleFactorY != m_ScaleFactorY) - { + if (ScaleFactorY != m_ScaleFactorY) { m_ScaleFactorY = ScaleFactorY; if (m_ScaleFactorY <= 0.0f) m_ScaleFactorY = 0.001f; ForceRefresh(); @@ -633,56 +571,50 @@ void BS_Animation::SetScaleFactorY(float ScaleFactorY) // ----------------------------------------------------------------------------- -const Common::String & BS_Animation::GetCurrentAction() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +const Common::String &BS_Animation::GetCurrentAction() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); return animationDescriptionPtr->GetFrame(m_CurrentFrame).Action; } // ----------------------------------------------------------------------------- -int BS_Animation::GetX() const -{ +int BS_Animation::GetX() const { return m_RelX; } // ----------------------------------------------------------------------------- -int BS_Animation::GetY() const -{ +int BS_Animation::GetY() const { return m_RelY; } // ----------------------------------------------------------------------------- -int BS_Animation::GetAbsoluteX() const -{ +int BS_Animation::GetAbsoluteX() const { return m_AbsoluteX + (m_RelX - m_X); } // ----------------------------------------------------------------------------- -int BS_Animation::GetAbsoluteY() const -{ +int BS_Animation::GetAbsoluteY() const { return m_AbsoluteY + (m_RelY - m_Y); } // ----------------------------------------------------------------------------- -int BS_Animation::ComputeXModifier() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +int BS_Animation::ComputeXModifier() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - const BS_AnimationResource::Frame & CurFrame = animationDescriptionPtr->GetFrame(m_CurrentFrame); + const BS_AnimationResource::Frame &CurFrame = animationDescriptionPtr->GetFrame(m_CurrentFrame); - BS_Resource* pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(CurFrame.FileName); + BS_Resource *pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(CurFrame.FileName); BS_ASSERT(pResource); BS_ASSERT(pResource->GetType() == BS_Resource::TYPE_BITMAP); - BS_BitmapResource* pBitmap = static_cast(pResource); + BS_BitmapResource *pBitmap = static_cast(pResource); int Result = CurFrame.FlipV ? - static_cast((pBitmap->GetWidth() - 1 - CurFrame.HotspotX) * m_ScaleFactorX) : - - static_cast(CurFrame.HotspotX * m_ScaleFactorX); + - static_cast(CurFrame.HotspotX * m_ScaleFactorX); pBitmap->Release(); @@ -691,19 +623,18 @@ int BS_Animation::ComputeXModifier() const // ----------------------------------------------------------------------------- -int BS_Animation::ComputeYModifier() const -{ - BS_AnimationDescription * animationDescriptionPtr = GetAnimationDescription(); +int BS_Animation::ComputeYModifier() const { + BS_AnimationDescription *animationDescriptionPtr = GetAnimationDescription(); BS_ASSERT(animationDescriptionPtr); - const BS_AnimationResource::Frame & CurFrame = animationDescriptionPtr->GetFrame(m_CurrentFrame); + const BS_AnimationResource::Frame &CurFrame = animationDescriptionPtr->GetFrame(m_CurrentFrame); - BS_Resource* pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(CurFrame.FileName); + BS_Resource *pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(CurFrame.FileName); BS_ASSERT(pResource); BS_ASSERT(pResource->GetType() == BS_Resource::TYPE_BITMAP); - BS_BitmapResource* pBitmap = static_cast(pResource); + BS_BitmapResource *pBitmap = static_cast(pResource); int Result = CurFrame.FlipH ? - static_cast((pBitmap->GetHeight() - 1 - CurFrame.HotspotY) * m_ScaleFactorY) : - - static_cast(CurFrame.HotspotY * m_ScaleFactorY); + - static_cast(CurFrame.HotspotY * m_ScaleFactorY); pBitmap->Release(); @@ -712,8 +643,7 @@ int BS_Animation::ComputeYModifier() const // ----------------------------------------------------------------------------- -void BS_Animation::RegisterActionCallback(ANIMATION_CALLBACK Callback, unsigned int Data) -{ +void BS_Animation::RegisterActionCallback(ANIMATION_CALLBACK Callback, unsigned int Data) { ANIMATION_CALLBACK_DATA CD; CD.Callback = Callback; CD.Data = Data; @@ -722,8 +652,7 @@ void BS_Animation::RegisterActionCallback(ANIMATION_CALLBACK Callback, unsigned // ----------------------------------------------------------------------------- -void BS_Animation::RegisterLoopPointCallback(ANIMATION_CALLBACK Callback, unsigned int Data) -{ +void BS_Animation::RegisterLoopPointCallback(ANIMATION_CALLBACK Callback, unsigned int Data) { ANIMATION_CALLBACK_DATA CD; CD.Callback = Callback; CD.Data = Data; @@ -732,8 +661,7 @@ void BS_Animation::RegisterLoopPointCallback(ANIMATION_CALLBACK Callback, unsign // ----------------------------------------------------------------------------- -void BS_Animation::RegisterDeleteCallback(ANIMATION_CALLBACK Callback, unsigned int Data) -{ +void BS_Animation::RegisterDeleteCallback(ANIMATION_CALLBACK Callback, unsigned int Data) { ANIMATION_CALLBACK_DATA CD; CD.Callback = Callback; CD.Data = Data; @@ -744,15 +672,13 @@ void BS_Animation::RegisterDeleteCallback(ANIMATION_CALLBACK Callback, unsigned // Persistenz // ----------------------------------------------------------------------------- -void BS_Animation::PersistCallbackVector(BS_OutputPersistenceBlock & Writer, const Common::Array & Vector) -{ +void BS_Animation::PersistCallbackVector(BS_OutputPersistenceBlock &Writer, const Common::Array & Vector) { // Anzahl an Callbacks persistieren. Writer.Write(Vector.size()); - + // Alle Callbacks einzeln persistieren. Common::Array::const_iterator It = Vector.begin(); - while (It != Vector.end()) - { + while (It != Vector.end()) { Writer.Write(BS_CallbackRegistry::GetInstance().ResolveCallbackPointer(It->Callback)); Writer.Write(It->Data); @@ -762,8 +688,7 @@ void BS_Animation::PersistCallbackVector(BS_OutputPersistenceBlock & Writer, con // ----------------------------------------------------------------------------- -void BS_Animation::UnpersistCallbackVector(BS_InputPersistenceBlock & Reader, Common::Array & Vector) -{ +void BS_Animation::UnpersistCallbackVector(BS_InputPersistenceBlock &Reader, Common::Array & Vector) { // Callbackvector leeren. Vector.resize(0); @@ -772,14 +697,13 @@ void BS_Animation::UnpersistCallbackVector(BS_InputPersistenceBlock & Reader, Co Reader.Read(CallbackCount); // Alle Callbacks einzeln wieder herstellen. - for (unsigned int i = 0; i < CallbackCount; ++i) - { + for (unsigned int i = 0; i < CallbackCount; ++i) { ANIMATION_CALLBACK_DATA CallbackData; Common::String CallbackFunctionName; Reader.Read(CallbackFunctionName); CallbackData.Callback = reinterpret_cast(BS_CallbackRegistry::GetInstance().ResolveCallbackFunction(CallbackFunctionName)); - + Reader.Read(CallbackData.Data); Vector.push_back(CallbackData); @@ -788,8 +712,7 @@ void BS_Animation::UnpersistCallbackVector(BS_InputPersistenceBlock & Reader, Co // ----------------------------------------------------------------------------- -bool BS_Animation::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_Animation::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; Result &= BS_RenderObject::Persist(Writer); @@ -806,20 +729,15 @@ bool BS_Animation::Persist(BS_OutputPersistenceBlock & Writer) Writer.Write(static_cast(m_Direction)); // Je nach Animationstyp entweder das Template oder die Ressource speichern. - if (m_AnimationResourcePtr) - { + if (m_AnimationResourcePtr) { unsigned int Marker = 0; Writer.Write(Marker); Writer.Write(m_AnimationResourcePtr->GetFileName()); - } - else if (m_AnimationTemplateHandle) - { + } else if (m_AnimationTemplateHandle) { unsigned int Marker = 1; Writer.Write(Marker); Writer.Write(m_AnimationTemplateHandle); - } - else - { + } else { BS_ASSERT(false); } @@ -837,8 +755,7 @@ bool BS_Animation::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_Animation::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_Animation::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; Result &= BS_RenderObject::Unpersist(Reader); @@ -859,18 +776,13 @@ bool BS_Animation::Unpersist(BS_InputPersistenceBlock & Reader) // Animationstyp einlesen. unsigned int Marker; Reader.Read(Marker); - if (Marker == 0) - { + if (Marker == 0) { Common::String ResourceFilename; Reader.Read(ResourceFilename); InitializeAnimationResource(ResourceFilename); - } - else if (Marker == 1) - { + } else if (Marker == 1) { Reader.Read(m_AnimationTemplateHandle); - } - else - { + } else { BS_ASSERT(false); } @@ -888,8 +800,7 @@ bool BS_Animation::Unpersist(BS_InputPersistenceBlock & Reader) // ----------------------------------------------------------------------------- -BS_AnimationDescription * BS_Animation::GetAnimationDescription() const -{ +BS_AnimationDescription *BS_Animation::GetAnimationDescription() const { if (m_AnimationResourcePtr) return m_AnimationResourcePtr; else return BS_AnimationTemplateRegistry::GetInstance().ResolveHandle(m_AnimationTemplateHandle); } diff --git a/engines/sword25/gfx/animation.h b/engines/sword25/gfx/animation.h index 9faf17d7a3..93f450dce0 100644 --- a/engines/sword25/gfx/animation.h +++ b/engines/sword25/gfx/animation.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -53,23 +53,21 @@ class BS_AnimationTemplate; class BS_AnimationDescription; class BS_InputPersistenceBlock; -class BS_Animation : public BS_TimedRenderObject -{ -friend class BS_RenderObject; +class BS_Animation : public BS_TimedRenderObject { + friend class BS_RenderObject; private: - BS_Animation(BS_RenderObjectPtr ParentPtr, const Common::String & FileName); - BS_Animation(BS_RenderObjectPtr ParentPtr, const BS_AnimationTemplate & Template); - BS_Animation(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); + BS_Animation(BS_RenderObjectPtr ParentPtr, const Common::String &FileName); + BS_Animation(BS_RenderObjectPtr ParentPtr, const BS_AnimationTemplate &Template); + BS_Animation(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); public: - enum ANIMATION_TYPES - { + enum ANIMATION_TYPES { AT_ONESHOT, AT_LOOP, AT_JOJO }; - + virtual ~BS_Animation(); void Play(); @@ -80,44 +78,44 @@ public: virtual void SetPos(int X, int Y); virtual void SetX(int X); virtual void SetY(int Y); - + virtual int GetX() const; virtual int GetY() const; virtual int GetAbsoluteX() const; virtual int GetAbsoluteY() const; /** - @brief Setzt den Alphawert der Animation. - @param Alpha der neue Alphawert der Animation (0 = keine Deckung, 255 = volle Deckung). - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsAlphaAllowed() true zurückgibt. + @brief Setzt den Alphawert der Animation. + @param Alpha der neue Alphawert der Animation (0 = keine Deckung, 255 = volle Deckung). + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsAlphaAllowed() true zurückgibt. */ void SetAlpha(int Alpha); /** - @brief Setzt die Modulationfarbe der Animation. - @param Color eine 24-Bit Farbe, die die Modulationsfarbe der Animation festlegt. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsColorModulationAllowed() true zurückgibt. + @brief Setzt die Modulationfarbe der Animation. + @param Color eine 24-Bit Farbe, die die Modulationsfarbe der Animation festlegt. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsColorModulationAllowed() true zurückgibt. */ void SetModulationColor(unsigned int ModulationColor); /** - @brief Setzt den Skalierungsfaktor der Animation. - @param ScaleFactor der Faktor um den die Animation in beide Richtungen gestreckt werden soll. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. + @brief Setzt den Skalierungsfaktor der Animation. + @param ScaleFactor der Faktor um den die Animation in beide Richtungen gestreckt werden soll. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ void SetScaleFactor(float ScaleFactor); /** - @brief Setzt den Skalierungsfaktor der Animation auf der X-Achse. - @param ScaleFactor der Faktor um den die Animation in Richtungen der X-Achse gestreckt werden soll. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. + @brief Setzt den Skalierungsfaktor der Animation auf der X-Achse. + @param ScaleFactor der Faktor um den die Animation in Richtungen der X-Achse gestreckt werden soll. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ void SetScaleFactorX(float ScaleFactorX); /** - @brief Setzt den Skalierungsfaktor der Animation auf der Y-Achse. - @param ScaleFactor der Faktor um den die Animation in Richtungen der Y-Achse gestreckt werden soll. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. + @brief Setzt den Skalierungsfaktor der Animation auf der Y-Achse. + @param ScaleFactor der Faktor um den die Animation in Richtungen der Y-Achse gestreckt werden soll. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ void SetScaleFactorY(float ScaleFactorY); @@ -125,28 +123,36 @@ public: @brief Gibt den Skalierungsfakter der Animation auf der X-Achse zurück. @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ - float GetScaleFactorX() const { return m_ScaleFactorX; } + float GetScaleFactorX() const { + return m_ScaleFactorX; + } /** @brief Gibt den Skalierungsfakter der Animation auf der Y-Achse zurück. @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ - float GetScaleFactorY() const { return m_ScaleFactorY; } - - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + float GetScaleFactorY() const { + return m_ScaleFactorY; + } + + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); virtual void FrameNotification(int TimeElapsed); - - ANIMATION_TYPES GetAnimationType() const; - int GetFPS() const; - int GetFrameCount() const; - bool IsScalingAllowed() const; - bool IsAlphaAllowed() const; - bool IsColorModulationAllowed() const; - unsigned int GetCurrentFrame() const { return m_CurrentFrame; } - const Common::String & GetCurrentAction() const ; - bool IsRunning() const { return m_Running; } + + ANIMATION_TYPES GetAnimationType() const; + int GetFPS() const; + int GetFrameCount() const; + bool IsScalingAllowed() const; + bool IsAlphaAllowed() const; + bool IsColorModulationAllowed() const; + unsigned int GetCurrentFrame() const { + return m_CurrentFrame; + } + const Common::String &GetCurrentAction() const ; + bool IsRunning() const { + return m_Running; + } typedef bool (*ANIMATION_CALLBACK)(unsigned int); @@ -158,68 +164,66 @@ protected: virtual bool DoRender(); private: - enum DIRECTION - { + enum DIRECTION { FORWARD, BACKWARD }; - int m_RelX; - int m_RelY; - float m_ScaleFactorX; - float m_ScaleFactorY; - unsigned int m_ModulationColor; - unsigned int m_CurrentFrame; - int m_CurrentFrameTime; - bool m_Running; - bool m_Finished; - DIRECTION m_Direction; - BS_AnimationResource * m_AnimationResourcePtr; - unsigned int m_AnimationTemplateHandle; - bool m_FramesLocked; - - struct ANIMATION_CALLBACK_DATA - { - ANIMATION_CALLBACK Callback; - unsigned int Data; + int m_RelX; + int m_RelY; + float m_ScaleFactorX; + float m_ScaleFactorY; + unsigned int m_ModulationColor; + unsigned int m_CurrentFrame; + int m_CurrentFrameTime; + bool m_Running; + bool m_Finished; + DIRECTION m_Direction; + BS_AnimationResource *m_AnimationResourcePtr; + unsigned int m_AnimationTemplateHandle; + bool m_FramesLocked; + + struct ANIMATION_CALLBACK_DATA { + ANIMATION_CALLBACK Callback; + unsigned int Data; }; Common::Array m_LoopPointCallbacks; Common::Array m_ActionCallbacks; Common::Array m_DeleteCallbacks; /** - @brief Lockt alle Frames. - @return Gibt false zurück, falls nicht alle Frames gelockt werden konnten. + @brief Lockt alle Frames. + @return Gibt false zurück, falls nicht alle Frames gelockt werden konnten. */ bool LockAllFrames(); /** - @brief Unlockt alle Frames. - @return Gibt false zurück, falls nicht alles Frames freigegeben werden konnten. + @brief Unlockt alle Frames. + @return Gibt false zurück, falls nicht alles Frames freigegeben werden konnten. */ bool UnlockAllFrames(); /** - @brief Diese Methode aktualisiert die Parameter (Größe, Position) der Animation anhand des aktuellen Frames. + @brief Diese Methode aktualisiert die Parameter (Größe, Position) der Animation anhand des aktuellen Frames. - Diese Methode muss bei jedem Framewechsel aufgerufen werden damit der RenderObject-Manager immer aktuelle Daten hat. + Diese Methode muss bei jedem Framewechsel aufgerufen werden damit der RenderObject-Manager immer aktuelle Daten hat. */ void ComputeCurrentCharacteristics(); /** - @brief Berechnet den Abstand zwischen dem linken Rand und dem Hotspot auf X-Achse in der aktuellen Darstellung. + @brief Berechnet den Abstand zwischen dem linken Rand und dem Hotspot auf X-Achse in der aktuellen Darstellung. */ int ComputeXModifier() const; /** - @brief Berechnet den Abstand zwischen dem linken Rand und dem Hotspot auf X-Achse in der aktuellen Darstellung. + @brief Berechnet den Abstand zwischen dem linken Rand und dem Hotspot auf X-Achse in der aktuellen Darstellung. */ int ComputeYModifier() const; void InitMembers(); - void PersistCallbackVector(BS_OutputPersistenceBlock & Writer, const Common::Array & Vector); - void UnpersistCallbackVector(BS_InputPersistenceBlock & Reader, Common::Array & Vector); - BS_AnimationDescription * GetAnimationDescription() const; + void PersistCallbackVector(BS_OutputPersistenceBlock &Writer, const Common::Array & Vector); + void UnpersistCallbackVector(BS_InputPersistenceBlock &Reader, Common::Array & Vector); + BS_AnimationDescription *GetAnimationDescription() const; void InitializeAnimationResource(const Common::String &FileName); }; diff --git a/engines/sword25/gfx/animationdescription.cpp b/engines/sword25/gfx/animationdescription.cpp index 405a5c2938..f8ed9b893c 100644 --- a/engines/sword25/gfx/animationdescription.cpp +++ b/engines/sword25/gfx/animationdescription.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -46,8 +46,7 @@ namespace Sword25 { // Persistenz // ----------------------------------------------------------------------------- -bool BS_AnimationDescription::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_AnimationDescription::Persist(BS_OutputPersistenceBlock &Writer) { Writer.Write(static_cast(m_AnimationType)); Writer.Write(m_FPS); Writer.Write(m_MillisPerFrame); @@ -60,8 +59,7 @@ bool BS_AnimationDescription::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_AnimationDescription::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_AnimationDescription::Unpersist(BS_InputPersistenceBlock &Reader) { unsigned int AnimationType; Reader.Read(AnimationType); m_AnimationType = static_cast(AnimationType); diff --git a/engines/sword25/gfx/animationdescription.h b/engines/sword25/gfx/animationdescription.h index e6cb578d2d..e4c861d4e0 100644 --- a/engines/sword25/gfx/animationdescription.h +++ b/engines/sword25/gfx/animationdescription.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -49,8 +49,7 @@ namespace Sword25 { // Klassendefinition // ----------------------------------------------------------------------------- -class BS_AnimationDescription : public BS_Persistable -{ +class BS_AnimationDescription : public BS_Persistable { protected: BS_AnimationDescription() : m_AnimationType(BS_Animation::AT_LOOP), @@ -62,46 +61,57 @@ protected: {}; public: - struct Frame - { + struct Frame { // Die Hotspot-Angabe bezieht sich auf das ungeflippte Bild!! - int HotspotX; - int HotspotY; - bool FlipV; - bool FlipH; - Common::String FileName; - Common::String Action; + int HotspotX; + int HotspotY; + bool FlipV; + bool FlipH; + Common::String FileName; + Common::String Action; }; // ----------------------------------------------------------------------------- // Abstrakte Methoden // ----------------------------------------------------------------------------- - - virtual const Frame & GetFrame(unsigned int Index) const = 0; - virtual unsigned int GetFrameCount() const = 0; - virtual void Unlock() = 0; + + virtual const Frame &GetFrame(unsigned int Index) const = 0; + virtual unsigned int GetFrameCount() const = 0; + virtual void Unlock() = 0; // ----------------------------------------------------------------------------- // Getter Methoden // ----------------------------------------------------------------------------- - - BS_Animation::ANIMATION_TYPES GetAnimationType() const { return m_AnimationType; } - int GetFPS() const { return m_FPS; } - int GetMillisPerFrame() const { return m_MillisPerFrame; } - bool IsScalingAllowed() const { return m_ScalingAllowed; } - bool IsAlphaAllowed() const { return m_AlphaAllowed; } - bool IsColorModulationAllowed() const { return m_ColorModulationAllowed; } - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + BS_Animation::ANIMATION_TYPES GetAnimationType() const { + return m_AnimationType; + } + int GetFPS() const { + return m_FPS; + } + int GetMillisPerFrame() const { + return m_MillisPerFrame; + } + bool IsScalingAllowed() const { + return m_ScalingAllowed; + } + bool IsAlphaAllowed() const { + return m_AlphaAllowed; + } + bool IsColorModulationAllowed() const { + return m_ColorModulationAllowed; + } + + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); protected: - BS_Animation::ANIMATION_TYPES m_AnimationType; - int m_FPS; - int m_MillisPerFrame; - bool m_ScalingAllowed; - bool m_AlphaAllowed; - bool m_ColorModulationAllowed; + BS_Animation::ANIMATION_TYPES m_AnimationType; + int m_FPS; + int m_MillisPerFrame; + bool m_ScalingAllowed; + bool m_AlphaAllowed; + bool m_ColorModulationAllowed; }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/animationresource.cpp b/engines/sword25/gfx/animationresource.cpp index 5de3d90ff2..a0a7f25057 100644 --- a/engines/sword25/gfx/animationresource.cpp +++ b/engines/sword25/gfx/animationresource.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -54,34 +54,31 @@ namespace Sword25 { // Constants // ----------------------------------------------------------------------------- -namespace -{ - const int DEFAULT_FPS = 10; - const int MIN_FPS = 1; - const int MAX_FPS = 200; +namespace { +const int DEFAULT_FPS = 10; +const int MIN_FPS = 1; +const int MAX_FPS = 200; } // ----------------------------------------------------------------------------- // Construction / Destruction // ----------------------------------------------------------------------------- -BS_AnimationResource::BS_AnimationResource(const Common::String& FileName) : +BS_AnimationResource::BS_AnimationResource(const Common::String &FileName) : BS_Resource(FileName, BS_Resource::TYPE_ANIMATION), - m_Valid(false) -{ + m_Valid(false) { // Pointer auf den Package-Manager bekommen - BS_PackageManager* PackagePtr = BS_Kernel::GetInstance()->GetPackage(); + BS_PackageManager *PackagePtr = BS_Kernel::GetInstance()->GetPackage(); BS_ASSERT(PackagePtr); // Animations-XML laden TiXmlDocument Doc; { - // Die Daten werden zunächst über den Package-Manager gelesen und dann in einen um ein Byte größeren Buffer kopiert und + // Die Daten werden zunächst über den Package-Manager gelesen und dann in einen um ein Byte größeren Buffer kopiert und // NULL-Terminiert, da TinyXML NULL-Terminierte Daten benötigt. unsigned int FileSize; - char * LoadBuffer = (char *) PackagePtr->GetFile(GetFileName(), &FileSize); - if (!LoadBuffer) - { + char *LoadBuffer = (char *) PackagePtr->GetFile(GetFileName(), &FileSize); + if (!LoadBuffer) { BS_LOG_ERRORLN("Could not read \"%s\".", GetFileName().c_str()); return; } @@ -94,27 +91,24 @@ BS_AnimationResource::BS_AnimationResource(const Common::String& FileName) : // Datei parsen Doc.Parse(&WorkBuffer[0]); free(WorkBuffer); - if (Doc.Error()) - { + if (Doc.Error()) { BS_LOG_ERRORLN("The following TinyXML-Error occured while parsing \"%s\": %s", GetFileName().c_str(), Doc.ErrorDesc()); return; } } // Wurzelknoten des Animations-Tags finden, prüfen und Attribute auslesen. - TiXmlElement* pElement; + TiXmlElement *pElement; { - TiXmlNode* pNode = Doc.FirstChild("animation"); - if (!pNode || pNode->Type() != TiXmlNode::ELEMENT) - { + TiXmlNode *pNode = Doc.FirstChild("animation"); + if (!pNode || pNode->Type() != TiXmlNode::ELEMENT) { BS_LOG_ERRORLN("No tag found in \"%s\".", GetFileName().c_str()); return; } pElement = pNode->ToElement(); // Animation-Tag parsen - if (!ParseAnimationTag(*pElement, m_FPS, m_AnimationType)) - { + if (!ParseAnimationTag(*pElement, m_FPS, m_AnimationType)) { BS_LOG_ERRORLN("An error occurred while parsing tag in \"%s\".", GetFileName().c_str()); return; } @@ -131,17 +125,15 @@ BS_AnimationResource::BS_AnimationResource(const Common::String& FileName) : } // Nacheinander alle Frames-Informationen erstellen. - TiXmlElement* pFrameElement = pElement->FirstChild("frame")->ToElement(); - while (pFrameElement) - { + TiXmlElement *pFrameElement = pElement->FirstChild("frame")->ToElement(); + while (pFrameElement) { Frame CurFrame; - - if (!ParseFrameTag(*pFrameElement, CurFrame, *PackagePtr)) - { + + if (!ParseFrameTag(*pFrameElement, CurFrame, *PackagePtr)) { BS_LOG_ERRORLN("An error occurred in \"%s\" while parsing tag.", GetFileName().c_str()); return; } - + m_Frames.push_back(CurFrame); pFrameElement = pFrameElement->NextSiblingElement("frame"); } @@ -150,54 +142,46 @@ BS_AnimationResource::BS_AnimationResource(const Common::String& FileName) : PackagePtr->ChangeDirectory(OldDirectory); // Sicherstellen, dass die Animation mindestens einen Frame besitzt - if (m_Frames.empty()) - { + if (m_Frames.empty()) { BS_LOG_ERRORLN("\"%s\" does not have any frames.", GetFileName().c_str()); return; } // Alle Frame-Dateien werden vorgecached - if (!PrecacheAllFrames()) - { + if (!PrecacheAllFrames()) { BS_LOG_ERRORLN("Could not precache all frames of \"%s\".", GetFileName().c_str()); return; } // Feststellen, ob die Animation skalierbar ist - if (!ComputeFeatures()) - { - BS_LOG_ERRORLN("Could not determine the features of \"%s\".", GetFileName().c_str()); - return; - } + if (!ComputeFeatures()) { + BS_LOG_ERRORLN("Could not determine the features of \"%s\".", GetFileName().c_str()); + return; + } - m_Valid = true; + m_Valid = true; } // ----------------------------------------------------------------------------- // Dokument-Parsermethoden // ----------------------------------------------------------------------------- -bool BS_AnimationResource::ParseAnimationTag(TiXmlElement& AnimationTag, int& FPS, BS_Animation::ANIMATION_TYPES & AnimationType) -{ +bool BS_AnimationResource::ParseAnimationTag(TiXmlElement &AnimationTag, int &FPS, BS_Animation::ANIMATION_TYPES &AnimationType) { // FPS einlesen - const char* FPSString; - if (FPSString = AnimationTag.Attribute("fps")) - { + const char *FPSString; + if (FPSString = AnimationTag.Attribute("fps")) { int TempFPS; - if (!BS_String::ToInt(Common::String(FPSString), TempFPS) || TempFPS < MIN_FPS || TempFPS > MAX_FPS) - { + if (!BS_String::ToInt(Common::String(FPSString), TempFPS) || TempFPS < MIN_FPS || TempFPS > MAX_FPS) { BS_LOG_WARNINGLN("Illegal fps value (\"%s\") in tag in \"%s\". Assuming default (\"%d\"). " - "The fps value has to be between %d and %d.", - FPSString, GetFileName().c_str(), DEFAULT_FPS, MIN_FPS, MAX_FPS); - } - else + "The fps value has to be between %d and %d.", + FPSString, GetFileName().c_str(), DEFAULT_FPS, MIN_FPS, MAX_FPS); + } else FPS = TempFPS; } // Loop-Typ einlesen - const char* LoopTypeString; - if (LoopTypeString = AnimationTag.Attribute("type")) - { + const char *LoopTypeString; + if (LoopTypeString = AnimationTag.Attribute("type")) { if (strcmp(LoopTypeString, "oneshot") == 0) AnimationType = BS_Animation::AT_ONESHOT; else if (strcmp(LoopTypeString, "loop") == 0) @@ -206,7 +190,7 @@ bool BS_AnimationResource::ParseAnimationTag(TiXmlElement& AnimationTag, int& FP AnimationType = BS_Animation::AT_JOJO; else BS_LOG_WARNINGLN("Illegal type value (\"%s\") in tag in \"%s\". Assuming default (\"loop\").", - LoopTypeString, GetFileName().c_str()); + LoopTypeString, GetFileName().c_str()); } return true; @@ -214,68 +198,59 @@ bool BS_AnimationResource::ParseAnimationTag(TiXmlElement& AnimationTag, int& FP // ----------------------------------------------------------------------------- -bool BS_AnimationResource::ParseFrameTag(TiXmlElement& FrameTag, Frame& Frame_, BS_PackageManager& PackageManager) -{ - const char* FileString = FrameTag.Attribute("file"); - if (!FileString) - { +bool BS_AnimationResource::ParseFrameTag(TiXmlElement &FrameTag, Frame &Frame_, BS_PackageManager &PackageManager) { + const char *FileString = FrameTag.Attribute("file"); + if (!FileString) { BS_LOG_ERRORLN(" tag without file attribute occurred in \"%s\".", GetFileName().c_str()); return false; } Frame_.FileName = PackageManager.GetAbsolutePath(FileString); - if (Frame_.FileName == "") - { + if (Frame_.FileName == "") { BS_LOG_ERRORLN("Could not create absolute path for file specified in tag in \"%s\": \"%s\".", GetFileName().c_str(), FileString); return false; } - const char* ActionString = FrameTag.Attribute("action"); + const char *ActionString = FrameTag.Attribute("action"); if (ActionString) Frame_.Action = ActionString; - const char* HotspotxString = FrameTag.Attribute("hotspotx"); - const char* HotspotyString = FrameTag.Attribute("hotspoty"); + const char *HotspotxString = FrameTag.Attribute("hotspotx"); + const char *HotspotyString = FrameTag.Attribute("hotspoty"); if ((!HotspotxString && HotspotyString) || - (HotspotxString && !HotspotyString)) + (HotspotxString && !HotspotyString)) BS_LOG_WARNINGLN("%s attribute occurred without %s attribute in tag in \"%s\". Assuming default (\"0\").", - HotspotxString ? "hotspotx" : "hotspoty", - !HotspotyString ? "hotspoty" : "hotspotx", - GetFileName().c_str()); + HotspotxString ? "hotspotx" : "hotspoty", + !HotspotyString ? "hotspoty" : "hotspotx", + GetFileName().c_str()); Frame_.HotspotX = 0; if (HotspotxString && !BS_String::ToInt(Common::String(HotspotxString), Frame_.HotspotX)) BS_LOG_WARNINGLN("Illegal hotspotx value (\"%s\") in frame tag in \"%s\". Assuming default (\"%s\").", - HotspotxString,GetFileName().c_str(), Frame_.HotspotX); + HotspotxString, GetFileName().c_str(), Frame_.HotspotX); Frame_.HotspotY = 0; if (HotspotyString && !BS_String::ToInt(Common::String(HotspotyString), Frame_.HotspotY)) BS_LOG_WARNINGLN("Illegal hotspoty value (\"%s\") in frame tag in \"%s\". Assuming default (\"%s\").", - HotspotyString, GetFileName().c_str(), Frame_.HotspotY); + HotspotyString, GetFileName().c_str(), Frame_.HotspotY); - const char* FlipVString = FrameTag.Attribute("flipv"); - if (FlipVString) - { - if (!BS_String::ToBool(Common::String(FlipVString), Frame_.FlipV)) - { + const char *FlipVString = FrameTag.Attribute("flipv"); + if (FlipVString) { + if (!BS_String::ToBool(Common::String(FlipVString), Frame_.FlipV)) { BS_LOG_WARNINGLN("Illegal flipv value (\"%s\") in tag in \"%s\". Assuming default (\"false\").", - FlipVString, GetFileName().c_str()); + FlipVString, GetFileName().c_str()); Frame_.FlipV = false; } - } - else + } else Frame_.FlipV = false; - const char* FlipHString = FrameTag.Attribute("fliph"); - if (FlipHString) - { - if (!BS_String::ToBool(FlipHString, Frame_.FlipH)) - { + const char *FlipHString = FrameTag.Attribute("fliph"); + if (FlipHString) { + if (!BS_String::ToBool(FlipHString, Frame_.FlipH)) { BS_LOG_WARNINGLN("Illegal fliph value (\"%s\") in tag in \"%s\". Assuming default (\"false\").", - FlipHString, GetFileName().c_str()); + FlipHString, GetFileName().c_str()); Frame_.FlipH = false; } - } - else + } else Frame_.FlipH = false; return true; @@ -283,19 +258,15 @@ bool BS_AnimationResource::ParseFrameTag(TiXmlElement& FrameTag, Frame& Frame_, // ----------------------------------------------------------------------------- -BS_AnimationResource::~BS_AnimationResource() -{ +BS_AnimationResource::~BS_AnimationResource() { } // ----------------------------------------------------------------------------- -bool BS_AnimationResource::PrecacheAllFrames() const -{ +bool BS_AnimationResource::PrecacheAllFrames() const { Common::Array::const_iterator Iter = m_Frames.begin(); - for (; Iter != m_Frames.end(); ++Iter) - { - if (!BS_Kernel::GetInstance()->GetResourceManager()->PrecacheResource((*Iter).FileName)) - { + for (; Iter != m_Frames.end(); ++Iter) { + if (!BS_Kernel::GetInstance()->GetResourceManager()->PrecacheResource((*Iter).FileName)) { BS_LOG_ERRORLN("Could not precache \"%s\".", (*Iter).FileName.c_str()); return false; } @@ -306,8 +277,7 @@ bool BS_AnimationResource::PrecacheAllFrames() const // ----------------------------------------------------------------------------- -bool BS_AnimationResource::ComputeFeatures() -{ +bool BS_AnimationResource::ComputeFeatures() { BS_ASSERT(m_Frames.size()); // Alle Features werden als vorhanden angenommen @@ -317,11 +287,9 @@ bool BS_AnimationResource::ComputeFeatures() // Alle Frame durchgehen und alle Features deaktivieren, die auch nur von einem Frame nicht unterstützt werden. Common::Array::const_iterator Iter = m_Frames.begin(); - for (; Iter != m_Frames.end(); ++Iter) - { - BS_BitmapResource* pBitmap; - if (!(pBitmap = static_cast (BS_Kernel::GetInstance()->GetResourceManager()->RequestResource((*Iter).FileName)))) - { + for (; Iter != m_Frames.end(); ++Iter) { + BS_BitmapResource *pBitmap; + if (!(pBitmap = static_cast(BS_Kernel::GetInstance()->GetResourceManager()->RequestResource((*Iter).FileName)))) { BS_LOG_ERRORLN("Could not request \"%s\".", (*Iter).FileName.c_str()); return false; } diff --git a/engines/sword25/gfx/animationresource.h b/engines/sword25/gfx/animationresource.h index 1eff3edcc8..f67963e6f8 100644 --- a/engines/sword25/gfx/animationresource.h +++ b/engines/sword25/gfx/animationresource.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -63,34 +63,54 @@ class BS_PackageManager; // Class Definition // ----------------------------------------------------------------------------- -class BS_AnimationResource : public BS_Resource, public BS_AnimationDescription -{ +class BS_AnimationResource : public BS_Resource, public BS_AnimationDescription { public: - BS_AnimationResource(const Common::String & FileName); + BS_AnimationResource(const Common::String &FileName); virtual ~BS_AnimationResource(); - virtual const Frame & GetFrame(unsigned int Index) const { BS_ASSERT(Index < m_Frames.size()); return m_Frames[Index]; } - virtual unsigned int GetFrameCount() const { return m_Frames.size(); } - virtual void Unlock() { Release(); } - - BS_Animation::ANIMATION_TYPES GetAnimationType() const { return m_AnimationType; } - int GetFPS() const { return m_FPS; } - int GetMillisPerFrame() const { return m_MillisPerFrame; } - bool IsScalingAllowed() const { return m_ScalingAllowed; } - bool IsAlphaAllowed() const { return m_AlphaAllowed; } - bool IsColorModulationAllowed() const { return m_ColorModulationAllowed; } - bool IsValid() const { return m_Valid; } + virtual const Frame &GetFrame(unsigned int Index) const { + BS_ASSERT(Index < m_Frames.size()); + return m_Frames[Index]; + } + virtual unsigned int GetFrameCount() const { + return m_Frames.size(); + } + virtual void Unlock() { + Release(); + } + + BS_Animation::ANIMATION_TYPES GetAnimationType() const { + return m_AnimationType; + } + int GetFPS() const { + return m_FPS; + } + int GetMillisPerFrame() const { + return m_MillisPerFrame; + } + bool IsScalingAllowed() const { + return m_ScalingAllowed; + } + bool IsAlphaAllowed() const { + return m_AlphaAllowed; + } + bool IsColorModulationAllowed() const { + return m_ColorModulationAllowed; + } + bool IsValid() const { + return m_Valid; + } private: - bool m_Valid; + bool m_Valid; - Common::Array m_Frames; + Common::Array m_Frames; //@{ /** @name Dokument-Parser Methoden */ - bool ParseAnimationTag(TiXmlElement& AnimationTag, int& FPS, BS_Animation::ANIMATION_TYPES & AnimationType); - bool ParseFrameTag(TiXmlElement& FrameTag, Frame& Frame, BS_PackageManager& PackageManager); + bool ParseAnimationTag(TiXmlElement &AnimationTag, int &FPS, BS_Animation::ANIMATION_TYPES &AnimationType); + bool ParseFrameTag(TiXmlElement &FrameTag, Frame &Frame, BS_PackageManager &PackageManager); //@} diff --git a/engines/sword25/gfx/animationtemplate.cpp b/engines/sword25/gfx/animationtemplate.cpp index 03afec36b7..dede871ece 100644 --- a/engines/sword25/gfx/animationtemplate.cpp +++ b/engines/sword25/gfx/animationtemplate.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -53,16 +53,12 @@ namespace Sword25 { // Konstruktion / Destruktion // ----------------------------------------------------------------------------- -unsigned int BS_AnimationTemplate::Create(const Common::String & SourceAnimation) -{ - BS_AnimationTemplate * AnimationTemplatePtr = new BS_AnimationTemplate(SourceAnimation); +unsigned int BS_AnimationTemplate::Create(const Common::String &SourceAnimation) { + BS_AnimationTemplate *AnimationTemplatePtr = new BS_AnimationTemplate(SourceAnimation); - if (AnimationTemplatePtr->IsValid()) - { + if (AnimationTemplatePtr->IsValid()) { return BS_AnimationTemplateRegistry::GetInstance().ResolvePtr(AnimationTemplatePtr); - } - else - { + } else { delete AnimationTemplatePtr; return 0; } @@ -70,16 +66,12 @@ unsigned int BS_AnimationTemplate::Create(const Common::String & SourceAnimation // ----------------------------------------------------------------------------- -unsigned int BS_AnimationTemplate::Create(const BS_AnimationTemplate & Other) -{ - BS_AnimationTemplate * AnimationTemplatePtr = new BS_AnimationTemplate(Other); +unsigned int BS_AnimationTemplate::Create(const BS_AnimationTemplate &Other) { + BS_AnimationTemplate *AnimationTemplatePtr = new BS_AnimationTemplate(Other); - if (AnimationTemplatePtr->IsValid()) - { + if (AnimationTemplatePtr->IsValid()) { return BS_AnimationTemplateRegistry::GetInstance().ResolvePtr(AnimationTemplatePtr); - } - else - { + } else { delete AnimationTemplatePtr; return 0; } @@ -87,16 +79,12 @@ unsigned int BS_AnimationTemplate::Create(const BS_AnimationTemplate & Other) // ----------------------------------------------------------------------------- -unsigned int BS_AnimationTemplate::Create(BS_InputPersistenceBlock & Reader, unsigned int Handle) -{ - BS_AnimationTemplate * AnimationTemplatePtr = new BS_AnimationTemplate(Reader, Handle); +unsigned int BS_AnimationTemplate::Create(BS_InputPersistenceBlock &Reader, unsigned int Handle) { + BS_AnimationTemplate *AnimationTemplatePtr = new BS_AnimationTemplate(Reader, Handle); - if (AnimationTemplatePtr->IsValid()) - { + if (AnimationTemplatePtr->IsValid()) { return BS_AnimationTemplateRegistry::GetInstance().ResolvePtr(AnimationTemplatePtr); - } - else - { + } else { delete AnimationTemplatePtr; return 0; } @@ -104,8 +92,7 @@ unsigned int BS_AnimationTemplate::Create(BS_InputPersistenceBlock & Reader, uns // ----------------------------------------------------------------------------- -BS_AnimationTemplate::BS_AnimationTemplate(const Common::String & SourceAnimation) -{ +BS_AnimationTemplate::BS_AnimationTemplate(const Common::String &SourceAnimation) { // Objekt registrieren. BS_AnimationTemplateRegistry::GetInstance().RegisterObject(this); @@ -120,8 +107,7 @@ BS_AnimationTemplate::BS_AnimationTemplate(const Common::String & SourceAnimatio // ----------------------------------------------------------------------------- -BS_AnimationTemplate::BS_AnimationTemplate(const BS_AnimationTemplate & Other) -{ +BS_AnimationTemplate::BS_AnimationTemplate(const BS_AnimationTemplate &Other) { // Objekt registrieren. BS_AnimationTemplateRegistry::GetInstance().RegisterObject(this); @@ -147,23 +133,20 @@ BS_AnimationTemplate::BS_AnimationTemplate(const BS_AnimationTemplate & Other) // ----------------------------------------------------------------------------- -BS_AnimationTemplate::BS_AnimationTemplate(BS_InputPersistenceBlock & Reader, unsigned int Handle) -{ +BS_AnimationTemplate::BS_AnimationTemplate(BS_InputPersistenceBlock &Reader, unsigned int Handle) { // Objekt registrieren. - BS_AnimationTemplateRegistry::GetInstance().RegisterObject(this, Handle); + BS_AnimationTemplateRegistry::GetInstance().RegisterObject(this, Handle); // Objekt laden. - m_Valid = Unpersist(Reader); + m_Valid = Unpersist(Reader); } // ----------------------------------------------------------------------------- -BS_AnimationResource * BS_AnimationTemplate::RequestSourceAnimation(const Common::String & SourceAnimation) const -{ - BS_ResourceManager * RMPtr = BS_Kernel::GetInstance()->GetResourceManager(); - BS_Resource * ResourcePtr; - if (NULL == (ResourcePtr = RMPtr->RequestResource(SourceAnimation)) || ResourcePtr->GetType() != BS_Resource::TYPE_ANIMATION) - { +BS_AnimationResource *BS_AnimationTemplate::RequestSourceAnimation(const Common::String &SourceAnimation) const { + BS_ResourceManager *RMPtr = BS_Kernel::GetInstance()->GetResourceManager(); + BS_Resource *ResourcePtr; + if (NULL == (ResourcePtr = RMPtr->RequestResource(SourceAnimation)) || ResourcePtr->GetType() != BS_Resource::TYPE_ANIMATION) { BS_LOG_ERRORLN("The resource \"%s\" could not be requested or is has an invalid type. The animation template can't be created.", SourceAnimation.c_str()); return 0; } @@ -172,11 +155,9 @@ BS_AnimationResource * BS_AnimationTemplate::RequestSourceAnimation(const Common // ----------------------------------------------------------------------------- -BS_AnimationTemplate::~BS_AnimationTemplate() -{ +BS_AnimationTemplate::~BS_AnimationTemplate() { // Animations-Resource freigeben - if (m_SourceAnimationPtr) - { + if (m_SourceAnimationPtr) { m_SourceAnimationPtr->Release(); } @@ -186,64 +167,52 @@ BS_AnimationTemplate::~BS_AnimationTemplate() // ----------------------------------------------------------------------------- -void BS_AnimationTemplate::AddFrame(int Index) -{ - if (ValidateSourceIndex(Index)) - { +void BS_AnimationTemplate::AddFrame(int Index) { + if (ValidateSourceIndex(Index)) { m_Frames.push_back(m_SourceAnimationPtr->GetFrame(Index)); } } // ----------------------------------------------------------------------------- -void BS_AnimationTemplate::SetFrame(int DestIndex, int SrcIndex) -{ - if (ValidateDestIndex(DestIndex) && ValidateSourceIndex(SrcIndex)) - { +void BS_AnimationTemplate::SetFrame(int DestIndex, int SrcIndex) { + if (ValidateDestIndex(DestIndex) && ValidateSourceIndex(SrcIndex)) { m_Frames[DestIndex] = m_SourceAnimationPtr->GetFrame(SrcIndex); } } // ----------------------------------------------------------------------------- -bool BS_AnimationTemplate::ValidateSourceIndex(unsigned int Index) const -{ - if (Index > m_SourceAnimationPtr->GetFrameCount()) - { +bool BS_AnimationTemplate::ValidateSourceIndex(unsigned int Index) const { + if (Index > m_SourceAnimationPtr->GetFrameCount()) { BS_LOG_WARNINGLN("Tried to insert a frame (\"%d\") that does not exist in the source animation (\"%s\"). Ignoring call.", - Index, m_SourceAnimationPtr->GetFileName().c_str()); + Index, m_SourceAnimationPtr->GetFileName().c_str()); return false; - } - else + } else return true; } // ----------------------------------------------------------------------------- -bool BS_AnimationTemplate::ValidateDestIndex(unsigned int Index) const -{ - if (Index > m_Frames.size()) - { +bool BS_AnimationTemplate::ValidateDestIndex(unsigned int Index) const { + if (Index > m_Frames.size()) { BS_LOG_WARNINGLN("Tried to change a nonexistent frame (\"%d\") in a template animation. Ignoring call.", - Index); + Index); return false; - } - else + } else return true; } // ----------------------------------------------------------------------------- -void BS_AnimationTemplate::SetFPS(int FPS) -{ +void BS_AnimationTemplate::SetFPS(int FPS) { m_FPS = FPS; m_MillisPerFrame = 1000000 / m_FPS; } // ----------------------------------------------------------------------------- -bool BS_AnimationTemplate::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_AnimationTemplate::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; // Parent persistieren. @@ -254,8 +223,7 @@ bool BS_AnimationTemplate::Persist(BS_OutputPersistenceBlock & Writer) // Frames einzeln persistieren. Common::Array::const_iterator Iter = m_Frames.begin(); - while (Iter != m_Frames.end()) - { + while (Iter != m_Frames.end()) { Writer.Write(Iter->HotspotX); Writer.Write(Iter->HotspotY); Writer.Write(Iter->FlipV); @@ -274,8 +242,7 @@ bool BS_AnimationTemplate::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_AnimationTemplate::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_AnimationTemplate::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; // Parent wieder herstellen. @@ -286,8 +253,7 @@ bool BS_AnimationTemplate::Unpersist(BS_InputPersistenceBlock & Reader) Reader.Read(FrameCount); // Frames einzeln wieder herstellen. - for (unsigned int i = 0; i < FrameCount; ++i) - { + for (unsigned int i = 0; i < FrameCount; ++i) { Frame frame; Reader.Read(frame.HotspotX); Reader.Read(frame.HotspotY); diff --git a/engines/sword25/gfx/animationtemplate.h b/engines/sword25/gfx/animationtemplate.h index 389353431e..48c20b9910 100644 --- a/engines/sword25/gfx/animationtemplate.h +++ b/engines/sword25/gfx/animationtemplate.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -59,65 +59,75 @@ class BS_AnimationResource; // Klassendefinition // ----------------------------------------------------------------------------- -class BS_AnimationTemplate : public BS_AnimationDescription -{ +class BS_AnimationTemplate : public BS_AnimationDescription { public: - static unsigned int Create(const Common::String & SourceAnimation); - static unsigned int Create(const BS_AnimationTemplate & Other); - static unsigned int Create(BS_InputPersistenceBlock & Reader, unsigned int Handle); - BS_AnimationTemplate * ResolveHandle(unsigned int Handle) const; + static unsigned int Create(const Common::String &SourceAnimation); + static unsigned int Create(const BS_AnimationTemplate &Other); + static unsigned int Create(BS_InputPersistenceBlock &Reader, unsigned int Handle); + BS_AnimationTemplate *ResolveHandle(unsigned int Handle) const; private: - BS_AnimationTemplate(const Common::String & SourceAnimation); - BS_AnimationTemplate(const BS_AnimationTemplate & Other); - BS_AnimationTemplate(BS_InputPersistenceBlock & Reader, unsigned int Handle); + BS_AnimationTemplate(const Common::String &SourceAnimation); + BS_AnimationTemplate(const BS_AnimationTemplate &Other); + BS_AnimationTemplate(BS_InputPersistenceBlock &Reader, unsigned int Handle); public: ~BS_AnimationTemplate(); - virtual const Frame & GetFrame(unsigned int Index) const { BS_ASSERT(Index < m_Frames.size()); return m_Frames[Index]; } - virtual unsigned int GetFrameCount() const { return m_Frames.size(); } - virtual void Unlock() { delete this; } - - bool IsValid() const { return m_Valid; } + virtual const Frame &GetFrame(unsigned int Index) const { + BS_ASSERT(Index < m_Frames.size()); + return m_Frames[Index]; + } + virtual unsigned int GetFrameCount() const { + return m_Frames.size(); + } + virtual void Unlock() { + delete this; + } + + bool IsValid() const { + return m_Valid; + } /** - @brief Fügt einen neuen Frame zur Animation hinzu. + @brief Fügt einen neuen Frame zur Animation hinzu. - Der Frame wird an das Ende der Animation angehängt. + Der Frame wird an das Ende der Animation angehängt. - @param Index der Index des Frames in der Quellanimation + @param Index der Index des Frames in der Quellanimation */ void AddFrame(int Index); /** - @brief Ändert einen bereits in der Animation vorhandenen Frame. - @param DestIndex der Index des Frames der überschrieben werden soll - @param SrcIndex der Index des einzufügenden Frames in der Quellanimation + @brief Ändert einen bereits in der Animation vorhandenen Frame. + @param DestIndex der Index des Frames der überschrieben werden soll + @param SrcIndex der Index des einzufügenden Frames in der Quellanimation */ void SetFrame(int DestIndex, int SrcIndex); /** - @brief Setzt den Animationstyp. - @param Type der Typ der Animation. Muss aus den enum BS_Animation::ANIMATION_TYPES sein. + @brief Setzt den Animationstyp. + @param Type der Typ der Animation. Muss aus den enum BS_Animation::ANIMATION_TYPES sein. */ - void SetAnimationType(BS_Animation::ANIMATION_TYPES Type) { m_AnimationType = Type; } + void SetAnimationType(BS_Animation::ANIMATION_TYPES Type) { + m_AnimationType = Type; + } /** - @brief Setzt die Abspielgeschwindigkeit. - @param FPS die Abspielgeschwindigkeit in Frames pro Sekunde. + @brief Setzt die Abspielgeschwindigkeit. + @param FPS die Abspielgeschwindigkeit in Frames pro Sekunde. */ void SetFPS(int FPS); - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); private: - Common::Array m_Frames; - BS_AnimationResource * m_SourceAnimationPtr; - bool m_Valid; + Common::Array m_Frames; + BS_AnimationResource *m_SourceAnimationPtr; + bool m_Valid; - BS_AnimationResource * RequestSourceAnimation(const Common::String & SourceAnimation) const; + BS_AnimationResource *RequestSourceAnimation(const Common::String &SourceAnimation) const; bool ValidateSourceIndex(unsigned int Index) const; bool ValidateDestIndex(unsigned int Index) const; }; diff --git a/engines/sword25/gfx/animationtemplateregistry.cpp b/engines/sword25/gfx/animationtemplateregistry.cpp index 1913a7cf8b..32195e8166 100644 --- a/engines/sword25/gfx/animationtemplateregistry.cpp +++ b/engines/sword25/gfx/animationtemplateregistry.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -57,22 +57,19 @@ std::auto_ptr BS_AnimationTemplateRegistry::m_Inst // ----------------------------------------------------------------------------- -void BS_AnimationTemplateRegistry::LogErrorLn(const char * Message) const -{ +void BS_AnimationTemplateRegistry::LogErrorLn(const char *Message) const { BS_LOG_ERRORLN(Message); } // ----------------------------------------------------------------------------- -void BS_AnimationTemplateRegistry::LogWarningLn(const char * Message) const -{ +void BS_AnimationTemplateRegistry::LogWarningLn(const char *Message) const { BS_LOG_WARNINGLN(Message); } // ----------------------------------------------------------------------------- -bool BS_AnimationTemplateRegistry::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_AnimationTemplateRegistry::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; // Das nächste zu vergebene Handle schreiben. @@ -83,8 +80,7 @@ bool BS_AnimationTemplateRegistry::Persist(BS_OutputPersistenceBlock & Writer) // Alle BS_AnimationTemplates persistieren. HANDLE2PTR_MAP::const_iterator Iter = m_Handle2PtrMap.begin(); - while (Iter != m_Handle2PtrMap.end()) - { + while (Iter != m_Handle2PtrMap.end()) { // Handle persistieren. Writer.Write(Iter->first); @@ -99,8 +95,7 @@ bool BS_AnimationTemplateRegistry::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_AnimationTemplateRegistry::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_AnimationTemplateRegistry::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; // Das nächste zu vergebene Handle wieder herstellen. @@ -114,8 +109,7 @@ bool BS_AnimationTemplateRegistry::Unpersist(BS_InputPersistenceBlock & Reader) Reader.Read(AnimationTemplateCount); // Alle gespeicherten BS_AnimationTemplates wieder herstellen. - for (unsigned int i = 0; i < AnimationTemplateCount; ++i) - { + for (unsigned int i = 0; i < AnimationTemplateCount; ++i) { // Handle lesen. unsigned int Handle; Reader.Read(Handle); diff --git a/engines/sword25/gfx/animationtemplateregistry.h b/engines/sword25/gfx/animationtemplateregistry.h index efa26326ed..8769e457f3 100644 --- a/engines/sword25/gfx/animationtemplateregistry.h +++ b/engines/sword25/gfx/animationtemplateregistry.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -59,21 +59,19 @@ class BS_AnimationTemplate; // Klassendeklaration // ----------------------------------------------------------------------------- -class BS_AnimationTemplateRegistry : public BS_ObjectRegistry, public BS_Persistable -{ +class BS_AnimationTemplateRegistry : public BS_ObjectRegistry, public BS_Persistable { public: - static BS_AnimationTemplateRegistry & GetInstance() - { + static BS_AnimationTemplateRegistry &GetInstance() { if (!m_InstancePtr.get()) m_InstancePtr.reset(new BS_AnimationTemplateRegistry); return *m_InstancePtr.get(); } - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); private: - virtual void LogErrorLn(const char * Message) const; - virtual void LogWarningLn(const char * Message) const; + virtual void LogErrorLn(const char *Message) const; + virtual void LogWarningLn(const char *Message) const; static std::auto_ptr m_InstancePtr; }; diff --git a/engines/sword25/gfx/bitmap.cpp b/engines/sword25/gfx/bitmap.cpp index 5dd553ef8c..534e28d78e 100644 --- a/engines/sword25/gfx/bitmap.cpp +++ b/engines/sword25/gfx/bitmap.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -58,41 +58,35 @@ BS_Bitmap::BS_Bitmap(BS_RenderObjectPtr ParentPtr, TYPES Type, m_ScaleFactorX(1.0f), m_ScaleFactorY(1.0f), m_FlipH(false), - m_FlipV(false) -{ + m_FlipV(false) { } // ----------------------------------------------------------------------------- -BS_Bitmap::~BS_Bitmap() -{ +BS_Bitmap::~BS_Bitmap() { } // ----------------------------------------------------------------------------- // Darstellungsart festlegen // ----------------------------------------------------------------------------- -void BS_Bitmap::SetAlpha(int Alpha) -{ - if (!IsAlphaAllowed()) - { +void BS_Bitmap::SetAlpha(int Alpha) { + if (!IsAlphaAllowed()) { BS_LOG_WARNINGLN("Tried to set alpha value on a bitmap that does not support alpha blending. Call was ignored."); return; } - if (Alpha < 0 || Alpha > 255) - { + if (Alpha < 0 || Alpha > 255) { int OldAlpha = Alpha; if (Alpha < 0) Alpha = 0; if (Alpha > 255) Alpha = 255; BS_LOG_WARNINGLN("Tried to set an invalid alpha value (%d) on a bitmap. Value was changed to %d.", OldAlpha, Alpha); - + return; } unsigned int NewModulationColor = (m_ModulationColor & 0x00ffffff) | Alpha << 24; - if (NewModulationColor != m_ModulationColor) - { + if (NewModulationColor != m_ModulationColor) { m_ModulationColor = NewModulationColor; ForceRefresh(); } @@ -100,17 +94,14 @@ void BS_Bitmap::SetAlpha(int Alpha) // ----------------------------------------------------------------------------- -void BS_Bitmap::SetModulationColor(unsigned int ModulationColor) -{ - if (!IsColorModulationAllowed()) - { +void BS_Bitmap::SetModulationColor(unsigned int ModulationColor) { + if (!IsColorModulationAllowed()) { BS_LOG_WARNINGLN("Tried to set modulation color of a bitmap that does not support color modulation. Call was ignored."); return; } unsigned int NewModulationColor = (ModulationColor & 0x00ffffff) | (m_ModulationColor & 0xff000000); - if (NewModulationColor != m_ModulationColor) - { + if (NewModulationColor != m_ModulationColor) { m_ModulationColor = NewModulationColor; ForceRefresh(); } @@ -118,30 +109,25 @@ void BS_Bitmap::SetModulationColor(unsigned int ModulationColor) // ----------------------------------------------------------------------------- -void BS_Bitmap::SetScaleFactor(float ScaleFactor) -{ +void BS_Bitmap::SetScaleFactor(float ScaleFactor) { SetScaleFactorX(ScaleFactor); SetScaleFactorY(ScaleFactor); } // ----------------------------------------------------------------------------- -void BS_Bitmap::SetScaleFactorX(float ScaleFactorX) -{ - if (!IsScalingAllowed()) - { +void BS_Bitmap::SetScaleFactorX(float ScaleFactorX) { + if (!IsScalingAllowed()) { BS_LOG_WARNINGLN("Tried to set scale factor of a bitmap that does not support scaling. Call was ignored."); return; } - if (ScaleFactorX < 0) - { + if (ScaleFactorX < 0) { BS_LOG_WARNINGLN("Tried to set scale factor of a bitmap to a negative value. Call was ignored."); return; } - if (ScaleFactorX != m_ScaleFactorX) - { + if (ScaleFactorX != m_ScaleFactorX) { m_ScaleFactorX = ScaleFactorX; m_Width = static_cast(m_OriginalWidth * m_ScaleFactorX); if (m_ScaleFactorX <= 0.0f) m_ScaleFactorX = 0.001f; @@ -151,22 +137,18 @@ void BS_Bitmap::SetScaleFactorX(float ScaleFactorX) // ----------------------------------------------------------------------------- -void BS_Bitmap::SetScaleFactorY(float ScaleFactorY) -{ - if (!IsScalingAllowed()) - { +void BS_Bitmap::SetScaleFactorY(float ScaleFactorY) { + if (!IsScalingAllowed()) { BS_LOG_WARNINGLN("Tried to set scale factor of a bitmap that does not support scaling. Call was ignored."); return; } - if (ScaleFactorY < 0) - { + if (ScaleFactorY < 0) { BS_LOG_WARNINGLN("Tried to set scale factor of a bitmap to a negative value. Call was ignored."); return; } - if (ScaleFactorY != m_ScaleFactorY) - { + if (ScaleFactorY != m_ScaleFactorY) { m_ScaleFactorY = ScaleFactorY; m_Height = static_cast(m_OriginalHeight * ScaleFactorY); if (m_ScaleFactorY <= 0.0f) m_ScaleFactorY = 0.001f; @@ -176,16 +158,14 @@ void BS_Bitmap::SetScaleFactorY(float ScaleFactorY) // ----------------------------------------------------------------------------- -void BS_Bitmap::SetFlipH(bool FlipH) -{ +void BS_Bitmap::SetFlipH(bool FlipH) { m_FlipH = FlipH; ForceRefresh(); } // ----------------------------------------------------------------------------- -void BS_Bitmap::SetFlipV(bool FlipV) -{ +void BS_Bitmap::SetFlipV(bool FlipV) { m_FlipV = FlipV; ForceRefresh(); } @@ -194,8 +174,7 @@ void BS_Bitmap::SetFlipV(bool FlipV) // Persistenz // ----------------------------------------------------------------------------- -bool BS_Bitmap::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_Bitmap::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; Result &= BS_RenderObject::Persist(Writer); @@ -212,8 +191,7 @@ bool BS_Bitmap::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_Bitmap::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_Bitmap::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; Result &= BS_RenderObject::Unpersist(Reader); diff --git a/engines/sword25/gfx/bitmap.h b/engines/sword25/gfx/bitmap.h index c0e490ee47..00d9308ec5 100644 --- a/engines/sword25/gfx/bitmap.h +++ b/engines/sword25/gfx/bitmap.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -48,8 +48,7 @@ namespace Sword25 { // Klassendeklaration // ----------------------------------------------------------------------------- -class BS_Bitmap : public BS_RenderObject -{ +class BS_Bitmap : public BS_RenderObject { protected: BS_Bitmap(BS_RenderObjectPtr ParentPtr, TYPES Type, unsigned int Handle = 0); @@ -58,127 +57,139 @@ public: virtual ~BS_Bitmap(); /** - @brief Setzt den Alphawert des Bitmaps. - @param Alpha der neue Alphawert der Bitmaps (0 = keine Deckung, 255 = volle Deckung). - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsAlphaAllowed() true zurückgibt. + @brief Setzt den Alphawert des Bitmaps. + @param Alpha der neue Alphawert der Bitmaps (0 = keine Deckung, 255 = volle Deckung). + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsAlphaAllowed() true zurückgibt. */ void SetAlpha(int Alpha); /** - @brief Setzt die Modulationfarbe der Bitmaps. - @param Color eine 24-Bit Farbe, die die Modulationsfarbe des Bitmaps festlegt. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsColorModulationAllowed() true zurückgibt. + @brief Setzt die Modulationfarbe der Bitmaps. + @param Color eine 24-Bit Farbe, die die Modulationsfarbe des Bitmaps festlegt. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsColorModulationAllowed() true zurückgibt. */ void SetModulationColor(unsigned int ModulationColor); /** - @brief Setzt den Skalierungsfaktor des Bitmaps. - @param ScaleFactor der Faktor um den das Bitmap in beide Richtungen gestreckt werden soll. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. + @brief Setzt den Skalierungsfaktor des Bitmaps. + @param ScaleFactor der Faktor um den das Bitmap in beide Richtungen gestreckt werden soll. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ void SetScaleFactor(float ScaleFactor); /** - @brief Setzt den Skalierungsfaktor der Bitmap auf der X-Achse. - @param ScaleFactor der Faktor um den die Bitmap in Richtungen der X-Achse gestreckt werden soll. Dieser Wert muss positiv sein. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. + @brief Setzt den Skalierungsfaktor der Bitmap auf der X-Achse. + @param ScaleFactor der Faktor um den die Bitmap in Richtungen der X-Achse gestreckt werden soll. Dieser Wert muss positiv sein. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ void SetScaleFactorX(float ScaleFactorX); /** - @brief Setzt den Skalierungsfaktor der Bitmap auf der Y-Achse. - @param ScaleFactor der Faktor um den die Bitmap in Richtungen der Y-Achse gestreckt werden soll. Dieser Wert muss positiv sein. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. + @brief Setzt den Skalierungsfaktor der Bitmap auf der Y-Achse. + @param ScaleFactor der Faktor um den die Bitmap in Richtungen der Y-Achse gestreckt werden soll. Dieser Wert muss positiv sein. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ void SetScaleFactorY(float ScaleFactorY); /** - @brief Legt fest, ob das Bild an der X-Achse gespiegelt werden soll. + @brief Legt fest, ob das Bild an der X-Achse gespiegelt werden soll. */ void SetFlipH(bool FlipH); /** - @brief Legt fest, ob das Bild an der Y-Achse gespiegelt werden soll. + @brief Legt fest, ob das Bild an der Y-Achse gespiegelt werden soll. */ void SetFlipV(bool FlipV); /** - @brief Gibt den aktuellen Alphawert des Bildes zurück. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsAlphaAllowed() true zurückgibt. + @brief Gibt den aktuellen Alphawert des Bildes zurück. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsAlphaAllowed() true zurückgibt. */ - int GetAlpha() { return m_ModulationColor >> 24; } + int GetAlpha() { + return m_ModulationColor >> 24; + } /** - @brief Gibt die aktuelle 24bit RGB Modulationsfarde des Bildes zurück. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsColorModulationAllowed() true zurückgibt. + @brief Gibt die aktuelle 24bit RGB Modulationsfarde des Bildes zurück. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsColorModulationAllowed() true zurückgibt. */ - int GetModulationColor() { return m_ModulationColor & 0x00ffffff; } + int GetModulationColor() { + return m_ModulationColor & 0x00ffffff; + } /** - @brief Gibt den Skalierungsfakter des Bitmaps auf der X-Achse zurück. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. + @brief Gibt den Skalierungsfakter des Bitmaps auf der X-Achse zurück. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ - float GetScaleFactorX() const { return m_ScaleFactorX; } + float GetScaleFactorX() const { + return m_ScaleFactorX; + } /** - @brief Gibt den Skalierungsfakter des Bitmaps auf der Y-Achse zurück. - @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. + @brief Gibt den Skalierungsfakter des Bitmaps auf der Y-Achse zurück. + @remark Diese Methode darf nur aufgerufen werden, wenn die Methode IsScalingAllowed() true zurückgibt. */ - float GetScaleFactorY() const { return m_ScaleFactorY; } + float GetScaleFactorY() const { + return m_ScaleFactorY; + } /** - @brief Gibt zurück, ob das Bild an der X-Achse gespiegelt angezeigt wird. + @brief Gibt zurück, ob das Bild an der X-Achse gespiegelt angezeigt wird. */ - bool IsFlipH() { return m_FlipH; } + bool IsFlipH() { + return m_FlipH; + } /** - @brief Gibt zurück, ob das Bild an der Y-Achse gespiegelt angezeigt wird. + @brief Gibt zurück, ob das Bild an der Y-Achse gespiegelt angezeigt wird. */ - bool IsFlipV() { return m_FlipV; } + bool IsFlipV() { + return m_FlipV; + } // ----------------------------------------------------------------------------- // Die folgenden Methoden müssen alle BS_Bitmap-Klassen implementieren // ----------------------------------------------------------------------------- /** - @brief Liest einen Pixel des Bildes. - @param X die X-Koordinate des Pixels. - @param Y die Y-Koordinate des Pixels - @return Gibt den 32-Bit Farbwert des Pixels an der übergebenen Koordinate zurück. - @remark Diese Methode sollte auf keine Fall benutzt werden um größere Teile des Bildes zu lesen, da sie sehr langsam ist. Sie ist - eher dafür gedacht einzelne Pixel des Bildes auszulesen. + @brief Liest einen Pixel des Bildes. + @param X die X-Koordinate des Pixels. + @param Y die Y-Koordinate des Pixels + @return Gibt den 32-Bit Farbwert des Pixels an der übergebenen Koordinate zurück. + @remark Diese Methode sollte auf keine Fall benutzt werden um größere Teile des Bildes zu lesen, da sie sehr langsam ist. Sie ist + eher dafür gedacht einzelne Pixel des Bildes auszulesen. */ virtual unsigned int GetPixel(int X, int Y) const = 0; /** - @brief Füllt den Inhalt des Bildes mit Pixeldaten. - @param Pixeldata ein Vector der die Pixeldaten enthält. Sie müssen in dem Farbformat des Bildes vorliegen und es müssen genügend Daten - vorhanden sein, um das ganze Bild zu füllen. + @brief Füllt den Inhalt des Bildes mit Pixeldaten. + @param Pixeldata ein Vector der die Pixeldaten enthält. Sie müssen in dem Farbformat des Bildes vorliegen und es müssen genügend Daten + vorhanden sein, um das ganze Bild zu füllen. @param Offset der Offset in Byte im Pixeldata-Vector an dem sich der erste zu schreibende Pixel befindet.
- Der Standardwert ist 0. - @param Stride der Abstand in Byte zwischen dem Zeilenende und dem Beginn einer neuen Zeile im Pixeldata-Vector.
- Der Standardwert ist 0. - @return Gibt false zurück, falls der Aufruf fehlgeschlagen ist. - @remark Ein Aufruf dieser Methode ist nur erlaubt, wenn IsSetContentAllowed() true zurückgibt. + Der Standardwert ist 0. + @param Stride der Abstand in Byte zwischen dem Zeilenende und dem Beginn einer neuen Zeile im Pixeldata-Vector.
+ Der Standardwert ist 0. + @return Gibt false zurück, falls der Aufruf fehlgeschlagen ist. + @remark Ein Aufruf dieser Methode ist nur erlaubt, wenn IsSetContentAllowed() true zurückgibt. */ - virtual bool SetContent(const byte *Pixeldata, unsigned int Offset = 0, unsigned int Stride = 0) = 0; + virtual bool SetContent(const byte *Pixeldata, unsigned int Offset = 0, unsigned int Stride = 0) = 0; - virtual bool IsScalingAllowed() const = 0; - virtual bool IsAlphaAllowed() const = 0; - virtual bool IsColorModulationAllowed() const = 0; - virtual bool IsSetContentAllowed() const = 0; + virtual bool IsScalingAllowed() const = 0; + virtual bool IsAlphaAllowed() const = 0; + virtual bool IsColorModulationAllowed() const = 0; + virtual bool IsSetContentAllowed() const = 0; - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); protected: - bool m_FlipH; - bool m_FlipV; - float m_ScaleFactorX; - float m_ScaleFactorY; - unsigned int m_ModulationColor; - int m_OriginalWidth; - int m_OriginalHeight; + bool m_FlipH; + bool m_FlipV; + float m_ScaleFactorX; + float m_ScaleFactorY; + unsigned int m_ModulationColor; + int m_OriginalWidth; + int m_OriginalHeight; }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/bitmapresource.cpp b/engines/sword25/gfx/bitmapresource.cpp index 6113db96c9..4a8c96880d 100644 --- a/engines/sword25/gfx/bitmapresource.cpp +++ b/engines/sword25/gfx/bitmapresource.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -47,23 +47,20 @@ namespace Sword25 { // Konstruktion / Destruktion // -------------------------- -BS_BitmapResource::BS_BitmapResource(const Common::String & Filename, BS_Image * pImage) : +BS_BitmapResource::BS_BitmapResource(const Common::String &Filename, BS_Image *pImage) : m_Valid(false), m_pImage(pImage), - BS_Resource(Filename, BS_Resource::TYPE_BITMAP) -{ + BS_Resource(Filename, BS_Resource::TYPE_BITMAP) { m_Valid = m_pImage != 0; } -BS_BitmapResource::~BS_BitmapResource() -{ +BS_BitmapResource::~BS_BitmapResource() { delete m_pImage; } // ----------------------------------------------------------------------------- -unsigned int BS_BitmapResource::GetPixel(int X, int Y) const -{ +unsigned int BS_BitmapResource::GetPixel(int X, int Y) const { BS_ASSERT(X >= 0 && X < m_pImage->GetWidth()); BS_ASSERT(Y >= 0 && Y < m_pImage->GetHeight()); diff --git a/engines/sword25/gfx/bitmapresource.h b/engines/sword25/gfx/bitmapresource.h index 4e6e305bed..112ee379cd 100644 --- a/engines/sword25/gfx/bitmapresource.h +++ b/engines/sword25/gfx/bitmapresource.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -48,14 +48,12 @@ namespace Sword25 { class BS_Rect; -class BS_BitmapResource : public BS_Resource -{ +class BS_BitmapResource : public BS_Resource { public: /** - @brief Die möglichen Flippingparameter für die Blit-Methode. + @brief Die möglichen Flippingparameter für die Blit-Methode. */ - enum FLIP_FLAGS - { + enum FLIP_FLAGS { /// Das Bild wird nicht gespiegelt. FLIP_NONE = 0, /// Das Bild wird an der horizontalen Achse gespiegelt. @@ -68,92 +66,102 @@ public: FLIP_VH = FLIP_H | FLIP_V }; - BS_BitmapResource(const Common::String & Filename, BS_Image * pImage); + BS_BitmapResource(const Common::String &Filename, BS_Image *pImage); virtual ~BS_BitmapResource(); /** - @brief Gibt zurück, ob das Objekt einen gültigen Zustand hat. + @brief Gibt zurück, ob das Objekt einen gültigen Zustand hat. */ - bool IsValid() const { return m_Valid; } + bool IsValid() const { + return m_Valid; + } /** - @brief Gibt die Breite des Bitmaps zurück. + @brief Gibt die Breite des Bitmaps zurück. */ - int GetWidth() const { BS_ASSERT(m_pImage); return m_pImage->GetWidth(); } + int GetWidth() const { + BS_ASSERT(m_pImage); + return m_pImage->GetWidth(); + } /** - @brief Gibt die Höhe des Bitmaps zurück. + @brief Gibt die Höhe des Bitmaps zurück. */ - int GetHeight() const { BS_ASSERT(m_pImage); return m_pImage->GetHeight(); } + int GetHeight() const { + BS_ASSERT(m_pImage); + return m_pImage->GetHeight(); + } /** - @brief Rendert das Bild in den Framebuffer. - @param PosX die Position auf der X-Achse im Zielbild in Pixeln, an der das Bild gerendert werden soll.
- Der Standardwert ist 0. - @param PosY die Position auf der Y-Achse im Zielbild in Pixeln, an der das Bild gerendert werden soll.
- Der Standardwert ist 0. - @param Flipping gibt an, wie das Bild gespiegelt werden soll.
- Der Standardwert ist BS_Image::FLIP_NONE (keine Spiegelung) - @param pSrcPartRect Pointer auf ein BS_Rect, welches den Ausschnitt des Quellbildes spezifiziert, der gerendert - werden soll oder NULL, falls das gesamte Bild gerendert werden soll.
- Dieser Ausschnitt bezieht sich auf das ungespiegelte und unskalierte Bild.
- Der Standardwert ist NULL. - @param Color ein ARGB Farbwert, der die Parameter für die Farbmodulation und fürs Alphablending festlegt.
- Die Alpha-Komponente der Farbe bestimmt den Alphablending Parameter (0 = keine Deckung, 255 = volle Deckung).
- Die Farbkomponenten geben die Farbe für die Farbmodulation an.
- Der Standardwert is BS_ARGB(255, 255, 255, 255) (volle Deckung, keine Farbmodulation). - Zum Erzeugen des Farbwertes können die Makros BS_RGB und BS_ARGB benutzt werden. - @param Width gibt die Ausgabebreite des Bildausschnittes an. - Falls diese von der Breite des Bildausschnittes abweicht wird - das Bild entsprechend Skaliert.
- Der Wert -1 gibt an, dass das Bild nicht Skaliert werden soll.
- Der Standardwert ist -1. - @param Width gibt die Ausgabehöhe des Bildausschnittes an. - Falls diese von der Höhe des Bildauschnittes abweicht, wird - das Bild entsprechend Skaliert.
- Der Wert -1 gibt an, dass das Bild nicht Skaliert werden soll.
- Der Standardwert ist -1. - @return Gibt false zurück, falls das Rendern fehlgeschlagen ist. - @remark Er werden nicht alle Blitting-Operationen von allen BS_Image-Klassen unterstützt.
- Mehr Informationen gibt es in der Klassenbeschreibung von BS_Image und durch folgende Methoden: - - IsBlitTarget() - - IsScalingAllowed() - - IsFillingAllowed() - - IsAlphaAllowed() - - IsColorModulationAllowed() + @brief Rendert das Bild in den Framebuffer. + @param PosX die Position auf der X-Achse im Zielbild in Pixeln, an der das Bild gerendert werden soll.
+ Der Standardwert ist 0. + @param PosY die Position auf der Y-Achse im Zielbild in Pixeln, an der das Bild gerendert werden soll.
+ Der Standardwert ist 0. + @param Flipping gibt an, wie das Bild gespiegelt werden soll.
+ Der Standardwert ist BS_Image::FLIP_NONE (keine Spiegelung) + @param pSrcPartRect Pointer auf ein BS_Rect, welches den Ausschnitt des Quellbildes spezifiziert, der gerendert + werden soll oder NULL, falls das gesamte Bild gerendert werden soll.
+ Dieser Ausschnitt bezieht sich auf das ungespiegelte und unskalierte Bild.
+ Der Standardwert ist NULL. + @param Color ein ARGB Farbwert, der die Parameter für die Farbmodulation und fürs Alphablending festlegt.
+ Die Alpha-Komponente der Farbe bestimmt den Alphablending Parameter (0 = keine Deckung, 255 = volle Deckung).
+ Die Farbkomponenten geben die Farbe für die Farbmodulation an.
+ Der Standardwert is BS_ARGB(255, 255, 255, 255) (volle Deckung, keine Farbmodulation). + Zum Erzeugen des Farbwertes können die Makros BS_RGB und BS_ARGB benutzt werden. + @param Width gibt die Ausgabebreite des Bildausschnittes an. + Falls diese von der Breite des Bildausschnittes abweicht wird + das Bild entsprechend Skaliert.
+ Der Wert -1 gibt an, dass das Bild nicht Skaliert werden soll.
+ Der Standardwert ist -1. + @param Width gibt die Ausgabehöhe des Bildausschnittes an. + Falls diese von der Höhe des Bildauschnittes abweicht, wird + das Bild entsprechend Skaliert.
+ Der Wert -1 gibt an, dass das Bild nicht Skaliert werden soll.
+ Der Standardwert ist -1. + @return Gibt false zurück, falls das Rendern fehlgeschlagen ist. + @remark Er werden nicht alle Blitting-Operationen von allen BS_Image-Klassen unterstützt.
+ Mehr Informationen gibt es in der Klassenbeschreibung von BS_Image und durch folgende Methoden: + - IsBlitTarget() + - IsScalingAllowed() + - IsFillingAllowed() + - IsAlphaAllowed() + - IsColorModulationAllowed() */ - bool Blit(int PosX = 0, int PosY = 0, - int Flipping = FLIP_NONE, - BS_Rect* pSrcPartRect = NULL, - unsigned int Color = BS_ARGB(255, 255, 255, 255), - int Width = -1, int Height = -1) - { + bool Blit(int PosX = 0, int PosY = 0, + int Flipping = FLIP_NONE, + BS_Rect *pSrcPartRect = NULL, + unsigned int Color = BS_ARGB(255, 255, 255, 255), + int Width = -1, int Height = -1) { BS_ASSERT(m_pImage); return m_pImage->Blit(PosX, PosY, Flipping, pSrcPartRect, Color, Width, Height); } /** - @brief Füllt einen Rechteckigen Bereich des Bildes mit einer Farbe. - @param pFillRect Pointer auf ein BS_Rect, welches den Ausschnitt des Bildes spezifiziert, der gefüllt - werden soll oder NULL, falls das gesamte Bild gefüllt werden soll.
- Der Standardwert ist NULL. - @param Color der 32 Bit Farbwert mit dem der Bildbereich gefüllt werden soll. - @remark Ein Aufruf dieser Methode ist nur gestattet, wenn IsFillingAllowed() true zurückgibt. - @remark Es ist möglich über die Methode transparente Rechtecke darzustellen, indem man eine Farbe mit einem Alphawert ungleich - 255 angibt. - @remark Unabhängig vom Farbformat des Bildes muss ein 32 Bit Farbwert angegeben werden. Zur Erzeugung, können die Makros - BS_RGB und BS_ARGB benutzt werden. - @remark Falls das Rechteck nicht völlig innerhalb des Bildschirms ist, wird es automatisch zurechtgestutzt. + @brief Füllt einen Rechteckigen Bereich des Bildes mit einer Farbe. + @param pFillRect Pointer auf ein BS_Rect, welches den Ausschnitt des Bildes spezifiziert, der gefüllt + werden soll oder NULL, falls das gesamte Bild gefüllt werden soll.
+ Der Standardwert ist NULL. + @param Color der 32 Bit Farbwert mit dem der Bildbereich gefüllt werden soll. + @remark Ein Aufruf dieser Methode ist nur gestattet, wenn IsFillingAllowed() true zurückgibt. + @remark Es ist möglich über die Methode transparente Rechtecke darzustellen, indem man eine Farbe mit einem Alphawert ungleich + 255 angibt. + @remark Unabhängig vom Farbformat des Bildes muss ein 32 Bit Farbwert angegeben werden. Zur Erzeugung, können die Makros + BS_RGB und BS_ARGB benutzt werden. + @remark Falls das Rechteck nicht völlig innerhalb des Bildschirms ist, wird es automatisch zurechtgestutzt. */ - bool Fill(const BS_Rect* pFillRect = 0, unsigned int Color = BS_RGB(0, 0, 0)) { BS_ASSERT(m_pImage); return m_pImage->Fill(pFillRect, Color); } + bool Fill(const BS_Rect *pFillRect = 0, unsigned int Color = BS_RGB(0, 0, 0)) { + BS_ASSERT(m_pImage); + return m_pImage->Fill(pFillRect, Color); + } /** - @brief Liest einen Pixel des Bildes. - @param X die X-Koordinate des Pixels. - @param Y die Y-Koordinate des Pixels - @return Gibt den 32-Bit Farbwert des Pixels an der übergebenen Koordinate zurück. - @remark Diese Methode sollte auf keine Fall benutzt werden um größere Teile des Bildes zu lesen, da sie sehr langsam ist. Sie ist - eher dafür gedacht einzelne Pixel des Bildes auszulesen. + @brief Liest einen Pixel des Bildes. + @param X die X-Koordinate des Pixels. + @param Y die Y-Koordinate des Pixels + @return Gibt den 32-Bit Farbwert des Pixels an der übergebenen Koordinate zurück. + @remark Diese Methode sollte auf keine Fall benutzt werden um größere Teile des Bildes zu lesen, da sie sehr langsam ist. Sie ist + eher dafür gedacht einzelne Pixel des Bildes auszulesen. */ unsigned int GetPixel(int X, int Y) const; @@ -161,34 +169,49 @@ public: /** @name Auskunfts-Methoden */ /** - @brief Überprüft, ob das BS_Image ein Zielbild für einen Blit-Aufruf sein kann. - @return Gibt false zurück, falls ein Blit-Aufruf mit diesem Objekt als Ziel nicht gestattet ist. + @brief Überprüft, ob das BS_Image ein Zielbild für einen Blit-Aufruf sein kann. + @return Gibt false zurück, falls ein Blit-Aufruf mit diesem Objekt als Ziel nicht gestattet ist. */ - bool IsBlitTarget() { BS_ASSERT(m_pImage); return m_pImage->IsBlitTarget(); } + bool IsBlitTarget() { + BS_ASSERT(m_pImage); + return m_pImage->IsBlitTarget(); + } /** - @brief Gibt true zurück, falls das BS_Image bei einem Aufruf von Blit() skaliert dargestellt werden kann. + @brief Gibt true zurück, falls das BS_Image bei einem Aufruf von Blit() skaliert dargestellt werden kann. */ - bool IsScalingAllowed() { BS_ASSERT(m_pImage); return m_pImage->IsScalingAllowed(); } + bool IsScalingAllowed() { + BS_ASSERT(m_pImage); + return m_pImage->IsScalingAllowed(); + } /** - @brief Gibt true zurück, wenn das BS_Image mit einem Aufruf von Fill() gefüllt werden kann. + @brief Gibt true zurück, wenn das BS_Image mit einem Aufruf von Fill() gefüllt werden kann. */ - bool IsFillingAllowed() { BS_ASSERT(m_pImage); return m_pImage->IsFillingAllowed(); } + bool IsFillingAllowed() { + BS_ASSERT(m_pImage); + return m_pImage->IsFillingAllowed(); + } /** - @brief Gibt true zurück, wenn das BS_Image bei einem Aufruf von Blit() mit einem Alphawert dargestellt werden kann. + @brief Gibt true zurück, wenn das BS_Image bei einem Aufruf von Blit() mit einem Alphawert dargestellt werden kann. */ - bool IsAlphaAllowed() { BS_ASSERT(m_pImage); return m_pImage->IsAlphaAllowed(); } + bool IsAlphaAllowed() { + BS_ASSERT(m_pImage); + return m_pImage->IsAlphaAllowed(); + } /** - @brief Gibt true zurück, wenn das BS_Image bei einem Aufruf von Blit() mit Farbmodulation dargestellt werden kann. + @brief Gibt true zurück, wenn das BS_Image bei einem Aufruf von Blit() mit Farbmodulation dargestellt werden kann. */ - bool IsColorModulationAllowed() { BS_ASSERT(m_pImage); return m_pImage->IsColorModulationAllowed(); } + bool IsColorModulationAllowed() { + BS_ASSERT(m_pImage); + return m_pImage->IsColorModulationAllowed(); + } private: - BS_Image * m_pImage; - bool m_Valid; + BS_Image *m_pImage; + bool m_Valid; }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/dynamicbitmap.cpp b/engines/sword25/gfx/dynamicbitmap.cpp index 9e5f2bb2f9..22a0d3d1dd 100644 --- a/engines/sword25/gfx/dynamicbitmap.cpp +++ b/engines/sword25/gfx/dynamicbitmap.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -56,8 +56,7 @@ namespace Sword25 { // ----------------------------------------------------------------------------- BS_DynamicBitmap::BS_DynamicBitmap(BS_RenderObjectPtr ParentPtr, unsigned int Width, unsigned int Height) : - BS_Bitmap(ParentPtr, TYPE_DYNAMICBITMAP) -{ + BS_Bitmap(ParentPtr, TYPE_DYNAMICBITMAP) { // Das BS_Bitmap konnte nicht erzeugt werden, daher muss an dieser Stelle abgebrochen werden. if (!m_InitSuccess) return; @@ -66,16 +65,14 @@ BS_DynamicBitmap::BS_DynamicBitmap(BS_RenderObjectPtr ParentPtr // ----------------------------------------------------------------------------- -BS_DynamicBitmap::BS_DynamicBitmap(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : - BS_Bitmap(ParentPtr, TYPE_DYNAMICBITMAP, Handle) -{ +BS_DynamicBitmap::BS_DynamicBitmap(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : + BS_Bitmap(ParentPtr, TYPE_DYNAMICBITMAP, Handle) { m_InitSuccess = Unpersist(Reader); } // ----------------------------------------------------------------------------- -bool BS_DynamicBitmap::CreateGLImage(unsigned int Width, unsigned int Height) -{ +bool BS_DynamicBitmap::CreateGLImage(unsigned int Width, unsigned int Height) { // GLImage mit den gewünschten Maßen erstellen bool Result; m_Image.reset(new BS_GLImage(Width, Height, Result)); @@ -88,14 +85,12 @@ bool BS_DynamicBitmap::CreateGLImage(unsigned int Width, unsigned int Height) // ----------------------------------------------------------------------------- -BS_DynamicBitmap::~BS_DynamicBitmap() -{ +BS_DynamicBitmap::~BS_DynamicBitmap() { } // ----------------------------------------------------------------------------- -unsigned int BS_DynamicBitmap::GetPixel(int X, int Y) const -{ +unsigned int BS_DynamicBitmap::GetPixel(int X, int Y) const { BS_ASSERT(X >= 0 && X < m_Width); BS_ASSERT(Y >= 0 && Y < m_Height); @@ -104,27 +99,23 @@ unsigned int BS_DynamicBitmap::GetPixel(int X, int Y) const // ----------------------------------------------------------------------------- -bool BS_DynamicBitmap::DoRender() -{ +bool BS_DynamicBitmap::DoRender() { // Framebufferobjekt holen - BS_GraphicEngine * pGfx = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); + BS_GraphicEngine *pGfx = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); BS_ASSERT(pGfx); // Bitmap zeichnen bool Result; - if (m_ScaleFactorX == 1.0f && m_ScaleFactorY == 1.0f) - { + if (m_ScaleFactorX == 1.0f && m_ScaleFactorY == 1.0f) { Result = m_Image->Blit(m_AbsoluteX, m_AbsoluteY, - (m_FlipV ? BS_BitmapResource::FLIP_V : 0) | - (m_FlipH ? BS_BitmapResource::FLIP_H : 0), - 0, m_ModulationColor, -1, -1); - } - else - { + (m_FlipV ? BS_BitmapResource::FLIP_V : 0) | + (m_FlipH ? BS_BitmapResource::FLIP_H : 0), + 0, m_ModulationColor, -1, -1); + } else { Result = m_Image->Blit(m_AbsoluteX, m_AbsoluteY, - (m_FlipV ? BS_BitmapResource::FLIP_V : 0) | - (m_FlipH ? BS_BitmapResource::FLIP_H : 0), - 0, m_ModulationColor, m_Width, m_Height); + (m_FlipV ? BS_BitmapResource::FLIP_V : 0) | + (m_FlipH ? BS_BitmapResource::FLIP_H : 0), + 0, m_ModulationColor, m_Width, m_Height); } return Result; @@ -132,8 +123,7 @@ bool BS_DynamicBitmap::DoRender() // ----------------------------------------------------------------------------- -bool BS_DynamicBitmap::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) -{ +bool BS_DynamicBitmap::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) { return m_Image->SetContent(Pixeldata, Offset, Stride); } @@ -141,29 +131,25 @@ bool BS_DynamicBitmap::SetContent(const byte *Pixeldata, unsigned int Offset, un // Auskunftsmethoden // ----------------------------------------------------------------------------- -bool BS_DynamicBitmap::IsScalingAllowed() const -{ +bool BS_DynamicBitmap::IsScalingAllowed() const { return m_Image->IsScalingAllowed(); } // ----------------------------------------------------------------------------- -bool BS_DynamicBitmap::IsAlphaAllowed() const -{ +bool BS_DynamicBitmap::IsAlphaAllowed() const { return m_Image->IsAlphaAllowed(); } // ----------------------------------------------------------------------------- -bool BS_DynamicBitmap::IsColorModulationAllowed() const -{ +bool BS_DynamicBitmap::IsColorModulationAllowed() const { return m_Image->IsColorModulationAllowed(); } // ----------------------------------------------------------------------------- -bool BS_DynamicBitmap::IsSetContentAllowed() const -{ +bool BS_DynamicBitmap::IsSetContentAllowed() const { return true; } @@ -171,12 +157,11 @@ bool BS_DynamicBitmap::IsSetContentAllowed() const // Persistenz // ----------------------------------------------------------------------------- -bool BS_DynamicBitmap::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_DynamicBitmap::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; Result &= BS_Bitmap::Persist(Writer); - + // Bilddaten werden nicht gespeichert. Dies ist auch nicht weiter von bedeutung, da BS_DynamicBitmap nur vom Videoplayer benutzt wird. // Während ein Video abläuft kann niemals gespeichert werden. BS_DynamicBitmap kann nur der Vollständigkeit halber persistiert werden. BS_LOG_WARNINGLN("Persisting a BS_DynamicBitmap. Bitmap content is not persisted."); @@ -186,8 +171,7 @@ bool BS_DynamicBitmap::Persist(BS_OutputPersistenceBlock & Writer) return Result; } -bool BS_DynamicBitmap::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_DynamicBitmap::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; Result &= BS_Bitmap::Unpersist(Reader); diff --git a/engines/sword25/gfx/dynamicbitmap.h b/engines/sword25/gfx/dynamicbitmap.h index 0449f9984d..04d1ce5c7a 100644 --- a/engines/sword25/gfx/dynamicbitmap.h +++ b/engines/sword25/gfx/dynamicbitmap.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -54,31 +54,30 @@ namespace Sword25 { // Klassendeklaration // ----------------------------------------------------------------------------- -class BS_DynamicBitmap : public BS_Bitmap -{ -friend class BS_RenderObject; +class BS_DynamicBitmap : public BS_Bitmap { + friend class BS_RenderObject; public: virtual ~BS_DynamicBitmap(); virtual unsigned int GetPixel(int X, int Y) const; - virtual bool SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride); + virtual bool SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride); - virtual bool IsScalingAllowed() const; - virtual bool IsAlphaAllowed() const; - virtual bool IsColorModulationAllowed() const; - virtual bool IsSetContentAllowed() const; + virtual bool IsScalingAllowed() const; + virtual bool IsAlphaAllowed() const; + virtual bool IsColorModulationAllowed() const; + virtual bool IsSetContentAllowed() const; - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); protected: - virtual bool DoRender(); + virtual bool DoRender(); private: BS_DynamicBitmap(BS_RenderObjectPtr ParentPtr, unsigned int Width, unsigned int Height); - BS_DynamicBitmap(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); + BS_DynamicBitmap(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); bool CreateGLImage(unsigned int Width, unsigned int Height); diff --git a/engines/sword25/gfx/fontresource.cpp b/engines/sword25/gfx/fontresource.cpp index 9dbb0a0646..b9cbb6a7ba 100644 --- a/engines/sword25/gfx/fontresource.cpp +++ b/engines/sword25/gfx/fontresource.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -60,31 +60,27 @@ static const unsigned int DEFAULT_GAPWIDTH = 1; // Konstruktion / Destruktion // ----------------------------------------------------------------------------- -BS_FontResource::BS_FontResource(BS_Kernel* pKernel, const Common::String& FileName) : +BS_FontResource::BS_FontResource(BS_Kernel *pKernel, const Common::String &FileName) : _pKernel(pKernel), _Valid(false), - BS_Resource(FileName, BS_Resource::TYPE_FONT) -{ + BS_Resource(FileName, BS_Resource::TYPE_FONT) { // XML Fontdatei parsen TiXmlDocument Doc; - if (!_ParseXMLDocument(FileName, Doc)) - { + if (!_ParseXMLDocument(FileName, Doc)) { BS_LOG_ERRORLN("The following TinyXML-Error occured while parsing \"%s\": %s", GetFileName().c_str(), Doc.ErrorDesc()); return; } // Font-Tag finden - TiXmlElement* pElement = Doc.FirstChildElement("font"); - if (!pElement) - { + TiXmlElement *pElement = Doc.FirstChildElement("font"); + if (!pElement) { BS_LOG_ERRORLN("No tag found in \"%s\".", GetFileName().c_str()); return; } // Font-Tag parsen Common::String BitmapFileName; - if (!_ParseFontTag(*pElement, BitmapFileName, _LineHeight, _GapWidth)) - { + if (!_ParseFontTag(*pElement, BitmapFileName, _LineHeight, _GapWidth)) { BS_LOG_ERRORLN("An error occurred while parsing tag in \"%s\".", GetFileName().c_str()); return; } @@ -93,43 +89,38 @@ BS_FontResource::BS_FontResource(BS_Kernel* pKernel, const Common::String& FileN { // Pointer auf den Package-Manager bekommen BS_ASSERT(_pKernel); - BS_PackageManager* pPackage = static_cast(_pKernel->GetService("package")); + BS_PackageManager *pPackage = static_cast(_pKernel->GetService("package")); BS_ASSERT(pPackage); // Absoluten, eindeutigen Pfad bestimmen _BitmapFileName = pPackage->GetAbsolutePath(BitmapFileName); - if (_BitmapFileName == "") - { + if (_BitmapFileName == "") { BS_LOG_ERRORLN("Image file \"%s\" was specified in tag of \"%s\" but could not be found.", - _BitmapFileName.c_str(), GetFileName().c_str()); + _BitmapFileName.c_str(), GetFileName().c_str()); return; } // Bitmapdatei cachen - if (!_pKernel->GetResourceManager()->PrecacheResource(_BitmapFileName)) - { + if (!_pKernel->GetResourceManager()->PrecacheResource(_BitmapFileName)) { BS_LOG_ERRORLN("Could not precache \"%s\".", _BitmapFileName.c_str()); return; } } - + // Das Erste Character-Tag finden pElement = pElement->FirstChildElement("character"); - if (!pElement) - { + if (!pElement) { BS_LOG_ERRORLN("No tag found in \"%s\".", GetFileName().c_str()); return; } // Alle Character-Tags parsen - while (pElement) - { - int CharCode; + while (pElement) { + int CharCode; BS_Rect CharRect; // Aktuelles Character-Tag parsen - if (!_ParseCharacterTag(*pElement, CharCode, CharRect)) - { + if (!_ParseCharacterTag(*pElement, CharCode, CharRect)) { BS_LOG_ERRORLN("An error occured while parsing a tag in \"%s\".", GetFileName().c_str()); return; } @@ -148,19 +139,17 @@ BS_FontResource::BS_FontResource(BS_Kernel* pKernel, const Common::String& FileN // ----------------------------------------------------------------------------- -bool BS_FontResource::_ParseXMLDocument(const Common::String & FileName, TiXmlDocument & Doc) const -{ +bool BS_FontResource::_ParseXMLDocument(const Common::String &FileName, TiXmlDocument &Doc) const { // Pointer auf den Package-Manager bekommen BS_ASSERT(_pKernel); - BS_PackageManager* pPackage = static_cast(_pKernel->GetService("package")); + BS_PackageManager *pPackage = static_cast(_pKernel->GetService("package")); BS_ASSERT(pPackage); // Die Daten werden zunächst über den Package-Manager gelesen und dann in einen um ein Byte größeren Buffer kopiert // und NULL-Terminiert, da TinyXML NULL-Terminierte Daten benötigt. unsigned int FileSize; - char * LoadBuffer = (char*) pPackage->GetFile(GetFileName(), &FileSize); - if (!LoadBuffer) - { + char *LoadBuffer = (char *) pPackage->GetFile(GetFileName(), &FileSize); + if (!LoadBuffer) { BS_LOG_ERRORLN("Could not read \"%s\".", GetFileName().c_str()); return false; } @@ -182,33 +171,29 @@ bool BS_FontResource::_ParseXMLDocument(const Common::String & FileName, TiXmlDo // ----------------------------------------------------------------------------- -bool BS_FontResource::_ParseFontTag(TiXmlElement & Tag, Common::String & BitmapFileName, int & Lineheight, int & GapWidth) const -{ +bool BS_FontResource::_ParseFontTag(TiXmlElement &Tag, Common::String &BitmapFileName, int &Lineheight, int &GapWidth) const { // Bitmap Attribut auslesen - const char * BitmapString = Tag.Attribute("bitmap"); - if (!BitmapString) - { + const char *BitmapString = Tag.Attribute("bitmap"); + if (!BitmapString) { BS_LOG_ERRORLN(" tag without bitmap attribute occurred in \"%s\".", GetFileName().c_str()); return false; } BitmapFileName = BitmapString; // Lineheight Attribut auslesen - const char * LineheightString = Tag.Attribute("lineheight"); - if (!LineheightString || !BS_String::ToInt(Common::String(LineheightString), Lineheight) || Lineheight < 0) - { + const char *LineheightString = Tag.Attribute("lineheight"); + if (!LineheightString || !BS_String::ToInt(Common::String(LineheightString), Lineheight) || Lineheight < 0) { BS_LOG_WARNINGLN("Illegal or missing lineheight attribute in tag in \"%s\". Assuming default (\"%d\").", - GetFileName().c_str(), DEFAULT_LINEHEIGHT); + GetFileName().c_str(), DEFAULT_LINEHEIGHT); Lineheight = DEFAULT_LINEHEIGHT; } // Gap Attribut auslesen - const char * GapString = Tag.Attribute("gap"); - if (!GapString || !BS_String::ToInt(Common::String(GapString), GapWidth) || GapWidth < 0) - { + const char *GapString = Tag.Attribute("gap"); + if (!GapString || !BS_String::ToInt(Common::String(GapString), GapWidth) || GapWidth < 0) { BS_LOG_WARNINGLN("Illegal or missing gap attribute in tag in \"%s\". Assuming default (\"%d\").", - GetFileName().c_str(), DEFAULT_GAPWIDTH); + GetFileName().c_str(), DEFAULT_GAPWIDTH); GapWidth = DEFAULT_GAPWIDTH; } @@ -217,12 +202,10 @@ bool BS_FontResource::_ParseFontTag(TiXmlElement & Tag, Common::String & BitmapF // ----------------------------------------------------------------------------- -bool BS_FontResource::_ParseCharacterTag(TiXmlElement & Tag, int & Code, BS_Rect & Rect) const -{ +bool BS_FontResource::_ParseCharacterTag(TiXmlElement &Tag, int &Code, BS_Rect &Rect) const { // Code Attribut auslesen - const char * CodeString = Tag.Attribute("code"); - if (!CodeString || !BS_String::ToInt(Common::String(CodeString), Code) || Code < 0 || Code >= 256) - { + const char *CodeString = Tag.Attribute("code"); + if (!CodeString || !BS_String::ToInt(Common::String(CodeString), Code) || Code < 0 || Code >= 256) { BS_LOG_ERRORLN("Illegal or missing code attribute in tag in \"%s\".", GetFileName().c_str()); return false; } @@ -238,7 +221,7 @@ bool BS_FontResource::_ParseCharacterTag(TiXmlElement & Tag, int & Code, BS_Rect Rect.left = tmp; // Right Attribut auslesen - const char * RightString = Tag.Attribute("right"); + const char *RightString = Tag.Attribute("right"); if (!RightString || !BS_String::ToInt(RightString, tmp) || tmp < 0) { BS_LOG_ERRORLN("Illegal or missing right attribute in tag in \"%s\".", GetFileName().c_str()); return false; @@ -246,7 +229,7 @@ bool BS_FontResource::_ParseCharacterTag(TiXmlElement & Tag, int & Code, BS_Rect Rect.right = tmp; // Top Attribut auslesen - const char * TopString = Tag.Attribute("top"); + const char *TopString = Tag.Attribute("top"); if (!TopString || !BS_String::ToInt(TopString, tmp) || tmp < 0) { BS_LOG_ERRORLN("Illegal or missing top attribute in tag in \"%s\".", GetFileName().c_str()); return false; @@ -254,9 +237,8 @@ bool BS_FontResource::_ParseCharacterTag(TiXmlElement & Tag, int & Code, BS_Rect Rect.top = tmp; // Bottom Attribut auslesen - const char * BottomString = Tag.Attribute("bottom"); - if (!BottomString || !BS_String::ToInt(BottomString, tmp) || tmp < 0) - { + const char *BottomString = Tag.Attribute("bottom"); + if (!BottomString || !BS_String::ToInt(BottomString, tmp) || tmp < 0) { BS_LOG_ERRORLN("Illegal or missing bottom attribute in tag in \"%s\".", GetFileName().c_str()); return false; } diff --git a/engines/sword25/gfx/fontresource.h b/engines/sword25/gfx/fontresource.h index fbaa368170..d26c79c575 100644 --- a/engines/sword25/gfx/fontresource.h +++ b/engines/sword25/gfx/fontresource.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -58,65 +58,75 @@ class BS_Kernel; // Klassendefinition // ----------------------------------------------------------------------------- -class BS_FontResource : public BS_Resource -{ +class BS_FontResource : public BS_Resource { public: /** - @brief Erzeugt eine neues Exemplar von BS_FontResource - @param pKernel ein Pointer auf den Kernel - @param FileName der Dateiname der zu ladenen Resource - @remark Wenn der Konstruktor erfolgreich ausgeführt werden konnte gibt die Methode IsValid true zurück. + @brief Erzeugt eine neues Exemplar von BS_FontResource + @param pKernel ein Pointer auf den Kernel + @param FileName der Dateiname der zu ladenen Resource + @remark Wenn der Konstruktor erfolgreich ausgeführt werden konnte gibt die Methode IsValid true zurück. */ - BS_FontResource(BS_Kernel * pKernel, const Common::String & FileName); + BS_FontResource(BS_Kernel *pKernel, const Common::String &FileName); /** - @brief Gibt true zurück, wenn das Objekt korrekt initialisiert wurde. + @brief Gibt true zurück, wenn das Objekt korrekt initialisiert wurde. - Diese Methode kann dazu benutzt werden um festzustellen, ob der Konstruktor erfolgreich ausgeführt wurde. + Diese Methode kann dazu benutzt werden um festzustellen, ob der Konstruktor erfolgreich ausgeführt wurde. */ - bool IsValid() const { return _Valid; } + bool IsValid() const { + return _Valid; + } /** - @brief Gibt die Zeilenhöhe des Fonts in Pixeln zurück. + @brief Gibt die Zeilenhöhe des Fonts in Pixeln zurück. - Die Zeilenhöhe ist der Wert, der zur Y-Koordinate addiert wird, wenn ein Zeilenumbruch auftritt. + Die Zeilenhöhe ist der Wert, der zur Y-Koordinate addiert wird, wenn ein Zeilenumbruch auftritt. */ - int GetLineHeight() const { return _LineHeight; } + int GetLineHeight() const { + return _LineHeight; + } /** - @brief Gibt den Buchstabenabstand der Fonts in Pixeln zurück. + @brief Gibt den Buchstabenabstand der Fonts in Pixeln zurück. - Der Buchstabenabstand ist der Wert, der zwischen zwei Buchstaben freigelassen wird. + Der Buchstabenabstand ist der Wert, der zwischen zwei Buchstaben freigelassen wird. */ - int GetGapWidth() const { return _GapWidth; } + int GetGapWidth() const { + return _GapWidth; + } /** - @brief Gibt das Bounding-Rect eines Zeichens auf der Charactermap zurück. - @param Character der ASCII-Code des Zeichens - @return Das Bounding-Rect des übergebenen Zeichens auf der Charactermap. + @brief Gibt das Bounding-Rect eines Zeichens auf der Charactermap zurück. + @param Character der ASCII-Code des Zeichens + @return Das Bounding-Rect des übergebenen Zeichens auf der Charactermap. */ - const BS_Rect & GetCharacterRect(int Character) const { BS_ASSERT(Character >= 0 && Character < 256); return _CharacterRects[Character]; } + const BS_Rect &GetCharacterRect(int Character) const { + BS_ASSERT(Character >= 0 && Character < 256); + return _CharacterRects[Character]; + } /** - @brief Gibt den Dateinamen der Charactermap zurück. + @brief Gibt den Dateinamen der Charactermap zurück. */ - const Common::String & GetCharactermapFileName() const { return _BitmapFileName; } + const Common::String &GetCharactermapFileName() const { + return _BitmapFileName; + } private: - BS_Kernel * _pKernel; - bool _Valid; - Common::String _BitmapFileName; - int _LineHeight; - int _GapWidth; - BS_Rect _CharacterRects[256]; + BS_Kernel *_pKernel; + bool _Valid; + Common::String _BitmapFileName; + int _LineHeight; + int _GapWidth; + BS_Rect _CharacterRects[256]; // ----------------------------------------------------------------------------- // Hilfsmethoden // ----------------------------------------------------------------------------- - - bool _ParseXMLDocument(const Common::String & FileName, TiXmlDocument & Doc) const; - bool _ParseFontTag(TiXmlElement & Tag, Common::String & BitmapFileName, int & LineHeight, int & GapWidth) const; - bool _ParseCharacterTag(TiXmlElement & Tag, int & Code, BS_Rect & Rect) const; + + bool _ParseXMLDocument(const Common::String &FileName, TiXmlDocument &Doc) const; + bool _ParseFontTag(TiXmlElement &Tag, Common::String &BitmapFileName, int &LineHeight, int &GapWidth) const; + bool _ParseCharacterTag(TiXmlElement &Tag, int &Code, BS_Rect &Rect) const; }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/framecounter.cpp b/engines/sword25/gfx/framecounter.cpp index c2e6ab772d..82d4d313a6 100644 --- a/engines/sword25/gfx/framecounter.cpp +++ b/engines/sword25/gfx/framecounter.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -38,14 +38,13 @@ namespace Sword25 { BS_Framecounter::BS_Framecounter(int UpdateFrequency) : - m_FPS(0), - m_FPSCount(0), - m_LastUpdateTime(-1) { + m_FPS(0), + m_FPSCount(0), + m_LastUpdateTime(-1) { SetUpdateFrequency(UpdateFrequency); } -void BS_Framecounter::Update() -{ +void BS_Framecounter::Update() { // Aktuellen Systemtimerstand auslesen uint64_t Timer = g_system->getMillis() * 1000; diff --git a/engines/sword25/gfx/framecounter.h b/engines/sword25/gfx/framecounter.h index 89612f94be..f4381eb1f2 100644 --- a/engines/sword25/gfx/framecounter.h +++ b/engines/sword25/gfx/framecounter.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -53,14 +53,14 @@ private: public: /** * Creates a new BS_Framecounter object - * @param UpdateFrequency Specifies how often the frame counter should be updated in a sceond. + * @param UpdateFrequency Specifies how often the frame counter should be updated in a sceond. * The default value is 10. */ BS_Framecounter(int UpdateFrequency = DEFAULT_UPDATE_FREQUENCY); /** * Determines how often the frame counter should be updated in a second. - * @param UpdateFrequency Specifies how often the frame counter should be updated in a second. + * @param UpdateFrequency Specifies how often the frame counter should be updated in a second. */ inline void SetUpdateFrequency(int UpdateFrequency); @@ -72,10 +72,12 @@ public: /** * Returns the current FPS value. */ - int GetFPS() const { return m_FPS; } + int GetFPS() const { + return m_FPS; + } private: - int m_FPS; + int m_FPS; int m_FPSCount; int64_t m_LastUpdateTime; uint64_t m_UpdateDelay; diff --git a/engines/sword25/gfx/graphicengine.cpp b/engines/sword25/gfx/graphicengine.cpp index c35fba4159..075bf9757a 100644 --- a/engines/sword25/gfx/graphicengine.cpp +++ b/engines/sword25/gfx/graphicengine.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -58,20 +58,19 @@ namespace Sword25 { using namespace std; using namespace Lua; -static const unsigned int FRAMETIME_SAMPLE_COUNT = 5; // Anzahl der Framezeiten über die, die Framezeit gemittelt wird +static const unsigned int FRAMETIME_SAMPLE_COUNT = 5; // Anzahl der Framezeiten über die, die Framezeit gemittelt wird -BS_GraphicEngine::BS_GraphicEngine(BS_Kernel * pKernel) : +BS_GraphicEngine::BS_GraphicEngine(BS_Kernel *pKernel) : m_Width(0), m_Height(0), m_BitDepth(0), m_Windowed(0), - m_LastTimeStamp((uint64)-1), // max. BS_INT64 um beim ersten Aufruf von _UpdateLastFrameDuration() einen Reset zu erzwingen + m_LastTimeStamp((uint64) - 1), // max. BS_INT64 um beim ersten Aufruf von _UpdateLastFrameDuration() einen Reset zu erzwingen m_LastFrameDuration(0), m_TimerActive(true), m_FrameTimeSampleSlot(0), m_RepaintedPixels(0), - BS_ResourceService(pKernel) -{ + BS_ResourceService(pKernel) { for (int i = 0; i < FRAMETIME_SAMPLE_COUNT; i++) m_FrameTimeSamples[i] = 0; @@ -83,8 +82,7 @@ BS_GraphicEngine::BS_GraphicEngine(BS_Kernel * pKernel) : // ----------------------------------------------------------------------------- -void BS_GraphicEngine::UpdateLastFrameDuration() -{ +void BS_GraphicEngine::UpdateLastFrameDuration() { // Aktuelle Zeit holen uint64_t CurrentTime = BS_Kernel::GetInstance()->GetMicroTicks(); @@ -106,58 +104,50 @@ void BS_GraphicEngine::UpdateLastFrameDuration() // ----------------------------------------------------------------------------- -namespace -{ - bool DoSaveScreenshot(BS_GraphicEngine & GraphicEngine, const Common::String & Filename, bool Thumbnail) - { - unsigned int Width; - unsigned int Height; - Common::Array Data; - if (!GraphicEngine.GetScreenshot(Width, Height, Data)) - { - BS_LOG_ERRORLN("Call to GetScreenshot() failed. Cannot save screenshot."); - return false; - } - - unsigned int test = Data.size(); - - if (Thumbnail) - return BS_Screenshot::SaveThumbnailToFile(Width, Height, Data, Filename); - else - return BS_Screenshot::SaveToFile(Width, Height, Data, Filename); +namespace { +bool DoSaveScreenshot(BS_GraphicEngine &GraphicEngine, const Common::String &Filename, bool Thumbnail) { + unsigned int Width; + unsigned int Height; + Common::Array Data; + if (!GraphicEngine.GetScreenshot(Width, Height, Data)) { + BS_LOG_ERRORLN("Call to GetScreenshot() failed. Cannot save screenshot."); + return false; } + + unsigned int test = Data.size(); + + if (Thumbnail) + return BS_Screenshot::SaveThumbnailToFile(Width, Height, Data, Filename); + else + return BS_Screenshot::SaveToFile(Width, Height, Data, Filename); +} } // ----------------------------------------------------------------------------- -bool BS_GraphicEngine::SaveScreenshot(const Common::String & Filename) -{ +bool BS_GraphicEngine::SaveScreenshot(const Common::String &Filename) { return DoSaveScreenshot(*this, Filename, false); } // ----------------------------------------------------------------------------- -bool BS_GraphicEngine::SaveThumbnailScreenshot( const Common::String & Filename ) -{ +bool BS_GraphicEngine::SaveThumbnailScreenshot(const Common::String &Filename) { return DoSaveScreenshot(*this, Filename, true); } // ----------------------------------------------------------------------------- -void BS_GraphicEngine::ARGBColorToLuaColor(lua_State * L, unsigned int Color) -{ - lua_Number Components[4] = - { - (Color >> 16) & 0xff, // Rot - (Color >> 8) & 0xff, // Grün - Color & 0xff, // Blau - Color >> 24, // Alpha +void BS_GraphicEngine::ARGBColorToLuaColor(lua_State *L, unsigned int Color) { + lua_Number Components[4] = { + (Color >> 16) & 0xff, // Rot + (Color >> 8) & 0xff, // Grün + Color & 0xff, // Blau + Color >> 24, // Alpha }; lua_newtable(L); - for (unsigned int i = 1; i <= 4; i++) - { + for (unsigned int i = 1; i <= 4; i++) { lua_pushnumber(L, i); lua_pushnumber(L, Components[i - 1]); lua_settable(L, -3); @@ -166,8 +156,7 @@ void BS_GraphicEngine::ARGBColorToLuaColor(lua_State * L, unsigned int Color) // ----------------------------------------------------------------------------- -unsigned int BS_GraphicEngine::LuaColorToARGBColor(lua_State * L, int StackIndex) -{ +unsigned int BS_GraphicEngine::LuaColorToARGBColor(lua_State *L, int StackIndex) { #ifdef DEBUG int __startStackDepth = lua_gettop(L); #endif @@ -199,8 +188,7 @@ unsigned int BS_GraphicEngine::LuaColorToARGBColor(lua_State * L, int StackIndex // Alpha Farbkomponente auslesen unsigned int Alpha = 0xff; - if (n == 4) - { + if (n == 4) { lua_rawgeti(L, StackIndex, 4); Alpha = static_cast(lua_tonumber(L, -1)); if (!lua_isnumber(L, -1) || Alpha >= 256) luaL_argcheck(L, 0, StackIndex, "alpha color component must be an integer between 0 and 255"); @@ -216,16 +204,14 @@ unsigned int BS_GraphicEngine::LuaColorToARGBColor(lua_State * L, int StackIndex // ----------------------------------------------------------------------------- -bool BS_GraphicEngine::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_GraphicEngine::Persist(BS_OutputPersistenceBlock &Writer) { Writer.Write(m_TimerActive); return true; } // ----------------------------------------------------------------------------- -bool BS_GraphicEngine::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_GraphicEngine::Unpersist(BS_InputPersistenceBlock &Reader) { Reader.Read(m_TimerActive); return Reader.IsGood(); } diff --git a/engines/sword25/gfx/graphicengine.h b/engines/sword25/gfx/graphicengine.h index 3ebe591923..82559e1a48 100644 --- a/engines/sword25/gfx/graphicengine.h +++ b/engines/sword25/gfx/graphicengine.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -65,15 +65,15 @@ class BS_Screenshot; typedef unsigned int BS_COLOR; // Makros -#define BS_RGB(R,G,B) (0xFF000000 | ((R) << 16) | ((G) << 8) | (B)) -#define BS_ARGB(A,R,G,B) (((A) << 24) | ((R) << 16) | ((G) << 8) | (B)) +#define BS_RGB(R,G,B) (0xFF000000 | ((R) << 16) | ((G) << 8) | (B)) +#define BS_ARGB(A,R,G,B) (((A) << 24) | ((R) << 16) | ((G) << 8) | (B)) /** - @brief Dies ist das Graphik-Engine Interface, dass alle Methoden und Klassen enthält, die eine Graphik-Engine implementieren muss. + @brief Dies ist das Graphik-Engine Interface, dass alle Methoden und Klassen enthält, die eine Graphik-Engine implementieren muss. - Hier sind nur wenige Rumpffunktionen realisiert, wie z.B. das Abfragen der Parameter des Ausgabepuffers. - Die Hauptfunktionen muss eine Implementation dieses Inferfaces stellen.
- Die bisher einzige Implementation ist BS_DDrawGfx. + Hier sind nur wenige Rumpffunktionen realisiert, wie z.B. das Abfragen der Parameter des Ausgabepuffers. + Die Hauptfunktionen muss eine Implementation dieses Inferfaces stellen.
+ Die bisher einzige Implementation ist BS_DDrawGfx. */ class BS_GraphicEngine : public BS_ResourceService, public BS_Persistable { @@ -82,7 +82,7 @@ public: // ----- // Colour formats - // + // /** * The colour format used by the engine */ @@ -124,33 +124,33 @@ public: */ CF_ARGB32, /** - 32-bit colour format (A8B8G8R8) (little endian) + 32-bit colour format (A8B8G8R8) (little endian) */ CF_ABGR32 }; - + // Interface // --------- /** * Initialises the graphics engine and sets the screen mode. Returns true if initialisation failed. * Notes: This method should be called immediately after the initialisation of all services. - * - * @param Height The height of the output buffer in pixels. The default value is 600 - * @param BitDepth The bit depth of the desired output buffer in bits. The default value is 16 - * @param BackbufferCount The number of back buffers to be created. The default value is 2 - * @param Windowed Indicates whether the engine is to run in windowed mode. + * + * @param Height The height of the output buffer in pixels. The default value is 600 + * @param BitDepth The bit depth of the desired output buffer in bits. The default value is 16 + * @param BackbufferCount The number of back buffers to be created. The default value is 2 + * @param Windowed Indicates whether the engine is to run in windowed mode. */ - virtual bool Init(int Width = 800, int Height = 600, int BitDepth = 16, int BackbufferCount = 2, bool Windowed = false) = 0; + virtual bool Init(int Width = 800, int Height = 600, int BitDepth = 16, int BackbufferCount = 2, bool Windowed = false) = 0; /** * Begins rendering a new frame. * Notes: This method must be called at the beginning of the main loop, before any rendering methods are used. * Notes: Implementations of this method must call _UpdateLastFrameDuration() - * @param UpdateAll Specifies whether the renderer should redraw everything on the next frame. + * @param UpdateAll Specifies whether the renderer should redraw everything on the next frame. * This feature can be useful if the renderer with Dirty Rectangles works, but sometimes the client may */ - virtual bool StartFrame(bool UpdateAll = false) = 0; + virtual bool StartFrame(bool UpdateAll = false) = 0; /** * Ends the rendering of a frame and draws it on the screen. @@ -158,7 +158,7 @@ public: * This method must be at the end of the main loop. After this call, no further Render method may be called. * This should only be called once for a given previous call to #StartFrame. */ - virtual bool EndFrame() = 0; + virtual bool EndFrame() = 0; // Debug methods @@ -168,17 +168,17 @@ public: * This method must be called between calls to StartFrame() and EndFrame(), and is intended only for debugging * purposes. The line will only appear for a single frame. If the line is to be shown permanently, it must be * called for every frame. - * @param Start The starting point of the line - * @param End The ending point of the line - * @param Color The colour of the line. The default is BS_RGB (255,255,255) (White) + * @param Start The starting point of the line + * @param End The ending point of the line + * @param Color The colour of the line. The default is BS_RGB (255,255,255) (White) */ - virtual void DrawDebugLine(const BS_Vertex &Start, const BS_Vertex &End, unsigned int Color = BS_RGB(255, 255, 255)) = 0; + virtual void DrawDebugLine(const BS_Vertex &Start, const BS_Vertex &End, unsigned int Color = BS_RGB(255, 255, 255)) = 0; /** * Creates a screenshot of the current frame buffer and writes it to a graphic file in PNG format. - * Returns true if the screenshot was saved successfully. + * Returns true if the screenshot was saved successfully. * Notes: This method should only be called after a call to EndFrame(), and before the next call to StartFrame(). - * @param Filename The filename for the screenshot + * @param Filename The filename for the screenshot */ bool SaveScreenshot(const Common::String &Filename); @@ -187,7 +187,7 @@ public: * the interface boards the the image as a 16th of it's original size. * Notes: This method should only be called after a call to EndFrame(), and before the next call to StartFrame(). * The frame buffer must have a resolution of 800x600. - * @param Filename The filename for the screenshot + * @param Filename The filename for the screenshot */ bool SaveThumbnailScreenshot(const Common::String &Filename); @@ -195,91 +195,117 @@ public: * Reads the current contents of the frame buffer * Notes: This method is for creating screenshots. It is not very optimised. It should only be called * after a call to EndFrame(), and before the next call to StartFrame(). - * @param Width Returns the width of the frame buffer - * @param Height Returns the height of the frame buffer - * @param Data Returns the raw data of the frame buffer as an array of 32-bit colour values. + * @param Width Returns the width of the frame buffer + * @param Height Returns the height of the frame buffer + * @param Data Returns the raw data of the frame buffer as an array of 32-bit colour values. */ virtual bool GetScreenshot(unsigned int &Width, unsigned int &Height, Common::Array &Data) = 0; - + virtual BS_RenderObjectPtr GetMainPanel() = 0; /** * Specifies the time (in microseconds) since the last frame has passed */ - int GetLastFrameDurationMicro() { if (m_TimerActive) return m_LastFrameDuration; else return 0; } + int GetLastFrameDurationMicro() { + if (m_TimerActive) return m_LastFrameDuration; + else return 0; + } /** * Specifies the time (in microseconds) the previous frame took */ - float GetLastFrameDuration() { if (m_TimerActive) return static_cast(m_LastFrameDuration) / 1000000.0f; else return 0; } + float GetLastFrameDuration() { + if (m_TimerActive) return static_cast(m_LastFrameDuration) / 1000000.0f; + else return 0; + } - void StopMainTimer() { m_TimerActive = false; } - void ResumeMainTimer() { m_TimerActive = true; } - float GetSecondaryFrameDuration() { return static_cast(m_LastFrameDuration) / 1000000.0f; } + void StopMainTimer() { + m_TimerActive = false; + } + void ResumeMainTimer() { + m_TimerActive = true; + } + float GetSecondaryFrameDuration() { + return static_cast(m_LastFrameDuration) / 1000000.0f; + } // Accessor methods /** * Returns the width of the output buffer in pixels */ - int GetDisplayWidth() { return m_Width; } + int GetDisplayWidth() { + return m_Width; + } /** * Returns the height of the output buffer in pixels */ - int GetDisplayHeight() { return m_Height; } + int GetDisplayHeight() { + return m_Height; + } /** * Returns the bounding box of the output buffer: (0, 0, Width, Height) */ - BS_Rect& GetDisplayRect() { return m_ScreenRect; } + BS_Rect &GetDisplayRect() { + return m_ScreenRect; + } /** * Returns the bit depth of the output buffer */ - int GetBitDepth() { return m_BitDepth; } + int GetBitDepth() { + return m_BitDepth; + } /** * Determines whether the frame buffer change is to be synchronised with Vsync. This is turned on by default. * Notes: In windowed mode, this setting has no effect. - * @param Vsync Indicates whether the frame buffer changes are to be synchronised with Vsync. + * @param Vsync Indicates whether the frame buffer changes are to be synchronised with Vsync. */ - virtual void SetVsync(bool Vsync) = 0; + virtual void SetVsync(bool Vsync) = 0; /** * Returns true if V-Sync is on. * Notes: In windowed mode, this setting has no effect. */ - virtual bool GetVsync() const = 0; + virtual bool GetVsync() const = 0; /** * Returns true if the engine is running in Windowed mode. */ - bool IsWindowed() { return m_Windowed; } + bool IsWindowed() { + return m_Windowed; + } /** * Fills a rectangular area of the frame buffer with a colour. * Notes: It is possible to create transparent rectangles by passing a colour with an Alpha value of 255. - * @param FillRectPtr Pointer to a BS_Rect, which specifies the section of the frame buffer to be filled. - * If the rectangle falls partly off-screen, then it is automatically trimmed. + * @param FillRectPtr Pointer to a BS_Rect, which specifies the section of the frame buffer to be filled. + * If the rectangle falls partly off-screen, then it is automatically trimmed. * If a NULL value is passed, then the entire image is to be filled. - * @param Color The 32-bit colour with which the area is to be filled. The default is BS_RGB(0, 0, 0) (black) - @remark Falls das Rechteck nicht völlig innerhalb des Bildschirms ist, wird es automatisch zurechtgestutzt. + * @param Color The 32-bit colour with which the area is to be filled. The default is BS_RGB(0, 0, 0) (black) + @remark Falls das Rechteck nicht völlig innerhalb des Bildschirms ist, wird es automatisch zurechtgestutzt. */ - virtual bool Fill(const BS_Rect * FillRectPtr = 0, unsigned int Color = BS_RGB(0, 0, 0)) = 0; + virtual bool Fill(const BS_Rect *FillRectPtr = 0, unsigned int Color = BS_RGB(0, 0, 0)) = 0; // Debugging Methods - int GetFPSCount() const { return m_FPSCounter.GetFPS(); } - int GetRepaintedPixels() const { return m_RepaintedPixels; } + int GetFPSCount() const { + return m_FPSCounter.GetFPS(); + } + int GetRepaintedPixels() const { + return m_RepaintedPixels; + } // Access methods /** * Returns the size of a pixel entry in bytes for a particular colour format - * @param ColorFormat The desired colour format. The parameter must be of type COLOR_FORMATS - * @return Returns the size of a pixel in bytes. If the colour format is unknown, -1 is returned. + * @param ColorFormat The desired colour format. The parameter must be of type COLOR_FORMATS + * @return Returns the size of a pixel in bytes. If the colour format is unknown, -1 is returned. */ static int GetPixelSize(BS_GraphicEngine::COLOR_FORMATS ColorFormat) { switch (ColorFormat) { @@ -297,16 +323,16 @@ public: return -1; } - + /** * Calculates the length of an image line in bytes, depending on a given colour format. - * @param ColorFormat The colour format - * @param Width The width of the line in pixels - * @return Reflects the length of the line in bytes. If the colour format is + * @param ColorFormat The colour format + * @param Width The width of the line in pixels + * @return Reflects the length of the line in bytes. If the colour format is * unknown, -1 is returned */ static int CalcPitch(BS_GraphicEngine::COLOR_FORMATS ColorFormat, int Width) { - switch (ColorFormat){ + switch (ColorFormat) { case BS_GraphicEngine::CF_RGB16: case BS_GraphicEngine::CF_RGB15: return Width * 2; @@ -337,21 +363,21 @@ public: protected: // Constructor // ----------- - BS_GraphicEngine(BS_Kernel* pKernel); + BS_GraphicEngine(BS_Kernel *pKernel); // Display Variables // ----------------- - int m_Width; - int m_Height; + int m_Width; + int m_Height; BS_Rect m_ScreenRect; - int m_BitDepth; - bool m_Windowed; + int m_BitDepth; + bool m_Windowed; // Debugging Variables // ------------------- BS_Framecounter m_FPSCounter; - unsigned int m_RepaintedPixels; + unsigned int m_RepaintedPixels; /** * Calculates the time since the last frame beginning has passed. @@ -363,11 +389,11 @@ private: // LastFrameDuration Variables // --------------------------- - uint64 m_LastTimeStamp; - unsigned int m_LastFrameDuration; - bool m_TimerActive; - Common::Array m_FrameTimeSamples; - unsigned int m_FrameTimeSampleSlot; + uint64 m_LastTimeStamp; + unsigned int m_LastFrameDuration; + bool m_TimerActive; + Common::Array m_FrameTimeSamples; + unsigned int m_FrameTimeSampleSlot; }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/graphicengine_script.cpp b/engines/sword25/gfx/graphicengine_script.cpp index 74a008d1fc..d009916f32 100644 --- a/engines/sword25/gfx/graphicengine_script.cpp +++ b/engines/sword25/gfx/graphicengine_script.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -68,40 +68,35 @@ static bool AnimationDeleteCallback(unsigned int Data); static bool AnimationActionCallback(unsigned int Data); static bool AnimationLoopPointCallback(unsigned int Data); -namespace -{ - // ------------------------------------------------------------------------- +namespace { +// ------------------------------------------------------------------------- - class ActionCallback : public BS_LuaCallback - { - public: - ActionCallback(lua_State * L) : BS_LuaCallback(L) {}; +class ActionCallback : public BS_LuaCallback { +public: + ActionCallback(lua_State *L) : BS_LuaCallback(L) {}; - Common::String Action; + Common::String Action; - protected: - virtual int PreFunctionInvokation(lua_State * L) - { - lua_pushstring(L, Action.c_str()); - return 1; - } - }; +protected: + virtual int PreFunctionInvokation(lua_State *L) { + lua_pushstring(L, Action.c_str()); + return 1; + } +}; - std::auto_ptr LoopPointCallbackPtr; - std::auto_ptr ActionCallbackPtr; +std::auto_ptr LoopPointCallbackPtr; +std::auto_ptr ActionCallbackPtr; - // ------------------------------------------------------------------------- +// ------------------------------------------------------------------------- - struct CallbackfunctionRegisterer - { - CallbackfunctionRegisterer() - { - BS_CallbackRegistry::GetInstance().RegisterCallbackFunction("LuaLoopPointCB", (void (*)(int))AnimationLoopPointCallback); - BS_CallbackRegistry::GetInstance().RegisterCallbackFunction("LuaActionCB", (void (*)(int))AnimationActionCallback); - BS_CallbackRegistry::GetInstance().RegisterCallbackFunction("LuaDeleteCB", (void (*)(int))AnimationDeleteCallback); - } - }; - static CallbackfunctionRegisterer Instance; +struct CallbackfunctionRegisterer { + CallbackfunctionRegisterer() { + BS_CallbackRegistry::GetInstance().RegisterCallbackFunction("LuaLoopPointCB", (void ( *)(int))AnimationLoopPointCallback); + BS_CallbackRegistry::GetInstance().RegisterCallbackFunction("LuaActionCB", (void ( *)(int))AnimationActionCallback); + BS_CallbackRegistry::GetInstance().RegisterCallbackFunction("LuaDeleteCB", (void ( *)(int))AnimationDeleteCallback); + } +}; +static CallbackfunctionRegisterer Instance; } // ----------------------------------------------------------------------------- @@ -115,24 +110,20 @@ namespace #define TEXT_CLASS_NAME "Gfx.Text" #define ANIMATION_CLASS_NAME "Gfx.Animation" #define ANIMATION_TEMPLATE_CLASS_NAME "Gfx.AnimationTemplate" -static const char * GFX_LIBRARY_NAME = "Gfx"; +static const char *GFX_LIBRARY_NAME = "Gfx"; // ----------------------------------------------------------------------------- // Wie luaL_checkudata, nur ohne dass kein Fehler erzeugt wird. -static void * my_checkudata (lua_State *L, int ud, const char *tname) -{ +static void *my_checkudata(lua_State *L, int ud, const char *tname) { int top = lua_gettop(L); - void * p = lua_touserdata(L, ud); - if (p != NULL) /* value is a userdata? */ - { - if (lua_getmetatable(L, ud)) /* does it have a metatable? */ - { + void *p = lua_touserdata(L, ud); + if (p != NULL) { /* value is a userdata? */ + if (lua_getmetatable(L, ud)) { /* does it have a metatable? */ // lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get correct metatable */ BS_LuaBindhelper::GetMetatable(L, tname); - if (lua_rawequal(L, -1, -2)) /* does it have the correct mt? */ - { + if (lua_rawequal(L, -1, -2)) { /* does it have the correct mt? */ lua_settop(L, top); return p; } @@ -145,27 +136,22 @@ static void * my_checkudata (lua_State *L, int ud, const char *tname) // ----------------------------------------------------------------------------- -static void NewUintUserData(lua_State * L, unsigned int Value) -{ - void * UserData = lua_newuserdata(L, sizeof(Value)); +static void NewUintUserData(lua_State *L, unsigned int Value) { + void *UserData = lua_newuserdata(L, sizeof(Value)); memcpy(UserData, &Value, sizeof(Value)); } // ----------------------------------------------------------------------------- -static BS_AnimationTemplate * CheckAnimationTemplate(lua_State * L, int idx = 1) -{ +static BS_AnimationTemplate *CheckAnimationTemplate(lua_State *L, int idx = 1) { // Der erste Parameter muss vom Typ userdata sein und die Metatable der Klasse Gfx.AnimationTemplate unsigned int AnimationTemplateHandle; - if ((AnimationTemplateHandle = *reinterpret_cast(my_checkudata(L, idx, ANIMATION_TEMPLATE_CLASS_NAME))) != 0) - { - BS_AnimationTemplate * AnimationTemplatePtr = BS_AnimationTemplateRegistry::GetInstance().ResolveHandle(AnimationTemplateHandle); + if ((AnimationTemplateHandle = *reinterpret_cast(my_checkudata(L, idx, ANIMATION_TEMPLATE_CLASS_NAME))) != 0) { + BS_AnimationTemplate *AnimationTemplatePtr = BS_AnimationTemplateRegistry::GetInstance().ResolveHandle(AnimationTemplateHandle); if (!AnimationTemplatePtr) luaL_error(L, "The animation template with the handle %d does no longer exist.", AnimationTemplateHandle); return AnimationTemplatePtr; - } - else - { + } else { luaL_argcheck(L, 0, idx, "'" ANIMATION_TEMPLATE_CLASS_NAME "' expected"); return 0; } @@ -174,20 +160,16 @@ static BS_AnimationTemplate * CheckAnimationTemplate(lua_State * L, int idx = 1) // ----------------------------------------------------------------------------- -static int NewAnimationTemplate(lua_State * L) -{ +static int NewAnimationTemplate(lua_State *L) { unsigned int AnimationTemplateHandle = BS_AnimationTemplate::Create(luaL_checkstring(L, 1)); - BS_AnimationTemplate * AnimationTemplatePtr = BS_AnimationTemplateRegistry::GetInstance().ResolveHandle(AnimationTemplateHandle); - if (AnimationTemplatePtr && AnimationTemplatePtr->IsValid()) - { + BS_AnimationTemplate *AnimationTemplatePtr = BS_AnimationTemplateRegistry::GetInstance().ResolveHandle(AnimationTemplateHandle); + if (AnimationTemplatePtr && AnimationTemplatePtr->IsValid()) { NewUintUserData(L, AnimationTemplateHandle); //luaL_getmetatable(L, ANIMATION_TEMPLATE_CLASS_NAME); BS_LuaBindhelper::GetMetatable(L, ANIMATION_TEMPLATE_CLASS_NAME); BS_ASSERT(!lua_isnil(L, -1)); lua_setmetatable(L, -2); - } - else - { + } else { lua_pushnil(L); } @@ -196,85 +178,69 @@ static int NewAnimationTemplate(lua_State * L) // ----------------------------------------------------------------------------- -static int AT_AddFrame(lua_State * L) -{ - BS_AnimationTemplate * pAT = CheckAnimationTemplate(L); +static int AT_AddFrame(lua_State *L) { + BS_AnimationTemplate *pAT = CheckAnimationTemplate(L); pAT->AddFrame(static_cast(luaL_checknumber(L, 2))); return 0; } // ----------------------------------------------------------------------------- -static int AT_SetFrame(lua_State * L) -{ - BS_AnimationTemplate * pAT = CheckAnimationTemplate(L); +static int AT_SetFrame(lua_State *L) { + BS_AnimationTemplate *pAT = CheckAnimationTemplate(L); pAT->SetFrame(static_cast(luaL_checknumber(L, 2)), static_cast(luaL_checknumber(L, 3))); return 0; } // ----------------------------------------------------------------------------- -static bool AnimationTypeStringToNumber(const char * TypeString, BS_Animation::ANIMATION_TYPES & Result) -{ - if (strcmp(TypeString, "jojo") == 0) - { +static bool AnimationTypeStringToNumber(const char *TypeString, BS_Animation::ANIMATION_TYPES &Result) { + if (strcmp(TypeString, "jojo") == 0) { Result = BS_Animation::AT_JOJO; return true; - } - else if (strcmp(TypeString, "loop") == 0) - { + } else if (strcmp(TypeString, "loop") == 0) { Result = BS_Animation::AT_LOOP; return true; - } - else if (strcmp(TypeString, "oneshot") == 0) - { + } else if (strcmp(TypeString, "oneshot") == 0) { Result = BS_Animation::AT_ONESHOT; return true; - } - else + } else return false; } // ----------------------------------------------------------------------------- -static int AT_SetAnimationType(lua_State * L) -{ - BS_AnimationTemplate * pAT = CheckAnimationTemplate(L); +static int AT_SetAnimationType(lua_State *L) { + BS_AnimationTemplate *pAT = CheckAnimationTemplate(L); BS_Animation::ANIMATION_TYPES AnimationType; - if (AnimationTypeStringToNumber(luaL_checkstring(L, 2), AnimationType)) - { + if (AnimationTypeStringToNumber(luaL_checkstring(L, 2), AnimationType)) { pAT->SetAnimationType(AnimationType); - } - else - { + } else { luaL_argcheck(L, 0, 2, "Invalid animation type"); } - + return 0; } // ----------------------------------------------------------------------------- -static int AT_SetFPS(lua_State * L) -{ - BS_AnimationTemplate * pAT = CheckAnimationTemplate(L); +static int AT_SetFPS(lua_State *L) { + BS_AnimationTemplate *pAT = CheckAnimationTemplate(L); pAT->SetFPS(static_cast(luaL_checknumber(L, 2))); return 0; } // ----------------------------------------------------------------------------- -static int AT_Finalize(lua_State * L) -{ - BS_AnimationTemplate * pAT = CheckAnimationTemplate(L); +static int AT_Finalize(lua_State *L) { + BS_AnimationTemplate *pAT = CheckAnimationTemplate(L); delete pAT; return 0; } // ----------------------------------------------------------------------------- -static const luaL_reg ANIMATION_TEMPLATE_METHODS[] = -{ +static const luaL_reg ANIMATION_TEMPLATE_METHODS[] = { {"AddFrame", AT_AddFrame}, {"SetFrame", AT_SetFrame}, {"SetAnimationType", AT_SetAnimationType}, @@ -285,47 +251,44 @@ static const luaL_reg ANIMATION_TEMPLATE_METHODS[] = // ----------------------------------------------------------------------------- -static BS_GraphicEngine * GetGE() -{ - BS_Kernel * pKernel = BS_Kernel::GetInstance(); +static BS_GraphicEngine *GetGE() { + BS_Kernel *pKernel = BS_Kernel::GetInstance(); BS_ASSERT(pKernel); - BS_GraphicEngine * pGE = static_cast(pKernel->GetService("gfx")); + BS_GraphicEngine *pGE = static_cast(pKernel->GetService("gfx")); BS_ASSERT(pGE); return pGE; } // ----------------------------------------------------------------------------- -static int Init(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); - - switch (lua_gettop(L)) - { - case 0: - lua_pushbooleancpp(L, pGE->Init()); - break; - case 1: - lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L, 1)))); - break; - case 2: - lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L,1)), static_cast(luaL_checknumber(L, 2)))); - break; - case 3: - lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L,1)), static_cast(luaL_checknumber(L, 2)), - static_cast(luaL_checknumber(L, 3)))); - break; - case 4: - lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L,1)), static_cast(luaL_checknumber(L, 2)), - static_cast(luaL_checknumber(L, 3)), static_cast(luaL_checknumber(L, 4)))); - break; - default: - lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L,1)), static_cast(luaL_checknumber(L, 2)), - static_cast(luaL_checknumber(L, 3)), static_cast(luaL_checknumber(L, 4)), - lua_tobooleancpp(L, 5))); +static int Init(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); + + switch (lua_gettop(L)) { + case 0: + lua_pushbooleancpp(L, pGE->Init()); + break; + case 1: + lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L, 1)))); + break; + case 2: + lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L, 1)), static_cast(luaL_checknumber(L, 2)))); + break; + case 3: + lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L, 1)), static_cast(luaL_checknumber(L, 2)), + static_cast(luaL_checknumber(L, 3)))); + break; + case 4: + lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L, 1)), static_cast(luaL_checknumber(L, 2)), + static_cast(luaL_checknumber(L, 3)), static_cast(luaL_checknumber(L, 4)))); + break; + default: + lua_pushbooleancpp(L, pGE->Init(static_cast(luaL_checknumber(L, 1)), static_cast(luaL_checknumber(L, 2)), + static_cast(luaL_checknumber(L, 3)), static_cast(luaL_checknumber(L, 4)), + lua_tobooleancpp(L, 5))); } - + #ifdef DEBUG int __startStackDepth = lua_gettop(L); #endif @@ -345,7 +308,7 @@ static int Init(lua_State * L) BS_ASSERT(!lua_isnil(L, -1)); lua_setmetatable(L, -2); - lua_pushstring(L, "MainPanel"); + lua_pushstring(L, "MainPanel"); lua_insert(L, -2); lua_settable(L, -3); @@ -360,9 +323,8 @@ static int Init(lua_State * L) // ----------------------------------------------------------------------------- -static int StartFrame(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int StartFrame(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); if (lua_gettop(L) == 0) lua_pushbooleancpp(L, pGE->StartFrame()); @@ -374,9 +336,8 @@ static int StartFrame(lua_State * L) // ----------------------------------------------------------------------------- -static int EndFrame(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int EndFrame(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushbooleancpp(L, pGE->EndFrame()); @@ -385,9 +346,8 @@ static int EndFrame(lua_State * L) // ----------------------------------------------------------------------------- -static int DrawDebugLine(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int DrawDebugLine(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); BS_Vertex Start; BS_Vertex End; @@ -400,9 +360,8 @@ static int DrawDebugLine(lua_State * L) // ----------------------------------------------------------------------------- -static int GetDisplayWidth(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int GetDisplayWidth(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushnumber(L, pGE->GetDisplayWidth()); @@ -411,9 +370,8 @@ static int GetDisplayWidth(lua_State * L) // ----------------------------------------------------------------------------- -static int GetDisplayHeight(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int GetDisplayHeight(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushnumber(L, pGE->GetDisplayHeight()); @@ -422,9 +380,8 @@ static int GetDisplayHeight(lua_State * L) // ----------------------------------------------------------------------------- -static int GetBitDepth(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int GetBitDepth(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushnumber(L, pGE->GetBitDepth()); @@ -433,9 +390,8 @@ static int GetBitDepth(lua_State * L) // ----------------------------------------------------------------------------- -static int SetVsync(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int SetVsync(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); pGE->SetVsync(lua_tobooleancpp(L, 1)); @@ -444,9 +400,8 @@ static int SetVsync(lua_State * L) // ----------------------------------------------------------------------------- -static int IsVsync(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int IsVsync(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushbooleancpp(L, pGE->GetVsync()); @@ -455,9 +410,8 @@ static int IsVsync(lua_State * L) // ----------------------------------------------------------------------------- -static int IsWindowed(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int IsWindowed(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushbooleancpp(L, pGE->IsWindowed()); @@ -466,9 +420,8 @@ static int IsWindowed(lua_State * L) // ----------------------------------------------------------------------------- -static int GetFPSCount(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int GetFPSCount(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushnumber(L, pGE->GetFPSCount()); @@ -477,9 +430,8 @@ static int GetFPSCount(lua_State * L) // ----------------------------------------------------------------------------- -static int GetLastFrameDuration(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int GetLastFrameDuration(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushnumber(L, pGE->GetLastFrameDuration()); @@ -488,27 +440,24 @@ static int GetLastFrameDuration(lua_State * L) // ----------------------------------------------------------------------------- -static int StopMainTimer(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int StopMainTimer(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); pGE->StopMainTimer(); return 0; } // ----------------------------------------------------------------------------- -static int ResumeMainTimer(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int ResumeMainTimer(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); pGE->ResumeMainTimer(); return 0; } // ----------------------------------------------------------------------------- -static int GetSecondaryFrameDuration(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int GetSecondaryFrameDuration(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushnumber(L, pGE->GetSecondaryFrameDuration()); @@ -517,35 +466,31 @@ static int GetSecondaryFrameDuration(lua_State * L) // ----------------------------------------------------------------------------- -static int SaveScreenshot(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int SaveScreenshot(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushbooleancpp(L, pGE->SaveScreenshot(luaL_checkstring(L, 1))); return 1; } // ----------------------------------------------------------------------------- -static int SaveThumbnailScreenshot(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int SaveThumbnailScreenshot(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushbooleancpp(L, pGE->SaveThumbnailScreenshot(luaL_checkstring(L, 1))); return 1; } // ----------------------------------------------------------------------------- -static int GetRepaintedPixels(lua_State * L) -{ - BS_GraphicEngine * pGE = GetGE(); +static int GetRepaintedPixels(lua_State *L) { + BS_GraphicEngine *pGE = GetGE(); lua_pushnumber(L, static_cast(pGE->GetRepaintedPixels())); return 1; } // ----------------------------------------------------------------------------- -static const luaL_reg GFX_FUNCTIONS[] = -{ +static const luaL_reg GFX_FUNCTIONS[] = { {"Init", Init}, {"StartFrame", StartFrame}, {"EndFrame", EndFrame}, @@ -570,26 +515,21 @@ static const luaL_reg GFX_FUNCTIONS[] = // ----------------------------------------------------------------------------- -static BS_RenderObjectPtr CheckRenderObject(lua_State * L, bool ErrorIfRemoved = true) -{ +static BS_RenderObjectPtr CheckRenderObject(lua_State *L, bool ErrorIfRemoved = true) { // Der erste Parameter muss vom Typ userdata sein und die Metatable einer Klasse haben, die von Gfx.RenderObject "erbt". - unsigned int * UserDataPtr; + unsigned int *UserDataPtr; if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, BITMAP_CLASS_NAME)) != 0 || - (UserDataPtr = (unsigned int *) my_checkudata(L, 1, ANIMATION_CLASS_NAME)) != 0 || - (UserDataPtr = (unsigned int *) my_checkudata(L, 1, PANEL_CLASS_NAME)) != 0 || - (UserDataPtr = (unsigned int *) my_checkudata(L, 1, TEXT_CLASS_NAME)) != 0) - { + (UserDataPtr = (unsigned int *) my_checkudata(L, 1, ANIMATION_CLASS_NAME)) != 0 || + (UserDataPtr = (unsigned int *) my_checkudata(L, 1, PANEL_CLASS_NAME)) != 0 || + (UserDataPtr = (unsigned int *) my_checkudata(L, 1, TEXT_CLASS_NAME)) != 0) { BS_RenderObjectPtr ROPtr(* UserDataPtr); if (ROPtr.IsValid()) return ROPtr; - else - { + else { if (ErrorIfRemoved) luaL_error(L, "The renderobject with the handle %d does no longer exist.", * UserDataPtr); } - } - else - { + } else { luaL_argcheck(L, 0, 1, "'" RENDEROBJECT_CLASS_NAME "' expected"); } @@ -598,8 +538,7 @@ static BS_RenderObjectPtr CheckRenderObject(lua_State * L, bool // ----------------------------------------------------------------------------- -static int RO_SetPos(lua_State * L) -{ +static int RO_SetPos(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); BS_Vertex Pos; @@ -610,8 +549,7 @@ static int RO_SetPos(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_SetX(lua_State * L) -{ +static int RO_SetX(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); ROPtr->SetX(static_cast(luaL_checknumber(L, 2))); @@ -620,8 +558,7 @@ static int RO_SetX(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_SetY(lua_State * L) -{ +static int RO_SetY(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); ROPtr->SetY(static_cast(luaL_checknumber(L, 2))); @@ -630,8 +567,7 @@ static int RO_SetY(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_SetZ(lua_State * L) -{ +static int RO_SetZ(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); ROPtr->SetZ(static_cast(luaL_checknumber(L, 2))); @@ -640,8 +576,7 @@ static int RO_SetZ(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_SetVisible(lua_State * L) -{ +static int RO_SetVisible(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); ROPtr->SetVisible(lua_tobooleancpp(L, 2)); @@ -650,8 +585,7 @@ static int RO_SetVisible(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_GetX(lua_State * L) -{ +static int RO_GetX(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); lua_pushnumber(L, ROPtr->GetX()); @@ -661,8 +595,7 @@ static int RO_GetX(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_GetY(lua_State * L) -{ +static int RO_GetY(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); lua_pushnumber(L, ROPtr->GetY()); @@ -672,8 +605,7 @@ static int RO_GetY(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_GetZ(lua_State * L) -{ +static int RO_GetZ(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); lua_pushnumber(L, ROPtr->GetZ()); @@ -683,8 +615,7 @@ static int RO_GetZ(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_GetAbsoluteX(lua_State * L) -{ +static int RO_GetAbsoluteX(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); lua_pushnumber(L, ROPtr->GetAbsoluteX()); @@ -694,66 +625,59 @@ static int RO_GetAbsoluteX(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_GetAbsoluteY(lua_State * L) -{ +static int RO_GetAbsoluteY(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); lua_pushnumber(L, ROPtr->GetAbsoluteY()); - + return 1; } // ----------------------------------------------------------------------------- -static int RO_GetWidth(lua_State * L) -{ +static int RO_GetWidth(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); lua_pushnumber(L, ROPtr->GetWidth()); - + return 1; } // ----------------------------------------------------------------------------- -static int RO_GetHeight(lua_State * L) -{ +static int RO_GetHeight(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); lua_pushnumber(L, ROPtr->GetHeight()); - + return 1; } // ----------------------------------------------------------------------------- -static int RO_IsVisible(lua_State * L) -{ +static int RO_IsVisible(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); lua_pushbooleancpp(L, ROPtr->IsVisible()); - + return 1; } // ----------------------------------------------------------------------------- -static int RO_AddPanel(lua_State * L) -{ +static int RO_AddPanel(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); BS_RenderObjectPtr PanelPtr = ROPtr->AddPanel(static_cast(luaL_checknumber(L, 2)), - static_cast(luaL_checknumber(L, 3)), - BS_GraphicEngine::LuaColorToARGBColor(L, 4)); - if (PanelPtr.IsValid()) - { + static_cast(luaL_checknumber(L, 3)), + BS_GraphicEngine::LuaColorToARGBColor(L, 4)); + if (PanelPtr.IsValid()) { NewUintUserData(L, PanelPtr->GetHandle()); // luaL_getmetatable(L, PANEL_CLASS_NAME); BS_LuaBindhelper::GetMetatable(L, PANEL_CLASS_NAME); BS_ASSERT(!lua_isnil(L, -1)); lua_setmetatable(L, -2); - } - else + } else lua_pushnil(L); return 1; @@ -761,20 +685,17 @@ static int RO_AddPanel(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_AddBitmap(lua_State * L) -{ +static int RO_AddBitmap(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); BS_RenderObjectPtr BitmaPtr = ROPtr->AddBitmap(luaL_checkstring(L, 2)); - if (BitmaPtr.IsValid()) - { + if (BitmaPtr.IsValid()) { NewUintUserData(L, BitmaPtr->GetHandle()); // luaL_getmetatable(L, BITMAP_CLASS_NAME); BS_LuaBindhelper::GetMetatable(L, BITMAP_CLASS_NAME); BS_ASSERT(!lua_isnil(L, -1)); lua_setmetatable(L, -2); - } - else + } else lua_pushnil(L); return 1; @@ -782,8 +703,7 @@ static int RO_AddBitmap(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_AddText(lua_State * L) -{ +static int RO_AddText(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); @@ -791,15 +711,13 @@ static int RO_AddText(lua_State * L) if (lua_gettop(L) >= 3) TextPtr = ROPtr->AddText(luaL_checkstring(L, 2), luaL_checkstring(L, 3)); else TextPtr = ROPtr->AddText(luaL_checkstring(L, 2)); - if (TextPtr.IsValid()) - { + if (TextPtr.IsValid()) { NewUintUserData(L, TextPtr->GetHandle()); // luaL_getmetatable(L, TEXT_CLASS_NAME); BS_LuaBindhelper::GetMetatable(L, TEXT_CLASS_NAME); BS_ASSERT(!lua_isnil(L, -1)); lua_setmetatable(L, -2); - } - else + } else lua_pushnil(L); return 1; @@ -807,8 +725,7 @@ static int RO_AddText(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_AddAnimation(lua_State * L) -{ +static int RO_AddAnimation(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); @@ -818,8 +735,7 @@ static int RO_AddAnimation(lua_State * L) else AnimationPtr = ROPtr->AddAnimation(luaL_checkstring(L, 2)); - if (AnimationPtr.IsValid()) - { + if (AnimationPtr.IsValid()) { NewUintUserData(L, AnimationPtr->GetHandle()); // luaL_getmetatable(L, ANIMATION_CLASS_NAME); BS_LuaBindhelper::GetMetatable(L, ANIMATION_CLASS_NAME); @@ -830,8 +746,7 @@ static int RO_AddAnimation(lua_State * L) AnimationPtr->RegisterDeleteCallback(AnimationDeleteCallback, AnimationPtr->GetHandle()); AnimationPtr->RegisterLoopPointCallback(AnimationLoopPointCallback, AnimationPtr->GetHandle()); AnimationPtr->RegisterActionCallback(AnimationActionCallback, AnimationPtr->GetHandle()); - } - else + } else lua_pushnil(L); return 1; @@ -839,8 +754,7 @@ static int RO_AddAnimation(lua_State * L) // ----------------------------------------------------------------------------- -static int RO_Remove(lua_State * L) -{ +static int RO_Remove(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); ROPtr.Erase(); return 0; @@ -848,8 +762,7 @@ static int RO_Remove(lua_State * L) // ----------------------------------------------------------------------------- -static const luaL_reg RENDEROBJECT_METHODS[] = -{ +static const luaL_reg RENDEROBJECT_METHODS[] = { {"AddAnimation", RO_AddAnimation}, {"AddText", RO_AddText}, {"AddBitmap", RO_AddBitmap}, @@ -872,22 +785,16 @@ static const luaL_reg RENDEROBJECT_METHODS[] = // ----------------------------------------------------------------------------- -static BS_RenderObjectPtr CheckPanel(lua_State * L) -{ +static BS_RenderObjectPtr CheckPanel(lua_State *L) { // Der erste Parameter muss vom Typ userdata sein und die Metatable der Klasse Gfx.Panel - unsigned int * UserDataPtr; - if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, PANEL_CLASS_NAME)) != 0) - { + unsigned int *UserDataPtr; + if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, PANEL_CLASS_NAME)) != 0) { BS_RenderObjectPtr ROPtr(*UserDataPtr); - if (ROPtr.IsValid()) - { + if (ROPtr.IsValid()) { return ROPtr->ToPanel(); - } - else + } else luaL_error(L, "The panel with the handle %d does no longer exist.", *UserDataPtr); - } - else - { + } else { luaL_argcheck(L, 0, 1, "'" PANEL_CLASS_NAME "' expected"); } @@ -896,19 +803,17 @@ static BS_RenderObjectPtr CheckPanel(lua_State * L) // ----------------------------------------------------------------------------- -static int P_GetColor(lua_State * L) -{ +static int P_GetColor(lua_State *L) { BS_RenderObjectPtr PanelPtr = CheckPanel(L); BS_ASSERT(PanelPtr.IsValid()); BS_GraphicEngine::ARGBColorToLuaColor(L, PanelPtr->GetColor()); - + return 1; } // ----------------------------------------------------------------------------- -static int P_SetColor(lua_State * L) -{ +static int P_SetColor(lua_State *L) { BS_RenderObjectPtr PanelPtr = CheckPanel(L); BS_ASSERT(PanelPtr.IsValid()); PanelPtr->SetColor(BS_GraphicEngine::LuaColorToARGBColor(L, 2)); @@ -917,8 +822,7 @@ static int P_SetColor(lua_State * L) // ----------------------------------------------------------------------------- -static int P_Remove(lua_State * L) -{ +static int P_Remove(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); ROPtr.Erase(); @@ -927,8 +831,7 @@ static int P_Remove(lua_State * L) // ----------------------------------------------------------------------------- -static const luaL_reg PANEL_METHODS[] = -{ +static const luaL_reg PANEL_METHODS[] = { {"GetColor", P_GetColor}, {"SetColor", P_SetColor}, {"Remove", P_Remove}, @@ -937,22 +840,16 @@ static const luaL_reg PANEL_METHODS[] = // ----------------------------------------------------------------------------- -static BS_RenderObjectPtr CheckBitmap(lua_State * L) -{ +static BS_RenderObjectPtr CheckBitmap(lua_State *L) { // Der erste Parameter muss vom Typ userdata sein und die Metatable der Klasse Gfx.Bitmap - unsigned int * UserDataPtr; - if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, BITMAP_CLASS_NAME)) != 0) - { + unsigned int *UserDataPtr; + if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, BITMAP_CLASS_NAME)) != 0) { BS_RenderObjectPtr ROPtr(*UserDataPtr); - if (ROPtr.IsValid()) - { + if (ROPtr.IsValid()) { return ROPtr->ToBitmap(); - } - else + } else luaL_error(L, "The bitmap with the handle %d does no longer exist.", *UserDataPtr); - } - else - { + } else { luaL_argcheck(L, 0, 1, "'" BITMAP_CLASS_NAME "' expected"); } @@ -961,8 +858,7 @@ static BS_RenderObjectPtr CheckBitmap(lua_State * L) // ----------------------------------------------------------------------------- -static int B_SetAlpha(lua_State * L) -{ +static int B_SetAlpha(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BitmapPtr->SetAlpha(static_cast(luaL_checknumber(L, 2))); @@ -971,8 +867,7 @@ static int B_SetAlpha(lua_State * L) // ----------------------------------------------------------------------------- -static int B_SetTintColor(lua_State * L) -{ +static int B_SetTintColor(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BitmapPtr->SetModulationColor(BS_GraphicEngine::LuaColorToARGBColor(L, 2)); @@ -981,8 +876,7 @@ static int B_SetTintColor(lua_State * L) // ----------------------------------------------------------------------------- -static int B_SetScaleFactor(lua_State * L) -{ +static int B_SetScaleFactor(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BitmapPtr->SetScaleFactor(static_cast(luaL_checknumber(L, 2))); @@ -991,8 +885,7 @@ static int B_SetScaleFactor(lua_State * L) // ----------------------------------------------------------------------------- -static int B_SetScaleFactorX(lua_State * L) -{ +static int B_SetScaleFactorX(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BitmapPtr->SetScaleFactorX(static_cast(luaL_checknumber(L, 2))); @@ -1001,8 +894,7 @@ static int B_SetScaleFactorX(lua_State * L) // ----------------------------------------------------------------------------- -static int B_SetScaleFactorY(lua_State * L) -{ +static int B_SetScaleFactorY(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BitmapPtr->SetScaleFactorY(static_cast(luaL_checknumber(L, 2))); @@ -1011,8 +903,7 @@ static int B_SetScaleFactorY(lua_State * L) // ----------------------------------------------------------------------------- -static int B_SetFlipH(lua_State * L) -{ +static int B_SetFlipH(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BitmapPtr->SetFlipH(lua_tobooleancpp(L, 2)); @@ -1021,8 +912,7 @@ static int B_SetFlipH(lua_State * L) // ----------------------------------------------------------------------------- -static int B_SetFlipV(lua_State * L) -{ +static int B_SetFlipV(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BitmapPtr->SetFlipV(lua_tobooleancpp(L, 2)); @@ -1031,8 +921,7 @@ static int B_SetFlipV(lua_State * L) // ----------------------------------------------------------------------------- -static int B_GetAlpha(lua_State * L) -{ +static int B_GetAlpha(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); lua_pushnumber(L, BitmapPtr->GetAlpha()); @@ -1041,8 +930,7 @@ static int B_GetAlpha(lua_State * L) // ----------------------------------------------------------------------------- -static int B_GetTintColor(lua_State * L) -{ +static int B_GetTintColor(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BS_GraphicEngine::ARGBColorToLuaColor(L, BitmapPtr->GetModulationColor()); @@ -1051,8 +939,7 @@ static int B_GetTintColor(lua_State * L) // ----------------------------------------------------------------------------- -static int B_GetScaleFactorX(lua_State * L) -{ +static int B_GetScaleFactorX(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); lua_pushnumber(L, BitmapPtr->GetScaleFactorX()); @@ -1061,8 +948,7 @@ static int B_GetScaleFactorX(lua_State * L) // ----------------------------------------------------------------------------- -static int B_GetScaleFactorY(lua_State * L) -{ +static int B_GetScaleFactorY(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); lua_pushnumber(L, BitmapPtr->GetScaleFactorY()); @@ -1071,8 +957,7 @@ static int B_GetScaleFactorY(lua_State * L) // ----------------------------------------------------------------------------- -static int B_IsFlipH(lua_State * L) -{ +static int B_IsFlipH(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); lua_pushbooleancpp(L, BitmapPtr->IsFlipH()); @@ -1081,8 +966,7 @@ static int B_IsFlipH(lua_State * L) // ----------------------------------------------------------------------------- -static int B_IsFlipV(lua_State * L) -{ +static int B_IsFlipV(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); lua_pushbooleancpp(L, BitmapPtr->IsFlipV()); @@ -1091,8 +975,7 @@ static int B_IsFlipV(lua_State * L) // ----------------------------------------------------------------------------- -static int B_GetPixel(lua_State * L) -{ +static int B_GetPixel(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); BS_Vertex Pos; @@ -1103,8 +986,7 @@ static int B_GetPixel(lua_State * L) // ----------------------------------------------------------------------------- -static int B_IsScalingAllowed(lua_State * L) -{ +static int B_IsScalingAllowed(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); lua_pushbooleancpp(L, BitmapPtr->IsScalingAllowed()); @@ -1113,8 +995,7 @@ static int B_IsScalingAllowed(lua_State * L) // ----------------------------------------------------------------------------- -static int B_IsAlphaAllowed(lua_State * L) -{ +static int B_IsAlphaAllowed(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); lua_pushbooleancpp(L, BitmapPtr->IsAlphaAllowed()); @@ -1123,8 +1004,7 @@ static int B_IsAlphaAllowed(lua_State * L) // ----------------------------------------------------------------------------- -static int B_IsTintingAllowed(lua_State * L) -{ +static int B_IsTintingAllowed(lua_State *L) { BS_RenderObjectPtr BitmapPtr = CheckBitmap(L); BS_ASSERT(BitmapPtr.IsValid()); lua_pushbooleancpp(L, BitmapPtr->IsColorModulationAllowed()); @@ -1132,8 +1012,7 @@ static int B_IsTintingAllowed(lua_State * L) } // ----------------------------------------------------------------------------- -static int B_Remove(lua_State * L) -{ +static int B_Remove(lua_State *L) { BS_RenderObjectPtr ROPtr = CheckRenderObject(L); BS_ASSERT(ROPtr.IsValid()); ROPtr.Erase(); @@ -1142,8 +1021,7 @@ static int B_Remove(lua_State * L) // ----------------------------------------------------------------------------- -static const luaL_reg BITMAP_METHODS[] = -{ +static const luaL_reg BITMAP_METHODS[] = { {"SetAlpha", B_SetAlpha}, {"SetTintColor", B_SetTintColor}, {"SetScaleFactor", B_SetScaleFactor}, @@ -1167,22 +1045,17 @@ static const luaL_reg BITMAP_METHODS[] = // ----------------------------------------------------------------------------- -static BS_RenderObjectPtr CheckAnimation(lua_State * L) -{ +static BS_RenderObjectPtr CheckAnimation(lua_State *L) { // Der erste Parameter muss vom Typ userdata sein und die Metatable der Klasse Gfx.Animation - unsigned int * UserDataPtr; - if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, ANIMATION_CLASS_NAME)) != 0) - { + unsigned int *UserDataPtr; + if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, ANIMATION_CLASS_NAME)) != 0) { BS_RenderObjectPtr ROPtr(*UserDataPtr); if (ROPtr.IsValid()) return ROPtr->ToAnimation(); - else - { + else { luaL_error(L, "The animation with the handle %d does no longer exist.", *UserDataPtr); } - } - else - { + } else { luaL_argcheck(L, 0, 1, "'" ANIMATION_CLASS_NAME "' expected"); } @@ -1191,8 +1064,7 @@ static BS_RenderObjectPtr CheckAnimation(lua_State * L) // ----------------------------------------------------------------------------- -static int A_Play(lua_State * L) -{ +static int A_Play(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->Play(); @@ -1201,8 +1073,7 @@ static int A_Play(lua_State * L) // ----------------------------------------------------------------------------- -static int A_Pause(lua_State * L) -{ +static int A_Pause(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->Pause(); @@ -1211,8 +1082,7 @@ static int A_Pause(lua_State * L) // ----------------------------------------------------------------------------- -static int A_Stop(lua_State * L) -{ +static int A_Stop(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->Stop(); @@ -1221,8 +1091,7 @@ static int A_Stop(lua_State * L) // ----------------------------------------------------------------------------- -static int A_SetFrame(lua_State * L) -{ +static int A_SetFrame(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->SetFrame(static_cast(luaL_checknumber(L, 2))); @@ -1231,8 +1100,7 @@ static int A_SetFrame(lua_State * L) // ----------------------------------------------------------------------------- -static int A_SetAlpha(lua_State * L) -{ +static int A_SetAlpha(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->SetAlpha(static_cast(luaL_checknumber(L, 2))); @@ -1240,8 +1108,7 @@ static int A_SetAlpha(lua_State * L) } // ----------------------------------------------------------------------------- -static int A_SetTintColor(lua_State * L) -{ +static int A_SetTintColor(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->SetModulationColor(BS_GraphicEngine::LuaColorToARGBColor(L, 2)); @@ -1250,8 +1117,7 @@ static int A_SetTintColor(lua_State * L) // ----------------------------------------------------------------------------- -static int A_SetScaleFactor(lua_State * L) -{ +static int A_SetScaleFactor(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->SetScaleFactor(static_cast(luaL_checknumber(L, 2))); @@ -1260,8 +1126,7 @@ static int A_SetScaleFactor(lua_State * L) // ----------------------------------------------------------------------------- -static int A_SetScaleFactorX(lua_State * L) -{ +static int A_SetScaleFactorX(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->SetScaleFactorX(static_cast(luaL_checknumber(L, 2))); @@ -1270,8 +1135,7 @@ static int A_SetScaleFactorX(lua_State * L) // ----------------------------------------------------------------------------- -static int A_SetScaleFactorY(lua_State * L) -{ +static int A_SetScaleFactorY(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr->SetScaleFactorY(static_cast(luaL_checknumber(L, 2))); @@ -1280,8 +1144,7 @@ static int A_SetScaleFactorY(lua_State * L) // ----------------------------------------------------------------------------- -static int A_GetScaleFactorX(lua_State * L) -{ +static int A_GetScaleFactorX(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushnumber(L, AnimationPtr->GetScaleFactorX()); @@ -1290,8 +1153,7 @@ static int A_GetScaleFactorX(lua_State * L) // ----------------------------------------------------------------------------- -static int A_GetScaleFactorY(lua_State * L) -{ +static int A_GetScaleFactorY(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushnumber(L, AnimationPtr->GetScaleFactorY()); @@ -1300,31 +1162,28 @@ static int A_GetScaleFactorY(lua_State * L) // ----------------------------------------------------------------------------- -static int A_GetAnimationType(lua_State * L) -{ +static int A_GetAnimationType(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); - switch (AnimationPtr->GetAnimationType()) - { - case BS_Animation::AT_JOJO: - lua_pushstring(L, "jojo"); - break; - case BS_Animation::AT_LOOP: - lua_pushstring(L, "loop"); - break; - case BS_Animation::AT_ONESHOT: - lua_pushstring(L, "oneshot"); - break; - default: - BS_ASSERT(false); + switch (AnimationPtr->GetAnimationType()) { + case BS_Animation::AT_JOJO: + lua_pushstring(L, "jojo"); + break; + case BS_Animation::AT_LOOP: + lua_pushstring(L, "loop"); + break; + case BS_Animation::AT_ONESHOT: + lua_pushstring(L, "oneshot"); + break; + default: + BS_ASSERT(false); } return 1; } // ----------------------------------------------------------------------------- -static int A_GetFPS(lua_State * L) -{ +static int A_GetFPS(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushnumber(L, AnimationPtr->GetFPS()); @@ -1334,8 +1193,7 @@ static int A_GetFPS(lua_State * L) // ----------------------------------------------------------------------------- -static int A_GetFrameCount(lua_State * L) -{ +static int A_GetFrameCount(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushnumber(L, AnimationPtr->GetFrameCount()); @@ -1344,8 +1202,7 @@ static int A_GetFrameCount(lua_State * L) // ----------------------------------------------------------------------------- -static int A_IsScalingAllowed(lua_State * L) -{ +static int A_IsScalingAllowed(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushbooleancpp(L, AnimationPtr->IsScalingAllowed()); @@ -1354,8 +1211,7 @@ static int A_IsScalingAllowed(lua_State * L) // ----------------------------------------------------------------------------- -static int A_IsAlphaAllowed(lua_State * L) -{ +static int A_IsAlphaAllowed(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushbooleancpp(L, AnimationPtr->IsAlphaAllowed()); @@ -1364,8 +1220,7 @@ static int A_IsAlphaAllowed(lua_State * L) // ----------------------------------------------------------------------------- -static int A_IsTintingAllowed(lua_State * L) -{ +static int A_IsTintingAllowed(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushbooleancpp(L, AnimationPtr->IsColorModulationAllowed()); @@ -1374,8 +1229,7 @@ static int A_IsTintingAllowed(lua_State * L) // ----------------------------------------------------------------------------- -static int A_GetCurrentFrame(lua_State * L) -{ +static int A_GetCurrentFrame(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushnumber(L, AnimationPtr->GetCurrentFrame()); @@ -1384,8 +1238,7 @@ static int A_GetCurrentFrame(lua_State * L) // ----------------------------------------------------------------------------- -static int A_GetCurrentAction(lua_State * L) -{ +static int A_GetCurrentAction(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushstring(L, AnimationPtr->GetCurrentAction().c_str()); @@ -1394,8 +1247,7 @@ static int A_GetCurrentAction(lua_State * L) // ----------------------------------------------------------------------------- -static int A_IsPlaying(lua_State * L) -{ +static int A_IsPlaying(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); lua_pushbooleancpp(L, AnimationPtr->IsRunning()); @@ -1404,9 +1256,8 @@ static int A_IsPlaying(lua_State * L) // ----------------------------------------------------------------------------- -static bool AnimationLoopPointCallback(unsigned int Handle) -{ - lua_State * L = static_cast(BS_Kernel::GetInstance()->GetScript()->GetScriptObject()); +static bool AnimationLoopPointCallback(unsigned int Handle) { + lua_State *L = static_cast(BS_Kernel::GetInstance()->GetScript()->GetScriptObject()); LoopPointCallbackPtr->InvokeCallbackFunctions(L, Handle); return true; @@ -1414,8 +1265,7 @@ static bool AnimationLoopPointCallback(unsigned int Handle) // ----------------------------------------------------------------------------- -static int A_RegisterLoopPointCallback(lua_State * L) -{ +static int A_RegisterLoopPointCallback(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); luaL_checktype(L, 2, LUA_TFUNCTION); @@ -1428,8 +1278,7 @@ static int A_RegisterLoopPointCallback(lua_State * L) // ----------------------------------------------------------------------------- -static int A_UnregisterLoopPointCallback(lua_State * L) -{ +static int A_UnregisterLoopPointCallback(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); luaL_checktype(L, 2, LUA_TFUNCTION); @@ -1442,13 +1291,11 @@ static int A_UnregisterLoopPointCallback(lua_State * L) // ----------------------------------------------------------------------------- -static bool AnimationActionCallback(unsigned int Handle) -{ +static bool AnimationActionCallback(unsigned int Handle) { BS_RenderObjectPtr AnimationPtr(Handle); - if (AnimationPtr.IsValid()) - { + if (AnimationPtr.IsValid()) { ActionCallbackPtr->Action = AnimationPtr->GetCurrentAction(); - lua_State * L = static_cast(BS_Kernel::GetInstance()->GetScript()->GetScriptObject()); + lua_State *L = static_cast(BS_Kernel::GetInstance()->GetScript()->GetScriptObject()); ActionCallbackPtr->InvokeCallbackFunctions(L, AnimationPtr->GetHandle()); } @@ -1457,8 +1304,7 @@ static bool AnimationActionCallback(unsigned int Handle) // ----------------------------------------------------------------------------- -static int A_RegisterActionCallback(lua_State * L) -{ +static int A_RegisterActionCallback(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); luaL_checktype(L, 2, LUA_TFUNCTION); @@ -1471,8 +1317,7 @@ static int A_RegisterActionCallback(lua_State * L) // ----------------------------------------------------------------------------- -static int A_UnregisterActionCallback(lua_State * L) -{ +static int A_UnregisterActionCallback(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); luaL_checktype(L, 2, LUA_TFUNCTION); @@ -1485,9 +1330,8 @@ static int A_UnregisterActionCallback(lua_State * L) // ----------------------------------------------------------------------------- -static bool AnimationDeleteCallback(unsigned int Handle) -{ - lua_State * L = static_cast(BS_Kernel::GetInstance()->GetScript()->GetScriptObject()); +static bool AnimationDeleteCallback(unsigned int Handle) { + lua_State *L = static_cast(BS_Kernel::GetInstance()->GetScript()->GetScriptObject()); LoopPointCallbackPtr->RemoveAllObjectCallbacks(L, Handle); return true; @@ -1495,8 +1339,7 @@ static bool AnimationDeleteCallback(unsigned int Handle) // ----------------------------------------------------------------------------- -static int A_Remove(lua_State * L) -{ +static int A_Remove(lua_State *L) { BS_RenderObjectPtr AnimationPtr = CheckAnimation(L); BS_ASSERT(AnimationPtr.IsValid()); AnimationPtr.Erase(); @@ -1505,8 +1348,7 @@ static int A_Remove(lua_State * L) // ----------------------------------------------------------------------------- -static const luaL_reg ANIMATION_METHODS[] = -{ +static const luaL_reg ANIMATION_METHODS[] = { {"Play", A_Play}, {"Pause", A_Pause}, {"Stop", A_Stop}, @@ -1537,20 +1379,16 @@ static const luaL_reg ANIMATION_METHODS[] = // ----------------------------------------------------------------------------- -static BS_RenderObjectPtr CheckText(lua_State * L) -{ +static BS_RenderObjectPtr CheckText(lua_State *L) { // Der erste Parameter muss vom Typ userdata sein und die Metatable der Klasse Gfx.Text - unsigned int * UserDataPtr; - if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, TEXT_CLASS_NAME)) != 0) - { + unsigned int *UserDataPtr; + if ((UserDataPtr = (unsigned int *) my_checkudata(L, 1, TEXT_CLASS_NAME)) != 0) { BS_RenderObjectPtr ROPtr(*UserDataPtr); if (ROPtr.IsValid()) return ROPtr->ToText(); else luaL_error(L, "The text with the handle %d does no longer exist.", *UserDataPtr); - } - else - { + } else { luaL_argcheck(L, 0, 1, "'" TEXT_CLASS_NAME "' expected"); } @@ -1559,8 +1397,7 @@ static BS_RenderObjectPtr CheckText(lua_State * L) // ----------------------------------------------------------------------------- -static int T_SetFont(lua_State * L) -{ +static int T_SetFont(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); TextPtr->SetFont(luaL_checkstring(L, 2)); @@ -1569,8 +1406,7 @@ static int T_SetFont(lua_State * L) // ----------------------------------------------------------------------------- -static int T_SetText(lua_State * L) -{ +static int T_SetText(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); TextPtr->SetText(luaL_checkstring(L, 2)); @@ -1579,8 +1415,7 @@ static int T_SetText(lua_State * L) // ----------------------------------------------------------------------------- -static int T_SetAlpha(lua_State * L) -{ +static int T_SetAlpha(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); TextPtr->SetAlpha(static_cast(luaL_checknumber(L, 2))); @@ -1589,8 +1424,7 @@ static int T_SetAlpha(lua_State * L) // ----------------------------------------------------------------------------- -static int T_SetColor(lua_State * L) -{ +static int T_SetColor(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); TextPtr->SetColor(BS_GraphicEngine::LuaColorToARGBColor(L, 2)); @@ -1599,8 +1433,7 @@ static int T_SetColor(lua_State * L) // ----------------------------------------------------------------------------- -static int T_SetAutoWrap(lua_State * L) -{ +static int T_SetAutoWrap(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); TextPtr->SetAutoWrap(lua_tobooleancpp(L, 2)); @@ -1609,8 +1442,7 @@ static int T_SetAutoWrap(lua_State * L) // ----------------------------------------------------------------------------- -static int T_SetAutoWrapThreshold(lua_State * L) -{ +static int T_SetAutoWrapThreshold(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); TextPtr->SetAutoWrapThreshold(static_cast(luaL_checknumber(L, 2))); @@ -1619,8 +1451,7 @@ static int T_SetAutoWrapThreshold(lua_State * L) // ----------------------------------------------------------------------------- -static int T_GetText(lua_State * L) -{ +static int T_GetText(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); lua_pushstring(L, TextPtr->GetText().c_str()); @@ -1629,8 +1460,7 @@ static int T_GetText(lua_State * L) // ----------------------------------------------------------------------------- -static int T_GetFont(lua_State * L) -{ +static int T_GetFont(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); lua_pushstring(L, TextPtr->GetFont().c_str()); @@ -1639,8 +1469,7 @@ static int T_GetFont(lua_State * L) // ----------------------------------------------------------------------------- -static int T_GetAlpha(lua_State * L) -{ +static int T_GetAlpha(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); lua_pushnumber(L, TextPtr->GetAlpha()); @@ -1649,8 +1478,7 @@ static int T_GetAlpha(lua_State * L) // ----------------------------------------------------------------------------- -static int T_GetColor(lua_State * L) -{ +static int T_GetColor(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); lua_pushnumber(L, TextPtr->GetColor()); @@ -1659,8 +1487,7 @@ static int T_GetColor(lua_State * L) // ----------------------------------------------------------------------------- -static int T_IsAutoWrap(lua_State * L) -{ +static int T_IsAutoWrap(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); lua_pushbooleancpp(L, TextPtr->IsAutoWrapActive()); @@ -1669,8 +1496,7 @@ static int T_IsAutoWrap(lua_State * L) // ----------------------------------------------------------------------------- -static int T_GetAutoWrapThreshold(lua_State * L) -{ +static int T_GetAutoWrapThreshold(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); lua_pushnumber(L, TextPtr->GetAutoWrapThreshold()); @@ -1679,8 +1505,7 @@ static int T_GetAutoWrapThreshold(lua_State * L) // ----------------------------------------------------------------------------- -static int T_Remove(lua_State * L) -{ +static int T_Remove(lua_State *L) { BS_RenderObjectPtr TextPtr = CheckText(L); BS_ASSERT(TextPtr.IsValid()); TextPtr.Erase(); @@ -1689,8 +1514,7 @@ static int T_Remove(lua_State * L) // ----------------------------------------------------------------------------- -static const luaL_reg TEXT_METHODS[] = -{ +static const luaL_reg TEXT_METHODS[] = { {"SetFont", T_SetFont}, {"SetText", T_SetText}, {"SetAlpha", T_SetAlpha}, @@ -1709,13 +1533,12 @@ static const luaL_reg TEXT_METHODS[] = // ----------------------------------------------------------------------------- -bool BS_GraphicEngine::RegisterScriptBindings() -{ - BS_Kernel * pKernel = BS_Kernel::GetInstance(); +bool BS_GraphicEngine::RegisterScriptBindings() { + BS_Kernel *pKernel = BS_Kernel::GetInstance(); BS_ASSERT(pKernel); - BS_ScriptEngine * pScript = static_cast(pKernel->GetService("script")); + BS_ScriptEngine *pScript = static_cast(pKernel->GetService("script")); BS_ASSERT(pScript); - lua_State * L = static_cast(pScript->GetScriptObject()); + lua_State *L = static_cast(pScript->GetScriptObject()); BS_ASSERT(L); if (!BS_LuaBindhelper::AddMethodsToClass(L, BITMAP_CLASS_NAME, RENDEROBJECT_METHODS)) return false; diff --git a/engines/sword25/gfx/image/b25sloader.cpp b/engines/sword25/gfx/image/b25sloader.cpp index ea1e933edd..e45a4cddcb 100644 --- a/engines/sword25/gfx/image/b25sloader.cpp +++ b/engines/sword25/gfx/image/b25sloader.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -50,38 +50,33 @@ namespace Sword25 { // ----------------------------------------------------------------------------- -namespace -{ - unsigned int FindEmbeddedPNG(const char * FileDataPtr, unsigned int FileSize) - { - // Einen Stringstream mit dem Anfang der Datei intialisieren. 512 Byte sollten hierfür genügen. - istringstream StringStream(string(FileDataPtr, FileDataPtr + min(static_cast(512), FileSize))); - - // Headerinformationen der Spielstandes einlesen. - string Marker, VersionID; - unsigned int CompressedGamedataSize, UncompressedGamedataSize; - StringStream >> Marker >> VersionID >> CompressedGamedataSize >> UncompressedGamedataSize; - if (!StringStream.good()) return 0; - - // Testen, ob wir tatsächlich einen Spielstand haben. - if (Marker == "BS25SAVEGAME") - { - // Offset zum PNG innerhalb des Spielstandes berechnen und zurückgeben. - return static_cast(StringStream.tellg()) + CompressedGamedataSize + 1; - } - - return 0; +namespace { +unsigned int FindEmbeddedPNG(const char *FileDataPtr, unsigned int FileSize) { + // Einen Stringstream mit dem Anfang der Datei intialisieren. 512 Byte sollten hierfür genügen. + istringstream StringStream(string(FileDataPtr, FileDataPtr + min(static_cast(512), FileSize))); + + // Headerinformationen der Spielstandes einlesen. + string Marker, VersionID; + unsigned int CompressedGamedataSize, UncompressedGamedataSize; + StringStream >> Marker >> VersionID >> CompressedGamedataSize >> UncompressedGamedataSize; + if (!StringStream.good()) return 0; + + // Testen, ob wir tatsächlich einen Spielstand haben. + if (Marker == "BS25SAVEGAME") { + // Offset zum PNG innerhalb des Spielstandes berechnen und zurückgeben. + return static_cast(StringStream.tellg()) + CompressedGamedataSize + 1; } + + return 0; +} } // ----------------------------------------------------------------------------- -bool BS_B25SLoader::IsCorrectImageFormat(const char * FileDataPtr, unsigned int FileSize) -{ +bool BS_B25SLoader::IsCorrectImageFormat(const char *FileDataPtr, unsigned int FileSize) { // PNG innerhalb des Spielstandes finden und den Methodenaufruf zu BS_PNGLoader weiterreichen. unsigned int PNGOffset = FindEmbeddedPNG(FileDataPtr, FileSize); - if (PNGOffset > 0) - { + if (PNGOffset > 0) { return BS_PNGLoader::DoIsCorrectImageFormat(FileDataPtr + PNGOffset, FileSize - PNGOffset); } @@ -90,13 +85,11 @@ bool BS_B25SLoader::IsCorrectImageFormat(const char * FileDataPtr, unsigned int // ----------------------------------------------------------------------------- -bool BS_B25SLoader::DecodeImage(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, - int & Width, int & Height, int & Pitch) -{ +bool BS_B25SLoader::DecodeImage(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, + int &Width, int &Height, int &Pitch) { // PNG innerhalb des Spielstandes finden und den Methodenaufruf zu BS_PNGLoader weiterreichen. unsigned int PNGOffset = FindEmbeddedPNG(FileDataPtr, FileSize); - if (PNGOffset > 0) - { + if (PNGOffset > 0) { return BS_PNGLoader::DoDecodeImage(FileDataPtr + PNGOffset, FileSize - PNGOffset, ColorFormat, UncompressedDataPtr, Width, Height, Pitch); } @@ -105,12 +98,10 @@ bool BS_B25SLoader::DecodeImage(const char * FileDataPtr, unsigned int FileSize, // ----------------------------------------------------------------------------- -bool BS_B25SLoader::ImageProperties(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS & ColorFormat, int & Width, int & Height) -{ +bool BS_B25SLoader::ImageProperties(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS &ColorFormat, int &Width, int &Height) { // PNG innerhalb des Spielstandes finden und den Methodenaufruf zu BS_PNGLoader weiterreichen. unsigned int PNGOffset = FindEmbeddedPNG(FileDataPtr, FileSize); - if (PNGOffset > 0) - { + if (PNGOffset > 0) { return BS_PNGLoader::DoImageProperties(FileDataPtr + PNGOffset, FileSize - PNGOffset, ColorFormat, Width, Height); } diff --git a/engines/sword25/gfx/image/b25sloader.h b/engines/sword25/gfx/image/b25sloader.h index be28b646c8..4a2cf3b841 100644 --- a/engines/sword25/gfx/image/b25sloader.h +++ b/engines/sword25/gfx/image/b25sloader.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -48,21 +48,19 @@ namespace Sword25 { // Klassendeklaration // ----------------------------------------------------------------------------- -class BS_B25SLoader : public BS_ImageLoader -{ +class BS_B25SLoader : public BS_ImageLoader { public: - static BS_ImageLoader * CreateInstance() - { - #include "sword25/kernel/memlog_off.h" + static BS_ImageLoader *CreateInstance() { +#include "sword25/kernel/memlog_off.h" return static_cast(new BS_B25SLoader()); - #include "sword25/kernel/memlog_on.h" +#include "sword25/kernel/memlog_on.h" } protected: - virtual bool IsCorrectImageFormat(const char * FileDataPtr, unsigned int FileSize); - virtual bool DecodeImage(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, - int & Width, int & Height, int & Pitch); - virtual bool ImageProperties(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS & ColorFormat, int & Width, int & Height); + virtual bool IsCorrectImageFormat(const char *FileDataPtr, unsigned int FileSize); + virtual bool DecodeImage(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, + int &Width, int &Height, int &Pitch); + virtual bool ImageProperties(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS &ColorFormat, int &Width, int &Height); }; diff --git a/engines/sword25/gfx/image/image.h b/engines/sword25/gfx/image/image.h index 2f9d49f695..1489af97b3 100644 --- a/engines/sword25/gfx/image/image.h +++ b/engines/sword25/gfx/image/image.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -33,10 +33,10 @@ */ /* - BS_Image - -------- + BS_Image + -------- - Autor: Malte Thiesen + Autor: Malte Thiesen */ #ifndef SWORD25_IMAGE_H @@ -52,17 +52,15 @@ namespace Sword25 { -class BS_Image -{ +class BS_Image { public: virtual ~BS_Image() {}; // Enums /** - @brief Die möglichen Flippingparameter für die Blit-Methode. + @brief Die möglichen Flippingparameter für die Blit-Methode. */ - enum FLIP_FLAGS - { + enum FLIP_FLAGS { /// Das Bild wird nicht gespiegelt. FLIP_NONE = 0, /// Das Bild wird an der horizontalen Achse gespiegelt. @@ -74,22 +72,22 @@ public: /// Das Bild wird an der horizontalen und vertikalen Achse gespiegelt. FLIP_VH = FLIP_H | FLIP_V }; - + //@{ /** @name Accessor-Methoden */ /** - @brief Gibt die Breite des Bildes in Pixeln zurück + @brief Gibt die Breite des Bildes in Pixeln zurück */ virtual int GetWidth() const = 0; /** - @brief Gibt die Höhe des Bildes in Pixeln zurück + @brief Gibt die Höhe des Bildes in Pixeln zurück */ virtual int GetHeight() const = 0; /** - @brief Gibt das Farbformat des Bildes zurück + @brief Gibt das Farbformat des Bildes zurück */ virtual BS_GraphicEngine::COLOR_FORMATS GetColorFormat() const = 0; @@ -99,83 +97,83 @@ public: /** @name Render-Methoden */ /** - @brief Rendert das Bild in den Framebuffer. - @param pDest ein Pointer auf das Zielbild. In den meisten Fällen ist dies der Framebuffer. - @param PosX die Position auf der X-Achse im Zielbild in Pixeln, an der das Bild gerendert werden soll.
- Der Standardwert ist 0. - @param PosY die Position auf der Y-Achse im Zielbild in Pixeln, an der das Bild gerendert werden soll.
- Der Standardwert ist 0. - @param Flipping gibt an, wie das Bild gespiegelt werden soll.
- Der Standardwert ist BS_Image::FLIP_NONE (keine Spiegelung) - @param pSrcPartRect Pointer auf ein BS_Rect, welches den Ausschnitt des Quellbildes spezifiziert, der gerendert - werden soll oder NULL, falls das gesamte Bild gerendert werden soll.
- Dieser Ausschnitt bezieht sich auf das ungespiegelte und unskalierte Bild.
- Der Standardwert ist NULL. - @param Color ein ARGB Farbwert, der die Parameter für die Farbmodulation und fürs Alphablending festlegt.
- Die Alpha-Komponente der Farbe bestimmt den Alphablending Parameter (0 = keine Deckung, 255 = volle Deckung).
- Die Farbkomponenten geben die Farbe für die Farbmodulation an.
- Der Standardwert is BS_ARGB(255, 255, 255, 255) (volle Deckung, keine Farbmodulation). - Zum Erzeugen des Farbwertes können die Makros BS_RGB und BS_ARGB benutzt werden. - @param Width gibt die Ausgabebreite des Bildausschnittes an. - Falls diese von der Breite des Bildausschnittes abweicht wird - das Bild entsprechend Skaliert.
- Der Wert -1 gibt an, dass das Bild nicht Skaliert werden soll.
- Der Standardwert ist -1. - @param Width gibt die Ausgabehöhe des Bildausschnittes an. - Falls diese von der Höhe des Bildauschnittes abweicht, wird - das Bild entsprechend Skaliert.
- Der Wert -1 gibt an, dass das Bild nicht Skaliert werden soll.
- Der Standardwert ist -1. - @return Gibt false zurück, falls das Rendern fehlgeschlagen ist. - @remark Er werden nicht alle Blitting-Operationen von allen BS_Image-Klassen unterstützt.
- Mehr Informationen gibt es in der Klassenbeschreibung von BS_Image und durch folgende Methoden: - - IsBlitTarget() - - IsScalingAllowed() - - IsFillingAllowed() - - IsAlphaAllowed() - - IsColorModulationAllowed() - - IsSetContentAllowed() + @brief Rendert das Bild in den Framebuffer. + @param pDest ein Pointer auf das Zielbild. In den meisten Fällen ist dies der Framebuffer. + @param PosX die Position auf der X-Achse im Zielbild in Pixeln, an der das Bild gerendert werden soll.
+ Der Standardwert ist 0. + @param PosY die Position auf der Y-Achse im Zielbild in Pixeln, an der das Bild gerendert werden soll.
+ Der Standardwert ist 0. + @param Flipping gibt an, wie das Bild gespiegelt werden soll.
+ Der Standardwert ist BS_Image::FLIP_NONE (keine Spiegelung) + @param pSrcPartRect Pointer auf ein BS_Rect, welches den Ausschnitt des Quellbildes spezifiziert, der gerendert + werden soll oder NULL, falls das gesamte Bild gerendert werden soll.
+ Dieser Ausschnitt bezieht sich auf das ungespiegelte und unskalierte Bild.
+ Der Standardwert ist NULL. + @param Color ein ARGB Farbwert, der die Parameter für die Farbmodulation und fürs Alphablending festlegt.
+ Die Alpha-Komponente der Farbe bestimmt den Alphablending Parameter (0 = keine Deckung, 255 = volle Deckung).
+ Die Farbkomponenten geben die Farbe für die Farbmodulation an.
+ Der Standardwert is BS_ARGB(255, 255, 255, 255) (volle Deckung, keine Farbmodulation). + Zum Erzeugen des Farbwertes können die Makros BS_RGB und BS_ARGB benutzt werden. + @param Width gibt die Ausgabebreite des Bildausschnittes an. + Falls diese von der Breite des Bildausschnittes abweicht wird + das Bild entsprechend Skaliert.
+ Der Wert -1 gibt an, dass das Bild nicht Skaliert werden soll.
+ Der Standardwert ist -1. + @param Width gibt die Ausgabehöhe des Bildausschnittes an. + Falls diese von der Höhe des Bildauschnittes abweicht, wird + das Bild entsprechend Skaliert.
+ Der Wert -1 gibt an, dass das Bild nicht Skaliert werden soll.
+ Der Standardwert ist -1. + @return Gibt false zurück, falls das Rendern fehlgeschlagen ist. + @remark Er werden nicht alle Blitting-Operationen von allen BS_Image-Klassen unterstützt.
+ Mehr Informationen gibt es in der Klassenbeschreibung von BS_Image und durch folgende Methoden: + - IsBlitTarget() + - IsScalingAllowed() + - IsFillingAllowed() + - IsAlphaAllowed() + - IsColorModulationAllowed() + - IsSetContentAllowed() */ - virtual bool Blit(int PosX = 0, int PosY = 0, - int Flipping = FLIP_NONE, - BS_Rect* pPartRect = NULL, - unsigned int Color = BS_ARGB(255, 255, 255, 255), - int Width = -1, int Height = -1) = 0; + virtual bool Blit(int PosX = 0, int PosY = 0, + int Flipping = FLIP_NONE, + BS_Rect *pPartRect = NULL, + unsigned int Color = BS_ARGB(255, 255, 255, 255), + int Width = -1, int Height = -1) = 0; /** - @brief Füllt einen Rechteckigen Bereich des Bildes mit einer Farbe. - @param pFillRect Pointer auf ein BS_Rect, welches den Ausschnitt des Bildes spezifiziert, der gefüllt - werden soll oder NULL, falls das gesamte Bild gefüllt werden soll.
- Der Standardwert ist NULL. - @param Color der 32 Bit Farbwert mit dem der Bildbereich gefüllt werden soll. - @remark Es ist möglich über die Methode transparente Rechtecke darzustellen, indem man eine Farbe mit einem Alphawert ungleich - 255 angibt. - @remark Unabhängig vom Farbformat des Bildes muss ein 32 Bit Farbwert angegeben werden. Zur Erzeugung, können die Makros - BS_RGB und BS_ARGB benutzt werden. - @remark Falls das Rechteck nicht völlig innerhalb des Bildschirms ist, wird es automatisch zurechtgestutzt. + @brief Füllt einen Rechteckigen Bereich des Bildes mit einer Farbe. + @param pFillRect Pointer auf ein BS_Rect, welches den Ausschnitt des Bildes spezifiziert, der gefüllt + werden soll oder NULL, falls das gesamte Bild gefüllt werden soll.
+ Der Standardwert ist NULL. + @param Color der 32 Bit Farbwert mit dem der Bildbereich gefüllt werden soll. + @remark Es ist möglich über die Methode transparente Rechtecke darzustellen, indem man eine Farbe mit einem Alphawert ungleich + 255 angibt. + @remark Unabhängig vom Farbformat des Bildes muss ein 32 Bit Farbwert angegeben werden. Zur Erzeugung, können die Makros + BS_RGB und BS_ARGB benutzt werden. + @remark Falls das Rechteck nicht völlig innerhalb des Bildschirms ist, wird es automatisch zurechtgestutzt. */ - virtual bool Fill(const BS_Rect* pFillRect = 0, unsigned int Color = BS_RGB(0, 0, 0)) = 0; + virtual bool Fill(const BS_Rect *pFillRect = 0, unsigned int Color = BS_RGB(0, 0, 0)) = 0; /** - @brief Füllt den Inhalt des Bildes mit Pixeldaten. - @param Pixeldata ein Vector der die Pixeldaten enthält. Sie müssen in dem Farbformat des Bildes vorliegen und es müssen genügend Daten - vorhanden sein, um das ganze Bild zu füllen. - @param Offset der Offset in Byte im Pixeldata-Vector an dem sich der erste zu schreibende Pixel befindet.
- Der Standardwert ist 0. - @param Stride der Abstand in Byte zwischen dem Zeilenende und dem Beginn einer neuen Zeile im Pixeldata-Vector.
- Der Standardwert ist 0. - @return Gibt false zurück, falls der Aufruf fehlgeschlagen ist. - @remark Ein Aufruf dieser Methode ist nur erlaubt, wenn IsSetContentAllowed() true zurückgibt. + @brief Füllt den Inhalt des Bildes mit Pixeldaten. + @param Pixeldata ein Vector der die Pixeldaten enthält. Sie müssen in dem Farbformat des Bildes vorliegen und es müssen genügend Daten + vorhanden sein, um das ganze Bild zu füllen. + @param Offset der Offset in Byte im Pixeldata-Vector an dem sich der erste zu schreibende Pixel befindet.
+ Der Standardwert ist 0. + @param Stride der Abstand in Byte zwischen dem Zeilenende und dem Beginn einer neuen Zeile im Pixeldata-Vector.
+ Der Standardwert ist 0. + @return Gibt false zurück, falls der Aufruf fehlgeschlagen ist. + @remark Ein Aufruf dieser Methode ist nur erlaubt, wenn IsSetContentAllowed() true zurückgibt. */ virtual bool SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) = 0; /** - @brief Liest einen Pixel des Bildes. - @param X die X-Koordinate des Pixels. - @param Y die Y-Koordinate des Pixels - @return Gibt den 32-Bit Farbwert des Pixels an der übergebenen Koordinate zurück. - @remark Diese Methode sollte auf keine Fall benutzt werden um größere Teile des Bildes zu lesen, da sie sehr langsam ist. Sie ist - eher dafür gedacht einzelne Pixel des Bildes auszulesen. + @brief Liest einen Pixel des Bildes. + @param X die X-Koordinate des Pixels. + @param Y die Y-Koordinate des Pixels + @return Gibt den 32-Bit Farbwert des Pixels an der übergebenen Koordinate zurück. + @remark Diese Methode sollte auf keine Fall benutzt werden um größere Teile des Bildes zu lesen, da sie sehr langsam ist. Sie ist + eher dafür gedacht einzelne Pixel des Bildes auszulesen. */ virtual unsigned int GetPixel(int X, int Y) = 0; @@ -183,39 +181,39 @@ public: /** @name Auskunfts-Methoden */ /** - @brief Überprüft, ob an dem BS_Image Blit() aufgerufen werden darf. - @return Gibt false zurück, falls ein Blit()-Aufruf an diesem Objekt nicht gestattet ist. + @brief Überprüft, ob an dem BS_Image Blit() aufgerufen werden darf. + @return Gibt false zurück, falls ein Blit()-Aufruf an diesem Objekt nicht gestattet ist. */ virtual bool IsBlitSource() const = 0; /** - @brief Überprüft, ob das BS_Image ein Zielbild für einen Blit-Aufruf sein kann. - @return Gibt false zurück, falls ein Blit-Aufruf mit diesem Objekt als Ziel nicht gestattet ist. + @brief Überprüft, ob das BS_Image ein Zielbild für einen Blit-Aufruf sein kann. + @return Gibt false zurück, falls ein Blit-Aufruf mit diesem Objekt als Ziel nicht gestattet ist. */ virtual bool IsBlitTarget() const = 0; /** - @brief Gibt true zurück, falls das BS_Image bei einem Aufruf von Blit() skaliert dargestellt werden kann. + @brief Gibt true zurück, falls das BS_Image bei einem Aufruf von Blit() skaliert dargestellt werden kann. */ virtual bool IsScalingAllowed() const = 0; /** - @brief Gibt true zurück, wenn das BS_Image mit einem Aufruf von Fill() gefüllt werden kann. + @brief Gibt true zurück, wenn das BS_Image mit einem Aufruf von Fill() gefüllt werden kann. */ virtual bool IsFillingAllowed() const = 0; /** - @brief Gibt true zurück, wenn das BS_Image bei einem Aufruf von Blit() mit einem Alphawert dargestellt werden kann. + @brief Gibt true zurück, wenn das BS_Image bei einem Aufruf von Blit() mit einem Alphawert dargestellt werden kann. */ virtual bool IsAlphaAllowed() const = 0; /** - @brief Gibt true zurück, wenn das BS_Image bei einem Aufruf von Blit() mit Farbmodulation dargestellt werden kann. + @brief Gibt true zurück, wenn das BS_Image bei einem Aufruf von Blit() mit Farbmodulation dargestellt werden kann. */ virtual bool IsColorModulationAllowed() const = 0; /** - @brief Gibt true zurück, wenn der Inhalt des BS_Image durch eine Aufruf von SetContent() ausgetauscht werden kann. + @brief Gibt true zurück, wenn der Inhalt des BS_Image durch eine Aufruf von SetContent() ausgetauscht werden kann. */ virtual bool IsSetContentAllowed() const = 0; diff --git a/engines/sword25/gfx/image/imageloader.cpp b/engines/sword25/gfx/image/imageloader.cpp index 1bf7508ee5..02eea59f56 100644 --- a/engines/sword25/gfx/image/imageloader.cpp +++ b/engines/sword25/gfx/image/imageloader.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -40,31 +40,29 @@ namespace Sword25 { #define BS_LOG_PREFIX "IMAGELOADER" // Statische Elemente der Klasse BS_ImageLoader intialisieren. -std::list BS_ImageLoader::_ImageLoaderList; +std::list BS_ImageLoader::_ImageLoaderList; bool BS_ImageLoader::_ImageLoaderListInitialized = false; // Lade Methode // ------------ -bool BS_ImageLoader::LoadImage(const char* pFileData, unsigned int FileSize, - BS_GraphicEngine::COLOR_FORMATS ColorFormat, - char*& pUncompressedData, - int& Width, int& Height, - int& Pitch) -{ +bool BS_ImageLoader::LoadImage(const char *pFileData, unsigned int FileSize, + BS_GraphicEngine::COLOR_FORMATS ColorFormat, + char*& pUncompressedData, + int &Width, int &Height, + int &Pitch) { // Falls die Liste der BS_ImageLoader noch nicht initialisiert wurde, wird dies getan. if (!_ImageLoaderListInitialized) _InitializeLoaderList(); // Passenden BS_ImageLoader finden und Bild dekodieren - BS_ImageLoader* pLoader = _FindSuitableImageLoader(pFileData, FileSize); - if (pLoader) - { + BS_ImageLoader *pLoader = _FindSuitableImageLoader(pFileData, FileSize); + if (pLoader) { return pLoader->DecodeImage(pFileData, FileSize, - ColorFormat, - pUncompressedData, - Width, Height, - Pitch); + ColorFormat, + pUncompressedData, + Width, Height, + Pitch); } return false; @@ -73,21 +71,19 @@ bool BS_ImageLoader::LoadImage(const char* pFileData, unsigned int FileSize, // Info Methode // ------------ -bool BS_ImageLoader::ExtractImageProperties(const char* pFileData, unsigned int FileSize, - BS_GraphicEngine::COLOR_FORMATS& ColorFormat, - int& Width, int& Height) -{ +bool BS_ImageLoader::ExtractImageProperties(const char *pFileData, unsigned int FileSize, + BS_GraphicEngine::COLOR_FORMATS &ColorFormat, + int &Width, int &Height) { // Falls die Liste der BS_ImageLoader noch nicht initialisiert wurde, wird dies getan. if (!_ImageLoaderListInitialized) _InitializeLoaderList(); // Passenden BS_ImageLoader finden und Bildeigenschaften auslesen. - BS_ImageLoader* pLoader = _FindSuitableImageLoader(pFileData, FileSize); - if (pLoader) - { + BS_ImageLoader *pLoader = _FindSuitableImageLoader(pFileData, FileSize); + if (pLoader) { return pLoader->ImageProperties(pFileData, FileSize, - ColorFormat, - Width, Height); + ColorFormat, + Width, Height); } return false; @@ -96,8 +92,7 @@ bool BS_ImageLoader::ExtractImageProperties(const char* pFileData, unsigned int // Verwaltungs Methoden // -------------------- -void BS_ImageLoader::_InitializeLoaderList() -{ +void BS_ImageLoader::_InitializeLoaderList() { // Von jedem BS_ImageLoader wird eine Instanz erzeugt, diese fügen sich selbständig in die BS_ImageLoader-Liste ein. for (int i = 0; i < BS_IMAGELOADER_COUNT; i++) BS_IMAGELOADER_IDS[i](); @@ -109,24 +104,19 @@ void BS_ImageLoader::_InitializeLoaderList() atexit(BS_ImageLoader::_DeinitializeLoaderList); } -void BS_ImageLoader::_DeinitializeLoaderList() -{ - while (!_ImageLoaderList.empty()) - { +void BS_ImageLoader::_DeinitializeLoaderList() { + while (!_ImageLoaderList.empty()) { delete _ImageLoaderList.back(); _ImageLoaderList.pop_back(); } } -BS_ImageLoader* BS_ImageLoader::_FindSuitableImageLoader(const char* pFileData, unsigned int FileSize) -{ +BS_ImageLoader *BS_ImageLoader::_FindSuitableImageLoader(const char *pFileData, unsigned int FileSize) { // Alle BS_ImageLoader-Objekte durchgehen, bis eins gefunden wurde, dass das Bild laden kann - std::list::iterator Iter = _ImageLoaderList.begin(); - for (; Iter != _ImageLoaderList.end(); ++Iter) - { + std::list::iterator Iter = _ImageLoaderList.begin(); + for (; Iter != _ImageLoaderList.end(); ++Iter) { // Falls ein geeigneter BS-ImageLoader gefunden wurde, wird er zurückgegeben. - if ((*Iter)->IsCorrectImageFormat(pFileData, FileSize)) - { + if ((*Iter)->IsCorrectImageFormat(pFileData, FileSize)) { return (*Iter); } } diff --git a/engines/sword25/gfx/image/imageloader.h b/engines/sword25/gfx/image/imageloader.h index 15c4e20606..204a56b144 100644 --- a/engines/sword25/gfx/image/imageloader.h +++ b/engines/sword25/gfx/image/imageloader.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -33,10 +33,10 @@ */ /* - BS_ImageLoader - -------------- + BS_ImageLoader + -------------- - Autor: Malte Thiesen + Autor: Malte Thiesen */ #ifndef SWORD25_IMAGELOADER_H @@ -55,90 +55,88 @@ namespace Sword25 { /** - @brief Über die statischen Methoden dieser Klasse werden alle unterstützten Bildformate geladen. - - Zum Laden von Bildern wird die #LoadImage-Methode benutzt. - - Außerdem stellt diese Klasse das Interface da, das alle Klassen implementieren müssen, die Bildformate einlesen.
- Zur Unterstützung eines neuen Bildformates muss folgendermaßen vorgegangen werden: - - Erzeugen einer neuen von #BS_ImageLoader abgeleiteten Klasse, die die Methoden #IsCorrectImageFormat und #DecodeImage impelementiert. - - Die Klasse muss eine statische Methode haben, die eine Instanz von ihr erzeugt und einen Pointer darauf zurückgibt. - - Diese Methode muss in der Liste in der Datei imageloader_ids.h eingetragen werden. - - Die Klasse muss JEDES Eingabebild seines Bildformates in die folgenden Farbformate konvertieren können: - - BS_GraphicEngine::CF_RGB16 - - BS_GraphicEngine::CF_RGB15 - - BS_GraphicEngine::CF_RGB16_INTERLEAVED - - BS_GraphicEngine::CF_RGB15_INTERLEAVED - - BS_GraphicEngine::CF_ARGB32 - - BS_GraphicEngine::CF_BGRA32 - - Zum Konvertieren der Bilddaten können die Hilfsmethoden dieser Klasse benutzt werden, die ARGB Bilddaten in alle benötigten - Farbformate konvertieren. + @brief Über die statischen Methoden dieser Klasse werden alle unterstützten Bildformate geladen. + + Zum Laden von Bildern wird die #LoadImage-Methode benutzt. + + Außerdem stellt diese Klasse das Interface da, das alle Klassen implementieren müssen, die Bildformate einlesen.
+ Zur Unterstützung eines neuen Bildformates muss folgendermaßen vorgegangen werden: + - Erzeugen einer neuen von #BS_ImageLoader abgeleiteten Klasse, die die Methoden #IsCorrectImageFormat und #DecodeImage impelementiert. + - Die Klasse muss eine statische Methode haben, die eine Instanz von ihr erzeugt und einen Pointer darauf zurückgibt. + - Diese Methode muss in der Liste in der Datei imageloader_ids.h eingetragen werden. + - Die Klasse muss JEDES Eingabebild seines Bildformates in die folgenden Farbformate konvertieren können: + - BS_GraphicEngine::CF_RGB16 + - BS_GraphicEngine::CF_RGB15 + - BS_GraphicEngine::CF_RGB16_INTERLEAVED + - BS_GraphicEngine::CF_RGB15_INTERLEAVED + - BS_GraphicEngine::CF_ARGB32 + - BS_GraphicEngine::CF_BGRA32 + - Zum Konvertieren der Bilddaten können die Hilfsmethoden dieser Klasse benutzt werden, die ARGB Bilddaten in alle benötigten + Farbformate konvertieren. */ -class BS_ImageLoader -{ +class BS_ImageLoader { public: //@{ /** @name Lade Methoden */ /** - @brief Lädt eine Bilddatei. - - Diese Methode kann sämtliche unterstütztem Bildformate lesen. Die Methode erkennt selbstständing um welches Dateiformat es sich - bei der vorliegenden Datei handelt.
- Bisher wird nur PNG unterstützt. - - @param pFileData ein Pointer auf die Bilddaten. - @param FileSize die Größe der Bilddaten in Byte. - @param ColorFormat gibt das gewünschte Farbformat an, in das die Bilddaten konvertiert werden sollen.
- Folgende Farbformate werden unterstützt: - - BS_GraphicEngine::CF_RGB16 - - BS_GraphicEngine::CF_RGB15 - - BS_GraphicEngine::CF_RGB16_INTERLEAVED - - BS_GraphicEngine::CF_RGB15_INTERLEAVED - - BS_GraphicEngine::CF_ARGB32 - @param pUncompressedData nach erfolgreichen Laden zeigt dieser Pointer auf die enpackten und konvertierten Bilddaten. - @param Width gibt nach erfolgreichen Laden die Breite des geladenen Bildes an. - @param Height gibt nach erfolgreichen Laden die Höhe des geladenen Bildes an. - @param Pitch gibt nach erfolgreichen Laden die Länge einer Bildzeile in Byte an. - @return Gibt false zurück, falls das Laden fehlgeschlagen ist. - @remark Die Größe der Ausgabedaten in Bytes kann wie folgt berechnet werden: Pitch * Height. - @remark Es darf nicht vergessen werden, die Ausgabedaten nach erfolgter Benutzung mit delete freizugeben. + @brief Lädt eine Bilddatei. + + Diese Methode kann sämtliche unterstütztem Bildformate lesen. Die Methode erkennt selbstständing um welches Dateiformat es sich + bei der vorliegenden Datei handelt.
+ Bisher wird nur PNG unterstützt. + + @param pFileData ein Pointer auf die Bilddaten. + @param FileSize die Größe der Bilddaten in Byte. + @param ColorFormat gibt das gewünschte Farbformat an, in das die Bilddaten konvertiert werden sollen.
+ Folgende Farbformate werden unterstützt: + - BS_GraphicEngine::CF_RGB16 + - BS_GraphicEngine::CF_RGB15 + - BS_GraphicEngine::CF_RGB16_INTERLEAVED + - BS_GraphicEngine::CF_RGB15_INTERLEAVED + - BS_GraphicEngine::CF_ARGB32 + @param pUncompressedData nach erfolgreichen Laden zeigt dieser Pointer auf die enpackten und konvertierten Bilddaten. + @param Width gibt nach erfolgreichen Laden die Breite des geladenen Bildes an. + @param Height gibt nach erfolgreichen Laden die Höhe des geladenen Bildes an. + @param Pitch gibt nach erfolgreichen Laden die Länge einer Bildzeile in Byte an. + @return Gibt false zurück, falls das Laden fehlgeschlagen ist. + @remark Die Größe der Ausgabedaten in Bytes kann wie folgt berechnet werden: Pitch * Height. + @remark Es darf nicht vergessen werden, die Ausgabedaten nach erfolgter Benutzung mit delete freizugeben. */ - static bool LoadImage(const char* pFileData, unsigned int FileSize, - BS_GraphicEngine::COLOR_FORMATS ColorFormat, - char*& pUncompressedData, - int& Width, int& Height, - int& Pitch); + static bool LoadImage(const char *pFileData, unsigned int FileSize, + BS_GraphicEngine::COLOR_FORMATS ColorFormat, + char*& pUncompressedData, + int &Width, int &Height, + int &Pitch); /** - @brief Liest die Bildeigenschaften eines Bildes aus. - - @param pFileData ein Pointer auf die Bilddaten. - @param FileSize die Größe des Bilddaten in Byte. - @param ColorFormat enthält nach einem erfolgreichem Aufruf das Farbformat des Bildes. - @param Width enthält nach einem erfolgreichem Aufruf die Breite des Bildes in Pixeln. - @param Height enthält nach einem erfolgreichem Aufruf die Höhe des Bildes in Pixeln. - @return Gibt false zurück, wenn die Bildeigenschaften nicht ausgelesen werden konnten. - @remark Es darf nicht vergessen werden, die Ausgabedaten nach erfolgter Benutzung mit delete freizugeben. + @brief Liest die Bildeigenschaften eines Bildes aus. + + @param pFileData ein Pointer auf die Bilddaten. + @param FileSize die Größe des Bilddaten in Byte. + @param ColorFormat enthält nach einem erfolgreichem Aufruf das Farbformat des Bildes. + @param Width enthält nach einem erfolgreichem Aufruf die Breite des Bildes in Pixeln. + @param Height enthält nach einem erfolgreichem Aufruf die Höhe des Bildes in Pixeln. + @return Gibt false zurück, wenn die Bildeigenschaften nicht ausgelesen werden konnten. + @remark Es darf nicht vergessen werden, die Ausgabedaten nach erfolgter Benutzung mit delete freizugeben. */ - static bool ExtractImageProperties(const char* pFileData, unsigned int FileSize, - BS_GraphicEngine::COLOR_FORMATS& ColorFormat, - int& Width, int& Height); + static bool ExtractImageProperties(const char *pFileData, unsigned int FileSize, + BS_GraphicEngine::COLOR_FORMATS &ColorFormat, + int &Width, int &Height); //@} protected: // Protected Konstruktor, damit Instanzen dieser Klasse nur von BS_ImageLoader-Objekten erstellt werden können /** - @brief Der Standardkonstruktor. + @brief Der Standardkonstruktor. - Dieser Konstruktor registriert alle Instanzen von #BS_ImageLoader-Klassen in einer Liste.
- Diese Liste enthält jeweils eine Instanz jedes #BS_ImageLoader und wird benutzt um beliebige Bilddateien einem Loader zuzuordnen. - @remark Dieser Konstruktor ist protected damit nur #BS_ImageLoader-Objekte diese Klasse instanziieren können. + Dieser Konstruktor registriert alle Instanzen von #BS_ImageLoader-Klassen in einer Liste.
+ Diese Liste enthält jeweils eine Instanz jedes #BS_ImageLoader und wird benutzt um beliebige Bilddateien einem Loader zuzuordnen. + @remark Dieser Konstruktor ist protected damit nur #BS_ImageLoader-Objekte diese Klasse instanziieren können. */ - BS_ImageLoader() - { + BS_ImageLoader() { // Klasse registrieren _ImageLoaderList.push_front(this); } @@ -147,54 +145,54 @@ protected: /** @name Abstrakte Methoden */ /** - @brief Gibt an, ob der #BS_ImageLoader ein Bild lesen kann. - @param pFileData ein Pointer auf die kompletten Daten des Bildes. - @param FileSize die Größe der Daten in Byte. - @return Gibt true zurück, wenn der #BS_ImageLoader das Bild lesen kann, ansonsten false. - @remark Diese Methode muss von allen BS_ImageLoader Klassen implementiert werden. + @brief Gibt an, ob der #BS_ImageLoader ein Bild lesen kann. + @param pFileData ein Pointer auf die kompletten Daten des Bildes. + @param FileSize die Größe der Daten in Byte. + @return Gibt true zurück, wenn der #BS_ImageLoader das Bild lesen kann, ansonsten false. + @remark Diese Methode muss von allen BS_ImageLoader Klassen implementiert werden. */ - virtual bool IsCorrectImageFormat(const char* pFileData, unsigned int FileSize) = 0; + virtual bool IsCorrectImageFormat(const char *pFileData, unsigned int FileSize) = 0; /** - @brief Lädt eine Bilddatei. - @param pFileData ein Pointer auf die Bilddaten. - @param FileSize die Größe der Bilddaten in Byte. - @param ColorFormat gibt das gewünschte Farbformat an, in das die Bilddaten konvertiert werden sollen.
- Folgende Farbformate werden unterstützt: - - BS_GraphicEngine::CF_RGB16 - - BS_GraphicEngine::CF_RGB15 - - BS_GraphicEngine::CF_RGB16_INTERLEAVED - - BS_GraphicEngine::CF_RGB15_INTERLEAVED - - BS_GraphicEngine::CF_ARGB32 - @param pUncompressedData nach erfolgreichen Laden zeigt dieser Pointer auf die enpackten und konvertierten Bilddaten. - @param Width gibt nach erfolgreichen Laden die Breite des geladenen Bildes an. - @param Height gibt nach erfolgreichen Laden die Höhe des geladenen Bildes an. - @param Pitch gibt nach erfolgreichen Laden die Länge einer Bildzeile in Byte an. - @return Gibt false zurück, falls das Laden fehlgeschlagen ist. - @remark Die Größe der Ausgabedaten in Bytes kann wie folgt berechnet werden: Pitch * Height. - @remark Es darf nicht vergessen werden, die Ausgabedaten nach erfolgter Benutzung mit delete freizugeben. - @remark Diese Methode muss von allen BS_ImageLoader Klassen implementiert werden. + @brief Lädt eine Bilddatei. + @param pFileData ein Pointer auf die Bilddaten. + @param FileSize die Größe der Bilddaten in Byte. + @param ColorFormat gibt das gewünschte Farbformat an, in das die Bilddaten konvertiert werden sollen.
+ Folgende Farbformate werden unterstützt: + - BS_GraphicEngine::CF_RGB16 + - BS_GraphicEngine::CF_RGB15 + - BS_GraphicEngine::CF_RGB16_INTERLEAVED + - BS_GraphicEngine::CF_RGB15_INTERLEAVED + - BS_GraphicEngine::CF_ARGB32 + @param pUncompressedData nach erfolgreichen Laden zeigt dieser Pointer auf die enpackten und konvertierten Bilddaten. + @param Width gibt nach erfolgreichen Laden die Breite des geladenen Bildes an. + @param Height gibt nach erfolgreichen Laden die Höhe des geladenen Bildes an. + @param Pitch gibt nach erfolgreichen Laden die Länge einer Bildzeile in Byte an. + @return Gibt false zurück, falls das Laden fehlgeschlagen ist. + @remark Die Größe der Ausgabedaten in Bytes kann wie folgt berechnet werden: Pitch * Height. + @remark Es darf nicht vergessen werden, die Ausgabedaten nach erfolgter Benutzung mit delete freizugeben. + @remark Diese Methode muss von allen BS_ImageLoader Klassen implementiert werden. */ - virtual bool DecodeImage(const char* pFileData, unsigned int FileSize, - BS_GraphicEngine::COLOR_FORMATS ColorFormat, - char*& pUncompressedData, - int& Width, int& Height, - int& Pitch) = 0; + virtual bool DecodeImage(const char *pFileData, unsigned int FileSize, + BS_GraphicEngine::COLOR_FORMATS ColorFormat, + char*& pUncompressedData, + int &Width, int &Height, + int &Pitch) = 0; /** - @brief Liest die Bildeigenschaften aus. - @param pFileData ein Pointer auf die Bilddaten. - @param FileSize die Größe des Bilddaten in Byte. - @param ColorFormat enthält nach einem erfolgreichem Aufruf das Farbformat des Bildes. - @param Width enthält nach einem erfolgreichem Aufruf die Breite des Bildes in Pixeln. - @param Height enthält nach einem erfolgreichem Aufruf die Höhe des Bildes in Pixeln. - @return Gibt false zurück, wenn die Bildeigenschaften nicht ausgelesen werden konnten. - @remark Es darf nicht vergessen werden, die Ausgabedaten nach erfolgter Benutzung mit delete freizugeben. - @remark Diese Methode muss von allen BS_ImageLoader Klassen implementiert werden. + @brief Liest die Bildeigenschaften aus. + @param pFileData ein Pointer auf die Bilddaten. + @param FileSize die Größe des Bilddaten in Byte. + @param ColorFormat enthält nach einem erfolgreichem Aufruf das Farbformat des Bildes. + @param Width enthält nach einem erfolgreichem Aufruf die Breite des Bildes in Pixeln. + @param Height enthält nach einem erfolgreichem Aufruf die Höhe des Bildes in Pixeln. + @return Gibt false zurück, wenn die Bildeigenschaften nicht ausgelesen werden konnten. + @remark Es darf nicht vergessen werden, die Ausgabedaten nach erfolgter Benutzung mit delete freizugeben. + @remark Diese Methode muss von allen BS_ImageLoader Klassen implementiert werden. */ - virtual bool ImageProperties(const char* pFileData, unsigned int FileSize, - BS_GraphicEngine::COLOR_FORMATS& ColorFormat, - int& Width, int& Height) = 0; + virtual bool ImageProperties(const char *pFileData, unsigned int FileSize, + BS_GraphicEngine::COLOR_FORMATS &ColorFormat, + int &Width, int &Height) = 0; //@} @@ -202,69 +200,62 @@ protected: /** @name Konvertierungsmethoden */ /** - @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_RGB16 Farbformat. - @param pSrcData ein Pointer auf die Quelldaten. - @param pDestData ein Pointer auf den Zielpuffern. - @param Width die Anzahl der Pixel in der Bildzeile. - @remark Es gilt zu beachten, dass der Zielpuffer ausreichend groß ist.
- Es sind mindestens Width * 2 Byte notwendig. + @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_RGB16 Farbformat. + @param pSrcData ein Pointer auf die Quelldaten. + @param pDestData ein Pointer auf den Zielpuffern. + @param Width die Anzahl der Pixel in der Bildzeile. + @remark Es gilt zu beachten, dass der Zielpuffer ausreichend groß ist.
+ Es sind mindestens Width * 2 Byte notwendig. */ - static void RowARGB32ToRGB16(unsigned char* pSrcData, unsigned char* pDestData, unsigned int Width) - { - for (unsigned int i = 0; i < Width; i++) - { - ((uint16_t*)pDestData)[i] = ((pSrcData[2] >> 3) << 11) | ((pSrcData[1] >> 2) << 5) | (pSrcData[0] >> 3); + static void RowARGB32ToRGB16(unsigned char *pSrcData, unsigned char *pDestData, unsigned int Width) { + for (unsigned int i = 0; i < Width; i++) { + ((uint16_t *)pDestData)[i] = ((pSrcData[2] >> 3) << 11) | ((pSrcData[1] >> 2) << 5) | (pSrcData[0] >> 3); pSrcData += 4; } } - + /** - @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_RGB15 Farbformat. - @param pSrcData ein Pointer auf die Quelldaten. - @param pDestData ein Pointer auf den Zielpuffern. - @param Width die Anzahl der Pixel in der Bildzeile. - @remark Es gilt zu beachten, dass der Zielpuffer ausreichend groß ist.
- Es sind mindestens Width * 2 Byte notwendig. + @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_RGB15 Farbformat. + @param pSrcData ein Pointer auf die Quelldaten. + @param pDestData ein Pointer auf den Zielpuffern. + @param Width die Anzahl der Pixel in der Bildzeile. + @remark Es gilt zu beachten, dass der Zielpuffer ausreichend groß ist.
+ Es sind mindestens Width * 2 Byte notwendig. */ - static void RowARGB32ToRGB15(unsigned char* pSrcData, unsigned char* pDestData, unsigned int Width) - { - for (unsigned int i = 0; i < Width; i++) - { - ((uint16_t*)pDestData)[i] = ((pSrcData[2] >> 3) << 10) | ((pSrcData[1] >> 3) << 5) | (pSrcData[0] >> 3); + static void RowARGB32ToRGB15(unsigned char *pSrcData, unsigned char *pDestData, unsigned int Width) { + for (unsigned int i = 0; i < Width; i++) { + ((uint16_t *)pDestData)[i] = ((pSrcData[2] >> 3) << 10) | ((pSrcData[1] >> 3) << 5) | (pSrcData[0] >> 3); pSrcData += 4; } } /** - @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_RGB16_INTERLEAVED Farbformat. - @param pSrcData ein Pointer auf die Quelldaten. - @param pDestData ein Pointer auf den Zielpuffern. - @param Width die Anzahl der Pixel in der Bildzeile. - @remark Es gilt zu beachten, dass der Zielpuffer ausreichend groß sein muss.
- Es sind mindestens ((Width + 3) / 4) * 12 Byte notwendig. + @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_RGB16_INTERLEAVED Farbformat. + @param pSrcData ein Pointer auf die Quelldaten. + @param pDestData ein Pointer auf den Zielpuffern. + @param Width die Anzahl der Pixel in der Bildzeile. + @remark Es gilt zu beachten, dass der Zielpuffer ausreichend groß sein muss.
+ Es sind mindestens ((Width + 3) / 4) * 12 Byte notwendig. */ - static void RowARGB32ToRGB16_INTERLEAVED(unsigned char* pSrcData, unsigned char* pDestData, unsigned int Width) - { + static void RowARGB32ToRGB16_INTERLEAVED(unsigned char *pSrcData, unsigned char *pDestData, unsigned int Width) { // Die Pixelblöcke erstellen, dabei werden immer jeweils 4 Pixel zu einem Block zusammengefasst unsigned int BlockFillCount = 0; unsigned int AlphaBlock = 0; - for (unsigned int i = 0; i < Width; i++) - { + for (unsigned int i = 0; i < Width; i++) { // Alphawert in den Alphablock schreiben AlphaBlock = (AlphaBlock >> 8) | (pSrcData[BlockFillCount * 4 + 3] << 24); - + // Füllstand der Pixelblockes aktualisieren BlockFillCount++; // Sobald 4 Alphawerte gesammelt wurden, oder die Zeile zu Ende ist wird der Pixelblock in den Zielpuffer geschrieben - if (BlockFillCount == 4 || i == (Width - 1)) - { + if (BlockFillCount == 4 || i == (Width - 1)) { // Falls der AlphaBlock nicht ganz gefüllt ist muss geshiftet werden um sicherzustellen, dass die Alphawerte // "left aligned" sind. AlphaBlock >>= (4 - BlockFillCount) * 8; // Alphablock schreiben - *((unsigned int*)pDestData) = AlphaBlock; + *((unsigned int *)pDestData) = AlphaBlock; pDestData += 4; // Pixel konvertieren und schreiben @@ -283,35 +274,32 @@ protected: } /** - @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_RGB15_INTERLEAVED Farbformat. - @param pSrcData ein Pointer auf die Quelldaten. - @param pDestData ein Pointer auf den Zielpuffern. - @param Width die Anzahl der Pixel in der Bildzeile. - @remark Es gilt zu beachten, dass der Zielpuffer ausreichend groß ist.
- Es sind mindestens (Width / 4 + Width % 4) * 3 Byte notwendig. + @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_RGB15_INTERLEAVED Farbformat. + @param pSrcData ein Pointer auf die Quelldaten. + @param pDestData ein Pointer auf den Zielpuffern. + @param Width die Anzahl der Pixel in der Bildzeile. + @remark Es gilt zu beachten, dass der Zielpuffer ausreichend groß ist.
+ Es sind mindestens (Width / 4 + Width % 4) * 3 Byte notwendig. */ - static void RowARGB32ToRGB15_INTERLEAVED(unsigned char* pSrcData, unsigned char* pDestData, unsigned int Width) - { + static void RowARGB32ToRGB15_INTERLEAVED(unsigned char *pSrcData, unsigned char *pDestData, unsigned int Width) { // Die Pixelblöcke erstellen, dabei werden immer jeweils 4 Pixel zu einem Block zusammengefasst unsigned int BlockFillCount = 0; unsigned int AlphaBlock = 0; - for (unsigned int i = 0; i < Width; i++) - { + for (unsigned int i = 0; i < Width; i++) { // Alphawert in den Alphablock schreiben AlphaBlock = (AlphaBlock >> 8) | (pSrcData[BlockFillCount * 4 + 3] << 24); - + // Füllstand der Pixelblockes aktualisieren BlockFillCount++; // Sobald 4 Alphawerte gesammelt wurden, oder die Zeile zu Ende ist wird der Pixelblock in den Zielpuffer geschrieben - if (BlockFillCount == 4 || i == (Width - 1)) - { + if (BlockFillCount == 4 || i == (Width - 1)) { // Falls der AlphaBlock nicht ganz gefüllt ist muss geshiftet werden um sicherzustellen, dass die Alphawerte // "left aligned" sind. AlphaBlock >>= (4 - BlockFillCount) * 8; // Alphablock schreiben - *((unsigned int*)pDestData) = AlphaBlock; + *((unsigned int *)pDestData) = AlphaBlock; pDestData += 4; // Pixel konvertieren und schreiben @@ -330,15 +318,13 @@ protected: } /** - @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_BGRA32 Farbformat. - @param pSrcData ein Pointer auf die Quelldaten. - @param pDestData ein Pointer auf den Zielpuffern. - @param Width die Anzahl der Pixel in der Bildzeile. + @brief Konvertiert eine Bildzeile mit ARGB Pixeldaten in das BS_GraphicEngine::CF_BGRA32 Farbformat. + @param pSrcData ein Pointer auf die Quelldaten. + @param pDestData ein Pointer auf den Zielpuffern. + @param Width die Anzahl der Pixel in der Bildzeile. */ - static void RowARGB32ToABGR32(unsigned char* pSrcData, unsigned char* pDestData, unsigned int Width) - { - for (unsigned int i = 0; i < Width; ++i) - { + static void RowARGB32ToABGR32(unsigned char *pSrcData, unsigned char *pDestData, unsigned int Width) { + for (unsigned int i = 0; i < Width; ++i) { *pDestData++ = pSrcData[2]; *pDestData++ = pSrcData[1]; *pDestData++ = pSrcData[0]; @@ -351,25 +337,25 @@ protected: private: /** - @brief Erzeugt je eine Instanz aller BS_ImageLoader Klassen und fügt diese in eine interne Liste ein. Diese werden dann beim - Laden von Bildern benutzt. - @remark Die Klassen müssen in der Datei imageloader_ids.h eingetragen sein, damit sie an dieser Stelle berücksichtigt werden. + @brief Erzeugt je eine Instanz aller BS_ImageLoader Klassen und fügt diese in eine interne Liste ein. Diese werden dann beim + Laden von Bildern benutzt. + @remark Die Klassen müssen in der Datei imageloader_ids.h eingetragen sein, damit sie an dieser Stelle berücksichtigt werden. */ static void _InitializeLoaderList(); /** - @brief Zerstört alle Instanzen von BS_ImageLoader Klassen, die in dieser Klasse registriert sind. + @brief Zerstört alle Instanzen von BS_ImageLoader Klassen, die in dieser Klasse registriert sind. */ static void _DeinitializeLoaderList(); /** - @brief Sucht zu Bilddaten ein BS_ImageLoader Objekt, dass die Bilddaten dekodieren kann. - @return Gibt einen Pointer auf ein passendes BS_ImageLoader Objekt zurück, oder NULL, wenn kein passendes Objekt gefunden wurde. + @brief Sucht zu Bilddaten ein BS_ImageLoader Objekt, dass die Bilddaten dekodieren kann. + @return Gibt einen Pointer auf ein passendes BS_ImageLoader Objekt zurück, oder NULL, wenn kein passendes Objekt gefunden wurde. */ - static BS_ImageLoader* _FindSuitableImageLoader(const char* pFileData, unsigned int FileSize); + static BS_ImageLoader *_FindSuitableImageLoader(const char *pFileData, unsigned int FileSize); - static std::list _ImageLoaderList; // Die Liste aller BS_ImageLoader-Objekte - static bool _ImageLoaderListInitialized; // Gibt an, ob die Liste schon intialisiert wurde + static std::list _ImageLoaderList; // Die Liste aller BS_ImageLoader-Objekte + static bool _ImageLoaderListInitialized; // Gibt an, ob die Liste schon intialisiert wurde }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/image/imageloader_ids.h b/engines/sword25/gfx/image/imageloader_ids.h index 74c5c3429a..bde6293f50 100644 --- a/engines/sword25/gfx/image/imageloader_ids.h +++ b/engines/sword25/gfx/image/imageloader_ids.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -33,12 +33,12 @@ */ /* - imageloader_ids.h - ----------------- - In dieser Datei sind alle ImageLoader verzeichnet. - JEDER neuer ImageLoader muss hier eingetragen werden, ansonsten wird er beim Laden eines Bildes nicht berücksichtigt. + imageloader_ids.h + ----------------- + In dieser Datei sind alle ImageLoader verzeichnet. + JEDER neuer ImageLoader muss hier eingetragen werden, ansonsten wird er beim Laden eines Bildes nicht berücksichtigt. - Autor: Malte Thiesen + Autor: Malte Thiesen */ #include "sword25/gfx/image/imageloader.h" @@ -51,9 +51,8 @@ namespace Sword25 { // Die Tabelle enthält Pointer auf statische Member-Funktionen innerhalb der Klassen, die eine Instanz der Klasse // erzeugen -typedef BS_ImageLoader* (*BS_IMAGELOADER_NEW)(); -const BS_IMAGELOADER_NEW BS_IMAGELOADER_IDS[] = -{ +typedef BS_ImageLoader*(*BS_IMAGELOADER_NEW)(); +const BS_IMAGELOADER_NEW BS_IMAGELOADER_IDS[] = { BS_PNGLoader::CreateInstance, BS_B25SLoader::CreateInstance, }; diff --git a/engines/sword25/gfx/image/pngloader.cpp b/engines/sword25/gfx/image/pngloader.cpp index 693874314f..1c896a7675 100644 --- a/engines/sword25/gfx/image/pngloader.cpp +++ b/engines/sword25/gfx/image/pngloader.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -48,66 +48,58 @@ namespace Sword25 { // Konstruktor / Destruktor // ----------------------------------------------------------------------------- -BS_PNGLoader::BS_PNGLoader() -{ +BS_PNGLoader::BS_PNGLoader() { } // ----------------------------------------------------------------------------- // Laden // ----------------------------------------------------------------------------- -static void png_user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) -{ - memcpy(data, (char*)png_ptr->io_ptr, length); - png_ptr->io_ptr = (void*)((png_size_t)png_ptr->io_ptr + length); +static void png_user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { + memcpy(data, (char *)png_ptr->io_ptr, length); + png_ptr->io_ptr = (void *)((png_size_t)png_ptr->io_ptr + length); } // ----------------------------------------------------------------------------- -bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, - int & Width, int & Height, int & Pitch) -{ +bool BS_PNGLoader::DoDecodeImage(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, + int &Width, int &Height, int &Pitch) { png_structp png_ptr = NULL; png_infop info_ptr = NULL; - png_bytep RawDataBuffer = NULL; - png_bytep* pRowPtr = NULL; + png_bytep RawDataBuffer = NULL; + png_bytep *pRowPtr = NULL; - int BitDepth; - int ColorType; - int InterlaceType; - int i; + int BitDepth; + int ColorType; + int InterlaceType; + int i; // Zielfarbformat überprüfen if (ColorFormat != BS_GraphicEngine::CF_RGB16 && - ColorFormat != BS_GraphicEngine::CF_RGB15 && - ColorFormat != BS_GraphicEngine::CF_RGB16_INTERLEAVED && - ColorFormat != BS_GraphicEngine::CF_RGB15_INTERLEAVED && - ColorFormat != BS_GraphicEngine::CF_ARGB32 && - ColorFormat != BS_GraphicEngine::CF_ABGR32) - { + ColorFormat != BS_GraphicEngine::CF_RGB15 && + ColorFormat != BS_GraphicEngine::CF_RGB16_INTERLEAVED && + ColorFormat != BS_GraphicEngine::CF_RGB15_INTERLEAVED && + ColorFormat != BS_GraphicEngine::CF_ARGB32 && + ColorFormat != BS_GraphicEngine::CF_ABGR32) { BS_LOG_ERRORLN("Illegal or unsupported color format."); return false; } - try - { + try { // PNG Signatur überprüfen - if (!png_check_sig(reinterpret_cast(const_cast(FileDataPtr)), 8)) - { + if (!png_check_sig(reinterpret_cast(const_cast(FileDataPtr)), 8)) { throw(0); } // Die beiden PNG Strukturen erstellen png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) - { + if (!png_ptr) { BS_LOG_ERRORLN("Could not create libpng read struct."); throw(0); } info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) - { + if (!info_ptr) { BS_LOG_ERRORLN("Could not create libpng info struct."); throw(0); } @@ -116,13 +108,13 @@ bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize if (setjmp(png_jmpbuf(png_ptr))) throw(0); // Alternative Lesefunktion benutzen - png_set_read_fn(png_ptr, (void*)FileDataPtr, png_user_read_data); + png_set_read_fn(png_ptr, (void *)FileDataPtr, png_user_read_data); // PNG Header einlesen png_read_info(png_ptr, info_ptr); // PNG Informationen auslesen - png_get_IHDR(png_ptr, info_ptr, (unsigned long*)&Width, (unsigned long*)&Height, &BitDepth, &ColorType, &InterlaceType, NULL, NULL); + png_get_IHDR(png_ptr, info_ptr, (unsigned long *)&Width, (unsigned long *)&Height, &BitDepth, &ColorType, &InterlaceType, NULL, NULL); // Pitch des Ausgabebildes berechnen Pitch = BS_GraphicEngine::CalcPitch(ColorFormat, Width); @@ -130,8 +122,7 @@ bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize // Speicher für die endgültigen Bilddaten reservieren // Dieses geschieht vor dem reservieren von Speicher für temporäre Bilddaten um die Fragmentierung des Speichers gering zu halten UncompressedDataPtr = new char[Pitch * Height]; - if (!UncompressedDataPtr) - { + if (!UncompressedDataPtr) { BS_LOG_ERRORLN("Could not allocate memory for output image."); throw(0); } @@ -146,7 +137,7 @@ bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_expand(png_ptr); if (ColorType == PNG_COLOR_TYPE_GRAY || - ColorType == PNG_COLOR_TYPE_GRAY_ALPHA) + ColorType == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(png_ptr); png_set_bgr(png_ptr); @@ -156,62 +147,58 @@ bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize // Nachdem die Transformationen registriert wurden, werden die Bilddaten erneut eingelesen png_read_update_info(png_ptr, info_ptr); - png_get_IHDR(png_ptr, info_ptr, (unsigned long*)&Width, (unsigned long*)&Height, &BitDepth, &ColorType, NULL, NULL, NULL); + png_get_IHDR(png_ptr, info_ptr, (unsigned long *)&Width, (unsigned long *)&Height, &BitDepth, &ColorType, NULL, NULL, NULL); // PNGs ohne Interlacing werden Zeilenweise eingelesen - if (InterlaceType == PNG_INTERLACE_NONE) - { + if (InterlaceType == PNG_INTERLACE_NONE) { // Speicher für eine Bildzeile reservieren RawDataBuffer = new png_byte[png_get_rowbytes(png_ptr, info_ptr)]; - if (!RawDataBuffer) - { + if (!RawDataBuffer) { BS_LOG_ERRORLN("Could not allocate memory for row buffer."); throw(0); } // Bilddaten zeilenweise einlesen und in das gewünschte Zielformat konvertieren - for (i = 0; i < Height; i++) - { + for (i = 0; i < Height; i++) { // Zeile einlesen png_read_row(png_ptr, RawDataBuffer, NULL); // Zeile konvertieren - switch (ColorFormat) - { + switch (ColorFormat) { case BS_GraphicEngine::CF_RGB16: - RowARGB32ToRGB16((unsigned char*)RawDataBuffer, - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToRGB16((unsigned char *)RawDataBuffer, + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; case BS_GraphicEngine::CF_RGB15: - RowARGB32ToRGB15((unsigned char*)RawDataBuffer, - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToRGB15((unsigned char *)RawDataBuffer, + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; case BS_GraphicEngine::CF_RGB16_INTERLEAVED: - RowARGB32ToRGB16_INTERLEAVED((unsigned char*)RawDataBuffer, - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToRGB16_INTERLEAVED((unsigned char *)RawDataBuffer, + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; case BS_GraphicEngine::CF_RGB15_INTERLEAVED: - RowARGB32ToRGB15_INTERLEAVED((unsigned char*)RawDataBuffer, - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToRGB15_INTERLEAVED((unsigned char *)RawDataBuffer, + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; case BS_GraphicEngine::CF_ARGB32: memcpy(&UncompressedDataPtr[i * Pitch], - RawDataBuffer, - Pitch); + RawDataBuffer, + Pitch); break; case BS_GraphicEngine::CF_ABGR32: - RowARGB32ToABGR32((unsigned char*)RawDataBuffer, - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToABGR32((unsigned char *)RawDataBuffer, + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; default: @@ -220,20 +207,17 @@ bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize } } // PNGs mit Interlacing werden an einem Stück eingelesen - else - { + else { // Speicher für das komplette Bild reservieren RawDataBuffer = new png_byte[png_get_rowbytes(png_ptr, info_ptr) * Height]; - if (!RawDataBuffer) - { + if (!RawDataBuffer) { BS_LOG_ERRORLN("Could not allocate memory for raw image buffer."); throw(0); } // Speicher für die Rowpointer reservieren pRowPtr = new png_bytep[Height]; - if (!pRowPtr) - { + if (!pRowPtr) { BS_LOG_ERRORLN("Could not allocate memory for row pointers."); throw(0); } @@ -246,41 +230,40 @@ bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize png_read_image(png_ptr, pRowPtr); // Bilddaten zeilenweise in das gewünschte Ausgabeformat konvertieren - switch (ColorFormat) - { + switch (ColorFormat) { case BS_GraphicEngine::CF_RGB16: for (i = 0; i < Height; i++) - RowARGB32ToRGB16((unsigned char*)(&RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)]), - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToRGB16((unsigned char *)(&RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)]), + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; case BS_GraphicEngine::CF_RGB15: for (i = 0; i < Height; i++) - RowARGB32ToRGB15((unsigned char*)(&RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)]), - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToRGB15((unsigned char *)(&RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)]), + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; case BS_GraphicEngine::CF_RGB16_INTERLEAVED: for (i = 0; i < Height; i++) - RowARGB32ToRGB16_INTERLEAVED((unsigned char*)(&RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)]), - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToRGB16_INTERLEAVED((unsigned char *)(&RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)]), + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; case BS_GraphicEngine::CF_RGB15_INTERLEAVED: for (i = 0; i < Height; i++) - RowARGB32ToRGB15_INTERLEAVED((unsigned char*)(&RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)]), - (unsigned char*)&UncompressedDataPtr[i * Pitch], - Width); + RowARGB32ToRGB15_INTERLEAVED((unsigned char *)(&RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)]), + (unsigned char *)&UncompressedDataPtr[i * Pitch], + Width); break; case BS_GraphicEngine::CF_ARGB32: for (i = 0; i < Height; i++) memcpy(&UncompressedDataPtr[i * Pitch], - &RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)], - Pitch); + &RawDataBuffer[i * png_get_rowbytes(png_ptr, info_ptr)], + Pitch); break; } } @@ -296,8 +279,7 @@ bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize delete[] RawDataBuffer; } - catch(int) - { + catch (int) { delete[] pRowPtr; delete[] RawDataBuffer; if (png_ptr) png_destroy_read_struct(&png_ptr, NULL, NULL); @@ -313,40 +295,35 @@ bool BS_PNGLoader::DoDecodeImage(const char * FileDataPtr, unsigned int FileSize // ----------------------------------------------------------------------------- -bool BS_PNGLoader::DecodeImage(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, - int & Width, int & Height, int & Pitch) -{ +bool BS_PNGLoader::DecodeImage(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, + int &Width, int &Height, int &Pitch) { return DoDecodeImage(FileDataPtr, FileSize, ColorFormat, UncompressedDataPtr, Width, Height, Pitch); } // ----------------------------------------------------------------------------- -bool BS_PNGLoader::DoImageProperties(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS & ColorFormat, int & Width, int & Height) -{ +bool BS_PNGLoader::DoImageProperties(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS &ColorFormat, int &Width, int &Height) { // PNG Signatur überprüfen if (!DoIsCorrectImageFormat(FileDataPtr, FileSize)) return false; png_structp png_ptr = NULL; png_infop info_ptr = NULL; - try - { + try { // Die beiden PNG Strukturen erstellen png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) - { + if (!png_ptr) { BS_LOG_ERRORLN("Could not create libpng read struct."); throw(0); } info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) - { + if (!info_ptr) { BS_LOG_ERRORLN("Could not create libpng info struct."); throw(0); } // Alternative Lesefunktion benutzen - png_set_read_fn(png_ptr, (void*)FileDataPtr, png_user_read_data); + png_set_read_fn(png_ptr, (void *)FileDataPtr, png_user_read_data); // PNG Header einlesen png_read_info(png_ptr, info_ptr); @@ -354,7 +331,7 @@ bool BS_PNGLoader::DoImageProperties(const char * FileDataPtr, unsigned int File // PNG Informationen auslesen int BitDepth; int ColorType; - png_get_IHDR(png_ptr, info_ptr, (unsigned long*)&Width, (unsigned long*)&Height, &BitDepth, &ColorType, NULL, NULL, NULL); + png_get_IHDR(png_ptr, info_ptr, (unsigned long *)&Width, (unsigned long *)&Height, &BitDepth, &ColorType, NULL, NULL, NULL); // PNG-ColorType in BS ColorFormat konvertieren. if (ColorType & PNG_COLOR_MASK_ALPHA || png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) @@ -366,8 +343,7 @@ bool BS_PNGLoader::DoImageProperties(const char * FileDataPtr, unsigned int File png_destroy_read_struct(&png_ptr, &info_ptr, NULL); } - catch (int) - { + catch (int) { if (png_ptr) png_destroy_read_struct(&png_ptr, NULL, NULL); if (info_ptr) png_destroy_read_struct(NULL, &info_ptr, NULL); @@ -381,8 +357,7 @@ bool BS_PNGLoader::DoImageProperties(const char * FileDataPtr, unsigned int File // ----------------------------------------------------------------------------- -bool BS_PNGLoader::ImageProperties(const char* FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS & ColorFormat, int & Width, int & Height) -{ +bool BS_PNGLoader::ImageProperties(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS &ColorFormat, int &Width, int &Height) { return DoImageProperties(FileDataPtr, FileSize, ColorFormat, Width, Height); } @@ -390,18 +365,16 @@ bool BS_PNGLoader::ImageProperties(const char* FileDataPtr, unsigned int FileSiz // Header überprüfen // ----------------------------------------------------------------------------- -bool BS_PNGLoader::DoIsCorrectImageFormat(const char * FileDataPtr, unsigned int FileSize) -{ +bool BS_PNGLoader::DoIsCorrectImageFormat(const char *FileDataPtr, unsigned int FileSize) { if (FileSize > 8) - return png_check_sig((unsigned char*)FileDataPtr, 8) ? true : false; + return png_check_sig((unsigned char *)FileDataPtr, 8) ? true : false; else return false; } // ----------------------------------------------------------------------------- -bool BS_PNGLoader::IsCorrectImageFormat(const char* FileDataPtr, unsigned int FileSize) -{ +bool BS_PNGLoader::IsCorrectImageFormat(const char *FileDataPtr, unsigned int FileSize) { return DoIsCorrectImageFormat(FileDataPtr, FileSize); } diff --git a/engines/sword25/gfx/image/pngloader.h b/engines/sword25/gfx/image/pngloader.h index a4ce28fbe5..85d12a7a94 100644 --- a/engines/sword25/gfx/image/pngloader.h +++ b/engines/sword25/gfx/image/pngloader.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -33,11 +33,11 @@ */ /* - BS_PNGLoader - ------------ - BS_ImageLoader-Klasse zum Laden von PNG-Dateien + BS_PNGLoader + ------------ + BS_ImageLoader-Klasse zum Laden von PNG-Dateien - Autor: Malte Thiesen + Autor: Malte Thiesen */ #ifndef SWORD25_PNGLOADER2_H @@ -50,32 +50,30 @@ namespace Sword25 { // Klassendefinition -class BS_PNGLoader : public BS_ImageLoader -{ +class BS_PNGLoader : public BS_ImageLoader { public: - static BS_ImageLoader* CreateInstance() - { - #include "sword25/kernel/memlog_off.h" - return (BS_ImageLoader*) new BS_PNGLoader(); - #include "sword25/kernel/memlog_on.h" + static BS_ImageLoader *CreateInstance() { +#include "sword25/kernel/memlog_off.h" + return (BS_ImageLoader *) new BS_PNGLoader(); +#include "sword25/kernel/memlog_on.h" } // Alle virtuellen Methoden von BS_ImageLoader sind hier als static-Methode implementiert, damit sie von BS_B25SLoader aufgerufen werden können. // Die virtuellen Methoden rufen diese Methoden auf. - static bool DoIsCorrectImageFormat(const char * FileDataPtr, unsigned int FileSize); - static bool DoDecodeImage(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, - int & Width, int & Height, int & Pitch); - static bool DoImageProperties(const char * FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS & ColorFormat, int & Width, int & Height); + static bool DoIsCorrectImageFormat(const char *FileDataPtr, unsigned int FileSize); + static bool DoDecodeImage(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS ColorFormat, char * & UncompressedDataPtr, + int &Width, int &Height, int &Pitch); + static bool DoImageProperties(const char *FileDataPtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS &ColorFormat, int &Width, int &Height); protected: BS_PNGLoader(); - bool DecodeImage(const char * pFileData, unsigned int FileSize, - BS_GraphicEngine::COLOR_FORMATS ColorFormat, - char * & pUncompressedData, - int & Width, int & Height, - int & Pitch); - bool IsCorrectImageFormat(const char * FileDataPtr, unsigned int FileSize); - bool ImageProperties(const char * FileDatePtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS & ColorFormat, int & Width, int & Height); + bool DecodeImage(const char *pFileData, unsigned int FileSize, + BS_GraphicEngine::COLOR_FORMATS ColorFormat, + char * & pUncompressedData, + int &Width, int &Height, + int &Pitch); + bool IsCorrectImageFormat(const char *FileDataPtr, unsigned int FileSize); + bool ImageProperties(const char *FileDatePtr, unsigned int FileSize, BS_GraphicEngine::COLOR_FORMATS &ColorFormat, int &Width, int &Height); }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/image/vectorimage.cpp b/engines/sword25/gfx/image/vectorimage.cpp index 5c7a5231a8..a8c84ee6b3 100644 --- a/engines/sword25/gfx/image/vectorimage.cpp +++ b/engines/sword25/gfx/image/vectorimage.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -68,111 +68,94 @@ typedef int16_t s32; // Diese Klasse ist speziell dafür ausgestattet. // ----------------------------------------------------------------------------- -class BS_VectorImage::SWFBitStream -{ +class BS_VectorImage::SWFBitStream { public: - SWFBitStream(const unsigned char * pData, unsigned int DataSize) : - m_Pos(pData), m_End(pData + DataSize), m_WordMask(0) - {} - - inline u32 GetBits(unsigned int BitCount) - { - if (BitCount == 0 || BitCount > 32) - { - throw(runtime_error("SWFBitStream::GetBits() must read at least 1 and at most 32 bits at a time")); - } - - u32 value = 0; - while (BitCount) - { - if (m_WordMask == 0) FlushByte(); - - value <<= 1; - value |= ((m_Word & m_WordMask) != 0) ? 1 : 0; - m_WordMask >>= 1; - - --BitCount; - } - - return value; - } - - inline s32 GetSignedBits(unsigned int BitCount) - { - // Bits einlesen - u32 Temp = GetBits(BitCount); - - // Falls das Sign-Bit gesetzt ist, den Rest des Rückgabewertes mit 1-Bits auffüllen (Sign Extension) - if (Temp & 1 << (BitCount - 1)) - return (0xffffffff << BitCount) | Temp; - else - return Temp; - } - - inline u32 GetU32() - { - u32 Byte1 = GetU8(); - u32 Byte2 = GetU8(); - u32 Byte3 = GetU8(); - u32 Byte4 = GetU8(); - - return Byte1 | (Byte2 << 8) | (Byte3 << 16) | (Byte4 << 24); - } - - inline u16 GetU16() - { - u32 Byte1 = GetU8(); - u32 Byte2 = GetU8(); - - return Byte1 | (Byte2 << 8); - } - - inline u8 GetU8() - { - FlushByte(); - u8 Value = m_Word; - m_WordMask = 0; - FlushByte(); - - return Value; - } - - inline void FlushByte() - { - if (m_WordMask != 128) - { - if (m_Pos >= m_End) - { - throw(runtime_error("Attempted to read past end of file")); - } - else - { - m_Word = *m_Pos++; - m_WordMask = 128; - } - } - } - - inline void SkipBytes(unsigned int SkipLength) - { - FlushByte(); - if (m_Pos + SkipLength >= m_End) - { - throw(runtime_error("Attempted to read past end of file")); - } - else - { - m_Pos += SkipLength; - m_Word = *(m_Pos - 1); - } - } + SWFBitStream(const unsigned char *pData, unsigned int DataSize) : + m_Pos(pData), m_End(pData + DataSize), m_WordMask(0) + {} + + inline u32 GetBits(unsigned int BitCount) { + if (BitCount == 0 || BitCount > 32) { + throw(runtime_error("SWFBitStream::GetBits() must read at least 1 and at most 32 bits at a time")); + } + + u32 value = 0; + while (BitCount) { + if (m_WordMask == 0) FlushByte(); + + value <<= 1; + value |= ((m_Word & m_WordMask) != 0) ? 1 : 0; + m_WordMask >>= 1; + + --BitCount; + } + + return value; + } + + inline s32 GetSignedBits(unsigned int BitCount) { + // Bits einlesen + u32 Temp = GetBits(BitCount); + + // Falls das Sign-Bit gesetzt ist, den Rest des Rückgabewertes mit 1-Bits auffüllen (Sign Extension) + if (Temp & 1 << (BitCount - 1)) + return (0xffffffff << BitCount) | Temp; + else + return Temp; + } + + inline u32 GetU32() { + u32 Byte1 = GetU8(); + u32 Byte2 = GetU8(); + u32 Byte3 = GetU8(); + u32 Byte4 = GetU8(); + + return Byte1 | (Byte2 << 8) | (Byte3 << 16) | (Byte4 << 24); + } + + inline u16 GetU16() { + u32 Byte1 = GetU8(); + u32 Byte2 = GetU8(); + + return Byte1 | (Byte2 << 8); + } + + inline u8 GetU8() { + FlushByte(); + u8 Value = m_Word; + m_WordMask = 0; + FlushByte(); + + return Value; + } + + inline void FlushByte() { + if (m_WordMask != 128) { + if (m_Pos >= m_End) { + throw(runtime_error("Attempted to read past end of file")); + } else { + m_Word = *m_Pos++; + m_WordMask = 128; + } + } + } + + inline void SkipBytes(unsigned int SkipLength) { + FlushByte(); + if (m_Pos + SkipLength >= m_End) { + throw(runtime_error("Attempted to read past end of file")); + } else { + m_Pos += SkipLength; + m_Word = *(m_Pos - 1); + } + } private: - const unsigned char * m_Pos; - const unsigned char * m_End; + const unsigned char *m_Pos; + const unsigned char *m_End; - u8 m_Word; - unsigned int m_WordMask; + u8 m_Word; + unsigned int m_WordMask; }; @@ -180,69 +163,66 @@ private: // Konstanten und Hilfsfunktionen // ----------------------------------------------------------------------------- -namespace -{ - // ----------------------------------------------------------------------------- - // Konstanten - // ----------------------------------------------------------------------------- +namespace { +// ----------------------------------------------------------------------------- +// Konstanten +// ----------------------------------------------------------------------------- - const u32 MAX_ACCEPTED_FLASH_VERSION = 3; // Die höchste Flash-Dateiversion, die vom Lader akzeptiert wird +const u32 MAX_ACCEPTED_FLASH_VERSION = 3; // Die höchste Flash-Dateiversion, die vom Lader akzeptiert wird - // ----------------------------------------------------------------------------- - // Konvertiert SWF-Rechteckdaten in einem Bitstrom in BS_Rect-Objekte - // ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// Konvertiert SWF-Rechteckdaten in einem Bitstrom in BS_Rect-Objekte +// ----------------------------------------------------------------------------- - BS_Rect FlashRectToBSRect(BS_VectorImage::SWFBitStream & bs) - { - bs.FlushByte(); +BS_Rect FlashRectToBSRect(BS_VectorImage::SWFBitStream &bs) { + bs.FlushByte(); - // Feststellen mit wie vielen Bits die einzelnen Komponenten kodiert sind - u32 BitsPerValue = bs.GetBits(5); + // Feststellen mit wie vielen Bits die einzelnen Komponenten kodiert sind + u32 BitsPerValue = bs.GetBits(5); - // Die einzelnen Komponenten einlesen - s32 XMin = bs.GetSignedBits(BitsPerValue); - s32 XMax = bs.GetSignedBits(BitsPerValue); - s32 YMin = bs.GetSignedBits(BitsPerValue); - s32 YMax = bs.GetSignedBits(BitsPerValue); + // Die einzelnen Komponenten einlesen + s32 XMin = bs.GetSignedBits(BitsPerValue); + s32 XMax = bs.GetSignedBits(BitsPerValue); + s32 YMin = bs.GetSignedBits(BitsPerValue); + s32 YMax = bs.GetSignedBits(BitsPerValue); - return BS_Rect(XMin, YMin, XMax + 1, YMax + 1); - } + return BS_Rect(XMin, YMin, XMax + 1, YMax + 1); +} - // ----------------------------------------------------------------------------- - // Konvertiert SWF-Farben in AntiGrain Farben - // ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// Konvertiert SWF-Farben in AntiGrain Farben +// ----------------------------------------------------------------------------- - agg::rgba8 FlashColorToAGGRGBA8(unsigned int FlashColor) - { - agg::rgba8 ResultColor((FlashColor >> 16) & 0xff, (FlashColor >> 8) & 0xff, FlashColor & 0xff, FlashColor >> 24); - ResultColor.premultiply(); - return ResultColor; - } +agg::rgba8 FlashColorToAGGRGBA8(unsigned int FlashColor) { + agg::rgba8 ResultColor((FlashColor >> 16) & 0xff, (FlashColor >> 8) & 0xff, FlashColor & 0xff, FlashColor >> 24); + ResultColor.premultiply(); + return ResultColor; +} - // ----------------------------------------------------------------------------- - // Berechnet die Bounding-Box eines BS_VectorImageElement - // ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// Berechnet die Bounding-Box eines BS_VectorImageElement +// ----------------------------------------------------------------------------- + +struct CBBGetId { + CBBGetId(const BS_VectorImageElement &VectorImageElement_) : VectorImageElement(VectorImageElement_) {} + unsigned operator [](unsigned i) const { + return VectorImageElement.GetPathInfo(i).GetID(); + } + const BS_VectorImageElement &VectorImageElement; +}; - struct CBBGetId - { - CBBGetId(const BS_VectorImageElement & VectorImageElement_) : VectorImageElement(VectorImageElement_) {} - unsigned operator [] (unsigned i) const { return VectorImageElement.GetPathInfo(i).GetID(); } - const BS_VectorImageElement & VectorImageElement; - }; +BS_Rect CalculateBoundingBox(const BS_VectorImageElement &VectorImageElement) { + agg::path_storage Path = VectorImageElement.GetPaths(); + CBBGetId IdSource(VectorImageElement); - BS_Rect CalculateBoundingBox(const BS_VectorImageElement & VectorImageElement) - { - agg::path_storage Path = VectorImageElement.GetPaths(); - CBBGetId IdSource(VectorImageElement); + double x1, x2, y1, y2; + agg::bounding_rect(Path, IdSource, 0, VectorImageElement.GetPathCount(), &x1, &y1, &x2, &y2); - double x1, x2, y1, y2; - agg::bounding_rect(Path, IdSource, 0, VectorImageElement.GetPathCount(), &x1, &y1, &x2, &y2); - - return BS_Rect(static_cast(x1), static_cast(y1), static_cast(x2) + 1, static_cast(y2) + 1); - } + return BS_Rect(static_cast(x1), static_cast(y1), static_cast(x2) + 1, static_cast(y2) + 1); +} } @@ -250,41 +230,36 @@ namespace // Konstruktion // ----------------------------------------------------------------------------- -BS_VectorImage::BS_VectorImage(const unsigned char * pFileData, unsigned int FileSize, bool & Success) -{ +BS_VectorImage::BS_VectorImage(const unsigned char *pFileData, unsigned int FileSize, bool &Success) { Success = false; // Bitstream-Objekt erzeugen // Im Folgenden werden die Dateidaten aus diesem ausgelesen. SWFBitStream bs(pFileData, FileSize); - try - { + try { // SWF-Signatur überprüfen u32 Signature[3]; Signature[0] = bs.GetU8(); Signature[1] = bs.GetU8(); Signature[2] = bs.GetU8(); if (Signature[0] != 'F' || - Signature[1] != 'W' || - Signature[2] != 'S') - { + Signature[1] != 'W' || + Signature[2] != 'S') { BS_LOG_ERRORLN("File is not a valid SWF-file"); return; } // Versionsangabe überprüfen u32 Version = bs.GetU8(); - if (Version > MAX_ACCEPTED_FLASH_VERSION) - { + if (Version > MAX_ACCEPTED_FLASH_VERSION) { BS_LOG_ERRORLN("File is of version %d. Highest accepted version is %d.", Version, MAX_ACCEPTED_FLASH_VERSION); return; } // Dateigröße auslesen und mit der tatsächlichen Größe vergleichen u32 StoredFileSize = bs.GetU32(); - if (StoredFileSize != FileSize) - { + if (StoredFileSize != FileSize) { BS_LOG_ERRORLN("File is not a valid SWF-file"); return; } @@ -299,8 +274,7 @@ BS_VectorImage::BS_VectorImage(const unsigned char * pFileData, unsigned int Fil // Tags parsen // Da wir uns nur für das erste DefineShape-Tag interessieren bool KeepParsing = true; - while (KeepParsing) - { + while (KeepParsing) { // Tags beginnen immer an Bytegrenzen bs.FlushByte(); @@ -310,8 +284,7 @@ BS_VectorImage::BS_VectorImage(const unsigned char * pFileData, unsigned int Fil u32 TagLength = TagTypeAndLength & 0x3f; if (TagLength == 0x3f) TagLength = bs.GetU32(); - switch (TagType) - { + switch (TagType) { case 2: // DefineShape Success = ParseDefineShape(2, bs); @@ -330,8 +303,7 @@ BS_VectorImage::BS_VectorImage(const unsigned char * pFileData, unsigned int Fil } } - catch (runtime_error & e) - { + catch (runtime_error &e) { // Fehler loggen und Funktion verlassen // Success ist somit "false" und signalisiert dem Programmierer, dass die Konstruktion fehlgeschlagen ist. BS_LOG_ERRORLN("The following exception occured while parsing a SWF-file: %s", e.what()); @@ -345,8 +317,7 @@ BS_VectorImage::BS_VectorImage(const unsigned char * pFileData, unsigned int Fil // ----------------------------------------------------------------------------- -bool BS_VectorImage::ParseDefineShape(unsigned int ShapeType, SWFBitStream & bs) -{ +bool BS_VectorImage::ParseDefineShape(unsigned int ShapeType, SWFBitStream &bs) { u32 ShapeID = bs.GetU16(); // Bounding Box auslesen @@ -368,13 +339,11 @@ bool BS_VectorImage::ParseDefineShape(unsigned int ShapeType, SWFBitStream & bs) // ------------------ bool EndOfShapeDiscovered = false; - while (!EndOfShapeDiscovered) - { + while (!EndOfShapeDiscovered) { u32 TypeFlag = bs.GetBits(1); // Non-Edge Record - if (TypeFlag == 0) - { + if (TypeFlag == 0) { // Feststellen welche Parameter gesetzt werden u32 StateNewStyles = bs.GetBits(1); u32 StateLineStyle = bs.GetBits(1); @@ -386,43 +355,37 @@ bool BS_VectorImage::ParseDefineShape(unsigned int ShapeType, SWFBitStream & bs) if (!StateNewStyles && !StateLineStyle && !StateFillStyle0 && !StateFillStyle1 && !StateMoveTo) EndOfShapeDiscovered = true; // Parameter dekodieren - else - { + else { s32 MoveDeltaX = 0; s32 MoveDeltaY = 0; - if (StateMoveTo) - { + if (StateMoveTo) { u32 MoveToBits = bs.GetBits(5); MoveDeltaX = bs.GetSignedBits(MoveToBits); MoveDeltaY = bs.GetSignedBits(MoveToBits); } - if (StateFillStyle0) - { + if (StateFillStyle0) { if (NumFillBits > 0) FillStyle0 = bs.GetBits(NumFillBits); else FillStyle0 = 0; } - if (StateFillStyle1) - { + if (StateFillStyle1) { if (NumFillBits > 0) FillStyle1 = bs.GetBits(NumFillBits); else FillStyle1 = 0; } - if (StateLineStyle) - { + if (StateLineStyle) { if (NumLineBits) LineStyle = bs.GetBits(NumLineBits); else NumLineBits = 0; } - if (StateNewStyles) - { + if (StateNewStyles) { // An dieser Stelle werden in Flash die alten Style-Definitionen verworfen und mit den neuen überschrieben. // Es wird ein neues Element begonnen. m_Elements.resize(m_Elements.size() + 1); @@ -430,8 +393,7 @@ bool BS_VectorImage::ParseDefineShape(unsigned int ShapeType, SWFBitStream & bs) } // Ein neuen Pfad erzeugen, es sei denn, es wurden nur neue Styles definiert - if (StateLineStyle || StateFillStyle0 || StateFillStyle1 || StateMoveTo) - { + if (StateLineStyle || StateFillStyle0 || StateFillStyle1 || StateMoveTo) { // Letzte Zeichenposition merken, beim Aufruf von start_new_path() wird die Zeichenpostionen auf 0, 0 zurückgesetzt double LastX = m_Elements.back().m_Paths.last_x(); double LastY = m_Elements.back().m_Paths.last_y(); @@ -449,14 +411,12 @@ bool BS_VectorImage::ParseDefineShape(unsigned int ShapeType, SWFBitStream & bs) } } // Edge Record - else - { + else { u32 EdgeFlag = bs.GetBits(1); u32 NumBits = bs.GetBits(4) + 2; // Curved edge - if (EdgeFlag == 0) - { + if (EdgeFlag == 0) { s32 ControlDeltaX = bs.GetSignedBits(NumBits); s32 ControlDeltaY = bs.GetSignedBits(NumBits); s32 AnchorDeltaX = bs.GetSignedBits(NumBits); @@ -469,19 +429,15 @@ bool BS_VectorImage::ParseDefineShape(unsigned int ShapeType, SWFBitStream & bs) m_Elements.back().m_Paths.curve3(ControlX, ControlY, AnchorX, AnchorY); } // Staight edge - else - { + else { s32 DeltaX = 0; s32 DeltaY = 0; u32 GeneralLineFlag = bs.GetBits(1); - if (GeneralLineFlag) - { + if (GeneralLineFlag) { DeltaX = bs.GetSignedBits(NumBits); DeltaY = bs.GetSignedBits(NumBits); - } - else - { + } else { u32 VertLineFlag = bs.GetBits(1); if (VertLineFlag) DeltaY = bs.GetSignedBits(NumBits); @@ -504,8 +460,7 @@ bool BS_VectorImage::ParseDefineShape(unsigned int ShapeType, SWFBitStream & bs) // ----------------------------------------------------------------------------- -bool BS_VectorImage::ParseStyles(unsigned int ShapeType, SWFBitStream & bs, unsigned int & NumFillBits, unsigned int & NumLineBits) -{ +bool BS_VectorImage::ParseStyles(unsigned int ShapeType, SWFBitStream &bs, unsigned int &NumFillBits, unsigned int &NumLineBits) { bs.FlushByte(); // Fillstyles parsen @@ -518,15 +473,12 @@ bool BS_VectorImage::ParseStyles(unsigned int ShapeType, SWFBitStream & bs, unsi // Alle Fillstyles einlesen, falls ein Fillstyle mit Typ != 0 gefunden wird, wird das Parsen abgebrochen. // Es wird nur "solid fill" (Typ 0) unterstützt. m_Elements.back().m_FillStyles.reserve(FillStyleCount); - for (unsigned int i = 0; i < FillStyleCount; ++i) - { + for (unsigned int i = 0; i < FillStyleCount; ++i) { u8 Type = bs.GetU8(); u32 Color; - if (ShapeType == 3) - { + if (ShapeType == 3) { Color = (bs.GetU8() << 16) | (bs.GetU8() << 8) | bs.GetU8() | (bs.GetU8() << 24); - } - else + } else Color = bs.GetBits(24) | (0xff << 24); if (Type != 0) return false; @@ -542,8 +494,7 @@ bool BS_VectorImage::ParseStyles(unsigned int ShapeType, SWFBitStream & bs, unsi // Alle Linestyles einlesen m_Elements.back().m_LineStyles.reserve(LineStyleCount); - for (unsigned int i = 0; i < LineStyleCount; ++i) - { + for (unsigned int i = 0; i < LineStyleCount; ++i) { double Width = bs.GetU16(); u32 Color; if (ShapeType == 3) @@ -564,8 +515,7 @@ bool BS_VectorImage::ParseStyles(unsigned int ShapeType, SWFBitStream & bs, unsi // ----------------------------------------------------------------------------- -bool BS_VectorImage::Fill(const BS_Rect* pFillRect, unsigned int Color) -{ +bool BS_VectorImage::Fill(const BS_Rect *pFillRect, unsigned int Color) { BS_LOG_ERRORLN("Fill() is not supported."); return false; } @@ -573,16 +523,14 @@ bool BS_VectorImage::Fill(const BS_Rect* pFillRect, unsigned int Color) // ----------------------------------------------------------------------------- -unsigned int BS_VectorImage::GetPixel(int X, int Y) -{ +unsigned int BS_VectorImage::GetPixel(int X, int Y) { BS_LOG_ERRORLN("GetPixel() is not supported. Returning black."); return 0; } // ----------------------------------------------------------------------------- -bool BS_VectorImage::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) -{ +bool BS_VectorImage::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) { BS_LOG_ERRORLN("SetContent() is not supported."); return 0; } diff --git a/engines/sword25/gfx/image/vectorimage.h b/engines/sword25/gfx/image/vectorimage.h index 85685121f2..f791a36f03 100644 --- a/engines/sword25/gfx/image/vectorimage.h +++ b/engines/sword25/gfx/image/vectorimage.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -53,22 +53,29 @@ namespace Sword25 { class BS_VectorImage; /** - @brief Pfadinformationen zu BS_VectorImageElement Objekten + @brief Pfadinformationen zu BS_VectorImageElement Objekten - Jedes BS_VectorImageElement besteht aus Kantenzügen, oder auch Pfaden. Jeder dieser Pfad hat Eigenschaften, die in Objekten diesen Typs - gespeichert werden. + Jedes BS_VectorImageElement besteht aus Kantenzügen, oder auch Pfaden. Jeder dieser Pfad hat Eigenschaften, die in Objekten diesen Typs + gespeichert werden. */ -class BS_VectorPathInfo -{ +class BS_VectorPathInfo { public: BS_VectorPathInfo(unsigned int ID, unsigned int LineStyle, unsigned int FillStyle0, unsigned int FillStyle1) : - m_ID(ID), m_LineStyle(LineStyle), m_FillStyle0(FillStyle0), m_FillStyle1(FillStyle1) {}; + m_ID(ID), m_LineStyle(LineStyle), m_FillStyle0(FillStyle0), m_FillStyle1(FillStyle1) {}; - unsigned int GetID() const { return m_ID; } - unsigned int GetLineStyle() const { return m_LineStyle; } - unsigned int GetFillStyle0() const { return m_FillStyle0; } - unsigned int GetFillStyle1() const { return m_FillStyle1; } + unsigned int GetID() const { + return m_ID; + } + unsigned int GetLineStyle() const { + return m_LineStyle; + } + unsigned int GetFillStyle0() const { + return m_FillStyle0; + } + unsigned int GetFillStyle1() const { + return m_FillStyle1; + } private: unsigned int m_ID; @@ -79,106 +86,136 @@ private: /** - @brief Ein Element eines Vektorbild. Ein BS_VectorImage besteht aus diesen Elementen, die jeweils einen Teil der Graphik definieren. - Werden alle Elemente eines Vektorbildes übereinandergelegt, ergibt sich das komplette Bild. + @brief Ein Element eines Vektorbild. Ein BS_VectorImage besteht aus diesen Elementen, die jeweils einen Teil der Graphik definieren. + Werden alle Elemente eines Vektorbildes übereinandergelegt, ergibt sich das komplette Bild. */ -class BS_VectorImageElement -{ -friend BS_VectorImage; +class BS_VectorImageElement { + friend BS_VectorImage; public: - const agg::path_storage & GetPaths() const { return m_Paths; } - unsigned int GetPathCount() const { return m_PathInfos.size(); } - const BS_VectorPathInfo & GetPathInfo(unsigned int PathNr) const { BS_ASSERT(PathNr < GetPathCount()); return m_PathInfos[PathNr]; } + const agg::path_storage &GetPaths() const { + return m_Paths; + } + unsigned int GetPathCount() const { + return m_PathInfos.size(); + } + const BS_VectorPathInfo &GetPathInfo(unsigned int PathNr) const { + BS_ASSERT(PathNr < GetPathCount()); + return m_PathInfos[PathNr]; + } - double GetLineStyleWidth(unsigned int LineStyle) const - { + double GetLineStyleWidth(unsigned int LineStyle) const { BS_ASSERT(LineStyle < m_LineStyles.size()); return m_LineStyles[LineStyle].Width; } - unsigned int GetLineStyleCount() const { return m_LineStyles.size(); } + unsigned int GetLineStyleCount() const { + return m_LineStyles.size(); + } - const agg::rgba8 & GetLineStyleColor(unsigned int LineStyle) const - { + const agg::rgba8 &GetLineStyleColor(unsigned int LineStyle) const { BS_ASSERT(LineStyle < m_LineStyles.size()); return m_LineStyles[LineStyle].Color; } - unsigned int GetFillStyleCount() const { return m_FillStyles.size(); } + unsigned int GetFillStyleCount() const { + return m_FillStyles.size(); + } - const agg::rgba8 & GetFillStyleColor(unsigned int FillStyle) const - { + const agg::rgba8 &GetFillStyleColor(unsigned int FillStyle) const { BS_ASSERT(FillStyle < m_FillStyles.size()); return m_FillStyles[FillStyle]; } - const BS_Rect & GetBoundingBox() const { return m_BoundingBox; } + const BS_Rect &GetBoundingBox() const { + return m_BoundingBox; + } private: - struct LineStyleType - { - LineStyleType(double Width_, const agg::rgba8 & Color_) : Width(Width_), Color(Color_) {}; - double Width; - agg::rgba8 Color; + struct LineStyleType { + LineStyleType(double Width_, const agg::rgba8 &Color_) : Width(Width_), Color(Color_) {}; + double Width; + agg::rgba8 Color; }; - agg::path_storage m_Paths; - Common::Array m_PathInfos; - Common::Array m_LineStyles; - Common::Array m_FillStyles; - BS_Rect m_BoundingBox; + agg::path_storage m_Paths; + Common::Array m_PathInfos; + Common::Array m_LineStyles; + Common::Array m_FillStyles; + BS_Rect m_BoundingBox; }; /** - @brief Eine Vektorgraphik + @brief Eine Vektorgraphik - Objekte dieser Klasse enthalten die Informationen eines SWF-Shapes. + Objekte dieser Klasse enthalten die Informationen eines SWF-Shapes. */ -class BS_VectorImage : public BS_Image -{ +class BS_VectorImage : public BS_Image { public: - BS_VectorImage(const unsigned char * pFileData, unsigned int FileSize, bool & Success); + BS_VectorImage(const unsigned char *pFileData, unsigned int FileSize, bool &Success); - unsigned int GetElementCount() const { return m_Elements.size(); } - const BS_VectorImageElement & GetElement(unsigned int ElementNr) const - { + unsigned int GetElementCount() const { + return m_Elements.size(); + } + const BS_VectorImageElement &GetElement(unsigned int ElementNr) const { BS_ASSERT(ElementNr < m_Elements.size()); return m_Elements[ElementNr]; } - const BS_Rect & GetBoundingBox() const { return m_BoundingBox; } + const BS_Rect &GetBoundingBox() const { + return m_BoundingBox; + } // // Die abstrakten Methoden von BS_Image // - virtual int GetWidth() const { return m_BoundingBox.GetWidth(); } - virtual int GetHeight() const { return m_BoundingBox.GetHeight(); } - virtual BS_GraphicEngine::COLOR_FORMATS GetColorFormat() const { return BS_GraphicEngine::CF_ARGB32; } - virtual bool Fill(const BS_Rect* pFillRect = 0, unsigned int Color = BS_RGB(0, 0, 0)); + virtual int GetWidth() const { + return m_BoundingBox.GetWidth(); + } + virtual int GetHeight() const { + return m_BoundingBox.GetHeight(); + } + virtual BS_GraphicEngine::COLOR_FORMATS GetColorFormat() const { + return BS_GraphicEngine::CF_ARGB32; + } + virtual bool Fill(const BS_Rect *pFillRect = 0, unsigned int Color = BS_RGB(0, 0, 0)); virtual unsigned int GetPixel(int X, int Y); - virtual bool IsBlitSource() const { return true; } - virtual bool IsBlitTarget() const { return false; } - virtual bool IsScalingAllowed() const { return true; } - virtual bool IsFillingAllowed() const { return false; } - virtual bool IsAlphaAllowed() const { return true; } - virtual bool IsColorModulationAllowed() const { return true; } - virtual bool IsSetContentAllowed() const { return false; } + virtual bool IsBlitSource() const { + return true; + } + virtual bool IsBlitTarget() const { + return false; + } + virtual bool IsScalingAllowed() const { + return true; + } + virtual bool IsFillingAllowed() const { + return false; + } + virtual bool IsAlphaAllowed() const { + return true; + } + virtual bool IsColorModulationAllowed() const { + return true; + } + virtual bool IsSetContentAllowed() const { + return false; + } virtual bool SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride); virtual bool Blit(int PosX = 0, int PosY = 0, - int Flipping = FLIP_NONE, - BS_Rect* pPartRect = NULL, - unsigned int Color = BS_ARGB(255, 255, 255, 255), - int Width = -1, int Height = -1); + int Flipping = FLIP_NONE, + BS_Rect *pPartRect = NULL, + unsigned int Color = BS_ARGB(255, 255, 255, 255), + int Width = -1, int Height = -1); class SWFBitStream; private: - bool ParseDefineShape(unsigned int ShapeType, SWFBitStream & bs); - bool ParseStyles(unsigned int ShapeType, SWFBitStream & bs, unsigned int & NumFillBits, unsigned int & NumLineBits); + bool ParseDefineShape(unsigned int ShapeType, SWFBitStream &bs); + bool ParseStyles(unsigned int ShapeType, SWFBitStream &bs, unsigned int &NumFillBits, unsigned int &NumLineBits); - Common::Array m_Elements; - BS_Rect m_BoundingBox; + Common::Array m_Elements; + BS_Rect m_BoundingBox; }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/image/vectorimagerenderer.cpp b/engines/sword25/gfx/image/vectorimagerenderer.cpp index fa776578e3..0c7f93c130 100644 --- a/engines/sword25/gfx/image/vectorimagerenderer.cpp +++ b/engines/sword25/gfx/image/vectorimagerenderer.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -49,10 +49,9 @@ namespace Sword25 { // CompoundShape // ----------------------------------------------------------------------------- -class CompoundShape -{ +class CompoundShape { public: - CompoundShape(const BS_VectorImageElement & VectorImageElement) : + CompoundShape(const BS_VectorImageElement &VectorImageElement) : m_ImageElement(VectorImageElement), m_Path(VectorImageElement.GetPaths()), m_Affine(), @@ -60,29 +59,28 @@ public: m_Trans(m_Curve, m_Affine) {} - unsigned operator [] (unsigned i) const - { + unsigned operator [](unsigned i) const { return m_ImageElement.GetPathInfo(i).GetID(); } - unsigned paths() const { return m_ImageElement.GetPathCount(); } + unsigned paths() const { + return m_ImageElement.GetPathCount(); + } - void rewind(unsigned path_id) - { + void rewind(unsigned path_id) { m_Trans.rewind(path_id); } - unsigned vertex(double* x, double* y) - { + unsigned vertex(double *x, double *y) { return m_Trans.vertex(x, y); } private: - const BS_VectorImageElement & m_ImageElement; - agg::path_storage m_Path; - agg::trans_affine m_Affine; - agg::conv_curve m_Curve; - agg::conv_transform< agg::conv_curve > m_Trans; + const BS_VectorImageElement &m_ImageElement; + agg::path_storage m_Path; + agg::trans_affine m_Affine; + agg::conv_curve m_Curve; + agg::conv_transform< agg::conv_curve > m_Trans; }; @@ -90,29 +88,25 @@ private: // StyleHandler // ----------------------------------------------------------------------------- -class StyleHandler -{ +class StyleHandler { public: - StyleHandler(const BS_VectorImageElement & VectorImageElement) : m_ImageElement(VectorImageElement) {} + StyleHandler(const BS_VectorImageElement &VectorImageElement) : m_ImageElement(VectorImageElement) {} - bool is_solid(unsigned int style) const - { + bool is_solid(unsigned int style) const { return true; } - const agg::rgba8 & color(unsigned style) const - { + const agg::rgba8 &color(unsigned style) const { return m_ImageElement.GetFillStyleColor(style); } - void generate_span(agg::rgba8 * span, int x, int y, unsigned len, unsigned style) - { + void generate_span(agg::rgba8 *span, int x, int y, unsigned len, unsigned style) { // Wird nicht benutzt return; } private: - const BS_VectorImageElement & m_ImageElement; + const BS_VectorImageElement &m_ImageElement; }; @@ -121,21 +115,19 @@ private: // ----------------------------------------------------------------------------- BS_VectorImageRenderer::BS_VectorImageRenderer() : - PixelFormat(rbuf) -{ + PixelFormat(rbuf) { } // ----------------------------------------------------------------------------- -bool BS_VectorImageRenderer::Render(const BS_VectorImage & VectorImage, - float ScaleFactorX, float ScaleFactorY, - unsigned int & Width, unsigned int & Height, - Common::Array & ImageData, - float LineScaleFactor, - bool NoAlphaShapes) -{ +bool BS_VectorImageRenderer::Render(const BS_VectorImage &VectorImage, + float ScaleFactorX, float ScaleFactorY, + unsigned int &Width, unsigned int &Height, + Common::Array & ImageData, + float LineScaleFactor, + bool NoAlphaShapes) { Width = static_cast(VectorImage.GetWidth() * ScaleFactorX); Height = static_cast(VectorImage.GetHeight() * ScaleFactorY); @@ -151,9 +143,8 @@ bool BS_VectorImageRenderer::Render(const BS_VectorImage & VectorImage, Scale = agg::trans_affine_translation(- VectorImage.GetBoundingBox().left, - VectorImage.GetBoundingBox().top); Scale *= agg::trans_affine_scaling(ScaleFactorX, ScaleFactorY); - for (unsigned int element = 0; element < VectorImage.GetElementCount(); ++element) - { - const BS_VectorImageElement & CurImageElement = VectorImage.GetElement(element); + for (unsigned int element = 0; element < VectorImage.GetElementCount(); ++element) { + const BS_VectorImageElement &CurImageElement = VectorImage.GetElement(element); CompoundShape ImageCompoundShape(CurImageElement); StyleHandler ImageStyleHandler(CurImageElement); @@ -164,19 +155,16 @@ bool BS_VectorImageRenderer::Render(const BS_VectorImage & VectorImage, //---------------------- CompoundRasterizer.clip_box(0, 0, Width, Height); CompoundRasterizer.reset(); - for(unsigned int i = 0; i < CurImageElement.GetPathCount(); ++i) - { + for (unsigned int i = 0; i < CurImageElement.GetPathCount(); ++i) { unsigned int FillStyle0 = CurImageElement.GetPathInfo(i).GetFillStyle0(); unsigned int FillStyle1 = CurImageElement.GetPathInfo(i).GetFillStyle1(); - if (NoAlphaShapes) - { + if (NoAlphaShapes) { if (FillStyle0 != 0 && CurImageElement.GetFillStyleColor(FillStyle0 - 1).a != 255) FillStyle0 = 0; if (FillStyle1 != 0 && CurImageElement.GetFillStyleColor(FillStyle1 - 1).a != 255) FillStyle1 = 0; } - if(FillStyle0 != 0 || FillStyle1 != 0) - { + if (FillStyle0 != 0 || FillStyle1 != 0) { CompoundRasterizer.styles(FillStyle0 - 1, FillStyle1 - 1); CompoundRasterizer.add_path(Shape, CurImageElement.GetPathInfo(i).GetID()); } @@ -189,13 +177,11 @@ bool BS_VectorImageRenderer::Render(const BS_VectorImage & VectorImage, Rasterizer.clip_box(0, 0, Width, Height); Stroke.line_join(agg::round_join); Stroke.line_cap(agg::round_cap); - for(unsigned int i = 0; i < CurImageElement.GetPathCount(); ++i) - { + for (unsigned int i = 0; i < CurImageElement.GetPathCount(); ++i) { Rasterizer.reset(); - + unsigned int CurrentLineStyle = CurImageElement.GetPathInfo(i).GetLineStyle(); - if (CurrentLineStyle != 0) - { + if (CurrentLineStyle != 0) { Stroke.width(ScaleFactorX * CurImageElement.GetLineStyleWidth(CurrentLineStyle - 1) * LineScaleFactor); Rasterizer.add_path(Stroke, CurImageElement.GetPathInfo(i).GetID()); ScanlineRenderer.color(CurImageElement.GetLineStyleColor(CurrentLineStyle - 1)); @@ -203,9 +189,9 @@ bool BS_VectorImageRenderer::Render(const BS_VectorImage & VectorImage, // Die SWF-Frames enthalten zum Teil Reste von grünen Linien, die wohl von Bernd als Umriss benutzt wurden. // Damit diese Reste nicht störend auffallen werden grüne Linien schlichtweg ignoriert. if (!(CurImageElement.GetLineStyleColor(CurrentLineStyle - 1).a == 255 && - CurImageElement.GetLineStyleColor(CurrentLineStyle - 1).r == 0 && - CurImageElement.GetLineStyleColor(CurrentLineStyle - 1).g == 255 && - CurImageElement.GetLineStyleColor(CurrentLineStyle - 1).b == 0)) + CurImageElement.GetLineStyleColor(CurrentLineStyle - 1).r == 0 && + CurImageElement.GetLineStyleColor(CurrentLineStyle - 1).g == 255 && + CurImageElement.GetLineStyleColor(CurrentLineStyle - 1).b == 0)) agg::render_scanlines(Rasterizer, Scanline, ScanlineRenderer); } } diff --git a/engines/sword25/gfx/image/vectorimagerenderer.h b/engines/sword25/gfx/image/vectorimagerenderer.h index 2712728b1f..ed073abb56 100644 --- a/engines/sword25/gfx/image/vectorimagerenderer.h +++ b/engines/sword25/gfx/image/vectorimagerenderer.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -58,20 +58,19 @@ class BS_VectorImage; /** - @brief Rendert BS_VectorImage Objekte + @brief Rendert BS_VectorImage Objekte */ -class BS_VectorImageRenderer -{ +class BS_VectorImageRenderer { public: BS_VectorImageRenderer(); - bool Render(const BS_VectorImage & VectorImage, - float ScaleFactorX, float ScaleFactorY, - unsigned int & Width, unsigned int & Height, - Common::Array & ImageData, - float LineScaleFactor = 1.0f, - bool NoAlphaShapes = false); + bool Render(const BS_VectorImage &VectorImage, + float ScaleFactorX, float ScaleFactorY, + unsigned int &Width, unsigned int &Height, + Common::Array & ImageData, + float LineScaleFactor = 1.0f, + bool NoAlphaShapes = false); private: typedef agg::pixfmt_rgba32_pre PixelFormatType; diff --git a/engines/sword25/gfx/opengl/glimage.cpp b/engines/sword25/gfx/opengl/glimage.cpp index 54d660aa7f..1434a93e4e 100644 --- a/engines/sword25/gfx/opengl/glimage.cpp +++ b/engines/sword25/gfx/opengl/glimage.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -50,21 +50,19 @@ namespace Sword25 { // CONSTRUCTION / DESTRUCTION // ----------------------------------------------------------------------------- -BS_GLImage::BS_GLImage(const Common::String & Filename, bool & Result) : +BS_GLImage::BS_GLImage(const Common::String &Filename, bool &Result) : m_Sprite(0), m_Width(0), - m_Height(0) -{ + m_Height(0) { Result = false; - BS_PackageManager * pPackage = static_cast(BS_Kernel::GetInstance()->GetService("package")); + BS_PackageManager *pPackage = static_cast(BS_Kernel::GetInstance()->GetService("package")); BS_ASSERT(pPackage); // Datei laden - char* pFileData; + char *pFileData; unsigned int FileSize; - if (!(pFileData = (char*) pPackage->GetFile(Filename, &FileSize))) - { + if (!(pFileData = (char *) pPackage->GetFile(Filename, &FileSize))) { BS_LOG_ERRORLN("File \"%s\" could not be loaded.", Filename.c_str()); return; } @@ -72,16 +70,14 @@ BS_GLImage::BS_GLImage(const Common::String & Filename, bool & Result) : // Bildeigenschaften bestimmen BS_GraphicEngine::COLOR_FORMATS ColorFormat; int Pitch; - if (!BS_ImageLoader::ExtractImageProperties(pFileData, FileSize, ColorFormat, m_Width, m_Height)) - { + if (!BS_ImageLoader::ExtractImageProperties(pFileData, FileSize, ColorFormat, m_Width, m_Height)) { BS_LOG_ERRORLN("Could not read image properties."); return; } // Das Bild dekomprimieren - char * pUncompressedData; - if (!BS_ImageLoader::LoadImage(pFileData, FileSize, BS_GraphicEngine::CF_ABGR32, pUncompressedData, m_Width, m_Height, Pitch)) - { + char *pUncompressedData; + if (!BS_ImageLoader::LoadImage(pFileData, FileSize, BS_GraphicEngine::CF_ABGR32, pUncompressedData, m_Width, m_Height, Pitch)) { BS_LOG_ERRORLN("Could not decode image."); return; } @@ -91,11 +87,10 @@ BS_GLImage::BS_GLImage(const Common::String & Filename, bool & Result) : // GLS-Sprite mit den Bilddaten erstellen GLS_Result GLSResult = GLS_NewSprite(m_Width, m_Height, - (ColorFormat == BS_GraphicEngine::CF_ARGB32) ? GLS_True : GLS_False, - pUncompressedData, - &m_Sprite); - if (Result != GLS_OK) - { + (ColorFormat == BS_GraphicEngine::CF_ARGB32) ? GLS_True : GLS_False, + pUncompressedData, + &m_Sprite); + if (Result != GLS_OK) { BS_LOG_ERRORLN("Could not create GLS_Sprite. Reason: %s", GLS_ResultString(GLSResult)); return; } @@ -109,20 +104,18 @@ BS_GLImage::BS_GLImage(const Common::String & Filename, bool & Result) : // ----------------------------------------------------------------------------- -BS_GLImage::BS_GLImage(unsigned int Width, unsigned int Height, bool & Result) : +BS_GLImage::BS_GLImage(unsigned int Width, unsigned int Height, bool &Result) : m_Sprite(0), m_Width(Width), - m_Height(Height) -{ + m_Height(Height) { Result = false; // GLS-Sprite mit den Bilddaten erstellen GLS_Result GLSResult = GLS_NewSprite(m_Width, m_Height, - GLS_True, - 0, - &m_Sprite); - if (GLSResult != GLS_OK) - { + GLS_True, + 0, + &m_Sprite); + if (GLSResult != GLS_OK) { BS_LOG_ERRORLN("Could not create GLS_Sprite. Reason: %s", GLS_ResultString(GLSResult)); return; } @@ -133,34 +126,29 @@ BS_GLImage::BS_GLImage(unsigned int Width, unsigned int Height, bool & Result) : // ----------------------------------------------------------------------------- -BS_GLImage::~BS_GLImage() -{ +BS_GLImage::~BS_GLImage() { if (m_Sprite) GLS_DeleteSprite(m_Sprite); } // ----------------------------------------------------------------------------- -bool BS_GLImage::Fill(const BS_Rect* pFillRect, unsigned int Color) -{ +bool BS_GLImage::Fill(const BS_Rect *pFillRect, unsigned int Color) { BS_LOG_ERRORLN("Fill() is not supported."); return false; } // ----------------------------------------------------------------------------- -bool BS_GLImage::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) -{ +bool BS_GLImage::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) { // Überprüfen, ob PixelData ausreichend viele Pixel enthält um ein Bild der Größe Width * Height zu erzeugen - if (Pixeldata.size() < static_cast(m_Width * m_Height * 4)) - { + if (Pixeldata.size() < static_cast(m_Width * m_Height * 4)) { BS_LOG_ERRORLN("PixelData vector is too small to define a 32 bit %dx%d image.", m_Width, m_Height); return false; } // GLS-Sprite mit den Bilddaten füllen GLS_Result GLSResult = GLS_SetSpriteData(m_Sprite, m_Width, m_Height, &Pixeldata[Offset], Stride / 4); - if (GLSResult != GLS_OK) - { + if (GLSResult != GLS_OK) { BS_LOG_ERRORLN("CGLS_SetSpriteData() failed. Reason: %s", GLS_ResultString(GLSResult)); return false; } @@ -170,8 +158,7 @@ bool BS_GLImage::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned // ----------------------------------------------------------------------------- -unsigned int BS_GLImage::GetPixel(int X, int Y) -{ +unsigned int BS_GLImage::GetPixel(int X, int Y) { BS_LOG_ERRORLN("GetPixel() is not supported. Returning black."); return 0; } @@ -179,15 +166,13 @@ unsigned int BS_GLImage::GetPixel(int X, int Y) // ----------------------------------------------------------------------------- bool BS_GLImage::Blit(int PosX, int PosY, - int Flipping, - BS_Rect* pPartRect, - unsigned int Color, - int Width, int Height) -{ + int Flipping, + BS_Rect *pPartRect, + unsigned int Color, + int Width, int Height) { // BS_Rect nach GLS_Rect konvertieren GLS_Rect SubImage; - if (pPartRect) - { + if (pPartRect) { SubImage.x1 = pPartRect->left; SubImage.y1 = pPartRect->top; SubImage.x2 = pPartRect->right; @@ -214,11 +199,11 @@ bool BS_GLImage::Blit(int PosX, int PosY, // Die Bedeutung von FLIP_V und FLIP_H ist vertauscht. Allerdings glaubt der Rest der Engine auch daran, daher war es einfacher diesen Fehler // weiterzuführen. Bei Gelegenheit ist dieses aber zu ändern. GLS_Result Result = GLS_Blit(m_Sprite, - PosX, PosY, - pPartRect ? &SubImage : 0, &GLSColor, - (Flipping & BS_Image::FLIP_V) ? GLS_True : GLS_False, - (Flipping & BS_Image::FLIP_H) ? GLS_True : GLS_False, - ScaleX, ScaleY); + PosX, PosY, + pPartRect ? &SubImage : 0, &GLSColor, + (Flipping & BS_Image::FLIP_V) ? GLS_True : GLS_False, + (Flipping & BS_Image::FLIP_H) ? GLS_True : GLS_False, + ScaleX, ScaleY); if (Result != GLS_OK) BS_LOG_ERRORLN("GLS_Blit() failed. Reason: %s", GLS_ResultString(Result)); return Result == GLS_OK; diff --git a/engines/sword25/gfx/opengl/glimage.h b/engines/sword25/gfx/opengl/glimage.h index ae94473778..c5a7480874 100644 --- a/engines/sword25/gfx/opengl/glimage.h +++ b/engines/sword25/gfx/opengl/glimage.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -51,52 +51,71 @@ namespace Sword25 { // FORWARD DECLARATION // ----------------------------------------------------------------------------- -typedef void * GLS_Sprite; +typedef void *GLS_Sprite; // ----------------------------------------------------------------------------- // CLASS DEFINITION // ----------------------------------------------------------------------------- -class BS_GLImage : public BS_Image -{ +class BS_GLImage : public BS_Image { public: - BS_GLImage(const Common::String & Filename, bool & Result); + BS_GLImage(const Common::String &Filename, bool &Result); /** - @brief Erzeugt ein leeres BS_GLImage + @brief Erzeugt ein leeres BS_GLImage - @param Width die Breite des zu erzeugenden Bildes. - @param Height die Höhe des zu erzeugenden Bildes - @param Result gibt dem Aufrufer bekannt, ob der Konstruktor erfolgreich ausgeführt wurde. Wenn es nach dem Aufruf false enthalten sollte, - dürfen keine Methoden am Objekt aufgerufen werden und das Objekt ist sofort zu zerstören. + @param Width die Breite des zu erzeugenden Bildes. + @param Height die Höhe des zu erzeugenden Bildes + @param Result gibt dem Aufrufer bekannt, ob der Konstruktor erfolgreich ausgeführt wurde. Wenn es nach dem Aufruf false enthalten sollte, + dürfen keine Methoden am Objekt aufgerufen werden und das Objekt ist sofort zu zerstören. */ - BS_GLImage(unsigned int Width, unsigned int Height, bool & Result); + BS_GLImage(unsigned int Width, unsigned int Height, bool &Result); virtual ~BS_GLImage(); - virtual int GetWidth() const { return m_Width; } - virtual int GetHeight() const { return m_Height; } - virtual BS_GraphicEngine::COLOR_FORMATS GetColorFormat() const { return BS_GraphicEngine::CF_ARGB32; } - - virtual bool Blit(int PosX = 0, int PosY = 0, - int Flipping = BS_Image::FLIP_NONE, - BS_Rect* pPartRect = NULL, - unsigned int Color = BS_ARGB(255, 255, 255, 255), - int Width = -1, int Height = -1); - virtual bool Fill(const BS_Rect* pFillRect, unsigned int Color); + virtual int GetWidth() const { + return m_Width; + } + virtual int GetHeight() const { + return m_Height; + } + virtual BS_GraphicEngine::COLOR_FORMATS GetColorFormat() const { + return BS_GraphicEngine::CF_ARGB32; + } + + virtual bool Blit(int PosX = 0, int PosY = 0, + int Flipping = BS_Image::FLIP_NONE, + BS_Rect *pPartRect = NULL, + unsigned int Color = BS_ARGB(255, 255, 255, 255), + int Width = -1, int Height = -1); + virtual bool Fill(const BS_Rect *pFillRect, unsigned int Color); virtual bool SetContent(const byte *Pixeldata, unsigned int Offset = 0, unsigned int Stride = 0); virtual unsigned int GetPixel(int X, int Y); - virtual bool IsBlitSource() const { return true; } - virtual bool IsBlitTarget() const { return false; } - virtual bool IsScalingAllowed() const { return true; } - virtual bool IsFillingAllowed() const { return false; } - virtual bool IsAlphaAllowed() const { return true; } - virtual bool IsColorModulationAllowed() const { return true; } - virtual bool IsSetContentAllowed() const { return true; } + virtual bool IsBlitSource() const { + return true; + } + virtual bool IsBlitTarget() const { + return false; + } + virtual bool IsScalingAllowed() const { + return true; + } + virtual bool IsFillingAllowed() const { + return false; + } + virtual bool IsAlphaAllowed() const { + return true; + } + virtual bool IsColorModulationAllowed() const { + return true; + } + virtual bool IsSetContentAllowed() const { + return true; + } private: - GLS_Sprite m_Sprite; - int m_Width; - int m_Height; + GLS_Sprite m_Sprite; + int m_Width; + int m_Height; }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/opengl/glvectorimageblit.cpp b/engines/sword25/gfx/opengl/glvectorimageblit.cpp index 262153f59e..9368e921e1 100644 --- a/engines/sword25/gfx/opengl/glvectorimageblit.cpp +++ b/engines/sword25/gfx/opengl/glvectorimageblit.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -50,64 +50,56 @@ using namespace std; // ----------------------------------------------------------------------------- -namespace -{ - const float LINE_SCALE_FACTOR = 1.0f; +namespace { +const float LINE_SCALE_FACTOR = 1.0f; } // ----------------------------------------------------------------------------- bool BS_VectorImage::Blit(int PosX, int PosY, - int Flipping, - BS_Rect* pPartRect, - unsigned int Color, - int Width, int Height) -{ + int Flipping, + BS_Rect *pPartRect, + unsigned int Color, + int Width, int Height) { static BS_VectorImageRenderer VectorImageRenderer; static vector PixelData; static GLS_Sprite Sprite = 0; - static BS_VectorImage * OldThis = 0; - static int OldWidth; - static int OldHeight; - static GLS_Rect OldSubImage; + static BS_VectorImage *OldThis = 0; + static int OldWidth; + static int OldHeight; + static GLS_Rect OldSubImage; // Falls Breite oder Höhe 0 sind, muss nichts dargestellt werden. if (Width == 0 || Height == 0) return true; // Sprite erstellen, falls es noch nicht erstellt wurde - if (Sprite == 0) - { + if (Sprite == 0) { GLS_Result Result = GLS_NewSprite(512, 512, GLS_True, 0, &Sprite); - if (Result != GLS_OK) - { + if (Result != GLS_OK) { BS_LOG_ERRORLN("Could not create GLS_Sprite. Reason: %s", GLS_ResultString(Result)); return false; } } // Feststellen, ob das alte Bild im Cache nicht wiederbenutzt werden kann und neu Berechnet werden muss - if (!(OldThis == this && OldWidth == Width && OldHeight == Height && Sprite != 0)) - { + if (!(OldThis == this && OldWidth == Width && OldHeight == Height && Sprite != 0)) { float ScaleFactorX = (Width == - 1) ? 1 : static_cast(Width) / static_cast(GetWidth()); - float ScaleFactorY = (Height == - 1) ? 1: static_cast(Height) / static_cast(GetHeight()); + float ScaleFactorY = (Height == - 1) ? 1 : static_cast(Height) / static_cast(GetHeight()); unsigned int RenderedWidth; unsigned int RenderedHeight; - if (!VectorImageRenderer.Render(*this, ScaleFactorX, ScaleFactorY, RenderedWidth, RenderedHeight, PixelData, LINE_SCALE_FACTOR)) - { + if (!VectorImageRenderer.Render(*this, ScaleFactorX, ScaleFactorY, RenderedWidth, RenderedHeight, PixelData, LINE_SCALE_FACTOR)) { BS_LOG_ERRORLN("Call to BS_VectorImageRenderer::Render() failed."); return false; } - if (RenderedWidth > 512 || RenderedHeight > 512) - { + if (RenderedWidth > 512 || RenderedHeight > 512) { BS_LOG_WARNINGLN("Currently the maximum size for scaled vector images is 512x512."); return true; } GLS_Result Result = GLS_SetSpriteData(Sprite, RenderedWidth, RenderedHeight, &PixelData[0], 0); - if (Result != GLS_OK) - { + if (Result != GLS_OK) { BS_LOG_ERRORLN("Call to GLS_SetSpriteData() failed. Reason: %s", GLS_ResultString(Result)); return false; } @@ -140,11 +132,11 @@ bool BS_VectorImage::Blit(int PosX, int PosY, // Die Bedeutung von FLIP_V und FLIP_H ist vertauscht. Allerdings glaubt der Rest der Engine auch daran, daher war es einfacher diesen Fehler // weiterzuführen. Bei Gelegenheit ist dieses aber zu ändern. GLS_Result Result = GLS_Blit(Sprite, - PosX, PosY, - &OldSubImage, &GLSColor, - (Flipping & BS_Image::FLIP_V) ? GLS_True : GLS_False, - (Flipping & BS_Image::FLIP_H) ? GLS_True : GLS_False, - 1.0f, 1.0f); + PosX, PosY, + &OldSubImage, &GLSColor, + (Flipping & BS_Image::FLIP_V) ? GLS_True : GLS_False, + (Flipping & BS_Image::FLIP_H) ? GLS_True : GLS_False, + 1.0f, 1.0f); if (Result != GLS_OK) BS_LOG_ERRORLN("GLS_Blit() failed. Reason: %s", GLS_ResultString(Result)); return Result == GLS_OK; diff --git a/engines/sword25/gfx/opengl/openglgfx.cpp b/engines/sword25/gfx/opengl/openglgfx.cpp index 7d97828213..612e1c209e 100644 --- a/engines/sword25/gfx/opengl/openglgfx.cpp +++ b/engines/sword25/gfx/opengl/openglgfx.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -68,16 +68,15 @@ using namespace std; // CONSTANTS // ----------------------------------------------------------------------------- -namespace -{ - const unsigned int BIT_DEPTH = 32; - const unsigned int BACKBUFFER_COUNT = 1; - const Common::String PNG_EXTENSION(".png"); - const Common::String PNG_S_EXTENSION("_s.png"); - const Common::String ANI_EXTENSION("_ani.xml"); - const Common::String FNT_EXTENSION("_fnt.xml"); - const Common::String SWF_EXTENSION(".swf"); - const Common::String B25S_EXTENSION(".b25s"); +namespace { +const unsigned int BIT_DEPTH = 32; +const unsigned int BACKBUFFER_COUNT = 1; +const Common::String PNG_EXTENSION(".png"); +const Common::String PNG_S_EXTENSION("_s.png"); +const Common::String ANI_EXTENSION("_ani.xml"); +const Common::String FNT_EXTENSION("_fnt.xml"); +const Common::String SWF_EXTENSION(".swf"); +const Common::String B25S_EXTENSION(".b25s"); } @@ -85,23 +84,20 @@ namespace // CONSTRUCTION / DESTRUCTION // ----------------------------------------------------------------------------- -BS_OpenGLGfx::BS_OpenGLGfx(BS_Kernel * pKernel) : +BS_OpenGLGfx::BS_OpenGLGfx(BS_Kernel *pKernel) : BS_GraphicEngine(pKernel), - m_GLspritesInitialized(false) -{ + m_GLspritesInitialized(false) { } // ----------------------------------------------------------------------------- -BS_OpenGLGfx::~BS_OpenGLGfx() -{ +BS_OpenGLGfx::~BS_OpenGLGfx() { if (m_GLspritesInitialized) GLS_Quit(); } // ----------------------------------------------------------------------------- -BS_Service * BS_OpenGLGfx_CreateObject(BS_Kernel* pKernel) -{ +BS_Service *BS_OpenGLGfx_CreateObject(BS_Kernel *pKernel) { return new BS_OpenGLGfx(pKernel); } @@ -110,18 +106,15 @@ BS_Service * BS_OpenGLGfx_CreateObject(BS_Kernel* pKernel) // INTERFACE // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::Init(int Width, int Height, int BitDepth, int BackbufferCount, bool Windowed) -{ +bool BS_OpenGLGfx::Init(int Width, int Height, int BitDepth, int BackbufferCount, bool Windowed) { // Warnung ausgeben, wenn eine nicht unterstützte Bittiefe gewählt wurde. - if (BitDepth != BIT_DEPTH) - { + if (BitDepth != BIT_DEPTH) { BS_LOG_WARNINGLN("Can't use a bit depth of %d (not supported). Falling back to %d.", BitDepth, BIT_DEPTH); m_BitDepth = BIT_DEPTH; } // Warnung ausgeben, wenn nicht genau ein Backbuffer gewählt wurde. - if (BackbufferCount != BACKBUFFER_COUNT) - { + if (BackbufferCount != BACKBUFFER_COUNT) { BS_LOG_WARNINGLN("Can't use %d backbuffers (not supported). Falling back to %d.", BackbufferCount, BACKBUFFER_COUNT); BackbufferCount = BACKBUFFER_COUNT; } @@ -139,8 +132,7 @@ bool BS_OpenGLGfx::Init(int Width, int Height, int BitDepth, int BackbufferCount // GLsprites initialisieren HWND hwnd = reinterpret_cast(BS_Kernel::GetInstance()->GetWindow()->GetWindowHandle()); GLS_Result Result = GLS_InitExternalWindow(Width, Height, Windowed ? GLS_False : GLS_True, hwnd); - if (Result != GLS_OK) - { + if (Result != GLS_OK) { BS_LOG_ERRORLN("Could not initialize GLsprites. Reason: %s", GLS_ResultString(Result)); return false; } @@ -153,7 +145,7 @@ bool BS_OpenGLGfx::Init(int Width, int Height, int BitDepth, int BackbufferCount m_RenderObjectManagerPtr.reset(new BS_RenderObjectManager(Width, Height, BackbufferCount + 1)); // Hauptpanel erstellen - m_MainPanelPtr = m_RenderObjectManagerPtr->GetTreeRoot()->AddPanel(Width, Height, BS_ARGB(0,0,0,0)); + m_MainPanelPtr = m_RenderObjectManagerPtr->GetTreeRoot()->AddPanel(Width, Height, BS_ARGB(0, 0, 0, 0)); if (!m_MainPanelPtr.IsValid()) return false; m_MainPanelPtr->SetVisible(true); @@ -162,8 +154,7 @@ bool BS_OpenGLGfx::Init(int Width, int Height, int BitDepth, int BackbufferCount // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::StartFrame(bool UpdateAll) -{ +bool BS_OpenGLGfx::StartFrame(bool UpdateAll) { // Berechnen, wie viel Zeit seit dem letzten Frame vergangen ist. // Dieser Wert kann über GetLastFrameDuration() von Modulen abgefragt werden, die zeitabhängig arbeiten. UpdateLastFrameDuration(); @@ -173,8 +164,7 @@ bool BS_OpenGLGfx::StartFrame(bool UpdateAll) // GLsprites bescheidgeben GLS_Result Result = GLS_StartFrame(); - if (Result != GLS_OK) - { + if (Result != GLS_OK) { BS_LOG_ERRORLN("Call to GLS_StartFrame() failed. Reason: %s", GLS_ResultString(Result)); return false; } @@ -184,23 +174,20 @@ bool BS_OpenGLGfx::StartFrame(bool UpdateAll) // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::EndFrame() -{ +bool BS_OpenGLGfx::EndFrame() { // Scene zeichnen m_RenderObjectManagerPtr->Render(); // Debug-Lines zeichnen - if (!m_DebugLines.empty()) - { + if (!m_DebugLines.empty()) { glEnable(GL_LINE_SMOOTH); glBegin(GL_LINES); Common::Array::const_iterator iter = m_DebugLines.begin(); - for (; iter != m_DebugLines.end(); ++iter) - { - const unsigned int & Color = (*iter).Color; - const BS_Vertex & Start = (*iter).Start; - const BS_Vertex & End = (*iter).End; + for (; iter != m_DebugLines.end(); ++iter) { + const unsigned int &Color = (*iter).Color; + const BS_Vertex &Start = (*iter).Start; + const BS_Vertex &End = (*iter).End; glColor4ub((Color >> 16) & 0xff, (Color >> 8) & 0xff, Color & 0xff, Color >> 24); glVertex2d(Start.X, Start.Y); @@ -215,8 +202,7 @@ bool BS_OpenGLGfx::EndFrame() // Flippen GLS_Result Result = GLS_EndFrame(); - if (Result != GLS_OK) - { + if (Result != GLS_OK) { BS_LOG_ERRORLN("Call to GLS_EndFrame() failed. Reason: %s", GLS_ResultString(Result)); return false; } @@ -229,27 +215,23 @@ bool BS_OpenGLGfx::EndFrame() // ----------------------------------------------------------------------------- -BS_RenderObjectPtr BS_OpenGLGfx::GetMainPanel() -{ +BS_RenderObjectPtr BS_OpenGLGfx::GetMainPanel() { return m_MainPanelPtr; } // ----------------------------------------------------------------------------- -void BS_OpenGLGfx::SetVsync(bool Vsync) -{ +void BS_OpenGLGfx::SetVsync(bool Vsync) { GLS_Result Result = GLS_SetVSync(Vsync ? GLS_True : GLS_False); if (Result != GLS_OK) BS_LOG_WARNINGLN("Could not set vsync status. Reason: %s", GLS_ResultString(Result)); } // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::GetVsync() const -{ +bool BS_OpenGLGfx::GetVsync() const { GLS_Bool Status; GLS_Result Result = GLS_IsVsync(&Status); - if (Result != GLS_OK) - { + if (Result != GLS_OK) { BS_LOG_WARNINGLN("Could not get vsync status. Returning false. Reason: %s", GLS_ResultString(Result)); return false; } @@ -259,12 +241,10 @@ bool BS_OpenGLGfx::GetVsync() const // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::Fill(const BS_Rect* FillRectPtr, unsigned int Color) -{ +bool BS_OpenGLGfx::Fill(const BS_Rect *FillRectPtr, unsigned int Color) { BS_Rect Rect; - if (!FillRectPtr) - { + if (!FillRectPtr) { Rect.left = 0; Rect.top = 0; Rect.right = m_Width; @@ -273,12 +253,12 @@ bool BS_OpenGLGfx::Fill(const BS_Rect* FillRectPtr, unsigned int Color) } glBegin(GL_QUADS); - glColor4ub((Color >> 16) & 0xff, (Color >> 8) & 0xff, Color & 0xff, Color >> 24); + glColor4ub((Color >> 16) & 0xff, (Color >> 8) & 0xff, Color & 0xff, Color >> 24); - glVertex2i(FillRectPtr->left, FillRectPtr->top); - glVertex2i(FillRectPtr->right, FillRectPtr->top); - glVertex2i(FillRectPtr->right, FillRectPtr->bottom); - glVertex2i(FillRectPtr->left, FillRectPtr->bottom); + glVertex2i(FillRectPtr->left, FillRectPtr->top); + glVertex2i(FillRectPtr->right, FillRectPtr->top); + glVertex2i(FillRectPtr->right, FillRectPtr->bottom); + glVertex2i(FillRectPtr->left, FillRectPtr->bottom); glEnd(); return glGetError() == 0; @@ -286,8 +266,7 @@ bool BS_OpenGLGfx::Fill(const BS_Rect* FillRectPtr, unsigned int Color) // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::GetScreenshot(unsigned int & Width, unsigned int & Height, vector & Data) -{ +bool BS_OpenGLGfx::GetScreenshot(unsigned int &Width, unsigned int &Height, vector & Data) { if (!ReadFramebufferContents(m_Width, m_Height, Data)) return false; // Die Größe des Framebuffers zurückgeben. @@ -303,15 +282,13 @@ bool BS_OpenGLGfx::GetScreenshot(unsigned int & Width, unsigned int & Height, ve // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::ReadFramebufferContents(unsigned int Width, unsigned int Height, Common::Array & Data) -{ +bool BS_OpenGLGfx::ReadFramebufferContents(unsigned int Width, unsigned int Height, Common::Array & Data) { Data.resize(Width * Height); glReadPixels(0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, &Data[0]); if (glGetError() == 0) return true; - else - { + else { Data.clear(); return false; } @@ -319,11 +296,9 @@ bool BS_OpenGLGfx::ReadFramebufferContents(unsigned int Width, unsigned int Heig // ----------------------------------------------------------------------------- -void BS_OpenGLGfx::ReverseRGBAComponentOrder(vector & Data) -{ +void BS_OpenGLGfx::ReverseRGBAComponentOrder(vector & Data) { vector::iterator It = Data.begin(); - while (It != Data.end()) - { + while (It != Data.end()) { unsigned int Pixel = *It; *It = (Pixel & 0xff00ff00) | ((Pixel >> 16) & 0xff) | ((Pixel & 0xff) << 16); ++It; @@ -332,12 +307,10 @@ void BS_OpenGLGfx::ReverseRGBAComponentOrder(vector & Data) // ----------------------------------------------------------------------------- -void BS_OpenGLGfx::FlipImagedataVertical(unsigned int Width, unsigned int Height, vector & Data) -{ +void BS_OpenGLGfx::FlipImagedataVertical(unsigned int Width, unsigned int Height, vector & Data) { vector LineBuffer(Width); - for (unsigned int Y = 0; Y < Height / 2; ++Y) - { + for (unsigned int Y = 0; Y < Height / 2; ++Y) { vector::iterator Line1It = Data.begin() + Y * Width; vector::iterator Line2It = Data.begin() + (Height - 1 - Y) * Width; copy(Line1It, Line1It + Width, LineBuffer.begin()); @@ -350,8 +323,7 @@ void BS_OpenGLGfx::FlipImagedataVertical(unsigned int Width, unsigned int Height // RESOURCE MANAGING // ----------------------------------------------------------------------------- -static bool DoesStringEndWith(const Common::String & String, const std::string & OtherString) -{ +static bool DoesStringEndWith(const Common::String &String, const std::string &OtherString) { Common::String::size_type StringPos = String.rfind(OtherString); if (StringPos == Common::String::npos) return false; @@ -360,24 +332,20 @@ static bool DoesStringEndWith(const Common::String & String, const std::string & // ----------------------------------------------------------------------------- -BS_Resource * BS_OpenGLGfx::LoadResource(const Common::String& FileName) -{ +BS_Resource *BS_OpenGLGfx::LoadResource(const Common::String &FileName) { BS_ASSERT(CanLoadResource(FileName)); // Bild für den Softwarebuffer laden - if (DoesStringEndWith(FileName, PNG_S_EXTENSION)) - { + if (DoesStringEndWith(FileName, PNG_S_EXTENSION)) { bool Result; - BS_SWImage * pImage = new BS_SWImage(FileName, Result); - if (!Result) - { + BS_SWImage *pImage = new BS_SWImage(FileName, Result); + if (!Result) { delete pImage; return 0; } - BS_BitmapResource * pResource = new BS_BitmapResource(FileName, pImage); - if (!pResource->IsValid()) - { + BS_BitmapResource *pResource = new BS_BitmapResource(FileName, pImage); + if (!pResource->IsValid()) { delete pResource; return 0; } @@ -386,19 +354,16 @@ BS_Resource * BS_OpenGLGfx::LoadResource(const Common::String& FileName) } // Sprite-Bild laden - if (DoesStringEndWith(FileName, PNG_EXTENSION) || DoesStringEndWith(FileName, B25S_EXTENSION)) - { + if (DoesStringEndWith(FileName, PNG_EXTENSION) || DoesStringEndWith(FileName, B25S_EXTENSION)) { bool Result; - BS_GLImage * pImage = new BS_GLImage(FileName, Result); - if (!Result) - { + BS_GLImage *pImage = new BS_GLImage(FileName, Result); + if (!Result) { delete pImage; return 0; } - BS_BitmapResource * pResource = new BS_BitmapResource(FileName, pImage); - if (!pResource->IsValid()) - { + BS_BitmapResource *pResource = new BS_BitmapResource(FileName, pImage); + if (!pResource->IsValid()) { delete pResource; return 0; } @@ -408,33 +373,29 @@ BS_Resource * BS_OpenGLGfx::LoadResource(const Common::String& FileName) // Vectorgraphik laden - if (DoesStringEndWith(FileName, SWF_EXTENSION)) - { + if (DoesStringEndWith(FileName, SWF_EXTENSION)) { // Pointer auf Package-Manager holen - BS_PackageManager * pPackage = BS_Kernel::GetInstance()->GetPackage(); + BS_PackageManager *pPackage = BS_Kernel::GetInstance()->GetPackage(); BS_ASSERT(pPackage); // Datei laden - unsigned char* pFileData; + unsigned char *pFileData; unsigned int FileSize; - if (!(pFileData = static_cast(pPackage->GetFile(FileName, &FileSize)))) - { + if (!(pFileData = static_cast(pPackage->GetFile(FileName, &FileSize)))) { BS_LOG_ERRORLN("File \"%s\" could not be loaded.", FileName.c_str()); return 0; } bool Result; - BS_VectorImage * pImage = new BS_VectorImage(pFileData, FileSize, Result); - if (!Result) - { + BS_VectorImage *pImage = new BS_VectorImage(pFileData, FileSize, Result); + if (!Result) { delete pImage; delete [] pFileData; return 0; } - BS_BitmapResource * pResource = new BS_BitmapResource(FileName, pImage); - if (!pResource->IsValid()) - { + BS_BitmapResource *pResource = new BS_BitmapResource(FileName, pImage); + if (!pResource->IsValid()) { delete pResource; delete [] pFileData; return 0; @@ -445,26 +406,22 @@ BS_Resource * BS_OpenGLGfx::LoadResource(const Common::String& FileName) } // Animation laden - if (DoesStringEndWith(FileName, ANI_EXTENSION)) - { - BS_AnimationResource * pResource = new BS_AnimationResource(FileName); + if (DoesStringEndWith(FileName, ANI_EXTENSION)) { + BS_AnimationResource *pResource = new BS_AnimationResource(FileName); if (pResource->IsValid()) return pResource; - else - { + else { delete pResource; return 0; } } // Font laden - if (DoesStringEndWith(FileName, FNT_EXTENSION)) - { - BS_FontResource * pResource = new BS_FontResource(BS_Kernel::GetInstance(), FileName); + if (DoesStringEndWith(FileName, FNT_EXTENSION)) { + BS_FontResource *pResource = new BS_FontResource(BS_Kernel::GetInstance(), FileName); if (pResource->IsValid()) return pResource; - else - { + else { delete pResource; return 0; } @@ -476,13 +433,12 @@ BS_Resource * BS_OpenGLGfx::LoadResource(const Common::String& FileName) // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::CanLoadResource(const Common::String& FileName) -{ +bool BS_OpenGLGfx::CanLoadResource(const Common::String &FileName) { return DoesStringEndWith(FileName, PNG_EXTENSION) || - DoesStringEndWith(FileName, ANI_EXTENSION) || - DoesStringEndWith(FileName, FNT_EXTENSION) || - DoesStringEndWith(FileName, SWF_EXTENSION) || - DoesStringEndWith(FileName, B25S_EXTENSION); + DoesStringEndWith(FileName, ANI_EXTENSION) || + DoesStringEndWith(FileName, FNT_EXTENSION) || + DoesStringEndWith(FileName, SWF_EXTENSION) || + DoesStringEndWith(FileName, B25S_EXTENSION); } @@ -490,8 +446,7 @@ bool BS_OpenGLGfx::CanLoadResource(const Common::String& FileName) // DEBUGGING // ----------------------------------------------------------------------------- -void BS_OpenGLGfx::DrawDebugLine(const BS_Vertex & Start, const BS_Vertex & End, unsigned int Color) -{ +void BS_OpenGLGfx::DrawDebugLine(const BS_Vertex &Start, const BS_Vertex &End, unsigned int Color) { m_DebugLines.push_back(DebugLine(Start, End, Color)); } @@ -499,8 +454,7 @@ void BS_OpenGLGfx::DrawDebugLine(const BS_Vertex & Start, const BS_Vertex & End, // PERSISTENZ // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_OpenGLGfx::Persist(BS_OutputPersistenceBlock &Writer) { bool result = true; result &= BS_GraphicEngine::Persist(Writer); @@ -511,8 +465,7 @@ bool BS_OpenGLGfx::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_OpenGLGfx::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_OpenGLGfx::Unpersist(BS_InputPersistenceBlock &Reader) { bool result = true; result &= BS_GraphicEngine::Unpersist(Reader); diff --git a/engines/sword25/gfx/opengl/openglgfx.h b/engines/sword25/gfx/opengl/openglgfx.h index df0d81cb04..5a7ca8a85e 100644 --- a/engines/sword25/gfx/opengl/openglgfx.h +++ b/engines/sword25/gfx/opengl/openglgfx.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -67,58 +67,56 @@ class BS_RenderObjectManager; // CLASS DECLARATION // ----------------------------------------------------------------------------- -class BS_OpenGLGfx : public BS_GraphicEngine -{ +class BS_OpenGLGfx : public BS_GraphicEngine { public: - BS_OpenGLGfx(BS_Kernel* pKernel); + BS_OpenGLGfx(BS_Kernel *pKernel); virtual ~BS_OpenGLGfx(); // Interface // --------- - virtual bool Init(int Width, int Height, int BitDepth, int BackbufferCount, bool Windowed); - virtual bool StartFrame(bool UpdateAll); - virtual bool EndFrame(); + virtual bool Init(int Width, int Height, int BitDepth, int BackbufferCount, bool Windowed); + virtual bool StartFrame(bool UpdateAll); + virtual bool EndFrame(); virtual BS_RenderObjectPtr GetMainPanel(); - virtual void SetVsync(bool Vsync); - virtual bool GetVsync() const; + virtual void SetVsync(bool Vsync); + virtual bool GetVsync() const; - virtual bool Fill(const BS_Rect* FillRectPtr = 0, unsigned int Color = BS_RGB(0, 0, 0)); - virtual bool GetScreenshot(unsigned int & Width, unsigned int & Height, Common::Array & Data); + virtual bool Fill(const BS_Rect *FillRectPtr = 0, unsigned int Color = BS_RGB(0, 0, 0)); + virtual bool GetScreenshot(unsigned int &Width, unsigned int &Height, Common::Array & Data); // Resource-Managing Methoden // -------------------------- - virtual BS_Resource* LoadResource(const Common::String& FileName); - virtual bool CanLoadResource(const Common::String& FileName); + virtual BS_Resource *LoadResource(const Common::String &FileName); + virtual bool CanLoadResource(const Common::String &FileName); // Debugging Methoden // ------------------ - virtual void DrawDebugLine(const BS_Vertex & Start, const BS_Vertex & End, unsigned int Color); - static const char * GetGLSResultString(GLS_Result Result); + virtual void DrawDebugLine(const BS_Vertex &Start, const BS_Vertex &End, unsigned int Color); + static const char *GetGLSResultString(GLS_Result Result); // Persistenz Methoden // ------------------- - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); private: - bool m_GLspritesInitialized; + bool m_GLspritesInitialized; BS_RenderObjectPtr m_MainPanelPtr; - std::auto_ptr m_RenderObjectManagerPtr; + std::auto_ptr m_RenderObjectManagerPtr; - struct DebugLine - { - DebugLine(const BS_Vertex & _Start, const BS_Vertex & _End, unsigned int _Color) : + struct DebugLine { + DebugLine(const BS_Vertex &_Start, const BS_Vertex &_End, unsigned int _Color) : Start(_Start), End(_End), Color(_Color) {}; - - BS_Vertex Start; - BS_Vertex End; - unsigned int Color; + + BS_Vertex Start; + BS_Vertex End; + unsigned int Color; }; Common::Array m_DebugLines; diff --git a/engines/sword25/gfx/opengl/swimage.cpp b/engines/sword25/gfx/opengl/swimage.cpp index 1429572767..5eebf44b10 100644 --- a/engines/sword25/gfx/opengl/swimage.cpp +++ b/engines/sword25/gfx/opengl/swimage.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -50,21 +50,19 @@ namespace Sword25 { // CONSTRUCTION / DESTRUCTION // ----------------------------------------------------------------------------- -BS_SWImage::BS_SWImage(const Common::String & Filename, bool & Result) : +BS_SWImage::BS_SWImage(const Common::String &Filename, bool &Result) : _ImageDataPtr(0), m_Width(0), - m_Height(0) -{ + m_Height(0) { Result = false; - BS_PackageManager * pPackage = static_cast(BS_Kernel::GetInstance()->GetService("package")); + BS_PackageManager *pPackage = static_cast(BS_Kernel::GetInstance()->GetService("package")); BS_ASSERT(pPackage); // Datei laden - char* pFileData; + char *pFileData; unsigned int FileSize; - if (!(pFileData = (char*) pPackage->GetFile(Filename, &FileSize))) - { + if (!(pFileData = (char *) pPackage->GetFile(Filename, &FileSize))) { BS_LOG_ERRORLN("File \"%s\" could not be loaded.", Filename.c_str()); return; } @@ -72,16 +70,14 @@ BS_SWImage::BS_SWImage(const Common::String & Filename, bool & Result) : // Bildeigenschaften bestimmen BS_GraphicEngine::COLOR_FORMATS ColorFormat; int Pitch; - if (!BS_ImageLoader::ExtractImageProperties(pFileData, FileSize, ColorFormat, m_Width, m_Height)) - { + if (!BS_ImageLoader::ExtractImageProperties(pFileData, FileSize, ColorFormat, m_Width, m_Height)) { BS_LOG_ERRORLN("Could not read image properties."); return; } // Das Bild dekomprimieren - char * pUncompressedData; - if (!BS_ImageLoader::LoadImage(pFileData, FileSize, BS_GraphicEngine::CF_ABGR32, pUncompressedData, m_Width, m_Height, Pitch)) - { + char *pUncompressedData; + if (!BS_ImageLoader::LoadImage(pFileData, FileSize, BS_GraphicEngine::CF_ABGR32, pUncompressedData, m_Width, m_Height, Pitch)) { BS_LOG_ERRORLN("Could not decode image."); return; } @@ -97,8 +93,7 @@ BS_SWImage::BS_SWImage(const Common::String & Filename, bool & Result) : // ----------------------------------------------------------------------------- -BS_SWImage::~BS_SWImage() -{ +BS_SWImage::~BS_SWImage() { delete [] _ImageDataPtr; } @@ -106,35 +101,31 @@ BS_SWImage::~BS_SWImage() // ----------------------------------------------------------------------------- bool BS_SWImage::Blit(int PosX, int PosY, - int Flipping, - BS_Rect* pPartRect, - unsigned int Color, - int Width, int Height) -{ + int Flipping, + BS_Rect *pPartRect, + unsigned int Color, + int Width, int Height) { BS_LOG_ERRORLN("Blit() is not supported."); return false; } // ----------------------------------------------------------------------------- -bool BS_SWImage::Fill(const BS_Rect* pFillRect, unsigned int Color) -{ +bool BS_SWImage::Fill(const BS_Rect *pFillRect, unsigned int Color) { BS_LOG_ERRORLN("Fill() is not supported."); return false; } // ----------------------------------------------------------------------------- -bool BS_SWImage::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) -{ +bool BS_SWImage::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) { BS_LOG_ERRORLN("SetContent() is not supported."); return false; } // ----------------------------------------------------------------------------- -unsigned int BS_SWImage::GetPixel(int X, int Y) -{ +unsigned int BS_SWImage::GetPixel(int X, int Y) { BS_ASSERT(X >= 0 && X < m_Width); BS_ASSERT(Y >= 0 && Y < m_Height); diff --git a/engines/sword25/gfx/opengl/swimage.h b/engines/sword25/gfx/opengl/swimage.h index bbab7c3833..870cbeb830 100644 --- a/engines/sword25/gfx/opengl/swimage.h +++ b/engines/sword25/gfx/opengl/swimage.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -50,36 +50,55 @@ namespace Sword25 { // CLASS DEFINITION // ----------------------------------------------------------------------------- -class BS_SWImage : public BS_Image -{ +class BS_SWImage : public BS_Image { public: - BS_SWImage(const Common::String & Filename, bool & Result); + BS_SWImage(const Common::String &Filename, bool &Result); virtual ~BS_SWImage(); - virtual int GetWidth() const { return m_Width; } - virtual int GetHeight() const { return m_Height; } - virtual BS_GraphicEngine::COLOR_FORMATS GetColorFormat() const { return BS_GraphicEngine::CF_ARGB32; } - - virtual bool Blit(int PosX = 0, int PosY = 0, - int Flipping = BS_Image::FLIP_NONE, - BS_Rect* pPartRect = NULL, - unsigned int Color = BS_ARGB(255, 255, 255, 255), - int Width = -1, int Height = -1); - virtual bool Fill(const BS_Rect* FillRectPtr, unsigned int Color); + virtual int GetWidth() const { + return m_Width; + } + virtual int GetHeight() const { + return m_Height; + } + virtual BS_GraphicEngine::COLOR_FORMATS GetColorFormat() const { + return BS_GraphicEngine::CF_ARGB32; + } + + virtual bool Blit(int PosX = 0, int PosY = 0, + int Flipping = BS_Image::FLIP_NONE, + BS_Rect *pPartRect = NULL, + unsigned int Color = BS_ARGB(255, 255, 255, 255), + int Width = -1, int Height = -1); + virtual bool Fill(const BS_Rect *FillRectPtr, unsigned int Color); virtual bool SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride); virtual unsigned int GetPixel(int X, int Y); - virtual bool IsBlitSource() const { return false; } - virtual bool IsBlitTarget() const { return false; } - virtual bool IsScalingAllowed() const { return false; } - virtual bool IsFillingAllowed() const { return false; } - virtual bool IsAlphaAllowed() const { return false; } - virtual bool IsColorModulationAllowed() const { return false; } - virtual bool IsSetContentAllowed() const { return false; } + virtual bool IsBlitSource() const { + return false; + } + virtual bool IsBlitTarget() const { + return false; + } + virtual bool IsScalingAllowed() const { + return false; + } + virtual bool IsFillingAllowed() const { + return false; + } + virtual bool IsAlphaAllowed() const { + return false; + } + virtual bool IsColorModulationAllowed() const { + return false; + } + virtual bool IsSetContentAllowed() const { + return false; + } private: - unsigned int * _ImageDataPtr; + unsigned int *_ImageDataPtr; - int m_Width; + int m_Width; int m_Height; }; diff --git a/engines/sword25/gfx/panel.cpp b/engines/sword25/gfx/panel.cpp index 335c853bd1..54d0dbc372 100644 --- a/engines/sword25/gfx/panel.cpp +++ b/engines/sword25/gfx/panel.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -55,21 +55,18 @@ namespace Sword25 { BS_Panel::BS_Panel(BS_RenderObjectPtr ParentPtr, int Width, int Height, unsigned int Color) : BS_RenderObject(ParentPtr, BS_RenderObject::TYPE_PANEL), - m_Color(Color) -{ + m_Color(Color) { m_InitSuccess = false; m_Width = Width; m_Height = Height; - if (m_Width < 0) - { + if (m_Width < 0) { BS_LOG_ERRORLN("Tried to initialise a panel with an invalid width (%d).", m_Width); return; } - if (m_Height < 0) - { + if (m_Height < 0) { BS_LOG_ERRORLN("Tried to initialise a panel with an invalid height (%d).", m_Height); return; } @@ -79,28 +76,25 @@ BS_Panel::BS_Panel(BS_RenderObjectPtr ParentPtr, int Width, int // ----------------------------------------------------------------------------- -BS_Panel::BS_Panel(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : - BS_RenderObject(ParentPtr, BS_RenderObject::TYPE_PANEL, Handle) -{ +BS_Panel::BS_Panel(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : + BS_RenderObject(ParentPtr, BS_RenderObject::TYPE_PANEL, Handle) { m_InitSuccess = Unpersist(Reader); } // ----------------------------------------------------------------------------- - -BS_Panel::~BS_Panel() -{ + +BS_Panel::~BS_Panel() { } // ----------------------------------------------------------------------------- // Rendern // ----------------------------------------------------------------------------- -bool BS_Panel::DoRender() -{ +bool BS_Panel::DoRender() { // Falls der Alphawert 0 ist, ist das Panel komplett durchsichtig und es muss nichts gezeichnet werden. if (m_Color >> 24 == 0) return true; - BS_GraphicEngine * GfxPtr = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); + BS_GraphicEngine *GfxPtr = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); BS_ASSERT(GfxPtr); return GfxPtr->Fill(&m_BBox, m_Color); @@ -110,8 +104,7 @@ bool BS_Panel::DoRender() // Persistenz // ----------------------------------------------------------------------------- -bool BS_Panel::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_Panel::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; Result &= BS_RenderObject::Persist(Writer); @@ -124,8 +117,7 @@ bool BS_Panel::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_Panel::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_Panel::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; Result &= BS_RenderObject::Unpersist(Reader); diff --git a/engines/sword25/gfx/panel.h b/engines/sword25/gfx/panel.h index 930e5bd0c6..ca37c2703c 100644 --- a/engines/sword25/gfx/panel.h +++ b/engines/sword25/gfx/panel.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -48,22 +48,26 @@ namespace Sword25 { // Class Definition // ----------------------------------------------------------------------------- -class BS_Panel : public BS_RenderObject -{ -friend class BS_RenderObject; +class BS_Panel : public BS_RenderObject { + friend class BS_RenderObject; private: BS_Panel(BS_RenderObjectPtr ParentPtr, int Width, int Height, unsigned int Color); - BS_Panel(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); + BS_Panel(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); public: virtual ~BS_Panel(); - unsigned int GetColor() const { return m_Color; } - void SetColor(unsigned int Color) { m_Color = Color; ForceRefresh(); } + unsigned int GetColor() const { + return m_Color; + } + void SetColor(unsigned int Color) { + m_Color = Color; + ForceRefresh(); + } - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); protected: virtual bool DoRender(); diff --git a/engines/sword25/gfx/renderobject.cpp b/engines/sword25/gfx/renderobject.cpp index 12b7c5dfca..af70a4a047 100644 --- a/engines/sword25/gfx/renderobject.cpp +++ b/engines/sword25/gfx/renderobject.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -70,8 +70,7 @@ BS_RenderObject::BS_RenderObject(BS_RenderObjectPtr ParentPtr, m_Type(Type), m_InitSuccess(false), m_RefreshForced(true), - m_Handle(0) -{ + m_Handle(0) { // Renderobject registrieren, abhängig vom Handle-Parameter entweder mit beliebigem oder vorgegebenen Handle. if (Handle == 0) m_Handle = BS_RenderObjectRegistry::GetInstance().RegisterObject(this); @@ -83,15 +82,11 @@ BS_RenderObject::BS_RenderObject(BS_RenderObjectPtr ParentPtr, // Dieses Objekt zu den Kindern der Elternobjektes hinzufügen, falls nicht Wurzel (ParentPtr ungültig) und dem // selben RenderObjektManager zuweisen. - if (m_ParentPtr.IsValid()) - { + if (m_ParentPtr.IsValid()) { m_ManagerPtr = m_ParentPtr->GetManager(); m_ParentPtr->AddObject(this); - } - else - { - if (GetType() != TYPE_ROOT) - { + } else { + if (GetType() != TYPE_ROOT) { BS_LOG_ERRORLN("Tried to create a non-root render object and has no parent. All non-root render objects have to have a parent."); return; } @@ -102,11 +97,10 @@ BS_RenderObject::BS_RenderObject(BS_RenderObjectPtr ParentPtr, m_InitSuccess = true; } -BS_RenderObject::~BS_RenderObject() -{ +BS_RenderObject::~BS_RenderObject() { // Objekt aus dem Elternobjekt entfernen. if (m_ParentPtr.IsValid()) m_ParentPtr->DetatchChildren(this); - + DeleteAllChildren(); // Objekt deregistrieren. @@ -115,8 +109,7 @@ BS_RenderObject::~BS_RenderObject() // Rendern // ------- -bool BS_RenderObject::Render() -{ +bool BS_RenderObject::Render() { // Objektänderungen validieren ValidateObject(); @@ -124,8 +117,7 @@ bool BS_RenderObject::Render() if (!m_Visible) return true; // Falls notwendig, wird die Renderreihenfolge der Kinderobjekte aktualisiert. - if (m_ChildChanged) - { + if (m_ChildChanged) { SortRenderObjects(); m_ChildChanged = false; } @@ -144,8 +136,7 @@ bool BS_RenderObject::Render() // Objektverwaltung // ---------------- -void BS_RenderObject::ValidateObject() -{ +void BS_RenderObject::ValidateObject() { // Die Veränderungen in den Objektvariablen aufheben m_OldBBox = m_BBox; m_OldVisible = m_Visible; @@ -155,27 +146,25 @@ void BS_RenderObject::ValidateObject() m_RefreshForced = false; } -bool BS_RenderObject::UpdateObjectState() -{ +bool BS_RenderObject::UpdateObjectState() { // Falls sich das Objekt verändert hat, muss der interne Zustand neu berechnet werden und evtl. Update-Regions für den nächsten Frame // registriert werden. if ((CalcBoundingBox() != m_OldBBox) || - (m_Visible != m_OldVisible) || - (m_X != m_OldX) || - (m_Y != m_OldY) || - (m_Z != m_OldZ) || - m_RefreshForced) - { + (m_Visible != m_OldVisible) || + (m_X != m_OldX) || + (m_Y != m_OldY) || + (m_Z != m_OldZ) || + m_RefreshForced) { // Renderrang des Objektes neu bestimmen, da sich dieser verändert haben könnte if (m_ParentPtr.IsValid()) m_ParentPtr->SignalChildChange(); - + // Die Bounding-Box neu berechnen und Update-Regions registrieren. UpdateBoxes(); - + // Änderungen Validieren ValidateObject(); } - + // Dann muss der Objektstatus der Kinder aktualisiert werden. RENDEROBJECT_ITER it = m_Children.begin(); for (; it != m_Children.end(); ++it) @@ -184,14 +173,12 @@ bool BS_RenderObject::UpdateObjectState() return true; } -void BS_RenderObject::UpdateBoxes() -{ +void BS_RenderObject::UpdateBoxes() { // Bounding-Box aktualisieren m_BBox = CalcBoundingBox(); } -BS_Rect BS_RenderObject::CalcBoundingBox() const -{ +BS_Rect BS_RenderObject::CalcBoundingBox() const { // Die Bounding-Box mit der Objektgröße initialisieren. BS_Rect BBox(0, 0, m_Width, m_Height); @@ -204,22 +191,19 @@ BS_Rect BS_RenderObject::CalcBoundingBox() const return BBox; } -void BS_RenderObject::CalcAbsolutePos(int& X, int& Y) const -{ +void BS_RenderObject::CalcAbsolutePos(int &X, int &Y) const { X = CalcAbsoluteX(); Y = CalcAbsoluteY(); } -int BS_RenderObject::CalcAbsoluteX() const -{ +int BS_RenderObject::CalcAbsoluteX() const { if (m_ParentPtr.IsValid()) return m_ParentPtr->GetAbsoluteX() + m_X; else return m_X; } -int BS_RenderObject::CalcAbsoluteY() const -{ +int BS_RenderObject::CalcAbsoluteY() const { if (m_ParentPtr.IsValid()) return m_ParentPtr->GetAbsoluteY() + m_Y; else @@ -229,41 +213,35 @@ int BS_RenderObject::CalcAbsoluteY() const // Baumverwaltung // -------------- -void BS_RenderObject::DeleteAllChildren() -{ +void BS_RenderObject::DeleteAllChildren() { // Es ist nicht notwendig die Liste zu iterieren, da jedes Kind für sich DetatchChildren an diesem Objekt aufruft und sich somit // selber entfernt. Daher muss immer nur ein beliebiges Element (hier das letzte) gelöscht werden, bis die Liste leer ist. - while (!m_Children.empty()) - { + while (!m_Children.empty()) { BS_RenderObjectPtr CurPtr = m_Children.back(); CurPtr.Erase(); } } -bool BS_RenderObject::AddObject(BS_RenderObjectPtr pObject) -{ - if (!pObject.IsValid()) - { +bool BS_RenderObject::AddObject(BS_RenderObjectPtr pObject) { + if (!pObject.IsValid()) { BS_LOG_ERRORLN("Tried to add a null object to a renderobject."); return false; } // Objekt in die Kinderliste einfügen. m_Children.push_back(pObject); - + // Sicherstellen, dass vor dem nächsten Rendern die Renderreihenfolge aktualisiert wird. if (m_ParentPtr.IsValid()) m_ParentPtr->SignalChildChange(); return true; } -bool BS_RenderObject::DetatchChildren(BS_RenderObjectPtr pObject) -{ +bool BS_RenderObject::DetatchChildren(BS_RenderObjectPtr pObject) { // Kinderliste durchgehen und Objekt entfernen falls vorhanden RENDEROBJECT_ITER it = m_Children.begin(); for (; it != m_Children.end(); ++it) - if (*it == pObject) - { + if (*it == pObject) { m_Children.erase(it); return true; } @@ -272,13 +250,11 @@ bool BS_RenderObject::DetatchChildren(BS_RenderObjectPtr pObjec return false; } -void BS_RenderObject::SortRenderObjects() -{ +void BS_RenderObject::SortRenderObjects() { std::sort(m_Children.begin(), m_Children.end(), Greater); } -void BS_RenderObject::UpdateAbsolutePos() -{ +void BS_RenderObject::UpdateAbsolutePos() { CalcAbsolutePos(m_AbsoluteX, m_AbsoluteY); RENDEROBJECT_ITER it = m_Children.begin(); @@ -289,42 +265,36 @@ void BS_RenderObject::UpdateAbsolutePos() // Get-Methoden // ------------ -bool BS_RenderObject::GetObjectIntersection(BS_RenderObjectPtr pObject, BS_Rect& Result) -{ +bool BS_RenderObject::GetObjectIntersection(BS_RenderObjectPtr pObject, BS_Rect &Result) { return m_BBox.Intersect(pObject->GetBBox(), Result); } // Set-Methoden // ------------ -void BS_RenderObject::SetPos(int X, int Y) -{ - m_X = X; +void BS_RenderObject::SetPos(int X, int Y) { + m_X = X; m_Y = Y; UpdateAbsolutePos(); } -void BS_RenderObject::SetX(int X) -{ +void BS_RenderObject::SetX(int X) { m_X = X; UpdateAbsolutePos(); } -void BS_RenderObject::SetY(int Y) -{ +void BS_RenderObject::SetY(int Y) { m_Y = Y; UpdateAbsolutePos(); } -void BS_RenderObject::SetZ(int Z) -{ +void BS_RenderObject::SetZ(int Z) { if (Z < 0) BS_LOG_ERRORLN("Tried to set a negative Z value (%d).", Z); else m_Z = Z; } -void BS_RenderObject::SetVisible(bool Visible) -{ +void BS_RenderObject::SetVisible(bool Visible) { m_Visible = Visible; } @@ -332,13 +302,11 @@ void BS_RenderObject::SetVisible(bool Visible) // Objekterzeuger // ----------------------------------------------------------------------------- -BS_RenderObjectPtr BS_RenderObject::AddAnimation(const Common::String& Filename) -{ +BS_RenderObjectPtr BS_RenderObject::AddAnimation(const Common::String &Filename) { BS_RenderObjectPtr AniPtr(new BS_Animation(this, Filename)); if (AniPtr.IsValid() && AniPtr->GetInitSuccess()) return AniPtr; - else - { + else { if (AniPtr.IsValid()) AniPtr.Erase(); return BS_RenderObjectPtr(); } @@ -347,13 +315,11 @@ BS_RenderObjectPtr BS_RenderObject::AddAnimation(const Common::Str // ----------------------------------------------------------------------------- -BS_RenderObjectPtr BS_RenderObject::AddAnimation(const BS_AnimationTemplate & AnimationTemplate) -{ - BS_Animation * AniPtr = new BS_Animation(this, AnimationTemplate); +BS_RenderObjectPtr BS_RenderObject::AddAnimation(const BS_AnimationTemplate &AnimationTemplate) { + BS_Animation *AniPtr = new BS_Animation(this, AnimationTemplate); if (AniPtr && AniPtr->GetInitSuccess()) return AniPtr; - else - { + else { delete AniPtr; return BS_RenderObjectPtr(); } @@ -361,13 +327,11 @@ BS_RenderObjectPtr BS_RenderObject::AddAnimation(const BS_Animatio // ----------------------------------------------------------------------------- -BS_RenderObjectPtr BS_RenderObject::AddBitmap(const Common::String& Filename) -{ +BS_RenderObjectPtr BS_RenderObject::AddBitmap(const Common::String &Filename) { BS_RenderObjectPtr BitmapPtr(new BS_StaticBitmap(this, Filename)); if (BitmapPtr.IsValid() && BitmapPtr->GetInitSuccess()) return BS_RenderObjectPtr(BitmapPtr); - else - { + else { if (BitmapPtr.IsValid()) BitmapPtr.Erase(); return BS_RenderObjectPtr(); } @@ -375,13 +339,11 @@ BS_RenderObjectPtr BS_RenderObject::AddBitmap(const Common::String& F // ----------------------------------------------------------------------------- -BS_RenderObjectPtr BS_RenderObject::AddDynamicBitmap(unsigned int Width, unsigned int Height) -{ +BS_RenderObjectPtr BS_RenderObject::AddDynamicBitmap(unsigned int Width, unsigned int Height) { BS_RenderObjectPtr BitmapPtr(new BS_DynamicBitmap(this, Width, Height)); if (BitmapPtr.IsValid() && BitmapPtr->GetInitSuccess()) return BitmapPtr; - else - { + else { if (BitmapPtr.IsValid()) BitmapPtr.Erase(); return BS_RenderObjectPtr(); } @@ -389,13 +351,11 @@ BS_RenderObjectPtr BS_RenderObject::AddDynamicBitmap(unsigned int Wid // ----------------------------------------------------------------------------- -BS_RenderObjectPtr BS_RenderObject::AddPanel(int Width, int Height, unsigned int Color) -{ +BS_RenderObjectPtr BS_RenderObject::AddPanel(int Width, int Height, unsigned int Color) { BS_RenderObjectPtr PanelPtr(new BS_Panel(this, Width, Height, Color)); if (PanelPtr.IsValid() && PanelPtr->GetInitSuccess()) return PanelPtr; - else - { + else { if (PanelPtr.IsValid()) PanelPtr.Erase(); return BS_RenderObjectPtr(); } @@ -403,16 +363,12 @@ BS_RenderObjectPtr BS_RenderObject::AddPanel(int Width, int Height, un // ----------------------------------------------------------------------------- -BS_RenderObjectPtr BS_RenderObject::AddText(const Common::String & Font, const std::string & Text) -{ +BS_RenderObjectPtr BS_RenderObject::AddText(const Common::String &Font, const std::string &Text) { BS_RenderObjectPtr TextPtr(new BS_Text(this)); - if (TextPtr.IsValid() && TextPtr->GetInitSuccess() && TextPtr->SetFont(Font)) - { + if (TextPtr.IsValid() && TextPtr->GetInitSuccess() && TextPtr->SetFont(Font)) { TextPtr->SetText(Text); return TextPtr; - } - else - { + } else { if (TextPtr.IsValid()) TextPtr.Erase(); return BS_RenderObjectPtr(); } @@ -421,8 +377,7 @@ BS_RenderObjectPtr BS_RenderObject::AddText(const Common::String & Font // Persistenz-Methoden // ------------------- -bool BS_RenderObject::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_RenderObject::Persist(BS_OutputPersistenceBlock &Writer) { // Typ und Handle werden als erstes gespeichert, damit beim Laden ein Objekt vom richtigen Typ mit dem richtigen Handle erzeugt werden kann. Writer.Write(static_cast(m_Type)); Writer.Write(m_Handle); @@ -458,8 +413,7 @@ bool BS_RenderObject::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_RenderObject::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_RenderObject::Unpersist(BS_InputPersistenceBlock &Reader) { // Typ und Handle wurden schon von RecreatePersistedRenderObject() ausgelesen. Jetzt werden die restlichen Objekteigenschaften ausgelesen. Reader.Read(m_X); Reader.Read(m_Y); @@ -496,8 +450,7 @@ bool BS_RenderObject::Unpersist(BS_InputPersistenceBlock & Reader) // ----------------------------------------------------------------------------- -bool BS_RenderObject::PersistChildren(BS_OutputPersistenceBlock & Writer) -{ +bool BS_RenderObject::PersistChildren(BS_OutputPersistenceBlock &Writer) { bool Result = true; // Kinderanzahl speichern. @@ -505,8 +458,7 @@ bool BS_RenderObject::PersistChildren(BS_OutputPersistenceBlock & Writer) // Rekursiv alle Kinder speichern. RENDEROBJECT_LIST::iterator It = m_Children.begin(); - while (It != m_Children.end()) - { + while (It != m_Children.end()) { Result &= (*It)->Persist(Writer); ++It; } @@ -516,8 +468,7 @@ bool BS_RenderObject::PersistChildren(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_RenderObject::UnpersistChildren(BS_InputPersistenceBlock & Reader) -{ +bool BS_RenderObject::UnpersistChildren(BS_InputPersistenceBlock &Reader) { bool Result = true; // Kinderanzahl einlesen. @@ -526,8 +477,7 @@ bool BS_RenderObject::UnpersistChildren(BS_InputPersistenceBlock & Reader) if (!Reader.IsGood()) return false; // Alle Kinder rekursiv wieder herstellen. - for (unsigned int i = 0; i < ChildrenCount; ++i) - { + for (unsigned int i = 0; i < ChildrenCount; ++i) { if (!RecreatePersistedRenderObject(Reader).IsValid()) return false; } @@ -536,8 +486,7 @@ bool BS_RenderObject::UnpersistChildren(BS_InputPersistenceBlock & Reader) // ----------------------------------------------------------------------------- -BS_RenderObjectPtr BS_RenderObject::RecreatePersistedRenderObject(BS_InputPersistenceBlock & Reader) -{ +BS_RenderObjectPtr BS_RenderObject::RecreatePersistedRenderObject(BS_InputPersistenceBlock &Reader) { BS_RenderObjectPtr Result; // Typ und Handle auslesen. @@ -547,8 +496,7 @@ BS_RenderObjectPtr BS_RenderObject::RecreatePersistedRenderObje Reader.Read(Handle); if (!Reader.IsGood()) return Result; - switch (Type) - { + switch (Type) { case TYPE_PANEL: Result = new BS_Panel(Reader, this, Handle); break; @@ -578,8 +526,7 @@ BS_RenderObjectPtr BS_RenderObject::RecreatePersistedRenderObje // Hilfs-Methoden // -------------- -bool BS_RenderObject::Greater(const BS_RenderObjectPtr lhs, const BS_RenderObjectPtr rhs) -{ +bool BS_RenderObject::Greater(const BS_RenderObjectPtr lhs, const BS_RenderObjectPtr rhs) { // Das Objekt mit dem kleinem Z-Wert müssen zuerst gerendert werden. if (lhs->m_Z != rhs->m_Z) return lhs->m_Z < rhs->m_Z; diff --git a/engines/sword25/gfx/renderobject.h b/engines/sword25/gfx/renderobject.h index 545a6bf8db..9424303505 100644 --- a/engines/sword25/gfx/renderobject.h +++ b/engines/sword25/gfx/renderobject.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -33,13 +33,13 @@ */ /* - BS_RenderObject - --------------- - Dieses ist die Klasse die sämtliche sichtbaren Objekte beschreibt. Alle anderen sichtbaren Objekte müssen von ihr abgeleitet werden. - Diese Klasse erledigt Aufgaben wie: minimales Neuzeichnen, Renderreihenfolge, Objekthierachie. - Alle BS_RenderObject Instanzen werden von einem BS_RenderObjectManager in einem Baum verwaltet. + BS_RenderObject + --------------- + Dieses ist die Klasse die sämtliche sichtbaren Objekte beschreibt. Alle anderen sichtbaren Objekte müssen von ihr abgeleitet werden. + Diese Klasse erledigt Aufgaben wie: minimales Neuzeichnen, Renderreihenfolge, Objekthierachie. + Alle BS_RenderObject Instanzen werden von einem BS_RenderObjectManager in einem Baum verwaltet. - Autor: Malte Thiesen + Autor: Malte Thiesen */ #ifndef SWORD25_RENDEROBJECT_H @@ -69,19 +69,17 @@ class BS_Text; // Klassendefinition /** - @brief Dieses ist die Klasse die sämtliche sichtbaren Objekte beschreibt. - - Alle anderen sichtbaren Objekte müssen von ihr abgeleitet werden. - Diese Klasse erledigt Aufgaben wie: minimales Neuzeichnen, Renderreihenfolge, Objekthierachie. - Alle BS_RenderObject Instanzen werden von einem BS_RenderObjektManager in einem Baum verwaltet. + @brief Dieses ist die Klasse die sämtliche sichtbaren Objekte beschreibt. + + Alle anderen sichtbaren Objekte müssen von ihr abgeleitet werden. + Diese Klasse erledigt Aufgaben wie: minimales Neuzeichnen, Renderreihenfolge, Objekthierachie. + Alle BS_RenderObject Instanzen werden von einem BS_RenderObjektManager in einem Baum verwaltet. */ -class BS_RenderObject -{ +class BS_RenderObject { public: // Konstanten // ---------- - enum TYPES - { + enum TYPES { /// Das Wurzelobjekt. Siehe BS_RenderObjectManager TYPE_ROOT, /// Ein Image. Siehe BS_Bitmap. @@ -102,111 +100,111 @@ public: /** @brief Erzeugt ein Bitmap als Kinderobjekt des Renderobjektes. - @param FileName der Dateiname der Quellbilddatei - @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
- Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @param FileName der Dateiname der Quellbilddatei + @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
+ Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ BS_RenderObjectPtr AddBitmap(const Common::String &FileName); /** - @brief Erzeugt ein veränderbares Bitmap als Kinderobjekt des Renderobjektes. - @param Width die Breite des Bitmaps - @param Height die Höhe des Bitmaps - @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
- Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @brief Erzeugt ein veränderbares Bitmap als Kinderobjekt des Renderobjektes. + @param Width die Breite des Bitmaps + @param Height die Höhe des Bitmaps + @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
+ Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ BS_RenderObjectPtr AddDynamicBitmap(unsigned int Width, unsigned int Height); /** @brief Erzeugt eine Animation auf Basis einer Animationsdatei als Kinderobjekt des Renderobjektes. - @param FileName der Dateiname der Quelldatei - @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
- Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @param FileName der Dateiname der Quelldatei + @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
+ Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ BS_RenderObjectPtr AddAnimation(const Common::String &FileName); /** - @brief Erzeugt eine Animation auf Basis eines Animationstemplate als Kinderobjekt des Renderobjektes. - @param pAnimationTemplate ein Pointer auf das Animationstemplate - @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
- Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. - @remark Das Renderobjekt übernimmt die Verwaltung des Animationstemplate. + @brief Erzeugt eine Animation auf Basis eines Animationstemplate als Kinderobjekt des Renderobjektes. + @param pAnimationTemplate ein Pointer auf das Animationstemplate + @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
+ Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @remark Das Renderobjekt übernimmt die Verwaltung des Animationstemplate. */ BS_RenderObjectPtr AddAnimation(const BS_AnimationTemplate &AnimationTemplate); /** @brief Erzeugt ein neues Farbpanel als Kinderobjekt des Renderobjektes. - @param Width die Breite des Panels - @param Height die Höhe des Panels - @param Color die Farbe des Panels.
- Der Standardwert ist Schwarz (BS_RGB(0, 0, 0)). - @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
- Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @param Width die Breite des Panels + @param Height die Höhe des Panels + @param Color die Farbe des Panels.
+ Der Standardwert ist Schwarz (BS_RGB(0, 0, 0)). + @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
+ Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ - + BS_RenderObjectPtr AddPanel(int Width, int Height, unsigned int Color = 0xff000000); /** @brief Erzeugt ein Textobjekt als Kinderobjekt des Renderobjektes. - @param Font der Dateiname des zu verwendenen Fonts - @param Text der anzuzeigende Text.
- Der Standardwert ist "". - @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
- Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @param Font der Dateiname des zu verwendenen Fonts + @param Text der anzuzeigende Text.
+ Der Standardwert ist "". + @return Gibt einen BS_RenderObjectPtr auf das erzeugte Objekt zurück.
+ Falls ein Fehler aufgetreten ist wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ BS_RenderObjectPtr AddText(const Common::String &Font, const Common::String &Text = ""); // Cast-Methoden // ------------- /** - @brief Castet das Objekt zu einem BS_Bitmap-Objekt wenn zulässig. - @return Gibt einen BS_RenderObjectPtr auf das Objekt zurück.
- Falls der Cast nicht zulässig ist, wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @brief Castet das Objekt zu einem BS_Bitmap-Objekt wenn zulässig. + @return Gibt einen BS_RenderObjectPtr auf das Objekt zurück.
+ Falls der Cast nicht zulässig ist, wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ - BS_RenderObjectPtr ToBitmap() - { - if (m_Type == TYPE_STATICBITMAP || m_Type == TYPE_DYNAMICBITMAP) return BS_RenderObjectPtr(this); else return BS_RenderObjectPtr(); + BS_RenderObjectPtr ToBitmap() { + if (m_Type == TYPE_STATICBITMAP || m_Type == TYPE_DYNAMICBITMAP) return BS_RenderObjectPtr(this); + else return BS_RenderObjectPtr(); } /** - @brief Castet das Objekt zu einem BS_Animation-Objekt wenn zulässig. - @return Gibt einen BS_RenderObjectPtr auf das Objekt zurück.
- Falls der Cast nicht zulässig ist, wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @brief Castet das Objekt zu einem BS_Animation-Objekt wenn zulässig. + @return Gibt einen BS_RenderObjectPtr auf das Objekt zurück.
+ Falls der Cast nicht zulässig ist, wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ - BS_RenderObjectPtr ToAnimation() - { - if (m_Type == TYPE_ANIMATION) return BS_RenderObjectPtr(this); else return BS_RenderObjectPtr(); + BS_RenderObjectPtr ToAnimation() { + if (m_Type == TYPE_ANIMATION) return BS_RenderObjectPtr(this); + else return BS_RenderObjectPtr(); } /** - @brief Castet das Objekt zu einem BS_Panel-Objekt wenn zulässig. - @return Gibt einen BS_RenderObjectPtr auf das Objekt zurück.
- Falls der Cast nicht zulässig ist, wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @brief Castet das Objekt zu einem BS_Panel-Objekt wenn zulässig. + @return Gibt einen BS_RenderObjectPtr auf das Objekt zurück.
+ Falls der Cast nicht zulässig ist, wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ - BS_RenderObjectPtr ToPanel() - { - if (m_Type == TYPE_PANEL) return BS_RenderObjectPtr(this); else return BS_RenderObjectPtr(); + BS_RenderObjectPtr ToPanel() { + if (m_Type == TYPE_PANEL) return BS_RenderObjectPtr(this); + else return BS_RenderObjectPtr(); } /** - @brief Castet das Object zu einem BS_Text-Objekt wenn zulässig. - @return Gibt einen BS_RenderObjectPtr auf das Objekt zurück.
- Falls der Cast nicht zulässig ist, wird ein ungültiger BS_RenderObjectPtr zurückgegeben. + @brief Castet das Object zu einem BS_Text-Objekt wenn zulässig. + @return Gibt einen BS_RenderObjectPtr auf das Objekt zurück.
+ Falls der Cast nicht zulässig ist, wird ein ungültiger BS_RenderObjectPtr zurückgegeben. */ - BS_RenderObjectPtr ToText() - { - if (m_Type == TYPE_TEXT) return BS_RenderObjectPtr(this); else return BS_RenderObjectPtr(); + BS_RenderObjectPtr ToText() { + if (m_Type == TYPE_TEXT) return BS_RenderObjectPtr(this); + else return BS_RenderObjectPtr(); } // Konstruktor / Desktruktor // ------------------------- /** - @brief Erzeugt ein neues BS_RenderObject. - @param pKernel ein Pointer auf den Kernel - @param pParent ein Pointer auf das Elternobjekt des neuen Objektes im Objektbaum.
- Der Pointer darf nicht NULL sein. - @param Type der Objekttyp
- Der Typ BS_RenderObject::TYPE_ROOT ist nicht zulässig. Wurzelknoten müssen mit dem alternativen Konstruktor erzeugt - werden. - @param Handle das Handle, welches dem Objekt zugewiesen werden soll.
- Dieser Parameter erzwingt ein bestimmtes Handle für das neue Objekt, oder wählt automatisch ein Handle, wenn der Parameter 0 ist. - Ist das gewünschte Handle bereits vergeben, gibt GetInitSuccess() false zurück.
- Der Standardwert ist 0. - @remark Nach dem Aufruf des Konstruktors kann über die Methode GetInitSuccess() abgefragt werden, ob die Konstruktion erfolgreich war.
- Es ist nicht notwendig alle BS_RenderObject Instanzen einzeln zu löschen. Dieses geschiet automatisch beim Löschen eines - Vorfahren oder beim Löschen des zuständigen BS_RenderObjectManager. + @brief Erzeugt ein neues BS_RenderObject. + @param pKernel ein Pointer auf den Kernel + @param pParent ein Pointer auf das Elternobjekt des neuen Objektes im Objektbaum.
+ Der Pointer darf nicht NULL sein. + @param Type der Objekttyp
+ Der Typ BS_RenderObject::TYPE_ROOT ist nicht zulässig. Wurzelknoten müssen mit dem alternativen Konstruktor erzeugt + werden. + @param Handle das Handle, welches dem Objekt zugewiesen werden soll.
+ Dieser Parameter erzwingt ein bestimmtes Handle für das neue Objekt, oder wählt automatisch ein Handle, wenn der Parameter 0 ist. + Ist das gewünschte Handle bereits vergeben, gibt GetInitSuccess() false zurück.
+ Der Standardwert ist 0. + @remark Nach dem Aufruf des Konstruktors kann über die Methode GetInitSuccess() abgefragt werden, ob die Konstruktion erfolgreich war.
+ Es ist nicht notwendig alle BS_RenderObject Instanzen einzeln zu löschen. Dieses geschiet automatisch beim Löschen eines + Vorfahren oder beim Löschen des zuständigen BS_RenderObjectManager. */ BS_RenderObject(BS_RenderObjectPtr pParent, TYPES Type, unsigned int Handle = 0); virtual ~BS_RenderObject(); @@ -214,119 +212,145 @@ public: // Interface // --------- /** - @brief Rendert des Objekt und alle seine Unterobjekte. - @return Gibt false zurück, falls beim Rendern ein Fehler aufgetreten ist. - @remark Vor jedem Aufruf dieser Methode muss ein Aufruf von UpdateObjectState() erfolgt sein. - Dieses kann entweder direkt geschehen oder durch den Aufruf von UpdateObjectState() an einem Vorfahren-Objekt.
- Diese Methode darf nur von BS_RenderObjectManager aufgerufen werden. + @brief Rendert des Objekt und alle seine Unterobjekte. + @return Gibt false zurück, falls beim Rendern ein Fehler aufgetreten ist. + @remark Vor jedem Aufruf dieser Methode muss ein Aufruf von UpdateObjectState() erfolgt sein. + Dieses kann entweder direkt geschehen oder durch den Aufruf von UpdateObjectState() an einem Vorfahren-Objekt.
+ Diese Methode darf nur von BS_RenderObjectManager aufgerufen werden. */ - bool Render(); + bool Render(); /** - @brief Bereitet das Objekt und alle seine Unterobjekte auf einen Rendervorgang vor. - Hierbei werden alle Dirty-Rectangles berechnet und die Renderreihenfolge aktualisiert. - @return Gibt false zurück, falls ein Fehler aufgetreten ist. - @remark Diese Methode darf nur von BS_RenderObjectManager aufgerufen werden. + @brief Bereitet das Objekt und alle seine Unterobjekte auf einen Rendervorgang vor. + Hierbei werden alle Dirty-Rectangles berechnet und die Renderreihenfolge aktualisiert. + @return Gibt false zurück, falls ein Fehler aufgetreten ist. + @remark Diese Methode darf nur von BS_RenderObjectManager aufgerufen werden. */ - bool UpdateObjectState(); + bool UpdateObjectState(); /** - @brief Löscht alle Kinderobjekte. + @brief Löscht alle Kinderobjekte. */ void DeleteAllChildren(); // Accessor-Methoden // ----------------- /** - @brief Setzt die Position des Objektes. - @param X die neue X-Koordinate des Objektes relativ zum Elternobjekt. - @param Y die neue Y-Koordinate des Objektes relativ zum Elternobjekt. + @brief Setzt die Position des Objektes. + @param X die neue X-Koordinate des Objektes relativ zum Elternobjekt. + @param Y die neue Y-Koordinate des Objektes relativ zum Elternobjekt. */ virtual void SetPos(int X, int Y); /** - @brief Setzt die Position des Objektes auf der X-Achse. - @param X die neue X-Koordinate des Objektes relativ zum Elternobjekt. + @brief Setzt die Position des Objektes auf der X-Achse. + @param X die neue X-Koordinate des Objektes relativ zum Elternobjekt. */ virtual void SetX(int X); /** - @brief Setzt die Position des Objektes auf der Y-Achse. - @param Y die neue Y-Koordinate des Objektes relativ zum Elternobjekt. + @brief Setzt die Position des Objektes auf der Y-Achse. + @param Y die neue Y-Koordinate des Objektes relativ zum Elternobjekt. */ virtual void SetY(int Y); /** - @brief Setzt den Z-Wert des Objektes. - @param Z der neue Z-Wert des Objektes relativ zum Elternobjekt
- Negative Z-Werte sind nicht zulässig. - @remark Der Z-Wert legt die Renderreihenfolge der Objekte fest. Objekte mit niedrigem Z-Wert werden vor Objekten mit höherem - Z-Wert gezeichnet. Je höher der Z-Wert desto weiter "vorne" liegt ein Objekt also.
- Wie alle andere Attribute ist auch dieses relativ zum Elternobjekt, ein Kinderobjekt kann also nie unter seinem - Elternobjekt liegen, auch wenn es einen Z-Wert von 0 hat. + @brief Setzt den Z-Wert des Objektes. + @param Z der neue Z-Wert des Objektes relativ zum Elternobjekt
+ Negative Z-Werte sind nicht zulässig. + @remark Der Z-Wert legt die Renderreihenfolge der Objekte fest. Objekte mit niedrigem Z-Wert werden vor Objekten mit höherem + Z-Wert gezeichnet. Je höher der Z-Wert desto weiter "vorne" liegt ein Objekt also.
+ Wie alle andere Attribute ist auch dieses relativ zum Elternobjekt, ein Kinderobjekt kann also nie unter seinem + Elternobjekt liegen, auch wenn es einen Z-Wert von 0 hat. */ virtual void SetZ(int Z); /** - @brief Setzt die Sichtbarkeit eine Objektes. - @param Visible der neue Sichtbarkeits-Zustand des Objektes
- true entspricht sichtbar, false entspricht unsichtbar. + @brief Setzt die Sichtbarkeit eine Objektes. + @param Visible der neue Sichtbarkeits-Zustand des Objektes
+ true entspricht sichtbar, false entspricht unsichtbar. */ virtual void SetVisible(bool Visible); /** - @brief Gibt die Position des Objektes auf der X-Achse relativ zum Elternobjekt zurück. + @brief Gibt die Position des Objektes auf der X-Achse relativ zum Elternobjekt zurück. */ - virtual int GetX() const { return m_X; } + virtual int GetX() const { + return m_X; + } /** - @brief Gibt die Position des Objektes auf der Y-Achse relativ zum Elternobjekt zurück. + @brief Gibt die Position des Objektes auf der Y-Achse relativ zum Elternobjekt zurück. */ - virtual int GetY() const { return m_Y; } + virtual int GetY() const { + return m_Y; + } /** - @brief Gibt die absolute Position des Objektes auf der X-Achse zurück. + @brief Gibt die absolute Position des Objektes auf der X-Achse zurück. */ - virtual int GetAbsoluteX() const { return m_AbsoluteX; } + virtual int GetAbsoluteX() const { + return m_AbsoluteX; + } /** - @brief Gibt die absolute Position des Objektes auf der Y-Achse zurück. + @brief Gibt die absolute Position des Objektes auf der Y-Achse zurück. */ - virtual int GetAbsoluteY() const { return m_AbsoluteY; } + virtual int GetAbsoluteY() const { + return m_AbsoluteY; + } /** - @brief Gibt den Z-Wert des Objektes relativ zum Elternobjekt zurück. - @remark Der Z-Wert legt die Renderreihenfolge der Objekte fest. Objekte mit niedrigem Z-Wert werden vor Objekten mit höherem - Z-Wert gezeichnet. Je höher der Z-Wert desto weiter "vorne" liegt ein Objekt also.
- Wie alle andere Attribute ist auch dieses relativ zum Elternobjekt, ein Kinderobjekt kann also nie unter seinem - Elternobjekt liegen, auch wenn es einen Z-Wert von 0 hat. + @brief Gibt den Z-Wert des Objektes relativ zum Elternobjekt zurück. + @remark Der Z-Wert legt die Renderreihenfolge der Objekte fest. Objekte mit niedrigem Z-Wert werden vor Objekten mit höherem + Z-Wert gezeichnet. Je höher der Z-Wert desto weiter "vorne" liegt ein Objekt also.
+ Wie alle andere Attribute ist auch dieses relativ zum Elternobjekt, ein Kinderobjekt kann also nie unter seinem + Elternobjekt liegen, auch wenn es einen Z-Wert von 0 hat. */ - int GetZ() const { return m_Z; } + int GetZ() const { + return m_Z; + } /** - @brief Gibt die Breite des Objektes zurück. + @brief Gibt die Breite des Objektes zurück. */ - int GetWidth() const { return m_Width; } + int GetWidth() const { + return m_Width; + } /** - @brief Gibt die Höhe des Objektes zurück. + @brief Gibt die Höhe des Objektes zurück. */ - int GetHeight() const { return m_Height; } + int GetHeight() const { + return m_Height; + } /** - @brief Gibt den Sichtbarkeitszustand des Objektes zurück. - @return Gibt den Sichtbarkeitszustand des Objektes zurück.
- true entspricht sichtbar, false entspricht unsichtbar. + @brief Gibt den Sichtbarkeitszustand des Objektes zurück. + @return Gibt den Sichtbarkeitszustand des Objektes zurück.
+ true entspricht sichtbar, false entspricht unsichtbar. */ - bool IsVisible() const { return m_Visible; } + bool IsVisible() const { + return m_Visible; + } /** - @brief Gibt den Typ des Objektes zurück. + @brief Gibt den Typ des Objektes zurück. */ - TYPES GetType() const { return m_Type; } + TYPES GetType() const { + return m_Type; + } /** - @brief Gibt zurück, ob das Objekt erfolgreich initialisiert wurde. - @remark Hässlicher Workaround um das Problem, dass Konstruktoren keine Rückgabewerte haben. + @brief Gibt zurück, ob das Objekt erfolgreich initialisiert wurde. + @remark Hässlicher Workaround um das Problem, dass Konstruktoren keine Rückgabewerte haben. */ - bool GetInitSuccess() const { return m_InitSuccess; } + bool GetInitSuccess() const { + return m_InitSuccess; + } /** - @brief Gibt die Bounding-Box des Objektes zurück. - @remark Diese Angabe erfolgt ausnahmsweise in Bildschirmkoordianten und nicht relativ zum Elternobjekt. + @brief Gibt die Bounding-Box des Objektes zurück. + @remark Diese Angabe erfolgt ausnahmsweise in Bildschirmkoordianten und nicht relativ zum Elternobjekt. */ - const BS_Rect& GetBBox() const { return m_BBox; } + const BS_Rect &GetBBox() const { + return m_BBox; + } /** - @brief Stellt sicher, dass das Objekt im nächsten Frame neu gezeichnet wird. + @brief Stellt sicher, dass das Objekt im nächsten Frame neu gezeichnet wird. */ - void ForceRefresh() { m_RefreshForced = true; }; + void ForceRefresh() { + m_RefreshForced = true; + }; /** - @brief Gibt das Handle des Objekte zurück. + @brief Gibt das Handle des Objekte zurück. */ - unsigned int GetHandle() const { return m_Handle; } + unsigned int GetHandle() const { + return m_Handle; + } // Persistenz-Methoden // ------------------- @@ -341,28 +365,28 @@ public: protected: // Typen // ----- - typedef Common::List > RENDEROBJECT_LIST; - typedef Common::List >::iterator RENDEROBJECT_ITER; - - int m_X; ///< Die X-Position des Objektes relativ zum Eltern-Objekt - int m_Y; ///< Die Y-Position des Objektes relativ zum Eltern-Objekt - int m_AbsoluteX; ///< Die absolute X-Position des Objektes - int m_AbsoluteY; ///< Die absolute Y-Position des Objektes - int m_Z; ///< Der Z-Wert des Objektes relativ zum Eltern-Objekt - int m_Width; ///< Die Breite des Objektes - int m_Height; ///< Die Höhe des Objektes - bool m_Visible; ///< Ist true, wenn das Objekt sichtbar ist - bool m_ChildChanged; ///< Ist true, wenn sich ein Kinderobjekt verändert hat - TYPES m_Type; ///< Der Objekttyp - bool m_InitSuccess; ///< Ist true, wenn Objekt erfolgreich intialisiert werden konnte - BS_Rect m_BBox; ///< Die Bounding-Box des Objektes in Bildschirmkoordinaten + typedef Common::List > RENDEROBJECT_LIST; + typedef Common::List >::iterator RENDEROBJECT_ITER; + + int m_X; ///< Die X-Position des Objektes relativ zum Eltern-Objekt + int m_Y; ///< Die Y-Position des Objektes relativ zum Eltern-Objekt + int m_AbsoluteX; ///< Die absolute X-Position des Objektes + int m_AbsoluteY; ///< Die absolute Y-Position des Objektes + int m_Z; ///< Der Z-Wert des Objektes relativ zum Eltern-Objekt + int m_Width; ///< Die Breite des Objektes + int m_Height; ///< Die Höhe des Objektes + bool m_Visible; ///< Ist true, wenn das Objekt sichtbar ist + bool m_ChildChanged; ///< Ist true, wenn sich ein Kinderobjekt verändert hat + TYPES m_Type; ///< Der Objekttyp + bool m_InitSuccess; ///< Ist true, wenn Objekt erfolgreich intialisiert werden konnte + BS_Rect m_BBox; ///< Die Bounding-Box des Objektes in Bildschirmkoordinaten // Kopien der Variablen, die für die Errechnung des Dirty-Rects und zur Bestimmung der Objektveränderung notwendig sind - BS_Rect m_OldBBox; - int m_OldX; - int m_OldY; - int m_OldZ; - bool m_OldVisible; + BS_Rect m_OldBBox; + int m_OldX; + int m_OldY; + int m_OldZ; + bool m_OldVisible; /// Ein Pointer auf den BS_RenderObjektManager, der das Objekt verwaltet. BS_RenderObjectManager *m_ManagerPtr; @@ -370,13 +394,13 @@ protected: // Render-Methode // -------------- /** - @brief Einschubmethode, die den tatsächlichen Redervorgang durchführt. + @brief Einschubmethode, die den tatsächlichen Redervorgang durchführt. - Diese Methode wird von Render() aufgerufen um das Objekt darzustellen. - Diese Methode sollte von allen Klassen implementiert werden, die von BS_RederObject erben, um das Zeichnen umzusetzen. + Diese Methode wird von Render() aufgerufen um das Objekt darzustellen. + Diese Methode sollte von allen Klassen implementiert werden, die von BS_RederObject erben, um das Zeichnen umzusetzen. - @return Gibt false zurück, falls das Rendern fehlgeschlagen ist. - @remark + @return Gibt false zurück, falls das Rendern fehlgeschlagen ist. + @remark */ virtual bool DoRender() = 0; // { return true; }; @@ -393,27 +417,29 @@ protected: // / | \. // / | \. // Background Interface Maus - // / \ / | \. + // / \ / | \. // / \ / | \. // George Tür Icn1 Icn2 Icn3 - // + // // Wenn jetzt das Interface mit SetVisible() ausgeblendet würde, verschwinden auch die Icons, die sich im Interface // befinden. // Wenn der Hintergrund bewegt wird (Scrolling), bewegen sich auch die darauf befindlichen Gegenstände und Personen. /// Ein Pointer auf das Elternobjekt. - BS_RenderObjectPtr m_ParentPtr; + BS_RenderObjectPtr m_ParentPtr; /// Die Liste der Kinderobjekte nach der Renderreihenfolge geordnet - RENDEROBJECT_LIST m_Children; + RENDEROBJECT_LIST m_Children; /** - @brief Gibt einen Pointer auf den BS_RenderObjektManager zurück, der das Objekt verwaltet. + @brief Gibt einen Pointer auf den BS_RenderObjektManager zurück, der das Objekt verwaltet. */ - BS_RenderObjectManager* GetManager() const { return m_ManagerPtr; } + BS_RenderObjectManager *GetManager() const { + return m_ManagerPtr; + } /** - @brief Fügt dem Objekt ein neues Kinderobjekt hinzu. - @param pObject ein Pointer auf das einzufügende Objekt - @return Gibt false zurück, falls das Objekt nicht eingefügt werden konnte. + @brief Fügt dem Objekt ein neues Kinderobjekt hinzu. + @param pObject ein Pointer auf das einzufügende Objekt + @return Gibt false zurück, falls das Objekt nicht eingefügt werden konnte. */ bool AddObject(BS_RenderObjectPtr pObject); @@ -424,67 +450,69 @@ private: unsigned int m_Handle; /** - @brief Entfernt ein Objekt aus der Kinderliste. - @param pObject ein Pointer auf das zu entfernende Objekt - @return Gibt false zurück, falls das zu entfernende Objekt nicht in der Liste gefunden werden konnte. + @brief Entfernt ein Objekt aus der Kinderliste. + @param pObject ein Pointer auf das zu entfernende Objekt + @return Gibt false zurück, falls das zu entfernende Objekt nicht in der Liste gefunden werden konnte. */ - bool DetatchChildren(BS_RenderObjectPtr pObject); + bool DetatchChildren(BS_RenderObjectPtr pObject); /** - @brief Berechnet die Bounding-Box und registriert das Dirty-Rect beim BS_RenderObjectManager. + @brief Berechnet die Bounding-Box und registriert das Dirty-Rect beim BS_RenderObjectManager. */ - void UpdateBoxes(); + void UpdateBoxes(); /** - @brief Berechnet die Bounding-Box des Objektes. - @return Gibt die Bounding-Box des Objektes in Bildschirmkoordinaten zurück. + @brief Berechnet die Bounding-Box des Objektes. + @return Gibt die Bounding-Box des Objektes in Bildschirmkoordinaten zurück. */ BS_Rect CalcBoundingBox() const; /** - @brief Berechnet das Dirty-Rectangle des Objektes. - @return Gibt das Dirty-Rectangle des Objektes in Bildschirmkoordinaten zurück. + @brief Berechnet das Dirty-Rectangle des Objektes. + @return Gibt das Dirty-Rectangle des Objektes in Bildschirmkoordinaten zurück. */ BS_Rect CalcDirtyRect() const; /** - @brief Berechnet die absolute Position des Objektes. + @brief Berechnet die absolute Position des Objektes. */ void CalcAbsolutePos(int &X, int &Y) const; /** - @brief Berechnet die absolute Position des Objektes auf der X-Achse. + @brief Berechnet die absolute Position des Objektes auf der X-Achse. */ int CalcAbsoluteX() const; /** - @brief Berechnet die absolute Position des Objektes. + @brief Berechnet die absolute Position des Objektes. */ int CalcAbsoluteY() const; /** - @brief Sortiert alle Kinderobjekte nach ihrem Renderang. + @brief Sortiert alle Kinderobjekte nach ihrem Renderang. */ void SortRenderObjects(); /** - @brief Validiert den Zustand eines Objektes nachdem die durch die Veränderung verursachten Folgen abgearbeitet wurden. + @brief Validiert den Zustand eines Objektes nachdem die durch die Veränderung verursachten Folgen abgearbeitet wurden. */ - void ValidateObject(); + void ValidateObject(); /** - @brief Berechnet die absolute Position des Objektes und aller seiner Kinderobjekte neu. + @brief Berechnet die absolute Position des Objektes und aller seiner Kinderobjekte neu. - Diese Methode muss aufgerufen werden, wann immer sich die Position des Objektes verändert. Damit die Kinderobjekte immer die - richtige absolute Position haben. + Diese Methode muss aufgerufen werden, wann immer sich die Position des Objektes verändert. Damit die Kinderobjekte immer die + richtige absolute Position haben. */ void UpdateAbsolutePos(); /** - @brief Teilt dem Objekt mit, dass sich eines seiner Kinderobjekte dahingehend verändert hat, die eine erneute Bestimmung der - Rendereihenfolge verlangt. + @brief Teilt dem Objekt mit, dass sich eines seiner Kinderobjekte dahingehend verändert hat, die eine erneute Bestimmung der + Rendereihenfolge verlangt. */ - void SignalChildChange() { m_ChildChanged = true; } + void SignalChildChange() { + m_ChildChanged = true; + } /** - @brief Berechnet des Schnittrechteck der Bounding-Box des Objektes mit einem anderen Objekt. - @param pObjekt ein Pointer auf das Objekt mit dem geschnitten werden soll - @param Result das Ergebnisrechteck - @return Gibt false zurück, falls sich die Objekte gar nicht schneiden. + @brief Berechnet des Schnittrechteck der Bounding-Box des Objektes mit einem anderen Objekt. + @param pObjekt ein Pointer auf das Objekt mit dem geschnitten werden soll + @param Result das Ergebnisrechteck + @return Gibt false zurück, falls sich die Objekte gar nicht schneiden. */ - bool GetObjectIntersection(BS_RenderObjectPtr pObject, BS_Rect& Result); + bool GetObjectIntersection(BS_RenderObjectPtr pObject, BS_Rect &Result); /** - @brief Vergleichsoperator der auf Objektpointern basiert statt auf Objekten. - @remark Diese Methode wird fürs Sortieren der Kinderliste nach der Rendereihenfolge benutzt. + @brief Vergleichsoperator der auf Objektpointern basiert statt auf Objekten. + @remark Diese Methode wird fürs Sortieren der Kinderliste nach der Rendereihenfolge benutzt. */ static bool Greater(const BS_RenderObjectPtr lhs, const BS_RenderObjectPtr rhs); }; diff --git a/engines/sword25/gfx/renderobjectmanager.cpp b/engines/sword25/gfx/renderobjectmanager.cpp index a77e71b110..10b717c460 100644 --- a/engines/sword25/gfx/renderobjectmanager.cpp +++ b/engines/sword25/gfx/renderobjectmanager.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -57,16 +57,14 @@ namespace Sword25 { // ----------------------------------------------------------------------------- BS_RenderObjectManager::BS_RenderObjectManager(int Width, int Height, int FramebufferCount) : - m_FrameStarted(false) -{ + m_FrameStarted(false) { // Wurzel des BS_RenderObject-Baumes erzeugen. m_RootPtr = new BS_RootRenderObject(this, Width, Height); } // ----------------------------------------------------------------------------- -BS_RenderObjectManager::~BS_RenderObjectManager() -{ +BS_RenderObjectManager::~BS_RenderObjectManager() { // Die Wurzel des Baumes löschen, damit werden alle BS_RenderObjects mitgelöscht. m_RootPtr.Erase(); } @@ -75,8 +73,7 @@ BS_RenderObjectManager::~BS_RenderObjectManager() // Interface // ----------------------------------------------------------------------------- -void BS_RenderObjectManager::StartFrame() -{ +void BS_RenderObjectManager::StartFrame() { m_FrameStarted = true; // Verstrichene Zeit bestimmen @@ -90,8 +87,7 @@ void BS_RenderObjectManager::StartFrame() // ----------------------------------------------------------------------------- -bool BS_RenderObjectManager::Render() -{ +bool BS_RenderObjectManager::Render() { // Den Objekt-Status des Wurzelobjektes aktualisieren. Dadurch werden rekursiv alle Baumelemente aktualisiert. // Beim aktualisieren des Objekt-Status werden auch die Update-Rects gefunden, so dass feststeht, was neu gezeichnet // werden muss. @@ -105,25 +101,22 @@ bool BS_RenderObjectManager::Render() // ----------------------------------------------------------------------------- -void BS_RenderObjectManager::AttatchTimedRenderObject(BS_RenderObjectPtr RenderObjectPtr) -{ +void BS_RenderObjectManager::AttatchTimedRenderObject(BS_RenderObjectPtr RenderObjectPtr) { m_TimedRenderObjects.push_back(RenderObjectPtr); } // ----------------------------------------------------------------------------- -void BS_RenderObjectManager::DetatchTimedRenderObject(BS_RenderObjectPtr RenderObjectPtr) -{ +void BS_RenderObjectManager::DetatchTimedRenderObject(BS_RenderObjectPtr RenderObjectPtr) { RenderObjectList::iterator Iter = find(m_TimedRenderObjects.begin(), m_TimedRenderObjects.end(), RenderObjectPtr); - if (Iter != m_TimedRenderObjects.end()) m_TimedRenderObjects.erase(Iter); + if (Iter != m_TimedRenderObjects.end()) m_TimedRenderObjects.erase(Iter); } // ----------------------------------------------------------------------------- // Persistenz // ----------------------------------------------------------------------------- -bool BS_RenderObjectManager::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_RenderObjectManager::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; // Alle Kinder des Wurzelknotens speichern. Dadurch werden alle BS_RenderObjects gespeichert rekursiv gespeichert. @@ -134,8 +127,7 @@ bool BS_RenderObjectManager::Persist(BS_OutputPersistenceBlock & Writer) // Referenzen auf die TimedRenderObjects persistieren. Writer.Write(m_TimedRenderObjects.size()); RenderObjectList::const_iterator Iter = m_TimedRenderObjects.begin(); - while (Iter != m_TimedRenderObjects.end()) - { + while (Iter != m_TimedRenderObjects.end()) { Writer.Write((*Iter)->GetHandle()); ++Iter; } @@ -148,8 +140,7 @@ bool BS_RenderObjectManager::Persist(BS_OutputPersistenceBlock & Writer) // ----------------------------------------------------------------------------- -bool BS_RenderObjectManager::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_RenderObjectManager::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; // Alle Kinder des Wurzelknotens löschen. Damit werden alle BS_RenderObjects gelöscht. @@ -166,8 +157,7 @@ bool BS_RenderObjectManager::Unpersist(BS_InputPersistenceBlock & Reader) // Referenzen auf die TimedRenderObjects wieder herstellen. unsigned int TimedObjectCount; Reader.Read(TimedObjectCount); - for (unsigned int i = 0; i < TimedObjectCount; ++i) - { + for (unsigned int i = 0; i < TimedObjectCount; ++i) { unsigned int Handle; Reader.Read(Handle); m_TimedRenderObjects.push_back(Handle); diff --git a/engines/sword25/gfx/renderobjectmanager.h b/engines/sword25/gfx/renderobjectmanager.h index f7ba5a71b5..9cd857f8b4 100644 --- a/engines/sword25/gfx/renderobjectmanager.h +++ b/engines/sword25/gfx/renderobjectmanager.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -33,13 +33,13 @@ */ /* - BS_RenderObjectManager - ---------------------- - Diese Klasse ist für die Verwaltung von BS_RenderObjects zuständig. - - Sie sorgt z.B. dafür, dass die BS_RenderObjects in der richtigen Reihenfolge gerendert werden. + BS_RenderObjectManager + ---------------------- + Diese Klasse ist für die Verwaltung von BS_RenderObjects zuständig. + + Sie sorgt z.B. dafür, dass die BS_RenderObjects in der richtigen Reihenfolge gerendert werden. - Autor: Malte Thiesen + Autor: Malte Thiesen */ #ifndef SWORD25_RENDEROBJECTMANAGER_H @@ -63,59 +63,60 @@ class BS_RenderObject; class BS_TimedRenderObject; /** - @brief Diese Klasse ist für die Verwaltung von BS_RenderObjects zuständig. - - Sie sorgt dafür, dass die BS_RenderObjects in der richtigen Reihenfolge gerendert werden und ermöglicht den Zugriff auf die - BS_RenderObjects über einen String. + @brief Diese Klasse ist für die Verwaltung von BS_RenderObjects zuständig. + + Sie sorgt dafür, dass die BS_RenderObjects in der richtigen Reihenfolge gerendert werden und ermöglicht den Zugriff auf die + BS_RenderObjects über einen String. */ -class BS_RenderObjectManager : public BS_Persistable -{ +class BS_RenderObjectManager : public BS_Persistable { public: /** - @brief Erzeugt ein neues BS_RenderObjectManager-Objekt. - @param Width die horizontale Bildschirmauflösung in Pixeln - @param Height die vertikale Bildschirmauflösung in Pixeln - @param Die Anzahl an Framebuffern, die eingesetzt wird (Backbuffer + Primary). + @brief Erzeugt ein neues BS_RenderObjectManager-Objekt. + @param Width die horizontale Bildschirmauflösung in Pixeln + @param Height die vertikale Bildschirmauflösung in Pixeln + @param Die Anzahl an Framebuffern, die eingesetzt wird (Backbuffer + Primary). */ BS_RenderObjectManager(int Width, int Height, int FramebufferCount); virtual ~BS_RenderObjectManager(); - + // Interface // --------- /** - @brief Initialisiert den Manager für einen neuen Frame. - @remark Alle Veränderungen an Objekten müssen nach einem Aufruf dieser Methode geschehen, damit sichergestellt ist, dass diese - visuell umgesetzt werden.
- Mit dem Aufruf dieser Methode werden die Rückgabewerte von GetUpdateRects() und GetUpdateRectCount() auf ihre Startwerte - zurückgesetzt. Wenn man also mit diesen Werten arbeiten möchten, muss man dies nach einem Aufruf von Render() und vor - einem Aufruf von StartFrame() tun. + @brief Initialisiert den Manager für einen neuen Frame. + @remark Alle Veränderungen an Objekten müssen nach einem Aufruf dieser Methode geschehen, damit sichergestellt ist, dass diese + visuell umgesetzt werden.
+ Mit dem Aufruf dieser Methode werden die Rückgabewerte von GetUpdateRects() und GetUpdateRectCount() auf ihre Startwerte + zurückgesetzt. Wenn man also mit diesen Werten arbeiten möchten, muss man dies nach einem Aufruf von Render() und vor + einem Aufruf von StartFrame() tun. */ void StartFrame(); /** - @brief Rendert alle Objekte die sich während des letzten Aufrufes von Render() verändert haben. - @return Gibt false zurück, falls das Rendern fehlgeschlagen ist. + @brief Rendert alle Objekte die sich während des letzten Aufrufes von Render() verändert haben. + @return Gibt false zurück, falls das Rendern fehlgeschlagen ist. */ bool Render(); /** - @brief Gibt einen Pointer auf die Wurzel des Objektbaumes zurück. + @brief Gibt einen Pointer auf die Wurzel des Objektbaumes zurück. */ - BS_RenderObjectPtr GetTreeRoot() { return m_RootPtr; } + BS_RenderObjectPtr GetTreeRoot() { + return m_RootPtr; + } /** - @brief Fügt ein BS_TimedRenderObject in die Liste der zeitabhängigen Render-Objekte. + @brief Fügt ein BS_TimedRenderObject in die Liste der zeitabhängigen Render-Objekte. - Alle Objekte die sich in dieser Liste befinden werden vor jedem Frame über die seit dem letzten Frame - vergangene Zeit informiert, so dass sich ihren Zustand zeitabhängig verändern können. + Alle Objekte die sich in dieser Liste befinden werden vor jedem Frame über die seit dem letzten Frame + vergangene Zeit informiert, so dass sich ihren Zustand zeitabhängig verändern können. - @param RenderObject das einzufügende BS_TimedRenderObject + @param RenderObject das einzufügende BS_TimedRenderObject */ void AttatchTimedRenderObject(BS_RenderObjectPtr pRenderObject); /** - @brief Entfernt ein BS_TimedRenderObject aus der Liste für zeitabhängige Render-Objekte. + @brief Entfernt ein BS_TimedRenderObject aus der Liste für zeitabhängige Render-Objekte. */ void DetatchTimedRenderObject(BS_RenderObjectPtr pRenderObject); - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); private: bool m_FrameStarted; @@ -126,7 +127,7 @@ private: // --------------------------- // Der Baum legt die hierachische Ordnung der BS_RenderObjects fest. // Zu weiteren Informationen siehe: "renderobject.h" - BS_RenderObjectPtr m_RootPtr; // Die Wurzel der Baumes + BS_RenderObjectPtr m_RootPtr; // Die Wurzel der Baumes }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/renderobjectptr.cpp b/engines/sword25/gfx/renderobjectptr.cpp index f2eaa28d50..b32c185e47 100644 --- a/engines/sword25/gfx/renderobjectptr.cpp +++ b/engines/sword25/gfx/renderobjectptr.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -35,7 +35,7 @@ namespace Sword25 { -BS_RenderObjectPtr::BS_RenderObjectPtr(BS_RenderObject * RenderObjectPtr) { +BS_RenderObjectPtr::BS_RenderObjectPtr(BS_RenderObject *RenderObjectPtr) { m_Handle = RenderObjectPtr->GetHandle(); } diff --git a/engines/sword25/gfx/renderobjectptr.h b/engines/sword25/gfx/renderobjectptr.h index 89da5d28fc..9dc0cf3aba 100644 --- a/engines/sword25/gfx/renderobjectptr.h +++ b/engines/sword25/gfx/renderobjectptr.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -55,8 +55,7 @@ class BS_RenderObject; // ----------------------------------------------------------------------------- template -class BS_RenderObjectPtr -{ +class BS_RenderObjectPtr { public: BS_RenderObjectPtr() : m_Handle(0) {} @@ -64,25 +63,21 @@ public: BS_RenderObjectPtr(unsigned int Handle) : m_Handle(Handle) {} - BS_RenderObjectPtr(BS_RenderObject * RenderObjectPtr); + BS_RenderObjectPtr(BS_RenderObject *RenderObjectPtr); - T * operator->() const - { + T *operator->() const { return static_cast(BS_RenderObjectRegistry::GetInstance().ResolveHandle(m_Handle)); } - bool operator==(const BS_RenderObjectPtr & other) - { + bool operator==(const BS_RenderObjectPtr & other) { return m_Handle == other.m_Handle; } - bool IsValid() const - { + bool IsValid() const { return BS_RenderObjectRegistry::GetInstance().ResolveHandle(m_Handle) != 0; } - void Erase() - { + void Erase() { delete static_cast(BS_RenderObjectRegistry::GetInstance().ResolveHandle(m_Handle)); m_Handle = 0; } diff --git a/engines/sword25/gfx/renderobjectregistry.cpp b/engines/sword25/gfx/renderobjectregistry.cpp index ccfffc7999..4eecd54760 100644 --- a/engines/sword25/gfx/renderobjectregistry.cpp +++ b/engines/sword25/gfx/renderobjectregistry.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -54,15 +54,13 @@ std::auto_ptr BS_RenderObjectRegistry::m_InstancePtr; // ----------------------------------------------------------------------------- -void BS_RenderObjectRegistry::LogErrorLn(const char * Message) const -{ +void BS_RenderObjectRegistry::LogErrorLn(const char *Message) const { BS_LOG_ERRORLN(Message); } // ----------------------------------------------------------------------------- -void BS_RenderObjectRegistry::LogWarningLn(const char * Message) const -{ +void BS_RenderObjectRegistry::LogWarningLn(const char *Message) const { BS_LOG_WARNINGLN(Message); } diff --git a/engines/sword25/gfx/renderobjectregistry.h b/engines/sword25/gfx/renderobjectregistry.h index bf377e5b30..6aea5afab2 100644 --- a/engines/sword25/gfx/renderobjectregistry.h +++ b/engines/sword25/gfx/renderobjectregistry.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -60,7 +60,7 @@ class BS_RenderObject; class BS_RenderObjectRegistry : public BS_ObjectRegistry { public: - static BS_RenderObjectRegistry & GetInstance() { + static BS_RenderObjectRegistry &GetInstance() { if (!m_InstancePtr.get()) m_InstancePtr.reset(new BS_RenderObjectRegistry); return *m_InstancePtr.get(); } @@ -68,8 +68,8 @@ public: virtual ~BS_RenderObjectRegistry() {} private: - virtual void LogErrorLn(const char * Message) const; - virtual void LogWarningLn(const char * Message) const; + virtual void LogErrorLn(const char *Message) const; + virtual void LogWarningLn(const char *Message) const; static std::auto_ptr m_InstancePtr; }; diff --git a/engines/sword25/gfx/rootrenderobject.h b/engines/sword25/gfx/rootrenderobject.h index 6f5c1daaa4..bbb92a3dab 100644 --- a/engines/sword25/gfx/rootrenderobject.h +++ b/engines/sword25/gfx/rootrenderobject.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -50,21 +50,21 @@ class BS_Kernel; // Klassendefinition class BS_RenderObjectManager; -class BS_RootRenderObject : public BS_RenderObject -{ -friend BS_RenderObjectManager; +class BS_RootRenderObject : public BS_RenderObject { + friend BS_RenderObjectManager; private: - BS_RootRenderObject(BS_RenderObjectManager * ManagerPtr, int Width, int Height) : - BS_RenderObject(BS_RenderObjectPtr(), TYPE_ROOT) - { + BS_RootRenderObject(BS_RenderObjectManager *ManagerPtr, int Width, int Height) : + BS_RenderObject(BS_RenderObjectPtr(), TYPE_ROOT) { m_ManagerPtr = ManagerPtr; m_Width = Width; m_Height = Height; } protected: - virtual bool DoRender() { return true; } + virtual bool DoRender() { + return true; + } }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/screenshot.cpp b/engines/sword25/gfx/screenshot.cpp index 3e2f0f27b2..59e52e1ab4 100644 --- a/engines/sword25/gfx/screenshot.cpp +++ b/engines/sword25/gfx/screenshot.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -47,21 +47,19 @@ using namespace std; // ----------------------------------------------------------------------------- -struct RGB_PIXEL -{ +struct RGB_PIXEL { RGB_PIXEL(unsigned char _Red, unsigned char _Green, unsigned char _Blue) : Red(_Red), Green(_Green), Blue(_Blue) - {}; + {}; unsigned char Red; unsigned char Green; unsigned char Blue; }; -bool BS_Screenshot::SaveToFile(unsigned int Width, unsigned int Height, const vector & Data, const string & Filename) -{ +bool BS_Screenshot::SaveToFile(unsigned int Width, unsigned int Height, const vector & Data, const string &Filename) { BS_ASSERT(Data.size() == Width * Height); // Buffer für Bildschirminhalt in RGB reservieren @@ -70,10 +68,8 @@ bool BS_Screenshot::SaveToFile(unsigned int Width, unsigned int Height, const ve // Framebufferdaten pixelweise von RGBA nach RGB konvertieren vector::const_iterator it = Data.begin(); - for (unsigned int y = 0; y < Height; y++) - { - for (unsigned int x = 0; x < Width; x++) - { + for (unsigned int y = 0; y < Height; y++) { + for (unsigned int x = 0; x < Width; x++) { unsigned int SrcPixel = *it++; PixelBuffer.push_back(RGB_PIXEL((SrcPixel >> 16) & 0xff, (SrcPixel >> 8) & 0xff, SrcPixel & 0xff)); } @@ -82,29 +78,25 @@ bool BS_Screenshot::SaveToFile(unsigned int Width, unsigned int Height, const ve BS_ASSERT(Data.size() == PixelBuffer.size()); // Variablen für die PNG-Erstellung - FILE * OutFile = 0; + FILE *OutFile = 0; png_structp png_ptr = 0; png_infop info_ptr = 0; - try - { + try { OutFile = fopen(Filename.c_str(), "wb"); - if (!OutFile) - { + if (!OutFile) { BS_LOG_ERRORLN("Could not create screenshot-file \"%s\".", Filename.c_str()); throw(0); } png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) - { + if (!png_ptr) { BS_LOG_ERRORLN("Could not create PNG write-struct."); throw(0); } png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) - { + if (!info_ptr) { BS_LOG_ERRORLN("Could not create PNG info-struct."); throw(0); } @@ -115,20 +107,19 @@ bool BS_Screenshot::SaveToFile(unsigned int Width, unsigned int Height, const ve png_set_compression_buffer_size(png_ptr, (Width * Height * 3 * 110) / 100); // PNG-Info Struktur initialisieren - png_set_IHDR(png_ptr, info_ptr, - Width, // Breite - Height, // Höhe - 8, // Bittiefe pro Kanal - PNG_COLOR_TYPE_RGB, // Farbformat - PNG_INTERLACE_NONE, // Interlacing-Typ - PNG_COMPRESSION_TYPE_DEFAULT, // Kompressions-Typ - PNG_FILTER_TYPE_DEFAULT); // Filter-Typ + png_set_IHDR(png_ptr, info_ptr, + Width, // Breite + Height, // Höhe + 8, // Bittiefe pro Kanal + PNG_COLOR_TYPE_RGB, // Farbformat + PNG_INTERLACE_NONE, // Interlacing-Typ + PNG_COMPRESSION_TYPE_DEFAULT, // Kompressions-Typ + PNG_FILTER_TYPE_DEFAULT); // Filter-Typ // Rowpointer erstellen vector RowPointers; RowPointers.reserve(Height); - for (unsigned int i = 0; i < Height; i++) - { + for (unsigned int i = 0; i < Height; i++) { RowPointers.push_back((png_bytep)(&PixelBuffer[Width * i])); } png_set_rows(png_ptr, info_ptr, &RowPointers[0]); @@ -142,11 +133,9 @@ bool BS_Screenshot::SaveToFile(unsigned int Width, unsigned int Height, const ve fclose(OutFile); } - catch (int) - { + catch (int) { // Wenn die Datei bereits erstellt wurde, Datei schließen und löschen. - if (OutFile) - { + if (OutFile) { fclose(OutFile); remove(Filename.c_str()); } @@ -163,8 +152,7 @@ bool BS_Screenshot::SaveToFile(unsigned int Width, unsigned int Height, const ve // ----------------------------------------------------------------------------- -bool BS_Screenshot::SaveThumbnailToFile(unsigned int Width, unsigned int Height, const vector & Data, const string & Filename) -{ +bool BS_Screenshot::SaveThumbnailToFile(unsigned int Width, unsigned int Height, const vector & Data, const string &Filename) { // // Diese Methode nimmt ein Screenshot mit den Maßen von 800x600 und erzeugt einen Screenshot mit den Maßen von 200x125. // Dabei werden je 50 Pixel oben und unten abgeschnitten (die Interface-Leisten im Spiel). Das verbleibende Bild von 800x500 wird auf @@ -173,27 +161,23 @@ bool BS_Screenshot::SaveThumbnailToFile(unsigned int Width, unsigned int Height, // // Die Ausgangsgröße muss 800x600 sein. - if (Width != 800 || Height != 600) - { + if (Width != 800 || Height != 600) { BS_LOG_ERRORLN("The sreenshot dimensions have to be 800x600 in order to be saved as a thumbnail."); return false; } - + // Buffer für die Zieldaten erstellen (RGBA Bild mit den Maßen 200x125). vector ThumbnailData(200 * 125); // Über das Zielbild iterieren und einen Pixel zur Zeit berechnen. unsigned int x, y; x = y = 0; - for(vector::iterator Iter = ThumbnailData.begin(); Iter != ThumbnailData.end(); ++Iter) - { + for (vector::iterator Iter = ThumbnailData.begin(); Iter != ThumbnailData.end(); ++Iter) { // Durchschnitt über 4x4 Pixelblock im Quellbild bilden. unsigned int Alpha, Red, Green, Blue; Alpha = Red = Green = Blue = 0; - for (unsigned int j = 0; j < 4; ++j) - { - for (unsigned int i = 0; i < 4; ++i) - { + for (unsigned int j = 0; j < 4; ++j) { + for (unsigned int i = 0; i < 4; ++i) { unsigned int Pixel = Data[((y * 4) + j + 50) * 800 + ((x * 4) + i)]; Alpha += (Pixel >> 24); Red += (Pixel >> 16) & 0xff; @@ -207,8 +191,7 @@ bool BS_Screenshot::SaveThumbnailToFile(unsigned int Width, unsigned int Height, // Mitzählen an welcher Stelle im Zielbild wir uns befinden. ++x; - if (x == 200) - { + if (x == 200) { x = 0; ++y; } diff --git a/engines/sword25/gfx/screenshot.h b/engines/sword25/gfx/screenshot.h index 9e9fef422b..10e176c1a4 100644 --- a/engines/sword25/gfx/screenshot.h +++ b/engines/sword25/gfx/screenshot.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -32,7 +32,7 @@ * */ -#ifndef SWORD25_SCREENSHOT_H +#ifndef SWORD25_SCREENSHOT_H #define SWORD25_SCREENSHOT_H // ----------------------------------------------------------------------------- @@ -51,11 +51,10 @@ namespace Sword25 { // Class declaration // ----------------------------------------------------------------------------- -class BS_Screenshot -{ +class BS_Screenshot { public: - static bool SaveToFile(unsigned int Width, unsigned int Height, const Common::Array & Data, const Common::String & Filename); - static bool SaveThumbnailToFile(unsigned int Width, unsigned int Height, const Common::Array & Data, const Common::String & Filename); + static bool SaveToFile(unsigned int Width, unsigned int Height, const Common::Array & Data, const Common::String &Filename); + static bool SaveThumbnailToFile(unsigned int Width, unsigned int Height, const Common::Array & Data, const Common::String &Filename); }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/staticbitmap.cpp b/engines/sword25/gfx/staticbitmap.cpp index 161d8f8f8f..f4ad8151dc 100644 --- a/engines/sword25/gfx/staticbitmap.cpp +++ b/engines/sword25/gfx/staticbitmap.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -54,9 +54,8 @@ namespace Sword25 { // Konstruktion / Destruktion // ----------------------------------------------------------------------------- -BS_StaticBitmap::BS_StaticBitmap(BS_RenderObjectPtr ParentPtr, const Common::String& Filename) : - BS_Bitmap(ParentPtr, TYPE_STATICBITMAP) -{ +BS_StaticBitmap::BS_StaticBitmap(BS_RenderObjectPtr ParentPtr, const Common::String &Filename) : + BS_Bitmap(ParentPtr, TYPE_STATICBITMAP) { // Das BS_Bitmap konnte nicht erzeugt werden, daher muss an dieser Stelle abgebrochen werden. if (!m_InitSuccess) return; @@ -65,30 +64,26 @@ BS_StaticBitmap::BS_StaticBitmap(BS_RenderObjectPtr ParentPtr, // ----------------------------------------------------------------------------- -BS_StaticBitmap::BS_StaticBitmap(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : - BS_Bitmap(ParentPtr, TYPE_STATICBITMAP, Handle) -{ +BS_StaticBitmap::BS_StaticBitmap(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : + BS_Bitmap(ParentPtr, TYPE_STATICBITMAP, Handle) { m_InitSuccess = Unpersist(Reader); } // ----------------------------------------------------------------------------- -bool BS_StaticBitmap::InitBitmapResource(const Common::String & Filename) -{ +bool BS_StaticBitmap::InitBitmapResource(const Common::String &Filename) { // Bild-Resource laden - BS_Resource* ResourcePtr = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(Filename); - if (!ResourcePtr) - { + BS_Resource *ResourcePtr = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(Filename); + if (!ResourcePtr) { BS_LOG_ERRORLN("Could not request resource \"%s\".", Filename.c_str()); return false; } - if (ResourcePtr->GetType() != BS_Resource::TYPE_BITMAP) - { + if (ResourcePtr->GetType() != BS_Resource::TYPE_BITMAP) { BS_LOG_ERRORLN("Requested resource \"%s\" is not a bitmap.", Filename.c_str()); return false; } - BS_BitmapResource * BitmapPtr = static_cast(ResourcePtr); + BS_BitmapResource *BitmapPtr = static_cast(ResourcePtr); // Den eindeutigen Dateinamen zum späteren Referenzieren speichern m_ResourceFilename = BitmapPtr->GetFileName(); @@ -105,39 +100,34 @@ bool BS_StaticBitmap::InitBitmapResource(const Common::String & Filename) // ----------------------------------------------------------------------------- -BS_StaticBitmap::~BS_StaticBitmap() -{ +BS_StaticBitmap::~BS_StaticBitmap() { } // ----------------------------------------------------------------------------- -bool BS_StaticBitmap::DoRender() -{ +bool BS_StaticBitmap::DoRender() { // Bitmap holen - BS_Resource* ResourcePtr = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); + BS_Resource *ResourcePtr = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); BS_ASSERT(ResourcePtr); BS_ASSERT(ResourcePtr->GetType() == BS_Resource::TYPE_BITMAP); - BS_BitmapResource * BitmapResourcePtr = static_cast(ResourcePtr); + BS_BitmapResource *BitmapResourcePtr = static_cast(ResourcePtr); // Framebufferobjekt holen - BS_GraphicEngine * GfxPtr = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); + BS_GraphicEngine *GfxPtr = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); BS_ASSERT(GfxPtr); // Bitmap zeichnen bool Result; - if (m_ScaleFactorX == 1.0f && m_ScaleFactorY == 1.0f) - { + if (m_ScaleFactorX == 1.0f && m_ScaleFactorY == 1.0f) { Result = BitmapResourcePtr->Blit(m_AbsoluteX, m_AbsoluteY, - (m_FlipV ? BS_BitmapResource::FLIP_V : 0) | - (m_FlipH ? BS_BitmapResource::FLIP_H : 0), - 0, m_ModulationColor, -1, -1); - } - else - { + (m_FlipV ? BS_BitmapResource::FLIP_V : 0) | + (m_FlipH ? BS_BitmapResource::FLIP_H : 0), + 0, m_ModulationColor, -1, -1); + } else { Result = BitmapResourcePtr->Blit(m_AbsoluteX, m_AbsoluteY, - (m_FlipV ? BS_BitmapResource::FLIP_V : 0) | - (m_FlipH ? BS_BitmapResource::FLIP_H : 0), - 0, m_ModulationColor, m_Width, m_Height); + (m_FlipV ? BS_BitmapResource::FLIP_V : 0) | + (m_FlipH ? BS_BitmapResource::FLIP_H : 0), + 0, m_ModulationColor, m_Width, m_Height); } // Resource freigeben @@ -148,14 +138,13 @@ bool BS_StaticBitmap::DoRender() // ----------------------------------------------------------------------------- -unsigned int BS_StaticBitmap::GetPixel(int X, int Y) const -{ +unsigned int BS_StaticBitmap::GetPixel(int X, int Y) const { BS_ASSERT(X >= 0 && X < m_Width); BS_ASSERT(Y >= 0 && Y < m_Height); - BS_Resource* pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); + BS_Resource *pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); BS_ASSERT(pResource->GetType() == BS_Resource::TYPE_BITMAP); - BS_BitmapResource* pBitmapResource = static_cast(pResource); + BS_BitmapResource *pBitmapResource = static_cast(pResource); unsigned int Result = pBitmapResource->GetPixel(X, Y); pResource->Release(); return Result; @@ -163,8 +152,7 @@ unsigned int BS_StaticBitmap::GetPixel(int X, int Y) const // ----------------------------------------------------------------------------- -bool BS_StaticBitmap::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) -{ +bool BS_StaticBitmap::SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride) { BS_LOG_ERRORLN("SetContent() ist not supported with this object."); return false; } @@ -173,33 +161,30 @@ bool BS_StaticBitmap::SetContent(const byte *Pixeldata, unsigned int Offset, uns // Auskunftsmethoden // ----------------------------------------------------------------------------- -bool BS_StaticBitmap::IsAlphaAllowed() const -{ - BS_Resource* pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); +bool BS_StaticBitmap::IsAlphaAllowed() const { + BS_Resource *pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); BS_ASSERT(pResource->GetType() == BS_Resource::TYPE_BITMAP); - bool Result = static_cast(pResource)->IsAlphaAllowed(); + bool Result = static_cast(pResource)->IsAlphaAllowed(); pResource->Release(); return Result; } // ----------------------------------------------------------------------------- -bool BS_StaticBitmap::IsColorModulationAllowed() const -{ - BS_Resource* pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); +bool BS_StaticBitmap::IsColorModulationAllowed() const { + BS_Resource *pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); BS_ASSERT(pResource->GetType() == BS_Resource::TYPE_BITMAP); - bool Result = static_cast(pResource)->IsColorModulationAllowed(); + bool Result = static_cast(pResource)->IsColorModulationAllowed(); pResource->Release(); return Result; } // ----------------------------------------------------------------------------- -bool BS_StaticBitmap::IsScalingAllowed() const -{ - BS_Resource* pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); +bool BS_StaticBitmap::IsScalingAllowed() const { + BS_Resource *pResource = BS_Kernel::GetInstance()->GetResourceManager()->RequestResource(m_ResourceFilename); BS_ASSERT(pResource->GetType() == BS_Resource::TYPE_BITMAP); - bool Result = static_cast(pResource)->IsScalingAllowed(); + bool Result = static_cast(pResource)->IsScalingAllowed(); pResource->Release(); return Result; } @@ -208,8 +193,7 @@ bool BS_StaticBitmap::IsScalingAllowed() const // Persistenz // ----------------------------------------------------------------------------- -bool BS_StaticBitmap::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_StaticBitmap::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; Result &= BS_Bitmap::Persist(Writer); @@ -220,8 +204,7 @@ bool BS_StaticBitmap::Persist(BS_OutputPersistenceBlock & Writer) return Result; } -bool BS_StaticBitmap::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_StaticBitmap::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; Result &= BS_Bitmap::Unpersist(Reader); diff --git a/engines/sword25/gfx/staticbitmap.h b/engines/sword25/gfx/staticbitmap.h index c204d8fb9d..816f2a2b20 100644 --- a/engines/sword25/gfx/staticbitmap.h +++ b/engines/sword25/gfx/staticbitmap.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -48,39 +48,40 @@ namespace Sword25 { // Klassendeklaration // ----------------------------------------------------------------------------- -class BS_StaticBitmap : public BS_Bitmap -{ -friend class BS_RenderObject; +class BS_StaticBitmap : public BS_Bitmap { + friend class BS_RenderObject; private: /** - @remark Filename muss absoluter Pfad sein + @remark Filename muss absoluter Pfad sein */ - BS_StaticBitmap(BS_RenderObjectPtr ParentPtr, const Common::String& Filename); - BS_StaticBitmap(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); + BS_StaticBitmap(BS_RenderObjectPtr ParentPtr, const Common::String &Filename); + BS_StaticBitmap(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); public: virtual ~BS_StaticBitmap(); virtual unsigned int GetPixel(int X, int Y) const; - virtual bool SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride); + virtual bool SetContent(const byte *Pixeldata, unsigned int Offset, unsigned int Stride); - virtual bool IsScalingAllowed() const; - virtual bool IsAlphaAllowed() const; - virtual bool IsColorModulationAllowed() const; - virtual bool IsSetContentAllowed() const { return false; } + virtual bool IsScalingAllowed() const; + virtual bool IsAlphaAllowed() const; + virtual bool IsColorModulationAllowed() const; + virtual bool IsSetContentAllowed() const { + return false; + } - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); protected: - virtual bool DoRender(); + virtual bool DoRender(); private: Common::String m_ResourceFilename; - bool InitBitmapResource(const Common::String & Filename); + bool InitBitmapResource(const Common::String &Filename); }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/text.cpp b/engines/sword25/gfx/text.cpp index b1bf673fa5..eafd6d8152 100644 --- a/engines/sword25/gfx/text.cpp +++ b/engines/sword25/gfx/text.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -56,9 +56,8 @@ namespace Sword25 { // Konstanten // ----------------------------------------------------------------------------- -namespace -{ - const unsigned int AUTO_WRAP_THRESHOLD_DEFAULT = 300; +namespace { +const unsigned int AUTO_WRAP_THRESHOLD_DEFAULT = 300; } // ----------------------------------------------------------------------------- @@ -69,33 +68,27 @@ BS_Text::BS_Text(BS_RenderObjectPtr ParentPtr) : BS_RenderObject(ParentPtr, BS_RenderObject::TYPE_TEXT), m_ModulationColor(0xffffffff), m_AutoWrap(false), - m_AutoWrapThreshold(AUTO_WRAP_THRESHOLD_DEFAULT) -{ - + m_AutoWrapThreshold(AUTO_WRAP_THRESHOLD_DEFAULT) { + } // ----------------------------------------------------------------------------- -BS_Text::BS_Text(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : - BS_RenderObject(ParentPtr, TYPE_TEXT, Handle) -{ +BS_Text::BS_Text(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle) : + BS_RenderObject(ParentPtr, TYPE_TEXT, Handle) { m_InitSuccess = Unpersist(Reader); } // ----------------------------------------------------------------------------- -bool BS_Text::SetFont(const Common::String & Font) -{ +bool BS_Text::SetFont(const Common::String &Font) { // Font precachen. - if (GetResourceManager()->PrecacheResource(Font)) - { + if (GetResourceManager()->PrecacheResource(Font)) { m_Font = Font; UpdateFormat(); ForceRefresh(); return true; - } - else - { + } else { BS_LOG_ERRORLN("Could not precache font \"%s\". Font probably does not exist.", Font.c_str()); return false; } @@ -104,8 +97,7 @@ bool BS_Text::SetFont(const Common::String & Font) // ----------------------------------------------------------------------------- -void BS_Text::SetText(const Common::String & Text) -{ +void BS_Text::SetText(const Common::String &Text) { m_Text = Text; UpdateFormat(); ForceRefresh(); @@ -113,11 +105,9 @@ void BS_Text::SetText(const Common::String & Text) // ----------------------------------------------------------------------------- -void BS_Text::SetColor(unsigned int ModulationColor) -{ +void BS_Text::SetColor(unsigned int ModulationColor) { unsigned int NewModulationColor = (ModulationColor & 0x00ffffff) | (m_ModulationColor & 0xff000000); - if (NewModulationColor != m_ModulationColor) - { + if (NewModulationColor != m_ModulationColor) { m_ModulationColor = NewModulationColor; ForceRefresh(); } @@ -125,12 +115,10 @@ void BS_Text::SetColor(unsigned int ModulationColor) // ----------------------------------------------------------------------------- -void BS_Text::SetAlpha(int Alpha) -{ +void BS_Text::SetAlpha(int Alpha) { BS_ASSERT(Alpha >= 0 && Alpha < 256); unsigned int NewModulationColor = (m_ModulationColor & 0x00ffffff) | Alpha << 24; - if (NewModulationColor != m_ModulationColor) - { + if (NewModulationColor != m_ModulationColor) { m_ModulationColor = NewModulationColor; ForceRefresh(); } @@ -138,10 +126,8 @@ void BS_Text::SetAlpha(int Alpha) // ----------------------------------------------------------------------------- -void BS_Text::SetAutoWrap(bool AutoWrap) -{ - if (AutoWrap != m_AutoWrap) - { +void BS_Text::SetAutoWrap(bool AutoWrap) { + if (AutoWrap != m_AutoWrap) { m_AutoWrap = AutoWrap; UpdateFormat(); ForceRefresh(); @@ -150,10 +136,8 @@ void BS_Text::SetAutoWrap(bool AutoWrap) // ----------------------------------------------------------------------------- -void BS_Text::SetAutoWrapThreshold(unsigned int AutoWrapThreshold) -{ - if (AutoWrapThreshold != m_AutoWrapThreshold) - { +void BS_Text::SetAutoWrapThreshold(unsigned int AutoWrapThreshold) { + if (AutoWrapThreshold != m_AutoWrapThreshold) { m_AutoWrapThreshold = AutoWrapThreshold; UpdateFormat(); ForceRefresh(); @@ -162,39 +146,35 @@ void BS_Text::SetAutoWrapThreshold(unsigned int AutoWrapThreshold) // ----------------------------------------------------------------------------- -bool BS_Text::DoRender() -{ +bool BS_Text::DoRender() { // Font-Resource locken. - BS_FontResource * FontPtr = LockFontResource(); + BS_FontResource *FontPtr = LockFontResource(); if (!FontPtr) return false; // Charactermap-Resource locken. - BS_ResourceManager * RMPtr = GetResourceManager(); - BS_BitmapResource * CharMapPtr; + BS_ResourceManager *RMPtr = GetResourceManager(); + BS_BitmapResource *CharMapPtr; { - BS_Resource * pResource = RMPtr->RequestResource(FontPtr->GetCharactermapFileName()); - if (!pResource) - { + BS_Resource *pResource = RMPtr->RequestResource(FontPtr->GetCharactermapFileName()); + if (!pResource) { BS_LOG_ERRORLN("Could not request resource \"%s\".", FontPtr->GetCharactermapFileName().c_str()); return false; } - if (pResource->GetType() != BS_Resource::TYPE_BITMAP) - { + if (pResource->GetType() != BS_Resource::TYPE_BITMAP) { BS_LOG_ERRORLN("Requested resource \"%s\" is not a bitmap.", FontPtr->GetCharactermapFileName().c_str()); return false; } - CharMapPtr = static_cast(pResource); + CharMapPtr = static_cast(pResource); } // Framebufferobjekt holen. - BS_GraphicEngine * GfxPtr = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); + BS_GraphicEngine *GfxPtr = static_cast(BS_Kernel::GetInstance()->GetService("gfx")); BS_ASSERT(GfxPtr); bool Result = true; Common::Array::iterator Iter = m_Lines.begin(); - for (; Iter != m_Lines.end(); ++Iter) - { + for (; Iter != m_Lines.end(); ++Iter) { // Feststellen, ob überhaupt Buchstaben der aktuellen Zeile vom Update betroffen sind. BS_Rect CheckRect = (*Iter).BBox; CheckRect.Move(m_AbsoluteX, m_AbsoluteY); @@ -202,8 +182,7 @@ bool BS_Text::DoRender() // Jeden Buchstaben einzeln Rendern. int CurX = m_AbsoluteX + (*Iter).BBox.left; int CurY = m_AbsoluteY + (*Iter).BBox.top; - for (unsigned int i = 0; i < (*Iter).Text.size(); ++i) - { + for (unsigned int i = 0; i < (*Iter).Text.size(); ++i) { BS_Rect CurRect = FontPtr->GetCharacterRect((unsigned char)(*Iter).Text.at(i)); BS_Rect RenderRect(CurX, CurY, CurX + CurRect.GetWidth(), CurY + CurRect.GetHeight()); @@ -213,7 +192,7 @@ bool BS_Text::DoRender() Result = CharMapPtr->Blit(RenderX, RenderY, BS_Image::FLIP_NONE, &RenderRect, m_ModulationColor); if (!Result) break; - CurX += CurRect.GetWidth() + FontPtr->GetGapWidth(); + CurX += CurRect.GetWidth() + FontPtr->GetGapWidth(); } } @@ -228,34 +207,30 @@ bool BS_Text::DoRender() // ----------------------------------------------------------------------------- -BS_ResourceManager * BS_Text::GetResourceManager() -{ +BS_ResourceManager *BS_Text::GetResourceManager() { // Pointer auf den Resource-Manager holen. return BS_Kernel::GetInstance()->GetResourceManager(); } // ----------------------------------------------------------------------------- -BS_FontResource * BS_Text::LockFontResource() -{ - BS_ResourceManager * RMPtr = GetResourceManager(); +BS_FontResource *BS_Text::LockFontResource() { + BS_ResourceManager *RMPtr = GetResourceManager(); // Font-Resource locken. - BS_FontResource * FontPtr; + BS_FontResource *FontPtr; { - BS_Resource * ResourcePtr = RMPtr->RequestResource(m_Font); - if (!ResourcePtr) - { + BS_Resource *ResourcePtr = RMPtr->RequestResource(m_Font); + if (!ResourcePtr) { BS_LOG_ERRORLN("Could not request resource \"%s\".", m_Font.c_str()); return NULL; } - if (ResourcePtr->GetType() != BS_Resource::TYPE_FONT) - { + if (ResourcePtr->GetType() != BS_Resource::TYPE_FONT) { BS_LOG_ERRORLN("Requested resource \"%s\" is not a font.", m_Font.c_str()); return NULL; } - FontPtr = static_cast(ResourcePtr); + FontPtr = static_cast(ResourcePtr); } return FontPtr; @@ -263,16 +238,14 @@ BS_FontResource * BS_Text::LockFontResource() // ----------------------------------------------------------------------------- -void BS_Text::UpdateFormat() -{ - BS_FontResource * FontPtr = LockFontResource(); +void BS_Text::UpdateFormat() { + BS_FontResource *FontPtr = LockFontResource(); BS_ASSERT(FontPtr); UpdateMetrics(*FontPtr); m_Lines.resize(1); - if (m_AutoWrap && (unsigned int) m_Width >= m_AutoWrapThreshold && m_Text.size() >= 2) - { + if (m_AutoWrap && (unsigned int) m_Width >= m_AutoWrapThreshold && m_Text.size() >= 2) { m_Width = 0; unsigned int CurLineWidth = 0; unsigned int CurLineHeight = 0; @@ -280,19 +253,17 @@ void BS_Text::UpdateFormat() unsigned int TempLineWidth = 0; unsigned int LastSpace = 0; // we need at least 1 space character to start a new line... m_Lines[0].Text = ""; - for (unsigned int i = 0; i < m_Text.size(); ++i) - { + for (unsigned int i = 0; i < m_Text.size(); ++i) { unsigned int j; TempLineWidth = 0; LastSpace = 0; - for (j = i; j < m_Text.size(); ++j) - { + for (j = i; j < m_Text.size(); ++j) { if ((unsigned char)m_Text[j] == ' ') LastSpace = j; - const BS_Rect & CurCharRect = FontPtr->GetCharacterRect((unsigned char)m_Text[j]); + const BS_Rect &CurCharRect = FontPtr->GetCharacterRect((unsigned char)m_Text[j]); TempLineWidth += CurCharRect.GetWidth(); TempLineWidth += FontPtr->GetGapWidth(); - + if ((TempLineWidth >= m_AutoWrapThreshold) && (LastSpace > 0)) break; } @@ -301,46 +272,41 @@ void BS_Text::UpdateFormat() CurLineWidth = 0; CurLineHeight = 0; - for (j = i; j < LastSpace; ++j) - { + for (j = i; j < LastSpace; ++j) { m_Lines[CurLine].Text += m_Text[j]; - const BS_Rect & CurCharRect = FontPtr->GetCharacterRect((unsigned char)m_Text[j]); + const BS_Rect &CurCharRect = FontPtr->GetCharacterRect((unsigned char)m_Text[j]); CurLineWidth += CurCharRect.GetWidth(); CurLineWidth += FontPtr->GetGapWidth(); if ((unsigned int) CurCharRect.GetHeight() > CurLineHeight) CurLineHeight = CurCharRect.GetHeight(); - } + } m_Lines[CurLine].BBox.right = CurLineWidth; m_Lines[CurLine].BBox.bottom = CurLineHeight; if ((unsigned int) m_Width < CurLineWidth) m_Width = CurLineWidth; - - if(LastSpace < m_Text.size()) - { + + if (LastSpace < m_Text.size()) { ++CurLine; BS_ASSERT(CurLine == m_Lines.size()); m_Lines.resize(CurLine + 1); - m_Lines[CurLine].Text = ""; - } - + m_Lines[CurLine].Text = ""; + } + i = LastSpace; } // Bounding-Box der einzelnen Zeilen relativ zur ersten festlegen (vor allem zentrieren). m_Height = 0; Common::Array::iterator Iter = m_Lines.begin(); - for (; Iter != m_Lines.end(); ++Iter) - { - BS_Rect & BBox = (*Iter).BBox; + for (; Iter != m_Lines.end(); ++Iter) { + BS_Rect &BBox = (*Iter).BBox; BBox.left = (m_Width - BBox.right) / 2; BBox.right = BBox.left + BBox.right; - BBox.top = (Iter - m_Lines.begin()) * FontPtr->GetLineHeight(); + BBox.top = (Iter - m_Lines.begin()) * FontPtr->GetLineHeight(); BBox.bottom = BBox.top + BBox.bottom; m_Height += BBox.GetHeight(); } - } - else - { + } else { // Keine automatische Formatierung, also wird der gesamte Text in nur eine Zeile kopiert. m_Lines[0].Text = m_Text; m_Lines[0].BBox = BS_Rect(0, 0, m_Width, m_Height); @@ -351,14 +317,12 @@ void BS_Text::UpdateFormat() // ----------------------------------------------------------------------------- -void BS_Text::UpdateMetrics(BS_FontResource & FontResource) -{ +void BS_Text::UpdateMetrics(BS_FontResource &FontResource) { m_Width = 0; m_Height = 0; - for (unsigned int i = 0; i < m_Text.size(); ++i) - { - const BS_Rect & CurRect = FontResource.GetCharacterRect((unsigned char)m_Text.at(i)); + for (unsigned int i = 0; i < m_Text.size(); ++i) { + const BS_Rect &CurRect = FontResource.GetCharacterRect((unsigned char)m_Text.at(i)); m_Width += CurRect.GetWidth(); if (i != m_Text.size() - 1) m_Width += FontResource.GetGapWidth(); if (m_Height < CurRect.GetHeight()) m_Height = CurRect.GetHeight(); @@ -369,8 +333,7 @@ void BS_Text::UpdateMetrics(BS_FontResource & FontResource) // Persistenz // ----------------------------------------------------------------------------- -bool BS_Text::Persist(BS_OutputPersistenceBlock & Writer) -{ +bool BS_Text::Persist(BS_OutputPersistenceBlock &Writer) { bool Result = true; Result &= BS_RenderObject::Persist(Writer); @@ -386,8 +349,7 @@ bool BS_Text::Persist(BS_OutputPersistenceBlock & Writer) return Result; } -bool BS_Text::Unpersist(BS_InputPersistenceBlock & Reader) -{ +bool BS_Text::Unpersist(BS_InputPersistenceBlock &Reader) { bool Result = true; Result &= BS_RenderObject::Unpersist(Reader); diff --git a/engines/sword25/gfx/text.h b/engines/sword25/gfx/text.h index 597eb00839..67295048d2 100644 --- a/engines/sword25/gfx/text.h +++ b/engines/sword25/gfx/text.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -61,113 +61,123 @@ class BS_ResourceManager; // Klassendefinition // ----------------------------------------------------------------------------- -class BS_Text : public BS_RenderObject -{ -friend class BS_RenderObject; +class BS_Text : public BS_RenderObject { + friend class BS_RenderObject; public: /** - @brief Setzt den Font mit dem der Text dargestellt werden soll. - @param Font der Dateiname der Fontdatei. - @return Gibt false zurück, wenn der Font nicht gefunden wurde. + @brief Setzt den Font mit dem der Text dargestellt werden soll. + @param Font der Dateiname der Fontdatei. + @return Gibt false zurück, wenn der Font nicht gefunden wurde. */ - bool SetFont(const Common::String & Font); + bool SetFont(const Common::String &Font); /** - @brief Setzt den darzustellenden Text. - @param Text der darzustellende Text + @brief Setzt den darzustellenden Text. + @param Text der darzustellende Text */ - void SetText(const Common::String & Text); + void SetText(const Common::String &Text); /** - @brief Setzt den Alphawert des Textes. - @param Alpha der neue Alphawert des Textes (0 = keine Deckung, 255 = volle Deckung). + @brief Setzt den Alphawert des Textes. + @param Alpha der neue Alphawert des Textes (0 = keine Deckung, 255 = volle Deckung). */ void SetAlpha(int Alpha); /** - @brief Legt fest, ob der Text automatisch umgebrochen werden soll. + @brief Legt fest, ob der Text automatisch umgebrochen werden soll. - Wenn dieses Attribut auf true gesetzt ist, wird der Text umgebrochen, sofern er länger als GetAutoWrapThreshold() ist. + Wenn dieses Attribut auf true gesetzt ist, wird der Text umgebrochen, sofern er länger als GetAutoWrapThreshold() ist. - @param AutoWrap gibt an, ob der automatische Umbruch aktiviert oder deaktiviert werden soll. - @remark Dieses Attribut wird mit dem Wert false initialisiert. + @param AutoWrap gibt an, ob der automatische Umbruch aktiviert oder deaktiviert werden soll. + @remark Dieses Attribut wird mit dem Wert false initialisiert. */ void SetAutoWrap(bool AutoWrap); /** - @brief Legt die Längengrenze des Textes in Pixeln fest, ab der ein automatischer Zeilenumbruch vorgenommen wird. - @remark Dieses Attribut wird mit dem Wert 300 initialisiert. - @remark Eine automatische Formatierung wird nur vorgenommen, wenn diese durch einen Aufruf von SetAutoWrap() aktiviert wurde. + @brief Legt die Längengrenze des Textes in Pixeln fest, ab der ein automatischer Zeilenumbruch vorgenommen wird. + @remark Dieses Attribut wird mit dem Wert 300 initialisiert. + @remark Eine automatische Formatierung wird nur vorgenommen, wenn diese durch einen Aufruf von SetAutoWrap() aktiviert wurde. */ void SetAutoWrapThreshold(unsigned int AutoWrapThreshold); /** - @brief Gibt den dargestellten Text zurück. + @brief Gibt den dargestellten Text zurück. */ - const Common::String & GetText() { return m_Text; } + const Common::String &GetText() { + return m_Text; + } /** @brief Gibt den Namen das momentan benutzten Fonts zurück. */ - const Common::String & GetFont() { return m_Font; } + const Common::String &GetFont() { + return m_Font; + } /** - @brief Setzt die Farbe des Textes. - @param Color eine 24-Bit RGB Farbe, die die Farbe des Textes festlegt. + @brief Setzt die Farbe des Textes. + @param Color eine 24-Bit RGB Farbe, die die Farbe des Textes festlegt. */ void SetColor(unsigned int ModulationColor); /** - @brief Gibt den Alphawert des Textes zurück. - @return Der Alphawert des Textes (0 = keine Deckung, 255 = volle Deckung). + @brief Gibt den Alphawert des Textes zurück. + @return Der Alphawert des Textes (0 = keine Deckung, 255 = volle Deckung). */ - int GetAlpha() const { return m_ModulationColor >> 24; } + int GetAlpha() const { + return m_ModulationColor >> 24; + } /** - @brief Gibt die Farbe des Textes zurück. - @return Eine 24-Bit RGB Farbe, die die Farbe des Textes angibt. + @brief Gibt die Farbe des Textes zurück. + @return Eine 24-Bit RGB Farbe, die die Farbe des Textes angibt. */ - int GetColor() const { return m_ModulationColor & 0x00ffffff; } + int GetColor() const { + return m_ModulationColor & 0x00ffffff; + } /** - @brief Gibt zurück, ob die automatische Formatierung aktiviert ist. + @brief Gibt zurück, ob die automatische Formatierung aktiviert ist. */ - bool IsAutoWrapActive() const { return m_AutoWrap; } + bool IsAutoWrapActive() const { + return m_AutoWrap; + } /** - @brief Gibt die Längengrenze des Textes in Pixeln zurück, ab der eine automatische Formatierung vorgenommen wird. + @brief Gibt die Längengrenze des Textes in Pixeln zurück, ab der eine automatische Formatierung vorgenommen wird. */ - unsigned int GetAutoWrapThreshold() const { return m_AutoWrapThreshold; } + unsigned int GetAutoWrapThreshold() const { + return m_AutoWrapThreshold; + } - virtual bool Persist(BS_OutputPersistenceBlock & Writer); - virtual bool Unpersist(BS_InputPersistenceBlock & Reader); + virtual bool Persist(BS_OutputPersistenceBlock &Writer); + virtual bool Unpersist(BS_InputPersistenceBlock &Reader); protected: virtual bool DoRender(); private: BS_Text(BS_RenderObjectPtr ParentPtr); - BS_Text(BS_InputPersistenceBlock & Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); - - unsigned int m_ModulationColor; - Common::String m_Font; - Common::String m_Text; - bool m_AutoWrap; - unsigned int m_AutoWrapThreshold; - - struct LINE - { - BS_Rect BBox; - Common::String Text; + BS_Text(BS_InputPersistenceBlock &Reader, BS_RenderObjectPtr ParentPtr, unsigned int Handle); + + unsigned int m_ModulationColor; + Common::String m_Font; + Common::String m_Text; + bool m_AutoWrap; + unsigned int m_AutoWrapThreshold; + + struct LINE { + BS_Rect BBox; + Common::String Text; }; - Common::Array m_Lines; + Common::Array m_Lines; void UpdateFormat(); - void UpdateMetrics(BS_FontResource & FontResource); - BS_ResourceManager * GetResourceManager(); - BS_FontResource * LockFontResource(); + void UpdateMetrics(BS_FontResource &FontResource); + BS_ResourceManager *GetResourceManager(); + BS_FontResource *LockFontResource(); }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/timedrenderobject.cpp b/engines/sword25/gfx/timedrenderobject.cpp index 7adb3c5b7c..eff62c3135 100644 --- a/engines/sword25/gfx/timedrenderobject.cpp +++ b/engines/sword25/gfx/timedrenderobject.cpp @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -43,14 +43,12 @@ namespace Sword25 { // ----------------------------------------------------------------------------- BS_TimedRenderObject::BS_TimedRenderObject(BS_RenderObjectPtr pParent, TYPES Type, unsigned int Handle) : - BS_RenderObject(pParent, Type, Handle) -{ + BS_RenderObject(pParent, Type, Handle) { BS_ASSERT(GetManager()); GetManager()->AttatchTimedRenderObject(this); } -BS_TimedRenderObject::~BS_TimedRenderObject() -{ +BS_TimedRenderObject::~BS_TimedRenderObject() { BS_ASSERT(GetManager()); GetManager()->DetatchTimedRenderObject(this); } diff --git a/engines/sword25/gfx/timedrenderobject.h b/engines/sword25/gfx/timedrenderobject.h index f2aa4a638d..576ab64383 100644 --- a/engines/sword25/gfx/timedrenderobject.h +++ b/engines/sword25/gfx/timedrenderobject.h @@ -23,7 +23,7 @@ * */ -/* +/* * This code is based on Broken Sword 2.5 engine * * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer @@ -54,21 +54,20 @@ namespace Sword25 { // ----------------------------------------------------------------------------- /** - @brief + @brief */ -class BS_TimedRenderObject : public BS_RenderObject -{ +class BS_TimedRenderObject : public BS_RenderObject { public: BS_TimedRenderObject(BS_RenderObjectPtr pParent, TYPES Type, unsigned int Handle = 0); ~BS_TimedRenderObject(); /** - @brief Teilt dem Objekt mit, dass ein neuer Frame begonnen wird. + @brief Teilt dem Objekt mit, dass ein neuer Frame begonnen wird. - Diese Methode wird jeden Frame an jedem BS_TimedRenderObject aufgerufen um diesen zu ermöglichen - ihren Zustand Zeitabhängig zu verändern (z.B. Animationen).
- @param int TimeElapsed gibt an wie viel Zeit (in Microsekunden) seit dem letzten Frame vergangen ist. + Diese Methode wird jeden Frame an jedem BS_TimedRenderObject aufgerufen um diesen zu ermöglichen + ihren Zustand Zeitabhängig zu verändern (z.B. Animationen).
+ @param int TimeElapsed gibt an wie viel Zeit (in Microsekunden) seit dem letzten Frame vergangen ist. */ virtual void FrameNotification(int TimeElapsed) = 0; }; -- cgit v1.2.3