fixed #102: Added ruler tool

This commit is contained in:
Jaex 2014-04-11 19:29:19 +03:00
parent 6baf6e277b
commit efddaa6f4a
10 changed files with 125 additions and 22 deletions

View file

@ -835,5 +835,10 @@ public static Size MeasureText(string text, Font font, int width)
return g.MeasureString(text, font, width).ToSize();
}
}
public static double Distance(Point p1, Point p2)
{
return Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
}
}
}

View file

@ -39,6 +39,9 @@ public class RectangleRegion : Surface
public bool OneClickMode { get; set; }
public Point OneClickPosition { get; set; }
// For screen ruler
public bool RulerMode { get; set; }
public RectangleRegion(Image backgroundImage = null)
: base(backgroundImage)
{
@ -151,7 +154,7 @@ protected override void Draw(Graphics g)
if (Config.ShowInfo)
{
ImageHelpers.DrawTextWithOutline(g, string.Format("X:{0} Y:{1} W:{2} H:{3}", totalArea.X, totalArea.Y,
ImageHelpers.DrawTextWithOutline(g, string.Format("X: {0} / Y: {1} / W: {2} / H: {3}", totalArea.X, totalArea.Y,
totalArea.Width, totalArea.Height), new PointF(totalArea.X + 5, totalArea.Y - 25), textFont, Color.White, Color.Black);
}
}
@ -173,6 +176,12 @@ protected override void Draw(Graphics g)
g.DrawRectangleProper(borderDotPen, AreaManager.CurrentArea);
g.DrawRectangleProper(borderDotPen2, AreaManager.CurrentArea);
DrawObjects(g);
if (RulerMode)
{
DrawRuler(g, AreaManager.CurrentArea, borderPen, 5, 10);
DrawRuler(g, AreaManager.CurrentArea, borderPen, 15, 100);
}
}
if (Config.ShowInfo)
@ -181,8 +190,20 @@ protected override void Draw(Graphics g)
{
if (area.IsValid())
{
ImageHelpers.DrawTextWithOutline(g, string.Format("X:{0} Y:{1}\nW:{2} H:{3}", area.X, area.Y, area.Width, area.Height),
new PointF(area.X + 5, area.Y + 5), textFont, Color.White, Color.Black);
string areaText;
if (RulerMode)
{
Point endPos = new Point(area.X + area.Width - 1, area.Y + area.Height - 1);
areaText = string.Format("X: {0} / Y: {1} / X2: {2} / Y2: {3}\nWidth: {4} / Height: {5} / Length: {6:0.00}", area.X, area.Y, endPos.X, endPos.Y,
area.Width, area.Height, Helpers.Distance(area.Location, endPos));
ImageHelpers.DrawTextWithOutline(g, areaText, new PointF(area.X + 10, area.Y + 10), textFont, Color.White, Color.Black);
}
else
{
areaText = string.Format("X: {0} / Y: {1}\nW: {2} / H: {3}", area.X, area.Y, area.Width, area.Height);
ImageHelpers.DrawTextWithOutline(g, areaText, new PointF(area.X + 5, area.Y + 5), textFont, Color.White, Color.Black);
}
}
}
}
@ -312,6 +333,24 @@ private Bitmap Magnifier(Image img, Point position, int horizontalPixelCount, in
return bmp;
}
private void DrawRuler(Graphics g, Rectangle rect, Pen pen, int rulerSize, int rulerWidth)
{
if (rect.Width >= rulerSize && rect.Height >= rulerSize)
{
for (int x = 1; x <= rect.Width / rulerWidth; x++)
{
g.DrawLine(pen, new Point(rect.X + x * rulerWidth, rect.Y), new Point(rect.X + x * rulerWidth, rect.Y + rulerSize));
g.DrawLine(pen, new Point(rect.X + x * rulerWidth, rect.Bottom), new Point(rect.X + x * rulerWidth, rect.Bottom - rulerSize));
}
for (int y = 1; y <= rect.Height / rulerWidth; y++)
{
g.DrawLine(pen, new Point(rect.X, rect.Y + y * rulerWidth), new Point(rect.X + rulerSize, rect.Y + y * rulerWidth));
g.DrawLine(pen, new Point(rect.Right, rect.Y + y * rulerWidth), new Point(rect.Right - rulerSize, rect.Y + y * rulerWidth));
}
}
}
public void UpdateRegionPath()
{
regionFillPath = new GraphicsPath { FillMode = FillMode.Winding };

View file

@ -167,7 +167,9 @@ public enum HotkeyType
[Description("Index folder")]
IndexFolder,
[Description("Image effects")]
ImageEffects
ImageEffects,
[Description("Ruler")]
Ruler
}
public enum HotkeyStatus

View file

