bool MCFontUnload(MCStringRef p_path) { MCLoadedFont *t_prev_font; t_prev_font = nil; for(MCLoadedFont *t_font = s_loaded_fonts; t_font != nil; t_font = t_font -> next) { if (MCStringIsEqualTo(t_font -> path, p_path, kMCStringOptionCompareCaseless)) { if (!MCscreen -> unloadfont(p_path, t_font -> is_global, t_font -> handle)) return false; if (t_prev_font != nil) t_prev_font -> next = t_font -> next; else s_loaded_fonts = t_font -> next; MCMemoryDelete(t_font -> path); MCMemoryDelete(t_font); // MW-2013-09-11: [[ DynamicFonts ]] Make sure the engine reloads all fonts. MCFontRemap(); MCstacks -> purgefonts(); break; } t_prev_font = t_font; } return true; }
Exec_stat MCFontUnload(MCExecPoint& ep, const char *p_path) { MCLoadedFont *t_prev_font; t_prev_font = nil; for(MCLoadedFont *t_font = s_loaded_fonts; t_font != nil; t_font = t_font -> next) { if (MCU_strcasecmp(t_font -> path, p_path) == 0) { if (!MCscreen -> unloadfont(p_path, t_font -> is_global, t_font -> handle)) return ES_ERROR; if (t_prev_font != nil) t_prev_font -> next = t_font -> next; else s_loaded_fonts = t_font -> next; MCMemoryDelete(t_font -> path); MCMemoryDelete(t_font); // MW-2013-09-11: [[ DynamicFonts ]] Make sure the engine reloads all fonts. MCFontRemap(); MCstacks -> purgefonts(); break; } t_prev_font = t_font; } return ES_NORMAL; }
// TD-2013-07-02: [[ DynamicFonts ]] // MERG-2013-08-14: [[ DynamicFonts ]] Refactored to use MCLoadedFont bool MCFontLoad(MCStringRef p_path, bool p_globally) { bool t_success; t_success = true; if (t_success) { // check if already loaded and unload if globally is not the same as loaded version for(MCLoadedFont *t_font = s_loaded_fonts; t_font != nil; t_font = t_font -> next) if (MCStringIsEqualTo(t_font -> path, p_path, kMCStringOptionCompareCaseless)) { if (t_font -> is_global != p_globally) { t_success = MCFontUnload(p_path); break; } else return true; } } if (t_success) { void * t_loaded_font_handle; if (!MCscreen -> loadfont(p_path, p_globally, t_loaded_font_handle)) return false; MCLoadedFontRef self; if (!MCMemoryNew(self)) return false; self -> is_global = p_globally; self -> handle = t_loaded_font_handle; MCValueAssign(self -> path, p_path); self -> next = s_loaded_fonts; s_loaded_fonts = self; // MW-2013-09-11: [[ DynamicFonts ]] Make sure the engine reloads all fonts. MCFontRemap(); MCstacks -> purgefonts(); } return t_success; }
// TD-2013-07-02: [[ DynamicFonts ]] // MERG-2013-08-14: [[ DynamicFonts ]] Refactored to use MCLoadedFont Exec_stat MCFontLoad(MCExecPoint& ep, const char *p_path, bool p_globally) { Exec_stat t_stat; t_stat = ES_NORMAL; if (t_stat == ES_NORMAL) { // check if already loaded and unload if globally is not the same as loaded version for(MCLoadedFont *t_font = s_loaded_fonts; t_font != nil; t_font = t_font -> next) if (MCU_strcasecmp(t_font -> path, p_path) == 0) { if (t_font -> is_global != p_globally) { t_stat = MCFontUnload(ep,p_path); break; } else return ES_NORMAL; } } if (t_stat == ES_NORMAL) { void * t_loaded_font_handle; if (!MCscreen -> loadfont(p_path, p_globally, t_loaded_font_handle)) return ES_ERROR; MCLoadedFontRef self; if (!MCMemoryNew(self)) return ES_ERROR; self -> is_global = p_globally; self -> handle = t_loaded_font_handle; self -> path = strdup(p_path); self -> next = s_loaded_fonts; s_loaded_fonts = self; // MW-2013-09-11: [[ DynamicFonts ]] Make sure the engine reloads all fonts. MCFontRemap(); MCstacks -> purgefonts(); } return t_stat; }