void CFX_GraphState::SetLineDash(CPDF_Array* pArray, FX_FLOAT phase, FX_FLOAT scale) { CFX_GraphStateData* pData = m_Ref.GetPrivateCopy(); pData->m_DashPhase = phase * scale; pData->SetDashCount(static_cast<int>(pArray->GetCount())); for (size_t i = 0; i < pArray->GetCount(); i++) pData->m_DashArray[i] = pArray->GetNumberAt(i) * scale; }
void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, /*const CRect& rcWindow,*/ FX_DWORD dwFlags) { ASSERT(pPageView != NULL); CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; if (IsVisible(pWidget)) { if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { if (pFormFiller->IsValid()) { pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); pAnnot->GetPDFPage(); CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument(); if (pDocument->GetFocusAnnot() == pAnnot) { CPDF_Rect rcFocus = pFormFiller->GetFocusBox(pPageView); if (!rcFocus.IsEmpty()) { CFX_PathData path; path.SetPointCount(5); path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO); path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LINETO); path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LINETO); path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINETO); path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO); CFX_GraphStateData gsd; gsd.SetDashCount(1); gsd.m_DashArray[0] = 1.0f; gsd.m_DashPhase = 0; gsd.m_LineWidth = 1.0f; pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255, 0, 0, 0), FXFILL_ALTERNATE); } } return; } } if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); else pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget)) pWidget->DrawShadow(pDevice, pPageView); } }
void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice, CFX_Matrix* pUser2Device) { CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); CPDF_Rect 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 PBS_SOLID: { CFX_GraphStateData gsd; gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth(); CFX_PathData path; path.SetPointCount(nCharArraySafe.ValueOrDie()); for (int32_t i = 0; i < nCharArray - 1; i++) { path.SetPoint( i * 2, rcClient.left + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), rcClient.bottom, FXPT_MOVETO); path.SetPoint( i * 2 + 1, rcClient.left + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), rcClient.top, FXPT_LINETO); } if (path.GetPointCount() > 0) pDevice->DrawPath( &path, pUser2Device, &gsd, 0, CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255), FXFILL_ALTERNATE); } break; case PBS_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; path.SetPointCount(nCharArraySafe.ValueOrDie()); for (int32_t i = 0; i < nCharArray - 1; i++) { path.SetPoint( i * 2, rcClient.left + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), rcClient.bottom, FXPT_MOVETO); path.SetPoint( i * 2 + 1, rcClient.left + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), rcClient.top, FXPT_LINETO); } if (path.GetPointCount() > 0) pDevice->DrawPath( &path, pUser2Device, &gsd, 0, CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255), FXFILL_ALTERNATE); } break; } } CPDF_Rect rcClip; CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); CPVT_WordRange* pRange = NULL; if (!HasFlag(PES_TEXTOVERFLOW)) { rcClip = GetClientRect(); pRange = &wrRange; } IFX_SystemHandler* pSysHandler = GetSystemHandler(); IFX_Edit::DrawEdit( pDevice, pUser2Device, m_pEdit, CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), rcClip, CPDF_Point(0.0f, 0.0f), pRange, pSysHandler, m_pFormFiller); if (HasFlag(PES_SPELLCHECK)) { CPWL_Utils::DrawEditSpellCheck(pDevice, pUser2Device, m_pEdit, rcClip, CPDF_Point(0.0f, 0.0f), pRange, GetCreationParam().pSpellCheck); } }
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); }