本文整理汇总了C++中BShape类的典型用法代码示例。如果您正苦于以下问题:C++ BShape类的具体用法?C++ BShape怎么用?C++ BShape使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了BShape类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: testStrokeShape
static void testStrokeShape(BView *view, BRect frame)
{
frame.InsetBy(2, 2);
BShape shape;
shape.MoveTo(BPoint(frame.left, frame.bottom));
shape.LineTo(BPoint(frame.right, frame.top));
shape.LineTo(BPoint(frame.left, frame.top));
shape.LineTo(BPoint(frame.right, frame.bottom));
view->StrokeShape(&shape);
}
示例2:
void
LineChartRenderer::Render(BView* view, BRect updateRect)
{
if (!updateRect.IsValid() || updateRect.left > fFrame.right
|| fFrame.left > updateRect.right) {
return;
}
if (fDomain.min >= fDomain.max || fRange.min >= fRange.max)
return;
if (!_UpdateSamples())
return;
// get the range to draw (draw one more sample on each side)
int32 left = (int32)fFrame.left;
int32 first = (int32)updateRect.left - left - 1;
int32 last = (int32)updateRect.right - left + 1;
if (first < 0)
first = 0;
if (last > fFrame.IntegerWidth())
last = fFrame.IntegerWidth();
if (first > last)
return;
double minRange = fRange.min;
double sampleRange = fRange.max - minRange;
if (sampleRange == 0) {
minRange = fRange.min - 0.5;
sampleRange = 1;
}
double scale = (double)fFrame.IntegerHeight() / sampleRange;
// draw
view->SetLineMode(B_ROUND_CAP, B_ROUND_JOIN);
for (int32 i = 0; DataSourceInfo* info = fDataSources.ItemAt(i); i++) {
float bottom = fFrame.bottom;
BShape shape;
shape.MoveTo(BPoint(left + first,
bottom - ((info->samples[first] - minRange) * scale)));
for (int32 i = first; i <= last; i++) {
shape.LineTo(BPoint(float(left + i),
float(bottom - ((info->samples[i] - minRange) * scale))));
}
view->SetHighColor(info->config.Color());
view->MovePenTo(B_ORIGIN);
view->StrokeShape(&shape);
}
}
示例3: BShape
BShape*
TransportControlGroup::_CreatePlayShape(float height) const
{
BShape* shape = new BShape();
float step = floorf(height / 8);
shape->MoveTo(BPoint(height + step, height / 2));
shape->LineTo(BPoint(-step, height + step));
shape->LineTo(BPoint(-step, 0 - step));
shape->Close();
return shape;
}
示例4: BeginPicture
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);
}
示例5: draw_shape
static void
draw_shape(void* _context, const BShape& shape, bool fill)
{
DrawingContext* context = reinterpret_cast<DrawingContext *>(_context);
ShapePainter drawShape(context);
drawShape.Iterate(&shape);
drawShape.Draw(shape.Bounds(), fill);
}
示例6: draw_shape
static void
draw_shape(void* _canvas, const BShape& shape, bool fill)
{
Canvas* const canvas = reinterpret_cast<Canvas*>(_canvas);
ShapePainter drawShape(canvas);
drawShape.Iterate(&shape);
drawShape.Draw(shape.Bounds(), fill);
}
示例7: DrawStuff
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));
}
示例8: drand48
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);
}
示例9: r
void
PDFWriter::ClipChar(BFont* font, const char* unicode, const char* utf8,
int16 size, float width)
{
BShape glyph;
bool hasGlyph[1];
font->GetHasGlyphs(utf8, 1, hasGlyph);
if (hasGlyph[0]) {
BShape *glyphs[1];
glyphs[0] = &glyph;
font->GetGlyphShapes(utf8, 1, glyphs);
} else {
REPORT(kWarning, fPage, "glyph for %*.*s not found!", size, size, utf8);
// create a rectangle instead
font_height height;
fState->beFont.GetHeight(&height);
BRect r(0, 0, width, height.ascent);
float w = r.Width() < r.Height() ? r.Width()*0.1 : r.Height()*0.1;
BRect o = r; o.InsetBy(w, w);
w *= 2.0;
BRect i = r; i.InsetBy(w, w);
o.OffsetBy(0, -height.ascent);
i.OffsetBy(0, -height.ascent);
glyph.MoveTo(BPoint(o.left, o.top));
glyph.LineTo(BPoint(o.right, o.top));
glyph.LineTo(BPoint(o.right, o.bottom));
glyph.LineTo(BPoint(o.left, o.bottom));
glyph.Close();
glyph.MoveTo(BPoint(i.left, i.top));
glyph.LineTo(BPoint(i.left, i.bottom));
glyph.LineTo(BPoint(i.right, i.bottom));
glyph.LineTo(BPoint(i.right, i.top));
glyph.Close();
}
BPoint p(fState->penX, fState->penY);
PushInternalState(); SetOrigin(p);
{
DrawShape iterator(this, false);
iterator.Iterate(&glyph);
}
PopInternalState();
}
示例10: r
void
BMenuItem::_DrawSubmenuSymbol(rgb_color bgColor)
{
fSuper->PushState();
BRect r(fBounds);
float rightMargin;
MenuPrivate(fSuper).GetItemMargins(NULL, NULL, &rightMargin, NULL);
r.left = r.right - rightMargin + 3;
r.right -= 1;
BPoint center(floorf((r.left + r.right) / 2.0),
floorf((r.top + r.bottom) / 2.0));
float size = min_c(r.Height() - 2, r.Width());
r.top = floorf(center.y - size / 2 + 0.5);
r.bottom = floorf(center.y + size / 2 + 0.5);
r.left = floorf(center.x - size / 2 + 0.5);
r.right = floorf(center.x + size / 2 + 0.5);
BShape arrowShape;
center.x += 0.5;
center.y += 0.5;
size *= 0.25;
float hSize = size * 0.7;
arrowShape.MoveTo(BPoint(center.x - hSize, center.y - size));
arrowShape.LineTo(BPoint(center.x + hSize, center.y));
arrowShape.LineTo(BPoint(center.x - hSize, center.y + size));
fSuper->SetDrawingMode(B_OP_OVER);
fSuper->SetHighColor(tint_color(bgColor, B_DARKEN_MAX_TINT));
fSuper->SetPenSize(ceilf(size * 0.4));
// NOTE: StrokeShape() offsets the shape by the current pen position,
// it is not documented in the BeBook, but it is true!
fSuper->MovePenTo(B_ORIGIN);
fSuper->StrokeShape(&arrowShape);
fSuper->PopState();
}
示例11: Bounds
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);
}
示例12: if
void PathView::Draw(BRect updateRect) {
if (fMode == kDrawOutline) {
} else if (fMode == kStroke) {
const int n = fPath.CountPoints();
BShape shape;
for (int i = 0; i < n; i++) {
if (i == 0)
shape.MoveTo(fPath.PointAt(i));
else
shape.LineTo(fPath.PointAt(i));
}
if (fPath.IsClosed()) shape.Close();
SetPenSize(fWidth);
StrokeShape(&shape);
ShapeLPB path(&fPath, fWidth, LineCapMode(), LineJoinMode(), LineMiterLimit());
path.CreateLinePath();
SetPenSize(1);
BPicture picture;
BeginPicture(&picture);
FillShape(path.Shape());
EndPicture();
PushState();
ClipToPicture(&picture);
SetHighColor(0, 255, 0);
FillRect(Bounds());
PopState();
SetOrigin(200, 0);
SetHighColor(255, 0, 0);
StrokeShape(path.Shape());
Flush();
}
}
示例13: sizeof
status_t
ServerLink::AttachShape(BShape& shape)
{
int32 opCount, ptCount;
uint32* opList;
BPoint* ptList;
shape.GetData(&opCount, &ptCount, &opList, &ptList);
fSender->Attach(&opCount, sizeof(int32));
fSender->Attach(&ptCount, sizeof(int32));
if (opCount > 0)
fSender->Attach(opList, opCount * sizeof(uint32));
if (ptCount > 0)
fSender->Attach(ptList, ptCount * sizeof(BPoint));
return B_OK;
}
示例14: SetDrawingMode
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);
//.........这里部分代码省略.........
示例15: MovePenTo
point.x += fOffsetX;
point.y += fOffsetY;
return B_OK;
}
private:
float fOffsetX;
float fOffsetY;
} translator;
MovePenTo(B_ORIGIN);
const float arcRX = 50;
const float arcRY = 80;
BShape shape;
shape.MoveTo(BPoint(20, 10));
shape.LineTo(BPoint(10, 90));
shape.LineTo(BPoint(90, 100));
shape.ArcTo(arcRX, arcRY, 45, true, true, BPoint(100, 20));
shape.Close();
StrokeShape(&shape);
shape.Clear();
shape.MoveTo(BPoint(20, 10));
shape.LineTo(BPoint(10, 90));
shape.LineTo(BPoint(90, 100));
shape.ArcTo(arcRX, arcRY, 45, false, true, BPoint(100, 20));
shape.Close();