void CCtrlGesture::drawMe (HDC hdc) { if (m_points.size() <= 1) { return; } CResMgr *pResMgr = CResMgr::getInstance(); CRect rc = getClientRect(); CDCHandle dc(hdc); if (m_gestureLineWidth > 0) { // HPEN pen = ::CreatePen(PS_SOLID, m_gestureLineWidth, _GetColor()); HPEN pen = pResMgr->getPen(PS_SOLID, (xl::ushort)m_gestureLineWidth, _GetColor()); HPEN oldPen = dc.SelectPen(pen); dc.Polyline(&m_points[0], m_points.size()); dc.SelectPen(oldPen); // ::DeleteObject(pen); } assert(_GetTarget() != NULL); tstring text = m_gesture; text += _T(" ("); text += _GetTarget()->onGesture(m_isTimeout ? _T("canceled") : m_gesture, m_points[0], false); text += _T(")"); // rc.top = rc.bottom - 20; COLORREF oldColor = dc.SetTextColor(_GetColor()); HFONT oldFont = dc.SelectFont(_GetFont()); dc.drawTransparentText(text, text.length(), rc, DT_CENTER | DT_BOTTOM | DT_SINGLELINE); dc.SelectFont(oldFont); dc.SetTextColor(oldColor); }
XL_BEGIN UI_BEGIN void CCtrlButton::_DrawImageAndText (HDC hdc) { /* if (m_text.length() == 0) { return; } */ CDCHandle dc(hdc); CRect rc = getClientRect(); if (m_pushAndCapture) { rc.OffsetRect(1, 1); } UINT format = DT_CENTER | DT_VCENTER | DT_SINGLELINE; COLORREF rgbOld = dc.SetTextColor(_GetColor()); HFONT font = _GetFont(); HFONT oldFont = dc.SelectFont(font); if (m_imgId == 0) { if (m_text.length() > 0) { dc.drawTransparentText(m_text, m_text.length(), rc, format); } } else { CRect rcTmp = rc; int textWidth = rcTmp.Width(); CResMgr *pResMgr = CResMgr::getInstance(); CBitmapPtr image = m_imgTrans ? pResMgr->getTransBitmap((ushort)m_imgId, m_imgClrKey, disable) : pResMgr->getBitmap((ushort)m_imgId, disable); assert(image != NULL); int imgWidth = image->getWidth(); int imgHeight = image->getHeight(); int imgX = rc.left + (rc.Width() - imgWidth - textWidth - m_text_image_pading) / 2; int imgY = rc.top + (rc.Height() - imgHeight) / 2; if (imgX < rc.left) { imgX = rc.left; } if (imgY < rc.top) { imgY = rc.top; } image->draw(dc, imgX, imgY, imgWidth, imgHeight, 0, 0, SRCCOPY); rcTmp = rc; rcTmp.left = imgX + imgWidth + m_text_image_pading; rcTmp.right = rcTmp.left + textWidth; if (rcTmp.right > rc.right) { rcTmp.right = rc.right; } if (m_text.length() > 0) { dc.drawTransparentText(m_text, m_text.length(), rcTmp, format); } } dc.SelectFont(oldFont); dc.SetTextColor(rgbOld); }
// MessageReceived void ObjectWindow::MessageReceived(BMessage* message) { switch (message->what) { case MSG_SET_OBJECT_TYPE: { int32 type; if (message->FindInt32("type", &type) >= B_OK) { fObjectView->SetObjectType(type); fFillCB->SetEnabled(type != OBJECT_LINE); if (!fFillCB->IsEnabled()) fPenSizeS->SetEnabled(true); else fPenSizeS->SetEnabled(fFillCB->Value() == B_CONTROL_OFF); } break; } case MSG_SET_FILL_OR_STROKE: { int32 value; if (message->FindInt32("be:value", &value) >= B_OK) { fObjectView->SetStateFill(value); fPenSizeS->SetEnabled(value == B_CONTROL_OFF); } break; } case MSG_SET_COLOR: fObjectView->SetStateColor(_GetColor()); _UpdateColorControls(); break; case MSG_OBJECT_ADDED: { State* object; if (message->FindPointer("object", (void**)&object) >= B_OK) { fObjectLV->AddItem(new ObjectItem("Object", object)); } // fall through } case MSG_OBJECT_COUNT_CHANGED: fClearB->SetEnabled(fObjectView->CountObjects() > 0); break; case MSG_OBJECT_SELECTED: if (ObjectItem* item = (ObjectItem*)fObjectLV->ItemAt(fObjectLV->CurrentSelection(0))) { fObjectView->SetState(item->Object()); fObjectView->SetStateColor(item->Object()->Color()); _UpdateControls(); } else fObjectView->SetState(NULL); break; case MSG_REMOVE_OBJECT: while (ObjectItem* item = (ObjectItem*)fObjectLV->ItemAt(fObjectLV->CurrentSelection(0))) { fObjectView->RemoveObject(item->Object()); fObjectLV->RemoveItem(item); delete item; } break; case MSG_NEW_OBJECT: fObjectView->SetState(NULL); break; case MSG_CLEAR: { BAlert *alert = new BAlert("Playground", "Do you really want to clear all drawing objects?", "No", "Yes"); if (alert->Go() == 1) { fObjectView->MakeEmpty(); fObjectLV->MakeEmpty(); } break; } case MSG_SET_PEN_SIZE: fObjectView->SetStatePenSize((float)fPenSizeS->Value()); break; case MSG_SET_DRAWING_MODE: { drawing_mode mode; if (message->FindInt32("mode", (int32*)&mode) >= B_OK) { fObjectView->SetStateDrawingMode(mode); } break; } default: BWindow::MessageReceived(message); } }