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:
commit
8bae8eb6f9
|
@ -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>
|
||||
|
|
|
@ -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 |
Loading…
Reference in New Issue