DevExpress Drawing Graphics Library — The v23.2 Release Recap

News
03 January 2024

This post includes updated release info on the DevExpress Drawing Graphics Library. As you may know, our Graphics library contains basic cross-platform drawing logic for DevExpress UI components and ships with DevExpress primitives, counterparts to System.Drawing primitives (Font, Pen, Brush, etc). Thanks to its cross-platform pedigree, you can use products such as DevExpress Reports, Office File API and BI Dashboard in .NET 6/7/8-based applications deployed to non-Windows platforms/environments such as Azure/AWS Unix-based Web Apps, Docker containers and VMs.

We released the DevExpress Drawing Graphics Library to manufacturing (RTM) in our v23.1 release cycle. Refer to the following blog post to learn more about functionality introduced in the RTM release: DevExpress Drawing Library Goes RTM (v23.1).

In our most recent release cycle (v23.2), we extended functionality as follows: 

First things First - Let Me Answer a Common Question: Why Does a Reference to System.Drawing.Common Still Exist?

Before I document the most recent enhancements made to our Graphics library, I'd like to address a few questions submitted to us via the DevExpress Support Center:

"I see that the DevExpress.Reporting.Core package depends on System.Drawing.Common. In turn, this library functionality is not available in non-Windows environments such as Linux starting with .NET 6. Do you plan to release a version of the package compatible with .NET 6/7/8?"

"I have found some internal DevExpress references to System.Drawing in the API, but we'd like to remove the reference while migrating to .NET 7. What can I do?"

"While porting my app to the cloud and making it platform-independent, I found references to System.Drawing within the DevExpress.Drawing library. How can I be sure that everything goes smoothly?"

Assembly Structure

While the ultimate goal would be to remove the System.Drawing.Common reference from various assemblies, a key point to remember is that multiple DevExpress products share a set of so-called "core" assemblies. Core assemblies used across our products, (such as those used in our WinForms product line), naturally include a reference to System.Drawing so as to handle fonts, images, and printing. For instance, in DevExpress.Data, you'll find a reference to System.Drawing.Common >=4.7.2, which is necessary for GDI+ environments like Windows (e.g., in .NET Framework-based WinForms apps with Reporting).

We've improved these core assemblies with each product release, ensuring compatibility across various .NET development platforms like WinForms, ASP.NET, MVC, and Core.

Consider our WinForms Charts library as an example. It shares the same codebase as our XRChart report control, and the chart rendering algorithms used in our Office File API. To limit impact to DevExpress-powered WinForms apps, we duplicated public APIs (Font and Image to DXFont and DXImage respectively) and retained references to System.Drawing.

Future Plans

We don't want to create new headaches for those supporting existing Windows-only apps. As such, we're unlikely to remove the System.Drawing dependencies within core packages in the future (to maintain compatibility with both .NET Framework and .NET within our codebase).

NuGet Packages

Regarding DevExpress NuGet packages: These are "multi-target" packages, supporting both .NET Framework and .NET 6+ apps simultaneously. Although they include a System.Drawing.Common reference, this reference doesn't impact unsupported cross-platform scenarios like Linux, macOS, Android, iOS with .NET MAUI, or Blazor WebAssembly. Technically,System.Drawing.Common v5.0.3 referenced in our assemblies is not used in these scenarios.

Important Notes

  • It's completely fine to use the System.Drawing.Primitives package in your cross-platform apps. Utilizing structures like PointF and SizeF won't lead to runtime exceptions.

  • The System.PlatformNotSupported exception will occur in non-Windows environments if your .NET app refers to System.Drawing.Common >= 6.0.0. This reference may arise from third-party libraries; for example, adding a System.Security.Permissions package creates a System.Drawing.Common 7.0.0 dependency. DevExpress assemblies only reference System.Drawing.Common 5.0.3.

Conclusion

What matters most is that internal tests run smoothly, and feedback from our customers confirms that cross-platform products like DevExpress Reports, Dashboards and Office File API do not throw System.PlatformNotSupported exceptions in apps deployed to non-Windows environments. These apps produce expected results because we refactored our cross-platform code and successfully migrated to the DevExpress Drawing Graphics library.

Various DevExpress Product Enhancements in our v23.2 Release

Blazor

We updated two Blazor Rich Text Editor public API members to DevExpress.Drawing.Printing.DXPaperKind primitives:

This change allows you to use this component in non-Windows environments. Refer to the: Rich Text Editor for Blazor - PaperKind members changed their types breaking change for additional information. 

Office File API

We introduced a new cross-platform DXSvgImage type to support SVG graphics across our Word Document API, PDF Document API and Excel Spreadsheet API product line. You can now import, save, export (PDF), and edit Word, Excel and PDF documents with SVG graphics in both Windows and non-Windows environments. Additionally, you have the flexibility to resize, move, and align SVG images within the document.

XAF — Cross-Platform .NET App UI & Web API Service

With our v23.2 update, we eliminated use of System.Drawing.Common API references across XAF Blazor/WinForms UI and Web API Service. This ensures that our cross-platform libraries function correctly in Linux, Mac, Windows, Android, iOS for .NET 7, .NET 8, and future target frameworks. This simplification also streamlines development and deployment for new UI platforms like .NET MAUI and Blazor WebAssembly with .NET 8, 9, 10, etc. For additional information, please refer to our Breaking Change web page.

Common

  • You can now convert a System.Drawing.Image object instance to DevExpress.Drawing.DXImage, streamlining the migration process without requiring a change in object types.

  • We've enhanced the functionality of the DXMetafile type, enabling support for a subset of commands for importing and drawing metafiles. This enhancement ensures that charts, gauges, and sparklines in report and Word/Excel/PDF documents are now exported in vector format with optimized performance. Additionally, you have the flexibility to rasterize images generated by these elements and set image DPI during PDF export.

  • Thanks to internal codebase optimizations, you can now generate report documents in Windows apps using our Skia-based Graphics Engine.

Further Enhancements & Feedback

Next year, we'll be focused on the following areas:

  • Additional enhancement to the DXSvgImage class: extended number of supported drawing commands.
  • Cross-platform SVG export for various DevExpress components.
  • Performance enhancements (memory consumption, text formatting engine refactoring)

We may also extend the Skia-based drawing engine and apply it to our WinForms/WPF Document Viewer components. Your feedback will drive this decision, so please let us know if this is of value to your enterprise.

Please submit your feedback in the survey below and help us fine tune our 2024 development plans for the DevExpress.Drawing Graphics Library.

Free DevExpress Products - Get Your Copy Today

The following free DevExpress product offers remain available. Should you have any questions about the free offers below, please submit a ticket via the DevExpress Support Center at your convenience. We'll be happy to follow-up.