bool RenderDocument(BaseEngine *engine, const WCHAR *renderPath, float zoom=1.f, bool silent=false) { if (!CheckRenderPath(renderPath)) return false; if (str::EndsWithI(renderPath, L".txt")) { str::Str<WCHAR> text(1024); for (int pageNo = 1; pageNo <= engine->PageCount(); pageNo++) text.AppendAndFree(engine->ExtractPageText(pageNo, L"\r\n", NULL, Target_Export)); if (silent) return true; ScopedMem<WCHAR> txtFilePath(str::Format(renderPath, 0)); ScopedMem<char> textUTF8(str::conv::ToUtf8(text.Get())); ScopedMem<char> textUTF8BOM(str::Join(UTF8_BOM, textUTF8)); return file::WriteAll(txtFilePath, textUTF8BOM, str::Len(textUTF8BOM)); } if (str::EndsWithI(renderPath, L".pdf")) { if (silent) return false; ScopedMem<WCHAR> pdfFilePath(str::Format(renderPath, 0)); return engine->SaveFileAsPDF(pdfFilePath, true) || PdfCreator::RenderToFile(pdfFilePath, engine); } bool success = true; for (int pageNo = 1; pageNo <= engine->PageCount(); pageNo++) { RenderedBitmap *bmp = engine->RenderBitmap(pageNo, zoom, 0); success &= bmp != NULL; if (!bmp && !silent) ErrOut("Error: Failed to render page %d for %s!", pageNo, engine->FileName()); if (!bmp || silent) { delete bmp; continue; } ScopedMem<WCHAR> pageBmpPath(str::Format(renderPath, pageNo)); if (str::EndsWithI(pageBmpPath, L".png")) { Bitmap gbmp(bmp->GetBitmap(), NULL); CLSID pngEncId = GetEncoderClsid(L"image/png"); gbmp.Save(pageBmpPath, &pngEncId); } else if (str::EndsWithI(pageBmpPath, L".bmp")) { size_t bmpDataLen; ScopedMem<char> bmpData((char *)SerializeBitmap(bmp->GetBitmap(), &bmpDataLen)); if (bmpData) file::WriteAll(pageBmpPath, bmpData, bmpDataLen); } else { // render as TGA for all other file extensions size_t tgaDataLen; ScopedMem<unsigned char> tgaData(tga::SerializeBitmap(bmp->GetBitmap(), &tgaDataLen)); if (tgaData) file::WriteAll(pageBmpPath, tgaData, tgaDataLen); } delete bmp; } return success; }
wxBitmap PoeditArtProvider::CreateBitmap(const wxArtID& id, const wxArtClient& client, const wxSize& size) { // Silence warning about unused parameter in some of the builds (void)client; (void)size; // Note: On Unix, this code is only called as last resolt, if standard // theme provider (that uses current icon theme and files from // /usr/share/icons/<theme>) didn't find any matching icon. wxLogTrace("poedit.icons", "getting icon '%s'", id.c_str()); #ifdef __WXGTK20__ // try legacy GNOME icons from standard theme: wxString gnomeId = GetGnomeStockId(id); if ( !gnomeId.empty() ) { wxLogTrace("poedit.icons", "-> legacy '%s'", gnomeId.c_str()); wxBitmap gbmp(wxArtProvider::GetBitmap(gnomeId, client, size)); if ( gbmp.Ok() ) return gbmp; } #endif // __WXGTK20__ wxString iconsdir = #if defined(__WXMSW__) wxStandardPaths::Get().GetResourcesDir() + "\\Resources"; #else wxStandardPaths::Get().GetInstallPrefix() + "/share/poedit/icons"; #endif if ( !wxDirExists(iconsdir) ) { wxLogTrace("poedit.icons", "icons dir %s not found", iconsdir.c_str()); return wxNullBitmap; } wxString icon; icon.Printf("%s/%s.png", iconsdir.c_str(), id.c_str()); if ( !wxFileExists(icon) ) return wxNullBitmap; wxLogTrace("poedit.icons", "loading from %s", icon.c_str()); wxBitmap bmp(wxImage(icon, wxBITMAP_TYPE_ANY)); return bmp; }
wxBitmap PoeditArtProvider::CreateBitmap(const wxArtID& id, const wxArtClient& client, const wxSize& size) { // Note: On Unix, this code is only called as last resolt, if standard // theme provider (that uses current icon theme and files from // /usr/share/icons/<theme>) didn't find any matching icon. wxLogTrace(_T("poedit.icons"), _T("getting icon '%s'"), id.c_str()); #ifdef __WXGTK20__ // try legacy GNOME icons from standard theme: wxString gnomeId = GetGnomeStockId(id); if ( !gnomeId.empty() ) { wxLogTrace(_T("poedit.icons"), _T("-> legacy '%s'"), gnomeId.c_str()); wxBitmap gbmp(wxArtProvider::GetBitmap(gnomeId, client, size)); if ( gbmp.Ok() ) return gbmp; } #endif // __WXGTK20__ wxString iconsdir = #ifdef __WXMAC__ wxStandardPaths::Get().GetResourcesDir() + _T("/icons"); #else wxGetApp().GetAppPath() + _T("/share/poedit/icons"); #endif if ( !wxDirExists(iconsdir) ) { wxLogTrace(_T("poedit.icons"), _T("icons dir %s not found"), iconsdir.c_str()); return wxNullBitmap; } wxString icon; icon.Printf(_T("%s/%s.png"), iconsdir.c_str(), id.c_str()); if ( !wxFileExists(icon) ) return wxNullBitmap; wxLogTrace(_T("poedit.icons"), _T("loading from %s"), icon.c_str()); wxBitmap bmp(wxImage(icon, wxBITMAP_TYPE_ANY)); return bmp; }
wxBitmap PoeditArtProvider::CreateBitmap(const wxArtID& id_, const wxArtClient& client, const wxSize& size) { wxLogTrace("poedit.icons", "getting icon '%s'", id_.c_str()); wxArtID id(id_); #define CHECK_FOR_VARIANT(name) \ const bool name##Variant = id.Contains("@" #name); \ if (name##Variant) \ id.Replace("@" #name, "") CHECK_FOR_VARIANT(disabled); CHECK_FOR_VARIANT(opaque); CHECK_FOR_VARIANT(inverted); // Silence warning about unused parameter in some of the builds (void)client; (void)size; // Note: On Unix, this code is only called as last resort, if standard // theme provider (that uses current icon theme and files from // /usr/share/icons/<theme>) didn't find any matching icon. #ifdef __WXGTK20__ // try legacy GNOME icons from standard theme: wxString gnomeId = GetGnomeStockId(id); if ( !gnomeId.empty() ) { wxLogTrace("poedit.icons", "-> legacy '%s'", gnomeId.c_str()); wxBitmap gbmp(wxArtProvider::GetBitmap(gnomeId, client, size)); if ( gbmp.Ok() ) return gbmp; } #endif // __WXGTK20__ auto iconsdir = GetIconsDir(); if ( !wxDirExists(iconsdir) ) { wxLogTrace("poedit.icons", "icons dir %s not found", iconsdir.c_str()); return wxNullBitmap; } wxString icon; icon.Printf("%s/%s", iconsdir, id); wxLogTrace("poedit.icons", "loading from %s", icon); wxImage img; if (ColorScheme::GetAppMode() == ColorScheme::Dark) img = LoadScaledBitmap(icon + "Dark"); if (!img.IsOk()) img = LoadScaledBitmap(icon); if (!img.IsOk()) { wxLogTrace("poedit.icons", "failed to load icon '%s'", id); return wxNullBitmap; } if (id.EndsWith("Template")) ProcessTemplateImage(img, opaqueVariant, invertedVariant); if (disabledVariant) img = img.ConvertToDisabled(); if (wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft && ShouldBeMirorredInRTL(id, client)) { img = img.Mirror(); } #ifdef __WXMSW__ if (client == wxART_TOOLBAR && IsWindows10OrGreater()) { const int padding = PX(1); auto sz = img.GetSize(); sz.IncBy(padding * 2); img.Resize(sz, wxPoint(padding, padding)); } #endif // __WXMSW__ return wxBitmap(img); }