FX_ARGB CPDF_ApSettings::GetColor(int& iColorType, FX_BSTR csEntry) { iColorType = COLORTYPE_TRANSPARENT; if (m_pDict == NULL) { return 0; } FX_ARGB color = 0; CPDF_Array* pEntry = m_pDict->GetArray(csEntry); if (pEntry == NULL) { return color; } FX_DWORD dwCount = pEntry->GetCount(); if (dwCount == 1) { iColorType = COLORTYPE_GRAY; FX_FLOAT g = pEntry->GetNumber(0) * 255; color = ArgbEncode(255, (int)g, (int)g, (int)g); } else if (dwCount == 3) { iColorType = COLORTYPE_RGB; FX_FLOAT r = pEntry->GetNumber(0) * 255; FX_FLOAT g = pEntry->GetNumber(1) * 255; FX_FLOAT b = pEntry->GetNumber(2) * 255; color = ArgbEncode(255, (int)r, (int)g, (int)b); } else if (dwCount == 4) { iColorType = COLORTYPE_CMYK; FX_FLOAT c = pEntry->GetNumber(0); FX_FLOAT m = pEntry->GetNumber(1); FX_FLOAT y = pEntry->GetNumber(2); FX_FLOAT k = pEntry->GetNumber(3); FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k); FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k); FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k); color = ArgbEncode(255, (int)(r * 255), (int)(g * 255), (int)(b * 255)); } return color; }
void CFWL_WidgetTP::DrawEdge(CFX_Graphics* pGraphics, FX_DWORD dwStyles, const CFX_RectF* pRect, CFX_Matrix* pMatrix) { if (!pGraphics) return; if (!pRect) return; pGraphics->SaveGraphState(); CFX_Color crStroke(FWL_GetThemeColor(m_dwThemeID) == 0 ? ArgbEncode(255, 127, 157, 185) : FWLTHEME_COLOR_Green_BKSelected); pGraphics->SetStrokeColor(&crStroke); CFX_Path path; path.Create(); path.AddRectangle(pRect->left, pRect->top, pRect->width - 1, pRect->height - 1); pGraphics->StrokePath(&path, pMatrix); path.Clear(); crStroke = ArgbEncode(255, 255, 255, 255); pGraphics->SetStrokeColor(&crStroke); path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 3, pRect->height - 3); pGraphics->StrokePath(&path, pMatrix); pGraphics->RestoreGraphState(); }
FX_ARGB CPDF_RenderOptions::TranslateColor(FX_ARGB argb) const { if (m_ColorMode == RENDER_COLOR_NORMAL) { return argb; } if (m_ColorMode == RENDER_COLOR_ALPHA) { return argb; } int a, r, g, b; ArgbDecode(argb, a, r, g, b); int gray = FXRGB2GRAY(r, g, b); if (m_ColorMode == RENDER_COLOR_TWOCOLOR) { int color = (r - gray) * (r - gray) + (g - gray) * (g - gray) + (b - gray) * (b - gray); if (gray < 35 && color < 20) { return ArgbEncode(a, m_ForeColor); } if (gray > 221 && color < 20) { return ArgbEncode(a, m_BackColor); } return argb; } int fr = FXSYS_GetRValue(m_ForeColor); int fg = FXSYS_GetGValue(m_ForeColor); int fb = FXSYS_GetBValue(m_ForeColor); int br = FXSYS_GetRValue(m_BackColor); int bg = FXSYS_GetGValue(m_BackColor); int bb = FXSYS_GetBValue(m_BackColor); r = (br - fr) * gray / 255 + fr; g = (bg - fg) * gray / 255 + fg; b = (bb - fb) * gray / 255 + fb; return ArgbEncode(a, r, g, b); }
FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha() { if (m_pDIBSource->IsOpaqueImage()) { CFX_PathData path; path.AppendRect(0, 0, 1, 1); path.Transform(&m_ImageMatrix); FX_DWORD fill_color = ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha); m_pRenderStatus->m_pDevice->DrawPath(&path, NULL, NULL, fill_color, 0, FXFILL_WINDING); } else { const CFX_DIBSource* pAlphaMask = m_pDIBSource->IsAlphaMask() ? m_pDIBSource : m_pDIBSource->GetAlphaMask(); if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || FXSYS_fabs(m_ImageMatrix.c) >= 0.5f) { int left, top; CFX_DIBitmap* pTransformed = pAlphaMask->TransformTo(&m_ImageMatrix, left, top); if (pTransformed == NULL) { return TRUE; } m_pRenderStatus->m_pDevice->SetBitMask(pTransformed, left, top, ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha)); delete pTransformed; } else { CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect(); FX_RECT image_rect = image_rect_f.GetOutterRect(); int dest_width = m_ImageMatrix.a > 0 ? image_rect.Width() : -image_rect.Width(); int dest_height = m_ImageMatrix.d > 0 ? -image_rect.Height() : image_rect.Height(); int left = dest_width > 0 ? image_rect.left : image_rect.right; int top = dest_height > 0 ? image_rect.top : image_rect.bottom; m_pRenderStatus->m_pDevice->StretchBitMask(pAlphaMask, left, top, dest_width, dest_height, ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha)); } if (m_pDIBSource != pAlphaMask) { delete pAlphaMask; } } return FALSE; }
FX_ARGB CPDF_ApSettings::GetColor(int& iColorType, const CFX_ByteStringC& csEntry) const { iColorType = COLORTYPE_TRANSPARENT; if (!m_pDict) return 0; CPDF_Array* pEntry = m_pDict->GetArrayBy(csEntry); if (!pEntry) return 0; FX_ARGB color = 0; FX_DWORD dwCount = pEntry->GetCount(); if (dwCount == 1) { iColorType = COLORTYPE_GRAY; FX_FLOAT g = pEntry->GetNumberAt(0) * 255; color = ArgbEncode(255, (int)g, (int)g, (int)g); } else if (dwCount == 3) { iColorType = COLORTYPE_RGB; FX_FLOAT r = pEntry->GetNumberAt(0) * 255; FX_FLOAT g = pEntry->GetNumberAt(1) * 255; FX_FLOAT b = pEntry->GetNumberAt(2) * 255; color = ArgbEncode(255, (int)r, (int)g, (int)b); } else if (dwCount == 4) { iColorType = COLORTYPE_CMYK; FX_FLOAT c = pEntry->GetNumberAt(0); FX_FLOAT m = pEntry->GetNumberAt(1); FX_FLOAT y = pEntry->GetNumberAt(2); FX_FLOAT k = pEntry->GetNumberAt(3); FX_FLOAT r = 1.0f - std::min(1.0f, c + k); FX_FLOAT g = 1.0f - std::min(1.0f, m + k); FX_FLOAT b = 1.0f - std::min(1.0f, y + k); color = ArgbEncode(255, (int)(r * 255), (int)(g * 255), (int)(b * 255)); } return color; }
FX_BOOL FDE_ParseCSSColor(const FX_WCHAR* pszValue, int32_t iValueLen, FX_ARGB& dwColor) { FXSYS_assert(pszValue != NULL && iValueLen > 0); if (*pszValue == '#') { switch (iValueLen) { case 4: { uint8_t red = FX_Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[1]); uint8_t green = FX_Hex2Dec((uint8_t)pszValue[2], (uint8_t)pszValue[2]); uint8_t blue = FX_Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[3]); dwColor = ArgbEncode(255, red, green, blue); } return TRUE; case 7: { uint8_t red = FX_Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[2]); uint8_t green = FX_Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[4]); uint8_t blue = FX_Hex2Dec((uint8_t)pszValue[5], (uint8_t)pszValue[6]); dwColor = ArgbEncode(255, red, green, blue); } return TRUE; } } else if (iValueLen >= 10) { if (pszValue[iValueLen - 1] != ')' || FX_wcsnicmp(L"rgb(", pszValue, 4)) { return FALSE; } uint8_t rgb[3] = {0}; FX_FLOAT fValue; FDE_CSSPRIMITIVETYPE eType; CFDE_CSSValueListParser list(pszValue + 4, iValueLen - 5, ','); for (int32_t i = 0; i < 3; ++i) { if (!list.NextValue(eType, pszValue, iValueLen)) { return FALSE; } if (eType != FDE_CSSPRIMITIVETYPE_Number) { return FALSE; } if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) { return FALSE; } rgb[i] = eType == FDE_CSSPRIMITIVETYPE_Percent ? FXSYS_round(fValue * 2.55f) : FXSYS_round(fValue); } dwColor = ArgbEncode(255, rgb[0], rgb[1], rgb[2]); return TRUE; } else { FDE_LPCCSSCOLORTABLE pColor = FDE_GetCSSColorByName(pszValue, iValueLen); if (pColor != NULL) { dwColor = pColor->dwValue; return TRUE; } } return FALSE; }
void CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CFX_Matrix* pUser2Device) { CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); if (m_pList) { CFX_FloatRect rcPlate = m_pList->GetPlateRect(); CFX_FloatRect rcList = GetListRect(); CFX_FloatRect rcClient = GetClientRect(); for (int32_t i = 0, sz = m_pList->GetCount(); i < sz; i++) { CFX_FloatRect rcItem = m_pList->GetItemRect(i); if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) continue; CFX_FloatPoint ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); if (IFX_Edit* pEdit = m_pList->GetItemEdit(i)) { CFX_FloatRect rcContent = pEdit->GetContentRect(); if (rcContent.Width() > rcClient.Width()) rcItem.Intersect(rcList); else rcItem.Intersect(rcClient); } if (m_pList->IsItemSelected(i)) { CFX_SystemHandler* pSysHandler = GetSystemHandler(); if (pSysHandler && pSysHandler->IsSelectionImplemented()) { IFX_Edit::DrawEdit( pDevice, pUser2Device, m_pList->GetItemEdit(i), CPWL_Utils::PWLColorToFXColor(GetTextColor()), CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), rcList, ptOffset, nullptr, pSysHandler, m_pFormFiller); pSysHandler->OutputSelectedRect(m_pFormFiller, rcItem); } else { CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, ArgbEncode(255, 0, 51, 113)); IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), ArgbEncode(255, 255, 255, 255), 0, rcList, ptOffset, nullptr, pSysHandler, m_pFormFiller); } } else { CFX_SystemHandler* pSysHandler = GetSystemHandler(); IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), CPWL_Utils::PWLColorToFXColor(GetTextColor()), CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), rcList, ptOffset, nullptr, pSysHandler, nullptr); } } } }
FX_ARGB CPDF_RenderStatus::GetStrokeArgb(const CPDF_PageObject* pObj) const { CPDF_ColorStateData* pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)pObj->m_ColorState; if (m_pType3Char && (!m_pType3Char->m_bColored || (m_pType3Char->m_bColored && (!pColorData || pColorData->m_StrokeColor.IsNull())))) { return m_T3FillColor; } if (!pColorData || pColorData->m_StrokeColor.IsNull()) { pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*) m_InitialStates.m_ColorState; } FX_COLORREF rgb = pColorData->m_StrokeRGB; if (rgb == (FX_DWORD)-1) { return 0; } const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState; int alpha; if (pGeneralData) { alpha = (int32_t)(pGeneralData->m_StrokeAlpha * 255); if (pGeneralData->m_pTR) { if (!pGeneralData->m_pTransferFunc) { ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = GetTransferFunc(pGeneralData->m_pTR); } if (pGeneralData->m_pTransferFunc) { rgb = pGeneralData->m_pTransferFunc->TranslateColor(rgb); } } } else { alpha = 255; } return m_Options.TranslateColor(ArgbEncode(alpha, rgb)); }
FX_ARGB CPDF_RenderStatus::GetStrokeArgb(CPDF_PageObject* pObj) const { const CPDF_ColorStateData* pColorData = pObj->m_ColorState.GetObject(); if (m_pType3Char && (!m_pType3Char->m_bColored || (m_pType3Char->m_bColored && (!pColorData || pColorData->m_StrokeColor.IsNull())))) { return m_T3FillColor; } if (!pColorData || pColorData->m_StrokeColor.IsNull()) { pColorData = m_InitialStates.m_ColorState.GetObject(); } FX_COLORREF rgb = pColorData->m_StrokeRGB; if (rgb == (uint32_t)-1) { return 0; } int32_t alpha = static_cast<int32_t>(pObj->m_GeneralState.GetStrokeAlpha() * 255); // not rounded. if (pObj->m_GeneralState.GetTR()) { if (!pObj->m_GeneralState.GetTransferFunc()) { pObj->m_GeneralState.SetTransferFunc( GetTransferFunc(pObj->m_GeneralState.GetTR())); } if (pObj->m_GeneralState.GetTransferFunc()) rgb = pObj->m_GeneralState.GetTransferFunc()->TranslateColor(rgb); } return m_Options.TranslateColor(ArgbEncode(alpha, rgb)); }
void CPWL_Caret::DrawThisAppearance(CFX_RenderDevice* pDevice, CFX_Matrix* pUser2Device) { if (IsVisible() && m_bFlash) { CFX_FloatRect rcRect = GetCaretRect(); CFX_FloatRect rcClip = GetClipRect(); CFX_PathData path; path.SetPointCount(2); FX_FLOAT fCaretX = rcRect.left + m_fWidth * 0.5f; FX_FLOAT fCaretTop = rcRect.top; FX_FLOAT fCaretBottom = rcRect.bottom; if (!rcClip.IsEmpty()) { rcRect.Intersect(rcClip); if (!rcRect.IsEmpty()) { fCaretTop = rcRect.top; fCaretBottom = rcRect.bottom; path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO); path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO); } else { return; } } else { path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO); path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO); } CFX_GraphStateData gsd; gsd.m_LineWidth = m_fWidth; pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255, 0, 0, 0), FXFILL_ALTERNATE); } }
void CFWL_ScrollBarTP::DrawTrack(CFX_Graphics* pGraphics, const CFX_RectF* pRect, FX_BOOL bVert, FWLTHEME_STATE eState, FX_BOOL bLowerTrack, CFX_Matrix* pMatrix) { if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disabale) { return; } pGraphics->SaveGraphState(); CFX_Color colorLine(ArgbEncode(255, 238, 237, 229)); CFX_Path path; path.Create(); FX_FLOAT fRight = pRect->right(); FX_FLOAT fBottom = pRect->bottom(); if (bVert) { path.AddRectangle(pRect->left, pRect->top, 1, pRect->height); path.AddRectangle(fRight - 1, pRect->top, 1, pRect->height); } else { path.AddRectangle(pRect->left, pRect->top, pRect->width, 1); path.AddRectangle(pRect->left, fBottom - 1, pRect->width, 1); } pGraphics->SetFillColor(&colorLine); pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); path.Clear(); path.AddRectangle(pRect->left + 1, pRect->top, pRect->width - 2, pRect->height); FX_FLOAT x1 = bVert ? pRect->left + 1 : pRect->left; FX_FLOAT y1 = bVert ? pRect->top : pRect->top + 1; FX_FLOAT x2 = bVert ? fRight - 1 : pRect->left; FX_FLOAT y2 = bVert ? pRect->top : fBottom - 1; pGraphics->RestoreGraphState(); DrawAxialShading(pGraphics, x1, y1, x2, y2, m_pThemeData->clrTrackBKStart, m_pThemeData->clrTrackBKEnd, &path, FXFILL_WINDING, pMatrix); }
FX_ARGB CPDF_RenderStatus::GetFillArgb(CPDF_PageObject* pObj, FX_BOOL bType3) const { const CPDF_ColorState* pColorState = &pObj->m_ColorState; if (m_pType3Char && !bType3 && (!m_pType3Char->m_bColored || (m_pType3Char->m_bColored && (!*pColorState || pColorState->GetFillColor()->IsNull())))) { return m_T3FillColor; } if (!*pColorState || pColorState->GetFillColor()->IsNull()) pColorState = &m_InitialStates.m_ColorState; FX_COLORREF rgb = pColorState->GetFillRGB(); if (rgb == (uint32_t)-1) return 0; int32_t alpha = static_cast<int32_t>((pObj->m_GeneralState.GetFillAlpha() * 255)); if (pObj->m_GeneralState.GetTR()) { if (!pObj->m_GeneralState.GetTransferFunc()) { pObj->m_GeneralState.SetTransferFunc( GetTransferFunc(pObj->m_GeneralState.GetTR())); } if (pObj->m_GeneralState.GetTransferFunc()) rgb = pObj->m_GeneralState.GetTransferFunc()->TranslateColor(rgb); } return m_Options.TranslateColor(ArgbEncode(alpha, rgb)); }
void CFWL_CheckBoxTP::DrawSign(IFWL_Widget* pWidget, CFX_Graphics* pGraphics, const CFX_RectF* pRtBox, uint32_t dwStates, CFX_Matrix* pMatrix) { CFX_RectF rtSign(*pRtBox); rtSign.Deflate(kSignMargin, kSignMargin); uint32_t dwColor = m_pThemeData->clrSignCheck; bool bCheck = true; if ((dwStates & CFWL_PartState_Disabled) && (dwStates & CFWL_PartState_Checked)) { dwColor = m_pThemeData->clrSignBorderDisable; } else if (dwStates & CFWL_PartState_Neutral) { if (dwStates & CFWL_PartState_Hovered) { dwColor = m_pThemeData->clrSignNeutralHover; } else if (dwStates & CFWL_PartState_Pressed) { dwColor = m_pThemeData->clrSignNeutralPressed; } else if (dwStates & CFWL_PartState_Disabled) { dwColor = m_pThemeData->clrSignBorderDisable; } else { dwColor = m_pThemeData->clrSignNeutralNormal; } bCheck = false; } if (bCheck) { uint32_t dwStyle = pWidget->GetStylesEx(); switch (dwStyle & FWL_STYLEEXT_CKB_SignShapeMask) { case FWL_STYLEEXT_CKB_SignShapeCheck: { DrawSignCheck(pGraphics, &rtSign, dwColor, pMatrix); break; } case FWL_STYLEEXT_CKB_SignShapeCircle: { rtSign.Deflate(1, 1); DrawSignCircle(pGraphics, &rtSign, dwColor, pMatrix); break; } case FWL_STYLEEXT_CKB_SignShapeCross: { DrawSignCross(pGraphics, &rtSign, dwColor, pMatrix); break; } case FWL_STYLEEXT_CKB_SignShapeDiamond: { DrawSignDiamond(pGraphics, &rtSign, dwColor, pMatrix); break; } case FWL_STYLEEXT_CKB_SignShapeSquare: { DrawSignSquare(pGraphics, &rtSign, dwColor, pMatrix); break; } case FWL_STYLEEXT_CKB_SignShapeStar: { DrawSignStar(pGraphics, &rtSign, dwColor, pMatrix); break; } } } else { FillSoildRect(pGraphics, ArgbEncode(255, 33, 161, 33), &rtSign, pMatrix); } }
void CFWL_FormTP::TransModeColor(FX_ARGB clrFore, FX_ARGB& clrBack) { int32_t iAlfaF, iRF, iGF, iBF; int32_t iAlfaB, iRB, iGB, iBB; ArgbDecode(clrFore, iAlfaF, iRF, iGF, iBF); ArgbDecode(clrBack, iAlfaB, iRB, iGB, iBB); clrBack = ArgbEncode(0xff, iRB + (iRF - iRB) * iAlfaF / 255, iGB + (iGF - iGB) * iAlfaF / 255, iBB + (iBF - iBB) * iAlfaF / 255); }
bool CPDF_ImageRenderer::StartBitmapAlpha() { if (m_pDIBSource->IsOpaqueImage()) { CFX_PathData path; path.AppendRect(0, 0, 1, 1); path.Transform(&m_ImageMatrix); uint32_t fill_color = ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha); m_pRenderStatus->m_pDevice->DrawPath(&path, nullptr, nullptr, fill_color, 0, FXFILL_WINDING); return false; } CFX_MaybeOwned<CFX_DIBSource> pAlphaMask; if (m_pDIBSource->IsAlphaMask()) pAlphaMask = const_cast<CFX_DIBSource*>(m_pDIBSource); else pAlphaMask = m_pDIBSource->CloneAlphaMask(); if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || FXSYS_fabs(m_ImageMatrix.c) >= 0.5f) { int left; int top; std::unique_ptr<CFX_DIBitmap> pTransformed = pAlphaMask->TransformTo(&m_ImageMatrix, left, top); if (!pTransformed) return true; m_pRenderStatus->m_pDevice->SetBitMask( pTransformed.get(), left, top, ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha)); return false; } CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect(); FX_RECT image_rect = image_rect_f.GetOuterRect(); int dest_width = m_ImageMatrix.a > 0 ? image_rect.Width() : -image_rect.Width(); int dest_height = m_ImageMatrix.d > 0 ? -image_rect.Height() : image_rect.Height(); int left = dest_width > 0 ? image_rect.left : image_rect.right; int top = dest_height > 0 ? image_rect.top : image_rect.bottom; m_pRenderStatus->m_pDevice->StretchBitMask( pAlphaMask.Get(), left, top, dest_width, dest_height, ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha)); return false; }
void CFWL_ComboBoxTP::DrawStrethHandler(CFWL_ThemeBackground* pParams, uint32_t dwStates, CFX_Matrix* pMatrix) { CFX_Path path; path.AddRectangle(pParams->m_rtPart.left, pParams->m_rtPart.top, pParams->m_rtPart.width - 1, pParams->m_rtPart.height); CFX_Color cr(ArgbEncode(0xff, 0xff, 0, 0)); pParams->m_pGraphics->SetFillColor(&cr); pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix); }
FX_ARGB CPDFXFA_DocEnvironment::GetHighlightColor(CXFA_FFDoc* hDoc) { if (hDoc != m_pContext->GetXFADoc() || !m_pContext->GetFormFillEnv()) return 0; CPDFSDK_InterForm* pInterForm = m_pContext->GetFormFillEnv()->GetInterForm(); if (!pInterForm) return 0; return ArgbEncode(pInterForm->GetHighlightAlpha(), pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA)); }
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); }
void CPDF_DefaultAppearance::GetColor(FX_ARGB& color, int& iColorType, PaintOperation nOperation) { color = 0; iColorType = COLORTYPE_TRANSPARENT; if (m_csDA.IsEmpty()) return; CPDF_SimpleParser syntax(m_csDA.AsStringC()); if (syntax.FindTagParamFromStart( (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) { iColorType = COLORTYPE_GRAY; FX_FLOAT g = FX_atof(syntax.GetWord()) * 255 + 0.5f; color = ArgbEncode(255, (int)g, (int)g, (int)g); return; } if (syntax.FindTagParamFromStart( (nOperation == PaintOperation::STROKE ? "RG" : "rg"), 3)) { iColorType = COLORTYPE_RGB; FX_FLOAT r = FX_atof(syntax.GetWord()) * 255 + 0.5f; FX_FLOAT g = FX_atof(syntax.GetWord()) * 255 + 0.5f; FX_FLOAT b = FX_atof(syntax.GetWord()) * 255 + 0.5f; color = ArgbEncode(255, (int)r, (int)g, (int)b); return; } if (syntax.FindTagParamFromStart( (nOperation == PaintOperation::STROKE ? "K" : "k"), 4)) { iColorType = COLORTYPE_CMYK; FX_FLOAT c = FX_atof(syntax.GetWord()); FX_FLOAT m = FX_atof(syntax.GetWord()); FX_FLOAT y = FX_atof(syntax.GetWord()); FX_FLOAT k = FX_atof(syntax.GetWord()); FX_FLOAT r = 1.0f - std::min(1.0f, c + k); FX_FLOAT g = 1.0f - std::min(1.0f, m + k); FX_FLOAT b = 1.0f - std::min(1.0f, y + k); color = ArgbEncode(255, (int)(r * 255 + 0.5f), (int)(g * 255 + 0.5f), (int)(b * 255 + 0.5f)); } }
void CPDF_DefaultAppearance::GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation) { color = 0; iColorType = COLORTYPE_TRANSPARENT; if (m_csDA.IsEmpty()) { return; } CPDF_SimpleParser syntax(m_csDA); if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) { iColorType = COLORTYPE_GRAY; FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f; color = ArgbEncode(255, (int)g, (int)g, (int)g); return; } syntax.SetPos(0); if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) { iColorType = COLORTYPE_RGB; FX_FLOAT r = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f; FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f; FX_FLOAT b = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f; color = ArgbEncode(255, (int)r, (int)g, (int)b); return; } syntax.SetPos(0); if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) { iColorType = COLORTYPE_CMYK; FX_FLOAT c = FX_atof((CFX_ByteString)syntax.GetWord()); FX_FLOAT m = FX_atof((CFX_ByteString)syntax.GetWord()); FX_FLOAT y = FX_atof((CFX_ByteString)syntax.GetWord()); FX_FLOAT k = FX_atof((CFX_ByteString)syntax.GetWord()); FX_FLOAT r = 1.0f - std::min(1.0f, c + k); FX_FLOAT g = 1.0f - std::min(1.0f, m + k); FX_FLOAT b = 1.0f - std::min(1.0f, y + k); color = ArgbEncode(255, (int)(r * 255 + 0.5f), (int)(g * 255 + 0.5f), (int)(b * 255 + 0.5f)); } }
void CFWL_CaretTP::DrawCaretBK(CFX_Graphics* pGraphics, FX_DWORD dwStates, const CFX_RectF* pRect, CFX_Color* crFill, CFX_Matrix* pMatrix) { CFX_Path path; path.Create(); CFX_Color crFilltemp; crFill ? crFilltemp = *crFill : crFilltemp = ArgbEncode(255, 0, 0, 0); CFX_RectF rect = *pRect; path.AddRectangle(rect.left, rect.top, rect.width, rect.height); pGraphics->SetFillColor(&crFilltemp); pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); }
FX_ARGB CPDF_RenderOptions::TranslateColor(FX_ARGB argb) const { if (ColorModeIs(kNormal)) return argb; if (ColorModeIs(kAlpha)) return argb; int a; int r; int g; int b; std::tie(a, r, g, b) = ArgbDecode(argb); int gray = FXRGB2GRAY(r, g, b); return ArgbEncode(a, gray, gray, gray); }
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); } }
FX_BOOL CFWL_ListBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { if (!pParams) return FALSE; switch (pParams->m_iPart) { case FWL_PART_LTB_Border: { DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); break; } case FWL_PART_LTB_Edge: { DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), &pParams->m_rtPart, &pParams->m_matrix); break; } case FWL_PART_LTB_Background: { FillSoildRect(pParams->m_pGraphics, ArgbEncode(255, 255, 255, 255), &pParams->m_rtPart, &pParams->m_matrix); if (pParams->m_pData) { FillSoildRect(pParams->m_pGraphics, FWLTHEME_COLOR_Background, (CFX_RectF*)pParams->m_pData, &pParams->m_matrix); } break; } case FWL_PART_LTB_ListItem: { DrawListBoxItem(pParams->m_pGraphics, pParams->m_dwStates, &pParams->m_rtPart, pParams->m_pData, &pParams->m_matrix); break; } case FWL_PART_LTB_Icon: { pParams->m_pGraphics->StretchImage(pParams->m_pImage, pParams->m_rtPart, &pParams->m_matrix); break; } case FWL_PART_LTB_Check: { FX_DWORD color = 0xFF000000; if (pParams->m_dwStates == FWL_PARTSTATE_LTB_Checked) { color = 0xFFFF0000; } else if (pParams->m_dwStates == FWL_PARTSTATE_LTB_UnChecked) { color = 0xFF0000FF; } FillSoildRect(pParams->m_pGraphics, color, &pParams->m_rtPart, &pParams->m_matrix); } default: {} } return TRUE; }
void CFWL_WidgetTP::DrawBorder(CFX_Graphics* pGraphics, const CFX_RectF* pRect, CFX_Matrix* pMatrix) { if (!pGraphics) return; if (!pRect) return; CFX_Path path; path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2, pRect->height - 2); pGraphics->SaveGraphState(); CFX_Color crFill(ArgbEncode(255, 0, 0, 0)); pGraphics->SetFillColor(&crFill); pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); pGraphics->RestoreGraphState(); }
void CFWL_ComboBoxTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, FX_DWORD dwStates, CFX_Matrix* pMatrix) { FX_BOOL bPressed = ((pParams->m_dwStates & FWL_CMBPARTSTATE_Pressed) == FWL_CMBPARTSTATE_Pressed); FX_FLOAT fWidth = bPressed ? 1.0f : 2.0f; FWLTHEME_EDGE eType = bPressed ? FWLTHEME_EDGE_Flat : FWLTHEME_EDGE_Raised; Draw3DRect(pParams->m_pGraphics, eType, fWidth, &pParams->m_rtPart, FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2, FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix); CFX_Path path; path.Create(); path.AddRectangle(pParams->m_rtPart.left + fWidth, pParams->m_rtPart.top + fWidth, pParams->m_rtPart.width - 2 * fWidth, pParams->m_rtPart.height - 2 * fWidth); pParams->m_pGraphics->SaveGraphState(); CFX_Color crFill(FWLTHEME_COLOR_Background); pParams->m_pGraphics->SetFillColor(&crFill); pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix); pParams->m_pGraphics->RestoreGraphState(); FX_ARGB argbFill = ArgbEncode(255, 77, 97, 133); switch (pParams->m_dwStates & 0x03) { case FWL_CMBPARTSTATE_Normal: { } case FWL_CMBPARTSTATE_Hovered: { } case FWL_CMBPARTSTATE_Pressed: { argbFill = 0xFF000000; break; } case FWL_CMBPARTSTATE_Disabled: { argbFill = 0xFFF0F0F0; break; } } DrawArrow(pParams->m_pGraphics, &pParams->m_rtPart, FWLTHEME_DIRECTION_Down, argbFill, bPressed, &pParams->m_matrix); }
void CFWL_ScrollBarTP::SetThemeData(uint32_t dwID) { m_pThemeData->clrPawColorLight[3] = ArgbEncode(0xff, 208, 223, 172); m_pThemeData->clrPawColorDark[3] = ArgbEncode(0xff, 140, 157, 115); m_pThemeData->clrBtnBK[3][0] = ArgbEncode(0xff, 164, 180, 139); m_pThemeData->clrBtnBK[3][1] = ArgbEncode(0xff, 141, 157, 115); m_pThemeData->clrBtnBorder[3] = ArgbEncode(0xff, 236, 233, 216); if (dwID) { m_pThemeData->clrPawColorLight[0] = ArgbEncode(0xff, 208, 223, 172); m_pThemeData->clrPawColorDark[0] = ArgbEncode(0xff, 140, 157, 115); m_pThemeData->clrBtnBK[0][0] = ArgbEncode(0xff, 162, 179, 141); m_pThemeData->clrBtnBK[0][1] = ArgbEncode(0xff, 149, 167, 117); m_pThemeData->clrBtnBorder[0] = ArgbEncode(0xff, 142, 153, 125); m_pThemeData->clrPawColorLight[1] = ArgbEncode(0xff, 235, 245, 212); m_pThemeData->clrPawColorDark[1] = ArgbEncode(0xff, 182, 198, 142); m_pThemeData->clrBtnBK[1][0] = ArgbEncode(0xff, 200, 213, 170); m_pThemeData->clrBtnBK[1][1] = ArgbEncode(0xff, 195, 208, 150); m_pThemeData->clrBtnBorder[1] = ArgbEncode(0xff, 189, 203, 150); m_pThemeData->clrPawColorLight[2] = ArgbEncode(0xff, 208, 223, 172); m_pThemeData->clrPawColorDark[2] = ArgbEncode(0xff, 140, 157, 115); m_pThemeData->clrBtnBK[2][0] = ArgbEncode(0xff, 164, 180, 139); m_pThemeData->clrBtnBK[2][1] = ArgbEncode(0xff, 141, 157, 115); m_pThemeData->clrBtnBorder[2] = ArgbEncode(0xff, 128, 146, 102); m_pThemeData->clrTrackBKStart = ArgbEncode(0xff, 243, 241, 236); m_pThemeData->clrTrackBKEnd = ArgbEncode(0xff, 254, 254, 251); } else { m_pThemeData->clrPawColorLight[0] = ArgbEncode(0xff, 238, 244, 254); m_pThemeData->clrPawColorDark[0] = ArgbEncode(0xff, 140, 176, 248); m_pThemeData->clrBtnBK[0][0] = ArgbEncode(0xff, 197, 213, 252); m_pThemeData->clrBtnBK[0][1] = ArgbEncode(0xff, 182, 205, 251); m_pThemeData->clrBtnBorder[0] = ArgbEncode(0xff, 148, 176, 221); m_pThemeData->clrPawColorLight[1] = ArgbEncode(0xff, 252, 253, 255); m_pThemeData->clrPawColorDark[1] = ArgbEncode(0xff, 156, 197, 255); m_pThemeData->clrBtnBK[1][0] = ArgbEncode(0xff, 216, 232, 255); m_pThemeData->clrBtnBK[1][1] = ArgbEncode(0xff, 204, 225, 255); m_pThemeData->clrBtnBorder[1] = ArgbEncode(0xff, 218, 230, 254); m_pThemeData->clrPawColorLight[2] = ArgbEncode(0xff, 207, 221, 253); m_pThemeData->clrPawColorDark[2] = ArgbEncode(0xff, 131, 158, 216); m_pThemeData->clrBtnBK[2][0] = ArgbEncode(0xff, 167, 190, 245); m_pThemeData->clrBtnBK[2][1] = ArgbEncode(0xff, 146, 179, 249); m_pThemeData->clrBtnBorder[2] = ArgbEncode(0xff, 124, 159, 211); m_pThemeData->clrTrackBKStart = ArgbEncode(0xff, 243, 241, 236); m_pThemeData->clrTrackBKEnd = ArgbEncode(0xff, 254, 254, 251); } }
void IFX_Edit::GenerateRichPageObjects( CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) { FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0); FX_COLORREF crOld = crCurText; CFX_ByteTextBuf sTextBuf; CPVT_WordProps wp; CPDF_Point ptBT(0.0f, 0.0f); ObjArray.RemoveAll(); if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) { if (pRange) pIterator->SetAt(pRange->BeginPos); else pIterator->SetAt(0); CPVT_WordPlace oldplace; while (pIterator->NextWord()) { CPVT_WordPlace place = pIterator->GetAt(); if (pRange && place.WordCmp(pRange->EndPos) > 0) break; CPVT_Word word; if (pIterator->GetWord(word)) { word.WordProps.fFontSize = word.fFontSize; crCurText = ArgbEncode(255, word.WordProps.dwWordColor); if (place.LineCmp(oldplace) != 0 || word.WordProps.fCharSpace > 0.0f || word.WordProps.nHorzScale != 100 || FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 || crOld != crCurText) { if (sTextBuf.GetLength() > 0) { ObjArray.Add(AddTextObjToPageObjects( pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, wp.fCharSpace, wp.nHorzScale, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), sTextBuf.GetByteString())); sTextBuf.Clear(); } wp = word.WordProps; ptBT = word.ptWord; crOld = crCurText; } sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex, word.Word, 0); if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) { /* AddLineToPageObjects(pPageObjects, crCurText, CPDF_Point(word.ptWord.x, word.ptWord.y + word.fDescent * 0.4f), CPDF_Point(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent * 0.4f)); */ CPDF_Rect rcUnderline = GetUnderLineRect(word); rcUnderline.left += ptOffset.x; rcUnderline.right += ptOffset.x; rcUnderline.top += ptOffset.y; rcUnderline.bottom += ptOffset.y; AddRectToPageObjects(pPageObjects, crCurText, rcUnderline); } if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) { CPDF_Rect rcCrossout = GetCrossoutRect(word); rcCrossout.left += ptOffset.x; rcCrossout.right += ptOffset.x; rcCrossout.top += ptOffset.y; rcCrossout.bottom += ptOffset.y; AddRectToPageObjects(pPageObjects, crCurText, rcCrossout); } oldplace = place; } } if (sTextBuf.GetLength() > 0) { ObjArray.Add(AddTextObjToPageObjects( pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, wp.fCharSpace, wp.nHorzScale, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), sTextBuf.GetByteString())); } } } }
void IFX_Edit::DrawRichEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange) { // FX_FLOAT fFontSize = pEdit->GetFontSize(); CPVT_WordRange wrSelect = pEdit->GetSelectWordRange(); FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0); FX_COLORREF crOld = crCurText; FX_BOOL bSelect = FALSE; const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255); const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113); CFX_ByteTextBuf sTextBuf; CPVT_WordProps wp; CPDF_Point ptBT(0.0f, 0.0f); pDevice->SaveState(); if (!rcClip.IsEmpty()) { CPDF_Rect rcTemp = rcClip; pUser2Device->TransformRect(rcTemp); FX_RECT rcDevClip; rcDevClip.left = (int32_t)rcTemp.left; rcDevClip.right = (int32_t)rcTemp.right; rcDevClip.top = (int32_t)rcTemp.top; rcDevClip.bottom = (int32_t)rcTemp.bottom; pDevice->SetClip_Rect(&rcDevClip); } if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) { if (pRange) pIterator->SetAt(pRange->BeginPos); else pIterator->SetAt(0); CPVT_WordPlace oldplace; while (pIterator->NextWord()) { CPVT_WordPlace place = pIterator->GetAt(); if (pRange && place.WordCmp(pRange->EndPos) > 0) break; CPVT_Word word; if (pIterator->GetWord(word)) { word.WordProps.fFontSize = word.fFontSize; crCurText = ArgbEncode(255, word.WordProps.dwWordColor); if (wrSelect.IsExist()) { bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && place.WordCmp(wrSelect.EndPos) <= 0; if (bSelect) { crCurText = crWhite; } } if (bSelect) { CPVT_Line line; pIterator->GetLine(line); CFX_PathData pathSelBK; pathSelBK.AppendRect(word.ptWord.x + ptOffset.x, line.ptLine.y + line.fLineDescent + ptOffset.y, word.ptWord.x + word.fWidth + ptOffset.x, line.ptLine.y + line.fLineAscent + ptOffset.y); pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0, FXFILL_WINDING); } if (place.LineCmp(oldplace) != 0 || word.WordProps.fCharSpace > 0.0f || word.WordProps.nHorzScale != 100 || FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 || crOld != crCurText) { if (sTextBuf.GetLength() > 0) { DrawTextString( pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, pUser2Device, sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale); sTextBuf.Clear(); } wp = word.WordProps; ptBT = word.ptWord; crOld = crCurText; } sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex, word.Word, 0); if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) { CFX_PathData pathUnderline; CPDF_Rect rcUnderline = GetUnderLineRect(word); pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom, rcUnderline.right, rcUnderline.top); pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, crCurText, 0, FXFILL_WINDING); } if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) { CFX_PathData pathCrossout; CPDF_Rect rcCrossout = GetCrossoutRect(word); pathCrossout.AppendRect(rcCrossout.left, rcCrossout.bottom, rcCrossout.right, rcCrossout.top); pDevice->DrawPath(&pathCrossout, pUser2Device, NULL, crCurText, 0, FXFILL_WINDING); } oldplace = place; } } if (sTextBuf.GetLength() > 0) { DrawTextString( pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, pUser2Device, sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale); } } } pDevice->RestoreState(); }
void IFX_Edit::DrawEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF crTextFill, FX_COLORREF crTextStroke, const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, IFX_SystemHandler* pSystemHandler, void* pFFLData) { FX_BOOL bContinuous = pEdit->GetCharArray() == 0; if (pEdit->GetCharSpace() > 0.0f) bContinuous = FALSE; FX_WORD SubWord = pEdit->GetPasswordChar(); FX_FLOAT fFontSize = pEdit->GetFontSize(); CPVT_WordRange wrSelect = pEdit->GetSelectWordRange(); int32_t nHorzScale = pEdit->GetHorzScale(); FX_COLORREF crCurFill = crTextFill; FX_COLORREF crOldFill = crCurFill; FX_BOOL bSelect = FALSE; const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255); const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113); CFX_ByteTextBuf sTextBuf; int32_t nFontIndex = -1; CPDF_Point ptBT(0.0f, 0.0f); pDevice->SaveState(); if (!rcClip.IsEmpty()) { CPDF_Rect rcTemp = rcClip; pUser2Device->TransformRect(rcTemp); FX_RECT rcDevClip; rcDevClip.left = (int32_t)rcTemp.left; rcDevClip.right = (int32_t)rcTemp.right; rcDevClip.top = (int32_t)rcTemp.top; rcDevClip.bottom = (int32_t)rcTemp.bottom; pDevice->SetClip_Rect(&rcDevClip); } if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) { if (pRange) pIterator->SetAt(pRange->BeginPos); else pIterator->SetAt(0); CPVT_WordPlace oldplace; while (pIterator->NextWord()) { CPVT_WordPlace place = pIterator->GetAt(); if (pRange && place.WordCmp(pRange->EndPos) > 0) break; if (wrSelect.IsExist()) { bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && place.WordCmp(wrSelect.EndPos) <= 0; if (bSelect) { crCurFill = crWhite; } else { crCurFill = crTextFill; } } if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) { crCurFill = crTextFill; crOldFill = crCurFill; } CPVT_Word word; if (pIterator->GetWord(word)) { if (bSelect) { CPVT_Line line; pIterator->GetLine(line); if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) { CPDF_Rect rc(word.ptWord.x, line.ptLine.y + line.fLineDescent, word.ptWord.x + word.fWidth, line.ptLine.y + line.fLineAscent); rc.Intersect(rcClip); // CFX_Edit* pEt = (CFX_Edit*)pEdit; // CPDF_Rect rcEdit = pEt->VTToEdit(rc); pSystemHandler->OutputSelectedRect(pFFLData, rc); } else { CFX_PathData pathSelBK; pathSelBK.AppendRect(word.ptWord.x, line.ptLine.y + line.fLineDescent, word.ptWord.x + word.fWidth, line.ptLine.y + line.fLineAscent); pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0, FXFILL_WINDING); } } if (bContinuous) { if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex || crOldFill != crCurFill) { if (sTextBuf.GetLength() > 0) { DrawTextString(pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device, sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale); sTextBuf.Clear(); } nFontIndex = word.nFontIndex; ptBT = word.ptWord; crOldFill = crCurFill; } sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord); } else { DrawTextString( pDevice, CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y), pFontMap->GetPDFFont(word.nFontIndex), fFontSize, pUser2Device, GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord), crCurFill, crTextStroke, nHorzScale); } oldplace = place; } } if (sTextBuf.GetLength() > 0) { DrawTextString( pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device, sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale); } } } pDevice->RestoreState(); }