CPVT_FloatRect CPDF_VariableText::OutToIn(const CFX_FloatRect& rect) const { CFX_FloatPoint ptLeftTop = OutToIn(CFX_FloatPoint(rect.left, rect.top)); CFX_FloatPoint ptRightBottom = OutToIn(CFX_FloatPoint(rect.right, rect.bottom)); return CPVT_FloatRect(ptLeftTop.x, ptLeftTop.y, ptRightBottom.x, ptRightBottom.y); }
void CPWL_Caret::SetCaret(FX_BOOL bVisible, const CFX_FloatPoint& ptHead, const CFX_FloatPoint& ptFoot) { if (bVisible) { if (IsVisible()) { if (m_ptHead != ptHead || m_ptFoot != ptFoot) { m_ptHead = ptHead; m_ptFoot = ptFoot; m_bFlash = TRUE; Move(m_rcInvalid, FALSE, TRUE); } } else { m_ptHead = ptHead; m_ptFoot = ptFoot; EndTimer(); BeginTimer(PWL_CARET_FLASHINTERVAL); CPWL_Wnd::SetVisible(TRUE); m_bFlash = TRUE; Move(m_rcInvalid, FALSE, TRUE); } } else { m_ptHead = CFX_FloatPoint(); m_ptFoot = CFX_FloatPoint(); m_bFlash = FALSE; if (IsVisible()) { EndTimer(); CPWL_Wnd::SetVisible(FALSE); } } }
void CPWL_EditCtrl::GetTextRange(const CFX_FloatRect& rect, int32_t& nStartChar, int32_t& nEndChar) const { nStartChar = m_pEdit->WordPlaceToWordIndex( m_pEdit->SearchWordPlace(CFX_FloatPoint(rect.left, rect.top))); nEndChar = m_pEdit->WordPlaceToWordIndex( m_pEdit->SearchWordPlace(CFX_FloatPoint(rect.right, rect.bottom))); }
FX_BOOL CPDF_VariableText::Iterator::GetWord(CPVT_Word& word) const { word.WordPlace = m_CurPos; if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) { if (pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) { if (CPVT_WordInfo* pWord = pSection->m_WordArray.GetAt(m_CurPos.nWordIndex)) { word.Word = pWord->Word; word.nCharset = pWord->nCharset; word.fWidth = m_pVT->GetWordWidth(*pWord); word.ptWord = m_pVT->InToOut( CFX_FloatPoint(pWord->fWordX + pSection->m_SecInfo.rcSection.left, pWord->fWordY + pSection->m_SecInfo.rcSection.top)); word.fAscent = m_pVT->GetWordAscent(*pWord); word.fDescent = m_pVT->GetWordDescent(*pWord); if (pWord->pWordProps) word.WordProps = *pWord->pWordProps; word.nFontIndex = m_pVT->GetWordFontIndex(*pWord); word.fFontSize = m_pVT->GetWordFontSize(*pWord); return TRUE; } } } return FALSE; }
FX_BOOL CPDF_VariableText::Iterator::GetLine(CPVT_Line& line) const { ASSERT(m_pVT); line.lineplace = CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex, -1); if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) { if (CLine* pLine = pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) { line.ptLine = m_pVT->InToOut(CFX_FloatPoint( pLine->m_LineInfo.fLineX + pSection->m_SecInfo.rcSection.left, pLine->m_LineInfo.fLineY + pSection->m_SecInfo.rcSection.top)); line.fLineWidth = pLine->m_LineInfo.fLineWidth; line.fLineAscent = pLine->m_LineInfo.fLineAscent; line.fLineDescent = pLine->m_LineInfo.fLineDescent; line.lineEnd = pLine->GetEndWordPlace(); return TRUE; } } return FALSE; }
CPVT_WordPlace CPDF_VariableText::SearchWordPlace( const CFX_FloatPoint& point) const { CFX_FloatPoint pt = OutToIn(point); CPVT_WordPlace place = GetBeginWordPlace(); int32_t nLeft = 0; int32_t nRight = m_SectionArray.GetSize() - 1; int32_t nMid = m_SectionArray.GetSize() / 2; FX_BOOL bUp = TRUE; FX_BOOL bDown = TRUE; while (nLeft <= nRight) { if (CSection* pSection = m_SectionArray.GetAt(nMid)) { if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.top)) { bUp = FALSE; } if (IsFloatBigger(pSection->m_SecInfo.rcSection.bottom, pt.y)) { bDown = FALSE; } if (IsFloatSmaller(pt.y, pSection->m_SecInfo.rcSection.top)) { nRight = nMid - 1; nMid = (nLeft + nRight) / 2; continue; } else if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.bottom)) { nLeft = nMid + 1; nMid = (nLeft + nRight) / 2; continue; } else { place = pSection->SearchWordPlace( CFX_FloatPoint(pt.x - pSection->m_SecInfo.rcSection.left, pt.y - pSection->m_SecInfo.rcSection.top)); place.nSecIndex = nMid; return place; } } else { break; } } if (bUp) place = GetBeginWordPlace(); if (bDown) place = GetEndWordPlace(); return place; }
void CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd, uint32_t msg, intptr_t wParam, intptr_t lParam) { CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); 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: { FX_FLOAT fPos = *(FX_FLOAT*)lParam; switch (wParam) { case SBT_VSCROLL: m_pEdit->SetScrollPos( CFX_FloatPoint(m_pEdit->GetScrollPos().x, fPos)); break; } } break; case PNM_SETCARETINFO: { if (PWL_CARET_INFO* pCaretInfo = (PWL_CARET_INFO*)wParam) { SetCaret(pCaretInfo->bVisible, pCaretInfo->ptHead, pCaretInfo->ptFoot); } } break; } }
void CPWL_Label::DrawThisAppearance(CFX_RenderDevice* pDevice, CFX_Matrix* pUser2Device) { CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); GetClientRect(); CFX_FloatRect 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, CFX_FloatPoint(0.0f, 0.0f), pRange, pSysHandler, NULL); }
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: if (m_pList) m_pList->SetScrollPos(CFX_FloatPoint(0, fPos)); break; } break; } }
void CPWL_Label::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { CPWL_Wnd::GetThisAppearanceStream(sAppStream); sAppStream << GetTextAppearanceStream(CFX_FloatPoint(0.0f, 0.0f)); }
void CPWL_Caret::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { GetCaretApp(sAppStream, CFX_FloatPoint(0.0f, 0.0f)); }
CFX_FloatPoint CPDF_VariableText::OutToIn(const CFX_FloatPoint& point) const { return CFX_FloatPoint(point.x - GetBTPoint().x, GetBTPoint().y - point.y); }
CFX_FloatPoint CPDF_VariableText::InToOut(const CFX_FloatPoint& point) const { return CFX_FloatPoint(point.x + GetBTPoint().x, GetBTPoint().y - point.y); }
CFX_FloatPoint CPDF_VariableText::GetETPoint() const { return CFX_FloatPoint(m_rcPlate.right, m_rcPlate.bottom); }
CFX_FloatPoint CPDF_VariableText::GetBTPoint() const { return CFX_FloatPoint(m_rcPlate.left, m_rcPlate.top); }
CFX_FloatPoint CPWL_Wnd::GetCenterPoint() const { CFX_FloatRect rcClient = GetClientRect(); return CFX_FloatPoint((rcClient.left + rcClient.right) * 0.5f, (rcClient.top + rcClient.bottom) * 0.5f); }