Working on removing more statics.

This commit is contained in:
Robin 2019-01-02 00:47:11 +01:00
commit e76e82741f
67 changed files with 445 additions and 443 deletions

View file

@ -9,5 +9,6 @@
<add key="Dapplo.Windows" value="https://ci.appveyor.com/nuget/dapplo-windows-pjnkjqjp7t6a" /> <add key="Dapplo.Windows" value="https://ci.appveyor.com/nuget/dapplo-windows-pjnkjqjp7t6a" />
<add key="myget.dotnetcore" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" /> <add key="myget.dotnetcore" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
<add key="dotnet-core-latest" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" /> <add key="dotnet-core-latest" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
</packageSources> </packageSources>
</configuration> </configuration>

View file

@ -17,6 +17,7 @@
<UseWPF>true</UseWPF> <UseWPF>true</UseWPF>
<UseWindowsForms>false</UseWindowsForms> <UseWindowsForms>false</UseWindowsForms>
<OsProductName>$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion@ProductName)</OsProductName> <OsProductName>$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion@ProductName)</OsProductName>
<RuntimeIdentifiers>win10-x64;win10-x86;win-x64;win-x86</RuntimeIdentifiers>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' != 'Debug' And !$(MSBuildProjectName.Contains('Test')) And !$(MSBuildProjectName.Contains('Demo'))"> <PropertyGroup Condition="'$(Configuration)' != 'Debug' And !$(MSBuildProjectName.Contains('Test')) And !$(MSBuildProjectName.Contains('Demo'))">
@ -45,8 +46,8 @@
<DebugSymbols>True</DebugSymbols> <DebugSymbols>True</DebugSymbols>
</PropertyGroup> </PropertyGroup>
<ItemGroup Condition="!$(MSBuildProjectName.Contains('Test')) And !$(MSBuildProjectName.Contains('Demo'))"> <ItemGroup>
<PackageReference Include="Nerdbank.GitVersioning" Version="2.2.33"> <PackageReference Include="Nerdbank.GitVersioning" Version="2.3.38">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference> </PackageReference>

View file

@ -187,7 +187,7 @@ namespace Greenshot.Addon.Confluence
private bool Upload(ISurface surfaceToUpload, Content page, string filename, out string errorMessage) private bool Upload(ISurface surfaceToUpload, Content page, string filename, out string errorMessage)
{ {
var outputSettings = new SurfaceOutputSettings(_confluenceConfiguration.UploadFormat, _confluenceConfiguration.UploadJpegQuality, _confluenceConfiguration.UploadReduceColors); var outputSettings = new SurfaceOutputSettings(CoreConfiguration, _confluenceConfiguration.UploadFormat, _confluenceConfiguration.UploadJpegQuality, _confluenceConfiguration.UploadReduceColors);
errorMessage = null; errorMessage = null;
try try
{ {

View file

@ -4,92 +4,6 @@
<xs:element name="Weavers"> <xs:element name="Weavers">
<xs:complexType> <xs:complexType>
<xs:all> <xs:all>
<xs:element name="Costura" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="IncludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="PreloadOrder" type="xs:string">
<xs:annotation>
<xs:documentation>The order of preloaded assemblies, delimited with line breaks.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:all>
<xs:attribute name="CreateTemporaryAssemblies" type="xs:boolean">
<xs:annotation>
<xs:documentation>This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeDebugSymbols" type="xs:boolean">
<xs:annotation>
<xs:documentation>Controls if .pdbs for reference assemblies are also embedded.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="DisableCompression" type="xs:boolean">
<xs:annotation>
<xs:documentation>Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="DisableCleanup" type="xs:boolean">
<xs:annotation>
<xs:documentation>As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="LoadAtModuleInit" type="xs:boolean">
<xs:annotation>
<xs:documentation>Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IgnoreSatelliteAssemblies" type="xs:boolean">
<xs:annotation>
<xs:documentation>Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExcludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Unmanaged64Assemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="PreloadOrder" type="xs:string">
<xs:annotation>
<xs:documentation>The order of preloaded assemblies, delimited with |.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="AutoProperties" minOccurs="0" maxOccurs="1" type="xs:anyType" /> <xs:element name="AutoProperties" minOccurs="0" maxOccurs="1" type="xs:anyType" />
</xs:all> </xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean"> <xs:attribute name="VerifyAssembly" type="xs:boolean">

View file

@ -51,7 +51,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
private static readonly AdjustableArrowCap ARROW_CAP = new AdjustableArrowCap(4, 6); private static readonly AdjustableArrowCap ARROW_CAP = new AdjustableArrowCap(4, 6);
public ArrowContainer(Surface parent) : base(parent) public ArrowContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
} }

View file

@ -61,12 +61,12 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
private Bitmap _bitmap; private Bitmap _bitmap;
public BitmapContainer(Surface parent, string filename) : this(parent) public BitmapContainer(Surface parent, string filename, IEditorConfiguration editorConfiguration) : this(parent, editorConfiguration)
{ {
Load(filename); Load(filename);
} }
public BitmapContainer(Surface parent) : base(parent) public BitmapContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
FieldChanged += BitmapContainer_OnFieldChanged; FieldChanged += BitmapContainer_OnFieldChanged;
Init(); Init();

View file

@ -39,7 +39,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// </summary> /// </summary>
public class CropContainer : DrawableContainer public class CropContainer : DrawableContainer
{ {
public CropContainer(Surface parent) : base(parent) public CropContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Init(); Init();
} }

View file

@ -46,12 +46,12 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
protected Cursor cursor; protected Cursor cursor;
public CursorContainer(Surface parent) : base(parent) public CursorContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Init(); Init();
} }
public CursorContainer(Surface parent, string filename) : this(parent) public CursorContainer(Surface parent, string filename, IEditorConfiguration editorConfiguration) : this(parent, editorConfiguration)
{ {
Load(filename); Load(filename);
} }

View file

@ -59,8 +59,6 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
private const int M11 = 0; private const int M11 = 0;
private const int M22 = 3; private const int M22 = 3;
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
// TODO: Solve, was static reference!
protected static readonly IEditorConfiguration EditorConfig = new EditorConfigurationImpl();
/// <summary> /// <summary>
/// List of available Adorners /// List of available Adorners
@ -98,7 +96,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
private int width; private int width;
public DrawableContainer(Surface parent) public DrawableContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(editorConfiguration)
{ {
InitializeFields(); InitializeFields();
_parent = parent; _parent = parent;

View file

@ -41,7 +41,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
[Serializable] [Serializable]
public class EllipseContainer : DrawableContainer public class EllipseContainer : DrawableContainer
{ {
public EllipseContainer(Surface parent) : base(parent) public EllipseContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
CreateDefaultAdorners(); CreateDefaultAdorners();
} }

View file

@ -37,8 +37,6 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields
public abstract class AbstractFieldHolder : IFieldHolder public abstract class AbstractFieldHolder : IFieldHolder
{ {
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
// TODO: Solve, was static reference!
private static readonly IEditorConfiguration EditorConfig = new EditorConfigurationImpl();
[NonSerialized] [NonSerialized]
private readonly IDictionary<IField, PropertyChangedEventHandler> _handlers = new Dictionary<IField, PropertyChangedEventHandler>(); private readonly IDictionary<IField, PropertyChangedEventHandler> _handlers = new Dictionary<IField, PropertyChangedEventHandler>();
@ -61,6 +59,9 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields
private IDictionary<IFieldType, IField> _fieldsByType = new Dictionary<IFieldType, IField>(); private IDictionary<IFieldType, IField> _fieldsByType = new Dictionary<IFieldType, IField>();
private readonly IList<IField> fields = new List<IField>(); private readonly IList<IField> fields = new List<IField>();
[NonSerialized]
protected readonly IEditorConfiguration _editorConfiguration;
[OnDeserialized] [OnDeserialized]
private void OnDeserialized(StreamingContext context) private void OnDeserialized(StreamingContext context)
{ {
@ -73,9 +74,13 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields
} }
} }
public AbstractFieldHolder(IEditorConfiguration editorConfiguration)
{
_editorConfiguration = editorConfiguration;
}
public void AddField(Type requestingType, IFieldType fieldType, object fieldValue) public void AddField(Type requestingType, IFieldType fieldType, object fieldValue)
{ {
AddField(EditorConfig.CreateField(requestingType, fieldType, fieldValue)); AddField(_editorConfiguration.CreateField(requestingType, fieldType, fieldValue));
} }
public virtual void AddField(IField field) public virtual void AddField(IField field)

View file

@ -46,7 +46,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields
[NonSerialized] private EventHandler childrenChanged; [NonSerialized] private EventHandler childrenChanged;
public AbstractFieldHolderWithChildren() public AbstractFieldHolderWithChildren(IEditorConfiguration editorConfiguration) : base(editorConfiguration)
{ {
_fieldChangedEventHandler = OnFieldChanged; _fieldChangedEventHandler = OnFieldChanged;
} }

View file

@ -49,13 +49,10 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields
[Serializable] [Serializable]
public sealed class FieldAggregator : AbstractFieldHolder public sealed class FieldAggregator : AbstractFieldHolder
{ {
// TODO: Solve, was static reference!
private static readonly IEditorConfiguration EditorConfig = new EditorConfigurationImpl();
private readonly IDrawableContainerList _boundContainers; private readonly IDrawableContainerList _boundContainers;
private bool _internalUpdateRunning; private bool _internalUpdateRunning;
public FieldAggregator(ISurface parent) public FieldAggregator(ISurface parent, IEditorConfiguration editorConfiguration) : base(editorConfiguration)
{ {
foreach (var fieldType in FieldTypes.Values) foreach (var fieldType in FieldTypes.Values)
{ {
@ -225,7 +222,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields
drawableContainerField.Value = field.Value; drawableContainerField.Value = field.Value;
// update last used from DC field, so that scope is honored // update last used from DC field, so that scope is honored
EditorConfig.UpdateLastFieldValue(drawableContainerField); _editorConfiguration.UpdateLastFieldValue(drawableContainerField);
} }
} }
} }

View file

@ -58,7 +58,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
HIGHLIGHT HIGHLIGHT
} }
public FilterContainer(Surface parent) : base(parent) public FilterContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Init(); Init();
} }

View file

@ -48,7 +48,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Filters
[NonSerialized] private PropertyChangedEventHandler propertyChanged; [NonSerialized] private PropertyChangedEventHandler propertyChanged;
public AbstractFilter(DrawableContainer parent) public AbstractFilter(DrawableContainer parent, IEditorConfiguration editorConfiguration) : base(editorConfiguration)
{ {
this.parent = parent; this.parent = parent;
} }

View file

