Browse Source

Simplify the converter utility plugin loading code.

Also have different return codes for different kinds of errors.
pull/205/head
Vladimír Vondruš 8 years ago
parent
commit
33fe70d7b5
  1. 12
      src/Magnum/Text/fontconverter.cpp
  2. 16
      src/Magnum/TextureTools/distancefieldconverter.cpp
  3. 14
      src/Magnum/Trade/imageconverter.cpp

12
src/Magnum/Text/fontconverter.cpp

@ -148,20 +148,18 @@ int FontConverter::exec() {
/* Load font */ /* Load font */
PluginManager::Manager<Text::AbstractFont> fontManager(Utility::Directory::join(args.value("plugin-dir"), "fonts/")); PluginManager::Manager<Text::AbstractFont> fontManager(Utility::Directory::join(args.value("plugin-dir"), "fonts/"));
if(!(fontManager.load(args.value("font")) & PluginManager::LoadState::Loaded)) std::unique_ptr<Text::AbstractFont> font = fontManager.loadAndInstantiate(args.value("font"));
std::exit(1); if(!font) return 1;
std::unique_ptr<Text::AbstractFont> font = fontManager.instance(args.value("font"));
/* Load font converter */ /* Load font converter */
PluginManager::Manager<Text::AbstractFontConverter> converterManager(Utility::Directory::join(args.value("plugin-dir"), "fontconverters/")); PluginManager::Manager<Text::AbstractFontConverter> converterManager(Utility::Directory::join(args.value("plugin-dir"), "fontconverters/"));
if(!(converterManager.load(args.value("converter")) & PluginManager::LoadState::Loaded)) std::unique_ptr<Text::AbstractFontConverter> converter = converterManager.loadAndInstantiate(args.value("converter"));
std::exit(1); if(!converter) return 2;
std::unique_ptr<Text::AbstractFontConverter> converter = converterManager.instance(args.value("converter"));
/* Open font */ /* Open font */
if(!font->openFile(args.value("input"), args.value<Float>("font-size"))) { if(!font->openFile(args.value("input"), args.value<Float>("font-size"))) {
Error() << "Cannot open font" << args.value("input"); Error() << "Cannot open font" << args.value("input");
std::exit(1); return 3;
} }
/* Create distance field glyph cache if radius is specified */ /* Create distance field glyph cache if radius is specified */

16
src/Magnum/TextureTools/distancefieldconverter.cpp

@ -141,21 +141,19 @@ DistanceFieldConverter::DistanceFieldConverter(const Arguments& arguments): Plat
int DistanceFieldConverter::exec() { int DistanceFieldConverter::exec() {
/* Load importer plugin */ /* Load importer plugin */
PluginManager::Manager<Trade::AbstractImporter> importerManager(Utility::Directory::join(args.value("plugin-dir"), "importers/")); PluginManager::Manager<Trade::AbstractImporter> importerManager(Utility::Directory::join(args.value("plugin-dir"), "importers/"));
if(!(importerManager.load(args.value("importer")) & PluginManager::LoadState::Loaded)) std::unique_ptr<Trade::AbstractImporter> importer = importerManager.loadAndInstantiate(args.value("importer"));
return 1; if(!importer) return 1;
std::unique_ptr<Trade::AbstractImporter> importer = importerManager.instance(args.value("importer"));
/* Load converter plugin */ /* Load converter plugin */
PluginManager::Manager<Trade::AbstractImageConverter> converterManager(Utility::Directory::join(args.value("plugin-dir"), "imageconverters/")); PluginManager::Manager<Trade::AbstractImageConverter> converterManager(Utility::Directory::join(args.value("plugin-dir"), "imageconverters/"));
if(!(converterManager.load(args.value("converter")) & PluginManager::LoadState::Loaded)) std::unique_ptr<Trade::AbstractImageConverter> converter = converterManager.loadAndInstantiate(args.value("converter"));
return 1; if(!converter) return 2;
std::unique_ptr<Trade::AbstractImageConverter> converter = converterManager.instance(args.value("converter"));
/* Open input file */ /* Open input file */
Containers::Optional<Trade::ImageData2D> image; Containers::Optional<Trade::ImageData2D> image;
if(!importer->openFile(args.value("input")) || !(image = importer->image2D(0))) { if(!importer->openFile(args.value("input")) || !(image = importer->image2D(0))) {
Error() << "Cannot open file" << args.value("input"); Error() << "Cannot open file" << args.value("input");
return 1; return 3;
} }
/* Decide about internal format */ /* Decide about internal format */
@ -165,7 +163,7 @@ int DistanceFieldConverter::exec() {
else if(image->format() == PixelFormat::RGBA) internalFormat = TextureFormat::RGBA8; else if(image->format() == PixelFormat::RGBA) internalFormat = TextureFormat::RGBA8;
else { else {
Error() << "Unsupported image format" << image->format(); Error() << "Unsupported image format" << image->format();
return 1; return 4;
} }
/* Input texture */ /* Input texture */
@ -191,7 +189,7 @@ int DistanceFieldConverter::exec() {
output.image(0, result); output.image(0, result);
if(!converter->exportToFile(result, args.value("output"))) { if(!converter->exportToFile(result, args.value("output"))) {
Error() << "Cannot save file" << args.value("output"); Error() << "Cannot save file" << args.value("output");
return 1; return 5;
} }
return 0; return 0;

14
src/Magnum/Trade/imageconverter.cpp

@ -86,21 +86,19 @@ int main(int argc, char** argv) {
/* Load importer plugin */ /* Load importer plugin */
PluginManager::Manager<Trade::AbstractImporter> importerManager(Utility::Directory::join(args.value("plugin-dir"), "importers/")); PluginManager::Manager<Trade::AbstractImporter> importerManager(Utility::Directory::join(args.value("plugin-dir"), "importers/"));
if(!(importerManager.load(args.value("importer")) & PluginManager::LoadState::Loaded)) std::unique_ptr<Trade::AbstractImporter> importer = importerManager.loadAndInstantiate(args.value("importer"));
return 1; if(!importer) return 1;
std::unique_ptr<Trade::AbstractImporter> importer = importerManager.instance(args.value("importer"));
/* Load converter plugin */ /* Load converter plugin */
PluginManager::Manager<Trade::AbstractImageConverter> converterManager(Utility::Directory::join(args.value("plugin-dir"), "imageconverters/")); PluginManager::Manager<Trade::AbstractImageConverter> converterManager(Utility::Directory::join(args.value("plugin-dir"), "imageconverters/"));
if(!(converterManager.load(args.value("converter")) & PluginManager::LoadState::Loaded)) std::unique_ptr<Trade::AbstractImageConverter> converter = converterManager.loadAndInstantiate(args.value("converter"));
return 1; if(!converter) return 2;
std::unique_ptr<Trade::AbstractImageConverter> converter = converterManager.instance(args.value("converter"));
/* Open input file */ /* Open input file */
Containers::Optional<Trade::ImageData2D> image; Containers::Optional<Trade::ImageData2D> image;
if(!importer->openFile(args.value("input")) || !(image = importer->image2D(0))) { if(!importer->openFile(args.value("input")) || !(image = importer->image2D(0))) {
Error() << "Cannot open file" << args.value("input"); Error() << "Cannot open file" << args.value("input");
return 1; return 3;
} }
Debug() << "Converting image of size" << image->size() << Debug::nospace << ", format" << image->format() << "and type" << image->type() << "to" << args.value("output"); Debug() << "Converting image of size" << image->size() << Debug::nospace << ", format" << image->format() << "and type" << image->type() << "to" << args.value("output");
@ -108,6 +106,6 @@ int main(int argc, char** argv) {
/* Save output file */ /* Save output file */
if(!converter->exportToFile(*image, args.value("output"))) { if(!converter->exportToFile(*image, args.value("output"))) {
Error() << "Cannot save file" << args.value("output"); Error() << "Cannot save file" << args.value("output");
return 1; return 4;
} }
} }

Loading…
Cancel
Save