private void DoFindLargestFont(ITextOverlay overlay, NSRect rect) { float[] candidates = new float[]{12.0f, 14.0f, 18.0f, 24.0f, 36.0f, 48.0f, 64.0f, 72.0f, 06.0f, 144.0f, 288.0f, 0.0f}; int i = 0; while (candidates[i + 1] != 0.0f) { var attrs = NSMutableDictionary.Create(); NSFont font = NSFont.fontWithName_size(NSString.Create("Verdana"), candidates[i + 1]); attrs.setObject_forKey(font, Externs.NSFontAttributeName); attrs.setObject_forKey(overlay.Color, Externs.NSForegroundColorAttributeName); NSMutableParagraphStyle style = NSMutableParagraphStyle.Create(); style.setAlignment(Enums.NSCenterTextAlignment); attrs.setObject_forKey(style, Externs.NSParagraphStyleAttributeName); var candidate = NSAttributedString.Create(overlay.Text, attrs); NSSize size = candidate.size(); if (size.width <= rect.size.width && size.height <= rect.size.height) { m_overlay = candidate.Retain(); m_overlaySize = size; ++i; } else { break; } } }
private void DoCacheOverlay(ITextOverlay overlay, NSRect rect) { if (overlay.Text != m_overlayText || rect.size != m_overlayRect.size) { if (m_overlay != null) { m_overlay.release(); m_overlay = null; } DoFindLargestFont(overlay, rect); m_overlayText = overlay.Text; m_overlayRect = rect; } }