void FromZoom(char **dst, float zoom, DisplayState *stateForIssue2140) { float prevZoom = *dst ? ToZoom(*dst, INVALID_ZOOM) : INVALID_ZOOM; if (prevZoom == zoom) return; if (!IsValidZoom(zoom) && stateForIssue2140) { // TODO: does issue 2140 still occur? dbglog::CrashLogF("Invalid ds->zoom: %g", zoom); const WCHAR *ext = path::GetExt(stateForIssue2140->filePath); if (!str::IsEmpty(ext)) { ScopedMem<char> extA(str::conv::ToUtf8(ext)); dbglog::CrashLogF("File type: %s", extA.Get()); } dbglog::CrashLogF("DisplayMode: %S", stateForIssue2140->displayMode); dbglog::CrashLogF("PageNo: %d", stateForIssue2140->pageNo); } CrashIf(!IsValidZoom(zoom)); free(*dst); if (ZOOM_FIT_PAGE == zoom) *dst = str::Dup("fit page"); else if (ZOOM_FIT_WIDTH == zoom) *dst = str::Dup("fit width"); else if (ZOOM_FIT_CONTENT == zoom) *dst = str::Dup("fit content"); else *dst = str::Format("%g", zoom); }
static BencDict *DisplayState_Serialize(DisplayState *ds, bool globalPrefsOnly) { if (ds->isMissing && (globalPrefsOnly || ds->useGlobalValues) && !ds->decryptionKey && !ds->isPinned) { // forget about missing documents without valuable state return NULL; } // BUG: 2140 if (!IsValidZoom(ds->zoomVirtual)) { dbglog::CrashLogF("Invalid ds->zoomVirtual: %.4f", ds->zoomVirtual); const WCHAR *ext = path::GetExt(ds->filePath); if (!str::IsEmpty(ext)) { ScopedMem<char> extA(str::conv::ToUtf8(ext)); dbglog::CrashLogF("File type: %s", extA.Get()); } dbglog::CrashLogF("DisplayMode: %d", ds->displayMode); dbglog::CrashLogF("PageNo: %d", ds->pageNo); CrashIf(true); } // don't include common values in order to keep the preference file size down uint32_t bitmask = (globalPrefsOnly || ds->useGlobalValues ? Ds_OnlyGlobal : Ds_NotGlobal) | (ds->openCount > 0 ? Ds_IsRecent : 0) | (ds->isPinned ? Ds_IsPinned : 0) | (ds->isMissing ? Ds_IsMissing : 0) | (ds->tocState && ds->tocState->Count() > 0 ? Ds_HasTocState : 0); return SerializeStruct(gFilePrefInfo, dimof(gFilePrefInfo), ds, NULL, bitmask); }
static BencDict *DisplayState_Serialize(DisplayState *ds, bool globalPrefsOnly) { BencDict *prefs = new BencDict(); if (!prefs) return NULL; prefs->Add(FILE_STR, ds->filePath); if (ds->decryptionKey) prefs->AddRaw(DECRYPTION_KEY_STR, ds->decryptionKey); prefs->Add(OPEN_COUNT_STR, ds->openCount); prefs->Add(IS_PINNED_STR, ds->isPinned); if (globalPrefsOnly || ds->useGlobalValues) { prefs->Add(USE_GLOBAL_VALUES_STR, TRUE); return prefs; } const WCHAR *mode = DisplayModeConv::NameFromEnum(ds->displayMode); prefs->Add(DISPLAY_MODE_STR, mode); prefs->Add(PAGE_NO_STR, ds->pageNo); prefs->Add(REPARSE_IDX_STR, ds->reparseIdx); prefs->Add(ROTATION_STR, ds->rotation); prefs->Add(SCROLL_X_STR, ds->scrollPos.x); prefs->Add(SCROLL_Y_STR, ds->scrollPos.y); prefs->Add(WINDOW_STATE_STR, ds->windowState); prefs->Add(WINDOW_X_STR, ds->windowPos.x); prefs->Add(WINDOW_Y_STR, ds->windowPos.y); prefs->Add(WINDOW_DX_STR, ds->windowPos.dx); prefs->Add(WINDOW_DY_STR, ds->windowPos.dy); prefs->Add(TOC_VISIBLE_STR, ds->tocVisible); prefs->Add(SIDEBAR_DX_STR, ds->sidebarDx); // BUG: 2140 if (!IsValidZoom(ds->zoomVirtual)) { CrashLogFmt("Invalid ds->zoomVirtual: %.4f\n", ds->zoomVirtual); const WCHAR *ext = str::FindCharLast(ds->filePath, L'.'); if (ext) { ScopedMem<char> extA(str::conv::ToUtf8(ext)); CrashLogFmt("File type: %s\n", extA.Get()); } CrashLogFmt("DisplayMode: %d\n", ds->displayMode); CrashLogFmt("PageNo: %d\n", ds->pageNo); } CrashIf(!IsValidZoom(ds->zoomVirtual)); ScopedMem<char> zoom(str::Format("%.4f", ds->zoomVirtual)); prefs->AddRaw(ZOOM_VIRTUAL_STR, zoom); if (ds->tocState && ds->tocState->Count() > 0) { BencArray *tocState = new BencArray(); if (tocState) { for (size_t i = 0; i < ds->tocState->Count(); i++) { tocState->Add(ds->tocState->At(i)); } prefs->Add(TOC_STATE_STR, tocState); } } return prefs; }