void CFPF_SkiaFontMgr::ScanPath(FX_BSTR path) { void *handle = FX_OpenFolder(path.GetCStr()); if (!handle) { return; } CFX_ByteString filename; FX_BOOL bFolder = FALSE; while (FX_GetNextFile(handle, filename, bFolder)) { if (bFolder) { if (filename == FX_BSTRC(".") || filename == FX_BSTRC("..")) { continue; } } else { CFX_ByteString ext = filename.Right(4); ext.MakeLower(); if (ext != FX_BSTRC(".ttf") && ext != FX_BSTRC(".ttc")) { continue; } } CFX_ByteString fullpath = path; fullpath += "/"; fullpath += filename; if (bFolder) { ScanPath(fullpath); } else { ScanFile(fullpath); } } FX_CloseFolder(handle); }
FX_BOOL CFXCRT_FileAccess_CRT::Open(FX_BSTR fileName, FX_DWORD dwMode) { if (m_hFile) { return FALSE; } CFX_ByteString strMode; FXCRT_GetFileModeString(dwMode, strMode); m_hFile = FXSYS_fopen(fileName.GetCStr(), (FX_LPCSTR)strMode); return m_hFile != NULL; }
FX_BOOL CFXCRT_FileAccess_Posix::Open(FX_BSTR fileName, FX_DWORD dwMode) { if (m_nFD > -1) { return FALSE; } FX_INT32 nFlags, nMasks; FXCRT_Posix_GetFileMode(dwMode, nFlags, nMasks); m_nFD = open(fileName.GetCStr(), nFlags, nMasks); return m_nFD > -1; }
void CFPF_SkiaFontMgr::ScanFile(FX_BSTR file) { FXFT_Face face = GetFontFace(file); if (face) { CFPF_SkiaPathFont *pFontDesc = new CFPF_SkiaPathFont; pFontDesc->SetPath(file.GetCStr()); ReportFace(face, pFontDesc); m_FontFaces.Add(pFontDesc); FXFT_Done_Face(face); } }
static FX_DWORD FPF_SKIANormalizeFontName(FX_BSTR bsfamily) { FX_DWORD dwHash = 0; FX_INT32 iLength = bsfamily.GetLength(); FX_LPCSTR pBuffer = bsfamily.GetCStr(); for (FX_INT32 i = 0; i < iLength; i++) { FX_CHAR ch = pBuffer[i]; if (ch == ' ' || ch == '-' || ch == ',') { continue; } dwHash = 31 * dwHash + FXSYS_tolower(ch); } return dwHash; }
FXFT_Face CFPF_SkiaFontMgr::GetFontFace(FX_BSTR bsFile, FX_INT32 iFaceIndex ) { if (bsFile.IsEmpty()) { return NULL; } if (iFaceIndex < 0) { return NULL; } FXFT_Open_Args args; args.flags = FT_OPEN_PATHNAME; args.pathname = (FT_String*)bsFile.GetCStr(); FXFT_Face face; if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) { return FALSE; } FXFT_Set_Pixel_Sizes(face, 0, 64); return face; }
FX_BOOL FX_File_Move(FX_BSTR fileNameSrc, FX_BSTR fileNameDst) { return rename(fileNameSrc.GetCStr(), fileNameDst.GetCStr()); }
FX_BOOL FX_File_Delete(FX_BSTR fileName) { return remove(fileName.GetCStr()) > -1; }
FX_BOOL FX_File_Exist(FX_BSTR fileName) { return access(fileName.GetCStr(), F_OK) > -1; }