mirror of
https://github.com/greenshot/greenshot
synced 2025-08-22 14:24:43 -07:00
Misc improvements
This commit is contained in:
parent
8d2becd0ca
commit
9d9ef12619
1 changed files with 73 additions and 25 deletions
|
@ -29,7 +29,6 @@ using System.Windows.Forms.Integration;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
using Greenshot.Base.Interfaces.Drawing;
|
using Greenshot.Base.Interfaces.Drawing;
|
||||||
using Greenshot.Editor.Drawing.Adorners;
|
|
||||||
using Greenshot.Editor.Helpers;
|
using Greenshot.Editor.Helpers;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Point = System.Drawing.Point;
|
using Point = System.Drawing.Point;
|
||||||
|
@ -46,8 +45,9 @@ namespace Greenshot.Editor.Drawing
|
||||||
private static readonly ILog Log = LogManager.GetLogger(typeof(IconContainer));
|
private static readonly ILog Log = LogManager.GetLogger(typeof(IconContainer));
|
||||||
|
|
||||||
[NonSerialized] private System.Windows.Controls.Image _image;
|
[NonSerialized] private System.Windows.Controls.Image _image;
|
||||||
|
[NonSerialized] private ElementHost _emojiPicker;
|
||||||
|
[NonSerialized] private bool _firstSelection = true;
|
||||||
|
|
||||||
private int _rotateAngle;
|
|
||||||
private string _emoji;
|
private string _emoji;
|
||||||
|
|
||||||
public string Emoji
|
public string Emoji
|
||||||
|
@ -77,33 +77,53 @@ namespace Greenshot.Editor.Drawing
|
||||||
|
|
||||||
public override void OnDoubleClick()
|
public override void OnDoubleClick()
|
||||||
{
|
{
|
||||||
var host = new ElementHost();
|
ShowEmojiPicker();
|
||||||
host.Dock = DockStyle.None;
|
}
|
||||||
var rect = GuiRectangle.GetGuiRectangle(Left, Top, Width, Height);
|
|
||||||
host.Width = rect.Width;
|
|
||||||
host.Height = rect.Height;
|
|
||||||
host.Left = rect.Left;
|
|
||||||
host.Top = rect.Top;
|
|
||||||
|
|
||||||
var picker = new Emoji.Wpf.Picker { Selection = Emoji };
|
private void ShowEmojiPicker()
|
||||||
picker.Picked += (o, args) =>
|
{
|
||||||
|
if (_emojiPicker == null)
|
||||||
|
{
|
||||||
|
var picker = new Emoji.Wpf.Picker();
|
||||||
|
picker.Picked += (_, args) =>
|
||||||
{
|
{
|
||||||
Emoji = args.Emoji;
|
Emoji = args.Emoji;
|
||||||
_parent.Controls.Remove(host);
|
Invalidate();
|
||||||
|
|
||||||
};
|
};
|
||||||
host.Child = picker;
|
|
||||||
|
_emojiPicker = new ElementHost();
|
||||||
|
_emojiPicker.Dock = DockStyle.None;
|
||||||
|
_emojiPicker.Child = picker;
|
||||||
|
}
|
||||||
|
|
||||||
|
var emojiPickerChild = ((Emoji.Wpf.Picker)_emojiPicker.Child);
|
||||||
|
emojiPickerChild.Selection = Emoji;
|
||||||
|
|
||||||
|
var absRectangle = GuiRectangle.GetGuiRectangle(Left, Top, Width, Height);
|
||||||
|
var displayRectangle = Parent.ToSurfaceCoordinates(absRectangle);
|
||||||
|
_emojiPicker.Width = 0; // Trick to hide the picker's button
|
||||||
|
_emojiPicker.Height = displayRectangle.Height;
|
||||||
|
_emojiPicker.Left = displayRectangle.Left;
|
||||||
|
_emojiPicker.Top = displayRectangle.Top;
|
||||||
|
|
||||||
if (_parent != null)
|
if (_parent != null)
|
||||||
{
|
{
|
||||||
_parent.KeysLocked = true;
|
_parent.KeysLocked = true;
|
||||||
_parent.Controls.Add(host);
|
_parent.Controls.Add(_emojiPicker);
|
||||||
}
|
}
|
||||||
|
|
||||||
host.Show();
|
emojiPickerChild.ShowPopup = true;
|
||||||
host.Focus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void HideEmojiPicker()
|
||||||
|
{
|
||||||
|
if (_parent != null && _emojiPicker != null)
|
||||||
|
{
|
||||||
|
_parent.Controls.Remove(_emojiPicker);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected override void OnDeserialized(StreamingContext streamingContext)
|
protected override void OnDeserialized(StreamingContext streamingContext)
|
||||||
{
|
{
|
||||||
base.OnDeserialized(streamingContext);
|
base.OnDeserialized(streamingContext);
|
||||||
|
@ -117,13 +137,24 @@ namespace Greenshot.Editor.Drawing
|
||||||
// Create WPF control
|
// Create WPF control
|
||||||
_image = new System.Windows.Controls.Image();
|
_image = new System.Windows.Controls.Image();
|
||||||
global::Emoji.Wpf.Image.SetSource(_image, Emoji);
|
global::Emoji.Wpf.Image.SetSource(_image, Emoji);
|
||||||
|
|
||||||
|
PropertyChanged += OnPropertyChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Transform(System.Drawing.Drawing2D.Matrix matrix)
|
private void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
_rotateAngle += CalculateAngle(matrix);
|
if (e.PropertyName.Equals(nameof(Selected)))
|
||||||
_rotateAngle %= 360;
|
{
|
||||||
base.Transform(matrix);
|
if (!Selected)
|
||||||
|
{
|
||||||
|
HideEmojiPicker();
|
||||||
|
}
|
||||||
|
else if (Status == EditStatus.IDLE && _firstSelection)
|
||||||
|
{
|
||||||
|
ShowEmojiPicker();
|
||||||
|
_firstSelection = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Draw(Graphics graphics, RenderMode rm)
|
public override void Draw(Graphics graphics, RenderMode rm)
|
||||||
|
@ -147,15 +178,32 @@ namespace Greenshot.Editor.Drawing
|
||||||
|
|
||||||
using var bitmap = BitmapFromSource(renderTargetBitmap);
|
using var bitmap = BitmapFromSource(renderTargetBitmap);
|
||||||
|
|
||||||
if (_rotateAngle != 0)
|
var rotationAngle = GetRotationAngle();
|
||||||
|
if (rotationAngle != 0)
|
||||||
{
|
{
|
||||||
graphics.DrawImage(RotateImage(bitmap, _rotateAngle), Bounds);
|
graphics.DrawImage(RotateImage(bitmap, rotationAngle), Bounds);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
graphics.DrawImage(bitmap, Bounds);
|
graphics.DrawImage(bitmap, Bounds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int GetRotationAngle()
|
||||||
|
{
|
||||||
|
int rotationAngle = 0;
|
||||||
|
if (Width < 0)
|
||||||
|
{
|
||||||
|
rotationAngle = Height > 0 ? 90 : 180;
|
||||||
|
}
|
||||||
|
else if (Height < 0)
|
||||||
|
{
|
||||||
|
rotationAngle = 270;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rotationAngle;
|
||||||
|
}
|
||||||
|
|
||||||
private Bitmap BitmapFromSource(BitmapSource bitmapSource)
|
private Bitmap BitmapFromSource(BitmapSource bitmapSource)
|
||||||
{
|
{
|
||||||
var src = new FormatConvertedBitmap();
|
var src = new FormatConvertedBitmap();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue