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

14
src/Magnum/Trade/imageconverter.cpp

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

Loading…
Cancel
Save