protected void SetFontBase(Func <FontDescription, FontDescription> fontProvider, FontModificationKinds kind) { if (_EditorCanvas == null) { return; } if (_EditorCanvas.FocusManager.IsEditorFocused) { /// Focusがある場合はその内容を変更する var focus = _EditorCanvas.FocusManager.Focus as StyledTextFocus; if (focus != null) { focus.SetFont((flow) => fontProvider(flow.Font)); } // todo: PlainTextのときの処理 } else { /// Focusがない場合はRequestを送る var selecteds = _EditorCanvas.SelectionManager.SelectedEditors; if (selecteds.Any()) { var bundle = new EditorBundle(_EditorCanvas.SelectionManager.SelectedEditors); var executor = _EditorCanvas.CommandExecutor; var nodeFig = selecteds.First().Figure as INode; if (nodeFig != null) { var req = new SetPlainTextFontRequest() { Font = fontProvider(nodeFig.Font), }; bundle.PerformCompositeRequest(req, executor); } var node = selecteds.First().Model as MemoStyledText; if (node != null) { var stext = node.StyledText; var stfont = stext.Inlines.First().Font; var req = new SetStyledTextFontRequest() { FontProvider = (flow) => fontProvider(stfont), }; bundle.PerformCompositeRequest(req, executor); } } } }
// ======================================== // constructor // ======================================== public SetPlainTextFontRole(FontModificationKinds supportKinds) { _supportKinds = supportKinds; }
// ======================================== // constructor // ======================================== public SetStyledTextFontRole(StyledTextProvider styledTextProvider, FontModificationKinds supportKinds) { _styledTextProvider = styledTextProvider; _supportKinds = supportKinds; }