mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-03 19:54:13 +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)
|
internal void InitBackground(Image img)
|
||||||
{
|
{
|
||||||
if (Image != null) Image.Dispose();
|
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);
|
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)
|
else if (Config.UseDimming)
|
||||||
{
|
{
|
||||||
|
@ -430,13 +423,9 @@ public void AddCursor(IntPtr cursorHandle, Point position)
|
||||||
if(ShapeManager.IsPanning)
|
if(ShapeManager.IsPanning)
|
||||||
{
|
{
|
||||||
ImageRectangle = ImageRectangle.LocationOffset(InputManager.MouseVelocity.X, InputManager.MouseVelocity.Y);
|
ImageRectangle = ImageRectangle.LocationOffset(InputManager.MouseVelocity.X, InputManager.MouseVelocity.Y);
|
||||||
|
backgroundBrush.TranslateTransform(InputManager.MouseVelocity.X, InputManager.MouseVelocity.Y);
|
||||||
|
|
||||||
foreach(BaseShape shape in ShapeManager.Shapes)
|
ShapeManager.MoveAll(InputManager.MouseVelocity);
|
||||||
{
|
|
||||||
shape.Move(InputManager.MouseVelocity.X, InputManager.MouseVelocity.Y);
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateBackground();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
borderDotPen.DashOffset = (float)timerStart.Elapsed.TotalSeconds * -15;
|
borderDotPen.DashOffset = (float)timerStart.Elapsed.TotalSeconds * -15;
|
||||||
|
@ -455,9 +444,10 @@ protected override void OnPaint(PaintEventArgs e)
|
||||||
|
|
||||||
Graphics g = e.Graphics;
|
Graphics g = e.Graphics;
|
||||||
g.CompositingMode = CompositingMode.SourceCopy;
|
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;
|
g.CompositingMode = CompositingMode.SourceOver;
|
||||||
|
|
||||||
Draw(g);
|
Draw(g);
|
||||||
|
|
||||||
if (Config.ShowFPS)
|
if (Config.ShowFPS)
|
||||||
|
|
|
@ -729,7 +729,7 @@ private void EndRegionSelection()
|
||||||
|
|
||||||
private void StartPanning()
|
private void StartPanning()
|
||||||
{
|
{
|
||||||
DeselectCurrentShape();
|
// DeselectCurrentShape();
|
||||||
IsPanning = true;
|
IsPanning = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1196,6 +1196,14 @@ private bool IsShapeTypeRegion(ShapeType shapeType)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void MoveAll(Point offset)
|
||||||
|
{
|
||||||
|
foreach (BaseShape shape in Shapes)
|
||||||
|
{
|
||||||
|
shape.Move(offset.X, offset.Y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateNodes()
|
private void UpdateNodes()
|
||||||
{
|
{
|
||||||
BaseShape shape = CurrentShape;
|
BaseShape shape = CurrentShape;
|
||||||
|
|
Loading…
Reference in a new issue