mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-02 18:26:27 +13:00
Fix cropping and panning at the same time
Hopefully increase performance - not updating backgroundBrush when panning - move backgroundBrush instead - draw backgroundBrush ony in ImageRectangle - clear only when ImageRectangle does not cover whole screen
This commit is contained in:
parent
522b52a8f8
commit
aeec1ad4ad
2 changed files with 26 additions and 28 deletions
|
@ -185,24 +185,6 @@ public void Prepare(Image img)
|
|||
}
|
||||
}
|
||||
|
||||
internal void UpdateBackground()
|
||||
{
|
||||
using (Bitmap background = new Bitmap(ScreenRectangle0Based.Width, ScreenRectangle0Based.Height))
|
||||
using (Graphics g = Graphics.FromImage(background))
|
||||
{
|
||||
g.Clear(Color.FromArgb(14, 14, 14));
|
||||
|
||||
using (Image checkers = ImageHelpers.DrawCheckers(ImageRectangle.Width, ImageRectangle.Height))
|
||||
{
|
||||
g.DrawImage(checkers, ImageRectangle);
|
||||
}
|
||||
|
||||
g.DrawImage(Image, ImageRectangle);
|
||||
|
||||
backgroundBrush = new TextureBrush(background) { WrapMode = WrapMode.Clamp };
|
||||
}
|
||||
}
|
||||
|
||||
internal void InitBackground(Image img)
|
||||
{
|
||||
if (Image != null) Image.Dispose();
|
||||
|
@ -222,7 +204,18 @@ internal void InitBackground(Image img)
|
|||
|
||||
ImageRectangle = new Rectangle(rect.X + rect.Width / 2 - Image.Width / 2, rect.Y + rect.Height / 2 - Image.Height / 2, Image.Width, Image.Height);
|
||||
|
||||
UpdateBackground();
|
||||
using (Bitmap background = new Bitmap(ScreenRectangle0Based.Width, ScreenRectangle0Based.Height))
|
||||
using (Graphics g = Graphics.FromImage(background))
|
||||
{
|
||||
using (Image checkers = ImageHelpers.DrawCheckers(ImageRectangle.Width, ImageRectangle.Height))
|
||||
{
|
||||
g.DrawImage(checkers, ImageRectangle);
|
||||
}
|
||||
|
||||
g.DrawImage(Image, ImageRectangle);
|
||||
|
||||
backgroundBrush = new TextureBrush(background) { WrapMode = WrapMode.Clamp };
|
||||
}
|
||||
}
|
||||
else if (Config.UseDimming)
|
||||
{
|
||||
|
@ -430,13 +423,9 @@ public void AddCursor(IntPtr cursorHandle, Point position)
|
|||
if(ShapeManager.IsPanning)
|
||||
{
|
||||
ImageRectangle = ImageRectangle.LocationOffset(InputManager.MouseVelocity.X, InputManager.MouseVelocity.Y);
|
||||
backgroundBrush.TranslateTransform(InputManager.MouseVelocity.X, InputManager.MouseVelocity.Y);
|
||||
|
||||
foreach(BaseShape shape in ShapeManager.Shapes)
|
||||
{
|
||||
shape.Move(InputManager.MouseVelocity.X, InputManager.MouseVelocity.Y);
|
||||
}
|
||||
|
||||
UpdateBackground();
|
||||
ShapeManager.MoveAll(InputManager.MouseVelocity);
|
||||
}
|
||||
|
||||
borderDotPen.DashOffset = (float)timerStart.Elapsed.TotalSeconds * -15;
|
||||
|
@ -455,9 +444,10 @@ protected override void OnPaint(PaintEventArgs e)
|
|||
|
||||
Graphics g = e.Graphics;
|
||||
g.CompositingMode = CompositingMode.SourceCopy;
|
||||
g.FillRectangle(backgroundBrush, ScreenRectangle0Based);
|
||||
if (!ImageRectangle.Contains(ScreenRectangle0Based))
|
||||
g.Clear(Color.FromArgb(14, 14, 14));
|
||||
g.FillRectangle(backgroundBrush, ImageRectangle);
|
||||
g.CompositingMode = CompositingMode.SourceOver;
|
||||
|
||||
Draw(g);
|
||||
|
||||
if (Config.ShowFPS)
|
||||
|
|
|
@ -729,7 +729,7 @@ private void EndRegionSelection()
|
|||
|
||||
private void StartPanning()
|
||||
{
|
||||
DeselectCurrentShape();
|
||||
// DeselectCurrentShape();
|
||||
IsPanning = true;
|
||||
}
|
||||
|
||||
|
@ -1196,6 +1196,14 @@ private bool IsShapeTypeRegion(ShapeType shapeType)
|
|||
return false;
|
||||
}
|
||||
|
||||
public void MoveAll(Point offset)
|
||||
{
|
||||
foreach (BaseShape shape in Shapes)
|
||||
{
|
||||
shape.Move(offset.X, offset.Y);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateNodes()
|
||||
{
|
||||
BaseShape shape = CurrentShape;
|
||||
|
|
Loading…
Reference in a new issue