Merge pull request #832 from nvella/fix-629-split-post-indicator

Fix post split indicator rendering issues, make DPI aware (fixes #629)
This commit is contained in:
Jon Galloway 2019-07-05 14:15:03 -04:00 committed by GitHub
commit 8bae8eb6f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 21 deletions

View File

@ -105,15 +105,11 @@ namespace OpenLiveWriter.CoreServices
}
}
public static float ScaleX(float x)
{
return x * ScalingFactorX;
}
public static float ScaleX(float x) => x * ScalingFactorX;
public static float ScaleY(float y) => y * ScalingFactorY;
public static float ScaleY(float y)
{
return y * ScalingFactorY;
}
public static int ScaleXCeil(float x) => (int)Math.Ceiling(x * ScalingFactorX);
public static int ScaleYCeil(float y) => (int)Math.Ceiling(y * ScalingFactorY);
/// <summary>
/// Scales a control from 96dpi to the actual screen dpi.
@ -136,10 +132,7 @@ namespace OpenLiveWriter.CoreServices
/// </summary>
public static Size ScaleSize(Size original)
{
return new Size(
(int)Math.Ceiling(ScaleX(original.Width)),
(int)Math.Ceiling(ScaleY(original.Height))
);
return new Size(ScaleXCeil(original.Width), ScaleYCeil(original.Height));
}
/// <summary>

View File

@ -27,11 +27,15 @@ namespace OpenLiveWriter.PostEditor.PostHtmlEditing.Behaviors
internal class ExtendedEntrySplitterElementBehavior : ElementControlBehavior
{
private SplitterControl _splitter;
private const int _verticalPadding = 3;
// _splitterHeight and _verticalPadding measured in 96dpi pixels
private const int _splitterHeight = 16;
private const int _verticalPadding = 2;
public ExtendedEntrySplitterElementBehavior(IHtmlEditorComponentContext editorContext)
: base(editorContext)
{
_splitter = new SplitterControl();
_splitter = new SplitterControl(_splitterHeight);
_splitter.VirtualLocation = new Point(0, _verticalPadding);
Controls.Add(_splitter);
@ -41,10 +45,14 @@ namespace OpenLiveWriter.PostEditor.PostHtmlEditing.Behaviors
protected override void OnElementAttached()
{
// Padding is applied to both top and bottom, so halve the splitter height
int cssVerticalPadding = DisplayHelper.ScaleYCeil(_splitterHeight / 2 + _verticalPadding);
IHTMLElement2 e2 = (IHTMLElement2)HTMLElement;
e2.runtimeStyle.padding = "0px 0px 0px 0px;";
e2.runtimeStyle.margin = String.Format(CultureInfo.InvariantCulture, "{0}px 0px {0}px 0px;", _verticalPadding);
e2.runtimeStyle.padding = $"{cssVerticalPadding}px 0px {cssVerticalPadding}px 0px";
e2.runtimeStyle.margin = "0px 0px 0px 0px";
e2.runtimeStyle.lineHeight = "16px";
(e2 as IHTMLElement3).contentEditable = "false";
base.OnElementAttached();
@ -91,8 +99,7 @@ namespace OpenLiveWriter.PostEditor.PostHtmlEditing.Behaviors
private void ExtendedEntrySplitterElementBehavior_ElementSizeChanged(object sender, EventArgs e)
{
//synchronized the splitter width with the new element width
Rectangle elementRect = ElementRectangle;
_splitter.VirtualSize = new Size(elementRect.Width, elementRect.Height);
_splitter.VirtualWidth = ElementRectangle.Width;
}
protected override void OnKeyDown(HtmlEventArgs e)
@ -175,8 +182,15 @@ namespace OpenLiveWriter.PostEditor.PostHtmlEditing.Behaviors
private Rectangle _lineRect;
private string _moreText = Res.Get(StringId.SplitterMore);
private Font font = Res.GetFont(FontSize.PostSplitCaption, FontStyle.Regular);
public SplitterControl()
/// <summary>
/// Instansiates a new SplitterControl
/// </summary>
/// <param name="virtualHeight96">The 'virtual height' of the splitter in 96 DPI pixels.
/// Subtracting _lineRect.Height from this value yields the height of the 'More' rectangle on the end of the splitter line.</param>
public SplitterControl(int virtualHeight96)
{
VirtualHeight = DisplayHelper.ScaleYCeil(virtualHeight96);
}
protected override void OnPaint(PaintEventArgs e)
@ -194,7 +208,8 @@ namespace OpenLiveWriter.PostEditor.PostHtmlEditing.Behaviors
int morePadding = 0;
int moreRightOffset = 1;
Size moreRectSize = new Size(Convert.ToInt32(moreTextSize.Width) + morePadding * 2, Convert.ToInt32(moreTextSize.Height) + morePadding * 2);
Size moreRectSize = new Size(Convert.ToInt32(moreTextSize.Width) + DisplayHelper.ScaleXCeil(morePadding * 2),
VirtualHeight - DisplayHelper.ScaleYCeil(_lineRect.Height));
Point moreRectLocation = new Point(_controlRect.Right - moreRectSize.Width - moreRightOffset, _lineRect.Bottom);
Rectangle moreRect = new Rectangle(moreRectLocation, moreRectSize);
@ -216,7 +231,7 @@ namespace OpenLiveWriter.PostEditor.PostHtmlEditing.Behaviors
protected override void OnLayout(EventArgs e)
{
_controlRect = new Rectangle(VirtualLocation, new Size(VirtualWidth, VirtualHeight));
_lineRect = new Rectangle(new Point(0, 0), new Size(_controlRect.Width, 2));
_lineRect = new Rectangle(new Point(0, 0), new Size(_controlRect.Width, DisplayHelper.ScaleYCeil(2)));
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 B

After

Width:  |  Height:  |  Size: 280 B