From 77ef79c68fd49f8864d1173bf540499d4e3aa117 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Fri, 17 Apr 2020 23:54:18 +0300 Subject: [PATCH] =?UTF-8?q?IconBarMargin=20=D0=BE=D1=82=D0=BC=D0=B0=D1=81?= =?UTF-8?q?=D1=88=D1=82=D0=B0=D0=B1=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D1=8B=D1=81=D0=BE=D0=BA?= =?UTF-8?q?=D0=B8=D1=85=20DPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ICSharpCode.TextEditor.csproj | 1 + .../Src/Gui/IconBarMargin.cs | 36 ++++++++++---- bin/Lib/GraphWPF.pas | 47 +++++++++++++------ 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/ICSharpCode.TextEditor/ICSharpCode.TextEditor.csproj b/ICSharpCode.TextEditor/ICSharpCode.TextEditor.csproj index f7a8ed0d7..65f274d72 100644 --- a/ICSharpCode.TextEditor/ICSharpCode.TextEditor.csproj +++ b/ICSharpCode.TextEditor/ICSharpCode.TextEditor.csproj @@ -64,6 +64,7 @@ False + 3.5 diff --git a/ICSharpCode.TextEditor/Src/Gui/IconBarMargin.cs b/ICSharpCode.TextEditor/Src/Gui/IconBarMargin.cs index 0d15a1706..4751f13b9 100644 --- a/ICSharpCode.TextEditor/Src/Gui/IconBarMargin.cs +++ b/ICSharpCode.TextEditor/Src/Gui/IconBarMargin.cs @@ -15,12 +15,26 @@ using ICSharpCode.TextEditor.Document; namespace ICSharpCode.TextEditor { - /// - /// This class views the line numbers and folding markers. - /// + public static class ScreenScale + { + public static double scale = -1; + public static double Calc() + { + if (scale > 0) + return scale; + var dpiXProperty = typeof(System.Windows.SystemParameters).GetProperty("DpiX", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); + var dpiX = (int)dpiXProperty.GetValue(null, null); + scale = (double)dpiX / 96; + return scale; + } + } + + /// + /// This class views the line numbers and folding markers. + /// public class IconBarMargin : AbstractMargin { - const int iconBarWidth = 18; + static int iconBarWidth = 18 + Convert.ToInt32(Math.Max(0,(ScreenScale.Calc() - 1) * 16)); static readonly Size iconBarSize = new Size(iconBarWidth, -1); @@ -104,7 +118,9 @@ namespace ICSharpCode.TextEditor get { if (brpt_bmp == null) - brpt_bmp = new System.Drawing.Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.TextEditor.Resources.Breakpoint24x24.png")); + if (ScreenScale.Calc()>=1.75) + brpt_bmp = new System.Drawing.Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.TextEditor.Resources.Breakpoint32x32.png")); + else brpt_bmp = new System.Drawing.Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.TextEditor.Resources.Breakpoint24x24.png")); return brpt_bmp; } } @@ -133,10 +149,12 @@ namespace ICSharpCode.TextEditor diameter); if (!onCondition) - g.DrawImage(BrptBitmap,rect.X,rect.Y); - else - g.DrawImage(CondBrptBitmap,rect.X,rect.Y); - g.SmoothingMode = mode; + //g.DrawImage(BrptBitmap,rect.X,rect.Y); // SSM 17/04/2020 + g.DrawImage(BrptBitmap, rect); + else + //g.DrawImage(CondBrptBitmap,rect.X,rect.Y); + g.DrawImage(CondBrptBitmap, rect); + g.SmoothingMode = mode; return; using (GraphicsPath path = new GraphicsPath()) { path.AddEllipse(rect); diff --git a/bin/Lib/GraphWPF.pas b/bin/Lib/GraphWPF.pas index ae65b4ad0..ca1550434 100644 --- a/bin/Lib/GraphWPF.pas +++ b/bin/Lib/GraphWPF.pas @@ -54,18 +54,21 @@ type Alignment = (LeftTop,CenterTop,RightTop,LeftCenter,Center,RightCenter,LeftBottom,CenterBottom,RightBottom); //{{{--doc: Конец секции 1 }}} + +function GetBrush(c: Color): GBrush; //{{{doc: Начало секции 2 }}} // ----------------------------------------------------- //>> Класс BrushType # BrushType class // ----------------------------------------------------- +type ///!# /// Тип кисти BrushType = class private c := Colors.White; - function BrushConstruct := new SolidColorBrush(c); + function BrushConstruct := GetBrush(c); public /// Цвет кисти property Color: GColor read c write c; @@ -84,7 +87,7 @@ type rc: boolean := false; function PenConstruct: GPen; begin - Result := new GPen(new SolidColorBrush(c),th); + Result := new GPen(GetBrush(c),th); Result.LineJoin := PenLineJoin.Round; if rc then begin @@ -136,7 +139,7 @@ type end; procedure SetFS(fs: FontStyle) := Invoke(SetFSP,fs); function TypefaceClone := tf; - function BrushConstruct := new SolidColorBrush(c); + function BrushConstruct := GetBrush(c); public /// Цвет шрифта property Color: GColor read c write c; @@ -513,6 +516,20 @@ procedure __FinalizeModule__; implementation +var BrushesDict := new Dictionary; + +function GetBrush(c: Color): GBrush; +begin + if not (c in BrushesDict) then + begin + var b := new SolidColorBrush(c); + BrushesDict[c] := b; + Result := b + end + else Result := BrushesDict[c]; +end; + + procedure Redraw(d: ()->()) := app.Dispatcher.Invoke(d); function getApp: Application := app; @@ -524,8 +541,8 @@ function EmptyColor: Color := ARGB(0,0,0,0); function clRandom := RandomColor(); function Pnt(x,y: real) := new Point(x,y); function Rect(x,y,w,h: real) := new System.Windows.Rect(x,y,w,h); -function ColorBrush(c: Color) := new SolidColorBrush(c); -function ColorPen(c: Color) := new GPen(ColorBrush(c),Pen.Width); +function ColorBrush(c: Color) := GetBrush(c); +function ColorPen(c: Color) := new GPen(GetBrush(c),Pen.Width); procedure InvokeVisual(d: System.Delegate; params args: array of object); begin @@ -662,7 +679,7 @@ end; procedure SetPixelP(x,y: real; c: Color); begin var dc := GetDC(); - dc.DrawRectangle(new SolidColorBrush(c), nil, Rect(x,y,1,1)); + dc.DrawRectangle(GetBrush(c), nil, Rect(x,y,1,1)); ReleaseDC(dc); end; @@ -673,7 +690,7 @@ begin for var ix:=0 to w-1 do for var iy:=0 to h-1 do begin - dc.DrawRectangle(ColorBrush(f(ix,iy)), nil, Rect(x+ix,y+iy,1,1)); + dc.DrawRectangle(GetBrush(f(ix,iy)), nil, Rect(x+ix,y+iy,1,1)); end; ReleaseDC(dc); end; @@ -691,7 +708,7 @@ function FormText(text: string) := function FormTextC(text: string; c: GColor): FormattedText := new FormattedText(text,new System.Globalization.CultureInfo('ru-ru'), FlowDirection.LeftToRight, - Font.TypefaceClone, Font.Size, ColorBrush(c)); + Font.TypefaceClone, Font.Size, GetBrush(c)); function TextWidthP(text: string) := FormText(text).Width; function TextHeightP(text: string) := FormText(text).Height; @@ -952,16 +969,16 @@ procedure SectorPFull(x, y, r, angle1, angle2: real; b: GBrush; p: GPen) := ArcS procedure EllipseP(x,y,r1,r2: real) := EllipsePFull(x,y,r1,r2,Brush.BrushConstruct,Pen.PenConstruct); procedure DrawEllipseP(x,y,r1,r2: real) := EllipsePFull(x,y,r1,r2,nil,Pen.PenConstruct); procedure FillEllipseP(x,y,r1,r2: real) := EllipsePFull(x,y,r1,r2,Brush.BrushConstruct,nil); -procedure EllipsePC(x,y,r1,r2: real; c: GColor) := EllipsePFull(x,y,r1,r2,ColorBrush(c),Pen.PenConstruct); +procedure EllipsePC(x,y,r1,r2: real; c: GColor) := EllipsePFull(x,y,r1,r2,GetBrush(c),Pen.PenConstruct); procedure DrawEllipsePC(x,y,r1,r2: real; c: GColor) := EllipsePFull(x,y,r1,r2,nil,ColorPen(c)); -procedure FillEllipsePC(x,y,r1,r2: real; c: GColor) := EllipsePFull(x,y,r1,r2,ColorBrush(c),nil); +procedure FillEllipsePC(x,y,r1,r2: real; c: GColor) := EllipsePFull(x,y,r1,r2,GetBrush(c),nil); procedure RectangleP(x,y,w,h: real) := RectanglePFull(x,y,w,h,Brush.BrushConstruct,Pen.PenConstruct); procedure DrawRectangleP(x,y,w,h: real) := RectanglePFull(x,y,w,h,nil,Pen.PenConstruct); procedure FillRectangleP(x,y,w,h: real) := RectanglePFull(x,y,w,h,Brush.BrushConstruct,nil); -procedure RectanglePC(x,y,r1,r2: real; c: GColor) := RectanglePFull(x,y,r1,r2,ColorBrush(c),Pen.PenConstruct); +procedure RectanglePC(x,y,r1,r2: real; c: GColor) := RectanglePFull(x,y,r1,r2,GetBrush(c),Pen.PenConstruct); procedure DrawRectanglePC(x,y,r1,r2: real; c: GColor) := RectanglePFull(x,y,r1,r2,nil,ColorPen(c)); -procedure FillRectanglePC(x,y,r1,r2: real; c: GColor) := RectanglePFull(x,y,r1,r2,ColorBrush(c),nil); +procedure FillRectanglePC(x,y,r1,r2: real; c: GColor) := RectanglePFull(x,y,r1,r2,GetBrush(c),nil); procedure ArcP(x, y, r, angle1, angle2: real) := ArcPFull(x, y, r, angle1, angle2, Pen.PenConstruct); procedure ArcPC(x, y, r, angle1, angle2: real; c: GColor) := ArcPFull(x, y, r, angle1, angle2, ColorPen(c)); @@ -969,9 +986,9 @@ procedure ArcPC(x, y, r, angle1, angle2: real; c: GColor) := ArcPFull(x, y, r, a procedure SectorP(x, y, r, angle1, angle2: real) := SectorPFull(x, y, r, angle1, angle2, Brush.BrushConstruct, Pen.PenConstruct); procedure DrawSectorP(x, y, r, angle1, angle2: real) := SectorPFull(x, y, r, angle1, angle2, nil, Pen.PenConstruct); procedure FillSectorP(x, y, r, angle1, angle2: real) := SectorPFull(x, y, r, angle1, angle2, Brush.BrushConstruct, nil); -procedure SectorPC(x, y, r, angle1, angle2: real; c: GColor) := SectorPFull(x, y, r, angle1, angle2, ColorBrush(c), Pen.PenConstruct); +procedure SectorPC(x, y, r, angle1, angle2: real; c: GColor) := SectorPFull(x, y, r, angle1, angle2, GetBrush(c), Pen.PenConstruct); procedure DrawSectorPC(x, y, r, angle1, angle2: real; c: GColor) := SectorPFull(x, y, r, angle1, angle2, nil, ColorPen(c)); -procedure FillSectorPC(x, y, r, angle1, angle2: real; c: GColor) := SectorPFull(x, y, r, angle1, angle2, ColorBrush(c), nil); +procedure FillSectorPC(x, y, r, angle1, angle2: real; c: GColor) := SectorPFull(x, y, r, angle1, angle2, GetBrush(c), nil); procedure LineP(x,y,x1,y1: real) := LinePFull(x,y,x1,y1,Pen.PenConstruct); procedure LinePC(x,y,x1,y1: real; c: GColor) := LinePFull(x,y,x1,y1,ColorPen(c)); @@ -996,7 +1013,7 @@ procedure DrawEllipse(x,y,rx,ry: real) := InvokeVisual(DrawEllipseP,x,y,rx,ry); procedure FillEllipse(x,y,rx,ry: real) := InvokeVisual(FillEllipseP,x,y,rx,ry); procedure Ellipse(x,y,rx,ry: real; c: GColor) := InvokeVisual(EllipsePC,x,y,rx,ry,c); procedure DrawEllipse(x,y,rx,ry: real; c: GColor) := InvokeVisual(DrawEllipsePC,x,y,rx,ry,c); -procedure FillEllipse(x,y,rx,ry: real; c: GColor) := app.Dispatcher.Invoke(()->FillEllipsePC(x,y,rx,ry,c)); +procedure FillEllipse(x,y,rx,ry: real; c: GColor) := InvokeVisual(FillEllipsePC,x,y,rx,ry,c); procedure Circle(x,y,r: real) := InvokeVisual(EllipseP,x,y,r,r); procedure DrawCircle(x,y,r: real) := InvokeVisual(DrawEllipseP,x,y,r,r);