Browse Source

Fixed Image API for Dynamic components

Marcin Ziąbek 2 years ago
parent
commit
2b701e11d4
2 changed files with 23 additions and 7 deletions
  1. 12 6
      Source/QuestPDF/Drawing/DocumentGenerator.cs
  2. 11 1
      Source/QuestPDF/Elements/Dynamic.cs

+ 12 - 6
Source/QuestPDF/Drawing/DocumentGenerator.cs

@@ -101,7 +101,7 @@ namespace QuestPDF.Drawing
             
             ApplyInheritedAndGlobalTexStyle(content, TextStyle.Default);
             ApplyContentDirection(content, settings.ContentDirection);
-            ApplyDefaultImageConfiguration(content, settings);
+            ApplyDefaultImageConfiguration(content, settings.ImageRasterDpi, settings.ImageCompressionQuality);
             
             var debuggingState = Settings.EnableDebugging ? ApplyDebugging(content) : null;
             
@@ -228,20 +228,26 @@ namespace QuestPDF.Drawing
                 ApplyContentDirection(child, direction);
         }
         
-        internal static void ApplyDefaultImageConfiguration(this Element? content, DocumentSettings settings)
+        internal static void ApplyDefaultImageConfiguration(this Element? content, int imageRasterDpi, ImageCompressionQuality imageCompressionQuality)
         {
             content.VisitChildren(x =>
             {
                 if (x is QuestPDF.Elements.Image image)
                 {
-                    image.TargetDpi ??= settings.ImageRasterDpi;
-                    image.CompressionQuality ??= settings.ImageCompressionQuality;
+                    image.TargetDpi ??= imageRasterDpi;
+                    image.CompressionQuality ??= imageCompressionQuality;
                 }
 
                 if (x is QuestPDF.Elements.DynamicImage dynamicImage)
                 {
-                    dynamicImage.TargetDpi ??= settings.ImageRasterDpi;
-                    dynamicImage.CompressionQuality ??= settings.ImageCompressionQuality;
+                    dynamicImage.TargetDpi ??= imageRasterDpi;
+                    dynamicImage.CompressionQuality ??= imageCompressionQuality;
+                }
+
+                if (x is DynamicHost dynamicHost)
+                {
+                    dynamicHost.ImageTargetDpi ??= imageRasterDpi;
+                    dynamicHost.ImageCompressionQuality ??= imageCompressionQuality;
                 }
             });
         }

+ 11 - 1
Source/QuestPDF/Elements/Dynamic.cs

@@ -14,6 +14,9 @@ namespace QuestPDF.Elements
         internal TextStyle TextStyle { get; set; } = TextStyle.Default;
         public ContentDirection ContentDirection { get; set; }
         
+        internal int? ImageTargetDpi { get; set; }
+        internal ImageCompressionQuality? ImageCompressionQuality { get; set; }
+        
         public DynamicHost(DynamicComponentProxy child)
         {
             Child = child;
@@ -58,6 +61,9 @@ namespace QuestPDF.Elements
                 TextStyle = TextStyle,
                 ContentDirection = ContentDirection,
                 
+                ImageTargetDpi = ImageTargetDpi.Value,
+                ImageCompressionQuality = ImageCompressionQuality.Value,
+                
                 PageNumber = PageContext.CurrentPage,
                 TotalPages = PageContext.GetLocation(Infrastructure.PageContext.DocumentLocation).PageEnd,
                 AvailableSize = availableSize
@@ -79,7 +85,10 @@ namespace QuestPDF.Elements
         
         internal TextStyle TextStyle { get; set; }
         internal ContentDirection ContentDirection { get; set; }
-    
+
+        internal int ImageTargetDpi { get; set; }
+        internal ImageCompressionQuality ImageCompressionQuality { get; set; }
+        
         public int PageNumber { get; internal set; }
         public int TotalPages { get; internal set; }
         public Size AvailableSize { get; internal set; }
@@ -91,6 +100,7 @@ namespace QuestPDF.Elements
             
             container.ApplyInheritedAndGlobalTexStyle(TextStyle);
             container.ApplyContentDirection(ContentDirection);
+            container.ApplyDefaultImageConfiguration(ImageTargetDpi, ImageCompressionQuality);
             
             container.InjectDependencies(PageContext, Canvas);
             container.VisitChildren(x => (x as IStateResettable)?.ResetState());