@ -95,6 +95,7 @@ private void InitializeComponent()
this.tsmiImageEffects = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiMonitorTest = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiDNSChanger = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiRuler = new System.Windows.Forms.ToolStripMenuItem();
this.tsbScreenshotsFolder = new System.Windows.Forms.ToolStripButton();
this.tsbHistory = new System.Windows.Forms.ToolStripButton();
this.tsbImageHistory = new System.Windows.Forms.ToolStripButton();
@ -215,6 +216,7 @@ private void InitializeComponent()
this.tsmiTrayShow = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiTrayExit = new System.Windows.Forms.ToolStripMenuItem();
this.ssToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiTrayRuler = new System.Windows.Forms.ToolStripMenuItem();
this.tsMain.SuspendLayout();
this.scMain.Panel1.SuspendLayout();
this.scMain.Panel2.SuspendLayout();
@ -552,7 +554,8 @@ private void InitializeComponent()
this.tsmiIndexFolder,
this.tsmiImageEffects,
this.tsmiMonitorTest,
this.tsmiDNSChanger});
this.tsmiDNSChanger,
this.tsmiRuler});
this.tsddbTools.Image = global::ShareX.Properties.Resources.toolbox;
this.tsddbTools.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.tsddbTools.ImageTransparentColor = System.Drawing.Color.Magenta;
@ -608,6 +611,14 @@ private void InitializeComponent()
this.tsmiDNSChanger.Text = "DNS changer...";
this.tsmiDNSChanger.Click += new System.EventHandler(this.tsmiDNSChanger_Click);
//
// tsmiRuler
//
this.tsmiRuler.Image = global::ShareX.Properties.Resources.ruler_triangle;
this.tsmiRuler.Name = "tsmiRuler";
this.tsmiRuler.Size = new System.Drawing.Size(183, 22);
this.tsmiRuler.Text = "Ruler...";
this.tsmiRuler.Click += new System.EventHandler(this.tsmiRuler_Click);
//
// tsbScreenshotsFolder
//
this.tsbScreenshotsFolder.Image = global::ShareX.Properties.Resources.folder_open_image;
@ -1500,7 +1511,8 @@ private void InitializeComponent()
this.tsmiTrayIndexFolder,
this.tsmiTrayImageEffects,
this.tsmiTrayMonitorTest,
this.tsmiTrayDNSChanger});
this.tsmiTrayDNSChanger,
this.tsmiTrayRuler});
this.tsmiTrayTools.Image = global::ShareX.Properties.Resources.toolbox;
this.tsmiTrayTools.Name = "tsmiTrayTools";
this.tsmiTrayTools.Size = new System.Drawing.Size(189, 22);
@ -1621,6 +1633,14 @@ private void InitializeComponent()
this.ssToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.ssToolStripMenuItem.Text = "ss";
//
// tsmiTrayRuler
//
this.tsmiTrayRuler.Image = global::ShareX.Properties.Resources.ruler_triangle;
this.tsmiTrayRuler.Name = "tsmiTrayRuler";
this.tsmiTrayRuler.Size = new System.Drawing.Size(183, 22);
this.tsmiTrayRuler.Text = "Ruler...";
this.tsmiTrayRuler.Click += new System.EventHandler(this.tsmiRuler_Click);
//
// MainForm
//
this.AllowDrop = true;
@ -1813,5 +1833,7 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripMenuItem tsmiTrayDNSChanger;
private System.Windows.Forms.ToolStripButton tsbDragDropUpload;
private System.Windows.Forms.ToolStripMenuItem tsmiTrayDragDropUpload;
private System.Windows.Forms.ToolStripMenuItem tsmiRuler;
private System.Windows.Forms.ToolStripMenuItem tsmiTrayRuler;
}
}

View file

@ -622,6 +622,18 @@ private void OpenDNSChanger()
Process.Start(psi);
}
public static void OpenRuler()
{
using (Image fullscreen = Screenshot.CaptureFullscreen())
using (RectangleRegion surface = new RectangleRegion(fullscreen))
{
surface.RulerMode = true;
surface.Config.QuickCrop = false;
surface.Prepare();
surface.ShowDialog();
}
}
#region Form events
protected override void SetVisibleCore(bool value)
@ -830,6 +842,11 @@ private void tsmiDNSChanger_Click(object sender, EventArgs e)
OpenDNSChanger();
}
private void tsmiRuler_Click(object sender, EventArgs e)
{
OpenRuler();
}
private void tsbScreenshotsFolder_Click(object sender, EventArgs e)
{
Helpers.OpenFolder(Program.ScreenshotsPath);

View file

@ -141,6 +141,9 @@ private void HandleHotkeys(HotkeySettings hotkeySetting)
case HotkeyType.ImageEffects:
OpenImageEffects();
break;
case HotkeyType.Ruler:
OpenRuler();
break;
}
}

View file

@ -749,6 +749,16 @@ public static System.Drawing.Bitmap ru {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap ruler_triangle {
get {
object obj = ResourceManager.GetObject("ruler-triangle", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View file

@ -117,7 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="layer" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -169,9 +169,6 @@
<data name="folder_open_image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder-open-image.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="navigation_090_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\navigation-090-button.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="layers_ungroup" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layers-ungroup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -196,6 +193,9 @@
<data name="image_export" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\image-export.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="au" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\au.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="keyboard_pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\keyboard--pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -205,15 +205,15 @@
<data name="hammer" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\hammer.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Window" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Window.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Polygon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Polygon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="toolbox" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\toolbox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="inbox_plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\inbox--plus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="present" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\present.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -238,6 +238,9 @@
<data name="address_book_blue" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\address-book-blue.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="block" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\block.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -313,17 +316,14 @@
<data name="application_pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\application--pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="network_ip" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\network-ip.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pipette" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pipette.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="Window" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Window.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="au" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\au.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="navigation_090_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\navigation-090-button.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="checkbox_uncheck" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\checkbox_uncheck.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -337,13 +337,17 @@
<data name="application_monitor" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\application-monitor.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="network_ip" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\network-ip.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="document_arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\document--arrow.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="application_task" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\application-task.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="inbox_plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\inbox--plus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ruler-triangle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ruler-triangle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

View file

@ -448,6 +448,7 @@
<None Include="Resources\checkbox_check.png" />
<None Include="Resources\network-ip.png" />
<None Include="Resources\inbox--plus.png" />
<None Include="Resources\ruler-triangle.png" />
<Content Include="ShareX_Icon.ico" />
<None Include="Resources\ru.png" />
<None Include="Resources\keyboard--pencil.png" />