From b71310f6d0efea35cab724c41cb6f8958119da8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 29 Mar 2013 17:40:32 +0100 Subject: [PATCH] TgaImporter: moved TGA header structure to separate file. Will be used elsewhere. --- src/Plugins/TgaImporter/CMakeLists.txt | 1 + src/Plugins/TgaImporter/TgaHeader.h | 58 +++++++++++++++++++++++++ src/Plugins/TgaImporter/TgaImporter.cpp | 12 +++-- src/Plugins/TgaImporter/TgaImporter.h | 19 -------- 4 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 src/Plugins/TgaImporter/TgaHeader.h diff --git a/src/Plugins/TgaImporter/CMakeLists.txt b/src/Plugins/TgaImporter/CMakeLists.txt index b882e51bd..ad379ce7d 100644 --- a/src/Plugins/TgaImporter/CMakeLists.txt +++ b/src/Plugins/TgaImporter/CMakeLists.txt @@ -26,6 +26,7 @@ set(TgaImporter_SRCS TgaImporter.cpp) set(TgaImporter_HEADERS + TgaHeader.h TgaImporter.h) add_library(TgaImporterObjects OBJECT ${TgaImporter_SRCS}) diff --git a/src/Plugins/TgaImporter/TgaHeader.h b/src/Plugins/TgaImporter/TgaHeader.h new file mode 100644 index 000000000..d8cde1f17 --- /dev/null +++ b/src/Plugins/TgaImporter/TgaHeader.h @@ -0,0 +1,58 @@ +#ifndef Magnum_Trade_TgaImporter_TgaHeader_h +#define Magnum_Trade_TgaImporter_TgaHeader_h +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013 Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +/** @file + * @brief Struct Magnum::Trade::TgaImporter::TgaHeader + */ + +#include + +namespace Magnum { namespace Trade { namespace TgaImporter { + +#pragma pack(1) +/** @brief TGA file header */ +/** @todoc Enable @c INLINE_SIMPLE_STRUCTS again when unclosed <component> in tagfile is fixed*/ +struct TgaHeader { + UnsignedByte identsize; /**< @brief Size of ID field that follows header (0) */ + UnsignedByte colorMapType; /**< @brief 0 = None, 1 = paletted */ + UnsignedByte imageType; /**< @brief 0 = none, 1 = indexed, 2 = rgb, 3 = grey, +8=rle */ + UnsignedShort colorMapStart; /**< @brief First color map entry */ + UnsignedShort colorMapLength; /**< @brief Number of colors */ + UnsignedByte colorMapBpp; /**< @brief Bits per palette entry */ + UnsignedShort beginX; /**< @brief %Image x origin */ + UnsignedShort beginY; /**< @brief %Image y origin */ + UnsignedShort width; /**< @brief %Image width */ + UnsignedShort height; /**< @brief %Image height */ + UnsignedByte bpp; /**< @brief Bits per pixel (8, 16, 24, 32) */ + UnsignedByte descriptor; /**< @brief %Image descriptor */ +}; +#pragma pack(8) + +static_assert(sizeof(TgaHeader) == 18, "TgaHeader size is not 18 bytes"); + +}}} + +#endif diff --git a/src/Plugins/TgaImporter/TgaImporter.cpp b/src/Plugins/TgaImporter/TgaImporter.cpp index c45192895..9c39c04ca 100644 --- a/src/Plugins/TgaImporter/TgaImporter.cpp +++ b/src/Plugins/TgaImporter/TgaImporter.cpp @@ -32,14 +32,12 @@ #include #include +#include "TgaHeader.h" + using Corrade::Utility::Endianness; namespace Magnum { namespace Trade { namespace TgaImporter { -#ifndef DOXYGEN_GENERATING_OUTPUT -static_assert(sizeof(TgaImporter::Header) == 18, "TgaImporter: header size is not 18 bytes"); -#endif - TgaImporter::TgaImporter(): in(nullptr) {} TgaImporter::TgaImporter(Corrade::PluginManager::AbstractPluginManager* manager, std::string plugin): AbstractImporter(manager, std::move(plugin)), in(nullptr) {} @@ -85,13 +83,13 @@ ImageData2D* TgaImporter::image2D(UnsignedInt id) { in->seekg(0, std::istream::end); std::streampos filesize = in->tellg(); in->seekg(0, std::istream::beg); - if(filesize < std::streampos(sizeof(Header))) { + if(filesize < std::streampos(sizeof(TgaHeader))) { Error() << "Trade::TgaImporter::TgaImporter::image2D(): the file is too short:" << filesize << "bytes"; return nullptr; } - Header header; - in->read(reinterpret_cast(&header), sizeof(Header)); + TgaHeader header; + in->read(reinterpret_cast(&header), sizeof(TgaHeader)); /* Convert to machine endian */ header.width = Endianness::littleEndian(header.width); diff --git a/src/Plugins/TgaImporter/TgaImporter.h b/src/Plugins/TgaImporter/TgaImporter.h index 80f057d9f..9fc8925bf 100644 --- a/src/Plugins/TgaImporter/TgaImporter.h +++ b/src/Plugins/TgaImporter/TgaImporter.h @@ -69,25 +69,6 @@ class MAGNUM_TGAIMPORTER_EXPORT TgaImporter: public AbstractImporter { UnsignedInt image2DCount() const override; ImageData2D* image2D(UnsignedInt id) override; - #pragma pack(1) - /** @brief TGA file header */ - /** @todoc Enable @c INLINE_SIMPLE_STRUCTS again when unclosed <component> in tagfile is fixed*/ - struct MAGNUM_TGAIMPORTER_LOCAL Header { - UnsignedByte identsize; /**< @brief Size of ID field that follows header (0) */ - UnsignedByte colorMapType; /**< @brief 0 = None, 1 = paletted */ - UnsignedByte imageType; /**< @brief 0 = none, 1 = indexed, 2 = rgb, 3 = grey, +8=rle */ - UnsignedShort colorMapStart; /**< @brief First color map entry */ - UnsignedShort colorMapLength; /**< @brief Number of colors */ - UnsignedByte colorMapBpp; /**< @brief Bits per palette entry */ - UnsignedShort beginX; /**< @brief %Image x origin */ - UnsignedShort beginY; /**< @brief %Image y origin */ - UnsignedShort width; /**< @brief %Image width */ - UnsignedShort height; /**< @brief %Image height */ - UnsignedByte bpp; /**< @brief Bits per pixel (8, 16, 24, 32) */ - UnsignedByte descriptor; /**< @brief %Image descriptor */ - }; - #pragma pack(8) - private: bool MAGNUM_TGAIMPORTER_LOCAL open(std::istream& in);