void PresetButtonControl::OnPaint(DibBitmap *pbm) { bool fSet = (m_wf & kfCtlSet) != 0; Rect rcForm; m_pfrm->GetRect(&rcForm); bool fSelected = m_pfrm->IsControlInside(this); Rect rcT = m_rc; rcT.Offset(rcForm.left, rcForm.top); if (fSelected) { pbm->Fill(rcT.left + 1, rcT.top + 1, rcT.Width() - 2, rcT.Height() - 2, GetColor(kiclrButtonFillHighlight)); } TBitmap *ptbm; if (fSet) ptbm = m_ptbmDown; else ptbm = m_ptbmUp; if (ptbm != NULL) ptbm->BltTo(pbm, m_rc.left + rcForm.left + 1, m_rc.top + rcForm.top + 1); }
void CheckBoxControl::OnPaint(DibBitmap *pbm) { Rect rcForm; m_pfrm->GetRect(&rcForm); // Draw up / down image (if present) TBitmap *ptbm; bool fPenDownInside = m_pfrm->IsControlInside(this); if (fPenDownInside) { ptbm = m_fChecked ? s_ptbmOnDown : s_ptbmOffDown; } else { ptbm = m_fChecked ? s_ptbmOnUp : s_ptbmOffUp; } // Center the text horizontally and draw to the right of the checkbox Font *pfnt = gapfnt[m_ifnt]; int cy = pfnt->GetHeight(); Size siz; ptbm->GetSize(&siz); ptbm->BltTo(pbm, m_rc.left + rcForm.left, m_rc.top + (cy - siz.cy) / 2 + rcForm.top - 1); gapfnt[m_ifnt]->DrawText(pbm, m_szLabel, m_rc.left + rcForm.left + siz.cx, m_rc.top + rcForm.top); }
void ButtonControl::OnPaint(DibBitmap *pbm) { Rect rcForm; m_pfrm->GetRect(&rcForm); bool fSelected = m_pfrm->IsControlInside(this); if (m_ptbmDown != NULL && m_ptbmUp != NULL) { // Draw up / down image (if present) TBitmap *ptbm; if (m_wf & kfCtlDisabled) ptbm = m_ptbmDisabled; else ptbm = fSelected ? m_ptbmDown : m_ptbmUp; ptbm->BltTo(pbm, m_rc.left + rcForm.left, m_rc.top + rcForm.top, m_wf & kfCtlUseSide1Colors ? kside1 : ksideNeutral); // Center the text (if present) if (m_szLabel[0] != 0) { Font *pfnt = gapfnt[m_nfnt]; int cx = pfnt->GetTextExtent(m_szLabel); int cy = pfnt->GetHeight(); int x = m_rc.left + (m_rc.Width() - cx + 1) / 2; int y = m_rc.top + (m_rc.Height() - cy + gcxyBorder) / 2; if (fSelected) { x++; y++; } gapfnt[m_nfnt]->DrawText(pbm, m_szLabel, x + rcForm.left, y + rcForm.top); } } else { #if 0 // old-style filled-rect buttons Rect rcT = m_rc; rcT.Offset(rcForm.left, rcForm.top); int cxyBorder2x = gcxyBorder * 2; pbm->Fill(rcT.left + gcxyBorder, rcT.top + gcxyBorder, rcT.Width() - cxyBorder2x, rcT.Height() - cxyBorder2x, GetColor(fSelected ? kiclrButtonFillHighlight : kiclrButtonFill)); int iclr = GetColor(fSelected ? kiclrWhite : kiclrButtonBorder); pbm->Fill(rcT.left + gcxyBorder, rcT.top, rcT.Width() - cxyBorder2x, gcxyBorder, iclr); pbm->Fill(rcT.left, rcT.top + gcxyBorder, gcxyBorder, rcT.Height() - cxyBorder2x, iclr); pbm->Fill(rcT.right - gcxyBorder, rcT.top + gcxyBorder, gcxyBorder, rcT.Height() - cxyBorder2x, iclr); pbm->Fill(rcT.left + gcxyBorder, rcT.bottom - gcxyBorder, rcT.Width() - cxyBorder2x, gcxyBorder, iclr); if (m_szLabel[0] != 0) { Font *pfnt = gapfnt[m_nfnt]; int cx = pfnt->GetTextExtent(m_szLabel); int cy = pfnt->GetHeight(); int x = m_rc.left + (m_rc.Width() - cx + 1) / 2; int y = m_rc.top + (m_rc.Height() - cy + gcxyBorder) / 2; gapfnt[m_nfnt]->DrawText(pbm, m_szLabel, x + rcForm.left, y + rcForm.top); } #else Rect rcT = m_rc; rcT.Offset(rcForm.left, rcForm.top); TBitmap *ptbmLeft, *ptbmMid, *ptbmRight; if (!fSelected) { ptbmLeft = s_ptbmLeftUp; ptbmMid = s_ptbmMidUp; ptbmRight = s_ptbmRightUp; } else { ptbmLeft = s_ptbmLeftDown; ptbmMid = s_ptbmMidDown; ptbmRight = s_ptbmRightDown; } Size sizLeft, sizMid, sizRight; ptbmLeft->GetSize(&sizLeft); ptbmMid->GetSize(&sizMid); ptbmRight->GetSize(&sizRight); int x = rcT.left; int xRight = rcT.right - sizRight.cx; ptbmLeft->BltTo(pbm, x, rcT.top); x += sizLeft.cx; #if 0 while (x < xRight) { ptbmMid->BltTo(pbm, x, rcT.top); x += sizMid.cx; } #else ptbmMid->FillTo(0, pbm, x, rcT.top, xRight - x, rcT.Height()); x = xRight; #endif ptbmRight->BltTo(pbm, xRight, rcT.top); if (m_szLabel[0] != 0) { Font *pfnt = gapfnt[m_nfnt]; int cx = pfnt->GetTextExtent(m_szLabel); int cy = pfnt->GetHeight(); int x = m_rc.left + (m_rc.Width() - cx + 1) / 2; int y = m_rc.top + ((sizMid.cy - gapfnt[m_nfnt]->GetHeight() + 1) / 2); gapfnt[m_nfnt]->DrawText(pbm, m_szLabel, x + rcForm.left, y + rcForm.top); } #endif } }