示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
// 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);
	}
}