@ -40,7 +40,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Filters
{ {
public double previewQuality; public double previewQuality;
public BlurFilter(DrawableContainer parent) : base(parent) public BlurFilter(DrawableContainer parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
AddField(GetType(), FieldTypes.BLUR_RADIUS, 3); AddField(GetType(), FieldTypes.BLUR_RADIUS, 3);
AddField(GetType(), FieldTypes.PREVIEW_QUALITY, 1.0d); AddField(GetType(), FieldTypes.PREVIEW_QUALITY, 1.0d);

View file

@ -38,7 +38,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Filters
[Serializable] [Serializable]
public class BrightnessFilter : AbstractFilter public class BrightnessFilter : AbstractFilter
{ {
public BrightnessFilter(DrawableContainer parent) : base(parent) public BrightnessFilter(DrawableContainer parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
AddField(GetType(), FieldTypes.BRIGHTNESS, 0.9d); AddField(GetType(), FieldTypes.BRIGHTNESS, 0.9d);
} }

View file

@ -40,7 +40,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Filters
[Serializable] [Serializable]
public class GrayscaleFilter : AbstractFilter public class GrayscaleFilter : AbstractFilter
{ {
public GrayscaleFilter(DrawableContainer parent) : base(parent) public GrayscaleFilter(DrawableContainer parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
} }

View file

@ -39,7 +39,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Filters
[Serializable] [Serializable]
public class HighlightFilter : AbstractFilter public class HighlightFilter : AbstractFilter
{ {
public HighlightFilter(DrawableContainer parent) : base(parent) public HighlightFilter(DrawableContainer parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
AddField(GetType(), FieldTypes.FILL_COLOR, Color.Yellow); AddField(GetType(), FieldTypes.FILL_COLOR, Color.Yellow);
} }

View file

@ -38,7 +38,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Filters
[Serializable] [Serializable]
public class MagnifierFilter : AbstractFilter public class MagnifierFilter : AbstractFilter
{ {
public MagnifierFilter(DrawableContainer parent) : base(parent) public MagnifierFilter(DrawableContainer parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
AddField(GetType(), FieldTypes.MAGNIFICATION_FACTOR, 2); AddField(GetType(), FieldTypes.MAGNIFICATION_FACTOR, 2);
} }

View file

@ -43,7 +43,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Filters
[Serializable] [Serializable]
public class PixelizationFilter : AbstractFilter public class PixelizationFilter : AbstractFilter
{ {
public PixelizationFilter(DrawableContainer parent) : base(parent) public PixelizationFilter(DrawableContainer parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
AddField(GetType(), FieldTypes.PIXEL_SIZE, 5); AddField(GetType(), FieldTypes.PIXEL_SIZE, 5);
} }

View file

@ -44,13 +44,14 @@ namespace Greenshot.Addon.LegacyEditor.Drawing {
private NativeRect myBounds = NativeRect.Empty; private NativeRect myBounds = NativeRect.Empty;
private NativePoint lastMouse = NativePoint.Empty; private NativePoint lastMouse = NativePoint.Empty;
private readonly List<NativePointFloat> capturePoints = new List<NativePointFloat>(); private readonly List<NativePointFloat> capturePoints = new List<NativePointFloat>();
[NonSerialized] private GraphicsPath freehandPath = new GraphicsPath(); [NonSerialized]
private GraphicsPath freehandPath = new GraphicsPath();
private bool isRecalculated; private bool isRecalculated;
/// <summary> /// <summary>
/// Constructor /// Constructor
/// </summary> /// </summary>
public FreehandContainer(Surface parent) : base(parent) { public FreehandContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration) {
Width = parent.Width; Width = parent.Width;
Height = parent.Height; Height = parent.Height;
Top = 0; Top = 0;
@ -105,10 +106,10 @@ namespace Greenshot.Addon.LegacyEditor.Drawing {
public override bool HandleMouseMove(int mouseX, int mouseY) { public override bool HandleMouseMove(int mouseX, int mouseY) {
NativePoint previousPoint = capturePoints[capturePoints.Count-1]; NativePoint previousPoint = capturePoints[capturePoints.Count-1];
if (GeometryHelper.Distance2D(previousPoint.X, previousPoint.Y, mouseX, mouseY) >= 2*EditorConfig.FreehandSensitivity) { if (GeometryHelper.Distance2D(previousPoint.X, previousPoint.Y, mouseX, mouseY) >= 2* _editorConfiguration.FreehandSensitivity) {
capturePoints.Add(new NativePoint(mouseX, mouseY)); capturePoints.Add(new NativePoint(mouseX, mouseY));
} }
if (GeometryHelper.Distance2D(lastMouse.X, lastMouse.Y, mouseX, mouseY) < EditorConfig.FreehandSensitivity) if (GeometryHelper.Distance2D(lastMouse.X, lastMouse.Y, mouseX, mouseY) < _editorConfiguration.FreehandSensitivity)
{ {
return true; return true;
} }
@ -131,7 +132,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing {
/// </summary> /// </summary>
public override void HandleMouseUp(int mouseX, int mouseY) { public override void HandleMouseUp(int mouseX, int mouseY) {
// Make sure we don't loose the ending point // Make sure we don't loose the ending point
if (GeometryHelper.Distance2D(lastMouse.X, lastMouse.Y, mouseX, mouseY) >= EditorConfig.FreehandSensitivity) { if (GeometryHelper.Distance2D(lastMouse.X, lastMouse.Y, mouseX, mouseY) >= _editorConfiguration.FreehandSensitivity) {
capturePoints.Add(new NativePoint(mouseX, mouseY)); capturePoints.Add(new NativePoint(mouseX, mouseY));
} }
RecalculatePath(); RecalculatePath();

View file

@ -39,7 +39,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
[Serializable] [Serializable]
public class HighlightContainer : FilterContainer public class HighlightContainer : FilterContainer
{ {
public HighlightContainer(Surface parent) : base(parent) public HighlightContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Init(); Init();
} }
@ -86,29 +86,29 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
switch (preset) switch (preset)
{ {
case PreparedFilter.TEXT_HIGHTLIGHT: case PreparedFilter.TEXT_HIGHTLIGHT:
Add(new HighlightFilter(this)); Add(new HighlightFilter(this, _editorConfiguration));
break; break;
case PreparedFilter.AREA_HIGHLIGHT: case PreparedFilter.AREA_HIGHLIGHT:
var brightnessFilter = new BrightnessFilter(this) var brightnessFilter = new BrightnessFilter(this, _editorConfiguration)
{ {
Invert = true Invert = true
}; };
Add(brightnessFilter); Add(brightnessFilter);
var blurFilter = new BlurFilter(this) var blurFilter = new BlurFilter(this, _editorConfiguration)
{ {
Invert = true Invert = true
}; };
Add(blurFilter); Add(blurFilter);
break; break;
case PreparedFilter.GRAYSCALE: case PreparedFilter.GRAYSCALE:
AbstractFilter f = new GrayscaleFilter(this) AbstractFilter f = new GrayscaleFilter(this, _editorConfiguration)
{ {
Invert = true Invert = true
}; };
Add(f); Add(f);
break; break;
case PreparedFilter.MAGNIFICATION: case PreparedFilter.MAGNIFICATION:
Add(new MagnifierFilter(this)); Add(new MagnifierFilter(this, _editorConfiguration));
break; break;
} }
} }

View file

@ -45,12 +45,12 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
protected Icon icon; protected Icon icon;
public IconContainer(Surface parent) : base(parent) public IconContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Init(); Init();
} }
public IconContainer(Surface parent, string filename) : base(parent) public IconContainer(Surface parent, string filename, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Load(filename); Load(filename);
} }

View file

@ -44,7 +44,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
{ {
public static readonly int MAX_CLICK_DISTANCE_TOLERANCE = 10; public static readonly int MAX_CLICK_DISTANCE_TOLERANCE = 10;
public LineContainer(Surface parent) : base(parent) public LineContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Init(); Init();
} }

View file

@ -39,7 +39,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
[Serializable] [Serializable]
public class ObfuscateContainer : FilterContainer public class ObfuscateContainer : FilterContainer
{ {
public ObfuscateContainer(Surface parent) : base(parent) public ObfuscateContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Init(); Init();
} }
@ -83,10 +83,10 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
switch (preset) switch (preset)
{ {
case PreparedFilter.BLUR: case PreparedFilter.BLUR:
Add(new BlurFilter(this)); Add(new BlurFilter(this, _editorConfiguration));
break; break;
case PreparedFilter.PIXELIZE: case PreparedFilter.PIXELIZE:
Add(new PixelizationFilter(this)); Add(new PixelizationFilter(this, _editorConfiguration));
break; break;
} }
} }

View file

@ -35,7 +35,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing {
[Serializable] [Serializable]
public class RectangleContainer : DrawableContainer { public class RectangleContainer : DrawableContainer {
public RectangleContainer(Surface parent) : base(parent) { public RectangleContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration) {
Init(); Init();
} }

View file

@ -46,8 +46,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
{ {
private NativePoint _initialGripperPoint; private NativePoint _initialGripperPoint;
public SpeechbubbleContainer(Surface parent) public SpeechbubbleContainer(Surface parent, IEditorConfiguration editorConfiguration)
: base(parent) : base(parent, editorConfiguration)
{ {
} }

View file

@ -50,7 +50,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
private float fontSize = 16; private float fontSize = 16;
public StepLabelContainer(Surface parent) : base(parent) public StepLabelContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
parent.AddStepLabel(this); parent.AddStepLabel(this);
InitContent(); InitContent();

View file

@ -57,8 +57,6 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
public sealed class Surface : Control, ISurface, INotifyPropertyChanged public sealed class Surface : Control, ISurface, INotifyPropertyChanged
{ {
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
// TODO: Solve, was static reference!
private static readonly ICoreConfiguration conf = new CoreConfigurationImpl();
/// <summary> /// <summary>
/// The number of Surfaces in existance /// The number of Surfaces in existance
@ -70,7 +68,15 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// </summary> /// </summary>
private readonly IDrawableContainerList _elements; private readonly IDrawableContainerList _elements;
[NonSerialized] private readonly Stack<IMemento> _redoStack = new Stack<IMemento>();
[NonSerialized]
private readonly IEditorConfiguration _editorConfiguration;
[NonSerialized]
private readonly ICoreConfiguration _coreConfiguration;
[NonSerialized]
private readonly Stack<IMemento> _redoStack = new Stack<IMemento>();
/// <summary> /// <summary>
/// all stepLabels for the surface, needed with serialization /// all stepLabels for the surface, needed with serialization
@ -80,12 +86,14 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// <summary> /// <summary>
/// Undo/Redo stacks, should not be serialized as the file would be way to big /// Undo/Redo stacks, should not be serialized as the file would be way to big
/// </summary> /// </summary>
[NonSerialized] private readonly Stack<IMemento> _undoStack = new Stack<IMemento>(); [NonSerialized]
private readonly Stack<IMemento> _undoStack = new Stack<IMemento>();
/// <summary> /// <summary>
/// all selected elements, do not serialize /// all selected elements, do not serialize
/// </summary> /// </summary>
[NonSerialized] private readonly IDrawableContainerList selectedElements; [NonSerialized]
private readonly IDrawableContainerList selectedElements;
/// <summary> /// <summary>
/// The buffer is only for drawing on it when using filters (to supply access) /// The buffer is only for drawing on it when using filters (to supply access)
@ -94,7 +102,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// The actual bitmap is in the paintbox... /// The actual bitmap is in the paintbox...
/// TODO: Check if this buffer is still needed! /// TODO: Check if this buffer is still needed!
/// </summary> /// </summary>
[NonSerialized] private Bitmap _buffer; [NonSerialized]
private Bitmap _buffer;
/// <summary> /// <summary>
/// This value is used to start counting the step labels /// This value is used to start counting the step labels
@ -104,7 +113,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// <summary> /// <summary>
/// the cropcontainer, when cropping this is set, do not serialize /// the cropcontainer, when cropping this is set, do not serialize
/// </summary> /// </summary>
[NonSerialized] private IDrawableContainer _cropContainer; [NonSerialized]
private IDrawableContainer _cropContainer;
/// <summary> /// <summary>
/// the cursor container, needed with serialization as we need a direct acces to it. /// the cursor container, needed with serialization as we need a direct acces to it.
@ -114,14 +124,17 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// <summary> /// <summary>
/// the element we are drawing with, do not serialize /// the element we are drawing with, do not serialize
/// </summary> /// </summary>
[NonSerialized] private IDrawableContainer _drawingElement; [NonSerialized]
private IDrawableContainer _drawingElement;
/// <summary> /// <summary>
/// current drawing mode, do not serialize! /// current drawing mode, do not serialize!
/// </summary> /// </summary>
[NonSerialized] private DrawingModes _drawingMode = DrawingModes.None; [NonSerialized]
private DrawingModes _drawingMode = DrawingModes.None;
[NonSerialized] private SurfaceDrawingModeEventHandler _drawingModeChanged; [NonSerialized]
private SurfaceDrawingModeEventHandler _drawingModeChanged;
/// <summary> /// <summary>
/// all elements on the surface, needed with serialization /// all elements on the surface, needed with serialization
@ -136,22 +149,26 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// <summary> /// <summary>
/// inUndoRedo makes sure we don't undo/redo while in a undo/redo action /// inUndoRedo makes sure we don't undo/redo while in a undo/redo action
/// </summary> /// </summary>
[NonSerialized] private bool _inUndoRedo; [NonSerialized]
private bool _inUndoRedo;
/// <summary> /// <summary>
/// Make only one surfacemove cycle undoable, see SurfaceMouseMove /// Make only one surfacemove cycle undoable, see SurfaceMouseMove
/// </summary> /// </summary>
[NonSerialized] private bool _isSurfaceMoveMadeUndoable; [NonSerialized]
private bool _isSurfaceMoveMadeUndoable;
/// <summary> /// <summary>
/// the keyslocked flag helps with focus issues /// the keyslocked flag helps with focus issues
/// </summary> /// </summary>
[NonSerialized] private bool _keysLocked; [NonSerialized]
private bool _keysLocked;
/// <summary> /// <summary>
/// Last save location, do not serialize! /// Last save location, do not serialize!
/// </summary> /// </summary>
[NonSerialized] private string _lastSaveFullPath; [NonSerialized]
private string _lastSaveFullPath;
/// <summary> /// <summary>
/// the modified flag specifies if the surface has had modifications after the last export. /// the modified flag specifies if the surface has had modifications after the last export.
@ -164,47 +181,56 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// <summary> /// <summary>
/// are we in a mouse down, do not serialize /// are we in a mouse down, do not serialize
/// </summary> /// </summary>
[NonSerialized] private bool _mouseDown; [NonSerialized]
private bool _mouseDown;
/// <summary> /// <summary>
/// The selected element for the mouse down, do not serialize /// The selected element for the mouse down, do not serialize
/// </summary> /// </summary>
[NonSerialized] private IDrawableContainer _mouseDownElement; [NonSerialized]
private IDrawableContainer _mouseDownElement;
/// <summary> /// <summary>
/// Location of the mouse-down (it "starts" here), do not serialize /// Location of the mouse-down (it "starts" here), do not serialize
/// </summary> /// </summary>
[NonSerialized] private NativePoint _mouseStart = NativePoint.Empty; [NonSerialized]
private NativePoint _mouseStart = NativePoint.Empty;
[NonSerialized] private SurfaceElementEventHandler _movingElementChanged; [NonSerialized]
private SurfaceElementEventHandler _movingElementChanged;
/// <summary> /// <summary>
/// Event handlers (do not serialize!) /// Event handlers (do not serialize!)
/// </summary> /// </summary>
[NonSerialized] private PropertyChangedEventHandler _propertyChanged; [NonSerialized]
private PropertyChangedEventHandler _propertyChanged;
[NonSerialized] private SurfaceMessageEventHandler _surfaceMessage; [NonSerialized]
private SurfaceMessageEventHandler _surfaceMessage;
[NonSerialized] private SurfaceSizeChangeEventHandler _surfaceSizeChanged; [NonSerialized]
private SurfaceSizeChangeEventHandler _surfaceSizeChanged;
/// <summary> /// <summary>
/// the brush which is used for transparent backgrounds, set by the editor, do not serialize /// the brush which is used for transparent backgrounds, set by the editor, do not serialize
/// </summary> /// </summary>
[NonSerialized] private Brush _transparencyBackgroundBrush; [NonSerialized]
private Brush _transparencyBackgroundBrush;
/// <summary> /// <summary>
/// the element we want to draw with (not yet drawn), do not serialize /// the element we want to draw with (not yet drawn), do not serialize
/// </summary> /// </summary>
[NonSerialized] private IDrawableContainer _undrawnElement; [NonSerialized]
private IDrawableContainer _undrawnElement;
// Property to identify the Surface ID // Property to identify the Surface ID
/// <summary> /// <summary>
/// Base Surface constructor /// Base Surface constructor
/// </summary> /// </summary>
public Surface() public Surface(ICoreConfiguration coreConfiguration, IEditorConfiguration editorConfiguration)
{ {
_fieldAggregator = new FieldAggregator(this); _fieldAggregator = new FieldAggregator(this, editorConfiguration);
Count++; Count++;
_elements = new DrawableContainerList(ID); _elements = new DrawableContainerList(ID);
selectedElements = new DrawableContainerList(ID); selectedElements = new DrawableContainerList(ID);
@ -234,7 +260,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// Surface constructor with an image /// Surface constructor with an image
/// </summary> /// </summary>
/// <param name="newBitmap">Bitmap</param> /// <param name="newBitmap">Bitmap</param>
public Surface(Bitmap newBitmap) : this() public Surface(ICoreConfiguration coreConfiguration, IEditorConfiguration editorConfiguration, Bitmap newBitmap) : this(coreConfiguration, editorConfiguration)
{ {
Log.Debug().WriteLine("Got Bitmap with dimensions {0} and format {1}", newBitmap.Size, newBitmap.PixelFormat); Log.Debug().WriteLine("Got Bitmap with dimensions {0} and format {1}", newBitmap.Size, newBitmap.PixelFormat);
SetBitmap(newBitmap, true); SetBitmap(newBitmap, true);
@ -244,7 +270,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
/// Surface contructor with a capture /// Surface contructor with a capture
/// </summary> /// </summary>
/// <param name="capture"></param> /// <param name="capture"></param>
public Surface(ICapture capture) : this() public Surface(ICoreConfiguration coreConfiguration, IEditorConfiguration editorConfiguration, ICapture capture) : this(coreConfiguration, editorConfiguration)
{ {
SetCapture(capture); SetCapture(capture);
} }
@ -1135,41 +1161,41 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
switch (DrawingMode) switch (DrawingMode)
{ {
case DrawingModes.Rect: case DrawingModes.Rect:
_undrawnElement = new RectangleContainer(this); _undrawnElement = new RectangleContainer(this, _editorConfiguration);
break; break;
case DrawingModes.Ellipse: case DrawingModes.Ellipse:
_undrawnElement = new EllipseContainer(this); _undrawnElement = new EllipseContainer(this, _editorConfiguration);
break; break;
case DrawingModes.Text: case DrawingModes.Text:
_undrawnElement = new TextContainer(this); _undrawnElement = new TextContainer(this, _editorConfiguration);
break; break;
case DrawingModes.SpeechBubble: case DrawingModes.SpeechBubble:
_undrawnElement = new SpeechbubbleContainer(this); _undrawnElement = new SpeechbubbleContainer(this, _editorConfiguration);
break; break;
case DrawingModes.StepLabel: case DrawingModes.StepLabel:
_undrawnElement = new StepLabelContainer(this); _undrawnElement = new StepLabelContainer(this, _editorConfiguration);
break; break;
case DrawingModes.Line: case DrawingModes.Line:
_undrawnElement = new LineContainer(this); _undrawnElement = new LineContainer(this, _editorConfiguration);
break; break;
case DrawingModes.Arrow: case DrawingModes.Arrow:
_undrawnElement = new ArrowContainer(this); _undrawnElement = new ArrowContainer(this, _editorConfiguration);
break; break;
case DrawingModes.Highlight: case DrawingModes.Highlight:
_undrawnElement = new HighlightContainer(this); _undrawnElement = new HighlightContainer(this, _editorConfiguration);
break; break;
case DrawingModes.Obfuscate: case DrawingModes.Obfuscate:
_undrawnElement = new ObfuscateContainer(this); _undrawnElement = new ObfuscateContainer(this, _editorConfiguration);
break; break;
case DrawingModes.Crop: case DrawingModes.Crop:
_cropContainer = new CropContainer(this); _cropContainer = new CropContainer(this, _editorConfiguration);
_undrawnElement = _cropContainer; _undrawnElement = _cropContainer;
break; break;
case DrawingModes.Bitmap: case DrawingModes.Bitmap:
_undrawnElement = new BitmapContainer(this); _undrawnElement = new BitmapContainer(this, _editorConfiguration);
break; break;
case DrawingModes.Path: case DrawingModes.Path:
_undrawnElement = new FreehandContainer(this); _undrawnElement = new FreehandContainer(this, _editorConfiguration);
break; break;
case DrawingModes.None: case DrawingModes.None:
_undrawnElement = null; _undrawnElement = null;
@ -1190,7 +1216,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
NativeRect cropRectangle; NativeRect cropRectangle;
using (var tmpImage = GetBitmapForExport()) using (var tmpImage = GetBitmapForExport())
{ {
cropRectangle = tmpImage.FindAutoCropRectangle(conf.AutoCropDifference); cropRectangle = tmpImage.FindAutoCropRectangle(_coreConfiguration.AutoCropDifference);
} }
if (!IsCropPossible(ref cropRectangle)) if (!IsCropPossible(ref cropRectangle))
{ {
@ -1880,7 +1906,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
public IBitmapContainer AddImageContainer(Bitmap bitmap, int x, int y) public IBitmapContainer AddImageContainer(Bitmap bitmap, int x, int y)
{ {
var bitmapContainer = new BitmapContainer(this) var bitmapContainer = new BitmapContainer(this, _editorConfiguration)
{ {
Bitmap = bitmap, Bitmap = bitmap,
Left = x, Left = x,
@ -1892,7 +1918,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
public IBitmapContainer AddImageContainer(string filename, int x, int y) public IBitmapContainer AddImageContainer(string filename, int x, int y)
{ {
var bitmapContainer = new BitmapContainer(this); var bitmapContainer = new BitmapContainer(this, _editorConfiguration);
bitmapContainer.Load(filename); bitmapContainer.Load(filename);
bitmapContainer.Left = x; bitmapContainer.Left = x;
bitmapContainer.Top = y; bitmapContainer.Top = y;
@ -1902,7 +1928,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
public IIconContainer AddIconContainer(Icon icon, int x, int y) public IIconContainer AddIconContainer(Icon icon, int x, int y)
{ {
var iconContainer = new IconContainer(this) var iconContainer = new IconContainer(this, _editorConfiguration)
{ {
Icon = icon, Icon = icon,
Left = x, Left = x,
@ -1914,7 +1940,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
public IIconContainer AddIconContainer(string filename, int x, int y) public IIconContainer AddIconContainer(string filename, int x, int y)
{ {
var iconContainer = new IconContainer(this); var iconContainer = new IconContainer(this, _editorConfiguration);
iconContainer.Load(filename); iconContainer.Load(filename);
iconContainer.Left = x; iconContainer.Left = x;
iconContainer.Top = y; iconContainer.Top = y;
@ -1924,7 +1950,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
public ICursorContainer AddCursorContainer(Cursor cursor, int x, int y) public ICursorContainer AddCursorContainer(Cursor cursor, int x, int y)
{ {
var cursorContainer = new CursorContainer(this) var cursorContainer = new CursorContainer(this, _editorConfiguration)
{ {
Cursor = cursor, Cursor = cursor,
Left = x, Left = x,
@ -1936,7 +1962,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
public ICursorContainer AddCursorContainer(string filename, int x, int y) public ICursorContainer AddCursorContainer(string filename, int x, int y)
{ {
var cursorContainer = new CursorContainer(this); var cursorContainer = new CursorContainer(this, _editorConfiguration);
cursorContainer.Load(filename); cursorContainer.Load(filename);
cursorContainer.Left = x; cursorContainer.Left = x;
cursorContainer.Top = y; cursorContainer.Top = y;
@ -1947,7 +1973,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
public ITextContainer AddTextContainer(string text, HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment, FontFamily family, float size, public ITextContainer AddTextContainer(string text, HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment, FontFamily family, float size,
bool italic, bool bold, bool shadow, int borderSize, Color color, Color fillColor) bool italic, bool bold, bool shadow, int borderSize, Color color, Color fillColor)
{ {
var textContainer = new TextContainer(this) {Text = text}; var textContainer = new TextContainer(this, _editorConfiguration) {Text = text};
textContainer.SetFieldValue(FieldTypes.FONT_FAMILY, family.Name); textContainer.SetFieldValue(FieldTypes.FONT_FAMILY, family.Name);
textContainer.SetFieldValue(FieldTypes.FONT_BOLD, bold); textContainer.SetFieldValue(FieldTypes.FONT_BOLD, bold);
textContainer.SetFieldValue(FieldTypes.FONT_ITALIC, italic); textContainer.SetFieldValue(FieldTypes.FONT_ITALIC, italic);

View file

@ -90,7 +90,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing
} }
} }
public TextContainer(Surface parent) : base(parent) public TextContainer(Surface parent, IEditorConfiguration editorConfiguration) : base(parent, editorConfiguration)
{ {
Init(); Init();
} }

View file

@ -106,7 +106,7 @@ namespace Greenshot.Addon.OCR
/// <param name="surface">Has the Image and the capture details</param> /// <param name="surface">Has the Image and the capture details</param>
public string DoOcr(ISurface surface) public string DoOcr(ISurface surface)
{ {
var outputSettings = new SurfaceOutputSettings(OutputFormats.bmp, 0, true) var outputSettings = new SurfaceOutputSettings(CoreConfiguration, OutputFormats.bmp, 0, true)
{ {
ReduceColors = true, ReduceColors = true,
SaveBackgroundOnly = true SaveBackgroundOnly = true

View file

@ -118,7 +118,7 @@ namespace Greenshot.Addon.Office.Destinations
var imageFile = captureDetails.Filename; var imageFile = captureDetails.Filename;
if (imageFile == null || surface.Modified || !Regex.IsMatch(imageFile, @".*(\.png|\.gif|\.jpg|\.jpeg|\.tiff|\.bmp)$")) if (imageFile == null || surface.Modified || !Regex.IsMatch(imageFile, @".*(\.png|\.gif|\.jpg|\.jpeg|\.tiff|\.bmp)$"))
{ {
imageFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings().PreventGreenshotFormat()); imageFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings(CoreConfiguration).PreventGreenshotFormat());
createdFile = true; createdFile = true;
} }
if (_workbookName != null) if (_workbookName != null)

View file

@ -47,6 +47,7 @@ namespace Greenshot.Addon.Office.Destinations
[Destination("OneNote", DestinationOrder.OneNote)] [Destination("OneNote", DestinationOrder.OneNote)]
public class OneNoteDestination : AbstractDestination public class OneNoteDestination : AbstractDestination
{ {
private readonly OneNoteExporter _oneNoteExporter;
private readonly ExportNotification _exportNotification; private readonly ExportNotification _exportNotification;
private const int IconApplication = 0; private const int IconApplication = 0;
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
@ -60,11 +61,13 @@ namespace Greenshot.Addon.Office.Destinations
/// <param name="greenshotLanguage">IGreenshotLanguage</param> /// <param name="greenshotLanguage">IGreenshotLanguage</param>
/// <param name="exportNotification">ExportNotification</param> /// <param name="exportNotification">ExportNotification</param>
public OneNoteDestination( public OneNoteDestination(
OneNoteExporter oneNoteExporter,
ICoreConfiguration coreConfiguration, ICoreConfiguration coreConfiguration,
IGreenshotLanguage greenshotLanguage, IGreenshotLanguage greenshotLanguage,
ExportNotification exportNotification ExportNotification exportNotification
) : base(coreConfiguration, greenshotLanguage) ) : base(coreConfiguration, greenshotLanguage)
{ {
this._oneNoteExporter = oneNoteExporter;
_exportNotification = exportNotification; _exportNotification = exportNotification;
_exePath = PluginUtils.GetExePath("ONENOTE.EXE"); _exePath = PluginUtils.GetExePath("ONENOTE.EXE");
if (_exePath != null && !File.Exists(_exePath)) if (_exePath != null && !File.Exists(_exePath))
@ -80,11 +83,12 @@ namespace Greenshot.Addon.Office.Destinations
/// <param name="coreConfiguration">ICoreConfiguration</param> /// <param name="coreConfiguration">ICoreConfiguration</param>
/// <param name="greenshotLanguage">IGreenshotLanguage</param> /// <param name="greenshotLanguage">IGreenshotLanguage</param>
/// <param name="exportNotification">ExportNotification</param> /// <param name="exportNotification">ExportNotification</param>
protected OneNoteDestination(OneNotePage page, protected OneNoteDestination(OneNoteExporter oneNoteExporter,
OneNotePage page,
ICoreConfiguration coreConfiguration, ICoreConfiguration coreConfiguration,
IGreenshotLanguage greenshotLanguage, IGreenshotLanguage greenshotLanguage,
ExportNotification exportNotification ExportNotification exportNotification
) : this(coreConfiguration, greenshotLanguage, exportNotification) ) : this(oneNoteExporter, coreConfiguration, greenshotLanguage, exportNotification)
{ {
_page = page; _page = page;
} }
@ -119,7 +123,7 @@ namespace Greenshot.Addon.Office.Destinations
{ {
try try
{ {
return OneNoteExporter.GetPages().Where(currentPage => currentPage.IsCurrentlyViewed).Select(currentPage => new OneNoteDestination(currentPage, CoreConfiguration, GreenshotLanguage, _exportNotification)); return _oneNoteExporter.GetPages().Where(currentPage => currentPage.IsCurrentlyViewed).Select(currentPage => new OneNoteDestination(_oneNoteExporter, currentPage, CoreConfiguration, GreenshotLanguage, _exportNotification));
} }
catch (COMException cEx) catch (COMException cEx)
{ {
@ -145,7 +149,7 @@ namespace Greenshot.Addon.Office.Destinations
{ {
try try
{ {
exportInformation.ExportMade = OneNoteExporter.ExportToNewPage(surface); exportInformation.ExportMade = _oneNoteExporter.ExportToNewPage(surface);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -157,7 +161,7 @@ namespace Greenshot.Addon.Office.Destinations
{ {
try try
{ {
exportInformation.ExportMade = OneNoteExporter.ExportToPage(surface, _page); exportInformation.ExportMade = _oneNoteExporter.ExportToPage(surface, _page);
} }
catch (Exception ex) catch (Exception ex)
{ {

View file

@ -172,7 +172,7 @@ namespace Greenshot.Addon.Office.Destinations
var tmpFile = captureDetails.Filename; var tmpFile = captureDetails.Filename;
if (tmpFile == null || surface.Modified || !Regex.IsMatch(tmpFile, @".*(\.png|\.gif|\.jpg|\.jpeg|\.tiff|\.bmp)$")) if (tmpFile == null || surface.Modified || !Regex.IsMatch(tmpFile, @".*(\.png|\.gif|\.jpg|\.jpeg|\.tiff|\.bmp)$"))
{ {
tmpFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings().PreventGreenshotFormat()); tmpFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings(CoreConfiguration).PreventGreenshotFormat());
} }
else else
{ {

View file

@ -141,7 +141,7 @@ namespace Greenshot.Addon.Office.Destinations
var imageSize = Size.Empty; var imageSize = Size.Empty;
if (tmpFile == null || surface.Modified || !Regex.IsMatch(tmpFile, @".*(\.png|\.gif|\.jpg|\.jpeg|\.tiff|\.bmp)$")) if (tmpFile == null || surface.Modified || !Regex.IsMatch(tmpFile, @".*(\.png|\.gif|\.jpg|\.jpeg|\.tiff|\.bmp)$"))
{ {
tmpFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings().PreventGreenshotFormat()); tmpFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings(CoreConfiguration).PreventGreenshotFormat());
imageSize = surface.Screenshot.Size; imageSize = surface.Screenshot.Size;
} }
if (_presentationName != null) if (_presentationName != null)

View file

@ -126,7 +126,7 @@ namespace Greenshot.Addon.Office.Destinations
var tmpFile = captureDetails.Filename; var tmpFile = captureDetails.Filename;
if (tmpFile == null || surface.Modified || !Regex.IsMatch(tmpFile, @".*(\.png|\.gif|\.jpg|\.jpeg|\.tiff|\.bmp)$")) if (tmpFile == null || surface.Modified || !Regex.IsMatch(tmpFile, @".*(\.png|\.gif|\.jpg|\.jpeg|\.tiff|\.bmp)$"))
{ {
tmpFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings().PreventGreenshotFormat()); tmpFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings(CoreConfiguration).PreventGreenshotFormat());
} }
if (_documentCaption != null) if (_documentCaption != null)
{ {

View file

@ -29,6 +29,7 @@ using Dapplo.Config.Language;
using Greenshot.Addon.Office.Configuration; using Greenshot.Addon.Office.Configuration;
using Greenshot.Addon.Office.Configuration.Impl; using Greenshot.Addon.Office.Configuration.Impl;
using Greenshot.Addon.Office.Destinations; using Greenshot.Addon.Office.Destinations;
using Greenshot.Addon.Office.OfficeExport;
using Greenshot.Addon.Office.ViewModels; using Greenshot.Addon.Office.ViewModels;
using Greenshot.Addons.Components; using Greenshot.Addons.Components;
using Greenshot.Addons.Core; using Greenshot.Addons.Core;
@ -80,6 +81,11 @@ namespace Greenshot.Addon.Office
.RegisterType<OneNoteDestination>() .RegisterType<OneNoteDestination>()
.As<IDestination>() .As<IDestination>()
.SingleInstance(); .SingleInstance();
builder
.RegisterType<OneNoteExporter>()
.AsSelf()
.SingleInstance();
} }
if (PluginUtils.GetExePath("OUTLOOK.EXE") != null) if (PluginUtils.GetExePath("OUTLOOK.EXE") != null)

View file

@ -45,19 +45,25 @@ namespace Greenshot.Addon.Office.OfficeExport
/// OneNote exporter /// OneNote exporter
/// More details about OneNote: http://msdn.microsoft.com/en-us/magazine/ff796230.aspx /// More details about OneNote: http://msdn.microsoft.com/en-us/magazine/ff796230.aspx
/// </summary> /// </summary>
public static class OneNoteExporter public class OneNoteExporter
{ {
private const string XmlImageContent = "<one:Image format=\"png\"><one:Size width=\"{1}.0\" height=\"{2}.0\" isSetByUser=\"true\" /><one:Data>{0}</one:Data></one:Image>"; private const string XmlImageContent = "<one:Image format=\"png\"><one:Size width=\"{1}.0\" height=\"{2}.0\" isSetByUser=\"true\" /><one:Data>{0}</one:Data></one:Image>";
private const string XmlOutline = "<?xml version=\"1.0\"?><one:Page xmlns:one=\"{2}\" ID=\"{1}\"><one:Title><one:OE><one:T><![CDATA[{3}]]></one:T></one:OE></one:Title>{0}</one:Page>"; private const string XmlOutline = "<?xml version=\"1.0\"?><one:Page xmlns:one=\"{2}\" ID=\"{1}\"><one:Title><one:OE><one:T><![CDATA[{3}]]></one:T></one:OE></one:Title>{0}</one:Page>";
private const string OnenoteNamespace2010 = "http://schemas.microsoft.com/office/onenote/2010/onenote"; private const string OnenoteNamespace2010 = "http://schemas.microsoft.com/office/onenote/2010/onenote";
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
private readonly ICoreConfiguration _coreConfiguration;
public OneNoteExporter(ICoreConfiguration coreConfiguration)
{
_coreConfiguration = coreConfiguration;
}
/// <summary> /// <summary>
/// Create a new page in the "unfiled notes section", with the title of the capture, and export the capture there. /// Create a new page in the "unfiled notes section", with the title of the capture, and export the capture there.
/// </summary> /// </summary>
/// <param name="surfaceToUpload">ISurface</param> /// <param name="surfaceToUpload">ISurface</param>
/// <returns>bool true if export worked</returns> /// <returns>bool true if export worked</returns>
public static bool ExportToNewPage(ISurface surfaceToUpload) public bool ExportToNewPage(ISurface surfaceToUpload)
{ {
using (var oneNoteApplication = GetOrCreateOneNoteApplication()) using (var oneNoteApplication = GetOrCreateOneNoteApplication())
{ {
@ -83,7 +89,7 @@ namespace Greenshot.Addon.Office.OfficeExport
/// <param name="surfaceToUpload">ISurface</param> /// <param name="surfaceToUpload">ISurface</param>
/// <param name="page">OneNotePage</param> /// <param name="page">OneNotePage</param>
/// <returns>bool true if everything worked</returns> /// <returns>bool true if everything worked</returns>
public static bool ExportToPage(ISurface surfaceToUpload, OneNotePage page) public bool ExportToPage(ISurface surfaceToUpload, OneNotePage page)
{ {
using (var oneNoteApplication = GetOrCreateOneNoteApplication()) using (var oneNoteApplication = GetOrCreateOneNoteApplication())
{ {
@ -98,7 +104,7 @@ namespace Greenshot.Addon.Office.OfficeExport
/// <param name="surfaceToUpload">ISurface</param> /// <param name="surfaceToUpload">ISurface</param>
/// <param name="page">OneNotePage</param> /// <param name="page">OneNotePage</param>
/// <returns>bool true if everything worked</returns> /// <returns>bool true if everything worked</returns>
private static bool ExportToPage(IDisposableCom<Application> oneNoteApplication, ISurface surfaceToUpload, OneNotePage page) private bool ExportToPage(IDisposableCom<Application> oneNoteApplication, ISurface surfaceToUpload, OneNotePage page)
{ {
if (oneNoteApplication == null) if (oneNoteApplication == null)
{ {
@ -107,7 +113,7 @@ namespace Greenshot.Addon.Office.OfficeExport
using (var pngStream = new MemoryStream()) using (var pngStream = new MemoryStream())
{ {
var pngOutputSettings = new SurfaceOutputSettings(OutputFormats.png, 100, false); var pngOutputSettings = new SurfaceOutputSettings(_coreConfiguration, OutputFormats.png, 100, false);
ImageOutput.SaveToStream(surfaceToUpload, pngStream, pngOutputSettings); ImageOutput.SaveToStream(surfaceToUpload, pngStream, pngOutputSettings);
var base64String = Convert.ToBase64String(pngStream.GetBuffer()); var base64String = Convert.ToBase64String(pngStream.GetBuffer());
var imageXmlStr = string.Format(XmlImageContent, base64String, surfaceToUpload.Screenshot.Width, surfaceToUpload.Screenshot.Height); var imageXmlStr = string.Format(XmlImageContent, base64String, surfaceToUpload.Screenshot.Width, surfaceToUpload.Screenshot.Height);
@ -130,7 +136,7 @@ namespace Greenshot.Addon.Office.OfficeExport
/// Call this to get the running Excel application, returns null if there isn't any. /// Call this to get the running Excel application, returns null if there isn't any.
/// </summary> /// </summary>
/// <returns>ComDisposable for Excel.Application or null</returns> /// <returns>ComDisposable for Excel.Application or null</returns>
private static IDisposableCom<Application> GetOneNoteApplication() private IDisposableCom<Application> GetOneNoteApplication()
{ {
IDisposableCom<Application> oneNoteApplication; IDisposableCom<Application> oneNoteApplication;
try try
@ -149,7 +155,7 @@ namespace Greenshot.Addon.Office.OfficeExport
/// Call this to get the running OneNote application, or create a new instance /// Call this to get the running OneNote application, or create a new instance
/// </summary> /// </summary>
/// <returns>ComDisposable for OneNote.Application</returns> /// <returns>ComDisposable for OneNote.Application</returns>
private static IDisposableCom<Application> GetOrCreateOneNoteApplication() private IDisposableCom<Application> GetOrCreateOneNoteApplication()
{ {
var oneNoteApplication = GetOneNoteApplication(); var oneNoteApplication = GetOneNoteApplication();
if (oneNoteApplication == null) if (oneNoteApplication == null)
@ -163,7 +169,7 @@ namespace Greenshot.Addon.Office.OfficeExport
/// Get the captions of all the open word documents /// Get the captions of all the open word documents
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static IList<OneNotePage> GetPages() public IList<OneNotePage> GetPages()
{ {
var pages = new List<OneNotePage>(); var pages = new List<OneNotePage>();
try try
@ -276,7 +282,7 @@ namespace Greenshot.Addon.Office.OfficeExport
/// <param name="oneNoteApplication"></param> /// <param name="oneNoteApplication"></param>
/// <param name="specialLocation">SpecialLocation</param> /// <param name="specialLocation">SpecialLocation</param>
/// <returns>string with section ID</returns> /// <returns>string with section ID</returns>
private static string GetSectionId(IDisposableCom<Application> oneNoteApplication, SpecialLocation specialLocation) private string GetSectionId(IDisposableCom<Application> oneNoteApplication, SpecialLocation specialLocation)
{ {
if (oneNoteApplication == null) if (oneNoteApplication == null)
{ {

View file

@ -21,6 +21,7 @@
using Autofac; using Autofac;
using Dapplo.Addons; using Dapplo.Addons;
using Greenshot.Addons.Interfaces;
using Dapplo.Windows.Common; using Dapplo.Windows.Common;
using Greenshot.Addons.Components; using Greenshot.Addons.Components;
@ -37,6 +38,14 @@ namespace Greenshot.Addon.Win10
.RegisterType<Win10OcrDestination>() .RegisterType<Win10OcrDestination>()
.As<IDestination>() .As<IDestination>()
.SingleInstance(); .SingleInstance();
#if !NETCOREAPP3_0
builder
.RegisterType<Win10FormEnhancer>()
.As<IFormEnhancer>()
.SingleInstance();
#endif
builder builder
.RegisterType<Win10ShareDestination>() .RegisterType<Win10ShareDestination>()
.As<IDestination>() .As<IDestination>()

View file

@ -0,0 +1,85 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 1 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#endregion
#if !NETCOREAPP3_0
using System;
using System.Windows.Forms;
using Greenshot.Addons.Interfaces;
using Microsoft.Toolkit.Forms.UI.XamlHost;
namespace Greenshot.Addon.Win10
{
public class Win10FormEnhancer : IFormEnhancer
{
private WindowsXamlHost inkCanvasHost;
private WindowsXamlHost inkToolbarHost;
private Windows.UI.Xaml.Controls.InkCanvas inkCanvas;
private Windows.UI.Xaml.Controls.InkToolbar inkToolbar;
public void InitializeComponent(Form target)
{
// InkCanvas
inkCanvasHost = new WindowsXamlHost();
inkCanvasHost.InitialTypeName = "Windows.UI.Xaml.Controls.InkCanvas";
inkCanvasHost.ChildChanged += InkCanvas_ChildChanged;
// InkToolbar
inkToolbarHost = new WindowsXamlHost();
inkToolbarHost.InitialTypeName = "Windows.UI.Xaml.Controls.InkToolbar";
inkToolbarHost.ChildChanged += InkToolbar_ChildChanged;
// Layout
inkToolbarHost.Top = 0;
inkToolbarHost.Left = 0;
inkToolbarHost.Height = 50;
inkToolbarHost.Dock = DockStyle.Top;
inkCanvasHost.Dock = DockStyle.Fill;
// Add to Window
target.Controls.Add(inkToolbarHost);
target.Controls.Add(inkCanvasHost);
}
private void InkToolbar_ChildChanged(object sender, EventArgs e)
{
inkToolbar = ((WindowsXamlHost)sender).Child as Windows.UI.Xaml.Controls.InkToolbar;
InitializeUwpControls();
}
private void InkCanvas_ChildChanged(object sender, EventArgs e)
{
inkCanvas = ((WindowsXamlHost)sender).Child as Windows.UI.Xaml.Controls.InkCanvas;
InitializeUwpControls();
}
private void InitializeUwpControls()
{
if (inkToolbar == null || inkCanvas == null)
{
return;
}
inkToolbar.TargetInkCanvas = inkCanvas;
}
}
}
#endif

View file

@ -84,7 +84,7 @@ namespace Greenshot.Addon.Win10
var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages(); var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
using (var imageStream = new MemoryStream()) using (var imageStream = new MemoryStream())
{ {
ImageOutput.SaveToStream(surface, imageStream, new SurfaceOutputSettings()); ImageOutput.SaveToStream(surface, imageStream, new SurfaceOutputSettings(CoreConfiguration));
imageStream.Position = 0; imageStream.Position = 0;
var decoder = await BitmapDecoder.CreateAsync(imageStream.AsRandomAccessStream()); var decoder = await BitmapDecoder.CreateAsync(imageStream.AsRandomAccessStream());

View file

@ -159,7 +159,7 @@ namespace Greenshot.Addon.Win10
using (var logoStream = new MemoryRandomAccessStream()) using (var logoStream = new MemoryRandomAccessStream())
using (var thumbnailStream = new MemoryRandomAccessStream()) using (var thumbnailStream = new MemoryRandomAccessStream())
{ {
var outputSettings = new SurfaceOutputSettings(); var outputSettings = new SurfaceOutputSettings(CoreConfiguration);
outputSettings.PreventGreenshotFormat(); outputSettings.PreventGreenshotFormat();
// Create capture for export // Create capture for export

View file

@ -26,6 +26,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Windows; using System.Windows;
using Dapplo.Config.Ini; using Dapplo.Config.Ini;
using Dapplo.Log;
using Dapplo.Windows.Common.Structs; using Dapplo.Windows.Common.Structs;
using Dapplo.Windows.User32.Structs; using Dapplo.Windows.User32.Structs;
using Greenshot.Addons.Core; using Greenshot.Addons.Core;

View file

@ -648,7 +648,7 @@ EndSelection:<<<<<<<4
var disposeImage = false; var disposeImage = false;
try try
{ {
var outputSettings = new SurfaceOutputSettings(OutputFormats.png, 100, false); var outputSettings = new SurfaceOutputSettings(CoreConfig, OutputFormats.png, 100, false);
// Create the image which is going to be saved so we don't create it multiple times // Create the image which is going to be saved so we don't create it multiple times
disposeImage = ImageOutput.CreateBitmapFromSurface(surface, outputSettings, out bitmapToSave); disposeImage = ImageOutput.CreateBitmapFromSurface(surface, outputSettings, out bitmapToSave);
try try
@ -658,7 +658,7 @@ EndSelection:<<<<<<<4
{ {
pngStream = new MemoryStream(); pngStream = new MemoryStream();
// PNG works for e.g. Powerpoint // PNG works for e.g. Powerpoint
var pngOutputSettings = new SurfaceOutputSettings(OutputFormats.png, 100, false); var pngOutputSettings = new SurfaceOutputSettings(CoreConfig, OutputFormats.png, 100, false);
ImageOutput.SaveToStream(bitmapToSave, null, pngStream, pngOutputSettings); ImageOutput.SaveToStream(bitmapToSave, null, pngStream, pngOutputSettings);
pngStream.Seek(0, SeekOrigin.Begin); pngStream.Seek(0, SeekOrigin.Begin);
// Set the PNG stream // Set the PNG stream
@ -677,7 +677,7 @@ EndSelection:<<<<<<<4
using (var tmpBmpStream = new MemoryStream()) using (var tmpBmpStream = new MemoryStream())
{ {
// Save image as BMP // Save image as BMP
var bmpOutputSettings = new SurfaceOutputSettings(OutputFormats.bmp, 100, false); var bmpOutputSettings = new SurfaceOutputSettings(CoreConfig, OutputFormats.bmp, 100, false);
ImageOutput.SaveToStream(bitmapToSave, null, tmpBmpStream, bmpOutputSettings); ImageOutput.SaveToStream(bitmapToSave, null, tmpBmpStream, bmpOutputSettings);
dibStream = new MemoryStream(); dibStream = new MemoryStream();
@ -736,7 +736,7 @@ EndSelection:<<<<<<<4
// Set the HTML // Set the HTML
if (CoreConfig.ClipboardFormats.Contains(ClipboardFormats.HTML)) if (CoreConfig.ClipboardFormats.Contains(ClipboardFormats.HTML))
{ {
var tmpFile = ImageOutput.SaveToTmpFile(surface, new SurfaceOutputSettings(OutputFormats.png, 100, false), null); var tmpFile = ImageOutput.SaveToTmpFile(surface, new SurfaceOutputSettings(CoreConfig, OutputFormats.png, 100, false), null);
var html = GetHtmlString(surface, tmpFile); var html = GetHtmlString(surface, tmpFile);
dataObject.SetText(html, TextDataFormat.Html); dataObject.SetText(html, TextDataFormat.Html);
} }
@ -745,7 +745,7 @@ EndSelection:<<<<<<<4
string html; string html;
using (var tmpPngStream = new MemoryStream()) using (var tmpPngStream = new MemoryStream())
{ {
var pngOutputSettings = new SurfaceOutputSettings(OutputFormats.png, 100, false) var pngOutputSettings = new SurfaceOutputSettings(CoreConfig, OutputFormats.png, 100, false)
{ {
// Do not allow to reduce the colors, some applications dislike 256 color images // Do not allow to reduce the colors, some applications dislike 256 color images
// reported with bug #3594681 // reported with bug #3594681

View file

@ -28,6 +28,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using Dapplo.Log;
using Greenshot.Addons.Core.Enums; using Greenshot.Addons.Core.Enums;
#endregion #endregion
@ -39,6 +40,8 @@ namespace Greenshot.Addons.Core
/// </summary> /// </summary>
public static class CoreConfigurationExtensions public static class CoreConfigurationExtensions
{ {
private static readonly LogSource Log = new LogSource();
/// <summary> /// <summary>
/// Validate the values in the ICoreConfiguration, correct them where needed /// Validate the values in the ICoreConfiguration, correct them where needed
/// </summary> /// </summary>
@ -194,6 +197,30 @@ namespace Greenshot.Addons.Core
coreConfiguration.WebRequestReadWriteTimeout = 100; coreConfiguration.WebRequestReadWriteTimeout = 100;
} }
// TitleFix processor
var corruptKeys = new List<string>();
foreach (var key in coreConfiguration.ActiveTitleFixes)
{
if (coreConfiguration.TitleFixMatcher.ContainsKey(key))
{
continue;
}
Log.Warn().WriteLine("Key {0} not found, configuration is broken! Disabling this key!", key);
corruptKeys.Add(key);
}
// Fix configuration if needed
if (corruptKeys.Count <= 0)
{
return;
}
foreach (var corruptKey in corruptKeys)
{
// Removing any reference to the key
coreConfiguration.ActiveTitleFixes.Remove(corruptKey);
coreConfiguration.TitleFixMatcher.Remove(corruptKey);
coreConfiguration.TitleFixReplacer.Remove(corruptKey);
}
coreConfiguration.ValidateAndCorrect(); coreConfiguration.ValidateAndCorrect();
} }
} }

View file

@ -136,7 +136,7 @@ namespace Greenshot.Addons.Core
try try
{ {
var fileNameWithExtension = saveImageFileDialog.FileNameWithExtension; var fileNameWithExtension = saveImageFileDialog.FileNameWithExtension;
var outputSettings = new SurfaceOutputSettings(FormatForFilename(fileNameWithExtension)); var outputSettings = new SurfaceOutputSettings(CoreConfig, FormatForFilename(fileNameWithExtension));
if (CoreConfig.OutputFilePromptQuality) if (CoreConfig.OutputFilePromptQuality)
{ {
// TODO: Resolve, was static reference // TODO: Resolve, was static reference

View file

@ -1,99 +0,0 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 1 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#endregion
#region Usings
using System;
using System.Collections.Generic;
using System.Threading;
using Dapplo.Log;
using Greenshot.Addons.Interfaces;
#endregion
namespace Greenshot.Addons.Core
{
/// <summary>
/// Description of InterfaceUtils.
/// </summary>
public static class InterfaceUtils
{
private static readonly LogSource Log = new LogSource();
public static List<Type> GetSubclassesOf(Type type, bool excludeSystemTypes)
{
var list = new List<Type>();
foreach (var currentAssembly in Thread.GetDomain().GetAssemblies())
{
try
{
var types = currentAssembly.GetTypes();
if (!excludeSystemTypes || excludeSystemTypes && !currentAssembly.FullName.StartsWith("System."))
{
foreach (var currentType in types)
{
if (type.IsInterface)
{
if (currentType.GetInterface(type.FullName) != null)
{
list.Add(currentType);
}
}
else if (currentType.IsSubclassOf(type))
{
list.Add(currentType);
}
}
}
}
catch (Exception ex)
{
Log.Warn().WriteLine("Problem getting subclasses of type: {0}, message: {1}", type.FullName, ex.Message);
}
}
return list;
}
public static List<IProcessor> GetProcessors()
{
var processors = new List<IProcessor>();
foreach (var processorType in GetSubclassesOf(typeof(IProcessor), true))
{
if (!processorType.IsAbstract)
{
var processor = (IProcessor) Activator.CreateInstance(processorType);
if (processor.IsActive)
{
Log.Debug().WriteLine("Found processor {0} with designation {1}", processorType.Name, processor.Designation);
processors.Add(processor);
}
else
{
Log.Debug().WriteLine("Ignoring processor {0} with designation {1}", processorType.Name, processor.Designation);
}
}
}
return processors;
}
}
}

View file

@ -195,12 +195,12 @@ namespace Greenshot.Addons.Extensions
/// </summary> /// </summary>
/// <param name="clipboardAccessToken">IClipboardAccessToken</param> /// <param name="clipboardAccessToken">IClipboardAccessToken</param>
/// <param name="surface">ISurface</param> /// <param name="surface">ISurface</param>
public static void SetAsFormat17(this IClipboardAccessToken clipboardAccessToken, ISurface surface) public static void SetAsFormat17(this IClipboardAccessToken clipboardAccessToken, ISurface surface, ICoreConfiguration coreConfiguration)
{ {
// Create the stream for the clipboard // Create the stream for the clipboard
using (var dibV5Stream = new MemoryStream()) using (var dibV5Stream = new MemoryStream())
{ {
var outputSettings = new SurfaceOutputSettings(OutputFormats.bmp, 100, false); var outputSettings = new SurfaceOutputSettings(coreConfiguration, OutputFormats.bmp, 100, false);
bool dispose = ImageOutput.CreateBitmapFromSurface(surface, outputSettings, out var bitmapToSave); bool dispose = ImageOutput.CreateBitmapFromSurface(surface, outputSettings, out var bitmapToSave);
// Create the BITMAPINFOHEADER // Create the BITMAPINFOHEADER
var header = BitmapInfoHeader.Create(bitmapToSave.Width, bitmapToSave.Height, 32); var header = BitmapInfoHeader.Create(bitmapToSave.Width, bitmapToSave.Height, 32);
@ -269,11 +269,11 @@ namespace Greenshot.Addons.Extensions
/// </summary> /// </summary>
/// <param name="clipboardAccessToken">IClipboardAccessToken</param> /// <param name="clipboardAccessToken">IClipboardAccessToken</param>
/// <param name="surface">ISurface</param> /// <param name="surface">ISurface</param>
public static void SetAsDeviceIndependendBitmap(this IClipboardAccessToken clipboardAccessToken, ISurface surface) public static void SetAsDeviceIndependendBitmap(this IClipboardAccessToken clipboardAccessToken, ISurface surface, ICoreConfiguration coreConfiguration)
{ {
using (var bitmapStream = new MemoryStream()) using (var bitmapStream = new MemoryStream())
{ {
ImageOutput.SaveToStream(surface, bitmapStream, new SurfaceOutputSettings{Format = OutputFormats.bmp}); ImageOutput.SaveToStream(surface, bitmapStream, new SurfaceOutputSettings(coreConfiguration) {Format = OutputFormats.bmp});
bitmapStream.Seek(Marshal.SizeOf(typeof(BitmapFileHeader)), SeekOrigin.Begin); bitmapStream.Seek(Marshal.SizeOf(typeof(BitmapFileHeader)), SeekOrigin.Begin);
// Set the stream // Set the stream
clipboardAccessToken.SetAsStream(StandardClipboardFormats.DeviceIndependentBitmap, bitmapStream); clipboardAccessToken.SetAsStream(StandardClipboardFormats.DeviceIndependentBitmap, bitmapStream);

View file

@ -136,9 +136,9 @@ EndSelection:<<<<<<<4
/// </summary> /// </summary>
/// <param name="clipboardAccessToken">IClipboardAccessToken</param> /// <param name="clipboardAccessToken">IClipboardAccessToken</param>
/// <param name="surface">ISurface</param> /// <param name="surface">ISurface</param>
public static void SetAsHtml(this IClipboardAccessToken clipboardAccessToken, ISurface surface) public static void SetAsHtml(this IClipboardAccessToken clipboardAccessToken, ISurface surface, ICoreConfiguration coreConfiguration)
{ {
var pngOutputSettings = new SurfaceOutputSettings(OutputFormats.png, 100, false); var pngOutputSettings = new SurfaceOutputSettings(coreConfiguration, OutputFormats.png, 100, false);
// This file is automatically deleted when Greenshot exits. // This file is automatically deleted when Greenshot exits.
var filename = ImageOutput.SaveNamedTmpFile(surface, surface.CaptureDetails, pngOutputSettings); var filename = ImageOutput.SaveNamedTmpFile(surface, surface.CaptureDetails, pngOutputSettings);
// Set the PNG stream // Set the PNG stream
@ -152,11 +152,11 @@ EndSelection:<<<<<<<4
/// </summary> /// </summary>
/// <param name="clipboardAccessToken">IClipboardAccessToken</param> /// <param name="clipboardAccessToken">IClipboardAccessToken</param>
/// <param name="surface">ISurface</param> /// <param name="surface">ISurface</param>
public static void SetAsEmbeddedHtml(this IClipboardAccessToken clipboardAccessToken, ISurface surface) public static void SetAsEmbeddedHtml(this IClipboardAccessToken clipboardAccessToken, ISurface surface, ICoreConfiguration coreConfiguration)
{ {
using (var pngStream = new MemoryStream()) using (var pngStream = new MemoryStream())
{ {
var pngOutputSettings = new SurfaceOutputSettings(OutputFormats.png, 100, false); var pngOutputSettings = new SurfaceOutputSettings(coreConfiguration, OutputFormats.png, 100, false);
ImageOutput.SaveToStream(surface, pngStream, pngOutputSettings); ImageOutput.SaveToStream(surface, pngStream, pngOutputSettings);
pngStream.Seek(0, SeekOrigin.Begin); pngStream.Seek(0, SeekOrigin.Begin);
// Set the PNG stream // Set the PNG stream

View file

@ -0,0 +1,16 @@
using System.Windows.Forms;
namespace Greenshot.Addons.Interfaces
{
/// <summary>
/// This interface makes it possible to enhance forms by e.g. injecting components
/// </summary>
public interface IFormEnhancer
{
/// <summary>
/// This is called during the InitializeComponent of the form
/// </summary>
/// <param name="target">Form</param>
void InitializeComponent(Form target);
}
}

View file

@ -35,38 +35,32 @@ namespace Greenshot.Addons.Interfaces.Plugin
{ {
public class SurfaceOutputSettings public class SurfaceOutputSettings
{ {
// TODO: Solve, was static reference!
private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl();
private bool _disableReduceColors; private bool _disableReduceColors;
private bool _reduceColors; private bool _reduceColors;
public SurfaceOutputSettings() public SurfaceOutputSettings(IFileConfiguration fileConfiguration)
{ {
_disableReduceColors = false; _disableReduceColors = false;
Format = CoreConfig.OutputFileFormat; Format = fileConfiguration.OutputFileFormat;
JPGQuality = CoreConfig.OutputFileJpegQuality; JPGQuality = fileConfiguration.OutputFileJpegQuality;
ReduceColors = CoreConfig.OutputFileReduceColors; ReduceColors = fileConfiguration.OutputFileReduceColors;
} }
public SurfaceOutputSettings(OutputFormats format) : this() public SurfaceOutputSettings(IFileConfiguration fileConfiguration, OutputFormats format) : this(fileConfiguration)
{ {
Format = format; Format = format;
} }
public SurfaceOutputSettings(OutputFormats format, int quality) : this(format) public SurfaceOutputSettings(IFileConfiguration fileConfiguration, OutputFormats format, int quality) : this(fileConfiguration, format)
{ {
JPGQuality = quality; JPGQuality = quality;
} }
public SurfaceOutputSettings(OutputFormats format, int quality, bool reduceColors) : this(format, quality) public SurfaceOutputSettings(IFileConfiguration fileConfiguration, OutputFormats format, int quality, bool reduceColors) : this(fileConfiguration, format, quality)
{ {
ReduceColors = reduceColors; ReduceColors = reduceColors;
} }
public SurfaceOutputSettings(IFileConfiguration fileConfiguration) : this(fileConfiguration.OutputFileFormat, fileConfiguration.OutputFileJpegQuality, fileConfiguration.OutputFileReduceColors)
{
}
public OutputFormats Format { get; set; } public OutputFormats Format { get; set; }
public int JPGQuality { get; set; } public int JPGQuality { get; set; }

View file

@ -170,6 +170,7 @@ Global
{9801F62C-540F-4BFE-9211-6405DEDE563B}.Debug|x86.ActiveCfg = Debug|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Debug|x86.ActiveCfg = Debug|Any CPU
{9801F62C-540F-4BFE-9211-6405DEDE563B}.Debug|x86.Build.0 = Debug|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Debug|x86.Build.0 = Debug|Any CPU
{9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|Any CPU.ActiveCfg = Release|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|Any CPU.Build.0 = Release|Any CPU
{9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|x86.ActiveCfg = Release|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|x86.ActiveCfg = Release|Any CPU
{9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|x86.Build.0 = Release|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|x86.Build.0 = Release|Any CPU
{D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

View file

@ -26,6 +26,7 @@
#region Usings #region Usings
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Security.Principal; using System.Security.Principal;
@ -60,6 +61,7 @@ namespace Greenshot.Components
private readonly HotkeyService _hotkeyService; private readonly HotkeyService _hotkeyService;
private readonly DestinationHolder _destinationHolder; private readonly DestinationHolder _destinationHolder;
private ServiceHost _host; private ServiceHost _host;
private IEnumerable<IFormEnhancer> _formEnhancers;
public static string Identity public static string Identity
{ {
@ -75,8 +77,10 @@ namespace Greenshot.Components
ICoreConfiguration coreConfiguration, ICoreConfiguration coreConfiguration,
MainForm mainForm, MainForm mainForm,
HotkeyService hotkeyService, HotkeyService hotkeyService,
DestinationHolder destinationHolder) DestinationHolder destinationHolder,
IEnumerable<IFormEnhancer> formEnhancers = null)
{ {
_formEnhancers = formEnhancers;
_coreConfiguration = coreConfiguration; _coreConfiguration = coreConfiguration;
_mainForm = mainForm; _mainForm = mainForm;
_hotkeyService = hotkeyService; _hotkeyService = hotkeyService;
@ -137,7 +141,7 @@ namespace Greenshot.Components
Log.Debug().WriteLine("Open file requested: {0}", filename); Log.Debug().WriteLine("Open file requested: {0}", filename);
if (File.Exists(filename)) if (File.Exists(filename))
{ {
CaptureHelper.CaptureFile(filename); CaptureHelper.CaptureFile(_formEnhancers, filename);
} }
else else
{ {
@ -167,13 +171,13 @@ namespace Greenshot.Components
switch (captureMode.ToLower()) switch (captureMode.ToLower())
{ {
case "region": case "region":
CaptureHelper.CaptureRegion(false, destination); CaptureHelper.CaptureRegion(_formEnhancers, false, destination);
break; break;
case "window": case "window":
CaptureHelper.CaptureWindow(false, destination); CaptureHelper.CaptureWindow(_formEnhancers, false, destination);
break; break;
case "fullscreen": case "fullscreen":
CaptureHelper.CaptureFullscreen(false, ScreenCaptureMode.FullScreen, destination); CaptureHelper.CaptureFullscreen(_formEnhancers, false, ScreenCaptureMode.FullScreen, destination);
break; break;
default: default:
Log.Warn().WriteLine("Unknown capture option"); Log.Warn().WriteLine("Unknown capture option");

View file

@ -22,12 +22,14 @@
#endregion #endregion
using System; using System;
using System.Collections.Generic;
using System.Reactive.Linq; using System.Reactive.Linq;
using Caliburn.Micro; using Caliburn.Micro;
using Dapplo.Addons; using Dapplo.Addons;
using Dapplo.Log; using Dapplo.Log;
using Dapplo.Windows.Input.Keyboard; using Dapplo.Windows.Input.Keyboard;
using Greenshot.Addons.Core; using Greenshot.Addons.Core;
using Greenshot.Addons.Interfaces;
using Greenshot.Helpers; using Greenshot.Helpers;
namespace Greenshot.Components namespace Greenshot.Components
@ -40,11 +42,13 @@ namespace Greenshot.Components
{ {
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
private readonly ICoreConfiguration _coreConfiguration; private readonly ICoreConfiguration _coreConfiguration;
private readonly IEnumerable<IFormEnhancer> _formEnhancers;
private IDisposable _subscriptions; private IDisposable _subscriptions;
public HotkeyService(ICoreConfiguration coreConfiguration) public HotkeyService(ICoreConfiguration coreConfiguration, IEnumerable<IFormEnhancer> formEnhancers = null)
{ {
_coreConfiguration = coreConfiguration; _coreConfiguration = coreConfiguration;
_formEnhancers = formEnhancers;
} }
/// <summary> /// <summary>
@ -116,36 +120,36 @@ namespace Greenshot.Components
private void CaptureRegion(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureRegion(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureRegion(true)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureRegion(_formEnhancers, true));
} }
private void CaptureWindow(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureWindow(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
if (_coreConfiguration.CaptureWindowsInteractive) if (_coreConfiguration.CaptureWindowsInteractive)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureWindowInteractive(true)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureWindowInteractive(_formEnhancers, true));
} }
else else
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureWindow(true)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureWindow(_formEnhancers, true));
} }
} }
private void CaptureFullscreen(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureFullscreen(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureFullscreen(true, _coreConfiguration.ScreenCaptureMode)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureFullscreen(_formEnhancers, true, _coreConfiguration.ScreenCaptureMode));
} }
private void CaptureLast(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureLast(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureLastRegion(true)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureLastRegion(_formEnhancers, true));
} }
private void CaptureIe(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureIe(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
if (_coreConfiguration.IECapture) if (_coreConfiguration.IECapture)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureIe(true, null)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureIe(_formEnhancers, true, null));
} }
} }
} }

View file

@ -83,22 +83,22 @@ namespace Greenshot.Destinations
switch (clipboardFormat) switch (clipboardFormat)
{ {
case ClipboardFormats.DIB: case ClipboardFormats.DIB:
clipboardAccessToken.SetAsDeviceIndependendBitmap(surface); clipboardAccessToken.SetAsDeviceIndependendBitmap(surface, CoreConfiguration);
break; break;
case ClipboardFormats.DIBV5: case ClipboardFormats.DIBV5:
clipboardAccessToken.SetAsFormat17(surface); clipboardAccessToken.SetAsFormat17(surface, CoreConfiguration);
break; break;
case ClipboardFormats.PNG: case ClipboardFormats.PNG:
clipboardAccessToken.SetAsBitmap(surface, new SurfaceOutputSettings(OutputFormats.png)); clipboardAccessToken.SetAsBitmap(surface, new SurfaceOutputSettings(CoreConfiguration, OutputFormats.png));
break; break;
case ClipboardFormats.BITMAP: case ClipboardFormats.BITMAP:
clipboardAccessToken.SetAsBitmap(surface, new SurfaceOutputSettings(OutputFormats.bmp)); clipboardAccessToken.SetAsBitmap(surface, new SurfaceOutputSettings(CoreConfiguration, OutputFormats.bmp));
break; break;
case ClipboardFormats.HTML: case ClipboardFormats.HTML:
clipboardAccessToken.SetAsHtml(surface); clipboardAccessToken.SetAsHtml(surface, CoreConfiguration);
break; break;
case ClipboardFormats.HTMLDATAURL: case ClipboardFormats.HTMLDATAURL:
clipboardAccessToken.SetAsEmbeddedHtml(surface); clipboardAccessToken.SetAsEmbeddedHtml(surface, CoreConfiguration);
break; break;
} }
} }

View file

@ -70,7 +70,7 @@ namespace Greenshot.Destinations
bool overwrite; bool overwrite;
string fullPath; string fullPath;
// Get output settings from the configuration // Get output settings from the configuration
var outputSettings = new SurfaceOutputSettings(); var outputSettings = new SurfaceOutputSettings(CoreConfiguration);
if (captureDetails?.Filename != null) if (captureDetails?.Filename != null)
{ {

View file

@ -67,6 +67,15 @@ namespace Greenshot.Forms {
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.CaptureFormKeyDown); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.CaptureFormKeyDown);
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.CaptureFormKeyUp); this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.CaptureFormKeyUp);
this.Visible = false; this.Visible = false;
if (_formEnhancers != null)
{
foreach (var enhancer in _formEnhancers)
{
enhancer.InitializeComponent(this);
}
}
this.ResumeLayout(false); this.ResumeLayout(false);
} }
} }

View file

@ -64,6 +64,7 @@ namespace Greenshot.Forms
private readonly ICapture _capture; private readonly ICapture _capture;
private readonly bool _isZoomerTransparent; private readonly bool _isZoomerTransparent;
private readonly IList<IInteropWindow> _windows; private readonly IList<IInteropWindow> _windows;
private readonly IEnumerable<IFormEnhancer> _formEnhancers;
private NativeRect _captureRect = NativeRect.Empty; private NativeRect _captureRect = NativeRect.Empty;
private NativePoint _cursorPos; private NativePoint _cursorPos;
private FixMode _fixMode = FixMode.None; private FixMode _fixMode = FixMode.None;
@ -94,7 +95,7 @@ namespace Greenshot.Forms
/// <param name="coreConfiguration">ICoreConfiguration</param> /// <param name="coreConfiguration">ICoreConfiguration</param>
/// <param name="capture">ICapture</param> /// <param name="capture">ICapture</param>
/// <param name="windows">IList of IInteropWindow</param> /// <param name="windows">IList of IInteropWindow</param>
public CaptureForm(ICoreConfiguration coreConfiguration, ICapture capture, IList<IInteropWindow> windows) : base(coreConfiguration, null) public CaptureForm(ICoreConfiguration coreConfiguration, ICapture capture, IList<IInteropWindow> windows, IEnumerable<IFormEnhancer> formEnhancers) : base(coreConfiguration, null)
{ {
_isZoomerTransparent = _coreConfiguration.ZoomerOpacity < 1; _isZoomerTransparent = _coreConfiguration.ZoomerOpacity < 1;
ManualLanguageApply = true; ManualLanguageApply = true;
@ -105,6 +106,7 @@ namespace Greenshot.Forms
_capture = capture; _capture = capture;
_windows = windows; _windows = windows;
_formEnhancers = formEnhancers;
UsedCaptureMode = capture.CaptureDetails.CaptureMode; UsedCaptureMode = capture.CaptureDetails.CaptureMode;
// //

View file

@ -62,6 +62,7 @@ using Screen = System.Windows.Forms.Screen;
using Dapplo.Config.Ini; using Dapplo.Config.Ini;
using Dapplo.Windows.User32; using Dapplo.Windows.User32;
using Greenshot.Addons.Resources; using Greenshot.Addons.Resources;
using Greenshot.Addons.Interfaces;
#endregion #endregion
@ -83,6 +84,8 @@ namespace Greenshot.Forms
private readonly Timer _doubleClickTimer = new Timer(); private readonly Timer _doubleClickTimer = new Timer();
private readonly DestinationHolder _destinationHolder; private readonly DestinationHolder _destinationHolder;
private readonly IEnumerable<IFormEnhancer> _formEnhancers;
// Thumbnail preview // Thumbnail preview
private ThumbnailForm _thumbnailForm; private ThumbnailForm _thumbnailForm;
@ -94,7 +97,9 @@ namespace Greenshot.Forms
GreenshotResources greenshotResources, GreenshotResources greenshotResources,
Func<Owned<ConfigViewModel>> configViewModelFactory, Func<Owned<ConfigViewModel>> configViewModelFactory,
Func<Owned<AboutForm>> aboutFormFactory, Func<Owned<AboutForm>> aboutFormFactory,
DestinationHolder destinationHolder) : base(greenshotLanguage) DestinationHolder destinationHolder,
IEnumerable<IFormEnhancer> formEnhancers = null
) : base(greenshotLanguage)
{ {
_coreConfiguration = coreConfiguration; _coreConfiguration = coreConfiguration;
_windowManager = windowManager; _windowManager = windowManager;
@ -102,6 +107,7 @@ namespace Greenshot.Forms
_configViewModelFactory = configViewModelFactory; _configViewModelFactory = configViewModelFactory;
_aboutFormFactory = aboutFormFactory; _aboutFormFactory = aboutFormFactory;
_destinationHolder = destinationHolder; _destinationHolder = destinationHolder;
_formEnhancers = formEnhancers;
Instance = this; Instance = this;
} }
@ -281,7 +287,7 @@ namespace Greenshot.Forms
if (File.Exists(_coreConfiguration.OutputFileAsFullpath)) if (File.Exists(_coreConfiguration.OutputFileAsFullpath))
{ {
CaptureHelper.CaptureFile(_coreConfiguration.OutputFileAsFullpath, _destinationHolder.SortedActiveDestinations.Find("Editor")); CaptureHelper.CaptureFile(_formEnhancers, _coreConfiguration.OutputFileAsFullpath, _destinationHolder.SortedActiveDestinations.Find("Editor"));
} }
break; break;
case ClickActions.OPEN_SETTINGS: case ClickActions.OPEN_SETTINGS:
@ -453,7 +459,7 @@ namespace Greenshot.Forms
if (File.Exists(openFileDialog.FileName)) if (File.Exists(openFileDialog.FileName))
{ {
CaptureHelper.CaptureFile(openFileDialog.FileName); CaptureHelper.CaptureFile(_formEnhancers, openFileDialog.FileName);
} }
} }
@ -461,7 +467,7 @@ namespace Greenshot.Forms
{ {
if (_coreConfiguration.IECapture) if (_coreConfiguration.IECapture)
{ {
CaptureHelper.CaptureIe(true, null); CaptureHelper.CaptureIe(_formEnhancers, true, null);
} }
} }
@ -600,7 +606,7 @@ namespace Greenshot.Forms
var allScreensBounds = DisplayInfo.ScreenBounds; var allScreensBounds = DisplayInfo.ScreenBounds;
var captureScreenItem = new ToolStripMenuItem(_greenshotLanguage.ContextmenuCapturefullscreenAll); var captureScreenItem = new ToolStripMenuItem(_greenshotLanguage.ContextmenuCapturefullscreenAll);
captureScreenItem.Click += (o, args) => BeginInvoke((MethodInvoker) (() => CaptureHelper.CaptureFullscreen(false, ScreenCaptureMode.FullScreen))); captureScreenItem.Click += (o, args) => BeginInvoke((MethodInvoker) (() => CaptureHelper.CaptureFullscreen(_formEnhancers, false, ScreenCaptureMode.FullScreen)));
captureScreenMenuItem.DropDownItems.Add(captureScreenItem); captureScreenMenuItem.DropDownItems.Add(captureScreenItem);
foreach (var displayInfo in DisplayInfo.AllDisplayInfos) foreach (var displayInfo in DisplayInfo.AllDisplayInfos)
{ {
@ -623,7 +629,7 @@ namespace Greenshot.Forms
deviceAlignment += " " + _greenshotLanguage.ContextmenuCapturefullscreenRight; deviceAlignment += " " + _greenshotLanguage.ContextmenuCapturefullscreenRight;
} }
captureScreenItem = new ToolStripMenuItem(deviceAlignment); captureScreenItem = new ToolStripMenuItem(deviceAlignment);
captureScreenItem.Click += (o, args) => BeginInvoke((MethodInvoker) (() => CaptureHelper.CaptureRegion(false, screenToCapture.Bounds))); captureScreenItem.Click += (o, args) => BeginInvoke((MethodInvoker) (() => CaptureHelper.CaptureRegion(_formEnhancers, false, screenToCapture.Bounds)));
captureScreenMenuItem.DropDownItems.Add(captureScreenItem); captureScreenMenuItem.DropDownItems.Add(captureScreenItem);
} }
} }
@ -718,12 +724,12 @@ namespace Greenshot.Forms
private void CaptureAreaToolStripMenuItemClick(object sender, EventArgs e) private void CaptureAreaToolStripMenuItemClick(object sender, EventArgs e)
{ {
BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureRegion(false); }); BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureRegion(_formEnhancers, false); });
} }
private void CaptureClipboardToolStripMenuItemClick(object sender, EventArgs e) private void CaptureClipboardToolStripMenuItemClick(object sender, EventArgs e)
{ {
BeginInvoke(new System.Action(() => CaptureHelper.CaptureClipboard())); BeginInvoke(new System.Action(() => CaptureHelper.CaptureClipboard(_formEnhancers)));
} }
private void OpenFileToolStripMenuItemClick(object sender, EventArgs e) private void OpenFileToolStripMenuItemClick(object sender, EventArgs e)
@ -733,17 +739,17 @@ namespace Greenshot.Forms
private void CaptureFullScreenToolStripMenuItemClick(object sender, EventArgs e) private void CaptureFullScreenToolStripMenuItemClick(object sender, EventArgs e)
{ {
BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureFullscreen(false, _coreConfiguration.ScreenCaptureMode); }); BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureFullscreen(_formEnhancers, false, _coreConfiguration.ScreenCaptureMode); });
} }
private void Contextmenu_capturelastregionClick(object sender, EventArgs e) private void Contextmenu_capturelastregionClick(object sender, EventArgs e)
{ {
BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureLastRegion(false); }); BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureLastRegion(_formEnhancers, false); });
} }
private void Contextmenu_capturewindow_Click(object sender, EventArgs e) private void Contextmenu_capturewindow_Click(object sender, EventArgs e)
{ {
BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureWindowInteractive(false); }); BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureWindowInteractive(_formEnhancers, false); });
} }
private void Contextmenu_capturewindowfromlist_Click(object sender, EventArgs e) private void Contextmenu_capturewindowfromlist_Click(object sender, EventArgs e)
@ -754,7 +760,7 @@ namespace Greenshot.Forms
try try
{ {
var windowToCapture = (InteropWindow) clickedItem.Tag; var windowToCapture = (InteropWindow) clickedItem.Tag;
CaptureHelper.CaptureWindow(windowToCapture); CaptureHelper.CaptureWindow(_formEnhancers, windowToCapture);
} }
catch (Exception exception) catch (Exception exception)
{ {
@ -794,7 +800,7 @@ namespace Greenshot.Forms
} }
try try
{ {
CaptureHelper.CaptureIe(false, ieWindowToCapture); CaptureHelper.CaptureIe(_formEnhancers, false, ieWindowToCapture);
} }
catch (Exception exception) catch (Exception exception)
{ {
@ -912,7 +918,7 @@ namespace Greenshot.Forms
if (!_coreConfiguration.IsWriteProtected("Destinations")) if (!_coreConfiguration.IsWriteProtected("Destinations"))
{ {
// screenshot destination // screenshot destination
selectList = new ToolStripMenuSelectList("destinations", true) selectList = new ToolStripMenuSelectList(_coreConfiguration, "destinations", true)
{ {
Text = _greenshotLanguage.SettingsDestination Text = _greenshotLanguage.SettingsDestination
}; };
@ -929,7 +935,7 @@ namespace Greenshot.Forms
if (!_coreConfiguration.IsWriteProtected("WindowCaptureMode")) if (!_coreConfiguration.IsWriteProtected("WindowCaptureMode"))
{ {
// Capture Modes // Capture Modes
selectList = new ToolStripMenuSelectList("capturemodes", false) selectList = new ToolStripMenuSelectList(_coreConfiguration,"capturemodes", false)
{ {
Text = _greenshotLanguage.SettingsWindowCaptureMode Text = _greenshotLanguage.SettingsWindowCaptureMode
}; };
@ -951,7 +957,7 @@ namespace Greenshot.Forms
} }
// print options // print options
selectList = new ToolStripMenuSelectList("printoptions", true) selectList = new ToolStripMenuSelectList(_coreConfiguration, "printoptions", true)
{ {
Text = _greenshotLanguage.SettingsPrintoptions Text = _greenshotLanguage.SettingsPrintoptions
}; };
@ -979,7 +985,7 @@ namespace Greenshot.Forms
} }
// effects // effects
selectList = new ToolStripMenuSelectList("effects", true) selectList = new ToolStripMenuSelectList(_coreConfiguration, "effects", true)
{ {
Text = _greenshotLanguage.SettingsVisualization Text = _greenshotLanguage.SettingsVisualization
}; };

View file

@ -41,30 +41,28 @@ namespace Greenshot.Forms
/// </summary> /// </summary>
public sealed class ToolStripMenuSelectList : ToolStripMenuItem public sealed class ToolStripMenuSelectList : ToolStripMenuItem
{ {
// TODO: Solve, was static reference!
private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl();
private static Image _defaultImage; private static Image _defaultImage;
private readonly bool _multiCheckAllowed; private readonly bool _multiCheckAllowed;
private bool _updateInProgress; private bool _updateInProgress;
public ToolStripMenuSelectList(object identifier, bool allowMultiCheck) public ToolStripMenuSelectList(ICoreConfiguration coreConfig, object identifier, bool allowMultiCheck)
{ {
Identifier = identifier; Identifier = identifier;
CheckOnClick = false; CheckOnClick = false;
_multiCheckAllowed = allowMultiCheck; _multiCheckAllowed = allowMultiCheck;
if (_defaultImage == null || _defaultImage.Size != CoreConfig.IconSize) if (_defaultImage == null || _defaultImage.Size != coreConfig.IconSize)
{ {
_defaultImage?.Dispose(); _defaultImage?.Dispose();
_defaultImage = BitmapFactory.CreateEmpty(CoreConfig.IconSize.Width, CoreConfig.IconSize.Height, PixelFormat.Format32bppArgb, Color.Transparent); _defaultImage = BitmapFactory.CreateEmpty(coreConfig.IconSize.Width, coreConfig.IconSize.Height, PixelFormat.Format32bppArgb, Color.Transparent);
} }
Image = _defaultImage; Image = _defaultImage;
} }
public ToolStripMenuSelectList() : this(null, false) public ToolStripMenuSelectList(ICoreConfiguration coreConfig) : this(coreConfig, null, false)
{ {
} }
public ToolStripMenuSelectList(object identifier) : this(identifier, false) public ToolStripMenuSelectList(ICoreConfiguration coreConfig, object identifier) : this(coreConfig, identifier, false)
{ {
} }

View file

@ -32,11 +32,13 @@ using Dapplo.CaliburnMicro.Security;
using Dapplo.Config.Ini; using Dapplo.Config.Ini;
using Dapplo.Config.Language; using Dapplo.Config.Language;
using Greenshot.Addons.Components; using Greenshot.Addons.Components;
using Greenshot.Addons.Interfaces;
using Greenshot.Components; using Greenshot.Components;
using Greenshot.Configuration; using Greenshot.Configuration;
using Greenshot.Configuration.Impl; using Greenshot.Configuration.Impl;
using Greenshot.Forms; using Greenshot.Forms;
using Greenshot.Helpers; using Greenshot.Helpers;
using Greenshot.Processors;
using Greenshot.Ui.Configuration.ViewModels; using Greenshot.Ui.Configuration.ViewModels;
using Greenshot.Ui.Misc.ViewModels; using Greenshot.Ui.Misc.ViewModels;
using Greenshot.Ui.Notifications.ViewModels; using Greenshot.Ui.Notifications.ViewModels;
@ -134,6 +136,12 @@ namespace Greenshot
.AsSelf() .AsSelf()
.SingleInstance(); .SingleInstance();
// Processors
builder
.RegisterType<TitleFixProcessor>()
.As<IProcessor>()
.SingleInstance();
// Destinations // Destinations
builder builder
.RegisterAssemblyTypes(ThisAssembly) .RegisterAssemblyTypes(ThisAssembly)

View file

@ -66,6 +66,7 @@ namespace Greenshot.Helpers
private readonly bool _captureMouseCursor; private readonly bool _captureMouseCursor;
private ICapture _capture; private ICapture _capture;
private CaptureMode _captureMode; private CaptureMode _captureMode;
private readonly IEnumerable<IFormEnhancer> _formEnhancers;
private NativeRect _captureRect = NativeRect.Empty; private NativeRect _captureRect = NativeRect.Empty;
private ScreenCaptureMode _screenCaptureMode = ScreenCaptureMode.Auto; private ScreenCaptureMode _screenCaptureMode = ScreenCaptureMode.Auto;
// TODO: when we get the screen capture code working correctly, this needs to be enabled // TODO: when we get the screen capture code working correctly, this needs to be enabled
@ -74,27 +75,28 @@ namespace Greenshot.Helpers
private readonly DestinationHolder _destinationHolder; private readonly DestinationHolder _destinationHolder;
private readonly IEnumerable<IProcessor> _processors; private readonly IEnumerable<IProcessor> _processors;
public CaptureHelper(CaptureMode captureMode) public CaptureHelper(IEnumerable<IFormEnhancer> formEnhancers, CaptureMode captureMode)
{ {
_captureMode = captureMode; _captureMode = captureMode;
_formEnhancers = formEnhancers;
_capture = new Capture(); _capture = new Capture();
_destinationHolder = DestinationHolder.Instance; _destinationHolder = DestinationHolder.Instance;
// TODO: Fix this // TODO: Fix this
_processors = Enumerable.Empty<IProcessor>(); _processors = Enumerable.Empty<IProcessor>();
} }
public CaptureHelper(CaptureMode captureMode, bool captureMouseCursor) : this(captureMode) public CaptureHelper(IEnumerable<IFormEnhancer> formEnhancers, CaptureMode captureMode, bool captureMouseCursor) : this(formEnhancers, captureMode)
{ {
_captureMouseCursor = captureMouseCursor; _captureMouseCursor = captureMouseCursor;
} }
public CaptureHelper(CaptureMode captureMode, bool captureMouseCursor, ScreenCaptureMode screenCaptureMode) : this(captureMode) public CaptureHelper(IEnumerable<IFormEnhancer> formEnhancers, CaptureMode captureMode, bool captureMouseCursor, ScreenCaptureMode screenCaptureMode) : this(formEnhancers, captureMode)
{ {
_captureMouseCursor = captureMouseCursor; _captureMouseCursor = captureMouseCursor;
_screenCaptureMode = screenCaptureMode; _screenCaptureMode = screenCaptureMode;
} }
public CaptureHelper(CaptureMode captureMode, bool captureMouseCursor, IDestination destination) : this(captureMode, captureMouseCursor) public CaptureHelper(IEnumerable<IFormEnhancer> formEnhancers, CaptureMode captureMode, bool captureMouseCursor, IDestination destination) : this(formEnhancers, captureMode, captureMouseCursor)
{ {
if (destination != null) if (destination != null)
{ {
@ -138,100 +140,100 @@ namespace Greenshot.Helpers
} }
} }
public static void CaptureClipboard(IDestination destination = null) public static void CaptureClipboard(IEnumerable<IFormEnhancer> formEnhancers, IDestination destination = null)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.Clipboard, false, destination)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.Clipboard, false, destination))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureRegion(bool captureMouse, IDestination destination = null) public static void CaptureRegion(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, IDestination destination = null)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.Region, captureMouse, destination)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.Region, captureMouse, destination))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureRegion(bool captureMouse, NativeRect region) public static void CaptureRegion(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, NativeRect region)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.Region, captureMouse)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.Region, captureMouse))
{ {
captureHelper.MakeCapture(region); captureHelper.MakeCapture(region);
} }
} }
public static void CaptureFullscreen(bool captureMouse, ScreenCaptureMode screenCaptureMode, IDestination destination = null) public static void CaptureFullscreen(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, ScreenCaptureMode screenCaptureMode, IDestination destination = null)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.FullScreen, captureMouse, destination)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.FullScreen, captureMouse, destination))
{ {
captureHelper._screenCaptureMode = screenCaptureMode; captureHelper._screenCaptureMode = screenCaptureMode;
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureLastRegion(bool captureMouse) public static void CaptureLastRegion(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.LastRegion, captureMouse)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.LastRegion, captureMouse))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureIe(bool captureMouse, IInteropWindow windowToCapture) public static void CaptureIe(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, IInteropWindow windowToCapture)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.IE, captureMouse)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.IE, captureMouse))
{ {
captureHelper.SelectedCaptureWindow = windowToCapture; captureHelper.SelectedCaptureWindow = windowToCapture;
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureWindow(bool captureMouse, IDestination destination = null) public static void CaptureWindow(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, IDestination destination = null)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.ActiveWindow, captureMouse, destination)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.ActiveWindow, captureMouse, destination))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureWindow(IInteropWindow windowToCapture) public static void CaptureWindow(IEnumerable<IFormEnhancer> formEnhancers, IInteropWindow windowToCapture)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.ActiveWindow)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.ActiveWindow))
{ {
captureHelper.SelectedCaptureWindow = windowToCapture; captureHelper.SelectedCaptureWindow = windowToCapture;
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureWindowInteractive(bool captureMouse) public static void CaptureWindowInteractive(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.Window)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.Window))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureFile(string filename) public static void CaptureFile(IEnumerable<IFormEnhancer> formEnhancers, string filename)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.File)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.File))
{ {
captureHelper.MakeCapture(filename); captureHelper.MakeCapture(filename);
} }
} }
public static void CaptureFile(string filename, IDestination destination) public static void CaptureFile(IEnumerable<IFormEnhancer> formEnhancers, string filename, IDestination destination)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.File)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.File))
{ {
captureHelper.AddDestination(destination).MakeCapture(filename); captureHelper.AddDestination(destination).MakeCapture(filename);
} }
} }
public static void ImportCapture(ICapture captureToImport) public static void ImportCapture(IEnumerable<IFormEnhancer> formEnhancers, ICapture captureToImport)
{ {
using (var captureHelper = new CaptureHelper(CaptureMode.File)) using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.File))
{ {
captureHelper._capture = captureToImport; captureHelper._capture = captureToImport;
captureHelper.HandleCapture(); captureHelper.HandleCapture();
@ -1030,7 +1032,7 @@ namespace Greenshot.Helpers
// } // }
//} //}
using (var captureForm = new CaptureForm(CoreConfig, _capture, _windows)) using (var captureForm = new CaptureForm(CoreConfig, _capture, _windows, _formEnhancers))
{ {
// Make sure the form is hidden after showing, even if an exception occurs, so all errors will be shown // Make sure the form is hidden after showing, even if an exception occurs, so all errors will be shown
DialogResult result; DialogResult result;

View file

@ -120,7 +120,7 @@ namespace Greenshot.Helpers
/// <param name="captureDetails">ICaptureDetails</param> /// <param name="captureDetails">ICaptureDetails</param>
public static void SendImage(ISurface surface, ICaptureDetails captureDetails) public static void SendImage(ISurface surface, ICaptureDetails captureDetails)
{ {
var tmpFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings()); var tmpFile = ImageOutput.SaveNamedTmpFile(surface, captureDetails, new SurfaceOutputSettings(CoreConfig));
if (tmpFile != null) if (tmpFile != null)
{ {

View file

@ -195,7 +195,7 @@ namespace Greenshot.Helpers
private void DrawImageForPrint(object sender, PrintPageEventArgs e) private void DrawImageForPrint(object sender, PrintPageEventArgs e)
{ {
// Create the output settins // Create the output settins
var printOutputSettings = new SurfaceOutputSettings(OutputFormats.png, 100, false); var printOutputSettings = new SurfaceOutputSettings(_coreConfig, OutputFormats.png, 100, false);
ApplyEffects(printOutputSettings); ApplyEffects(printOutputSettings);

View file

@ -39,35 +39,11 @@ namespace Greenshot.Processors
/// </summary> /// </summary>
public class TitleFixProcessor : AbstractProcessor public class TitleFixProcessor : AbstractProcessor
{ {
private static readonly LogSource Log = new LogSource(); private readonly ICoreConfiguration _coreConfiguration;
// TODO: Solve, was static reference!
private static readonly ICoreConfiguration config = new CoreConfigurationImpl();
public TitleFixProcessor() public TitleFixProcessor(ICoreConfiguration coreConfiguration)
{ {
var corruptKeys = new List<string>(); _coreConfiguration = coreConfiguration;
foreach (var key in config.ActiveTitleFixes)
{
if (config.TitleFixMatcher.ContainsKey(key))
{
continue;
}
Log.Warn().WriteLine("Key {0} not found, configuration is broken! Disabling this key!", key);
corruptKeys.Add(key);
}
// Fix configuration if needed
if (corruptKeys.Count <= 0)
{
return;
}
foreach (var corruptKey in corruptKeys)
{
// Removing any reference to the key
config.ActiveTitleFixes.Remove(corruptKey);
config.TitleFixMatcher.Remove(corruptKey);
config.TitleFixReplacer.Remove(corruptKey);
}
} }
public override string Designation => "TitleFix"; public override string Designation => "TitleFix";
@ -81,10 +57,10 @@ namespace Greenshot.Processors
if (!string.IsNullOrEmpty(title)) if (!string.IsNullOrEmpty(title))
{ {
title = title.Trim(); title = title.Trim();
foreach (var titleIdentifier in config.ActiveTitleFixes) foreach (var titleIdentifier in _coreConfiguration.ActiveTitleFixes)
{ {
var regexpString = config.TitleFixMatcher[titleIdentifier]; var regexpString = _coreConfiguration.TitleFixMatcher[titleIdentifier];
var replaceString = config.TitleFixReplacer[titleIdentifier]; var replaceString = _coreConfiguration.TitleFixReplacer[titleIdentifier];
if (replaceString == null) if (replaceString == null)
{ {
replaceString = ""; replaceString = "";

View file

@ -78,7 +78,7 @@ namespace Greenshot
#if !NETCOREAPP3_0 #if !NETCOREAPP3_0
.WithoutCopyOfAssembliesToProbingPath() .WithoutCopyOfAssembliesToProbingPath()
#endif #endif
.WithAssemblyPatterns("Greenshot.Addon*") .WithAssemblyPatterns("Greenshot.Addon.*")
.BuildApplicationConfig(); .BuildApplicationConfig();
var application = new Dapplication(applicationConfig) var application = new Dapplication(applicationConfig)