void MouseView::_CreateButtonsPicture() { BeginPicture(&fButtonsPicture); SetScale(1.8 * fScaling); SetOrigin(-21 * fScaling, -14 * fScaling); BShape mouseShape; mouseShape.MoveTo(BPoint(48, 12)); // top BPoint control3[3] = { BPoint(44, 8), BPoint(20, 8), BPoint(16, 12) }; mouseShape.BezierTo(control3); // left BPoint control[3] = { BPoint(12, 16), BPoint(13, 27), BPoint(13, 27) }; mouseShape.BezierTo(control); // bottom BPoint control4[] = { BPoint(18, 30), BPoint(46, 30), BPoint(51, 27) }; mouseShape.BezierTo(control4); // right BPoint control2[3] = { BPoint(51, 27), BPoint(50, 14), BPoint(48, 12) }; mouseShape.BezierTo(control2); mouseShape.Close(); SetHighColor(255, 0, 0, 255); FillShape(&mouseShape, B_SOLID_HIGH); EndPicture(); SetScale(1); }
void GraphicsContext::fillRoundedRect(const IntRect& rect, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color& color, ColorSpace colorSpace) { if (paintingDisabled() || !color.alpha()) return; BPoint points[3]; const float kRadiusBezierScale = 0.56f; BShape shape; shape.MoveTo(BPoint(rect.x() + topLeft.width(), rect.y())); shape.LineTo(BPoint(rect.maxX() - topRight.width(), rect.y())); points[0].x = rect.maxX() - kRadiusBezierScale * topRight.width(); points[0].y = rect.y(); points[1].x = rect.maxX(); points[1].y = rect.y() + kRadiusBezierScale * topRight.height(); points[2].x = rect.maxX(); points[2].y = rect.y() + topRight.height(); shape.BezierTo(points); shape.LineTo(BPoint(rect.maxX(), rect.maxY() - bottomRight.height())); points[0].x = rect.maxX(); points[0].y = rect.maxY() - kRadiusBezierScale * bottomRight.height(); points[1].x = rect.maxX() - kRadiusBezierScale * bottomRight.width(); points[1].y = rect.maxY(); points[2].x = rect.maxX() - bottomRight.width(); points[2].y = rect.maxY(); shape.BezierTo(points); shape.LineTo(BPoint(rect.x() + bottomLeft.width(), rect.maxY())); points[0].x = rect.x() + kRadiusBezierScale * bottomLeft.width(); points[0].y = rect.maxY(); points[1].x = rect.x(); points[1].y = rect.maxY() - kRadiusBezierScale * bottomRight.height(); points[2].x = rect.x(); points[2].y = rect.maxY() - bottomRight.height(); shape.BezierTo(points); shape.LineTo(BPoint(rect.x(), rect.y() + topLeft.height())); points[0].x = rect.x(); points[0].y = rect.y() - kRadiusBezierScale * topLeft.height(); points[1].x = rect.x() + kRadiusBezierScale * topLeft.width(); points[1].y = rect.y(); points[2].x = rect.x() + topLeft.width(); points[2].y = rect.y(); shape.BezierTo(points); shape.Close(); rgb_color oldColor = m_data->view()->HighColor(); m_data->view()->SetHighColor(color); m_data->view()->MovePenTo(B_ORIGIN); m_data->view()->FillShape(&shape); m_data->view()->SetHighColor(oldColor); }
static void DrawStuff(BView *view) { // StrokeShape BShape shape; BPoint bezier[3] = {BPoint(100,0), BPoint(100, 100), BPoint(25, 50)}; shape.MoveTo(BPoint(150,0)); shape.LineTo(BPoint(200,100)); shape.BezierTo(bezier); shape.Close(); view->StrokeShape(&shape); // Stroke/FillRect, Push/PopState, SetHighColor, SetLineMode, SetPenSize view->PushState(); const rgb_color blue = { 0, 0, 240, 0 }; view->SetHighColor(blue); view->SetLineMode(B_BUTT_CAP, B_BEVEL_JOIN); view->SetPenSize(7); view->StrokeRect(BRect(10, 220, 50, 260)); view->FillRect(BRect(65, 245, 120, 300)); view->PopState(); // Stroke/FillEllipse view->StrokeEllipse(BPoint(50, 150), 50, 50); view->FillEllipse(BPoint(100, 120), 50, 50); // Stroke/FillArc view->StrokeArc(BRect(0, 200, 50, 250), 180, 180); view->FillArc(BPoint(150, 250), 50, 50, 0, 125); // DrawString, SetHighColor, SetFontSize const rgb_color red = { 240, 0, 0, 0 }; view->SetHighColor(red); view->SetFontSize(20); view->DrawString("BPicture ", BPoint(30, 20)); view->DrawString("test"); // DrawLine with pen position const rgb_color purple = { 200, 0, 220, 0 }; view->SetHighColor(purple); view->StrokeLine(BPoint(50, 30), BPoint(30, 50)); view->StrokeLine(BPoint(80, 50)); view->StrokeLine(BPoint(50, 30)); }
void Leaves::Draw(BView* view, int32 frame) { float scale = fLeafSize / kLeafWidth / (kMaximumLeafSize * 2); scale *= view->Bounds().Width(); scale += scale * drand48() * fSizeVariation / 100.; BAffineTransform transform; transform.TranslateBy(-kLeafWidth / 2, -kLeafHeight / 2); // draw the leaf centered on the point transform.RotateBy(drand48() * 2. * M_PI); if ((rand() & 64) == 0) transform.ScaleBy(-1., 1.); // flip half of the time transform.ScaleBy(scale); transform.TranslateBy(_RandomPoint(view->Bounds())); BPoint center = transform.Apply(BPoint(kLeafWidth / 2, kLeafHeight / 2)); BPoint gradientOffset = BPoint(60 * scale, 80 * scale); BGradientLinear gradient(center - gradientOffset, center + gradientOffset); int color = (rand() / 7) % kColorCount; gradient.AddColor(kColors[color][0], 0.f); gradient.AddColor(kColors[color][1], 255.f); BShape leafShape; leafShape.MoveTo(transform.Apply(kLeafBegin)); for (int i = 0; i < kLeafCurveCount; ++i) { BPoint control[3]; for (int j = 0; j < 3; ++j) control[j] = transform.Apply(kLeafCurves[i][j]); leafShape.BezierTo(control); } leafShape.Close(); view->PushState(); view->SetDrawingMode(B_OP_ALPHA); view->SetHighColor(0, 0, 0, 50); for (int i = 2; i >= 0; --i) { view->SetOrigin(i * 0.1, i * 0.3); view->SetPenSize(i * 2); view->StrokeShape(&leafShape); } view->PopState(); view->FillShape(&leafShape, gradient); }
void LeafView::Draw(BRect updateRect) { float scale = Bounds().Width() / kLeafWidth; BAffineTransform transform; transform.ScaleBy(scale); // BGradientRadial gradient(BPoint(kLeafWidth * 0.75, kLeafHeight * 1.5), // kLeafWidth * 2); BGradientLinear gradient(B_ORIGIN, transform.Apply(BPoint(kLeafWidth, kLeafHeight))); rgb_color lightBlue = make_color(6, 169, 255); rgb_color darkBlue = make_color(0, 50, 126); gradient.AddColor(darkBlue, 0.0); gradient.AddColor(lightBlue, 255.0); // build leaf shape BShape leafShape; leafShape.MoveTo(transform.Apply(kLeafBegin)); for (int i = 0; i < kNumLeafCurves; ++i) { BPoint controlPoints[3]; for (int j = 0; j < 3; ++j) controlPoints[j] = transform.Apply(kLeafCurves[i][j]); leafShape.BezierTo(controlPoints); } leafShape.Close(); PushState(); SetDrawingMode(B_OP_ALPHA); SetHighColor(0, 0, 0, 50); for (int i = 2; i >= 0; --i) { SetOrigin(i * 0.1, i * 0.3); SetPenSize(i * 2); StrokeShape(&leafShape); } PopState(); FillShape(&leafShape, gradient); }
void ShapeLPB::BezierTo(BPoint p[3]) { fShape.BezierTo(p); }
void MouseView::Draw(BRect updateFrame) { SetDrawingMode(B_OP_ALPHA); SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); SetScale(fScaling * 1.8); BShape mouseShape; mouseShape.MoveTo(BPoint(16, 12)); // left BPoint control[3] = { BPoint(12, 16), BPoint(8, 64), BPoint(32, 64) }; mouseShape.BezierTo(control); // right BPoint control2[3] = { BPoint(56, 64), BPoint(52, 16), BPoint(48, 12) }; mouseShape.BezierTo(control2); // top BPoint control3[3] = { BPoint(44, 8), BPoint(20, 8), BPoint(16, 12) }; mouseShape.BezierTo(control3); mouseShape.Close(); // Draw the shadow SetOrigin(-17 * fScaling, -11 * fScaling); SetHighColor(kMouseShadowColor); FillShape(&mouseShape, B_SOLID_HIGH); // Draw the body SetOrigin(-21 * fScaling, -14 * fScaling); BGradientRadial bodyGradient(28, 24, 128); bodyGradient.AddColor(kMouseBodyTopColor, 0); bodyGradient.AddColor(kMouseBodyBottomColor, 255); FillShape(&mouseShape, bodyGradient); // Draw the outline SetPenSize(1 / 1.8 / fScaling); SetDrawingMode(B_OP_OVER); SetHighColor(kMouseOutlineColor); StrokeShape(&mouseShape, B_SOLID_HIGH); // bottom button border BShape buttonsOutline; buttonsOutline.MoveTo(BPoint(13, 27)); BPoint control4[] = { BPoint(18, 30), BPoint(46, 30), BPoint(51, 27) }; buttonsOutline.BezierTo(control4); SetHighColor(kMouseButtonOutlineColor); StrokeShape(&buttonsOutline, B_SOLID_HIGH); SetScale(1); SetOrigin(0, 0); // Separator between the buttons const int32* offset = getButtonOffsets(fType); for (int32 i = 1; i < fType; i++) { BRect buttonRect = _ButtonRect(offset, i); StrokeLine(buttonRect.LeftTop(), buttonRect.LeftBottom()); } mouse_map map; fSettings.Mapping(map); SetDrawingMode(B_OP_OVER); if (fButtons != 0) ClipToPicture(&fButtonsPicture, B_ORIGIN, false); for (int32 i = 0; i < fType; i++) { // draw mapping number centered over the button bool pressed = (fButtons & map.button[_ConvertFromVisualOrder(i)]) != 0; // is button currently pressed? if (pressed) { SetDrawingMode(B_OP_ALPHA); SetHighColor(kButtonPressedColor); FillRect(_ButtonRect(offset, i)); } BRect border(fScaling * (offset[i] + 1), fScaling * (kButtonTop + 5), fScaling * offset[i + 1] - 1, fScaling * (kButtonTop + kMouseDownHeight - 4)); if (i == 0) border.left += fScaling * 5; if (i == fType - 1) border.right -= fScaling * 4; char number[2] = {0}; number[0] = getMappingNumber(map.button[_ConvertFromVisualOrder(i)]) + '1'; SetDrawingMode(B_OP_OVER); SetHighColor(kButtonTextColor); DrawString(number, BPoint( border.left + (border.Width() - StringWidth(number)) / 2, border.top + fDigitBaseline + (border.IntegerHeight() - fDigitHeight) / 2)); } if (fButtons != 0) ClipToPicture(NULL); }