UltraCanvas Insight

UltraCanvas Template System

Unique Features

UltraCanvas folder structure

UltraCanvas/
├── include/
│ ├── UltraCanvasCommonTypes.h
│ ├── UltraCanvasImageElement.h
│ ├── UltraCanvasGraphicsPluginSystem.h
│ └── …
├── core/
│ ├── UltraCanvasImageElement.cpp
│ ├── UltraCanvasGraphicsPluginSystem.cpp
│ └── …
├── Plugins/
│ ├── Images/
│ │ ├── UltraCanvasSTBImagePlugin.h # Core formats (PNG, JPEG, BMP, GIF, TGA, PSD, HDR)
│ │ ├── UltraCanvasWebPPlugin.h # WebP format support
│ │ ├── UltraCanvasAVIFPlugin.h # AVIF format support
│ │ ├── UltraCanvasTIFFPlugin.h # TIFF format support
│ │ ├── UltraCanvasHEICPlugin.h # HEIC/HEIF format support
│ │ ├── UltraCanvasJXLPlugin.h # JPEG XL format support
│ │ └── UltraCanvasImagePluginManager.h # Central plugin management
│ ├── Video/
│ │ ├── UltraCanvasMP4Plugin.h # MP4 video support
│ │ ├── UltraCanvasAVIPlugin.h # AVI video support
│ │ └── UltraCanvasVideoPluginManager.h # Video plugin management
│ ├── Audio/
│ │ ├── UltraCanvasMP3Plugin.h # MP3 audio support
│ │ ├── UltraCanvasFLACPlugin.h # FLAC audio support
│ │ └── UltraCanvasAudioPluginManager.h # Audio plugin management
│ ├── Documents/
│ │ ├── UltraCanvasPDFPlugin.h # PDF document support
│ │ ├── UltraCanvasMarkdownPlugin.h # Markdown support
│ │ └── UltraCanvasDocumentPluginManager.h # Document plugin management
│ └── Graphics/
│ ├── UltraCanvasSVGPlugin.h # SVG vector graphics
│ ├── UltraCanvasEPSPlugin.h # EPS vector graphics
│ └── UltraCanvasVectorPluginManager.h # Vector plugin management
├── OS/
│ ├── Linux/
│ │ └── UltraCanvasSupport.cpp
│ ├── MSWindows/
│ │ └── UltraCanvasSupport.cpp
│ └── MacOS/
│ └── UltraCanvasSupport.cpp
└── examples/
├── ImageViewer/
├── VideoPlayer/
└── DocumentReader/

Plugin Organization Principles

01.

Category-Based Folders

– Images/ -> All image format plugins
– Video/ -> All video format plugins
– Audio/ -> All audio format plugins
– Documents/ -> Document format plugins
– Graphics/ -> Vector graphics plugins

02.

Single File Per Format

– Each plugin in its own .h file
– Clear naming: UltraCanvas[Format]Plugin.h
– Example: UltraCanvasHEICPlugin.h, UltraCanvasJXLPlugin.h

03.

Manager Classes

– Central manager per category
– UltraCanvasImagePluginManager.h
– Handles registration and coordination

04.

Conditional Compilation

– Each plugin checks for #ifdef ULTRACANVAS_[FORMAT]_SUPPORT
– Graceful degradation if library not available
– Clear error messages for missing dependencies

05.

Include Path Structure

– Plugins reference core headers: ../../include/
– Clean separation of concerns
– No circular dependencies

Build Integration

CMakeLists.txt structure

				
					cmake
# Core UltraCanvas
add_subdirectory(core)

# Plugin system (optional components)
option(ULTRACANVAS_IMAGE_PLUGINS "Enable image plugins" ON)
option(ULTRACANVAS_VIDEO_PLUGINS "Enable video plugins" OFF)
option(ULTRACANVAS_AUDIO_PLUGINS "Enable audio plugins" OFF)

if(ULTRACANVAS_IMAGE_PLUGINS)
    add_subdirectory(Plugins/Images)
endif()

if(ULTRACANVAS_VIDEO_PLUGINS)
    add_subdirectory(Plugins/Video)
endif()

if(ULTRACANVAS_AUDIO_PLUGINS)
    add_subdirectory(Plugins/Audio)
endif()


				
			

This structure provides excellent organization while maintaining the flexibility and modularity that makes UltraCanvas powerful and maintainable!

Benefits of This Structure

Modularity: Each plugin is self-contained
Scalability: Easy to add new formats/categories
Maintainability: Clear organization and ownership
Build Flexibility: Choose which plugin categories to include
Dependency Management: Isolated dependencies per plugin
Code Clarity: No confusion about what each file does
Team Development: Different developers can work on different plugins
Testing: Individual plugins can be tested in isolation

Usage Examples

				
					// Include specific plugins
#include "Plugins/Images/UltraCanvasHEICPlugin.h"
#include "Plugins/Images/UltraCanvasJXLPlugin.h"

// Or include manager for easy initialization
#include "Plugins/Images/UltraCanvasImagePluginManager.h"

// Initialize all image plugins
UltraCanvas::UltraCanvasImagePluginManager::Initialize();

// Or register specific plugins
UltraCanvas::RegisterHEICPlugin();
UltraCanvas::RegisterJXLPlugin();