mirror of
https://github.com/greenshot/greenshot
synced 2025-08-22 06:23:24 -07:00
Merge branch 'release/1.3' into patch-4
This commit is contained in:
commit
bf65fe0f2e
53 changed files with 1067 additions and 278 deletions
|
@ -21,4 +21,4 @@ Being easy to understand and configurable, Greenshot is an efficient tool for pr
|
||||||
|
|
||||||
About this repository
|
About this repository
|
||||||
---------------------
|
---------------------
|
||||||
This repository is for Greenshot 1.3, currently in development, but is the next planed release
|
This repository is for Greenshot 1.3, currently in development, but is the next planned release
|
||||||
|
|
|
@ -169,20 +169,20 @@ Root: HKLM; Subkey: Software\Classes\Greenshot; ValueType: none; ValueName: {#Ex
|
||||||
|
|
||||||
; Create the startup entries if requested to do so
|
; Create the startup entries if requested to do so
|
||||||
; HKEY_LOCAL_USER - for current user only
|
; HKEY_LOCAL_USER - for current user only
|
||||||
Root: HKCU; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: {#ExeName}; ValueData: {app}\{#ExeName}.exe; Permissions: users-modify; Flags: uninsdeletevalue noerror; Tasks: startup; Check: IsRegularUser
|
Root: HKCU; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: {#ExeName}; ValueData: """{app}\{#ExeName}.exe"""; Permissions: users-modify; Flags: uninsdeletevalue noerror; Tasks: startup; Check: IsRegularUser
|
||||||
; HKEY_LOCAL_MACHINE - for all users when admin
|
; HKEY_LOCAL_MACHINE - for all users when admin
|
||||||
Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: {#ExeName}; ValueData: {app}\{#ExeName}.exe; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Tasks: startup; Check: not IsRegularUser
|
Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: {#ExeName}; ValueData: """{app}\{#ExeName}.exe"""; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Tasks: startup; Check: not IsRegularUser
|
||||||
|
|
||||||
; Register our own filetype for all users
|
; Register our own filetype for all users
|
||||||
; HKEY_LOCAL_USER - for current user only
|
; HKEY_LOCAL_USER - for current user only
|
||||||
Root: HKCU; Subkey: Software\Classes\.greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot"; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
|
Root: HKCU; Subkey: Software\Classes\.greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot"; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
|
||||||
Root: HKCU; Subkey: Software\Classes\Greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot File"; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
|
Root: HKCU; Subkey: Software\Classes\Greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot File"; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
|
||||||
Root: HKCU; Subkey: Software\Classes\Greenshot\DefaultIcon; ValueType: string; ValueName: ""; ValueData: "{app}\Greenshot.EXE,0"; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
|
Root: HKCU; Subkey: Software\Classes\Greenshot\DefaultIcon; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE,0"""; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
|
||||||
Root: HKCU; Subkey: Software\Classes\Greenshot\shell\open\command; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE"" --openfile ""%1"""; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
|
Root: HKCU; Subkey: Software\Classes\Greenshot\shell\open\command; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE"" --openfile ""%1"""; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
|
||||||
; HKEY_LOCAL_MACHINE - for all users when admin
|
; HKEY_LOCAL_MACHINE - for all users when admin
|
||||||
Root: HKLM; Subkey: Software\Classes\.greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot"; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
|
Root: HKLM; Subkey: Software\Classes\.greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot"; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
|
||||||
Root: HKLM; Subkey: Software\Classes\Greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot File"; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
|
Root: HKLM; Subkey: Software\Classes\Greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot File"; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
|
||||||
Root: HKLM; Subkey: Software\Classes\Greenshot\DefaultIcon; ValueType: string; ValueName: ""; ValueData: "{app}\Greenshot.EXE,0"; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
|
Root: HKLM; Subkey: Software\Classes\Greenshot\DefaultIcon; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE,0"""; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
|
||||||
Root: HKLM; Subkey: Software\Classes\Greenshot\shell\open\command; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE"" --openfile ""%1"""; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
|
Root: HKLM; Subkey: Software\Classes\Greenshot\shell\open\command; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE"" --openfile ""%1"""; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
|
@ -215,7 +215,7 @@ Name: startup; Description: {cm:startup}
|
||||||
dexfranconia=Frängisch (Deutsch)
|
dexfranconia=Frängisch (Deutsch)
|
||||||
arSY=العربية
|
arSY=العربية
|
||||||
caCA=Català
|
caCA=Català
|
||||||
csCZ=Ceština
|
csCZ=Čeština
|
||||||
daDK=Dansk
|
daDK=Dansk
|
||||||
elGR=ελληνικά
|
elGR=ελληνικά
|
||||||
esES=Español
|
esES=Español
|
||||||
|
|
|
@ -6,8 +6,7 @@
|
||||||
<RepositoryUrl>https://github.com/greenshot/greenshot</RepositoryUrl>
|
<RepositoryUrl>https://github.com/greenshot/greenshot</RepositoryUrl>
|
||||||
<RepositoryType>git</RepositoryType>
|
<RepositoryType>git</RepositoryType>
|
||||||
<PackageProjectUrl>https://github.com/greenshot/greenshot</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/greenshot/greenshot</PackageProjectUrl>
|
||||||
<PackageLicenseUrl>https://www.gnu.org/licenses/gpl.html</PackageLicenseUrl>
|
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
|
||||||
<PackageLicenseExpression>GPL</PackageLicenseExpression>
|
|
||||||
<LangVersion>9</LangVersion>
|
<LangVersion>9</LangVersion>
|
||||||
<UseWPF>true</UseWPF>
|
<UseWPF>true</UseWPF>
|
||||||
<UseWindowsForms>true</UseWindowsForms>
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
@ -47,11 +46,11 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="!$(MSBuildProjectName.Contains('Tests')) And $(MSBuildProjectName.StartsWith('Greenshot'))">
|
<ItemGroup Condition="!$(MSBuildProjectName.Contains('Tests')) And $(MSBuildProjectName.StartsWith('Greenshot'))">
|
||||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.4.194">
|
<PackageReference Include="Nerdbank.GitVersioning" Version="3.4.255">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All"/>
|
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -21,8 +21,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Greenshot.Base.UnmanagedHelpers;
|
|
||||||
using Greenshot.Base.UnmanagedHelpers.Enums;
|
|
||||||
using log4net;
|
using log4net;
|
||||||
|
|
||||||
namespace Greenshot.Base.Controls
|
namespace Greenshot.Base.Controls
|
||||||
|
@ -104,6 +102,10 @@ namespace Greenshot.Base.Controls
|
||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void Timer_Tick(object sender, EventArgs e)
|
private void Timer_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
if (!Visible)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Animate();
|
Animate();
|
||||||
|
|
12
src/Greenshot.Base/Controls/GreenshotDoubleClickButton.cs
Normal file
12
src/Greenshot.Base/Controls/GreenshotDoubleClickButton.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Controls
|
||||||
|
{
|
||||||
|
public class GreenshotDoubleClickButton : Button
|
||||||
|
{
|
||||||
|
public GreenshotDoubleClickButton()
|
||||||
|
{
|
||||||
|
SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,11 +19,14 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
#if DEBUG
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.ComponentModel.Design;
|
using System.ComponentModel.Design;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
#endif
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Greenshot.Base.Core;
|
using Greenshot.Base.Core;
|
||||||
|
@ -40,24 +43,33 @@ namespace Greenshot.Base.Controls
|
||||||
private static readonly ILog LOG = LogManager.GetLogger(typeof(GreenshotForm));
|
private static readonly ILog LOG = LogManager.GetLogger(typeof(GreenshotForm));
|
||||||
protected static CoreConfiguration coreConfiguration;
|
protected static CoreConfiguration coreConfiguration;
|
||||||
private static readonly IDictionary<Type, FieldInfo[]> reflectionCache = new Dictionary<Type, FieldInfo[]>();
|
private static readonly IDictionary<Type, FieldInfo[]> reflectionCache = new Dictionary<Type, FieldInfo[]>();
|
||||||
|
#if DEBUG
|
||||||
private IComponentChangeService m_changeService;
|
private IComponentChangeService m_changeService;
|
||||||
private bool _isDesignModeLanguageSet;
|
private bool _isDesignModeLanguageSet;
|
||||||
private bool _applyLanguageManually;
|
|
||||||
private bool _storeFieldsManually;
|
|
||||||
private IDictionary<string, Control> _designTimeControls;
|
private IDictionary<string, Control> _designTimeControls;
|
||||||
private IDictionary<string, ToolStripItem> _designTimeToolStripItems;
|
private IDictionary<string, ToolStripItem> _designTimeToolStripItems;
|
||||||
|
#endif
|
||||||
|
private bool _applyLanguageManually;
|
||||||
|
private bool _storeFieldsManually;
|
||||||
|
|
||||||
static GreenshotForm()
|
static GreenshotForm()
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
if (!IsInDesignMode)
|
if (!IsInDesignMode)
|
||||||
{
|
{
|
||||||
|
#endif
|
||||||
coreConfiguration = IniConfig.GetIniSection<CoreConfiguration>();
|
coreConfiguration = IniConfig.GetIniSection<CoreConfiguration>();
|
||||||
|
#if DEBUG
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
[Category("Greenshot"), DefaultValue(null), Description("Specifies key of the language file to use when displaying the text.")]
|
[Category("Greenshot"), DefaultValue(null), Description("Specifies key of the language file to use when displaying the text.")]
|
||||||
|
#endif
|
||||||
public string LanguageKey { get; set; }
|
public string LanguageKey { get; set; }
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used to check the designmode during a constructor
|
/// Used to check the designmode during a constructor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -71,6 +83,7 @@ namespace Greenshot.Base.Controls
|
||||||
(Application.ExecutablePath.IndexOf("wdexpress.exe", StringComparison.OrdinalIgnoreCase) > -1));
|
(Application.ExecutablePath.IndexOf("wdexpress.exe", StringComparison.OrdinalIgnoreCase) > -1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected bool ManualLanguageApply
|
protected bool ManualLanguageApply
|
||||||
{
|
{
|
||||||
|
@ -89,6 +102,7 @@ namespace Greenshot.Base.Controls
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected bool ToFront { get; set; }
|
protected bool ToFront { get; set; }
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Code to initialize the language etc during design time
|
/// Code to initialize the language etc during design time
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -106,19 +120,18 @@ namespace Greenshot.Base.Controls
|
||||||
|
|
||||||
// this "type"
|
// this "type"
|
||||||
Assembly currentAssembly = GetType().Assembly;
|
Assembly currentAssembly = GetType().Assembly;
|
||||||
if (typeResService != null)
|
if (typeResService == null) return;
|
||||||
{
|
|
||||||
string assemblyPath = typeResService.GetPathOfAssembly(currentAssembly.GetName());
|
|
||||||
string assemblyDirectory = Path.GetDirectoryName(assemblyPath);
|
|
||||||
if (assemblyDirectory != null && !Language.AddLanguageFilePath(Path.Combine(assemblyDirectory, @"..\..\Greenshot\Languages\")))
|
|
||||||
{
|
|
||||||
Language.AddLanguageFilePath(Path.Combine(assemblyDirectory, @"..\..\..\Greenshot\Languages\"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (assemblyDirectory != null && !Language.AddLanguageFilePath(Path.Combine(assemblyDirectory, @"..\..\Languages\")))
|
string assemblyPath = typeResService.GetPathOfAssembly(currentAssembly.GetName());
|
||||||
{
|
string assemblyDirectory = Path.GetDirectoryName(assemblyPath);
|
||||||
Language.AddLanguageFilePath(Path.Combine(assemblyDirectory, @"..\..\..\Languages\"));
|
if (assemblyDirectory != null && !Language.AddLanguageFilePath(Path.Combine(assemblyDirectory, @"..\..\Greenshot\Languages\")))
|
||||||
}
|
{
|
||||||
|
Language.AddLanguageFilePath(Path.Combine(assemblyDirectory, @"..\..\..\Greenshot\Languages\"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (assemblyDirectory != null && !Language.AddLanguageFilePath(Path.Combine(assemblyDirectory, @"..\..\Languages\")))
|
||||||
|
{
|
||||||
|
Language.AddLanguageFilePath(Path.Combine(assemblyDirectory, @"..\..\..\Languages\"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -151,14 +164,17 @@ namespace Greenshot.Base.Controls
|
||||||
|
|
||||||
base.OnPaint(e);
|
base.OnPaint(e);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected override void OnLoad(EventArgs e)
|
protected override void OnLoad(EventArgs e)
|
||||||
{
|
{
|
||||||
// Every GreenshotForm should have it's default icon
|
// Every GreenshotForm should have it's default icon
|
||||||
// And it might not ne needed for a Tool Window, but still for the task manager / switcher it's important
|
// And it might not ne needed for a Tool Window, but still for the task manager / switcher it's important
|
||||||
Icon = GreenshotResources.GetGreenshotIcon();
|
Icon = GreenshotResources.GetGreenshotIcon();
|
||||||
|
#if DEBUG
|
||||||
if (!DesignMode)
|
if (!DesignMode)
|
||||||
{
|
{
|
||||||
|
#endif
|
||||||
if (!_applyLanguageManually)
|
if (!_applyLanguageManually)
|
||||||
{
|
{
|
||||||
ApplyLanguage();
|
ApplyLanguage();
|
||||||
|
@ -166,6 +182,7 @@ namespace Greenshot.Base.Controls
|
||||||
|
|
||||||
FillFields();
|
FillFields();
|
||||||
base.OnLoad(e);
|
base.OnLoad(e);
|
||||||
|
#if DEBUG
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -174,6 +191,7 @@ namespace Greenshot.Base.Controls
|
||||||
base.OnLoad(e);
|
base.OnLoad(e);
|
||||||
ApplyLanguage();
|
ApplyLanguage();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -207,6 +225,7 @@ namespace Greenshot.Base.Controls
|
||||||
base.OnClosed(e);
|
base.OnClosed(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This override allows the control to register event handlers for IComponentChangeService events
|
/// This override allows the control to register event handlers for IComponentChangeService events
|
||||||
/// at the time the control is sited, which happens only in design mode.
|
/// at the time the control is sited, which happens only in design mode.
|
||||||
|
@ -322,6 +341,7 @@ namespace Greenshot.Base.Controls
|
||||||
|
|
||||||
base.Dispose(disposing);
|
base.Dispose(disposing);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected void ApplyLanguage(ToolStripItem applyTo, string languageKey)
|
protected void ApplyLanguage(ToolStripItem applyTo, string languageKey)
|
||||||
{
|
{
|
||||||
|
@ -454,7 +474,7 @@ namespace Greenshot.Base.Controls
|
||||||
ApplyLanguage(applyToControl);
|
ApplyLanguage(applyToControl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if DEBUG
|
||||||
if (DesignMode)
|
if (DesignMode)
|
||||||
{
|
{
|
||||||
foreach (Control designControl in _designTimeControls.Values)
|
foreach (Control designControl in _designTimeControls.Values)
|
||||||
|
@ -467,6 +487,7 @@ namespace Greenshot.Base.Controls
|
||||||
ApplyLanguage(designToolStripItem);
|
ApplyLanguage(designToolStripItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -515,57 +536,55 @@ namespace Greenshot.Base.Controls
|
||||||
{
|
{
|
||||||
var controlObject = field.GetValue(this);
|
var controlObject = field.GetValue(this);
|
||||||
IGreenshotConfigBindable configBindable = controlObject as IGreenshotConfigBindable;
|
IGreenshotConfigBindable configBindable = controlObject as IGreenshotConfigBindable;
|
||||||
if (!string.IsNullOrEmpty(configBindable?.SectionName) && !string.IsNullOrEmpty(configBindable.PropertyName))
|
if (string.IsNullOrEmpty(configBindable?.SectionName) || string.IsNullOrEmpty(configBindable.PropertyName)) continue;
|
||||||
|
|
||||||
|
IniSection section = IniConfig.GetIniSection(configBindable.SectionName);
|
||||||
|
if (section == null) continue;
|
||||||
|
|
||||||
|
if (!section.Values.TryGetValue(configBindable.PropertyName, out var iniValue))
|
||||||
{
|
{
|
||||||
IniSection section = IniConfig.GetIniSection(configBindable.SectionName);
|
LOG.DebugFormat("Wrong property '{0}' configured for field '{1}'", configBindable.PropertyName, field.Name);
|
||||||
if (section != null)
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controlObject is CheckBox checkBox)
|
||||||
|
{
|
||||||
|
checkBox.Checked = (bool) iniValue.Value;
|
||||||
|
checkBox.Enabled = !iniValue.IsFixed;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controlObject is RadioButton radíoButton)
|
||||||
|
{
|
||||||
|
radíoButton.Checked = (bool) iniValue.Value;
|
||||||
|
radíoButton.Enabled = !iniValue.IsFixed;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controlObject is TextBox textBox)
|
||||||
|
{
|
||||||
|
if (controlObject is HotkeyControl hotkeyControl)
|
||||||
{
|
{
|
||||||
if (!section.Values.TryGetValue(configBindable.PropertyName, out var iniValue))
|
string hotkeyValue = (string) iniValue.Value;
|
||||||
|
if (!string.IsNullOrEmpty(hotkeyValue))
|
||||||
{
|
{
|
||||||
LOG.DebugFormat("Wrong property '{0}' configured for field '{1}'", configBindable.PropertyName, field.Name);
|
hotkeyControl.SetHotkey(hotkeyValue);
|
||||||
continue;
|
hotkeyControl.Enabled = !iniValue.IsFixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (controlObject is CheckBox checkBox)
|
continue;
|
||||||
{
|
|
||||||
checkBox.Checked = (bool) iniValue.Value;
|
|
||||||
checkBox.Enabled = !iniValue.IsFixed;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (controlObject is RadioButton radíoButton)
|
|
||||||
{
|
|
||||||
radíoButton.Checked = (bool) iniValue.Value;
|
|
||||||
radíoButton.Enabled = !iniValue.IsFixed;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (controlObject is TextBox textBox)
|
|
||||||
{
|
|
||||||
if (controlObject is HotkeyControl hotkeyControl)
|
|
||||||
{
|
|
||||||
string hotkeyValue = (string) iniValue.Value;
|
|
||||||
if (!string.IsNullOrEmpty(hotkeyValue))
|
|
||||||
{
|
|
||||||
hotkeyControl.SetHotkey(hotkeyValue);
|
|
||||||
hotkeyControl.Enabled = !iniValue.IsFixed;
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
textBox.Text = iniValue.ToString();
|
|
||||||
textBox.Enabled = !iniValue.IsFixed;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (controlObject is GreenshotComboBox comboxBox)
|
|
||||||
{
|
|
||||||
comboxBox.Populate(iniValue.ValueType);
|
|
||||||
comboxBox.SetValue((Enum) iniValue.Value);
|
|
||||||
comboxBox.Enabled = !iniValue.IsFixed;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
textBox.Text = iniValue.ToString();
|
||||||
|
textBox.Enabled = !iniValue.IsFixed;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controlObject is GreenshotComboBox comboxBox)
|
||||||
|
{
|
||||||
|
comboxBox.Populate(iniValue.ValueType);
|
||||||
|
comboxBox.SetValue((Enum) iniValue.Value);
|
||||||
|
comboxBox.Enabled = !iniValue.IsFixed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -587,50 +606,48 @@ namespace Greenshot.Base.Controls
|
||||||
var controlObject = field.GetValue(this);
|
var controlObject = field.GetValue(this);
|
||||||
IGreenshotConfigBindable configBindable = controlObject as IGreenshotConfigBindable;
|
IGreenshotConfigBindable configBindable = controlObject as IGreenshotConfigBindable;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(configBindable?.SectionName) && !string.IsNullOrEmpty(configBindable.PropertyName))
|
if (string.IsNullOrEmpty(configBindable?.SectionName) || string.IsNullOrEmpty(configBindable.PropertyName)) continue;
|
||||||
|
|
||||||
|
IniSection section = IniConfig.GetIniSection(configBindable.SectionName);
|
||||||
|
if (section == null) continue;
|
||||||
|
|
||||||
|
if (!section.Values.TryGetValue(configBindable.PropertyName, out var iniValue))
|
||||||
{
|
{
|
||||||
IniSection section = IniConfig.GetIniSection(configBindable.SectionName);
|
continue;
|
||||||
if (section != null)
|
}
|
||||||
|
|
||||||
|
if (controlObject is CheckBox checkBox)
|
||||||
|
{
|
||||||
|
iniValue.Value = checkBox.Checked;
|
||||||
|
iniDirty = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controlObject is RadioButton radioButton)
|
||||||
|
{
|
||||||
|
iniValue.Value = radioButton.Checked;
|
||||||
|
iniDirty = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controlObject is TextBox textBox)
|
||||||
|
{
|
||||||
|
if (controlObject is HotkeyControl hotkeyControl)
|
||||||
{
|
{
|
||||||
if (!section.Values.TryGetValue(configBindable.PropertyName, out var iniValue))
|
iniValue.Value = hotkeyControl.ToString();
|
||||||
{
|
iniDirty = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
if (controlObject is CheckBox checkBox)
|
|
||||||
{
|
|
||||||
iniValue.Value = checkBox.Checked;
|
|
||||||
iniDirty = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (controlObject is RadioButton radioButton)
|
|
||||||
{
|
|
||||||
iniValue.Value = radioButton.Checked;
|
|
||||||
iniDirty = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (controlObject is TextBox textBox)
|
|
||||||
{
|
|
||||||
if (controlObject is HotkeyControl hotkeyControl)
|
|
||||||
{
|
|
||||||
iniValue.Value = hotkeyControl.ToString();
|
|
||||||
iniDirty = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
iniValue.UseValueOrDefault(textBox.Text);
|
|
||||||
iniDirty = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (controlObject is GreenshotComboBox comboxBox)
|
|
||||||
{
|
|
||||||
iniValue.Value = comboxBox.GetSelectedEnum();
|
|
||||||
iniDirty = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iniValue.UseValueOrDefault(textBox.Text);
|
||||||
|
iniDirty = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (controlObject is GreenshotComboBox comboxBox)
|
||||||
|
{
|
||||||
|
iniValue.Value = comboxBox.GetSelectedEnum();
|
||||||
|
iniDirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Greenshot.Base.Core.Enums;
|
using Greenshot.Base.Core.Enums;
|
||||||
|
@ -386,7 +387,7 @@ namespace Greenshot.Base.Core
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool IsExperimentalFeatureEnabled(string experimentalFeature)
|
public bool IsExperimentalFeatureEnabled(string experimentalFeature)
|
||||||
{
|
{
|
||||||
return (ExperimentalFeatures != null && ExperimentalFeatures.Contains(experimentalFeature));
|
return ExperimentalFeatures != null && ExperimentalFeatures.Contains(experimentalFeature);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -398,17 +399,17 @@ namespace Greenshot.Base.Core
|
||||||
{
|
{
|
||||||
switch (property)
|
switch (property)
|
||||||
{
|
{
|
||||||
case "PluginWhitelist":
|
case nameof(ExcludePlugins):
|
||||||
case "PluginBacklist":
|
case nameof(IncludePlugins):
|
||||||
return new List<string>();
|
return new List<string>();
|
||||||
case "OutputFileAsFullpath":
|
case nameof(OutputFileAsFullpath):
|
||||||
if (IniConfig.IsPortable)
|
if (IniConfig.IsPortable)
|
||||||
{
|
{
|
||||||
return Path.Combine(Application.StartupPath, @"..\..\Documents\Pictures\Greenshots\dummy.png");
|
return Path.Combine(Application.StartupPath, @"..\..\Documents\Pictures\Greenshots\dummy.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "dummy.png");
|
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "dummy.png");
|
||||||
case "OutputFilePath":
|
case nameof(OutputFilePath):
|
||||||
if (IniConfig.IsPortable)
|
if (IniConfig.IsPortable)
|
||||||
{
|
{
|
||||||
string pafOutputFilePath = Path.Combine(Application.StartupPath, @"..\..\Documents\Pictures\Greenshots");
|
string pafOutputFilePath = Path.Combine(Application.StartupPath, @"..\..\Documents\Pictures\Greenshots");
|
||||||
|
@ -432,16 +433,16 @@ namespace Greenshot.Base.Core
|
||||||
}
|
}
|
||||||
|
|
||||||
return Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
|
return Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
|
||||||
case "DWMBackgroundColor":
|
case nameof(DWMBackgroundColor):
|
||||||
return Color.Transparent;
|
return Color.Transparent;
|
||||||
case "ActiveTitleFixes":
|
case nameof(ActiveTitleFixes):
|
||||||
return new List<string>
|
return new List<string>
|
||||||
{
|
{
|
||||||
"Firefox",
|
"Firefox",
|
||||||
"IE",
|
"IE",
|
||||||
"Chrome"
|
"Chrome"
|
||||||
};
|
};
|
||||||
case "TitleFixMatcher":
|
case nameof(TitleFixMatcher):
|
||||||
return new Dictionary<string, string>
|
return new Dictionary<string, string>
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -454,7 +455,7 @@ namespace Greenshot.Base.Core
|
||||||
"Chrome", " - Google Chrome.*"
|
"Chrome", " - Google Chrome.*"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
case "TitleFixReplacer":
|
case nameof(TitleFixReplacer):
|
||||||
return new Dictionary<string, string>
|
return new Dictionary<string, string>
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -509,7 +510,7 @@ namespace Greenshot.Base.Core
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Store version, this can be used later to fix settings after an update
|
// Store version, this can be used later to fix settings after an update
|
||||||
LastSaveWithVersion = Assembly.GetEntryAssembly().GetName().Version.ToString();
|
LastSaveWithVersion = Assembly.GetEntryAssembly()?.GetName().Version.ToString();
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@ -530,7 +531,7 @@ namespace Greenshot.Base.Core
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Store version, this can be used later to fix settings after an update
|
// Store version, this can be used later to fix settings after an update
|
||||||
LastSaveWithVersion = Assembly.GetEntryAssembly().GetName().Version.ToString();
|
LastSaveWithVersion = Assembly.GetEntryAssembly()?.GetName().Version.ToString();
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@ -559,11 +560,6 @@ namespace Greenshot.Base.Core
|
||||||
{
|
{
|
||||||
ExcludeDestinations.Remove("OneNote");
|
ExcludeDestinations.Remove("OneNote");
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// TODO: Remove with the release
|
|
||||||
ExcludeDestinations.Remove("OneNote");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OutputDestinations == null)
|
if (OutputDestinations == null)
|
||||||
|
@ -662,6 +658,16 @@ namespace Greenshot.Base.Core
|
||||||
{
|
{
|
||||||
WebRequestReadWriteTimeout = 100;
|
WebRequestReadWriteTimeout = 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Workaround for the Windows 11 clipboard issue found here: https://github.com/greenshot/greenshot/issues/348
|
||||||
|
if (WindowsVersion.IsWindows11OrLater)
|
||||||
|
{
|
||||||
|
// If the format DIB is used, remove it and replace it with BITMAP.
|
||||||
|
if (ClipboardFormats.Contains(ClipboardFormat.DIB))
|
||||||
|
{
|
||||||
|
ClipboardFormats = ClipboardFormats.Where(cf => cf != ClipboardFormat.DIB).Append(ClipboardFormat.BITMAP).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -114,6 +114,10 @@ namespace Greenshot.Base.Core
|
||||||
/// <returns>uint</returns>
|
/// <returns>uint</returns>
|
||||||
public static uint GetDpi(POINT location)
|
public static uint GetDpi(POINT location)
|
||||||
{
|
{
|
||||||
|
if (!WindowsVersion.IsWindows81OrLater)
|
||||||
|
{
|
||||||
|
return DefaultScreenDpi;
|
||||||
|
}
|
||||||
RECT rect = new RECT(location.X, location.Y, 1, 1);
|
RECT rect = new RECT(location.X, location.Y, 1, 1);
|
||||||
IntPtr hMonitor = User32.MonitorFromRect(ref rect, User32.MONITOR_DEFAULTTONEAREST);
|
IntPtr hMonitor = User32.MonitorFromRect(ref rect, User32.MONITOR_DEFAULTTONEAREST);
|
||||||
var result = GetDpiForMonitor(hMonitor, MonitorDpiType.EffectiveDpi, out var dpiX, out var dpiY);
|
var result = GetDpiForMonitor(hMonitor, MonitorDpiType.EffectiveDpi, out var dpiX, out var dpiY);
|
||||||
|
@ -172,7 +176,7 @@ namespace Greenshot.Base.Core
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="hWnd">IntPtr</param>
|
/// <param name="hWnd">IntPtr</param>
|
||||||
/// <returns>uint with dpi</returns>
|
/// <returns>uint with dpi</returns>
|
||||||
[DllImport("User32.dll")]
|
[DllImport("user32.dll")]
|
||||||
private static extern uint GetDpiForWindow(IntPtr hWnd);
|
private static extern uint GetDpiForWindow(IntPtr hWnd);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -193,7 +197,7 @@ namespace Greenshot.Base.Core
|
||||||
/// Returns the system DPI.
|
/// Returns the system DPI.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>uint with the system DPI</returns>
|
/// <returns>uint with the system DPI</returns>
|
||||||
[DllImport("User32.dll")]
|
[DllImport("user32.dll")]
|
||||||
private static extern uint GetDpiForSystem();
|
private static extern uint GetDpiForSystem();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -68,7 +68,15 @@ namespace Greenshot.Base.Core
|
||||||
if (!string.IsNullOrEmpty(assemblyFileVersionAttribute?.Version))
|
if (!string.IsNullOrEmpty(assemblyFileVersionAttribute?.Version))
|
||||||
{
|
{
|
||||||
var assemblyFileVersion = new Version(assemblyFileVersionAttribute.Version);
|
var assemblyFileVersion = new Version(assemblyFileVersionAttribute.Version);
|
||||||
greenshotVersion = assemblyFileVersion.ToString(3);
|
greenshotVersion = assemblyFileVersion.ToString(2);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
greenshotVersion = assemblyFileVersion.ToString(3);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!shortVersion)
|
if (!shortVersion)
|
||||||
|
|
|
@ -21,6 +21,12 @@ namespace Greenshot.Base.Core
|
||||||
/// <returns>true if we are running on Windows 10</returns>
|
/// <returns>true if we are running on Windows 10</returns>
|
||||||
public static bool IsWindows10 { get; } = WinVersion.Major == 10;
|
public static bool IsWindows10 { get; } = WinVersion.Major == 10;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test if the current OS is Windows 11 or later
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>true if we are running on Windows 11 or later</returns>
|
||||||
|
public static bool IsWindows11OrLater { get; } = WinVersion.Major == 10 && WinVersion.Build >= 22000;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test if the current OS is Windows 10 or later
|
/// Test if the current OS is Windows 10 or later
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapplo.HttpExtensions.JsonNet" Version="1.0.10" />
|
<PackageReference Include="Dapplo.HttpExtensions.JsonNet" Version="1.0.16" />
|
||||||
<PackageReference Include="HtmlAgilityPack" Version="1.11.33" />
|
<PackageReference Include="HtmlAgilityPack" Version="1.11.40" />
|
||||||
<PackageReference Include="log4net" version="2.0.12" />
|
<PackageReference Include="log4net" version="2.0.14" />
|
||||||
<PackageReference Include="Svg" Version="3.2.3" />
|
<PackageReference Include="Svg" Version="3.4.0" />
|
||||||
<Reference Include="Accessibility" />
|
<Reference Include="Accessibility" />
|
||||||
<Reference Include="CustomMarshalers" />
|
<Reference Include="CustomMarshalers" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -137,7 +137,7 @@ namespace Greenshot.Base.IniFile
|
||||||
{
|
{
|
||||||
AssemblyProductAttribute[] assemblyProductAttributes =
|
AssemblyProductAttribute[] assemblyProductAttributes =
|
||||||
Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false) as AssemblyProductAttribute[];
|
Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false) as AssemblyProductAttribute[];
|
||||||
if (assemblyProductAttributes != null && assemblyProductAttributes.Length > 0)
|
if (assemblyProductAttributes is { Length: > 0 })
|
||||||
{
|
{
|
||||||
string productName = assemblyProductAttributes[0].Product;
|
string productName = assemblyProductAttributes[0].Product;
|
||||||
Log.InfoFormat("Using ProductName {0}", productName);
|
Log.InfoFormat("Using ProductName {0}", productName);
|
||||||
|
|
|
@ -143,7 +143,7 @@ namespace Greenshot.Base.IniFile
|
||||||
IniPropertyAttribute iniPropertyAttribute = (IniPropertyAttribute) fieldInfo.GetCustomAttributes(typeof(IniPropertyAttribute), false)[0];
|
IniPropertyAttribute iniPropertyAttribute = (IniPropertyAttribute) fieldInfo.GetCustomAttributes(typeof(IniPropertyAttribute), false)[0];
|
||||||
if (!Values.ContainsKey(iniPropertyAttribute.Name))
|
if (!Values.ContainsKey(iniPropertyAttribute.Name))
|
||||||
{
|
{
|
||||||
Values.Add(iniPropertyAttribute.Name, new IniValue(this, fieldInfo, iniPropertyAttribute));
|
Values[iniPropertyAttribute.Name] = new IniValue(this, fieldInfo, iniPropertyAttribute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ namespace Greenshot.Base.IniFile
|
||||||
if (!Values.ContainsKey(propertyInfo.Name))
|
if (!Values.ContainsKey(propertyInfo.Name))
|
||||||
{
|
{
|
||||||
IniPropertyAttribute iniPropertyAttribute = (IniPropertyAttribute) propertyInfo.GetCustomAttributes(typeof(IniPropertyAttribute), false)[0];
|
IniPropertyAttribute iniPropertyAttribute = (IniPropertyAttribute) propertyInfo.GetCustomAttributes(typeof(IniPropertyAttribute), false)[0];
|
||||||
Values.Add(iniPropertyAttribute.Name, new IniValue(this, propertyInfo, iniPropertyAttribute));
|
Values[iniPropertyAttribute.Name] = new IniValue(this, propertyInfo, iniPropertyAttribute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,10 @@ namespace Greenshot.Base.Interfaces.Drawing
|
||||||
bool HasIntersectingFilters(Rectangle clipRectangle);
|
bool HasIntersectingFilters(Rectangle clipRectangle);
|
||||||
bool IntersectsWith(Rectangle clipRectangle);
|
bool IntersectsWith(Rectangle clipRectangle);
|
||||||
void Draw(Graphics g, Bitmap bitmap, RenderMode renderMode, Rectangle clipRectangle);
|
void Draw(Graphics g, Bitmap bitmap, RenderMode renderMode, Rectangle clipRectangle);
|
||||||
|
void SetForegroundColor(Color color);
|
||||||
|
void SetBackgroundColor(Color color);
|
||||||
|
int IncreaseLineThickness(int increaseBy);
|
||||||
|
bool FlipShadow();
|
||||||
void Invalidate();
|
void Invalidate();
|
||||||
void PullElementsToTop(IDrawableContainerList elements);
|
void PullElementsToTop(IDrawableContainerList elements);
|
||||||
bool CanPushDown(IDrawableContainerList elements);
|
bool CanPushDown(IDrawableContainerList elements);
|
||||||
|
|
|
@ -38,6 +38,10 @@ namespace Greenshot.Base.Interfaces
|
||||||
event SurfaceMessageEventHandler SurfaceMessage;
|
event SurfaceMessageEventHandler SurfaceMessage;
|
||||||
event SurfaceDrawingModeEventHandler DrawingModeChanged;
|
event SurfaceDrawingModeEventHandler DrawingModeChanged;
|
||||||
event SurfaceElementEventHandler MovingElementChanged;
|
event SurfaceElementEventHandler MovingElementChanged;
|
||||||
|
event SurfaceForegroundColorEventHandler ForegroundColorChanged;
|
||||||
|
event SurfaceBackgroundColorEventHandler BackgroundColorChanged;
|
||||||
|
event SurfaceLineThicknessEventHandler LineThicknessChanged;
|
||||||
|
event SurfaceShadowEventHandler ShadowChanged;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Start value of the step-labels (counts)
|
/// Start value of the step-labels (counts)
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces
|
||||||
|
{
|
||||||
|
public class SurfaceBackgroundColorEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public Color Color { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces
|
||||||
|
{
|
||||||
|
public delegate void SurfaceBackgroundColorEventHandler (object sender, SurfaceBackgroundColorEventArgs e);
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces
|
||||||
|
{
|
||||||
|
public class SurfaceForegroundColorEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public Color Color { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces
|
||||||
|
{
|
||||||
|
public delegate void SurfaceForegroundColorEventHandler (object sender, SurfaceForegroundColorEventArgs e);
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces
|
||||||
|
{
|
||||||
|
public class SurfaceLineThicknessEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public int Thickness { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces
|
||||||
|
{
|
||||||
|
public delegate void SurfaceLineThicknessEventHandler (object sender, SurfaceLineThicknessEventArgs e);
|
||||||
|
}
|
31
src/Greenshot.Base/Interfaces/SurfaceShadowEventArgs.cs
Normal file
31
src/Greenshot.Base/Interfaces/SurfaceShadowEventArgs.cs
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces
|
||||||
|
{
|
||||||
|
public class SurfaceShadowEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public bool HasShadow { get; set; }
|
||||||
|
}
|
||||||
|
}
|
25
src/Greenshot.Base/Interfaces/SurfaceShadowEventHandler.cs
Normal file
25
src/Greenshot.Base/Interfaces/SurfaceShadowEventHandler.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: https://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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Greenshot.Base.Interfaces
|
||||||
|
{
|
||||||
|
public delegate void SurfaceShadowEventHandler (object sender, SurfaceShadowEventArgs e);
|
||||||
|
}
|
|
@ -28,9 +28,44 @@ namespace Greenshot.Base.UnmanagedHelpers.Enums
|
||||||
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||||
public enum ExtendedWindowStyleFlags : uint
|
public enum ExtendedWindowStyleFlags : uint
|
||||||
{
|
{
|
||||||
WS_EX_TOOLWINDOW = 0x00000080,
|
WS_EX_DLGMODALFRAME = 0x00000001,
|
||||||
|
WS_EX_NOPARENTNOTIFY = 0x00000004,
|
||||||
|
WS_EX_TOPMOST = 0x00000008,
|
||||||
|
WS_EX_ACCEPTFILES = 0x00000010,
|
||||||
|
WS_EX_TRANSPARENT = 0x00000020,
|
||||||
|
|
||||||
WS_EX_NOREDIRECTIONBITMAP =
|
//#if(WINVER >= 0x0400)
|
||||||
0x00200000, //The window does not render to a redirection surface. This is for windows that do not have visible content or that use mechanisms other than surfaces to provide their visual.
|
WS_EX_MDICHILD = 0x00000040,
|
||||||
|
WS_EX_TOOLWINDOW = 0x00000080,
|
||||||
|
WS_EX_WINDOWEDGE = 0x00000100,
|
||||||
|
WS_EX_CLIENTEDGE = 0x00000200,
|
||||||
|
WS_EX_CONTEXTHELP = 0x00000400,
|
||||||
|
|
||||||
|
WS_EX_RIGHT = 0x00001000,
|
||||||
|
WS_EX_LEFT = 0x00000000,
|
||||||
|
WS_EX_RTLREADING = 0x00002000,
|
||||||
|
WS_EX_LTRREADING = 0x00000000,
|
||||||
|
WS_EX_LEFTSCROLLBAR = 0x00004000,
|
||||||
|
WS_EX_RIGHTSCROLLBAR = 0x00000000,
|
||||||
|
|
||||||
|
WS_EX_CONTROLPARENT = 0x00010000,
|
||||||
|
WS_EX_STATICEDGE = 0x00020000,
|
||||||
|
WS_EX_APPWINDOW = 0x00040000,
|
||||||
|
|
||||||
|
//WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE),
|
||||||
|
//WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST),
|
||||||
|
|
||||||
|
WS_EX_LAYERED = 0x00080000,
|
||||||
|
WS_EX_NOINHERITLAYOUT = 0x00100000, // Disable inheritence of mirroring by children
|
||||||
|
WS_EX_NOREDIRECTIONBITMAP = 0x00200000, //The window does not render to a redirection surface. This is for windows that do not have visible content or that use mechanisms other than surfaces to provide their visual.
|
||||||
|
WS_EX_LAYOUTRTL = 0x00400000, // Right to left mirroring
|
||||||
|
/// <summary>
|
||||||
|
/// Paints all descendants of a window in bottom-to-top painting order using double-buffering.
|
||||||
|
/// Bottom-to-top painting order allows a descendent window to have translucency (alpha) and transparency (color-key) effects, but only if the descendent window also has the WS_EX_TRANSPARENT bit set.
|
||||||
|
/// Double-buffering allows the window and its descendents to be painted without flicker.
|
||||||
|
/// This cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
|
||||||
|
/// </summary>
|
||||||
|
WS_EX_COMPOSITED = 0x02000000,
|
||||||
|
WS_EX_NOACTIVATE = 0x08000000 // A top-level window created with this style does not become the foreground window when the user clicks it. The system does not bring this window to the foreground when the user minimizes or closes the foreground window.
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -29,8 +29,24 @@ namespace Greenshot.Base.UnmanagedHelpers.Enums
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Flags]
|
[Flags]
|
||||||
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||||
public enum WindowStyleFlags : long
|
public enum WindowStyleFlags : int
|
||||||
{
|
{
|
||||||
|
//WS_OVERLAPPED = 0x00000000,
|
||||||
|
WS_POPUP = -2147483648,
|
||||||
|
WS_CHILD = 0x40000000,
|
||||||
|
WS_MINIMIZE = 0x20000000,
|
||||||
WS_VISIBLE = 0x10000000,
|
WS_VISIBLE = 0x10000000,
|
||||||
|
WS_DISABLED = 0x08000000,
|
||||||
|
WS_CLIPSIBLINGS = 0x04000000,
|
||||||
|
WS_CLIPCHILDREN = 0x02000000,
|
||||||
|
WS_MAXIMIZE = 0x01000000,
|
||||||
|
WS_BORDER = 0x00800000,
|
||||||
|
WS_DLGFRAME = 0x00400000,
|
||||||
|
WS_VSCROLL = 0x00200000,
|
||||||
|
WS_HSCROLL = 0x00100000,
|
||||||
|
WS_SYSMENU = 0x00080000,
|
||||||
|
WS_THICKFRAME = 0x00040000,
|
||||||
|
WS_GROUP = 0x00020000,
|
||||||
|
WS_TABSTOP = 0x00010000
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -30,6 +30,7 @@ using Greenshot.Base.Core;
|
||||||
using Greenshot.Base.Interfaces;
|
using Greenshot.Base.Interfaces;
|
||||||
using Greenshot.Base.Interfaces.Drawing;
|
using Greenshot.Base.Interfaces.Drawing;
|
||||||
using Greenshot.Editor.Configuration;
|
using Greenshot.Editor.Configuration;
|
||||||
|
using Greenshot.Editor.Drawing.Fields;
|
||||||
using Greenshot.Editor.Forms;
|
using Greenshot.Editor.Forms;
|
||||||
using Greenshot.Editor.Memento;
|
using Greenshot.Editor.Memento;
|
||||||
|
|
||||||
|
@ -430,6 +431,70 @@ namespace Greenshot.Editor.Drawing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetForegroundColor(Color color)
|
||||||
|
{
|
||||||
|
var dcs = ToArray();
|
||||||
|
var field = FieldType.LINE_COLOR;
|
||||||
|
foreach (var dc in dcs)
|
||||||
|
{
|
||||||
|
if (dc is not AbstractFieldHolderWithChildren fh) continue;
|
||||||
|
if (!fh.HasField(field)) continue;
|
||||||
|
|
||||||
|
fh.SetFieldValue(field, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetBackgroundColor(Color color)
|
||||||
|
{
|
||||||
|
var dcs = ToArray();
|
||||||
|
var field = FieldType.FILL_COLOR;
|
||||||
|
foreach (var dc in dcs)
|
||||||
|
{
|
||||||
|
if (dc is not AbstractFieldHolderWithChildren fh) continue;
|
||||||
|
if (!fh.HasField(field)) continue;
|
||||||
|
|
||||||
|
fh.SetFieldValue(field, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int IncreaseLineThickness(int increaseBy)
|
||||||
|
{
|
||||||
|
var dcs = ToArray();
|
||||||
|
var field = FieldType.LINE_THICKNESS;
|
||||||
|
var lastThickness = 0;
|
||||||
|
foreach (var dc in dcs)
|
||||||
|
{
|
||||||
|
if (dc is not AbstractFieldHolderWithChildren fh) continue;
|
||||||
|
if (!fh.HasField(field)) continue;
|
||||||
|
|
||||||
|
var currentThickness = (int)fh.GetFieldValue(field);
|
||||||
|
var thickness = Math.Max(0, currentThickness + increaseBy);
|
||||||
|
fh.SetFieldValue(field, thickness);
|
||||||
|
lastThickness = thickness;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lastThickness;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool FlipShadow()
|
||||||
|
{
|
||||||
|
var dcs = ToArray();
|
||||||
|
var field = FieldType.SHADOW;
|
||||||
|
var lastShadow = false;
|
||||||
|
foreach (var dc in dcs)
|
||||||
|
{
|
||||||
|
if (dc is not AbstractFieldHolderWithChildren fh) continue;
|
||||||
|
if (!fh.HasField(field)) continue;
|
||||||
|
|
||||||
|
var currentShadow = (bool)fh.GetFieldValue(field);
|
||||||
|
var shadow = !currentShadow;
|
||||||
|
fh.SetFieldValue(field, shadow);
|
||||||
|
lastShadow = shadow;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lastShadow;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Indicates whether the given list of elements can be pushed down,
|
/// Indicates whether the given list of elements can be pushed down,
|
||||||
/// i.e. whether there is at least one unselected element lower in hierarchy
|
/// i.e. whether there is at least one unselected element lower in hierarchy
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Drawing2D;
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
using Greenshot.Base.Interfaces.Drawing;
|
using Greenshot.Base.Interfaces.Drawing;
|
||||||
using Greenshot.Editor.Drawing.Fields;
|
using Greenshot.Editor.Drawing.Fields;
|
||||||
using Greenshot.Editor.Helpers;
|
using Greenshot.Editor.Helpers;
|
||||||
|
@ -35,6 +36,17 @@ namespace Greenshot.Editor.Drawing
|
||||||
public class EllipseContainer : DrawableContainer
|
public class EllipseContainer : DrawableContainer
|
||||||
{
|
{
|
||||||
public EllipseContainer(Surface parent) : base(parent)
|
public EllipseContainer(Surface parent) : base(parent)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDeserialized(StreamingContext streamingContext)
|
||||||
|
{
|
||||||
|
base.OnDeserialized(streamingContext);
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Init()
|
||||||
{
|
{
|
||||||
CreateDefaultAdorners();
|
CreateDefaultAdorners();
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,7 @@ namespace Greenshot.Editor.Drawing
|
||||||
{
|
{
|
||||||
FieldChanged += HighlightContainer_OnFieldChanged;
|
FieldChanged += HighlightContainer_OnFieldChanged;
|
||||||
ConfigurePreparedFilters();
|
ConfigurePreparedFilters();
|
||||||
|
CreateDefaultAdorners();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void HighlightContainer_OnFieldChanged(object sender, FieldChangedEventArgs e)
|
protected void HighlightContainer_OnFieldChanged(object sender, FieldChangedEventArgs e)
|
||||||
|
|
|
@ -112,6 +112,38 @@ namespace Greenshot.Editor.Drawing
|
||||||
remove => _surfaceMessage -= value;
|
remove => _surfaceMessage -= value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[NonSerialized] private SurfaceForegroundColorEventHandler _foregroundColorChanged;
|
||||||
|
|
||||||
|
public event SurfaceForegroundColorEventHandler ForegroundColorChanged
|
||||||
|
{
|
||||||
|
add => _foregroundColorChanged += value;
|
||||||
|
remove => _foregroundColorChanged -= value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[NonSerialized] private SurfaceBackgroundColorEventHandler _backgroundColorChanged;
|
||||||
|
|
||||||
|
public event SurfaceBackgroundColorEventHandler BackgroundColorChanged
|
||||||
|
{
|
||||||
|
add => _backgroundColorChanged += value;
|
||||||
|
remove => _backgroundColorChanged -= value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[NonSerialized] private SurfaceLineThicknessEventHandler _lineThicknessChanged;
|
||||||
|
|
||||||
|
public event SurfaceLineThicknessEventHandler LineThicknessChanged
|
||||||
|
{
|
||||||
|
add => _lineThicknessChanged += value;
|
||||||
|
remove => _lineThicknessChanged -= value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[NonSerialized] private SurfaceShadowEventHandler _shadowChanged;
|
||||||
|
|
||||||
|
public event SurfaceShadowEventHandler ShadowChanged
|
||||||
|
{
|
||||||
|
add => _shadowChanged += value;
|
||||||
|
remove => _shadowChanged -= value;
|
||||||
|
}
|
||||||
|
|
||||||
/// <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>
|
||||||
|
@ -1060,6 +1092,74 @@ namespace Greenshot.Editor.Drawing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Use to update UI when pressing a key to change the foreground color
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">Who send</param>
|
||||||
|
/// <param name="color">new color</param>
|
||||||
|
public void UpdateForegroundColorEvent(object source, Color color)
|
||||||
|
{
|
||||||
|
if (_foregroundColorChanged != null)
|
||||||
|
{
|
||||||
|
var eventArgs = new SurfaceForegroundColorEventArgs
|
||||||
|
{
|
||||||
|
Color = color,
|
||||||
|
};
|
||||||
|
_foregroundColorChanged(source, eventArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Use to update UI when pressing a key to change the background color
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">Who send</param>
|
||||||
|
/// <param name="color">new color</param>
|
||||||
|
public void UpdateBackgroundColorEvent(object source, Color color)
|
||||||
|
{
|
||||||
|
if (_lineThicknessChanged != null)
|
||||||
|
{
|
||||||
|
var eventArgs = new SurfaceBackgroundColorEventArgs
|
||||||
|
{
|
||||||
|
Color = color,
|
||||||
|
};
|
||||||
|
_backgroundColorChanged(source, eventArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Use to update UI when pressing a key to change the line thickness
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">Who send</param>
|
||||||
|
/// <param name="thickness">new thickness</param>
|
||||||
|
public void UpdateLineThicknessEvent(object source, int thickness)
|
||||||
|
{
|
||||||
|
if (_lineThicknessChanged != null)
|
||||||
|
{
|
||||||
|
var eventArgs = new SurfaceLineThicknessEventArgs
|
||||||
|
{
|
||||||
|
Thickness = thickness,
|
||||||
|
};
|
||||||
|
_lineThicknessChanged(source, eventArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Use to update UI when pressing the key to show/hide the shadow
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">Who send</param>
|
||||||
|
/// <param name="hasShadow">has shadow</param>
|
||||||
|
public void UpdateShadowEvent(object source, bool hasShadow)
|
||||||
|
{
|
||||||
|
if (_shadowChanged != null)
|
||||||
|
{
|
||||||
|
var eventArgs = new SurfaceShadowEventArgs
|
||||||
|
{
|
||||||
|
HasShadow = hasShadow,
|
||||||
|
};
|
||||||
|
_shadowChanged(source, eventArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Crop the surface
|
/// Crop the surface
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -2212,6 +2312,87 @@ namespace Greenshot.Editor.Drawing
|
||||||
case Keys.Escape:
|
case Keys.Escape:
|
||||||
ConfirmSelectedConfirmableElements(false);
|
ConfirmSelectedConfirmableElements(false);
|
||||||
break;
|
break;
|
||||||
|
case Keys.NumPad0:
|
||||||
|
SetSelectedElementColor(Color.Orange, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.NumPad1:
|
||||||
|
SetSelectedElementColor(Color.Red, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.NumPad2:
|
||||||
|
SetSelectedElementColor(Color.FromArgb(0,255,0), true, shiftModifier); // Color.Green is #008000 and not #00FF00
|
||||||
|
break;
|
||||||
|
case Keys.NumPad3:
|
||||||
|
SetSelectedElementColor(Color.Blue, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.NumPad4:
|
||||||
|
SetSelectedElementColor(Color.Cyan, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.NumPad5:
|
||||||
|
SetSelectedElementColor(Color.Magenta, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.NumPad6:
|
||||||
|
SetSelectedElementColor(Color.Yellow, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.NumPad7:
|
||||||
|
SetSelectedElementColor(Color.Black, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.NumPad8:
|
||||||
|
SetSelectedElementColor(Color.Gray, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.NumPad9:
|
||||||
|
SetSelectedElementColor(Color.White, true, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D0:
|
||||||
|
case Keys.D0 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(shiftModifier ? Color.Orange : Color.Transparent, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D1:
|
||||||
|
case Keys.D1 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.Red, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D2:
|
||||||
|
case Keys.D2 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.Green, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D3:
|
||||||
|
case Keys.D3 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.Blue, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D4:
|
||||||
|
case Keys.D4 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.Cyan, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D5:
|
||||||
|
case Keys.D5 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.Magenta, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D6:
|
||||||
|
case Keys.D6 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.Yellow, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D7:
|
||||||
|
case Keys.D7 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.Black, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D8:
|
||||||
|
case Keys.D8 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.Gray, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.D9:
|
||||||
|
case Keys.D9 | Keys.Shift:
|
||||||
|
SetSelectedElementColor(Color.White, false, shiftModifier);
|
||||||
|
break;
|
||||||
|
case Keys.Add:
|
||||||
|
case Keys.Add | Keys.Shift:
|
||||||
|
ChangeLineThickness(shiftModifier ? 5 : 1);
|
||||||
|
break;
|
||||||
|
case Keys.Subtract:
|
||||||
|
case Keys.Subtract | Keys.Shift:
|
||||||
|
ChangeLineThickness(shiftModifier ? -5 : -1);
|
||||||
|
break;
|
||||||
|
case Keys.Divide:
|
||||||
|
FlipShadow();
|
||||||
|
break;
|
||||||
/*case Keys.Delete:
|
/*case Keys.Delete:
|
||||||
RemoveSelectedElements();
|
RemoveSelectedElements();
|
||||||
break;*/
|
break;*/
|
||||||
|
@ -2231,6 +2412,36 @@ namespace Greenshot.Editor.Drawing
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for laptops without numPads, also allow shift modifier
|
||||||
|
private void SetSelectedElementColor(Color color, bool numPad, bool shift)
|
||||||
|
{
|
||||||
|
if (numPad || shift)
|
||||||
|
{
|
||||||
|
selectedElements.SetForegroundColor(color);
|
||||||
|
UpdateForegroundColorEvent(this, color);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
selectedElements.SetBackgroundColor(color);
|
||||||
|
UpdateBackgroundColorEvent(this, color);
|
||||||
|
}
|
||||||
|
selectedElements.Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ChangeLineThickness(int increaseBy)
|
||||||
|
{
|
||||||
|
var newThickness = selectedElements.IncreaseLineThickness(increaseBy);
|
||||||
|
UpdateLineThicknessEvent(this, newThickness);
|
||||||
|
selectedElements.Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FlipShadow()
|
||||||
|
{
|
||||||
|
var shadow = selectedElements.FlipShadow();
|
||||||
|
UpdateShadowEvent(this, shadow);
|
||||||
|
selectedElements.Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Property for accessing the elements on the surface
|
/// Property for accessing the elements on the surface
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -21,10 +21,12 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using Greenshot.Base.Controls;
|
||||||
using Greenshot.Base.IniFile;
|
using Greenshot.Base.IniFile;
|
||||||
using Greenshot.Editor.Configuration;
|
using Greenshot.Editor.Configuration;
|
||||||
using Greenshot.Editor.Controls;
|
using Greenshot.Editor.Controls;
|
||||||
|
@ -114,7 +116,7 @@ namespace Greenshot.Editor.Forms
|
||||||
|
|
||||||
private Button CreateColorButton(Color color, int x, int y, int w, int h)
|
private Button CreateColorButton(Color color, int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
Button b = new Button
|
Button b = new GreenshotDoubleClickButton
|
||||||
{
|
{
|
||||||
BackColor = color,
|
BackColor = color,
|
||||||
FlatStyle = FlatStyle.Flat,
|
FlatStyle = FlatStyle.Flat,
|
||||||
|
@ -124,10 +126,17 @@ namespace Greenshot.Editor.Forms
|
||||||
};
|
};
|
||||||
b.FlatAppearance.BorderSize = 0;
|
b.FlatAppearance.BorderSize = 0;
|
||||||
b.Click += ColorButtonClick;
|
b.Click += ColorButtonClick;
|
||||||
_toolTip.SetToolTip(b, ColorTranslator.ToHtml(color) + " | R:" + color.R + ", G:" + color.G + ", B:" + color.B);
|
b.DoubleClick += ColorButtonDoubleClick;
|
||||||
|
SetButtonTooltip(b, color);
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ColorButtonDoubleClick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ColorButtonClick(sender, e);
|
||||||
|
BtnApplyClick(sender, e);
|
||||||
|
}
|
||||||
|
|
||||||
private void CreateLastUsedColorButtonRow(int x, int y, int w, int h)
|
private void CreateLastUsedColorButtonRow(int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 12; i++)
|
for (int i = 0; i < 12; i++)
|
||||||
|
@ -147,6 +156,7 @@ namespace Greenshot.Editor.Forms
|
||||||
{
|
{
|
||||||
_recentColorButtons[i].BackColor = EditorConfig.RecentColors[i];
|
_recentColorButtons[i].BackColor = EditorConfig.RecentColors[i];
|
||||||
_recentColorButtons[i].Enabled = true;
|
_recentColorButtons[i].Enabled = true;
|
||||||
|
SetButtonTooltip(_recentColorButtons[i], EditorConfig.RecentColors[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,7 +199,7 @@ namespace Greenshot.Editor.Forms
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TextBox textBox = (TextBox) sender;
|
TextBox textBox = (TextBox)sender;
|
||||||
string text = textBox.Text.Replace("#", string.Empty);
|
string text = textBox.Text.Replace("#", string.Empty);
|
||||||
Color c;
|
Color c;
|
||||||
if (int.TryParse(text, NumberStyles.AllowHexSpecifier, Thread.CurrentThread.CurrentCulture, out var i))
|
if (int.TryParse(text, NumberStyles.AllowHexSpecifier, Thread.CurrentThread.CurrentCulture, out var i))
|
||||||
|
@ -200,7 +210,7 @@ namespace Greenshot.Editor.Forms
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var knownColor = (KnownColor) Enum.Parse(typeof(KnownColor), text, true);
|
var knownColor = (KnownColor)Enum.Parse(typeof(KnownColor), text, true);
|
||||||
c = Color.FromKnownColor(knownColor);
|
c = Color.FromKnownColor(knownColor);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
|
@ -220,7 +230,7 @@ namespace Greenshot.Editor.Forms
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TextBox textBox = (TextBox) sender;
|
TextBox textBox = (TextBox)sender;
|
||||||
PreviewColor(
|
PreviewColor(
|
||||||
Color.FromArgb(GetColorPartIntFromString(textBoxAlpha.Text), GetColorPartIntFromString(textBoxRed.Text), GetColorPartIntFromString(textBoxGreen.Text),
|
Color.FromArgb(GetColorPartIntFromString(textBoxAlpha.Text), GetColorPartIntFromString(textBoxRed.Text), GetColorPartIntFromString(textBoxGreen.Text),
|
||||||
GetColorPartIntFromString(textBoxBlue.Text)), textBox);
|
GetColorPartIntFromString(textBoxBlue.Text)), textBox);
|
||||||
|
@ -241,10 +251,15 @@ namespace Greenshot.Editor.Forms
|
||||||
|
|
||||||
private void ColorButtonClick(object sender, EventArgs e)
|
private void ColorButtonClick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Button b = (Button) sender;
|
Button b = (Button)sender;
|
||||||
PreviewColor(b.BackColor, b);
|
PreviewColor(b.BackColor, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetButtonTooltip(Button colorButton, Color color)
|
||||||
|
{
|
||||||
|
_toolTip.SetToolTip(colorButton, ColorTranslator.ToHtml(color) + " | R:" + color.R + ", G:" + color.G + ", B:" + color.B);
|
||||||
|
}
|
||||||
|
|
||||||
private void BtnTransparentClick(object sender, EventArgs e)
|
private void BtnTransparentClick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ColorButtonClick(sender, e);
|
ColorButtonClick(sender, e);
|
||||||
|
|
|
@ -230,6 +230,10 @@ namespace Greenshot.Editor.Forms
|
||||||
_surface.DrawingModeChanged += Surface_DrawingModeChanged;
|
_surface.DrawingModeChanged += Surface_DrawingModeChanged;
|
||||||
_surface.SurfaceSizeChanged += SurfaceSizeChanged;
|
_surface.SurfaceSizeChanged += SurfaceSizeChanged;
|
||||||
_surface.SurfaceMessage += SurfaceMessageReceived;
|
_surface.SurfaceMessage += SurfaceMessageReceived;
|
||||||
|
_surface.ForegroundColorChanged += ForegroundColorChanged;
|
||||||
|
_surface.BackgroundColorChanged += BackgroundColorChanged;
|
||||||
|
_surface.LineThicknessChanged += LineThicknessChanged;
|
||||||
|
_surface.ShadowChanged += ShadowChanged;
|
||||||
_surface.FieldAggregator.FieldChanged += FieldAggregatorFieldChanged;
|
_surface.FieldAggregator.FieldChanged += FieldAggregatorFieldChanged;
|
||||||
SurfaceSizeChanged(Surface, null);
|
SurfaceSizeChanged(Surface, null);
|
||||||
|
|
||||||
|
@ -498,6 +502,46 @@ namespace Greenshot.Editor.Forms
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is called when the foreground color of the select element chances, used for shortcuts
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="eventArgs"></param>
|
||||||
|
private void ForegroundColorChanged(object sender, SurfaceForegroundColorEventArgs eventArgs)
|
||||||
|
{
|
||||||
|
btnLineColor.SelectedColor = eventArgs.Color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is called when the background color of the select element chances, used for shortcuts
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="eventArgs"></param>
|
||||||
|
private void BackgroundColorChanged(object sender, SurfaceBackgroundColorEventArgs eventArgs)
|
||||||
|
{
|
||||||
|
btnFillColor.SelectedColor = eventArgs.Color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is called when the line thickness of the select element chances, used for shortcuts
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="eventArgs"></param>
|
||||||
|
private void LineThicknessChanged(object sender, SurfaceLineThicknessEventArgs eventArgs)
|
||||||
|
{
|
||||||
|
lineThicknessUpDown.Value = eventArgs.Thickness;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is called when the shadow of the select element chances, used for shortcuts
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="eventArgs"></param>
|
||||||
|
private void ShadowChanged(object sender, SurfaceShadowEventArgs eventArgs)
|
||||||
|
{
|
||||||
|
shadowButton.Checked = eventArgs.HasShadow;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is called when the size of the surface chances, used for resizing and displaying the size information
|
/// This is called when the size of the surface chances, used for resizing and displaying the size information
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -995,7 +1039,7 @@ namespace Greenshot.Editor.Forms
|
||||||
case Keys.G: // Grayscale Ctrl + G
|
case Keys.G: // Grayscale Ctrl + G
|
||||||
GrayscaleToolStripMenuItemClick(sender, e);
|
GrayscaleToolStripMenuItemClick(sender, e);
|
||||||
break;
|
break;
|
||||||
case Keys.Delete: // Grayscale Ctrl + Delete
|
case Keys.Delete: // Clear capture, use transparent background Ctrl + Delete
|
||||||
ClearToolStripMenuItemClick(sender, e);
|
ClearToolStripMenuItemClick(sender, e);
|
||||||
break;
|
break;
|
||||||
case Keys.Oemcomma: // Rotate CCW Ctrl + ,
|
case Keys.Oemcomma: // Rotate CCW Ctrl + ,
|
||||||
|
|
|
@ -39,9 +39,12 @@ namespace Greenshot.Editor.Memento
|
||||||
{
|
{
|
||||||
_surface = surface;
|
_surface = surface;
|
||||||
_image = surface.Image;
|
_image = surface.Image;
|
||||||
_matrix = matrix.Clone();
|
if (matrix != null)
|
||||||
// Make sure the reverse is applied
|
{
|
||||||
_matrix.Invert();
|
_matrix = matrix.Clone();
|
||||||
|
// Make sure the reverse is applied
|
||||||
|
_matrix.Invert();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|
|
@ -51,7 +51,7 @@ namespace Greenshot.Plugin.Confluence
|
||||||
IsInitialized = false;
|
IsInitialized = false;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Uri confluenceIconUri = new Uri("/GreenshotConfluencePlugin;component/Images/Confluence.ico", UriKind.Relative);
|
Uri confluenceIconUri = new Uri("/Greenshot.Plugin.Confluence;component/Images/Confluence.ico", UriKind.Relative);
|
||||||
using (Stream iconStream = Application.GetResourceStream(confluenceIconUri)?.Stream)
|
using (Stream iconStream = Application.GetResourceStream(confluenceIconUri)?.Stream)
|
||||||
{
|
{
|
||||||
// TODO: Check what to do with the IImage
|
// TODO: Check what to do with the IImage
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Greenshot.Base\Greenshot.Base.csproj" />
|
<ProjectReference Include="..\Greenshot.Base\Greenshot.Base.csproj" />
|
||||||
<PackageReference Include="Dapplo.Jira" version="1.1.38" />
|
<PackageReference Include="Dapplo.Jira" version="1.1.42" />
|
||||||
<PackageReference Include="Dapplo.Jira.SvgWinForms" Version="1.1.38" />
|
<PackageReference Include="Dapplo.Jira.SvgWinForms" Version="1.1.42" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -6,7 +6,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" version="7.0.2" />
|
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" version="7.1.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Greenshot.Base\Greenshot.Base.csproj" />
|
<ProjectReference Include="..\Greenshot.Base\Greenshot.Base.csproj" />
|
||||||
|
|
29
src/Greenshot/Forms/AboutForm.Designer.cs
generated
29
src/Greenshot/Forms/AboutForm.Designer.cs
generated
|
@ -69,8 +69,10 @@ namespace Greenshot.Forms {
|
||||||
//
|
//
|
||||||
// lblTitle
|
// lblTitle
|
||||||
//
|
//
|
||||||
this.lblTitle.Font = new System.Drawing.Font(System.Drawing.FontFamily.GenericSansSerif, 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
var fontsize = (this.DeviceDpi / 96) * lblTitle.Font.Size;
|
||||||
this.lblTitle.Location = new System.Drawing.Point(108, 12);
|
this.lblTitle.AutoSize = true;
|
||||||
|
this.lblTitle.Font = new System.Drawing.Font(System.Drawing.FontFamily.GenericSansSerif, fontsize, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.lblTitle.Location = new System.Drawing.Point(108, 12);
|
||||||
this.lblTitle.Name = "lblTitle";
|
this.lblTitle.Name = "lblTitle";
|
||||||
this.lblTitle.Size = new System.Drawing.Size(263, 19);
|
this.lblTitle.Size = new System.Drawing.Size(263, 19);
|
||||||
this.lblTitle.TabIndex = 2;
|
this.lblTitle.TabIndex = 2;
|
||||||
|
@ -119,8 +121,9 @@ namespace Greenshot.Forms {
|
||||||
this.linkLblBugs.Size = new System.Drawing.Size(465, 23);
|
this.linkLblBugs.Size = new System.Drawing.Size(465, 23);
|
||||||
this.linkLblBugs.TabIndex = 8;
|
this.linkLblBugs.TabIndex = 8;
|
||||||
this.linkLblBugs.TabStop = true;
|
this.linkLblBugs.TabStop = true;
|
||||||
this.linkLblBugs.Text = "https://getgreenshot.org/tickets/?version=" + EnvironmentInfo.GetGreenshotVersion(true);
|
this.linkLblBugs.Text = "https://getgreenshot.org/tickets";
|
||||||
this.linkLblBugs.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabelClicked);
|
this.linkLblBugs.Tag = "https://getgreenshot.org/tickets/?version=" + EnvironmentInfo.GetGreenshotVersion(true);
|
||||||
|
this.linkLblBugs.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabelClicked);
|
||||||
//
|
//
|
||||||
// lblBugs
|
// lblBugs
|
||||||
//
|
//
|
||||||
|
@ -137,8 +140,9 @@ namespace Greenshot.Forms {
|
||||||
this.linkLblDonations.Size = new System.Drawing.Size(465, 23);
|
this.linkLblDonations.Size = new System.Drawing.Size(465, 23);
|
||||||
this.linkLblDonations.TabIndex = 10;
|
this.linkLblDonations.TabIndex = 10;
|
||||||
this.linkLblDonations.TabStop = true;
|
this.linkLblDonations.TabStop = true;
|
||||||
this.linkLblDonations.Text = "https://getgreenshot.org/support/?version=" + EnvironmentInfo.GetGreenshotVersion(true);
|
this.linkLblDonations.Text = "https://getgreenshot.org/support";
|
||||||
this.linkLblDonations.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabelClicked);
|
this.linkLblDonations.Tag = "https://getgreenshot.org/support/?version=" + EnvironmentInfo.GetGreenshotVersion(true);
|
||||||
|
this.linkLblDonations.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabelClicked);
|
||||||
//
|
//
|
||||||
// lblDonations
|
// lblDonations
|
||||||
//
|
//
|
||||||
|
@ -173,9 +177,10 @@ namespace Greenshot.Forms {
|
||||||
this.linkLabel1.Size = new System.Drawing.Size(130, 23);
|
this.linkLabel1.Size = new System.Drawing.Size(130, 23);
|
||||||
this.linkLabel1.TabIndex = 13;
|
this.linkLabel1.TabIndex = 13;
|
||||||
this.linkLabel1.TabStop = true;
|
this.linkLabel1.TabStop = true;
|
||||||
this.linkLabel1.Text = "https://getgreenshot.org/?version=" + EnvironmentInfo.GetGreenshotVersion(true);
|
this.linkLabel1.Text = "https://getgreenshot.org";
|
||||||
this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||||
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabelClicked);
|
this.linkLabel1.Tag = "https://getgreenshot.org/?version=" + EnvironmentInfo.GetGreenshotVersion(true);
|
||||||
|
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabelClicked);
|
||||||
//
|
//
|
||||||
// pictureBox1
|
// pictureBox1
|
||||||
//
|
//
|
||||||
|
@ -197,10 +202,10 @@ namespace Greenshot.Forms {
|
||||||
//
|
//
|
||||||
// AboutForm
|
// AboutForm
|
||||||
//
|
//
|
||||||
//this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96, 96);
|
//this.AutoScaleDimensions = new System.Drawing.SizeF(96, 96);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
//this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
|
|
||||||
this.ClientSize = new System.Drawing.Size(530, 293);
|
this.ClientSize = new System.Drawing.Size(530, 293);
|
||||||
this.Controls.Add(this.lblTranslation);
|
this.Controls.Add(this.lblTranslation);
|
||||||
|
|
|
@ -219,14 +219,15 @@ namespace Greenshot.Forms
|
||||||
private void LinkLabelClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
private void LinkLabelClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
{
|
{
|
||||||
if (!(sender is LinkLabel linkLabel)) return;
|
if (!(sender is LinkLabel linkLabel)) return;
|
||||||
|
var link = linkLabel.Tag?.ToString() ?? linkLabel.Text;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
linkLabel.LinkVisited = true;
|
linkLabel.LinkVisited = true;
|
||||||
Process.Start(linkLabel.Text);
|
Process.Start(link);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
MessageBox.Show(Language.GetFormattedString(LangKey.error_openlink, linkLabel.Text), Language.GetString(LangKey.error));
|
MessageBox.Show(Language.GetFormattedString(LangKey.error_openlink, link), Language.GetString(LangKey.error));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ using Greenshot.Base.IniFile;
|
||||||
using Greenshot.Base.Interfaces;
|
using Greenshot.Base.Interfaces;
|
||||||
using Greenshot.Base.Interfaces.Ocr;
|
using Greenshot.Base.Interfaces.Ocr;
|
||||||
using Greenshot.Base.UnmanagedHelpers;
|
using Greenshot.Base.UnmanagedHelpers;
|
||||||
|
using Greenshot.Base.UnmanagedHelpers.Enums;
|
||||||
using Greenshot.Editor.Helpers;
|
using Greenshot.Editor.Helpers;
|
||||||
|
|
||||||
namespace Greenshot.Forms
|
namespace Greenshot.Forms
|
||||||
|
@ -111,7 +112,8 @@ namespace Greenshot.Forms
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
CreateParams createParams = base.CreateParams;
|
CreateParams createParams = base.CreateParams;
|
||||||
createParams.ExStyle |= 0x02000000;
|
createParams.ExStyle |= (int)ExtendedWindowStyleFlags.WS_EX_COMPOSITED;
|
||||||
|
createParams.Style = (int)WindowStyleFlags.WS_POPUP;
|
||||||
return createParams;
|
return createParams;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -151,12 +153,9 @@ namespace Greenshot.Forms
|
||||||
|
|
||||||
_currentForm = this;
|
_currentForm = this;
|
||||||
|
|
||||||
// Enable the AnimatingForm
|
|
||||||
EnableAnimation = true;
|
|
||||||
|
|
||||||
// clean up
|
// clean up
|
||||||
FormClosed += ClosedHandler;
|
FormClosed += ClosedHandler;
|
||||||
|
Resize += CaptureForm_Resize;
|
||||||
_capture = capture;
|
_capture = capture;
|
||||||
_windows = windows;
|
_windows = windows;
|
||||||
_captureMode = capture.CaptureDetails.CaptureMode;
|
_captureMode = capture.CaptureDetails.CaptureMode;
|
||||||
|
@ -169,6 +168,8 @@ namespace Greenshot.Forms
|
||||||
DoubleBuffered = !IsTerminalServerSession;
|
DoubleBuffered = !IsTerminalServerSession;
|
||||||
Text = @"Greenshot capture form";
|
Text = @"Greenshot capture form";
|
||||||
|
|
||||||
|
SetSize();
|
||||||
|
|
||||||
// Make sure we never capture the capture-form
|
// Make sure we never capture the capture-form
|
||||||
WindowDetails.RegisterIgnoreHandle(Handle);
|
WindowDetails.RegisterIgnoreHandle(Handle);
|
||||||
// Un-register at close
|
// Un-register at close
|
||||||
|
@ -186,8 +187,27 @@ namespace Greenshot.Forms
|
||||||
// Set the zoomer animation
|
// Set the zoomer animation
|
||||||
InitializeZoomer(Conf.ZoomerEnabled);
|
InitializeZoomer(Conf.ZoomerEnabled);
|
||||||
|
|
||||||
|
// Enable the AnimatingForm
|
||||||
|
EnableAnimation = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CaptureForm_Resize(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Log.DebugFormat("Resize was called, new size: {0}", this.Bounds);
|
||||||
|
if (Bounds.Equals(_capture.ScreenBounds))
|
||||||
|
{
|
||||||
|
// We have the correct size
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Initiate resize
|
||||||
|
SetSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetSize()
|
||||||
|
{
|
||||||
|
Log.DebugFormat("Setting CaptureForm with dimensions {0}", _capture.ScreenBounds);
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
Bounds = capture.ScreenBounds;
|
Bounds = _capture.ScreenBounds;
|
||||||
ResumeLayout();
|
ResumeLayout();
|
||||||
|
|
||||||
// Fix missing focus
|
// Fix missing focus
|
||||||
|
@ -200,15 +220,16 @@ namespace Greenshot.Forms
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeZoomer(bool isOn)
|
private void InitializeZoomer(bool isOn)
|
||||||
{
|
{
|
||||||
|
var startingPosition = new Rectangle(_cursorPos, Size.Empty);
|
||||||
if (isOn)
|
if (isOn)
|
||||||
{
|
{
|
||||||
// Initialize the zoom with a invalid position
|
// Initialize the zoom with a invalid position
|
||||||
_zoomAnimator = new RectangleAnimator(Rectangle.Empty, new Rectangle(int.MaxValue, int.MaxValue, 0, 0), FramesForMillis(1000), EasingType.Quintic, EasingMode.EaseOut);
|
_zoomAnimator = new RectangleAnimator( startingPosition , new Rectangle(int.MaxValue, int.MaxValue, 0, 0), FramesForMillis(1000), EasingType.Quintic, EasingMode.EaseOut);
|
||||||
VerifyZoomAnimation(_cursorPos, false);
|
VerifyZoomAnimation(_cursorPos, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_zoomAnimator?.ChangeDestination(new Rectangle(Point.Empty, Size.Empty), FramesForMillis(1000));
|
_zoomAnimator?.ChangeDestination(startingPosition, FramesForMillis(1000));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
src/Greenshot/Forms/MainForm.Designer.cs
generated
4
src/Greenshot/Forms/MainForm.Designer.cs
generated
|
@ -223,7 +223,7 @@ namespace Greenshot.Forms {
|
||||||
this.contextmenu_help.Image = ((System.Drawing.Image)(resources.GetObject("contextmenu_help.Image")));
|
this.contextmenu_help.Image = ((System.Drawing.Image)(resources.GetObject("contextmenu_help.Image")));
|
||||||
this.contextmenu_help.Name = "contextmenu_help";
|
this.contextmenu_help.Name = "contextmenu_help";
|
||||||
this.contextmenu_help.Size = new System.Drawing.Size(170, 22);
|
this.contextmenu_help.Size = new System.Drawing.Size(170, 22);
|
||||||
this.contextmenu_help.Click += new System.EventHandler(this.Contextmenu_helpClick);
|
this.contextmenu_help.Click += new System.EventHandler(this.Contextmenu_HelpClick);
|
||||||
//
|
//
|
||||||
// contextmenu_donate
|
// contextmenu_donate
|
||||||
//
|
//
|
||||||
|
@ -248,7 +248,7 @@ namespace Greenshot.Forms {
|
||||||
this.contextmenu_exit.Image = ((System.Drawing.Image)(resources.GetObject("contextmenu_exit.Image")));
|
this.contextmenu_exit.Image = ((System.Drawing.Image)(resources.GetObject("contextmenu_exit.Image")));
|
||||||
this.contextmenu_exit.Name = "contextmenu_exit";
|
this.contextmenu_exit.Name = "contextmenu_exit";
|
||||||
this.contextmenu_exit.Size = new System.Drawing.Size(170, 22);
|
this.contextmenu_exit.Size = new System.Drawing.Size(170, 22);
|
||||||
this.contextmenu_exit.Click += new System.EventHandler(this.Contextmenu_exitClick);
|
this.contextmenu_exit.Click += new System.EventHandler(this.Contextmenu_ExitClick);
|
||||||
//
|
//
|
||||||
// notifyIcon
|
// notifyIcon
|
||||||
//
|
//
|
||||||
|
|
|
@ -1122,12 +1122,18 @@ namespace Greenshot.Forms
|
||||||
Rectangle allScreensBounds = WindowCapture.GetScreenBounds();
|
Rectangle allScreensBounds = WindowCapture.GetScreenBounds();
|
||||||
|
|
||||||
var captureScreenItem = new ToolStripMenuItem(Language.GetString(LangKey.contextmenu_capturefullscreen_all));
|
var captureScreenItem = new ToolStripMenuItem(Language.GetString(LangKey.contextmenu_capturefullscreen_all));
|
||||||
captureScreenItem.Click += delegate { BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureFullscreen(false, ScreenCaptureMode.FullScreen); }); };
|
captureScreenItem.Click += delegate {
|
||||||
|
BeginInvoke((MethodInvoker) delegate {
|
||||||
|
CaptureHelper.CaptureFullscreen(false, ScreenCaptureMode.FullScreen);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
captureScreenMenuItem.DropDownItems.Add(captureScreenItem);
|
captureScreenMenuItem.DropDownItems.Add(captureScreenItem);
|
||||||
foreach (Screen screen in Screen.AllScreens)
|
foreach (Screen screen in Screen.AllScreens)
|
||||||
{
|
{
|
||||||
Screen screenToCapture = screen;
|
Screen screenToCapture = screen;
|
||||||
string deviceAlignment = string.Empty;
|
string deviceAlignment = screenToCapture.DeviceName;
|
||||||
|
|
||||||
if (screen.Bounds.Top == allScreensBounds.Top && screen.Bounds.Bottom != allScreensBounds.Bottom)
|
if (screen.Bounds.Top == allScreensBounds.Top && screen.Bounds.Bottom != allScreensBounds.Bottom)
|
||||||
{
|
{
|
||||||
deviceAlignment += " " + Language.GetString(LangKey.contextmenu_capturefullscreen_top);
|
deviceAlignment += " " + Language.GetString(LangKey.contextmenu_capturefullscreen_top);
|
||||||
|
@ -1147,7 +1153,13 @@ namespace Greenshot.Forms
|
||||||
}
|
}
|
||||||
|
|
||||||
captureScreenItem = new ToolStripMenuItem(deviceAlignment);
|
captureScreenItem = new ToolStripMenuItem(deviceAlignment);
|
||||||
captureScreenItem.Click += delegate { BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureRegion(false, screenToCapture.Bounds); }); };
|
captureScreenItem.Click += delegate
|
||||||
|
{
|
||||||
|
BeginInvoke((MethodInvoker) delegate
|
||||||
|
{
|
||||||
|
CaptureHelper.CaptureRegion(false, screenToCapture.Bounds);
|
||||||
|
});
|
||||||
|
};
|
||||||
captureScreenMenuItem.DropDownItems.Add(captureScreenItem);
|
captureScreenMenuItem.DropDownItems.Add(captureScreenItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1426,7 +1438,7 @@ namespace Greenshot.Forms
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sender"></param>
|
/// <param name="sender"></param>
|
||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void Contextmenu_helpClick(object sender, EventArgs e)
|
private void Contextmenu_HelpClick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
HelpFileLoader.LoadHelp();
|
HelpFileLoader.LoadHelp();
|
||||||
}
|
}
|
||||||
|
@ -1436,7 +1448,7 @@ namespace Greenshot.Forms
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sender"></param>
|
/// <param name="sender"></param>
|
||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void Contextmenu_exitClick(object sender, EventArgs e)
|
private void Contextmenu_ExitClick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Exit();
|
Exit();
|
||||||
}
|
}
|
||||||
|
|
4
src/Greenshot/Forms/SettingsForm.Designer.cs
generated
4
src/Greenshot/Forms/SettingsForm.Designer.cs
generated
|
@ -1257,8 +1257,8 @@ namespace Greenshot.Forms {
|
||||||
//
|
//
|
||||||
// SettingsForm
|
// SettingsForm
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(451, 431);
|
this.ClientSize = new System.Drawing.Size(451, 431);
|
||||||
this.Controls.Add(this.tabcontrol);
|
this.Controls.Add(this.tabcontrol);
|
||||||
this.Controls.Add(this.settings_confirm);
|
this.Controls.Add(this.settings_confirm);
|
||||||
|
|
|
@ -94,6 +94,14 @@ namespace Greenshot.Forms
|
||||||
// Changes for BUG-2077
|
// Changes for BUG-2077
|
||||||
numericUpDown_daysbetweencheck.ValueChanged += NumericUpDownDaysbetweencheckOnValueChanged;
|
numericUpDown_daysbetweencheck.ValueChanged += NumericUpDownDaysbetweencheckOnValueChanged;
|
||||||
|
|
||||||
|
// Expert mode, the clipboard formats
|
||||||
|
foreach (ClipboardFormat clipboardFormat in Enum.GetValues(typeof(ClipboardFormat)))
|
||||||
|
{
|
||||||
|
ListViewItem item = listview_clipboardformats.Items.Add(Language.Translate(clipboardFormat));
|
||||||
|
item.Tag = clipboardFormat;
|
||||||
|
item.Checked = coreConfiguration.ClipboardFormats.Contains(clipboardFormat);
|
||||||
|
}
|
||||||
|
|
||||||
_daysBetweenCheckPreviousValue = (int) numericUpDown_daysbetweencheck.Value;
|
_daysBetweenCheckPreviousValue = (int) numericUpDown_daysbetweencheck.Value;
|
||||||
DisplayPluginTab();
|
DisplayPluginTab();
|
||||||
UpdateUi();
|
UpdateUi();
|
||||||
|
@ -470,14 +478,6 @@ namespace Greenshot.Forms
|
||||||
{
|
{
|
||||||
colorButton_window_background.SelectedColor = coreConfiguration.DWMBackgroundColor;
|
colorButton_window_background.SelectedColor = coreConfiguration.DWMBackgroundColor;
|
||||||
|
|
||||||
// Expert mode, the clipboard formats
|
|
||||||
foreach (ClipboardFormat clipboardFormat in Enum.GetValues(typeof(ClipboardFormat)))
|
|
||||||
{
|
|
||||||
ListViewItem item = listview_clipboardformats.Items.Add(Language.Translate(clipboardFormat));
|
|
||||||
item.Tag = clipboardFormat;
|
|
||||||
item.Checked = coreConfiguration.ClipboardFormats.Contains(clipboardFormat);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Language.CurrentLanguage != null)
|
if (Language.CurrentLanguage != null)
|
||||||
{
|
{
|
||||||
combobox_language.SelectedValue = Language.CurrentLanguage;
|
combobox_language.SelectedValue = Language.CurrentLanguage;
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Tools.InnoSetup" version="6.1.2" GeneratePathProperty="true" />
|
<PackageReference Include="Tools.InnoSetup" version="6.2.0" GeneratePathProperty="true" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<language description="繁體中文" ietf="zh-TW" version="1.0.0" languagegroup="1">
|
||||||
|
<resources>
|
||||||
|
<resource name="startup">讓 {#ExeName} 隨 Windows 自動啟動</resource>
|
||||||
|
<resource name="startgreenshot">啟動 {#ExeName}</resource>
|
||||||
|
<resource name="jira">Jira 擴充功能</resource>
|
||||||
|
<resource name="confluence">Confluence 擴充功能</resource>
|
||||||
|
<resource name="externalcommand">使用外部指令擴充功能開啟</resource>
|
||||||
|
<resource name="ocr">OCR 擴充功能 (需要 Microsoft Office Document Imaging (MODI))</resource>
|
||||||
|
<resource name="imgur">Imgur 擴充功能 (請見:https://imgur.com)</resource>
|
||||||
|
<resource name="language">其他語言</resource>
|
||||||
|
<resource name="optimize">正在最佳化性能,這可能需要一點時間。</resource>
|
||||||
|
</resources>
|
||||||
|
</language>
|
|
@ -1,18 +1,19 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<language description="Čeština" ietf="cs-CZ" version="1.0.1" languagegroup="2">
|
<language description="Čeština" ietf="cs-CZ" version="1.0.2" languagegroup="2">
|
||||||
<resources>
|
<resources>
|
||||||
<resource name="about_bugs">Chyby prosím hlaste na adrese</resource>
|
<resource name="about_bugs">Chyby prosím hlaste na adrese</resource>
|
||||||
<resource name="about_donations">Pokud se vám Greenshot líbí, uvítáme Vaší podporu</resource>
|
<resource name="about_donations">Pokud se vám Greenshot líbí, uvítáme Vaší podporu</resource>
|
||||||
<resource name="about_host">Greenshot je hostován na sourceforge.net</resource>
|
<resource name="about_host">Greenshot je hostován na github.com</resource>
|
||||||
<resource name="about_icons">Ikony pochází ze sady Yusuke Kamiyamane's Fugue (licence Creative Commons Attribution 3.0)</resource>
|
<resource name="about_icons">Ikony pochází ze sady Yusuke Kamiyamane's Fugue (licence Creative Commons Attribution 3.0)</resource>
|
||||||
<resource name="about_license">Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
<resource name="about_license">Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
Greenshot je ABSOLUTNĚ BEZ ZÁRUKY. Toto je svobodný software, můžete jej dále šířit za určitých podmínek.
|
Greenshot je ABSOLUTNĚ BEZ ZÁRUKY. Toto je svobodný software, můžete jej dále šířit za určitých podmínek.
|
||||||
Podrobnosti o GNU General Public License:</resource>
|
Podrobnosti o GNU General Public License:</resource>
|
||||||
<resource name="about_title">O programu Greenshot</resource>
|
<resource name="about_title">O programu Greenshot</resource>
|
||||||
<resource name="about_translation">Překlad: Zdeněk Chalupský <chalzd@gmail.com>. Korektura: Petr Toman</resource>
|
<resource name="about_translation">Překlad: Zdeněk Chalupský <chalzd@gmail.com>. Korektura: Petr Toman a Svatopluk Vít</resource>
|
||||||
<resource name="application_title">Greenshot - revoluční utilita pro snímání obrazovky</resource>
|
<resource name="application_title">Greenshot - revoluční utilita pro snímání obrazovky</resource>
|
||||||
<resource name="bugreport_cancel">Zavřít</resource>
|
<resource name="bugreport_cancel">Zavřít</resource>
|
||||||
<resource name="bugreport_info">Omlouváme se, ale došlo k neočekávané chybě.
|
<resource name="bugreport_info">Omlouváme se, ale došlo k neočekávané chybě.
|
||||||
|
|
||||||
Dobrá zpráva: můžete nám pomoci odstranit chybu, když o ní podáte hlášení.
|
Dobrá zpráva: můžete nám pomoci odstranit chybu, když o ní podáte hlášení.
|
||||||
Navštivte prosím níže uvedenou adresu, vytvořte nové hlášení o chybě a vložte popis chyby.
|
Navštivte prosím níže uvedenou adresu, vytvořte nové hlášení o chybě a vložte popis chyby.
|
||||||
|
|
||||||
|
@ -24,7 +25,7 @@ Také bychom velmi ocenili, kdybyste zkontrolovali, zda tato chyba již není ev
|
||||||
<resource name="clipboard_inuse">Greenshot nemohl zapsat data do schránky, je {0} blokován přístup.</resource>
|
<resource name="clipboard_inuse">Greenshot nemohl zapsat data do schránky, je {0} blokován přístup.</resource>
|
||||||
<resource name="clipboard_noimage">Obrázek ve schránce nebyl nalezen.</resource>
|
<resource name="clipboard_noimage">Obrázek ve schránce nebyl nalezen.</resource>
|
||||||
<resource name="ClipboardFormat.BITMAP">Windows Bitmap</resource>
|
<resource name="ClipboardFormat.BITMAP">Windows Bitmap</resource>
|
||||||
<resource name="ClipboardFormat.DIB">Zařízení Independent Bitmap (DIB)</resource>
|
<resource name="ClipboardFormat.DIB">Device Independent Bitmap (DIB)</resource>
|
||||||
<resource name="ClipboardFormat.HTML">HTML</resource>
|
<resource name="ClipboardFormat.HTML">HTML</resource>
|
||||||
<resource name="ClipboardFormat.HTMLDATAURL">HTML s vloženými obrázky</resource>
|
<resource name="ClipboardFormat.HTMLDATAURL">HTML s vloženými obrázky</resource>
|
||||||
<resource name="ClipboardFormat.PNG">PNG</resource>
|
<resource name="ClipboardFormat.PNG">PNG</resource>
|
||||||
|
@ -44,17 +45,17 @@ Také bychom velmi ocenili, kdybyste zkontrolovali, zda tato chyba již není ev
|
||||||
<resource name="contextmenu_capturearea">Označit oblast snímání</resource>
|
<resource name="contextmenu_capturearea">Označit oblast snímání</resource>
|
||||||
<resource name="contextmenu_captureclipboard">Otevřít obrázek ze schránky</resource>
|
<resource name="contextmenu_captureclipboard">Otevřít obrázek ze schránky</resource>
|
||||||
<resource name="contextmenu_capturefullscreen">Zachytit celou obrazovku</resource>
|
<resource name="contextmenu_capturefullscreen">Zachytit celou obrazovku</resource>
|
||||||
<resource name="contextmenu_capturefullscreen_all">vše</resource>
|
<resource name="contextmenu_capturefullscreen_all">Vše</resource>
|
||||||
<resource name="contextmenu_capturefullscreen_bottom">spodní</resource>
|
<resource name="contextmenu_capturefullscreen_bottom">Spodní</resource>
|
||||||
<resource name="contextmenu_capturefullscreen_left">vlevo</resource>
|
<resource name="contextmenu_capturefullscreen_left">Vlevo</resource>
|
||||||
<resource name="contextmenu_capturefullscreen_right">vpravo</resource>
|
<resource name="contextmenu_capturefullscreen_right">Vpravo</resource>
|
||||||
<resource name="contextmenu_capturefullscreen_top">horní</resource>
|
<resource name="contextmenu_capturefullscreen_top">Nahoře</resource>
|
||||||
<resource name="contextmenu_captureie">Zachytávat aplikaci Internet Explorer</resource>
|
<resource name="contextmenu_captureie">Zachytávat aplikaci Internet Explorer</resource>
|
||||||
<resource name="contextmenu_captureiefromlist">Zachytit Internet Explorer ze seznamu</resource>
|
<resource name="contextmenu_captureiefromlist">Zachytit Internet Explorer ze seznamu</resource>
|
||||||
<resource name="contextmenu_capturelastregion">Zachycení poslední oblasti</resource>
|
<resource name="contextmenu_capturelastregion">Zachycení posledně snímané oblasti</resource>
|
||||||
<resource name="contextmenu_capturewindow">Vybrat okno pro zachycení</resource>
|
<resource name="contextmenu_capturewindow">Vybrat snímané okno</resource>
|
||||||
<resource name="contextmenu_capturewindowfromlist">Zachytit okno ze seznamu</resource>
|
<resource name="contextmenu_capturewindowfromlist">Snímat okno ze seznamu</resource>
|
||||||
<resource name="contextmenu_donate">Podpora pro Greenshot</resource>
|
<resource name="contextmenu_donate">Podpora Greenshotu</resource>
|
||||||
<resource name="contextmenu_exit">Konec</resource>
|
<resource name="contextmenu_exit">Konec</resource>
|
||||||
<resource name="contextmenu_help">Nápověda</resource>
|
<resource name="contextmenu_help">Nápověda</resource>
|
||||||
<resource name="contextmenu_openfile">Otevřít obrázek ze souboru</resource>
|
<resource name="contextmenu_openfile">Otevřít obrázek ze souboru</resource>
|
||||||
|
@ -80,12 +81,12 @@ Také bychom velmi ocenili, kdybyste zkontrolovali, zda tato chyba již není ev
|
||||||
<resource name="editor_backcolor">Barva výplně</resource>
|
<resource name="editor_backcolor">Barva výplně</resource>
|
||||||
<resource name="editor_blur_radius">Poloměr rozostření</resource>
|
<resource name="editor_blur_radius">Poloměr rozostření</resource>
|
||||||
<resource name="editor_bold">Tučné</resource>
|
<resource name="editor_bold">Tučné</resource>
|
||||||
<resource name="editor_border">Hranice</resource>
|
<resource name="editor_border">Okraj</resource>
|
||||||
<resource name="editor_brightness">Jas</resource>
|
<resource name="editor_brightness">Jas</resource>
|
||||||
<resource name="editor_cancel">Zrušit</resource>
|
<resource name="editor_cancel">Zrušit</resource>
|
||||||
<resource name="editor_clipboardfailed">Chyba při přístupu do schránky. Zkuste to prosím znovu.</resource>
|
<resource name="editor_clipboardfailed">Chyba při přístupu do schránky. Zkuste to prosím znovu.</resource>
|
||||||
<resource name="editor_close">Zavřít</resource>
|
<resource name="editor_close">Zavřít</resource>
|
||||||
<resource name="editor_close_on_save">Přejete si uložit snímek?</resource>
|
<resource name="editor_close_on_save">Chcete uložit snímek?</resource>
|
||||||
<resource name="editor_close_on_save_title">Uložit snímek?</resource>
|
<resource name="editor_close_on_save_title">Uložit snímek?</resource>
|
||||||
<resource name="editor_confirm">Potvrdit</resource>
|
<resource name="editor_confirm">Potvrdit</resource>
|
||||||
<resource name="editor_copyimagetoclipboard">Kopírovat obrázek do schránky</resource>
|
<resource name="editor_copyimagetoclipboard">Kopírovat obrázek do schránky</resource>
|
||||||
|
@ -103,11 +104,11 @@ Také bychom velmi ocenili, kdybyste zkontrolovali, zda tato chyba již není ev
|
||||||
<resource name="editor_drawhighlighter">Zvýraznit (H)</resource>
|
<resource name="editor_drawhighlighter">Zvýraznit (H)</resource>
|
||||||
<resource name="editor_drawline">Nakreslit linku (L)</resource>
|
<resource name="editor_drawline">Nakreslit linku (L)</resource>
|
||||||
<resource name="editor_drawrectangle">Nakreslit obdélník (R)</resource>
|
<resource name="editor_drawrectangle">Nakreslit obdélník (R)</resource>
|
||||||
<resource name="editor_drawtextbox">Přidat textbox (T)</resource>
|
<resource name="editor_drawtextbox">Přidat textový rámec (T)</resource>
|
||||||
<resource name="editor_duplicate">Duplikovat vybraný prvek</resource>
|
<resource name="editor_duplicate">Duplikovat vybraný prvek</resource>
|
||||||
<resource name="editor_edit">Úpravy</resource>
|
<resource name="editor_edit">Úpravy</resource>
|
||||||
<resource name="editor_effects">Efekty</resource>
|
<resource name="editor_effects">Efekty</resource>
|
||||||
<resource name="editor_email">E-Mail</resource>
|
<resource name="editor_email">E-mail</resource>
|
||||||
<resource name="editor_file">Soubor</resource>
|
<resource name="editor_file">Soubor</resource>
|
||||||
<resource name="editor_fontsize">Velikost</resource>
|
<resource name="editor_fontsize">Velikost</resource>
|
||||||
<resource name="editor_forecolor">Barva čáry</resource>
|
<resource name="editor_forecolor">Barva čáry</resource>
|
||||||
|
@ -121,7 +122,7 @@ Také bychom velmi ocenili, kdybyste zkontrolovali, zda tato chyba již není ev
|
||||||
<resource name="editor_imagesaved">Obrázek uložen do {0}.</resource>
|
<resource name="editor_imagesaved">Obrázek uložen do {0}.</resource>
|
||||||
<resource name="editor_insertwindow">Vložit okno</resource>
|
<resource name="editor_insertwindow">Vložit okno</resource>
|
||||||
<resource name="editor_invert">Invertovat</resource>
|
<resource name="editor_invert">Invertovat</resource>
|
||||||
<resource name="editor_italic">Italika</resource>
|
<resource name="editor_italic">Skloněné</resource>
|
||||||
<resource name="editor_load_objects">Načíst objekty ze souboru</resource>
|
<resource name="editor_load_objects">Načíst objekty ze souboru</resource>
|
||||||
<resource name="editor_magnification_factor">Faktor zvětšení</resource>
|
<resource name="editor_magnification_factor">Faktor zvětšení</resource>
|
||||||
<resource name="editor_match_capture_size">Přizpůsobit velikosti snímku</resource>
|
<resource name="editor_match_capture_size">Přizpůsobit velikosti snímku</resource>
|
||||||
|
@ -130,10 +131,10 @@ Také bychom velmi ocenili, kdybyste zkontrolovali, zda tato chyba již není ev
|
||||||
<resource name="editor_obfuscate_mode">Ztížení rozeznání obsahu</resource>
|
<resource name="editor_obfuscate_mode">Ztížení rozeznání obsahu</resource>
|
||||||
<resource name="editor_obfuscate_pixelize">Pixelizace</resource>
|
<resource name="editor_obfuscate_pixelize">Pixelizace</resource>
|
||||||
<resource name="editor_object">Objekt</resource>
|
<resource name="editor_object">Objekt</resource>
|
||||||
<resource name="editor_opendirinexplorer">Otevřít složku v prohlížeči Windows</resource>
|
<resource name="editor_opendirinexplorer">Otevřít složku v průzkumníkovi Windows</resource>
|
||||||
<resource name="editor_pastefromclipboard">Vložit</resource>
|
<resource name="editor_pastefromclipboard">Vložit</resource>
|
||||||
<resource name="editor_pixel_size">Velikost pixelu</resource>
|
<resource name="editor_pixel_size">Velikost pixelu</resource>
|
||||||
<resource name="editor_preview_quality">Náhled kvality</resource>
|
<resource name="editor_preview_quality">Kvalita náhledu</resource>
|
||||||
<resource name="editor_print">Tisk</resource>
|
<resource name="editor_print">Tisk</resource>
|
||||||
<resource name="editor_redo">Znovu {0}</resource>
|
<resource name="editor_redo">Znovu {0}</resource>
|
||||||
<resource name="editor_resetsize">Obnovit velikost</resource>
|
<resource name="editor_resetsize">Obnovit velikost</resource>
|
||||||
|
@ -167,7 +168,7 @@ Zkontrolujte prosím dostupnost vybraného cíle.</resource>
|
||||||
<resource name="error_save_invalid_chars">Vygenerovaný název souboru nebo složky není platný. Opravte prosím vzor názvu a zkuste to znovu.</resource>
|
<resource name="error_save_invalid_chars">Vygenerovaný název souboru nebo složky není platný. Opravte prosím vzor názvu a zkuste to znovu.</resource>
|
||||||
<resource name="expertsettings">Expert</resource>
|
<resource name="expertsettings">Expert</resource>
|
||||||
<resource name="expertsettings_autoreducecolors">Vytvořit 8bitový obrázek, pokud má méně než 256 barev</resource>
|
<resource name="expertsettings_autoreducecolors">Vytvořit 8bitový obrázek, pokud má méně než 256 barev</resource>
|
||||||
<resource name="expertsettings_checkunstableupdates">Kontrolovat nestabilní aktualizace</resource>
|
<resource name="expertsettings_checkunstableupdates">Kontrolovat aktualizace nestabilních verzí</resource>
|
||||||
<resource name="expertsettings_clipboardformats">Formáty schránky</resource>
|
<resource name="expertsettings_clipboardformats">Formáty schránky</resource>
|
||||||
<resource name="expertsettings_counter">Číslo pro ${NUM} ve vzoru pro název souboru</resource>
|
<resource name="expertsettings_counter">Číslo pro ${NUM} ve vzoru pro název souboru</resource>
|
||||||
<resource name="expertsettings_enableexpert">Vím, co dělám!</resource>
|
<resource name="expertsettings_enableexpert">Vím, co dělám!</resource>
|
||||||
|
@ -181,7 +182,7 @@ Zkontrolujte prosím dostupnost vybraného cíle.</resource>
|
||||||
<resource name="exported_to_error">Došlo k chybě při exportu do{0}:</resource>
|
<resource name="exported_to_error">Došlo k chybě při exportu do{0}:</resource>
|
||||||
<resource name="help_title">Nápověda Greenshot</resource>
|
<resource name="help_title">Nápověda Greenshot</resource>
|
||||||
<resource name="hotkeys">Klávesové zkratky</resource>
|
<resource name="hotkeys">Klávesové zkratky</resource>
|
||||||
<resource name="jpegqualitydialog_choosejpegquality">Vyberte nastavení kvality obrázku v JPEG formátu</resource>
|
<resource name="jpegqualitydialog_choosejpegquality">Nastavte kvalitu obrázku v JPEG formátu</resource>
|
||||||
<resource name="OK">Ok</resource>
|
<resource name="OK">Ok</resource>
|
||||||
<resource name="print_error">Nastala chyba při pokusu o tisk.</resource>
|
<resource name="print_error">Nastala chyba při pokusu o tisk.</resource>
|
||||||
<resource name="printoptions_allowcenter">Centrovat obrázek na stránce</resource>
|
<resource name="printoptions_allowcenter">Centrovat obrázek na stránce</resource>
|
||||||
|
@ -213,7 +214,7 @@ Zkontrolujte prosím dostupnost vybraného cíle.</resource>
|
||||||
<resource name="settings_destination">Cíl snímku</resource>
|
<resource name="settings_destination">Cíl snímku</resource>
|
||||||
<resource name="settings_destination_clipboard">Kopírovat do schránky</resource>
|
<resource name="settings_destination_clipboard">Kopírovat do schránky</resource>
|
||||||
<resource name="settings_destination_editor">Otevřít v editoru obrázků</resource>
|
<resource name="settings_destination_editor">Otevřít v editoru obrázků</resource>
|
||||||
<resource name="settings_destination_email">E-Mail</resource>
|
<resource name="settings_destination_email">E-mail</resource>
|
||||||
<resource name="settings_destination_file">Uložit přímo (pomocí nastavení níže)</resource>
|
<resource name="settings_destination_file">Uložit přímo (pomocí nastavení níže)</resource>
|
||||||
<resource name="settings_destination_fileas">Uložit jako (zobrazit dialog)</resource>
|
<resource name="settings_destination_fileas">Uložit jako (zobrazit dialog)</resource>
|
||||||
<resource name="settings_destination_picker">Vybrat cíl dynamicky</resource>
|
<resource name="settings_destination_picker">Vybrat cíl dynamicky</resource>
|
||||||
|
@ -232,17 +233,20 @@ ${hh} hodina, 2 číslice
|
||||||
${mm} minuta, 2 číslice
|
${mm} minuta, 2 číslice
|
||||||
${ss} sekunda, 2 číslice
|
${ss} sekunda, 2 číslice
|
||||||
${NUM} počítadlo, 6 číslic
|
${NUM} počítadlo, 6 číslic
|
||||||
|
${RRR...} náhodný alfanumerický znak, délka dle počtu použitých znaků R
|
||||||
${title} titulek okna
|
${title} titulek okna
|
||||||
${user} uživatel Windows
|
${user} uživatel Windows
|
||||||
${domain} doména Windows
|
${domain} doména Windows
|
||||||
${hostname} název počítače
|
${hostname} název počítače
|
||||||
|
|
||||||
Složky také můžete vytvářet dynamicky pomocí zpětného lomítka (symbol \).
|
Složky také můžete vytvářet dynamicky pomocí zpětného lomítka (symbol \).
|
||||||
Například: ${YYYY}-${MM}-${DD}\${hh}-${mm}-${ss} vytvoří ve výchozím úložišti složku pro dnešní den, např. 2008-06-29, a název souboru snímku bude odvozen od aktuálního času, např. 11_58_32 (plus rozšíření uvedené v nastavení).</resource>
|
Například: ${YYYY}-${MM}-${DD}\${hh}-${mm}-${ss}
|
||||||
<resource name="settings_network">Síť a aktualizace</resource>
|
vytvoří ve výchozím úložišti složku pro dnešní den, např. 2008-06-29, a název souboru snímku bude odvozen od aktuálního času,
|
||||||
|
např. 11_58_32 (plus rozšíření uvedené v nastavení).</resource>
|
||||||
|
<resource name="settings_network">Síť a aktualizace</resource>
|
||||||
<resource name="settings_output">Výstup</resource>
|
<resource name="settings_output">Výstup</resource>
|
||||||
<resource name="settings_playsound">Přehrát zvuk uzávěrky fotoaparátu</resource>
|
<resource name="settings_playsound">Přehrát zvuk závěrky fotoaparátu</resource>
|
||||||
<resource name="settings_plugins">Pluginy</resource>
|
<resource name="settings_plugins">Zásuvné moduly</resource>
|
||||||
<resource name="settings_plugins_createdby">Autor</resource>
|
<resource name="settings_plugins_createdby">Autor</resource>
|
||||||
<resource name="settings_plugins_dllpath">Cesta k DLL</resource>
|
<resource name="settings_plugins_dllpath">Cesta k DLL</resource>
|
||||||
<resource name="settings_plugins_name">Název</resource>
|
<resource name="settings_plugins_name">Název</resource>
|
||||||
|
@ -270,7 +274,7 @@ Například: ${YYYY}-${MM}-${DD}\${hh}-${mm}-${ss} vytvoří ve výchozím úlo
|
||||||
<resource name="settings_window_capture_mode">Režim zachycování okna</resource>
|
<resource name="settings_window_capture_mode">Režim zachycování okna</resource>
|
||||||
<resource name="settings_windowscapture">Snímek okna</resource>
|
<resource name="settings_windowscapture">Snímek okna</resource>
|
||||||
<resource name="tooltip_firststart">Klikněte pravým tlačítkem myši nebo stiskněte klávesu PrtSc.</resource>
|
<resource name="tooltip_firststart">Klikněte pravým tlačítkem myši nebo stiskněte klávesu PrtSc.</resource>
|
||||||
<resource name="update_found">K dispozici je novější verze Greenshot! Přejete si stáhnout Greenshot {0}?</resource>
|
<resource name="update_found">K dispozici je novější verze aplikace Greenshot! Přejete si stáhnout Greenshot {0}?</resource>
|
||||||
<resource name="wait_ie_capture">Počkejte prosím než bude zachycena stránka v aplikaci Internet Explorer...</resource>
|
<resource name="wait_ie_capture">Počkejte prosím než bude zachycena stránka v aplikaci Internet Explorer...</resource>
|
||||||
<resource name="warning">Upozornění</resource>
|
<resource name="warning">Upozornění</resource>
|
||||||
<resource name="warning_hotkeys">Klávesovou(é) zkratku(y) "{0}" nelze použít. Tento problém je pravděpodobně způsoben jiným programem používajícím tytéž klávesové zkratky! Můžete změnit nastavení klávesových zkratek, deaktivovat je nebo změnit nastavení softwaru využívajícího shodné klávesové zkratky.
|
<resource name="warning_hotkeys">Klávesovou(é) zkratku(y) "{0}" nelze použít. Tento problém je pravděpodobně způsoben jiným programem používajícím tytéž klávesové zkratky! Můžete změnit nastavení klávesových zkratek, deaktivovat je nebo změnit nastavení softwaru využívajícího shodné klávesové zkratky.
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
<!--
|
<!--
|
||||||
Note to translator: uncomment entry "about_translation" to have
|
Note to translator: uncomment entry "about_translation" to have
|
||||||
your efforts honored in the "About Greenshot" dialog
|
your efforts honored in the "About Greenshot" dialog
|
||||||
|
TODO: remove newlines as in other files -> this leads to problems in multiline texts (or try xml:space=preserve)
|
||||||
-->
|
-->
|
||||||
<resource name="about_translation">
|
<resource name="about_translation">
|
||||||
Dansk oversættelse af Jens Jacob Thomsen
|
Dansk oversættelse af Jens Jacob Thomsen
|
||||||
|
|
|
@ -78,7 +78,7 @@ Also, we would highly appreciate if you checked whether a tracker item already e
|
||||||
<resource name="editor_arrowheads_none">None</resource>
|
<resource name="editor_arrowheads_none">None</resource>
|
||||||
<resource name="editor_arrowheads_start">Start point</resource>
|
<resource name="editor_arrowheads_start">Start point</resource>
|
||||||
<resource name="editor_autocrop">Auto crop</resource>
|
<resource name="editor_autocrop">Auto crop</resource>
|
||||||
<resource name="editor_backcolor">Fill color</resource>
|
<resource name="editor_backcolor">Fill color (0-9)</resource>
|
||||||
<resource name="editor_blur_radius">Blur radius</resource>
|
<resource name="editor_blur_radius">Blur radius</resource>
|
||||||
<resource name="editor_bold">Bold</resource>
|
<resource name="editor_bold">Bold</resource>
|
||||||
<resource name="editor_border">Border</resource>
|
<resource name="editor_border">Border</resource>
|
||||||
|
@ -111,7 +111,7 @@ Also, we would highly appreciate if you checked whether a tracker item already e
|
||||||
<resource name="editor_email">E-Mail</resource>
|
<resource name="editor_email">E-Mail</resource>
|
||||||
<resource name="editor_file">File</resource>
|
<resource name="editor_file">File</resource>
|
||||||
<resource name="editor_fontsize">Size</resource>
|
<resource name="editor_fontsize">Size</resource>
|
||||||
<resource name="editor_forecolor">Line color</resource>
|
<resource name="editor_forecolor">Line color (NumPad0-9, Shift+0-9)</resource>
|
||||||
<resource name="editor_grayscale">Grayscale</resource>
|
<resource name="editor_grayscale">Grayscale</resource>
|
||||||
<resource name="editor_highlight_area">Highlight area</resource>
|
<resource name="editor_highlight_area">Highlight area</resource>
|
||||||
<resource name="editor_highlight_grayscale">Grayscale</resource>
|
<resource name="editor_highlight_grayscale">Grayscale</resource>
|
||||||
|
@ -147,7 +147,7 @@ Also, we would highly appreciate if you checked whether a tracker item already e
|
||||||
<resource name="editor_saveas">Save as...</resource>
|
<resource name="editor_saveas">Save as...</resource>
|
||||||
<resource name="editor_selectall">Select all</resource>
|
<resource name="editor_selectall">Select all</resource>
|
||||||
<resource name="editor_senttoprinter">Print job was sent to '{0}'.</resource>
|
<resource name="editor_senttoprinter">Print job was sent to '{0}'.</resource>
|
||||||
<resource name="editor_shadow">Drop shadow</resource>
|
<resource name="editor_shadow">Drop shadow (/)</resource>
|
||||||
<resource name="editor_storedtoclipboard">Image stored to clipboard.</resource>
|
<resource name="editor_storedtoclipboard">Image stored to clipboard.</resource>
|
||||||
<resource name="editor_thickness">Line thickness</resource>
|
<resource name="editor_thickness">Line thickness</resource>
|
||||||
<resource name="editor_title">Greenshot image editor</resource>
|
<resource name="editor_title">Greenshot image editor</resource>
|
||||||
|
|
|
@ -78,7 +78,7 @@ Controleer ook even of dit probleem mogelijk al gemeld is! Gebruik de zoekfuncti
|
||||||
<resource name="editor_arrowheads_none">Geen</resource>
|
<resource name="editor_arrowheads_none">Geen</resource>
|
||||||
<resource name="editor_arrowheads_start">Startpunt</resource>
|
<resource name="editor_arrowheads_start">Startpunt</resource>
|
||||||
<resource name="editor_autocrop">Automatisch bijsnijden</resource>
|
<resource name="editor_autocrop">Automatisch bijsnijden</resource>
|
||||||
<resource name="editor_backcolor">Vulkleur</resource>
|
<resource name="editor_backcolor">Vulkleur (0-9)</resource>
|
||||||
<resource name="editor_blur_radius">Vervagingsradius</resource>
|
<resource name="editor_blur_radius">Vervagingsradius</resource>
|
||||||
<resource name="editor_bold">Vet</resource>
|
<resource name="editor_bold">Vet</resource>
|
||||||
<resource name="editor_border">Rand</resource>
|
<resource name="editor_border">Rand</resource>
|
||||||
|
@ -111,7 +111,7 @@ Controleer ook even of dit probleem mogelijk al gemeld is! Gebruik de zoekfuncti
|
||||||
<resource name="editor_email">E-mail</resource>
|
<resource name="editor_email">E-mail</resource>
|
||||||
<resource name="editor_file">Bestand</resource>
|
<resource name="editor_file">Bestand</resource>
|
||||||
<resource name="editor_fontsize">Grootte</resource>
|
<resource name="editor_fontsize">Grootte</resource>
|
||||||
<resource name="editor_forecolor">Lijnkleur</resource>
|
<resource name="editor_forecolor">Lijnkleur (NumPad0-9, Shift+0-9)</resource>
|
||||||
<resource name="editor_grayscale">Grijstinten</resource>
|
<resource name="editor_grayscale">Grijstinten</resource>
|
||||||
<resource name="editor_highlight_area">Gebied markeren</resource>
|
<resource name="editor_highlight_area">Gebied markeren</resource>
|
||||||
<resource name="editor_highlight_grayscale">Grijstinten</resource>
|
<resource name="editor_highlight_grayscale">Grijstinten</resource>
|
||||||
|
@ -147,7 +147,7 @@ Controleer ook even of dit probleem mogelijk al gemeld is! Gebruik de zoekfuncti
|
||||||
<resource name="editor_saveas">Opslaan als…</resource>
|
<resource name="editor_saveas">Opslaan als…</resource>
|
||||||
<resource name="editor_selectall">Alles selecteren</resource>
|
<resource name="editor_selectall">Alles selecteren</resource>
|
||||||
<resource name="editor_senttoprinter">Afdruktaak verzonden naar '{0}'.</resource>
|
<resource name="editor_senttoprinter">Afdruktaak verzonden naar '{0}'.</resource>
|
||||||
<resource name="editor_shadow">Schaduw</resource>
|
<resource name="editor_shadow">Schaduw (/)</resource>
|
||||||
<resource name="editor_storedtoclipboard">Afbeelding opgeslagen op het klembord.</resource>
|
<resource name="editor_storedtoclipboard">Afbeelding opgeslagen op het klembord.</resource>
|
||||||
<resource name="editor_thickness">Lijndikte</resource>
|
<resource name="editor_thickness">Lijndikte</resource>
|
||||||
<resource name="editor_title">Greenshot beeldbewerker</resource>
|
<resource name="editor_title">Greenshot beeldbewerker</resource>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
<!--
|
<!--
|
||||||
Note to translator: uncomment entry "about_translation" to have
|
Note to translator: uncomment entry "about_translation" to have
|
||||||
your efforts honored in the "About Greenshot" dialog
|
your efforts honored in the "About Greenshot" dialog
|
||||||
|
TODO: remove newlines as in other files -> this leads to problems in multiline texts (or try xml:space=preserve)
|
||||||
-->
|
-->
|
||||||
<resource name="about_translation">
|
<resource name="about_translation">
|
||||||
Traducere în limba română - Radu Mogoș
|
Traducere în limba română - Radu Mogoș
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<language description="正體中文" ietf="zh-TW" version="1.1.4" languagegroup="9">
|
<language description="正體中文" ietf="zh-TW" version="1.2.10" languagegroup="9">
|
||||||
<resources>
|
<resources>
|
||||||
<resource name="about_bugs">請回報錯誤到以下網址</resource>
|
<resource name="about_bugs">請回報錯誤到以下網址</resource>
|
||||||
<resource name="about_donations">如果您喜歡 Greenshot,歡迎您支持我們:</resource>
|
<resource name="about_donations">如果您喜歡 Greenshot,歡迎您支持我們:</resource>
|
||||||
<resource name="about_host">Greenshot 的主機在 GitHub 網址是</resource>
|
<resource name="about_host">Greenshot 的主機在 GitHub 網址是</resource>
|
||||||
<resource name="about_icons">圖片來源: Yusuke Kamiyamane's Fugue 圖示集 (Creative Commons Attribution 3.0 授權)</resource>
|
<resource name="about_icons">圖片來源: Yusuke Kamiyamane's Fugue 圖示集 (Creative Commons Attribution 3.0 授權)</resource>
|
||||||
<resource name="about_license">Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
<resource name="about_license">Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
Greenshot 不對這個程式做任何擔保。 這個程式是自由軟體,您可以在 GNU General Public License 下任意散佈本軟體。
|
Greenshot 不對這個程式做任何擔保。這個程式是自由軟體,您可以在 GNU General Public License 下任意散佈本軟體。
|
||||||
關於GNU General Public License 詳細資料:</resource>
|
關於 GNU General Public License 詳細資料:</resource>
|
||||||
<resource name="about_title">關於 Greenshot</resource>
|
<resource name="about_title">關於 Greenshot</resource>
|
||||||
|
<resource name="about_translation"><!-- diplayed in about dialog, use to add credits or other translation-related info, e.g. "English translation by Jane Doe" --></resource>
|
||||||
<resource name="application_title">Greenshot - 革命性的螢幕截圖工具</resource>
|
<resource name="application_title">Greenshot - 革命性的螢幕截圖工具</resource>
|
||||||
<resource name="bugreport_cancel">關閉</resource>
|
<resource name="bugreport_cancel">關閉</resource>
|
||||||
<resource name="bugreport_info">很抱歉,發生未預期錯誤。
|
<resource name="bugreport_info">很抱歉,發生未預期錯誤。
|
||||||
|
@ -24,7 +25,7 @@ Greenshot 不對這個程式做任何擔保。 這個程式是自由軟體,您
|
||||||
<resource name="clipboard_inuse">Greenshot 無法將資料寫入剪貼簿,因為 {0} 已將剪貼簿鎖定。</resource>
|
<resource name="clipboard_inuse">Greenshot 無法將資料寫入剪貼簿,因為 {0} 已將剪貼簿鎖定。</resource>
|
||||||
<resource name="clipboard_noimage">找不到剪貼簿圖片。</resource>
|
<resource name="clipboard_noimage">找不到剪貼簿圖片。</resource>
|
||||||
<resource name="ClipboardFormat.BITMAP">Windows 點陣圖</resource>
|
<resource name="ClipboardFormat.BITMAP">Windows 點陣圖</resource>
|
||||||
<resource name="ClipboardFormat.DIB">Device Independend Bitmap (DIB)</resource>
|
<resource name="ClipboardFormat.DIB">Device Independent Bitmap (DIB)</resource>
|
||||||
<resource name="ClipboardFormat.HTML">HTML</resource>
|
<resource name="ClipboardFormat.HTML">HTML</resource>
|
||||||
<resource name="ClipboardFormat.HTMLDATAURL">HTML 含內嵌圖像</resource>
|
<resource name="ClipboardFormat.HTMLDATAURL">HTML 含內嵌圖像</resource>
|
||||||
<resource name="ClipboardFormat.PNG">PNG</resource>
|
<resource name="ClipboardFormat.PNG">PNG</resource>
|
||||||
|
@ -104,10 +105,6 @@ Greenshot 不對這個程式做任何擔保。 這個程式是自由軟體,您
|
||||||
<resource name="editor_drawline">繪製直線 (L)</resource>
|
<resource name="editor_drawline">繪製直線 (L)</resource>
|
||||||
<resource name="editor_drawrectangle">繪製矩形 (R)</resource>
|
<resource name="editor_drawrectangle">繪製矩形 (R)</resource>
|
||||||
<resource name="editor_drawtextbox">加入文字方塊 (T)</resource>
|
<resource name="editor_drawtextbox">加入文字方塊 (T)</resource>
|
||||||
<resource name="editor_dropshadow_darkness">陰影黑暗</resource>
|
|
||||||
<resource name="editor_dropshadow_offset">陰影偏移</resource>
|
|
||||||
<resource name="editor_dropshadow_settings">陰影設定</resource>
|
|
||||||
<resource name="editor_dropshadow_thickness">陰影厚度</resource>
|
|
||||||
<resource name="editor_duplicate">複製選取的元素</resource>
|
<resource name="editor_duplicate">複製選取的元素</resource>
|
||||||
<resource name="editor_edit">編輯</resource>
|
<resource name="editor_edit">編輯</resource>
|
||||||
<resource name="editor_effects">效果</resource>
|
<resource name="editor_effects">效果</resource>
|
||||||
|
@ -155,12 +152,8 @@ Greenshot 不對這個程式做任何擔保。 這個程式是自由軟體,您
|
||||||
<resource name="editor_thickness">直線粗細</resource>
|
<resource name="editor_thickness">直線粗細</resource>
|
||||||
<resource name="editor_title">Greenshot 圖片編輯器</resource>
|
<resource name="editor_title">Greenshot 圖片編輯器</resource>
|
||||||
<resource name="editor_torn_edge">撕裂邊緣</resource>
|
<resource name="editor_torn_edge">撕裂邊緣</resource>
|
||||||
<resource name="editor_tornedge_horizontaltoothrange">水平鋸齒範圍</resource>
|
<resource name="editor_undo">復原 {0}</resource>
|
||||||
<resource name="editor_tornedge_settings">撕裂邊緣設定</resource>
|
<resource name="editor_uponelevel">上移一層</resource>
|
||||||
<resource name="editor_tornedge_toothsize">鋸齒大小</resource>
|
|
||||||
<resource name="editor_tornedge_verticaltoothrange">垂直鋸齒範圍</resource>
|
|
||||||
<resource name="editor_undo">復原 {0}</resource>
|
|
||||||
<resource name="editor_uponelevel">上移一層</resource>
|
|
||||||
<resource name="editor_uptotop">移到最上層</resource>
|
<resource name="editor_uptotop">移到最上層</resource>
|
||||||
<resource name="EmailFormat.MAPI">MAPI 用戶端</resource>
|
<resource name="EmailFormat.MAPI">MAPI 用戶端</resource>
|
||||||
<resource name="EmailFormat.OUTLOOK_HTML">Outlook 使用 HTML</resource>
|
<resource name="EmailFormat.OUTLOOK_HTML">Outlook 使用 HTML</resource>
|
||||||
|
@ -172,12 +165,13 @@ Greenshot 不對這個程式做任何擔保。 這個程式是自由軟體,您
|
||||||
<resource name="error_openfile">無法開啟檔案「{0}」。</resource>
|
<resource name="error_openfile">無法開啟檔案「{0}」。</resource>
|
||||||
<resource name="error_openlink">無法開啟連結「{0}」。</resource>
|
<resource name="error_openlink">無法開啟連結「{0}」。</resource>
|
||||||
<resource name="error_save">無法儲存螢幕擷圖,請尋找適合的位置。</resource>
|
<resource name="error_save">無法儲存螢幕擷圖,請尋找適合的位置。</resource>
|
||||||
|
<resource name="error_save_invalid_chars">產生的檔名或是路徑名稱無效。請修正檔名樣式並重試。</resource>
|
||||||
<resource name="expertsettings">專家</resource>
|
<resource name="expertsettings">專家</resource>
|
||||||
<resource name="expertsettings_autoreducecolors">在 > 8 位元圖像時,如果色彩小於 256 則建立 8 位元圖像</resource>
|
<resource name="expertsettings_autoreducecolors">在 > 8 位元圖像時,如果色彩小於 256 則建立 8 位元圖像</resource>
|
||||||
<resource name="expertsettings_checkunstableupdates">檢查 Beta 版更新</resource>
|
<resource name="expertsettings_checkunstableupdates">檢查 Beta 版更新</resource>
|
||||||
<resource name="expertsettings_clipboardformats">剪貼簿格式</resource>
|
<resource name="expertsettings_clipboardformats">剪貼簿格式</resource>
|
||||||
<resource name="expertsettings_counter">檔案名稱樣式中 ${NUM} 的數字</resource>
|
<resource name="expertsettings_counter">檔案名稱樣式中 ${NUM} 的數字</resource>
|
||||||
<resource name="expertsettings_enableexpert">我明白我所做的動作!</resource>
|
<resource name="expertsettings_enableexpert">我知道我在做什麼!</resource>
|
||||||
<resource name="expertsettings_footerpattern">印表機頁尾樣式</resource>
|
<resource name="expertsettings_footerpattern">印表機頁尾樣式</resource>
|
||||||
<resource name="expertsettings_minimizememoryfootprint">最小化記憶體佔用空間,但降低效能 (不建議)。</resource>
|
<resource name="expertsettings_minimizememoryfootprint">最小化記憶體佔用空間,但降低效能 (不建議)。</resource>
|
||||||
<resource name="expertsettings_optimizeforrdp">進行使用遠端桌面的一些最佳化</resource>
|
<resource name="expertsettings_optimizeforrdp">進行使用遠端桌面的一些最佳化</resource>
|
||||||
|
@ -188,7 +182,7 @@ Greenshot 不對這個程式做任何擔保。 這個程式是自由軟體,您
|
||||||
<resource name="exported_to_error">匯出到 {0} 時發生錯誤:</resource>
|
<resource name="exported_to_error">匯出到 {0} 時發生錯誤:</resource>
|
||||||
<resource name="help_title">Greenshot 說明</resource>
|
<resource name="help_title">Greenshot 說明</resource>
|
||||||
<resource name="hotkeys">熱鍵</resource>
|
<resource name="hotkeys">熱鍵</resource>
|
||||||
<resource name="jpegqualitydialog_choosejpegquality">請選擇圖片的 JPEG品質。</resource>
|
<resource name="jpegqualitydialog_choosejpegquality">請選擇圖片的 JPEG 品質。</resource>
|
||||||
<resource name="OK">確定</resource>
|
<resource name="OK">確定</resource>
|
||||||
<resource name="print_error">嘗試列印時發生錯誤。</resource>
|
<resource name="print_error">嘗試列印時發生錯誤。</resource>
|
||||||
<resource name="printoptions_allowcenter">列印在紙張的正中央</resource>
|
<resource name="printoptions_allowcenter">列印在紙張的正中央</resource>
|
||||||
|
@ -231,7 +225,7 @@ Greenshot 不對這個程式做任何擔保。 這個程式是自由軟體,您
|
||||||
<resource name="settings_iecapture">Internet Explorer 擷取</resource>
|
<resource name="settings_iecapture">Internet Explorer 擷取</resource>
|
||||||
<resource name="settings_jpegquality">JPEG 品質</resource>
|
<resource name="settings_jpegquality">JPEG 品質</resource>
|
||||||
<resource name="settings_language">語言</resource>
|
<resource name="settings_language">語言</resource>
|
||||||
<resource name="settings_message_filenamepattern">在樣式定義中以下預留位置將自動取代:
|
<resource name="settings_message_filenamepattern">在樣式定義中以下預留位置將自動取代:
|
||||||
${YYYY} 年,4 位數字
|
${YYYY} 年,4 位數字
|
||||||
${MM} 月,2 位數字
|
${MM} 月,2 位數字
|
||||||
${DD} 日,2 位數字
|
${DD} 日,2 位數字
|
||||||
|
@ -239,6 +233,7 @@ ${hh} 時,2 位數字
|
||||||
${mm} 分,2 位數字
|
${mm} 分,2 位數字
|
||||||
${ss} 秒,2 位數字
|
${ss} 秒,2 位數字
|
||||||
${NUM} 自動編號,6 位數字
|
${NUM} 自動編號,6 位數字
|
||||||
|
${RRR...} 隨機編號, 與 R 的長度相同
|
||||||
${title} 視窗標題
|
${title} 視窗標題
|
||||||
${user} Windows 使用者名稱
|
${user} Windows 使用者名稱
|
||||||
${domain} Windows 網域名稱
|
${domain} Windows 網域名稱
|
||||||
|
@ -278,7 +273,7 @@ ${hostname} 電腦名稱
|
||||||
<resource name="settings_windowscapture">視窗擷取</resource>
|
<resource name="settings_windowscapture">視窗擷取</resource>
|
||||||
<resource name="settings_zoom">顯示放大鏡</resource>
|
<resource name="settings_zoom">顯示放大鏡</resource>
|
||||||
<resource name="tooltip_firststart">右鍵按一下這裡或是按下 {0} 鍵。</resource>
|
<resource name="tooltip_firststart">右鍵按一下這裡或是按下 {0} 鍵。</resource>
|
||||||
<resource name="update_found">Greenshot 的新版本可以使用! 您要下載 Greenshot {0} 嗎?</resource>
|
<resource name="update_found">Greenshot 的新版本可以使用! 您要下載 Greenshot {0} 嗎?</resource>
|
||||||
<resource name="wait_ie_capture">擷取 Internet Explorer 中頁面時請稍候...</resource>
|
<resource name="wait_ie_capture">擷取 Internet Explorer 中頁面時請稍候...</resource>
|
||||||
<resource name="warning">警告</resource>
|
<resource name="warning">警告</resource>
|
||||||
<resource name="warning_hotkeys">無法註冊熱鍵「{0}」。 這個問題可能是另一個工具要求使用相同的熱鍵。 您可以變更熱鍵設定或停用/變更軟體使用熱鍵。
|
<resource name="warning_hotkeys">無法註冊熱鍵「{0}」。 這個問題可能是另一個工具要求使用相同的熱鍵。 您可以變更熱鍵設定或停用/變更軟體使用熱鍵。
|
||||||
|
@ -289,5 +284,33 @@ Greenshot 所有功能仍然可以直接從通知區圖示的內容功能表動
|
||||||
<resource name="WindowCaptureMode.Auto">自動</resource>
|
<resource name="WindowCaptureMode.Auto">自動</resource>
|
||||||
<resource name="WindowCaptureMode.GDI">使用預設色彩</resource>
|
<resource name="WindowCaptureMode.GDI">使用預設色彩</resource>
|
||||||
<resource name="WindowCaptureMode.Screen">如顯示</resource>
|
<resource name="WindowCaptureMode.Screen">如顯示</resource>
|
||||||
|
|
||||||
|
<!-- 1.2 -->
|
||||||
|
<resource name="editor_dropshadow_darkness">陰影黑暗</resource>
|
||||||
|
<resource name="editor_dropshadow_offset">陰影偏移</resource>
|
||||||
|
<resource name="editor_dropshadow_settings">陰影設定</resource>
|
||||||
|
<resource name="editor_dropshadow_thickness">陰影厚度</resource>
|
||||||
|
|
||||||
|
<resource name="editor_tornedge_horizontaltoothrange">水平鋸齒範圍</resource>
|
||||||
|
<resource name="editor_tornedge_settings">撕裂邊緣設定</resource>
|
||||||
|
<resource name="editor_tornedge_toothsize">鋸齒大小</resource>
|
||||||
|
<resource name="editor_tornedge_verticaltoothrange">垂直鋸齒範圍</resource>
|
||||||
|
<resource name="editor_tornedge_all">撕裂所有邊緣</resource>
|
||||||
|
<resource name="editor_tornedge_left">左側</resource>
|
||||||
|
<resource name="editor_tornedge_right">右側</resource>
|
||||||
|
<resource name="editor_tornedge_top">上方</resource>
|
||||||
|
<resource name="editor_tornedge_bottom">下方</resource>
|
||||||
|
<resource name="editor_tornedge_shadow">產生陰影</resource>
|
||||||
|
|
||||||
|
<resource name="editor_counter">加入計數器 (I)</resource>
|
||||||
|
<resource name="editor_speechbubble">加入對話框 (S)</resource>
|
||||||
|
|
||||||
|
<resource name="editor_resize">縮放</resource>
|
||||||
|
<resource name="editor_resize_settings">縮放設定</resource>
|
||||||
|
<resource name="editor_resize_aspectratio">維持長寬比</resource>
|
||||||
|
<resource name="editor_resize_width">長度</resource>
|
||||||
|
<resource name="editor_resize_height">寬度</resource>
|
||||||
|
<resource name="settings_iconsize">圖示大小</resource>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
</language>
|
</language>
|
|
@ -12,7 +12,7 @@
|
||||||
<resource name="home_whatis_create">Quickly create screenshots of a selected region, window or fullscreen; you can even capture complete (scrolling) web pages from Internet Explorer.</resource>
|
<resource name="home_whatis_create">Quickly create screenshots of a selected region, window or fullscreen; you can even capture complete (scrolling) web pages from Internet Explorer.</resource>
|
||||||
<resource name="home_whatis_edit">Easily annotate, highlight or obfuscate parts of the screenshot.</resource>
|
<resource name="home_whatis_edit">Easily annotate, highlight or obfuscate parts of the screenshot.</resource>
|
||||||
<resource name="home_whatis_intro">Greenshot is a light-weight screenshot software tool for Windows with the following key features:</resource>
|
<resource name="home_whatis_intro">Greenshot is a light-weight screenshot software tool for Windows with the following key features:</resource>
|
||||||
<resource name="home_whatis_more">...and a lot more options simplyfying creation of and work with screenshots every day.</resource>
|
<resource name="home_whatis_more">...and a lot more options simplifying creation of and work with screenshots every day.</resource>
|
||||||
<resource name="home_whatis_send">Export the screenshot in various ways: save to file, send to printer, copy to clipboard, attach to e-mail, send Office programs or upload to photo sites like Flickr or Picasa, and others.</resource>
|
<resource name="home_whatis_send">Export the screenshot in various ways: save to file, send to printer, copy to clipboard, attach to e-mail, send Office programs or upload to photo sites like Flickr or Picasa, and others.</resource>
|
||||||
<resource name="home_whatis_usage">Being easy to understand and configurable, Greenshot is an efficient tool for project managers, software developers, technical writers, testers and anyone else creating screenshots.</resource>
|
<resource name="home_whatis_usage">Being easy to understand and configurable, Greenshot is an efficient tool for project managers, software developers, technical writers, testers and anyone else creating screenshots.</resource>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
19
src/Greenshot/Languages/website/language-website-zh-TW.xml
Normal file
19
src/Greenshot/Languages/website/language-website-zh-TW.xml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<language description="繁體中文" ietf="zh-TW" version="1.0.0" languagegroup="1">
|
||||||
|
<resources>
|
||||||
|
<resource name="home_downloads">下載</resource>
|
||||||
|
<resource name="home_headline">Greenshot - 為生產力最佳化的免費截圖工具</resource>
|
||||||
|
<resource name="home_opensource">Greenshot 免費且開源</resource>
|
||||||
|
<resource name="home_opensource_donate">如果 Greenshot 為您節省了許多時間和/或金錢,歡迎 <a href="/support/">贊助</a> Greenshot 的開發。</resource>
|
||||||
|
<resource name="home_opensource_gpl">Greenshot 採用 <a href="https://zh.wikipedia.org/zh-tw/GNU通用公共许可证" target="_blank">GPL</a> 授權,這表示該軟體能夠免費下載使用,即使是在商業環境中。</resource>
|
||||||
|
<resource name="home_seemore">想要了解更多嗎?</resource>
|
||||||
|
<resource name="home_seemore_screenshots">Greenshot 當然不只有這些功能而已。看看 Greenshot 的 <a title="Screenshots of Greenshot in action" href="/screenshots/">使用截圖</a>,或者試試 <a title="下載 Greenshot 的最新版本" href="/downloads/">Greenshot 的最新版本</a>。</resource>
|
||||||
|
<resource name="home_whatis">什麼是 Greenshot????</resource>
|
||||||
|
<resource name="home_whatis_create">快速擷取指定區域、視窗、或是全螢幕;您甚至可以在 Internet Explorer 中完整擷取整個網頁。</resource>
|
||||||
|
<resource name="home_whatis_edit">輕鬆地在截圖上作註解、醒目提示、及模糊區域。</resource>
|
||||||
|
<resource name="home_whatis_intro">Greenshot 是輕量化的截圖軟體,專為 Windows 設計,並有以下重點功能:</resource>
|
||||||
|
<resource name="home_whatis_more">...還有更多功能幫助您簡化截圖流程。</resource>
|
||||||
|
<resource name="home_whatis_send">以多種方式匯出截圖:儲存成檔案,傳送至印表機、複製到剪貼簿、作為附件傳送、傳送至 Office 程式、或是上傳到網路相簿,像是 Flickr 或 Picasa...等。</resource>
|
||||||
|
<resource name="home_whatis_usage">容易上手,又能客製化,對於專案經理、軟體開發者、技術寫作人員、測試人員以及其他需要經常截圖的工作者來說,Greenshot 絕對是幫助他們提升效率的好工具。</resource>
|
||||||
|
</resources>
|
||||||
|
</language>
|
|
@ -16,7 +16,7 @@
|
||||||
<application>
|
<application>
|
||||||
<!-- Windows 10 -->
|
<!-- Windows 10 -->
|
||||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||||
<maxversiontested Id="10.0.18363.0"/>
|
<maxversiontested Id="10.0.19044.0"/>
|
||||||
<!-- Windows 8.1 -->
|
<!-- Windows 8.1 -->
|
||||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
|
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
|
||||||
<!--Windows 8 -->
|
<!--Windows 8 -->
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue