From 5854c771bd88e1c3e62d308481ed7fce52e7822c Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 24 Mar 2016 23:29:06 +0100 Subject: [PATCH] More SF references removed --- Greenshot/Helpers/LogHelper.cs | 38 ---- Greenshot/Languages/language-da-DK.xml | 2 +- .../Languages/language-de-x-franconia.xml | 2 +- Greenshot/Languages/language-et-EE.xml | 2 +- Greenshot/Languages/language-id-ID.xml | 2 +- Greenshot/Languages/language-lv-LV.xml | 2 +- Greenshot/Languages/language-sl-SI.xml | 2 +- .../Languages/plugin-translations-readme.txt | 10 - GreenshotTest/GreenshotTest.csproj | 50 ----- GreenshotTest/Properties/AssemblyInfo.cs | 52 ----- .../Drawing/Filters/BitmapByteBufferTest.cs | 198 ----------------- .../Properties/PropertyAggregatorTest.cs | 111 ---------- .../Drawing/Properties/SerializationTest.cs | 90 -------- GreenshotTest/Test/Helpers/ScaleHelperTest.cs | 207 ------------------ GreenshotTest/Test/SaveImageFileDialogTest.cs | 78 ------- GreenshotTest/lib/nunit.framework.dll | Bin 131072 -> 0 bytes PluginExample/AnnotateProcessor.cs | 79 ------- PluginExample/ExampleForm.cs | 29 --- PluginExample/GreyscaleProcessor.cs | 77 ------- PluginExample/PluginExample.cs | 82 ------- PluginExample/PluginExample.csproj | 55 ----- PluginExample/PluginExampleConfiguration.cs | 40 ---- PluginExample/Properties/AssemblyInfo.cs | 51 ----- PluginExample/SettingsForm.Designer.cs | 119 ---------- PluginExample/SettingsForm.cs | 49 ----- PluginExample/SimpleOutputDestination.cs | 76 ------- build.ps1 | 4 +- prebuild.ps1 | 4 +- 28 files changed, 10 insertions(+), 1501 deletions(-) delete mode 100644 Greenshot/Helpers/LogHelper.cs delete mode 100644 Greenshot/Languages/plugin-translations-readme.txt delete mode 100644 GreenshotTest/GreenshotTest.csproj delete mode 100644 GreenshotTest/Properties/AssemblyInfo.cs delete mode 100644 GreenshotTest/Test/Drawing/Filters/BitmapByteBufferTest.cs delete mode 100644 GreenshotTest/Test/Drawing/Properties/PropertyAggregatorTest.cs delete mode 100644 GreenshotTest/Test/Drawing/Properties/SerializationTest.cs delete mode 100644 GreenshotTest/Test/Helpers/ScaleHelperTest.cs delete mode 100644 GreenshotTest/Test/SaveImageFileDialogTest.cs delete mode 100644 GreenshotTest/lib/nunit.framework.dll delete mode 100644 PluginExample/AnnotateProcessor.cs delete mode 100644 PluginExample/ExampleForm.cs delete mode 100644 PluginExample/GreyscaleProcessor.cs delete mode 100644 PluginExample/PluginExample.cs delete mode 100644 PluginExample/PluginExample.csproj delete mode 100644 PluginExample/PluginExampleConfiguration.cs delete mode 100644 PluginExample/Properties/AssemblyInfo.cs delete mode 100644 PluginExample/SettingsForm.Designer.cs delete mode 100644 PluginExample/SettingsForm.cs delete mode 100644 PluginExample/SimpleOutputDestination.cs diff --git a/Greenshot/Helpers/LogHelper.cs b/Greenshot/Helpers/LogHelper.cs deleted file mode 100644 index b4edb94be..000000000 --- a/Greenshot/Helpers/LogHelper.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using System; -using System.IO; -using System.Windows.Forms; - -namespace Greenshot.Helpers { - public class SpecialFolderPatternConverter : log4net.Util.PatternConverter { - protected override void Convert(System.IO.TextWriter writer, object state) { - // Making Greenshot portable - string pafPath = Path.Combine(Application.StartupPath, @"App\Greenshot"); - if (Directory.Exists(pafPath)) { - writer.Write(Path.Combine(Application.StartupPath, @"Data")); - return; - } - Environment.SpecialFolder specialFolder = (Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), base.Option, true); - writer.Write(Environment.GetFolderPath(specialFolder)); - } - } -} diff --git a/Greenshot/Languages/language-da-DK.xml b/Greenshot/Languages/language-da-DK.xml index ed93e40d1..7e8b6c01a 100644 --- a/Greenshot/Languages/language-da-DK.xml +++ b/Greenshot/Languages/language-da-DK.xml @@ -102,7 +102,7 @@ Detaljer om GNU General Public License: Ikoner fra Yusuke Kamiyamanes Fugue ikon-sæt (Creative Commons Attribution 3.0 license): - Greenshot hostes af sourceforge.net på: + Greenshot hostes af GitHub på: Rapporter venligst fejl til: diff --git a/Greenshot/Languages/language-de-x-franconia.xml b/Greenshot/Languages/language-de-x-franconia.xml index 89cf7597c..f2b69af5c 100644 --- a/Greenshot/Languages/language-de-x-franconia.xml +++ b/Greenshot/Languages/language-de-x-franconia.xml @@ -3,7 +3,7 @@ Lefft was falsch, meldst di hier Wenn der Greenshot gfälld, kannsd uns gern a weng helfn: - Greenshot is a bei sourceforge, und zwa dordn: + Greenshot is a bei GitHub, und zwa dordn: Dei Fuztl-Bildla sin vom Yusuke Kamiyamane's Fugue icon set (Griäidif Gommens Äddribuschn 3.0 Laisns) Kobbireid (C) 2007-2012 Domas Braun, Jens Glingen, Robin Grohm A Garandie gibds für Greenshot ned, des kannst vergessn. Greenshot is umsonsd und wennsd mogst, kannsd es a rumreichn. diff --git a/Greenshot/Languages/language-et-EE.xml b/Greenshot/Languages/language-et-EE.xml index 474124f4f..fbe51c0d4 100644 --- a/Greenshot/Languages/language-et-EE.xml +++ b/Greenshot/Languages/language-et-EE.xml @@ -3,7 +3,7 @@ Palun saatke veateated Greenshoti kasutamismugavust ja arendust saate toetada siin: - Greenshot asub portaalis sourceforge.net + Greenshot asub portaalis GitHub Yusuke Kamiyamane on ikoonide tegija Fugue ikooni paketist (Creative Commons Attribution 3.0 litsents) Copyright (C) 2007-2015 Thomas Braun, Jens Klingen, Robin Krom Greenshot ei paku GARANTIID. See on vabaravaline programm ja Te võite seda levitava vabalt teatud tingimuste alusel. diff --git a/Greenshot/Languages/language-id-ID.xml b/Greenshot/Languages/language-id-ID.xml index 2b6db4d4b..315dcba9f 100644 --- a/Greenshot/Languages/language-id-ID.xml +++ b/Greenshot/Languages/language-id-ID.xml @@ -3,7 +3,7 @@ Harap laporkan kesalahan ke Jika anda menyukai Greenshot, anda dipersilahkan untuk mendukung kami: - Greenshot dikelola oleh sourceforge.net di + Greenshot dikelola oleh GitHub di Ikon dari Yusuke Kamiyamane Fugue ikon set (lisensi Creative Commons Attribution 3.0) Hak Cipta milik Thomas Braun, Jens Klingen, Robin Krom 2007-2015 Greenshot comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. diff --git a/Greenshot/Languages/language-lv-LV.xml b/Greenshot/Languages/language-lv-LV.xml index 3530c1af1..bcf3eb9e0 100644 --- a/Greenshot/Languages/language-lv-LV.xml +++ b/Greenshot/Languages/language-lv-LV.xml @@ -4,7 +4,7 @@ Kļūdu ziņojumus sūtiet uz Ja Tev patīk „Greenshot”, Tu vari mūs atbalstīt: - „Greenshot” atrodams sourceforge.net adresē + „Greenshot” atrodams GitHub adresē Ikonas veidojis Yusuke Kamiyamane's Fugue (Radošās kopienas Atsaucoties 3.0 licence) Autortiesības (C): 2007-2015 Thomas Braun, Jens Klingen, Robin Krom Ņemot vērā, ka „Greenshot” tiek licencēta bez maksas, šai programmai NAV NEKĀDU GARANTIJU. Tu vari to izplatīt un lietot ievērojot GNU Vispārīgo Publisko licenci: diff --git a/Greenshot/Languages/language-sl-SI.xml b/Greenshot/Languages/language-sl-SI.xml index 18299a348..3ea4f2025 100644 --- a/Greenshot/Languages/language-sl-SI.xml +++ b/Greenshot/Languages/language-sl-SI.xml @@ -3,7 +3,7 @@ Napake prosimo javite na Če vam je Greenshot všeč nas prosim podprite: - Greenshot gostuje pri sourceforge.net + Greenshot gostuje pri GitHub Ikone: Yusuke Kamiyamane's Fugue icon set (Creative Commons Attribution 3.0 license) Avtorske pravice (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom Greenshot absolutno ne ponuja NOBENE GARANCIJE. Program je brezplačen in ga lahko distribuirate pod določenimi pogoji. diff --git a/Greenshot/Languages/plugin-translations-readme.txt b/Greenshot/Languages/plugin-translations-readme.txt deleted file mode 100644 index 1864a9965..000000000 --- a/Greenshot/Languages/plugin-translations-readme.txt +++ /dev/null @@ -1,10 +0,0 @@ -Looking for language files for translatabe plugins? -Please refer to these: - - * http://greenshot.svn.sourceforge.net/svnroot/greenshot/trunk/GreenshotConfluencePlugin/Languages/ - * http://greenshot.svn.sourceforge.net/viewvc/greenshot/trunk/GreenshotImgurPlugin/Languages/ - * http://greenshot.svn.sourceforge.net/viewvc/greenshot/trunk/GreenshotJiraPlugin/Languages/ - * http://greenshot.svn.sourceforge.net/viewvc/greenshot/trunk/Greenshot-OCR-Plugin/Languages/ - - Thanks a lot :) - diff --git a/GreenshotTest/GreenshotTest.csproj b/GreenshotTest/GreenshotTest.csproj deleted file mode 100644 index 8fb9d35d5..000000000 --- a/GreenshotTest/GreenshotTest.csproj +++ /dev/null @@ -1,50 +0,0 @@ - - - - - {EFD01BC7-15E5-48AD-BE68-D7B62FEEED2D} - Library - GreenshotTest - GreenshotTest - v2.0 - Properties - False - False - 4 - false - - - - - - lib\nunit.framework.dll - - - - - - - - - - - - - - - - - - - - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - GreenshotPlugin - - - {CD642BF4-D815-4D67-A0B5-C69F0B8231AF} - Greenshot - - - \ No newline at end of file diff --git a/GreenshotTest/Properties/AssemblyInfo.cs b/GreenshotTest/Properties/AssemblyInfo.cs deleted file mode 100644 index 0eb8a7c24..000000000 --- a/GreenshotTest/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -#region Using directives - -using System; -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("GreenshotTest")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("GreenshotTest")] -[assembly: AssemblyCopyright("Copyright 2007-2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. -[assembly: ComVisible(false)] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all the values or you can use the default the Revision and -// Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.2.0.7")] -[assembly: AssemblyInformationalVersion("1.2.0.7-gdb8b2cb")] diff --git a/GreenshotTest/Test/Drawing/Filters/BitmapByteBufferTest.cs b/GreenshotTest/Test/Drawing/Filters/BitmapByteBufferTest.cs deleted file mode 100644 index 8a47371ff..000000000 --- a/GreenshotTest/Test/Drawing/Filters/BitmapByteBufferTest.cs +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using NUnit.Framework; -using System; -using System.Drawing; -using System.Drawing.Imaging; -using Greenshot.Drawing; -using Greenshot.Drawing.Filters; -using GreenshotPlugin.Core; - -namespace Greenshot.Test.Drawing.Filters { - /// - /// Description of BitmapBufferTest. - /// - [TestFixture] - public class BitmapBufferTest - { - private Bitmap bmp; - private BitmapBuffer buf; - private Bitmap bmpRect; - private BitmapBuffer bufRect; - - - - [SetUp] - public void Init() - { - bmp = new Bitmap(6,6); - for(int i=0; i<6; i++) { - int col = 255-i*51; - bmp.SetPixel(0,i, Color.FromArgb(col,0,0)); - bmp.SetPixel(1,i, Color.FromArgb(col,col,0)); - bmp.SetPixel(2,i, Color.FromArgb(0,col,0)); - bmp.SetPixel(3,i, Color.FromArgb(0,col,col)); - bmp.SetPixel(4,i, Color.FromArgb(0,0,col)); - bmp.SetPixel(5,i, Color.FromArgb(col,0,col)); - } - buf = new BitmapBuffer(bmp); - - bmpRect = new Bitmap(6,6); - for(int i=0; i<6; i++) { - int col = 255-i*51; - bmpRect.SetPixel(0,i, Color.FromArgb(col,0,0)); - bmpRect.SetPixel(1,i, Color.FromArgb(col,col,0)); - bmpRect.SetPixel(2,i, Color.FromArgb(0,col,0)); - bmpRect.SetPixel(3,i, Color.FromArgb(0,col,col)); - bmpRect.SetPixel(4,i, Color.FromArgb(0,0,col)); - bmpRect.SetPixel(5,i, Color.FromArgb(col,0,col)); - } - bufRect = new BitmapBuffer(bmpRect,new Rectangle(2,2,2,2)); - } - - - - [TearDown] - public void Dispose() - { - buf.Dispose(); - buf = null; - bmp.Dispose(); - bmp = null; - } - - [Test] - public void TestGetSetColor() - { -// Assert.AreEqual(255, buf.R); -// Assert.AreEqual(0, buf.G); -// Assert.AreEqual(0, buf.B); -// Assert.AreEqual(Color.FromArgb(255,0,0), buf.Color); -// -// buf.B = 255; -// Assert.AreEqual(255, buf.R); -// Assert.AreEqual(0, buf.G); -// Assert.AreEqual(255, buf.B); -// Assert.AreEqual(Color.FromArgb(255,0,255), buf.Color); -// -// buf.Color = Color.Red; -// Assert.AreEqual(255, buf.R); -// Assert.AreEqual(0, buf.G); -// Assert.AreEqual(0, buf.B); -// Assert.AreEqual(Color.FromArgb(255,0,0), buf.Color); - } - - [Test] - public void TestGetSetColorRect() - { -// Assert.AreEqual(0, bufRect.R); -// Assert.AreEqual(153, bufRect.G); -// Assert.AreEqual(0, bufRect.B); -// Assert.AreEqual(Color.FromArgb(0,153,0), bufRect.Color); -// -// bufRect.B = 255; -// Assert.AreEqual(0, bufRect.R); -// Assert.AreEqual(153, bufRect.G); -// Assert.AreEqual(255, bufRect.B); -// Assert.AreEqual(Color.FromArgb(0,153,255), bufRect.Color); -// -// bufRect.Color = Color.FromArgb(0,153,0); -// Assert.AreEqual(0, bufRect.R); -// Assert.AreEqual(153, bufRect.G); -// Assert.AreEqual(0, bufRect.B); -// Assert.AreEqual(Color.FromArgb(0,153,0), bufRect.Color); - } - - [Test] - public void TestModifyBitmap() - { -// //buf.MoveTo(0,0); -// buf.Color = Color.FromArgb(255,255,255); -// buf.Dispose(); -// buf = new BitmapBuffer(bmp); -// Assert.AreEqual(Color.FromArgb(255,255,255), buf.Color); -// buf.Color = Color.FromArgb(255,0,0); - } - - [Test] - public void TestTraverse() - { - /*buf.MoveTo(0,0); - buf.Traverse(1,0); - Assert.AreEqual(Color.FromArgb(255,255,0), buf.Color); - buf.Traverse(0,1); - Assert.AreEqual(Color.FromArgb(204,204,0), buf.Color); - buf.Traverse(2,2); - Assert.AreEqual(Color.FromArgb(0,102,102), buf.Color); - buf.MoveTo(4,4); - Assert.AreEqual(Color.FromArgb(0,0,51), buf.Color); - buf.MoveTo(2,2); - Assert.AreEqual(Color.FromArgb(0,153,0), buf.Color); - buf.MoveTo(0,0); - Assert.AreEqual(Color.FromArgb(255,0,0), buf.Color);*/ - } - - [Test] - public void TestColorAt(){ - Assert.AreEqual(Color.FromArgb(255,0,0),buf.GetColorAt(0,0)); - Assert.AreEqual(Color.FromArgb(255,255,0),buf.GetColorAt(1,0)); - Assert.AreEqual(Color.FromArgb(204,204,0),buf.GetColorAt(1,1)); - Assert.AreEqual(Color.FromArgb(0,153,0),buf.GetColorAt(2,2)); - Assert.AreEqual(Color.FromArgb(204,204,0),buf.GetColorAt(1,1)); - Assert.AreEqual(Color.FromArgb(0,0,51),buf.GetColorAt(4,4)); - } - - [Test] - public void TestIterate() - { -// buf.IteratePixel += delegate { -// if(buf.Location.X == 0 && buf.Location.Y == 0) -// { -// Assert.AreEqual(Color.FromArgb(255,0,0), buf.Color); -// } -// else if(buf.Location.X == 3 && buf.Location.Y == 3) -// { -// Assert.AreEqual(Color.FromArgb(0,102,102), buf.Color); -// } -// }; -// buf.Iterate(); - } - - [Test] - public void TestIterateRect() - { -// bufRect.IteratePixel += delegate { -// if(bufRect.Location.X == 0 && bufRect.Location.Y == 0) -// { -// Assert.AreEqual(Color.FromArgb(0,153,0), bufRect.Color); -// } -// else if(bufRect.Location.X == 1 && bufRect.Location.Y == 0) -// { -// Assert.AreEqual(Color.FromArgb(0,153,153), bufRect.Color); -// } -// }; -// bufRect.Iterate(); - } - - - - } -} diff --git a/GreenshotTest/Test/Drawing/Properties/PropertyAggregatorTest.cs b/GreenshotTest/Test/Drawing/Properties/PropertyAggregatorTest.cs deleted file mode 100644 index 0ecffd060..000000000 --- a/GreenshotTest/Test/Drawing/Properties/PropertyAggregatorTest.cs +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using NUnit.Framework; -using System; -using System.Drawing; -using System.Windows.Forms; -using Greenshot.Drawing; - - -using Greenshot.Drawing.Fields; - - -namespace Greenshot.Test.Drawing.Properties -{ - /// - /// Description of PropertyAggregatorTest. - /// - [TestFixture] - public class PropertyAggregatorTest - { - - - [SetUp] - public void Init() - { - - } - - - - [TearDown] - public void Dispose() - { - } - - - [Test] - public void Test() - { - - FieldType t = FieldType.LINE_THICKNESS; - - Surface s = new Surface(); - FieldAggregator ep = new FieldAggregator(); - //ep.SetFieldValue(t,598); - - RectangleContainer rc = new RectangleContainer(s); - rc.SetFieldValue(t,597); - //Assert.AreNotEqual(ep.GetField(t), rc.GetField(t)); - ep.BindElement(rc); - Assert.AreEqual(597, ep.GetField(t).Value); - Assert.AreEqual(597, rc.GetField(t).Value); - - RectangleContainer rc2 = new RectangleContainer(s); - Assert.AreEqual(597, ep.GetField(t).Value); - rc2.SetFieldValue(t,595); - Assert.AreEqual(595, rc2.GetField(t).Value); - ep.BindElement(rc2); - Assert.AreEqual(595, ep.GetField(t).Value); - Assert.AreEqual(597, rc.GetField(t).Value); - - RectangleContainer rc3 = new RectangleContainer(s); - rc3.SetFieldValue(t,600); - ep.BindElement(rc3); - - //Assert.AreEqual(600, ep.GetField(t).Value); - Assert.AreEqual(600, rc3.GetField(t).Value); - Assert.AreEqual(597, rc.GetField(t).Value); - - ep.SetFieldValue(t, 599); - Assert.AreEqual(599, ep.GetField(t).Value); - Assert.AreEqual(599, rc.GetField(t).Value); - Assert.AreEqual(599, rc2.GetField(t).Value); - Assert.AreEqual(599, rc3.GetField(t).Value); - - - - - - } - - public class TestIrrelevantPropertyHolder : RectangleContainer - { - public TestIrrelevantPropertyHolder() : base(new Surface()) - { - } - public int Leet = 1337; - } - - - - } -} diff --git a/GreenshotTest/Test/Drawing/Properties/SerializationTest.cs b/GreenshotTest/Test/Drawing/Properties/SerializationTest.cs deleted file mode 100644 index 38b60037f..000000000 --- a/GreenshotTest/Test/Drawing/Properties/SerializationTest.cs +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using NUnit.Framework; -using System; -using Greenshot.Drawing; -using Greenshot.Drawing.Fields; -using Greenshot.Drawing.Filters; -using Greenshot.Helpers; - -namespace Greenshot.Test.Drawing.Properties -{ - /// - /// Description of SerializationTest. - /// - [TestFixture] - public class SerializationTest - { - - public SerializationTest() - { - } - - [Test] - public void TestSerializeField() { - Field f = new Field(FieldType.ARROWHEADS, GetType()); - f.myValue = ArrowContainer.ArrowHeadCombination.BOTH; - - Field clone = (Field) Objects.DeepClone(f); - Assert.AreEqual(f, clone); - Assert.AreEqual(f.Value, clone.Value); - Assert.AreEqual(f.Scope, clone.Scope); - - f.Scope = this.GetType().ToString(); - - clone = (Field) Objects.DeepClone(f); - Assert.AreEqual(f, clone); - Assert.AreEqual(f.Value, clone.Value); - Assert.AreEqual(f.Scope, clone.Scope); - } - - [Test] - public void TestSerializeFieldHolder() { - AbstractFieldHolder afh = new TestFieldHolder(); - AbstractFieldHolder clone = (AbstractFieldHolder)Objects.DeepClone(afh); - Assert.AreEqual(afh.GetFields(), clone.GetFields()); - } - - [Test] - public void TestSerializeFieldHolderWithChildren() { - AbstractFieldHolderWithChildren afh = new TestFieldHolderWithChildren(); - AbstractFieldHolderWithChildren clone = (AbstractFieldHolderWithChildren)Objects.DeepClone(afh); - Assert.AreEqual(afh.GetFields(), clone.GetFields()); - } - - [Test] - public void TestSerializeFilterContainer() { - ObfuscateContainer oc = new ObfuscateContainer(new Surface()); - - ObfuscateContainer clone = (ObfuscateContainer)Objects.DeepClone(oc); - Assert.AreEqual(oc.Children.GetType(), clone.Children.GetType()); - System.Collections.Generic.List ocFields = oc.GetFields(); - System.Collections.Generic.List cloneFields = clone.GetFields(); - Assert.AreEqual(ocFields, cloneFields); - } - - [Serializable] - private class TestFieldHolder : AbstractFieldHolder {} - [Serializable] - private class TestFieldHolderWithChildren : AbstractFieldHolderWithChildren {} - } - -} diff --git a/GreenshotTest/Test/Helpers/ScaleHelperTest.cs b/GreenshotTest/Test/Helpers/ScaleHelperTest.cs deleted file mode 100644 index 5acb09544..000000000 --- a/GreenshotTest/Test/Helpers/ScaleHelperTest.cs +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using System; -using System.Drawing; -using System.Windows.Forms; -using Greenshot.Configuration; -using Greenshot.Drawing; -using Greenshot.Forms; -using Greenshot.Helpers; -using GreenshotPlugin.Core; -using Greenshot.IniFile; -using NUnit.Framework; - -namespace Greenshot.Test -{ - [TestFixture] - public class ScaleHelperTest { - - [Test] - public void FreeScaleTest() { - RectangleF r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_BOTTOM_RIGHT, new PointF(10,20)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(10, r.Width); - Assert.AreEqual(20, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_BOTTOM_RIGHT, new PointF(30,40)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(30, r.Width); - Assert.AreEqual(40, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_BOTTOM_CENTER, new PointF(9999,40)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(10, r.Width); - Assert.AreEqual(40, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_BOTTOM_LEFT, new PointF(3,40)); - Assert.AreEqual(3, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(7, r.Width); - Assert.AreEqual(40, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_MIDDLE_RIGHT, new PointF(48,9999)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(48, r.Width); - Assert.AreEqual(20, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_MIDDLE_RIGHT, new PointF(8,9999)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(8, r.Width); - Assert.AreEqual(20, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_TOP_RIGHT, new PointF(17,-37)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(-37, r.Top); - Assert.AreEqual(17, r.Width); - Assert.AreEqual(57, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_TOP_CENTER, new PointF(9998,-77)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(-77, r.Top); - Assert.AreEqual(10, r.Width); - Assert.AreEqual(97, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.Scale(ref r, Gripper.POSITION_TOP_LEFT, new PointF(-23,-54)); - Assert.AreEqual(-23, r.Left); - Assert.AreEqual(-54, r.Top); - Assert.AreEqual(33, r.Width); - Assert.AreEqual(74, r.Height); - } - - [Test] - public void RationalScaleTest() { - RectangleF r = new RectangleF(0,0,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_BOTTOM_RIGHT, new PointF(10,20)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(10, r.Width); - Assert.AreEqual(20, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_BOTTOM_RIGHT, new PointF(30,60)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(30, r.Width); - Assert.AreEqual(60, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_BOTTOM_RIGHT, new PointF(30,96768)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(30, r.Width); - Assert.AreEqual(60, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_BOTTOM_CENTER, new PointF(9999,40)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(10, r.Width); - Assert.AreEqual(40, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_BOTTOM_LEFT, new PointF(-90, 9234)); - Assert.AreEqual(-90, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(100, r.Width); - Assert.AreEqual(200, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_MIDDLE_RIGHT, new PointF(48,9999)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(48, r.Width); - Assert.AreEqual(20, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_MIDDLE_RIGHT, new PointF(8,9999)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(8, r.Width); - Assert.AreEqual(20, r.Height); - - r = new RectangleF(0,20,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_TOP_RIGHT, new PointF(20,829634235)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(20, r.Width); - Assert.AreEqual(40, r.Height); - - r = new RectangleF(0,0,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_TOP_CENTER, new PointF(9998,-77)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(-77, r.Top); - Assert.AreEqual(10, r.Width); - Assert.AreEqual(97, r.Height); - - r = new RectangleF(10,20,10,20); - ScaleHelper.RationalScale(ref r, Gripper.POSITION_TOP_LEFT, new PointF(0,0)); - Assert.AreEqual(0, r.Left); - Assert.AreEqual(0, r.Top); - Assert.AreEqual(20, r.Width); - Assert.AreEqual(40, r.Height); - } - - /*[Test] - public void GetFileNameWithExtensionTest() { - SaveImageFileDialog sifd = new SaveImageFileDialog(); - - sifd.InitialDirectory = @"C:\some\path"; - sifd.FileName = "myimage.jpg"; - sifd.Extension = "jpg"; - Assert.AreEqual("myimage.jpg",sifd.FileNameWithExtension); - - sifd.Extension = "gif"; - Assert.AreEqual("myimage.jpg.gif",sifd.FileNameWithExtension); - - sifd.FileName = "myimage"; - Assert.AreEqual("myimage.gif",sifd.FileNameWithExtension); - - } - - [Test] - public void SuggestBasicFileNameTest() { - //conf.Output_FileAs_Fullpath = @"c:\path\to\greenshot_testdir\gstest_28.jpg"; - conf.OutputFilePath = @"c:\path\to\greenshot_testdir\"; - conf.OutputFileFilenamePattern = "gstest_${NUM}"; - conf.OutputFileFormat = OutputFormat.png; - conf.OutputFileIncrementingNumber = 28; - SaveImageFileDialog sifd = new SaveImageFileDialog(); - - Assert.AreEqual(sifd.InitialDirectory, @"c:\path\to\greenshot_testdir"); - Assert.AreEqual(sifd.FileNameWithExtension, "gstest_000028.jpg"); - - }*/ - } -} diff --git a/GreenshotTest/Test/SaveImageFileDialogTest.cs b/GreenshotTest/Test/SaveImageFileDialogTest.cs deleted file mode 100644 index 6abfff2bd..000000000 --- a/GreenshotTest/Test/SaveImageFileDialogTest.cs +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using System; -using System.Windows.Forms; -using Greenshot.Configuration; -using Greenshot.Forms; -using GreenshotPlugin.Core; -using Greenshot.IniFile; -using NUnit.Framework; - -namespace Greenshot.Test -{ - [TestFixture] - public class SaveImageFileDialogTest { - private static CoreConfiguration conf = IniConfig.GetIniSection(); - [Test] - public void GetSetExtensionTest() { - SaveImageFileDialog sifd = new SaveImageFileDialog(); - sifd.Extension = "jpg"; - Assert.AreEqual(sifd.Extension, "jpg"); - sifd.Extension = "gif"; - Assert.AreEqual(sifd.Extension, "gif"); - sifd.Extension = "png"; - Assert.AreEqual(sifd.Extension, "png"); - sifd.Extension = "bmp"; - Assert.AreEqual(sifd.Extension, "bmp"); - } - - [Test] - public void GetFileNameWithExtensionTest() { - SaveImageFileDialog sifd = new SaveImageFileDialog(); - - sifd.InitialDirectory = @"C:\some\path"; - sifd.FileName = "myimage.jpg"; - sifd.Extension = "jpg"; - Assert.AreEqual("myimage.jpg",sifd.FileNameWithExtension); - - sifd.Extension = "gif"; - Assert.AreEqual("myimage.jpg.gif",sifd.FileNameWithExtension); - - sifd.FileName = "myimage"; - Assert.AreEqual("myimage.gif",sifd.FileNameWithExtension); - - } - - [Test] - public void SuggestBasicFileNameTest() { - //conf.Output_FileAs_Fullpath = @"c:\path\to\greenshot_testdir\gstest_28.jpg"; - conf.OutputFilePath = @"c:\path\to\greenshot_testdir\"; - conf.OutputFileFilenamePattern = "gstest_${NUM}"; - conf.OutputFileFormat = OutputFormat.png; - conf.OutputFileIncrementingNumber = 28; - SaveImageFileDialog sifd = new SaveImageFileDialog(); - - Assert.AreEqual(sifd.InitialDirectory, @"c:\path\to\greenshot_testdir"); - Assert.AreEqual(sifd.FileNameWithExtension, "gstest_000028.jpg"); - - } - } -} diff --git a/GreenshotTest/lib/nunit.framework.dll b/GreenshotTest/lib/nunit.framework.dll deleted file mode 100644 index 88f3fa3b51eb43a42a63d0a08c7dde480b28adea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131072 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. - */ -using System; -using System.Drawing; -using System.Windows.Forms; - -using Greenshot.Plugin; -using GreenshotPlugin.Core; -using Greenshot.IniFile; - -namespace PluginExample { - /// - /// This processor shows how the current surface could be modified before it's passed to the editor or another destination - /// - public class AnnotateProcessor : AbstractProcessor { - private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(AnnotateProcessor)); - private static PluginExampleConfiguration conf = IniConfig.GetIniSection(); - - private IGreenshotHost host; - - public AnnotateProcessor(IGreenshotHost host) { - this.host = host; - } - - public override string Designation { - get { - return "Annotate"; - } - } - - public override string Description { - get { - return Designation; - } - } - - public override bool isActive { - get { - return conf.AnnotationProcessor; - } - } - - public override bool ProcessCapture(ISurface surface, ICaptureDetails captureDetails) { - surface.SelectElement(surface.AddCursorContainer(Cursors.Hand, 100, 100)); - // Do something with the screenshot - string title = captureDetails.Title; - if (title != null) { - LOG.Debug("Added title to surface: " + title); - surface.SelectElement(surface.AddTextContainer(title, HorizontalAlignment.Center, VerticalAlignment.CENTER, - FontFamily.GenericSansSerif, 12f, false, false, false, 2, Color.Red, Color.White)); - } - surface.SelectElement(surface.AddTextContainer(Environment.UserName, HorizontalAlignment.Right, VerticalAlignment.TOP, - FontFamily.GenericSansSerif, 12f, false, false, false, 2, Color.Red, Color.White)); - surface.SelectElement(surface.AddTextContainer(Environment.MachineName, HorizontalAlignment.Right, VerticalAlignment.BOTTOM, - FontFamily.GenericSansSerif, 12f, false, false, false, 2, Color.Red, Color.White)); - surface.SelectElement(surface.AddTextContainer(captureDetails.DateTime.ToLongDateString(), HorizontalAlignment.Left, VerticalAlignment.BOTTOM, - FontFamily.GenericSansSerif, 12f, false, false, false, 2, Color.Red, Color.White)); - return true; - } - } -} diff --git a/PluginExample/ExampleForm.cs b/PluginExample/ExampleForm.cs deleted file mode 100644 index 144f36a4b..000000000 --- a/PluginExample/ExampleForm.cs +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using System; -using System.Collections.Generic; -using System.Text; -using GreenshotPlugin.Controls; - -namespace PluginExample { - public class ExampleForm : GreenshotForm{ - } -} diff --git a/PluginExample/GreyscaleProcessor.cs b/PluginExample/GreyscaleProcessor.cs deleted file mode 100644 index 36f4215ff..000000000 --- a/PluginExample/GreyscaleProcessor.cs +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using System; -using System.Drawing; -using System.Windows.Forms; - -using Greenshot.Plugin; -using GreenshotPlugin.Core; -using Greenshot.IniFile; - -namespace PluginExample { - /// - /// This processor shows how the current surface could be modified before it's passed to the editor or another destination - /// - public class GreyscaleProcessor : AbstractProcessor { - private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(GreyscaleProcessor)); - private static PluginExampleConfiguration conf = IniConfig.GetIniSection(); - private IGreenshotHost host; - - public GreyscaleProcessor(IGreenshotHost host) { - this.host = host; - } - - public override string Designation { - get { - return "Greyscale"; - } - } - - public override string Description { - get { - return Designation; - } - } - - public override bool isActive { - get { - return conf.GreyscaleProcessor; - } - } - - public override bool ProcessCapture(ISurface surface, ICaptureDetails captureDetails) { - LOG.DebugFormat("Changing surface to grayscale!"); - using (BitmapBuffer bbb = new BitmapBuffer(surface.Image as Bitmap, false)) { - bbb.Lock(); - for(int y=0;y. - */ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Text; -using System.Windows.Forms; - -using Greenshot.Plugin; -using GreenshotPlugin.Core; -using Greenshot.IniFile; - -namespace PluginExample { - /// - /// An example Plugin so developers can see how they can develop their own plugin - /// - public class PluginExample : IGreenshotPlugin { - private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(PluginExample)); - private IGreenshotHost host; - private PluginAttribute myAttributes; - - public PluginExample() { - } - - public IEnumerable Destinations() { - yield return new SimpleOutputDestination(host); - } - - public IEnumerable Processors() { - yield return new AnnotateProcessor(host); - yield return new GreyscaleProcessor(host); - } - - /// - /// Implementation of the IGreenshotPlugin.Initialize - /// - /// Use the IGreenshotPluginHost interface to register events - /// Use the ICaptureHost interface to register in the MainContextMenu - /// My own attributes - /// true if plugin is initialized, false if not (doesn't show) - public virtual bool Initialize(IGreenshotHost pluginHost, PluginAttribute myAttributes) { - LOG.Debug("Initialize called of " + myAttributes.Name); - - this.host = pluginHost; - this.myAttributes = myAttributes; - return true; - } - - public virtual void Shutdown() { - LOG.Debug("Shutdown of " + myAttributes.Name); - } - - /// - /// Implementation of the IPlugin.Configure - /// - public virtual void Configure() { - LOG.Debug("Configure called"); - SettingsForm settingsForm = new SettingsForm(); - settingsForm.ShowDialog(); - } - } -} \ No newline at end of file diff --git a/PluginExample/PluginExample.csproj b/PluginExample/PluginExample.csproj deleted file mode 100644 index 48ae00b29..000000000 --- a/PluginExample/PluginExample.csproj +++ /dev/null @@ -1,55 +0,0 @@ - - - - - {6BD38118-B27F-43A1-951C-FB6464D39260} - Library - PluginExample - PluginExample - v2.0 - Properties - OnBuildSuccess - True - False - 4 - false - - - - - - ..\Greenshot\Lib\log4net.dll - - - - - - - - Form - - - - - - - - - Form - - - SettingsForm.cs - - - - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - GreenshotPlugin - - - - mkdir "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)" -copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName)" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\*.gsp" - - \ No newline at end of file diff --git a/PluginExample/PluginExampleConfiguration.cs b/PluginExample/PluginExampleConfiguration.cs deleted file mode 100644 index 9050827d5..000000000 --- a/PluginExample/PluginExampleConfiguration.cs +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using System; -using System.Collections.Generic; -using System.IO; - -using GreenshotPlugin.Core; -using Greenshot.IniFile; - -namespace PluginExample { - /// - /// Description of PluginExampleConfiguration. - /// - [IniSection("PluginExample", Description="Plugin Example configuration")] - public class PluginExampleConfiguration : IniSection { - [IniProperty("GreyScaleProcessor", Description="Enable or disable the greyscale processor.", DefaultValue="False")] - public bool GreyscaleProcessor; - - [IniProperty("AnnotationProcessor", Description="Enable or disable the annotation processor.", DefaultValue="False")] - public bool AnnotationProcessor; - } -} diff --git a/PluginExample/Properties/AssemblyInfo.cs b/PluginExample/Properties/AssemblyInfo.cs deleted file mode 100644 index ab8835f04..000000000 --- a/PluginExample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -#region Using directives - -using System; -using System.Reflection; -using System.Runtime.InteropServices; -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("PluginExample")] -[assembly: AssemblyDescription("An example plugin")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Example Plugin")] -[assembly: AssemblyCopyright("Copyright 2007-2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. -[assembly: ComVisible(false)] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all the values or you can use the default the Revision and -// Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.2.0.7")] -[assembly: AssemblyInformationalVersion("1.2.0.7-gdb8b2cb")] diff --git a/PluginExample/SettingsForm.Designer.cs b/PluginExample/SettingsForm.Designer.cs deleted file mode 100644 index c272dd6db..000000000 --- a/PluginExample/SettingsForm.Designer.cs +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -namespace PluginExample -{ - partial class SettingsForm - { - /// - /// Designer variable used to keep track of non-visual components. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Disposes resources used by the form. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) { - if (components != null) { - components.Dispose(); - } - } - base.Dispose(disposing); - } - - /// - /// This method is required for Windows Forms designer support. - /// Do not change the method contents inside the source code editor. The Forms designer might - /// not be able to load this method if it was changed manually. - /// - private void InitializeComponent() - { - this.checkBox1 = new GreenshotPlugin.Controls.GreenshotCheckBox(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.checkBox2 = new GreenshotPlugin.Controls.GreenshotCheckBox(); - this.SuspendLayout(); - // - // checkBox1 - // - this.checkBox1.Location = new System.Drawing.Point(12, 12); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.PropertyName = "AnnotationProcessor"; - this.checkBox1.SectionName = "PluginExample"; - this.checkBox1.Size = new System.Drawing.Size(152, 24); - this.checkBox1.TabIndex = 0; - this.checkBox1.Text = "Annotation processor"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // button1 - // - this.button1.Location = new System.Drawing.Point(12, 72); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 1; - this.button1.Text = "Ok"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.Button1Click); - // - // button2 - // - this.button2.Location = new System.Drawing.Point(100, 72); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 2; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.Button2Click); - // - // checkBox2 - // - this.checkBox2.Location = new System.Drawing.Point(12, 42); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.PropertyName = "GreyScaleProcessor"; - this.checkBox2.SectionName = "PluginExample"; - this.checkBox2.Size = new System.Drawing.Size(152, 24); - this.checkBox2.TabIndex = 3; - this.checkBox2.Text = "Greyscale processor"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // SettingsForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(200, 106); - this.Controls.Add(this.checkBox2); - this.Controls.Add(this.button2); - this.Controls.Add(this.button1); - this.Controls.Add(this.checkBox1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Name = "SettingsForm"; - this.Text = "Plugin example settings"; - this.ResumeLayout(false); - - } - private GreenshotPlugin.Controls.GreenshotCheckBox checkBox2; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button1; - private GreenshotPlugin.Controls.GreenshotCheckBox checkBox1; - } -} diff --git a/PluginExample/SettingsForm.cs b/PluginExample/SettingsForm.cs deleted file mode 100644 index 6bdcb2a73..000000000 --- a/PluginExample/SettingsForm.cs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using System; -using System.Drawing; -using System.Windows.Forms; - -using Greenshot.IniFile; - -namespace PluginExample { - /// - /// Description of SettingsForm. - /// - public partial class SettingsForm : ExampleForm { - private static PluginExampleConfiguration conf = IniConfig.GetIniSection(); - - public SettingsForm() { - // - // The InitializeComponent() call is required for Windows Forms designer support. - // - InitializeComponent(); - } - - void Button1Click(object sender, EventArgs e) { - DialogResult = DialogResult.OK; - } - - void Button2Click(object sender, EventArgs e) { - DialogResult = DialogResult.Cancel; - } - } -} diff --git a/PluginExample/SimpleOutputDestination.cs b/PluginExample/SimpleOutputDestination.cs deleted file mode 100644 index 02973fc51..000000000 --- a/PluginExample/SimpleOutputDestination.cs +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/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 . - */ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Windows.Forms; -using System.Text.RegularExpressions; - -using Greenshot.Plugin; -using GreenshotPlugin.Controls; -using GreenshotPlugin.Core; -using Greenshot.IniFile; - -namespace PluginExample { - /// - /// This destination shows a simple save to... - /// - public class SimpleOutputDestination : AbstractDestination { - private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(SimpleOutputDestination)); - private IGreenshotHost host; - - public SimpleOutputDestination(IGreenshotHost host) { - this.host = host; - } - - public override string Designation { - get { - return "SimpleOutput"; - } - } - - public override string Description { - get { - return Designation; - } - } - - public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { - ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description); - CoreConfiguration config = IniConfig.GetIniSection(); - OutputSettings outputSettings = new OutputSettings(); - - string file = FilenameHelper.GetFilename(OutputFormat.png, null); - string filePath = Path.Combine(config.OutputFilePath, file); - using (FileStream stream = new FileStream(filePath, FileMode.Create)) { - using (Image image = surface.GetImageForExport()) { - ImageOutput.SaveToStream(image, stream, outputSettings); - } - } - exportInformation.Filepath = filePath; - exportInformation.ExportMade = true; - ProcessExport(exportInformation, surface); - return exportInformation; - } - } -} diff --git a/build.ps1 b/build.ps1 index 7e7e2f1d7..59bab841c 100644 --- a/build.ps1 +++ b/build.ps1 @@ -3,10 +3,10 @@ # Assumes the installation of Microsoft .NET Framework 4.5 ################################################################ # Greenshot - a free and open source screenshot tool -# Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom +# Copyright (C) 2007-2015 Thomas Braun, Jens Klingen, Robin Krom # # For more information see: http://getgreenshot.org/ -# The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ +# 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 diff --git a/prebuild.ps1 b/prebuild.ps1 index 53878727f..60d3be684 100644 --- a/prebuild.ps1 +++ b/prebuild.ps1 @@ -3,10 +3,10 @@ # Assumes the installation of Microsoft .NET Framework 4.5 ################################################################ # Greenshot - a free and open source screenshot tool -# Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom +# Copyright (C) 2007-2016 Thomas Braun, Jens Klingen, Robin Krom # # For more information see: http://getgreenshot.org/ -# The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ +# 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