void nsTextBoxFrame::PaintTitle(nsIRenderingContext& aRenderingContext, const nsRect& aDirtyRect, nsPoint aPt) { if (mTitle.IsEmpty()) return; nsRect textRect(CalcTextRect(aRenderingContext, aPt)); // Paint the text shadow before doing any foreground stuff const nsStyleText* textStyle = GetStyleText(); if (textStyle->mTextShadow) { // Text shadow happens with the last value being painted at the back, // ie. it is painted first. for (PRUint32 i = textStyle->mTextShadow->Length(); i > 0; --i) { PaintOneShadow(aRenderingContext.ThebesContext(), textRect, textStyle->mTextShadow->ShadowAt(i - 1), GetStyleColor()->mColor, aDirtyRect); } } DrawText(aRenderingContext, textRect, nsnull); }
NS_IMETHODIMP nsTextBoxFrame::DoLayout(nsBoxLayoutState& aBoxLayoutState) { if (mNeedsReflowCallback) { nsIReflowCallback* cb = new nsAsyncAccesskeyUpdate(this); if (cb) { PresContext()->PresShell()->PostReflowCallback(cb); } mNeedsReflowCallback = PR_FALSE; } mState |= NS_STATE_NEED_LAYOUT; nsresult rv = nsLeafBoxFrame::DoLayout(aBoxLayoutState); const nsStyleText* textStyle = GetStyleText(); if (textStyle->mTextShadow) { nsPoint origin(0,0); nsRect textRect = CalcTextRect(*aBoxLayoutState.GetRenderingContext(), origin); nsRect overflowRect(nsLayoutUtils::GetTextShadowRectsUnion(textRect, this)); overflowRect.UnionRect(overflowRect, nsRect(nsPoint(0, 0), GetSize())); FinishAndStoreOverflow(&overflowRect, GetSize()); } return rv; }
int CGTextArea::Justify (const RECT &rcRect) // Justify // // Justify the text and return the height (in pixels) { RECT rcText = CalcTextRect(rcRect); if (!m_sText.IsBlank()) { if (m_pFont == NULL) return 0; if (m_cxJustifyWidth != RectWidth(rcText)) { m_cxJustifyWidth = RectWidth(rcText); m_Lines.DeleteAll(); m_pFont->BreakText(m_sText, m_cxJustifyWidth, &m_Lines, CG16bitFont::SmartQuotes); } return m_rcPadding.top + (m_Lines.GetCount() * m_pFont->GetHeight() + (m_Lines.GetCount() - 1) * m_cyLineSpacing) + m_rcPadding.bottom; } else if (!m_sRTF.IsBlank()) { FormatRTF(rcText); RECT rcBounds; m_RichText.GetBounds(&rcBounds); return m_rcPadding.top + RectHeight(rcBounds) + m_rcPadding.bottom; } else return 0; }
int CGButtonArea::Justify (const RECT &rcRect) // Justify // // Justify the text and return the height (in pixels) { RECT rcText = CalcTextRect(rcRect); // For now, the label is always one line int cyHeight = (m_pLabelFont ? m_pLabelFont->GetHeight() : 0); // Add the height of the description, if we have one if (!m_sDesc.IsBlank() && m_pDescFont) { if (m_cxJustifyWidth != RectWidth(rcText)) { m_cxJustifyWidth = RectWidth(rcText); m_Lines.DeleteAll(); m_pDescFont->BreakText(m_sDesc, m_cxJustifyWidth, &m_Lines, CG16bitFont::SmartQuotes); } cyHeight += (m_Lines.GetCount() * m_pDescFont->GetHeight()); } // Add padding cyHeight += m_rcPadding.top + m_rcPadding.bottom; return cyHeight; }
void CGTextArea::Paint (CG32bitImage &Dest, const RECT &rcRect) // Paint // // Handle paint { RECT rcText = CalcTextRect(rcRect); // Paint the background if (m_iBorderRadius > 0) CGDraw::RoundedRect(Dest, rcRect.left, rcRect.top, RectWidth(rcRect), RectHeight(rcRect), m_iBorderRadius, m_rgbBackColor); else Dest.Fill(rcRect.left, rcRect.top, RectWidth(rcRect), RectHeight(rcRect), m_rgbBackColor); // Paint the editable box if (m_bEditable) { CG32bitPixel rgbBorderColor = CG32bitPixel::Blend(CG32bitPixel(0, 0, 0), m_rgbColor, (BYTE)128); CGDraw::RectOutlineDotted(Dest, rcRect.left, rcRect.top, RectWidth(rcRect), RectHeight(rcRect), rgbBorderColor); } // Paint the content if (!m_sText.IsBlank()) PaintText(Dest, rcText); else PaintRTF(Dest, rcText); }
//--------------------------------------------------------------------- // SetTitle(): //--------------------------------------------------------------------- void WPSHADOW::SetTitle(const char *pszTitle) { // If we have a valid pointer to original object... if (GetOriginalObject()!=NULL) { // Set the new object title to original object. GetOriginalObject()->SetTitle(pszTitle); CalcTextRect(); } }
BOOL CSListCtrl::CalcProgressRect(int nItem, int nSubItem, CRect& rcProgress) { CListSubItemData* pSubItemData = GetSubItemData(nItem, nSubItem); ASSERT(pSubItemData); if(pSubItemData->m_pListPrgsBar == NULL || pSubItemData->m_pListPrgsBar->m_nMaxValue <= 0) { return FALSE; } return CalcTextRect(nItem, nSubItem, rcProgress); }
void CSListCtrl::DrawText(int nItem, int nSubItem, CDC *pDC, BOOL bProgressText) { CString str = GetItemText(nItem, nSubItem); if(str.IsEmpty()) { return; } CRect rcText; if(!CalcTextRect(nItem, nSubItem, rcText)) { return; } COLORREF crText = m_crWindowText, crBkgnd = m_crWindow; GetDrawColors(nItem, nSubItem, crText, crBkgnd); // get text justification UINT nFormat = DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS; if(bProgressText) { nFormat |= DT_CENTER; crText = m_crWindowText; } else { HDITEM hditem; hditem.mask = HDI_FORMAT; m_HeaderCtrl.GetItem(nSubItem, &hditem); int nFmt = hditem.fmt & HDF_JUSTIFYMASK; if (nFmt & HDF_CENTER) nFormat |= DT_CENTER; else if (nFmt & HDF_RIGHT) nFormat |= DT_RIGHT; else nFormat |= DT_LEFT; } int nOldDC = pDC->SaveDC(); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(crText); pDC->SetBkColor(crBkgnd); pDC->DrawText(str, &rcText, nFormat); pDC->RestoreDC(nOldDC); }
LRESULT MainWindow::OnCreate(WPARAM wParam, LPARAM lParam) { SetupMenu(); TimerPtr = SetTimer(ThisWindow, IDT_STR_MOVE, TIMER_ELAPSE, NULL); PAINTSTRUCT ps; HDC hdc = BeginPaint(ThisWindow, &ps); GetTextExtentPoint(hdc, Title, lstrlen(Title), &TextSize); EndPaint(ThisWindow, &ps); CurTextOffset = -TextSize.cx; CalcTextRect(); return 0; }
int CTabItem_Normal::GetDesireLength(void) { if (IsDynDesireLength()) { CRect rtCalc; CalcTextRect(rtCalc, m_strCaption, _T("宋体"), 14); int iIconWidth; if (m_bHasIcon) iIconWidth = 0; else iIconWidth = 16 + 4; return MARGIN_H + iIconWidth + rtCalc.Width() + MARGIN_H + m_iItemGap; } else return CTabItem::GetDesireLength(); }
LRESULT MainWindow::OnTimer(WPARAM wParam, LPARAM lParam) { if (wParam != IDT_STR_MOVE) return DefWindowProc(ThisWindow, WM_TIMER, wParam, lParam); CurTextOffset += Run*Speed; CurTextOffset = CurTextOffset >= Width ? -TextSize.cx : CurTextOffset <= -TextSize.cx ? Width : CurTextOffset; CalcTextRect(); RECT tmpRect; tmpRect.left = 0; tmpRect.top = 0; tmpRect.bottom = Height; tmpRect.right = Width; InvalidateRect(ThisWindow, &tmpRect, TRUE); return 0; }
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // ¥ DrawText // ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // Draws the text in the current face, font, size, col etc void CBLCanvas::DrawText( SInt16 inX, SInt16 inY, const CCString &inStr) { UWorldSaver safe(mWorld); ::RGBForeColour(&mForeColour); ::RGBBackColour(&mBackColour); ::TextFace(mTextFace); ::TextFont(mFontId); ::TextSize(mTextSize); ::MoveTo(inX,inY); ::DrawText(inStr.mString,0,inStr.GetLength()); // Inval the rect if (mInvalCanvasAsDraw) { Rect rect; // figure the text rectangle CalcTextRect(inX,inY,inStr,rect); InvalCanvasRect(rect); } }
void CFWL_CheckBoxImp::Layout() { int32_t width = int32_t(m_pProperties->m_rtWidget.width + 0.5f); int32_t height = int32_t(m_pProperties->m_rtWidget.height + 0.5f); m_pProperties->m_rtWidget.width = (FX_FLOAT)width; m_pProperties->m_rtWidget.height = (FX_FLOAT)height; GetClientRect(m_rtClient); FX_FLOAT fBoxTop = m_rtClient.top; FX_FLOAT fBoxLeft = m_rtClient.left; FX_FLOAT fTextLeft = 0.0, fTextRight = 0.0; FX_FLOAT fClientRight = m_rtClient.right(); FX_FLOAT fClientBottom = m_rtClient.bottom(); if (!m_pProperties->m_pDataProvider) return; IFWL_CheckBoxDP* pData = static_cast<IFWL_CheckBoxDP*>(m_pProperties->m_pDataProvider); FX_FLOAT fCheckBox = pData->GetBoxSize(m_pInterface); switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) { case FWL_STYLEEXT_CKB_Top: { fBoxTop = m_rtClient.top; break; } case FWL_STYLEEXT_CKB_Bottom: { fBoxTop = fClientBottom - fCheckBox; break; } case FWL_STYLEEXT_CKB_VCenter: default: { fBoxTop = m_rtClient.top + (m_rtClient.height - fCheckBox) / 2; fBoxTop = FXSYS_floor(fBoxTop); } } if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_LeftText) { fBoxLeft = fClientRight - fCheckBox; fTextLeft = m_rtClient.left; fTextRight = fBoxLeft; } else { fTextLeft = fBoxLeft + fCheckBox; fTextRight = fClientRight; } m_rtBox.Set(fBoxLeft, fBoxTop, fCheckBox, fCheckBox); m_rtCaption.Set(fTextLeft, m_rtClient.top, fTextRight - fTextLeft, m_rtClient.height); m_rtCaption.Inflate(-FWL_CKB_CaptionMargin, -FWL_CKB_CaptionMargin); CFX_RectF rtFocus; rtFocus.Set(m_rtCaption.left, m_rtCaption.top, m_rtCaption.width, m_rtCaption.height); CFX_WideString wsCaption; m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); if (wsCaption.IsEmpty()) { m_rtFocus.Set(0, 0, 0, 0); } else { CalcTextRect(wsCaption, m_pProperties->m_pThemeProvider, m_dwTTOStyles, m_iTTOAlign, rtFocus); if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_MultiLine) == 0) { FX_FLOAT fWidth = std::max(m_rtCaption.width, rtFocus.width); FX_FLOAT fHeight = std::min(m_rtCaption.height, rtFocus.height); FX_FLOAT fLeft = m_rtCaption.left; FX_FLOAT fTop = m_rtCaption.top; if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_HLayoutMask) == FWL_STYLEEXT_CKB_Center) { fLeft = m_rtCaption.left + (m_rtCaption.width - fWidth) / 2; } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_HLayoutMask) == FWL_STYLEEXT_CKB_Right) { fLeft = m_rtCaption.right() - fWidth; } if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) == FWL_STYLEEXT_CKB_VCenter) { fTop = m_rtCaption.top + (m_rtCaption.height - fHeight) / 2; } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) == FWL_STYLEEXT_CKB_Bottom) { fTop = m_rtCaption.bottom() - fHeight; } m_rtFocus.Set(fLeft, fTop, fWidth, fHeight); } else { m_rtFocus.Set(rtFocus.left, rtFocus.top, rtFocus.width, rtFocus.height); } m_rtFocus.Inflate(1, 1); } }
FWL_ERR CFWL_PushButtonImp::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { if (!pGraphics) return FWL_ERR_Indefinite; if (!m_pProperties->m_pThemeProvider) return FWL_ERR_Indefinite; IFWL_PushButtonDP* pData = static_cast<IFWL_PushButtonDP*>(m_pProperties->m_pDataProvider); CFX_DIBitmap* pPicture = NULL; IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; if (HasBorder()) { DrawBorder(pGraphics, FWL_PART_PSB_Border, m_pProperties->m_pThemeProvider, pMatrix); } if (HasEdge()) { DrawEdge(pGraphics, FWL_PART_PSB_Edge, m_pProperties->m_pThemeProvider, pMatrix); } DrawBkground(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); CFX_Matrix matrix; matrix.Concat(*pMatrix); FX_FLOAT iPicwidth = 0; FX_FLOAT ipicheight = 0; CFX_WideString wsCaption; if (pData) { pData->GetCaption(m_pInterface, wsCaption); } CFX_RectF rtText; rtText.Set(0, 0, 0, 0); if (!wsCaption.IsEmpty()) { CalcTextRect(wsCaption, pTheme, 0, m_iTTOAlign, rtText); } switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_PSB_ModeMask) { case FWL_STYLEEXT_PSB_TextOnly: DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); break; case FWL_STYLEEXT_PSB_IconOnly: if (pData) { pPicture = pData->GetPicture(m_pInterface); } if (pPicture) { CFX_PointF point; switch (m_iTTOAlign) { case 0: { point.x = m_rtClient.left; point.y = m_rtClient.top; break; } case 1: { point.x = m_rtClient.left + (m_rtClient.width / 2 - pPicture->GetWidth() / 2); point.y = m_rtClient.top; break; } case 2: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); point.y = m_rtClient.top; break; case 4: point.x = m_rtClient.left; point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; break; case 5: point.x = m_rtClient.left + (m_rtClient.width / 2 - pPicture->GetWidth() / 2); point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; break; case 6: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; break; case 8: point.x = m_rtClient.left; point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); break; case 9: point.x = m_rtClient.left + (m_rtClient.width / 2 - pPicture->GetWidth() / 2); point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); break; case 10: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); break; } pGraphics->DrawImage(pPicture, point, &matrix); } break; case FWL_STYLEEXT_PSB_TextIcon: if (pPicture) { CFX_PointF point; switch (m_iTTOAlign) { case 0: { point.x = m_rtClient.left; point.y = m_rtClient.top; iPicwidth = (FX_FLOAT)(pPicture->GetWidth() - 7); ipicheight = pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; break; } case 1: { point.x = m_rtClient.left + (m_rtClient.width / 2 - (pPicture->GetWidth() + rtText.width) / 2); point.y = m_rtClient.top; iPicwidth = pPicture->GetWidth() - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + rtText.width / 2 - 7; ipicheight = pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; break; } case 2: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth() - rtText.width; point.y = m_rtClient.top; iPicwidth = m_rtClient.left + m_rtClient.width - point.x - pPicture->GetWidth() - rtText.width + 7; ipicheight = pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; break; case 4: point.x = m_rtClient.left; point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; iPicwidth = m_rtClient.left + pPicture->GetWidth() - 7; break; case 5: point.x = m_rtClient.left + (m_rtClient.width / 2 - (pPicture->GetWidth() + rtText.width) / 2); point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; iPicwidth = pPicture->GetWidth() - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + rtText.width / 2 - 7; break; case 6: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth() - rtText.width; point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; iPicwidth = m_rtClient.left + m_rtClient.width - point.x - pPicture->GetWidth() - rtText.width + 7; break; case 8: point.x = m_rtClient.left; point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); iPicwidth = (FX_FLOAT)(pPicture->GetWidth() - 7); ipicheight -= rtText.height / 2; break; case 9: point.x = m_rtClient.left + (m_rtClient.width / 2 - (pPicture->GetWidth() + rtText.width) / 2); point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); iPicwidth = pPicture->GetWidth() - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + rtText.width / 2 - 7; ipicheight -= rtText.height / 2; break; case 10: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth() - rtText.width; point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); iPicwidth = m_rtClient.left + m_rtClient.width - point.x - pPicture->GetWidth() - rtText.width + 7; ipicheight -= rtText.height / 2; break; } pGraphics->DrawImage(pPicture, point, &matrix); } matrix.e += m_rtClient.left + iPicwidth; matrix.f += m_rtClient.top + ipicheight; DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); break; } return FWL_ERR_Succeeded; }