// "Therefore those skilled at the unorthodox // are infinite as heaven and earth, // inexhaustible as the great rivers. // When they come to an end, // they begin again, // like the days and months; // they die and are reborn, // like the four seasons." // // - Sun Tsu, // "The Art of War" using System.Windows.Forms; using TheArtOfDev.HtmlRenderer.Adapters.Entities; using TheArtOfDev.HtmlRenderer.Core.Utils; using TheArtOfDev.HtmlRenderer.Adapters; using TheArtOfDev.HtmlRenderer.WinForms.Utilities; namespace TheArtOfDev.HtmlRenderer.WinForms.Adapters { /// /// Adapter for WinForms Control for core. /// internal sealed class ControlAdapter : RControl { /// /// the underline win forms control. /// private readonly Control _control; /// /// Use GDI+ text rendering to measure/draw text. /// private readonly bool _useGdiPlusTextRendering; /// /// Init. /// public ControlAdapter(Control control, bool useGdiPlusTextRendering) : base(WinFormsAdapter.Instance) { ArgChecker.AssertArgNotNull(control, "control"); _control = control; _useGdiPlusTextRendering = useGdiPlusTextRendering; } /// /// Get the underline win forms control /// public Control Control { get { return _control; } } public override RPoint MouseLocation { get { return Utils.Convert(_control.PointToClient(Control.MousePosition)); } } public override bool LeftMouseButton { get { return (Control.MouseButtons & MouseButtons.Left) != 0; } } public override bool RightMouseButton { get { return (Control.MouseButtons & MouseButtons.Right) != 0; } } public override void SetCursorDefault() { _control.Cursor = Cursors.Default; } public override void SetCursorHand() { _control.Cursor = Cursors.Hand; } public override void SetCursorIBeam() { _control.Cursor = Cursors.IBeam; } public override void DoDragDropCopy(object dragDropData) { _control.DoDragDrop(dragDropData, DragDropEffects.Copy); } public override void MeasureString(string str, RFont font, double maxWidth, out int charFit, out double charFitWidth) { using (var g = new GraphicsAdapter(_control.CreateGraphics(), _useGdiPlusTextRendering, true)) { g.MeasureString(str, font, maxWidth, out charFit, out charFitWidth); } } public override void Invalidate() { _control.Invalidate(); } } }