mirror of
https://github.com/greenshot/greenshot
synced 2025-07-30 11:40:40 -07:00
FEATURE-758: This commit enhances the already made changes to also fix the size of the icons in the destination picker and the context menu. On top of that, if a large icon size is selected we try to get a larger (more defined) icon from the application unfortunately that doesn't improve the build in icons.
This commit is contained in:
parent
1da7d028a0
commit
9df25bdd76
13 changed files with 129 additions and 27 deletions
|
@ -56,18 +56,14 @@ namespace Greenshot.Configuration {
|
||||||
public int FreehandSensitivity;
|
public int FreehandSensitivity;
|
||||||
[IniProperty("SuppressSaveDialogAtClose", Description="Suppressed the 'do you want to save' dialog when closing the editor.", DefaultValue="False")]
|
[IniProperty("SuppressSaveDialogAtClose", Description="Suppressed the 'do you want to save' dialog when closing the editor.", DefaultValue="False")]
|
||||||
public bool SuppressSaveDialogAtClose;
|
public bool SuppressSaveDialogAtClose;
|
||||||
[IniProperty("ButtonIconSize", Description = "Defines the size of the icons for the buttons in the editor, default value 16,16 anything bigger will cause scaling", DefaultValue = "16,16")]
|
|
||||||
public Size ButtonIconSize;
|
|
||||||
|
|
||||||
public override void AfterLoad() {
|
public override void AfterLoad() {
|
||||||
base.AfterLoad();
|
base.AfterLoad();
|
||||||
if (RecentColors == null) {
|
if (RecentColors == null) {
|
||||||
RecentColors = new List<Color>();
|
RecentColors = new List<Color>();
|
||||||
}
|
}
|
||||||
if (ButtonIconSize == Size.Empty) {
|
|
||||||
ButtonIconSize = new Size(16,16);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <param name="requestingType">Type of the class for which to create the field</param>
|
/// <param name="requestingType">Type of the class for which to create the field</param>
|
||||||
/// <param name="fieldType">FieldType of the field to construct</param>
|
/// <param name="fieldType">FieldType of the field to construct</param>
|
||||||
/// <param name="scope">FieldType of the field to construct</param>
|
/// <param name="scope">FieldType of the field to construct</param>
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Greenshot - a free and open source screenshot tool
|
||||||
|
* Copyright (C) 2007-2014 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
|
*
|
||||||
|
* For more information see: http://getgreenshot.org/
|
||||||
|
* The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 1 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using Greenshot.IniFile;
|
||||||
|
using GreenshotPlugin.Core;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Greenshot.Controls {
|
||||||
|
/// <summary>
|
||||||
|
/// ToolStripProfessionalRenderer which draws the Check correctly when the icons are larger
|
||||||
|
/// </summary>
|
||||||
|
public class ContextMenuToolStripProfessionalRenderer : ToolStripProfessionalRenderer {
|
||||||
|
private static CoreConfiguration coreConfiguration = IniConfig.GetIniSection<CoreConfiguration>();
|
||||||
|
private static Image scaledCheckbox;
|
||||||
|
|
||||||
|
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) {
|
||||||
|
if (scaledCheckbox == null) {
|
||||||
|
scaledCheckbox = ImageHelper.ResizeImage(e.Image, true, coreConfiguration.IconSize.Width, coreConfiguration.IconSize.Height, null);
|
||||||
|
}
|
||||||
|
Rectangle old = e.ImageRectangle;
|
||||||
|
ToolStripItemImageRenderEventArgs clone = new ToolStripItemImageRenderEventArgs(e.Graphics, e.Item, scaledCheckbox, new Rectangle(old.X, 0, old.Width, old.Height));
|
||||||
|
base.OnRenderItemCheck(clone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
Greenshot/Forms/ImageEditorForm.Designer.cs
generated
10
Greenshot/Forms/ImageEditorForm.Designer.cs
generated
|
@ -291,7 +291,7 @@ namespace Greenshot {
|
||||||
// toolsToolStrip
|
// toolsToolStrip
|
||||||
//
|
//
|
||||||
this.toolsToolStrip.ClickThrough = true;
|
this.toolsToolStrip.ClickThrough = true;
|
||||||
this.toolsToolStrip.ImageScalingSize = editorConfiguration.ButtonIconSize;
|
this.toolsToolStrip.ImageScalingSize = coreConfiguration.IconSize;
|
||||||
this.toolsToolStrip.Dock = System.Windows.Forms.DockStyle.None;
|
this.toolsToolStrip.Dock = System.Windows.Forms.DockStyle.None;
|
||||||
this.toolsToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
this.toolsToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
||||||
this.toolsToolStrip.Renderer = new CustomToolStripProfessionalRenderer();
|
this.toolsToolStrip.Renderer = new CustomToolStripProfessionalRenderer();
|
||||||
|
@ -527,7 +527,7 @@ namespace Greenshot {
|
||||||
// menuStrip1
|
// menuStrip1
|
||||||
//
|
//
|
||||||
this.menuStrip1.ClickThrough = true;
|
this.menuStrip1.ClickThrough = true;
|
||||||
this.menuStrip1.ImageScalingSize = editorConfiguration.ButtonIconSize;
|
this.menuStrip1.ImageScalingSize = coreConfiguration.IconSize;
|
||||||
this.menuStrip1.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.menuStrip1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.menuStrip1.Stretch = true;
|
this.menuStrip1.Stretch = true;
|
||||||
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
@ -856,7 +856,7 @@ namespace Greenshot {
|
||||||
// destinationsToolStrip
|
// destinationsToolStrip
|
||||||
//
|
//
|
||||||
this.destinationsToolStrip.ClickThrough = true;
|
this.destinationsToolStrip.ClickThrough = true;
|
||||||
this.destinationsToolStrip.ImageScalingSize = editorConfiguration.ButtonIconSize;
|
this.destinationsToolStrip.ImageScalingSize = coreConfiguration.IconSize;
|
||||||
this.destinationsToolStrip.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.destinationsToolStrip.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.destinationsToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
this.destinationsToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
||||||
this.destinationsToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.destinationsToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
@ -1011,7 +1011,7 @@ namespace Greenshot {
|
||||||
// propertiesToolStrip
|
// propertiesToolStrip
|
||||||
//
|
//
|
||||||
this.propertiesToolStrip.ClickThrough = true;
|
this.propertiesToolStrip.ClickThrough = true;
|
||||||
this.propertiesToolStrip.ImageScalingSize = editorConfiguration.ButtonIconSize;
|
this.propertiesToolStrip.ImageScalingSize = coreConfiguration.IconSize;
|
||||||
this.propertiesToolStrip.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.propertiesToolStrip.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.propertiesToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
this.propertiesToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
||||||
this.propertiesToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.propertiesToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
@ -1045,7 +1045,7 @@ namespace Greenshot {
|
||||||
this.toolStripSeparator10,
|
this.toolStripSeparator10,
|
||||||
this.btnConfirm,
|
this.btnConfirm,
|
||||||
this.btnCancel});
|
this.btnCancel});
|
||||||
this.propertiesToolStrip.MinimumSize = new System.Drawing.Size(0, editorConfiguration.ButtonIconSize.Height + 8);
|
this.propertiesToolStrip.MinimumSize = new System.Drawing.Size(0, coreConfiguration.IconSize.Height + 8);
|
||||||
this.propertiesToolStrip.Name = "propertiesToolStrip";
|
this.propertiesToolStrip.Name = "propertiesToolStrip";
|
||||||
this.propertiesToolStrip.Stretch = true;
|
this.propertiesToolStrip.Stretch = true;
|
||||||
this.propertiesToolStrip.TabIndex = 2;
|
this.propertiesToolStrip.TabIndex = 2;
|
||||||
|
|
5
Greenshot/Forms/MainForm.Designer.cs
generated
5
Greenshot/Forms/MainForm.Designer.cs
generated
|
@ -103,9 +103,10 @@ namespace Greenshot {
|
||||||
this.toolStripCloseSeparator,
|
this.toolStripCloseSeparator,
|
||||||
this.contextmenu_exit});
|
this.contextmenu_exit});
|
||||||
this.contextMenu.Name = "contextMenu";
|
this.contextMenu.Name = "contextMenu";
|
||||||
this.contextMenu.Size = new System.Drawing.Size(171, 392);
|
|
||||||
this.contextMenu.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.ContextMenuClosing);
|
this.contextMenu.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.ContextMenuClosing);
|
||||||
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuOpening);
|
this.contextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuOpening);
|
||||||
|
this.contextMenu.ImageScalingSize = coreConfiguration.IconSize;
|
||||||
|
this.contextMenu.Renderer = new Greenshot.Controls.ContextMenuToolStripProfessionalRenderer();
|
||||||
//
|
//
|
||||||
// contextmenu_capturearea
|
// contextmenu_capturearea
|
||||||
//
|
//
|
||||||
|
@ -204,7 +205,7 @@ namespace Greenshot {
|
||||||
// contextmenu_quicksettings
|
// contextmenu_quicksettings
|
||||||
//
|
//
|
||||||
this.contextmenu_quicksettings.Name = "contextmenu_quicksettings";
|
this.contextmenu_quicksettings.Name = "contextmenu_quicksettings";
|
||||||
this.contextmenu_quicksettings.Size = new System.Drawing.Size(170, 22);
|
this.contextmenu_quicksettings.Size = new System.Drawing.Size(170, coreConfiguration.IconSize.Height + 8);
|
||||||
//
|
//
|
||||||
// contextmenu_settings
|
// contextmenu_settings
|
||||||
//
|
//
|
||||||
|
|
|
@ -368,8 +368,9 @@ namespace Greenshot {
|
||||||
|
|
||||||
numericUpDown_daysbetweencheck.Value = coreConfiguration.UpdateCheckInterval;
|
numericUpDown_daysbetweencheck.Value = coreConfiguration.UpdateCheckInterval;
|
||||||
numericUpDown_daysbetweencheck.Enabled = !coreConfiguration.Values["UpdateCheckInterval"].IsFixed;
|
numericUpDown_daysbetweencheck.Enabled = !coreConfiguration.Values["UpdateCheckInterval"].IsFixed;
|
||||||
text_icon_width.Text = editorConfiguration.ButtonIconSize.Width.ToString(CultureInfo.InvariantCulture);
|
coreConfiguration.FixIconSize();
|
||||||
text_icon_height.Text = editorConfiguration.ButtonIconSize.Height.ToString(CultureInfo.InvariantCulture);
|
text_icon_width.Text = coreConfiguration.IconSize.Width.ToString(CultureInfo.InvariantCulture);
|
||||||
|
text_icon_height.Text = coreConfiguration.IconSize.Height.ToString(CultureInfo.InvariantCulture);
|
||||||
CheckDestinationSettings();
|
CheckDestinationSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,12 +417,13 @@ namespace Greenshot {
|
||||||
|
|
||||||
int iconWidth;
|
int iconWidth;
|
||||||
if (int.TryParse(text_icon_width.Text, out iconWidth)) {
|
if (int.TryParse(text_icon_width.Text, out iconWidth)) {
|
||||||
editorConfiguration.ButtonIconSize.Width = iconWidth;
|
coreConfiguration.IconSize.Width = iconWidth;
|
||||||
}
|
}
|
||||||
int iconHeight;
|
int iconHeight;
|
||||||
if (int.TryParse(text_icon_height.Text, out iconHeight)) {
|
if (int.TryParse(text_icon_height.Text, out iconHeight)) {
|
||||||
editorConfiguration.ButtonIconSize.Height = iconHeight;
|
coreConfiguration.IconSize.Height = iconHeight;
|
||||||
}
|
}
|
||||||
|
coreConfiguration.FixIconSize();
|
||||||
try {
|
try {
|
||||||
if (checkbox_autostartshortcut.Checked) {
|
if (checkbox_autostartshortcut.Checked) {
|
||||||
// It's checked, so we set the RunUser if the RunAll isn't set.
|
// It's checked, so we set the RunUser if the RunAll isn't set.
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
using Greenshot.IniFile;
|
||||||
|
using GreenshotPlugin.Core;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -30,8 +32,10 @@ namespace Greenshot.Forms {
|
||||||
/// the ToolStripMenuSelectList makes it possible to have a single or multi-check menu
|
/// the ToolStripMenuSelectList makes it possible to have a single or multi-check menu
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ToolStripMenuSelectList : ToolStripMenuItem {
|
public class ToolStripMenuSelectList : ToolStripMenuItem {
|
||||||
|
private static CoreConfiguration coreConfiguration = IniConfig.GetIniSection<CoreConfiguration>();
|
||||||
private bool multiCheckAllowed = false;
|
private bool multiCheckAllowed = false;
|
||||||
private bool updateInProgress = false;
|
private bool updateInProgress = false;
|
||||||
|
private static Image defaultImage = ImageHelper.CreateEmpty(coreConfiguration.IconSize.Width, coreConfiguration.IconSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb, Color.Transparent, 96f, 96f);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Occurs when one of the list's child element's Checked state changes.
|
/// Occurs when one of the list's child element's Checked state changes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -45,6 +49,7 @@ namespace Greenshot.Forms {
|
||||||
Identifier = identifier;
|
Identifier = identifier;
|
||||||
CheckOnClick = false;
|
CheckOnClick = false;
|
||||||
multiCheckAllowed = allowMultiCheck;
|
multiCheckAllowed = allowMultiCheck;
|
||||||
|
Image = defaultImage;
|
||||||
}
|
}
|
||||||
public ToolStripMenuSelectList() : this(null,false) {}
|
public ToolStripMenuSelectList() : this(null,false) {}
|
||||||
public ToolStripMenuSelectList(Object identifier) : this(identifier,false) {}
|
public ToolStripMenuSelectList(Object identifier) : this(identifier,false) {}
|
||||||
|
@ -142,6 +147,10 @@ namespace Greenshot.Forms {
|
||||||
public void AddItem(string label, Image image, Object data, bool isChecked) {
|
public void AddItem(string label, Image image, Object data, bool isChecked) {
|
||||||
ToolStripMenuSelectListItem newItem = new ToolStripMenuSelectListItem();
|
ToolStripMenuSelectListItem newItem = new ToolStripMenuSelectListItem();
|
||||||
newItem.Text = label;
|
newItem.Text = label;
|
||||||
|
if (image == null) {
|
||||||
|
image = defaultImage;
|
||||||
|
}
|
||||||
|
newItem.DisplayStyle = ToolStripItemDisplayStyle.Text;
|
||||||
newItem.Image = image;
|
newItem.Image = image;
|
||||||
newItem.CheckOnClick = true;
|
newItem.CheckOnClick = true;
|
||||||
newItem.CheckStateChanged += ItemCheckStateChanged;
|
newItem.CheckStateChanged += ItemCheckStateChanged;
|
||||||
|
@ -243,7 +252,6 @@ namespace Greenshot.Forms {
|
||||||
/// Also the Checked property hides the normal checked property so we can render our own check
|
/// Also the Checked property hides the normal checked property so we can render our own check
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ToolStripMenuSelectListItem : ToolStripMenuItem {
|
public class ToolStripMenuSelectListItem : ToolStripMenuItem {
|
||||||
|
|
||||||
public object Data {
|
public object Data {
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
<Compile Include="Controls\ColorButton.cs">
|
<Compile Include="Controls\ColorButton.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Controls\ContextMenuToolStripProfessionalRenderer.cs" />
|
||||||
<Compile Include="Controls\CustomToolStripProfessionalRenderer.cs" />
|
<Compile Include="Controls\CustomToolStripProfessionalRenderer.cs" />
|
||||||
<Compile Include="Controls\NonJumpingPanel.cs">
|
<Compile Include="Controls\NonJumpingPanel.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
|
|
|
@ -11,10 +11,10 @@ Features:
|
||||||
* Due to BUG-1667 we had to remove the horizontal text alignment, this afflicts the textbox and the speech bubble.
|
* Due to BUG-1667 we had to remove the horizontal text alignment, this afflicts the textbox and the speech bubble.
|
||||||
* Added the possibility to select the region to capture by using the keyboard, use the cursor keys to move the cursor (ctrl-key speeds up the movement) and the enter key to mark the start and ending.
|
* Added the possibility to select the region to capture by using the keyboard, use the cursor keys to move the cursor (ctrl-key speeds up the movement) and the enter key to mark the start and ending.
|
||||||
* FEATURE-757: Greenshot will now store the last used region in the greenshot.ini, which makes it also available after a restart.
|
* FEATURE-757: Greenshot will now store the last used region in the greenshot.ini, which makes it also available after a restart.
|
||||||
|
* FEATURE-758: Due to the fact that more and more high DPI displays are used, we added a setting to change the icon size.
|
||||||
|
|
||||||
Changes:
|
Changes:
|
||||||
* JIRA: With JIRA 6.x using the SOAP (Webservice) API the access has gotten really slow, we improved the performance slightly by loading some information parallel. (In Greenshot 2.x we will move to another API.)
|
* JIRA: With JIRA 6.x using the SOAP (Webservice) API the access has gotten really slow, we improved the performance slightly by loading some information parallel. (In Greenshot 2.x we will move to another API.)
|
||||||
* Editor: Due to the amount of high DPI screens, we are testing the possibility to change the icon size. Look for the ButtonIconSize in the editor section of the greenshot.ini. Disadvantage: As the icons are bitmaps, enlarging them does look ugly.
|
|
||||||
|
|
||||||
Bugs Resolved:
|
Bugs Resolved:
|
||||||
* BUG-1667: removed horizontal alignment of textbox in input mode, as it caused problems with textbox focus and could not be implemented consistently anyway (no vertical alignment possible)
|
* BUG-1667: removed horizontal alignment of textbox in input mode, as it caused problems with textbox focus and could not be implemented consistently anyway (no vertical alignment possible)
|
||||||
|
|
|
@ -172,6 +172,7 @@ namespace GreenshotPlugin.Core {
|
||||||
// Generate an empty ExportInformation object, for when nothing was selected.
|
// Generate an empty ExportInformation object, for when nothing was selected.
|
||||||
ExportInformation exportInformation = new ExportInformation(Designation, Language.GetString("settings_destination_picker"));
|
ExportInformation exportInformation = new ExportInformation(Designation, Language.GetString("settings_destination_picker"));
|
||||||
ContextMenuStrip menu = new ContextMenuStrip();
|
ContextMenuStrip menu = new ContextMenuStrip();
|
||||||
|
menu.ImageScalingSize = configuration.IconSize;
|
||||||
menu.Tag = null;
|
menu.Tag = null;
|
||||||
|
|
||||||
menu.Closing += delegate(object source, ToolStripDropDownClosingEventArgs eventArgs) {
|
menu.Closing += delegate(object source, ToolStripDropDownClosingEventArgs eventArgs) {
|
||||||
|
|
|
@ -256,9 +256,18 @@ namespace GreenshotPlugin.Core {
|
||||||
[IniProperty("LastCapturedRegion", Description = "The last used region, for reuse in the capture last region")]
|
[IniProperty("LastCapturedRegion", Description = "The last used region, for reuse in the capture last region")]
|
||||||
public Rectangle LastCapturedRegion;
|
public Rectangle LastCapturedRegion;
|
||||||
|
|
||||||
|
[IniProperty("IconSize", Description = "Defines the size of the icons (e.g. for the buttons in the editor), default value 16,16 anything bigger will cause scaling", DefaultValue = "16,16")]
|
||||||
|
public Size IconSize;
|
||||||
|
|
||||||
// Specifies what THIS build is
|
// Specifies what THIS build is
|
||||||
public BuildStates BuildState = BuildStates.RELEASE_CANDIDATE;
|
public BuildStates BuildState = BuildStates.RELEASE_CANDIDATE;
|
||||||
|
|
||||||
|
public bool UseLargeIcons {
|
||||||
|
get {
|
||||||
|
return IconSize.Width >= 32 || IconSize.Height >= 32;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A helper method which returns true if the supplied experimental feature is enabled
|
/// A helper method which returns true if the supplied experimental feature is enabled
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -432,6 +441,30 @@ namespace GreenshotPlugin.Core {
|
||||||
if (OutputFileReduceColorsTo > 256) {
|
if (OutputFileReduceColorsTo > 256) {
|
||||||
OutputFileReduceColorsTo = 256;
|
OutputFileReduceColorsTo = 256;
|
||||||
}
|
}
|
||||||
|
FixIconSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Validation & correction of the icon size
|
||||||
|
/// </summary>
|
||||||
|
public void FixIconSize() {
|
||||||
|
if (IconSize == Size.Empty) {
|
||||||
|
IconSize = new Size(16, 16);
|
||||||
|
} else {
|
||||||
|
if (IconSize.Width < 16) {
|
||||||
|
IconSize.Width = 16;
|
||||||
|
}
|
||||||
|
if (IconSize.Width > 256) {
|
||||||
|
IconSize.Width = 256;
|
||||||
|
}
|
||||||
|
if (IconSize.Height < 16) {
|
||||||
|
IconSize.Height = 16;
|
||||||
|
}
|
||||||
|
if (IconSize.Height > 256) {
|
||||||
|
IconSize.Height = 256;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1392,10 +1392,14 @@ namespace GreenshotPlugin.Core {
|
||||||
Image newImage = null;
|
Image newImage = null;
|
||||||
if (maintainAspectRatio && canvasUseNewSize) {
|
if (maintainAspectRatio && canvasUseNewSize) {
|
||||||
newImage = CreateEmpty(newWidth, newHeight, sourceImage.PixelFormat, backgroundColor, sourceImage.HorizontalResolution, sourceImage.VerticalResolution);
|
newImage = CreateEmpty(newWidth, newHeight, sourceImage.PixelFormat, backgroundColor, sourceImage.HorizontalResolution, sourceImage.VerticalResolution);
|
||||||
matrix.Scale((float)newWidth / sourceImage.Width, (float)newHeight / sourceImage.Height, MatrixOrder.Append);
|
if (matrix != null) {
|
||||||
|
matrix.Scale((float)newWidth / sourceImage.Width, (float)newHeight / sourceImage.Height, MatrixOrder.Append);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
newImage = CreateEmpty(destWidth, destHeight, sourceImage.PixelFormat, backgroundColor, sourceImage.HorizontalResolution, sourceImage.VerticalResolution);
|
newImage = CreateEmpty(destWidth, destHeight, sourceImage.PixelFormat, backgroundColor, sourceImage.HorizontalResolution, sourceImage.VerticalResolution);
|
||||||
matrix.Scale((float)destWidth / sourceImage.Width, (float)destHeight / sourceImage.Height, MatrixOrder.Append);
|
if (matrix != null) {
|
||||||
|
matrix.Scale((float)destWidth / sourceImage.Width, (float)destHeight / sourceImage.Height, MatrixOrder.Append);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
using (Graphics graphics = Graphics.FromImage(newImage)) {
|
using (Graphics graphics = Graphics.FromImage(newImage)) {
|
||||||
|
|
|
@ -18,14 +18,16 @@
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
using Greenshot.IniFile;
|
||||||
|
using Greenshot.Plugin;
|
||||||
|
using GreenshotPlugin.UnmanagedHelpers;
|
||||||
|
using log4net;
|
||||||
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Greenshot.Plugin;
|
|
||||||
using log4net;
|
|
||||||
using Microsoft.Win32;
|
|
||||||
using GreenshotPlugin.UnmanagedHelpers;
|
|
||||||
|
|
||||||
namespace GreenshotPlugin.Core {
|
namespace GreenshotPlugin.Core {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -33,6 +35,7 @@ namespace GreenshotPlugin.Core {
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class PluginUtils {
|
public static class PluginUtils {
|
||||||
private static readonly ILog LOG = LogManager.GetLogger(typeof(PluginUtils));
|
private static readonly ILog LOG = LogManager.GetLogger(typeof(PluginUtils));
|
||||||
|
private static CoreConfiguration conf = IniConfig.GetIniSection<CoreConfiguration>();
|
||||||
private const string PATH_KEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\";
|
private const string PATH_KEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -79,12 +82,12 @@ namespace GreenshotPlugin.Core {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
using (Icon appIcon = ImageHelper.ExtractAssociatedIcon(path, index, false)) {
|
using (Icon appIcon = ImageHelper.ExtractAssociatedIcon(path, index, conf.UseLargeIcons)) {
|
||||||
if (appIcon != null) {
|
if (appIcon != null) {
|
||||||
return appIcon.ToBitmap();
|
return appIcon.ToBitmap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
using (Icon appIcon = Shell32.GetFileIcon(path, Shell32.IconSize.Small, false)) {
|
using (Icon appIcon = Shell32.GetFileIcon(path, conf.UseLargeIcons ? Shell32.IconSize.Large : Shell32.IconSize.Small, false)) {
|
||||||
if (appIcon != null) {
|
if (appIcon != null) {
|
||||||
return appIcon.ToBitmap();
|
return appIcon.ToBitmap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -336,7 +336,15 @@ namespace GreenshotPlugin.Core {
|
||||||
IntPtr ICON_BIG = new IntPtr(1);
|
IntPtr ICON_BIG = new IntPtr(1);
|
||||||
IntPtr ICON_SMALL2 = new IntPtr(2);
|
IntPtr ICON_SMALL2 = new IntPtr(2);
|
||||||
|
|
||||||
IntPtr iconHandle = User32.SendMessage(hwnd, (int)WindowsMessages.WM_GETICON, ICON_SMALL2, IntPtr.Zero);
|
IntPtr iconHandle = User32.SendMessage(hwnd, (int)WindowsMessages.WM_GETICON, ICON_BIG, IntPtr.Zero);
|
||||||
|
if (conf.UseLargeIcons) {
|
||||||
|
iconHandle = User32.SendMessage(hwnd, (int)WindowsMessages.WM_GETICON, ICON_BIG, IntPtr.Zero);
|
||||||
|
if (iconHandle == IntPtr.Zero) {
|
||||||
|
iconHandle = User32.GetClassLongWrapper(hwnd, (int)ClassLongIndex.GCL_HICON);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
iconHandle = User32.SendMessage(hwnd, (int)WindowsMessages.WM_GETICON, ICON_SMALL2, IntPtr.Zero);
|
||||||
|
}
|
||||||
if (iconHandle == IntPtr.Zero) {
|
if (iconHandle == IntPtr.Zero) {
|
||||||
iconHandle = User32.SendMessage(hwnd, (int)WindowsMessages.WM_GETICON, ICON_SMALL, IntPtr.Zero);
|
iconHandle = User32.SendMessage(hwnd, (int)WindowsMessages.WM_GETICON, ICON_SMALL, IntPtr.Zero);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue