From 467dbaa9e29c0da37d9eb55214e91d7cae89b446 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Mon, 23 Oct 2006 11:54:44 +0000 Subject: [PATCH] Fill/StrokeArc support for BPicture, courtesy of Lucasz Zemczak git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19103 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/ServerPicture.cpp | 12 ++++++++---- src/servers/app/ServerWindow.cpp | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/servers/app/ServerPicture.cpp b/src/servers/app/ServerPicture.cpp index 837be92ceb..8bbbd5320b 100644 --- a/src/servers/app/ServerPicture.cpp +++ b/src/servers/app/ServerPicture.cpp @@ -102,8 +102,10 @@ static void stroke_arc(ViewLayer *view, BPoint center, BPoint radii, float startTheta, float arcTheta) { - /*view->ConvertToScreenForDrawing(&r); - view->Window()->GetDrawingEngine()->DrawArc(r, angle, span, view->CurrentState(), false);*/ + BRect rect(center.x - radii.x, center.y - radii.y, center.x + radii.x, + center.y + radii.y); + view->ConvertToScreenForDrawing(&rect); + view->Window()->GetDrawingEngine()->DrawArc(rect, startTheta, arcTheta, view->CurrentState(), false); } @@ -111,8 +113,10 @@ static void fill_arc(ViewLayer *view, BPoint center, BPoint radii, float startTheta, float arcTheta) { - /*view->ConvertToScreenForDrawing(&r); - view->Window()->GetDrawingEngine()->DrawArc(r, angle, span, view->CurrentState(), true);*/ + BRect rect(center.x - radii.x, center.y - radii.y, center.x + radii.x, + center.y + radii.y); + view->ConvertToScreenForDrawing(&rect); + view->Window()->GetDrawingEngine()->DrawArc(rect, startTheta, arcTheta, view->CurrentState(), true); } diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 168ea80de8..1e325d3bfa 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -2427,6 +2427,26 @@ ServerWindow::_DispatchPictureMessage(int32 code, BPrivate::LinkReceiver &link) break; } + case AS_STROKE_ARC: + case AS_FILL_ARC: + { + BRect rect; + link.Read(&rect); + float startTheta, arcTheta; + link.Read(&startTheta); + link.Read(&arcTheta); + + BPoint radii((rect.Width() + 1) / 2, (rect.Height() + 1) / 2); + BPoint center = rect.LeftTop() + radii; + + picture->BeginOp(code == AS_FILL_ARC ? B_PIC_FILL_ARC : B_PIC_STROKE_ARC); + picture->AddCoord(center); + picture->AddCoord(radii); + picture->AddFloat(startTheta); + picture->AddFloat(arcTheta); + picture->EndOp(); + break; + } case AS_STROKE_LINE: { float x1, y1, x2, y2;