void CPWL_Edit::OnKillFocus() { ShowVScrollBar(false); m_pEdit->SelectNone(); SetCaret(false, CFX_PointF(), CFX_PointF()); SetCharSet(FXFONT_ANSI_CHARSET); m_bFocus = false; }
void CFFL_InteractiveFormFiller::OnDraw(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, CFX_RenderDevice* pDevice, const CFX_Matrix& mtUser2Device) { ASSERT(pPageView); CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot); if (!IsVisible(pWidget)) return; CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, false); if (pFormFiller && pFormFiller->IsValid()) { pFormFiller->OnDraw(pPageView, pAnnot, pDevice, mtUser2Device); pAnnot->GetPDFPage(); if (m_pFormFillEnv->GetFocusAnnot() != pAnnot) return; CFX_FloatRect rcFocus = pFormFiller->GetFocusBox(pPageView); if (rcFocus.IsEmpty()) return; CFX_PathData path; path.AppendPoint(CFX_PointF(rcFocus.left, rcFocus.top), FXPT_TYPE::MoveTo, false); path.AppendPoint(CFX_PointF(rcFocus.left, rcFocus.bottom), FXPT_TYPE::LineTo, false); path.AppendPoint(CFX_PointF(rcFocus.right, rcFocus.bottom), FXPT_TYPE::LineTo, false); path.AppendPoint(CFX_PointF(rcFocus.right, rcFocus.top), FXPT_TYPE::LineTo, false); path.AppendPoint(CFX_PointF(rcFocus.left, rcFocus.top), FXPT_TYPE::LineTo, false); CFX_GraphStateData gsd; gsd.m_DashArray = {1.0f}; gsd.m_DashPhase = 0; gsd.m_LineWidth = 1.0f; pDevice->DrawPath(&path, &mtUser2Device, &gsd, 0, ArgbEncode(255, 0, 0, 0), FXFILL_ALTERNATE); return; } pFormFiller = GetFormFiller(pAnnot, false); if (pFormFiller) { pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, mtUser2Device); } else { pWidget->DrawAppearance(pDevice, mtUser2Device, CPDF_Annot::Normal, nullptr); } if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget)) pWidget->DrawShadow(pDevice, pPageView); }
bool CXFA_FFComboBox::OnRButtonUp(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) { if (!CXFA_FFField::OnRButtonUp(dwFlags, fx, fy)) return false; GetDoc()->GetDocEnvironment()->PopupMenu(this, CFX_PointF(fx, fy)); return true; }
Optional<PAGECHAR_INFO> CPDF_TextPage::GenerateCharInfo(wchar_t unicode) { const PAGECHAR_INFO* pPrevCharInfo = GetPrevCharInfo(); if (!pPrevCharInfo) return {}; PAGECHAR_INFO info; info.m_Index = m_TextBuf.GetLength(); info.m_CharCode = CPDF_Font::kInvalidCharCode; info.m_Unicode = unicode; info.m_Flag = FPDFTEXT_CHAR_GENERATED; int preWidth = 0; if (pPrevCharInfo->m_pTextObj && pPrevCharInfo->m_CharCode != -1) { preWidth = GetCharWidth(pPrevCharInfo->m_CharCode, pPrevCharInfo->m_pTextObj->GetFont()); } float fFontSize = pPrevCharInfo->m_pTextObj ? pPrevCharInfo->m_pTextObj->GetFontSize() : pPrevCharInfo->m_CharBox.Height(); if (!fFontSize) fFontSize = kDefaultFontSize; info.m_Origin = CFX_PointF(pPrevCharInfo->m_Origin.x + preWidth * (fFontSize) / 1000, pPrevCharInfo->m_Origin.y); info.m_CharBox = CFX_FloatRect(info.m_Origin.x, info.m_Origin.y, info.m_Origin.x, info.m_Origin.y); return info; }
void CFX_ListCtrl::SetPlateRect(const CFX_FloatRect& rect) { CFX_ListContainer::SetPlateRect(rect); m_ptScrollPos.x = rect.left; SetScrollPos(CFX_PointF(rect.left, rect.top)); ReArrange(0); InvalidateItem(-1); }
void CFWL_PictureBoxImp::DrawBkground(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, const CFX_Matrix* pMatrix) { IFWL_PictureBoxDP* pPictureDP = static_cast<IFWL_PictureBoxDP*>(m_pProperties->m_pDataProvider); if (!pPictureDP) return; CFX_DIBitmap* pPicture = pPictureDP->GetPicture(m_pInterface); CFX_Matrix matrix; pPictureDP->GetMatrix(m_pInterface, matrix); if (!pPicture) return; matrix.Concat(*pMatrix); FX_FLOAT fx = (FX_FLOAT)pPicture->GetWidth(); FX_FLOAT fy = (FX_FLOAT)pPicture->GetHeight(); if (fx > m_rtClient.width) { fx = m_rtClient.width; } if (fy > m_rtClient.height) { fy = m_rtClient.height; } pGraphics->DrawImage(pPicture, CFX_PointF((m_rtClient.width - fx) / 2, (m_rtClient.height - fy) / 2), &matrix); }
int32_t CXFA_LayoutProcessor::DoLayout(IFX_Pause* pPause) { if (m_nProgressCounter < 1) return -1; XFA_ItemLayoutProcessorResult eStatus; CXFA_Node* pFormNode = m_pRootItemLayoutProcessor->GetFormNode(); FX_FLOAT fPosX = pFormNode->GetMeasure(XFA_ATTRIBUTE_X).ToUnit(XFA_UNIT_Pt); FX_FLOAT fPosY = pFormNode->GetMeasure(XFA_ATTRIBUTE_Y).ToUnit(XFA_UNIT_Pt); do { FX_FLOAT fAvailHeight = m_pLayoutPageMgr->GetAvailHeight(); eStatus = m_pRootItemLayoutProcessor->DoLayout(true, fAvailHeight, fAvailHeight, nullptr); if (eStatus != XFA_ItemLayoutProcessorResult::Done) m_nProgressCounter++; CXFA_ContentLayoutItem* pLayoutItem = m_pRootItemLayoutProcessor->ExtractLayoutItem(); if (pLayoutItem) pLayoutItem->m_sPos = CFX_PointF(fPosX, fPosY); m_pLayoutPageMgr->SubmitContentItem(pLayoutItem, eStatus); } while (eStatus != XFA_ItemLayoutProcessorResult::Done && (!pPause || !pPause->NeedToPauseNow())); if (eStatus == XFA_ItemLayoutProcessorResult::Done) { m_pLayoutPageMgr->FinishPaginatedPageSets(); m_pLayoutPageMgr->SyncLayoutData(); m_bNeeLayout = false; m_rgChangedContainers.RemoveAll(); } return 100 * (eStatus == XFA_ItemLayoutProcessorResult::Done ? m_nProgressCounter : m_nProgressCounter - 1) / m_nProgressCounter; }
FX_BOOL CXFA_FFComboBox::OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) { if (!CXFA_FFField::OnRButtonUp(dwFlags, fx, fy)) return FALSE; GetDoc()->GetDocProvider()->PopupMenu(this, CFX_PointF(fx, fy), nullptr); return TRUE; }
void CFDE_Path::AddCurve(const CFX_PointsF& points, FX_BOOL bClosed, FX_FLOAT fTension) { int32_t iLast = points.GetUpperBound(); if (iLast < 1) return; CFX_PointsF tangents; GetCurveTangents(points, tangents, bClosed, fTension); const CFX_PointF* pPoints = points.GetData(); CFX_PointF* pTangents = tangents.GetData(); MoveTo(pPoints[0]); for (int32_t i = 0; i < iLast; ++i) { BezierTo(CFX_PointF(pPoints[i].x + pTangents[i].x, pPoints[i].y + pTangents[i].y), CFX_PointF(pPoints[i + 1].x - pTangents[i + 1].x, pPoints[i + 1].y - pTangents[i + 1].y), CFX_PointF(pPoints[i + 1].x, pPoints[i + 1].y)); } if (bClosed) { BezierTo(CFX_PointF(pPoints[iLast].x + pTangents[iLast].x, pPoints[iLast].y + pTangents[iLast].y), CFX_PointF(pPoints[0].x - pTangents[0].x, pPoints[0].y - pTangents[0].y), CFX_PointF(pPoints[0].x, pPoints[0].y)); CloseFigure(); } }
CFX_PointF CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord) { CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); CPVT_WordPlace wpOld = pIterator->GetAt(); pIterator->SetAt(wpWord); CFX_PointF pt; CPVT_Word word; if (pIterator->GetWord(word)) { pt = CFX_PointF(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent); } pIterator->SetAt(wpOld); return pt; }
FPDF_EXPORT FPDF_LINK FPDF_CALLCONV FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y) { CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!pPage) return nullptr; CPDF_LinkList* pLinkList = GetLinkList(pPage); if (!pLinkList) return nullptr; CPDF_Link link = pLinkList->GetLinkAtPoint( pPage, CFX_PointF(static_cast<float>(x), static_cast<float>(y)), nullptr); return FPDFLinkFromCPDFDictionary(link.GetDict()); }
FPDF_EXPORT int FPDF_CALLCONV FPDFLink_GetLinkZOrderAtPoint(FPDF_PAGE page, double x, double y) { CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!pPage) return -1; CPDF_LinkList* pLinkList = GetLinkList(pPage); if (!pLinkList) return -1; int z_order = -1; pLinkList->GetLinkAtPoint( pPage, CFX_PointF(static_cast<float>(x), static_cast<float>(y)), &z_order); return z_order; }
void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, uint32_t msg, intptr_t wParam, intptr_t lParam) { CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); FX_FLOAT fPos; switch (msg) { case PNM_SETSCROLLINFO: switch (wParam) { case SBT_VSCROLL: if (CPWL_Wnd* pChild = GetVScrollBar()) { pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam); } break; } break; case PNM_SETSCROLLPOS: switch (wParam) { case SBT_VSCROLL: if (CPWL_Wnd* pChild = GetVScrollBar()) { pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam); } break; } break; case PNM_SCROLLWINDOW: fPos = *(FX_FLOAT*)lParam; switch (wParam) { case SBT_VSCROLL: m_pList->SetScrollPos(CFX_PointF(0, fPos)); break; } break; } }
void CPWL_ListBox::ScrollWindowVertically(float pos) { m_pList->SetScrollPos(CFX_PointF(0, pos)); }
CFX_PointF CFWL_ComboList::ClientToOuter(const CFX_PointF& point) { CFX_PointF ret = point + CFX_PointF(m_pProperties->m_rtWidget.left, m_pProperties->m_rtWidget.top); CFWL_Widget* pOwner = GetOwner(); return pOwner ? pOwner->TransformTo(m_pOuter, ret) : ret; }
CFX_PointF CFX_ListCtrl::OutToIn(const CFX_PointF& point) const { CFX_FloatRect rcPlate = GetPlateRect(); return CFX_PointF(point.x + (m_ptScrollPos.x - rcPlate.left), point.y + (m_ptScrollPos.y - rcPlate.top)); }
void CFWL_WidgetTP::DrawArrow(CFX_Graphics* pGraphics, const CFX_RectF* pRect, FWLTHEME_DIRECTION eDict, FX_ARGB argSign, CFX_Matrix* pMatrix) { bool bVert = (eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down); FX_FLOAT fLeft = (FX_FLOAT)(((pRect->width - (bVert ? 9 : 6)) / 2 + pRect->left) + 0.5); FX_FLOAT fTop = (FX_FLOAT)(((pRect->height - (bVert ? 6 : 9)) / 2 + pRect->top) + 0.5); CFX_Path path; switch (eDict) { case FWLTHEME_DIRECTION_Down: { path.MoveTo(CFX_PointF(fLeft, fTop + 1)); path.LineTo(CFX_PointF(fLeft + 4, fTop + 5)); path.LineTo(CFX_PointF(fLeft + 8, fTop + 1)); path.LineTo(CFX_PointF(fLeft + 7, fTop)); path.LineTo(CFX_PointF(fLeft + 4, fTop + 3)); path.LineTo(CFX_PointF(fLeft + 1, fTop)); break; } case FWLTHEME_DIRECTION_Up: { path.MoveTo(CFX_PointF(fLeft, fTop + 4)); path.LineTo(CFX_PointF(fLeft + 4, fTop)); path.LineTo(CFX_PointF(fLeft + 8, fTop + 4)); path.LineTo(CFX_PointF(fLeft + 7, fTop + 5)); path.LineTo(CFX_PointF(fLeft + 4, fTop + 2)); path.LineTo(CFX_PointF(fLeft + 1, fTop + 5)); break; } case FWLTHEME_DIRECTION_Right: { path.MoveTo(CFX_PointF(fLeft + 1, fTop)); path.LineTo(CFX_PointF(fLeft + 5, fTop + 4)); path.LineTo(CFX_PointF(fLeft + 1, fTop + 8)); path.LineTo(CFX_PointF(fLeft, fTop + 7)); path.LineTo(CFX_PointF(fLeft + 3, fTop + 4)); path.LineTo(CFX_PointF(fLeft, fTop + 1)); break; } case FWLTHEME_DIRECTION_Left: { path.MoveTo(CFX_PointF(fLeft, fTop + 4)); path.LineTo(CFX_PointF(fLeft + 4, fTop)); path.LineTo(CFX_PointF(fLeft + 5, fTop + 1)); path.LineTo(CFX_PointF(fLeft + 2, fTop + 4)); path.LineTo(CFX_PointF(fLeft + 5, fTop + 7)); path.LineTo(CFX_PointF(fLeft + 4, fTop + 8)); break; } } CFX_Color cr(argSign); pGraphics->SetFillColor(&cr); pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); }
CFX_FloatRect CFX_ListCtrl::OutToIn(const CFX_FloatRect& rect) const { CFX_PointF ptLeftBottom = OutToIn(CFX_PointF(rect.left, rect.bottom)); CFX_PointF ptRightTop = OutToIn(CFX_PointF(rect.right, rect.top)); return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y); }
void CPDF_CharPosList::Load(const std::vector<uint32_t>& charCodes, const std::vector<FX_FLOAT>& charPos, CPDF_Font* pFont, FX_FLOAT FontSize) { int nChars = pdfium::CollectionSize<int>(charCodes); m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, nChars); m_nChars = 0; CPDF_CIDFont* pCIDFont = pFont->AsCIDFont(); bool bVertWriting = pCIDFont && pCIDFont->IsVertWriting(); for (int iChar = 0; iChar < nChars; iChar++) { uint32_t CharCode = charCodes[iChar]; if (CharCode == static_cast<uint32_t>(-1)) continue; bool bVert = false; FXTEXT_CHARPOS& charpos = m_pCharPos[m_nChars++]; if (pCIDFont) charpos.m_bFontStyle = true; charpos.m_GlyphIndex = pFont->GlyphFromCharCode(CharCode, &bVert); if (charpos.m_GlyphIndex != static_cast<uint32_t>(-1)) { charpos.m_FallbackFontPosition = -1; } else { charpos.m_FallbackFontPosition = pFont->FallbackFontFromCharcode(CharCode); charpos.m_GlyphIndex = pFont->FallbackGlyphFromCharcode( charpos.m_FallbackFontPosition, CharCode); } // TODO(npm): Figure out how this affects m_ExtGID #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ charpos.m_ExtGID = pFont->GlyphFromCharCodeExt(CharCode); #endif if (!pFont->IsEmbedded() && !pFont->IsCIDFont()) charpos.m_FontCharWidth = pFont->GetCharWidthF(CharCode); else charpos.m_FontCharWidth = 0; charpos.m_Origin = CFX_PointF(iChar ? charPos[iChar - 1] : 0, 0); charpos.m_bGlyphAdjust = false; if (!pCIDFont) continue; uint16_t CID = pCIDFont->CIDFromCharCode(CharCode); if (bVertWriting) { charpos.m_Origin = CFX_PointF(0, charpos.m_Origin.x); short vx; short vy; pCIDFont->GetVertOrigin(CID, vx, vy); charpos.m_Origin.x -= FontSize * vx / 1000; charpos.m_Origin.y -= FontSize * vy / 1000; } const uint8_t* pTransform = pCIDFont->GetCIDTransform(CID); if (pTransform && !bVert) { charpos.m_AdjustMatrix[0] = pCIDFont->CIDTransformToFloat(pTransform[0]); charpos.m_AdjustMatrix[2] = pCIDFont->CIDTransformToFloat(pTransform[2]); charpos.m_AdjustMatrix[1] = pCIDFont->CIDTransformToFloat(pTransform[1]); charpos.m_AdjustMatrix[3] = pCIDFont->CIDTransformToFloat(pTransform[3]); charpos.m_Origin.x += pCIDFont->CIDTransformToFloat(pTransform[4]) * FontSize; charpos.m_Origin.y += pCIDFont->CIDTransformToFloat(pTransform[5]) * FontSize; charpos.m_bGlyphAdjust = true; } } }
void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice, CFX_Matrix* pUser2Device) { CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); CFX_FloatRect rcClient = GetClientRect(); CFX_ByteTextBuf sLine; int32_t nCharArray = m_pEdit->GetCharArray(); FX_SAFE_INT32 nCharArraySafe = nCharArray; nCharArraySafe -= 1; nCharArraySafe *= 2; if (nCharArray > 0 && nCharArraySafe.IsValid()) { switch (GetBorderStyle()) { case BorderStyle::SOLID: { CFX_GraphStateData gsd; gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth(); CFX_PathData path; for (int32_t i = 0; i < nCharArray - 1; i++) { path.AppendPoint( CFX_PointF( rcClient.left + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), rcClient.bottom), FXPT_TYPE::MoveTo, false); path.AppendPoint( CFX_PointF( rcClient.left + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), rcClient.top), FXPT_TYPE::LineTo, false); } if (!path.GetPoints().empty()) { pDevice->DrawPath(&path, pUser2Device, &gsd, 0, GetBorderColor().ToFXColor(255), FXFILL_ALTERNATE); } break; } case BorderStyle::DASH: { CFX_GraphStateData gsd; gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth(); gsd.SetDashCount(2); gsd.m_DashArray[0] = (FX_FLOAT)GetBorderDash().nDash; gsd.m_DashArray[1] = (FX_FLOAT)GetBorderDash().nGap; gsd.m_DashPhase = (FX_FLOAT)GetBorderDash().nPhase; CFX_PathData path; for (int32_t i = 0; i < nCharArray - 1; i++) { path.AppendPoint( CFX_PointF( rcClient.left + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), rcClient.bottom), FXPT_TYPE::MoveTo, false); path.AppendPoint( CFX_PointF( rcClient.left + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), rcClient.top), FXPT_TYPE::LineTo, false); } if (!path.GetPoints().empty()) { pDevice->DrawPath(&path, pUser2Device, &gsd, 0, GetBorderColor().ToFXColor(255), FXFILL_ALTERNATE); } break; } default: break; } } CFX_FloatRect rcClip; CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); CPVT_WordRange* pRange = nullptr; if (!HasFlag(PES_TEXTOVERFLOW)) { rcClip = GetClientRect(); pRange = &wrRange; } CFX_SystemHandler* pSysHandler = GetSystemHandler(); CFX_Edit::DrawEdit(pDevice, pUser2Device, m_pEdit.get(), GetTextColor().ToFXColor(GetTransparency()), rcClip, CFX_PointF(), pRange, pSysHandler, m_pFormFiller); }