/// ------------------------------------------------------------------------------------ /// <summary> /// Setups the font features. /// </summary> /// ------------------------------------------------------------------------------------ private void SetupFontFeatures() { if (m_fontName == null || m_fontName == "") { Enabled = false; return; } IRenderEngine renderer; if (FontHasGraphiteTables(m_fontName, false, false)) { renderer = FwGrEngineClass.Create(); } else { renderer = UniscribeEngineClass.Create(); } renderer.WritingSystemFactory = m_wsf; HoldDummyGraphics hdg = new HoldDummyGraphics(m_fontName, false, false, CreateGraphics()); renderer.InitRenderer(hdg.m_vwGraphics, m_fontFeatures); m_featureEngine = renderer as IRenderingFeatures; if (m_featureEngine == null) { Enabled = false; hdg.Close(); return; } int cfid; m_featureEngine.GetFeatureIDs(0, null, out cfid); if (cfid == 0) { Enabled = false; hdg.Close(); return; } if (cfid == 1) { // What if it's the dummy built-in graphite feature that we ignore? // Get the list of features (only 1). using (ArrayPtr idsM = MarshalEx.ArrayToNative(cfid, typeof(int))) { m_featureEngine.GetFeatureIDs(cfid, idsM, out cfid); int [] ids = (int[])MarshalEx.NativeToArray(idsM, cfid, typeof(int)); if (ids[0] == kGrLangFeature) { Enabled = false; hdg.Close(); return; } } } Enabled = true; hdg.Close(); }
private IRenderEngine GetUniscribeEngine(IVwGraphics vg, ILgWritingSystem ws) { IRenderEngine uniscribeEngine; uniscribeEngine = UniscribeEngineClass.Create(); uniscribeEngine.InitRenderer(vg, null); uniscribeEngine.RenderEngineFactory = this; uniscribeEngine.WritingSystemFactory = ws.WritingSystemFactory; return(uniscribeEngine); }
/// <summary> /// Get the engine used to render text with the specified properties. At present only /// font, bold, and italic properties are significant. /// Font name may be '<default serif>' which produces a renderer suitable for the default /// serif font. /// </summary> /// <param name="vg"></param> /// <returns></returns> public IRenderEngine get_Renderer(IVwGraphics vg) { lock (m_syncRoot) { LgCharRenderProps chrp = vg.FontCharProperties; string fontName = MarshalEx.UShortToString(chrp.szFaceName); Tuple <string, bool, bool> key = Tuple.Create(fontName, chrp.ttvBold == (int)FwTextToggleVal.kttvForceOn, chrp.ttvItalic == (int)FwTextToggleVal.kttvForceOn); IRenderEngine renderEngine; if (m_renderEngines.TryGetValue(key, out renderEngine)) { return(renderEngine); } Tuple <string, bool, bool> key2 = null; string realFontName; if (TryGetRealFontName(fontName, out realFontName)) { MarshalEx.StringToUShort(realFontName, chrp.szFaceName); vg.SetupGraphics(ref chrp); key2 = Tuple.Create(realFontName, key.Item2, key.Item3); if (m_renderEngines.TryGetValue(key2, out renderEngine)) { m_renderEngines[key] = renderEngine; return(renderEngine); } } else { realFontName = fontName; } bool graphiteFont = false; if (m_isGraphiteEnabled) { renderEngine = GraphiteEngineClass.Create(); string fontFeatures = null; if (realFontName == DefaultFontName) { fontFeatures = DefaultFontFeatures; } renderEngine.InitRenderer(vg, fontFeatures); // check if the font is a valid Graphite font if (renderEngine.FontIsValid) { SetupRenderEngine(renderEngine); graphiteFont = true; } } if (!graphiteFont) { if (!MiscUtils.IsUnix) { if (m_uniscribeEngine == null) { m_uniscribeEngine = UniscribeEngineClass.Create(); m_uniscribeEngine.InitRenderer(vg, null); SetupRenderEngine(m_uniscribeEngine); } renderEngine = m_uniscribeEngine; } else { // default to the UniscribeEngine unless ROMAN environment variable is set. if (Environment.GetEnvironmentVariable("ROMAN") == null) { renderEngine = UniscribeEngineClass.Create(); } else { renderEngine = RomRenderEngineClass.Create(); } renderEngine.InitRenderer(vg, null); SetupRenderEngine(renderEngine); } } m_renderEngines[key] = renderEngine; if (key2 != null) { m_renderEngines[key2] = renderEngine; } return(renderEngine); } }
/// ------------------------------------------------------------------------------------ /// <summary> /// Setups the font features. /// </summary> /// ------------------------------------------------------------------------------------ public void SetupFontFeatures() { CheckDisposed(); #if __MonoCS__ // TODO-Linux: Neither Graphite or UniscribeEngine Avaliable m_featureEngine = null; return; #else if (m_fontName == null || m_fontName == "") { Enabled = false; m_isGraphiteFont = false; return; } IRenderEngine renderer; if (FontHasGraphiteTables(m_fontName, false, false)) { renderer = FwGrEngineClass.Create(); m_isGraphiteFont = true; } else { renderer = UniscribeEngineClass.Create(); m_isGraphiteFont = false; } renderer.WritingSystemFactory = m_wsf; using (HoldDummyGraphics hdg = new HoldDummyGraphics(m_fontName, false, false, this)) { renderer.InitRenderer(hdg.m_vwGraphics, m_fontFeatures); m_featureEngine = renderer as IRenderingFeatures; if (m_featureEngine == null) { Enabled = false; return; } int cfid; m_featureEngine.GetFeatureIDs(0, null, out cfid); if (cfid == 0) { Enabled = false; return; } if (cfid == 1) { // What if it's the dummy built-in graphite feature that we ignore? // Get the list of features (only 1). using (ArrayPtr idsM = MarshalEx.ArrayToNative <int>(cfid)) { m_featureEngine.GetFeatureIDs(cfid, idsM, out cfid); int [] ids = MarshalEx.NativeToArray <int>(idsM, cfid); if (ids[0] == kGrLangFeature) { Enabled = false; return; } } } Enabled = true; } #endif }