View: move BAffineTransform out of ViewSetStateInfo.

the size of BAffineTransform is architecture dependent, so we transmit
its contents in a standard array instead.

Change-Id: I907110742168846a869a48bb2d116cc5292ec7d0
This commit is contained in:
Jérôme Duval
2018-05-07 07:02:57 +00:00
parent 74bfec3b96
commit 630e3f1410
3 changed files with 27 additions and 5 deletions
@@ -26,7 +26,6 @@ struct ViewSetStateInfo {
drawing_mode drawingMode; drawing_mode drawingMode;
BPoint origin; BPoint origin;
float scale; float scale;
BAffineTransform transform;
join_mode lineJoin; join_mode lineJoin;
cap_mode lineCap; cap_mode lineCap;
float miterLimit; float miterLimit;
+14 -2
View File
@@ -237,7 +237,6 @@ ViewState::UpdateServerState(BPrivate::PortLink &link)
info.drawingMode = drawing_mode; info.drawingMode = drawing_mode;
info.origin = origin; info.origin = origin;
info.scale = scale; info.scale = scale;
info.transform = transform;
info.lineJoin = line_join; info.lineJoin = line_join;
info.lineCap = line_cap; info.lineCap = line_cap;
info.miterLimit = miter_limit; info.miterLimit = miter_limit;
@@ -247,6 +246,12 @@ ViewState::UpdateServerState(BPrivate::PortLink &link)
info.fontAntialiasing = font_aliasing; info.fontAntialiasing = font_aliasing;
link.Attach<ViewSetStateInfo>(info); link.Attach<ViewSetStateInfo>(info);
// BAffineTransform is transmitted as a double array
double _transform[6];
if (transform.Flatten(_transform, sizeof(_transform)) != B_OK)
return;
link.Attach<double[6]>(_transform);
// we send the 'local' clipping region... if we have one... // we send the 'local' clipping region... if we have one...
// TODO: Could be optimized, but is low prio, since most views won't // TODO: Could be optimized, but is low prio, since most views won't
// have a custom clipping region. // have a custom clipping region.
@@ -302,7 +307,6 @@ ViewState::UpdateFrom(BPrivate::PortLink &link)
drawing_mode = info.viewStateInfo.drawingMode; drawing_mode = info.viewStateInfo.drawingMode;
origin = info.viewStateInfo.origin; origin = info.viewStateInfo.origin;
scale = info.viewStateInfo.scale; scale = info.viewStateInfo.scale;
transform = info.viewStateInfo.transform;
line_join = info.viewStateInfo.lineJoin; line_join = info.viewStateInfo.lineJoin;
line_cap = info.viewStateInfo.lineCap; line_cap = info.viewStateInfo.lineCap;
miter_limit = info.viewStateInfo.miterLimit; miter_limit = info.viewStateInfo.miterLimit;
@@ -311,6 +315,14 @@ ViewState::UpdateFrom(BPrivate::PortLink &link)
alpha_function_mode = info.viewStateInfo.alphaFunctionMode; alpha_function_mode = info.viewStateInfo.alphaFunctionMode;
font_aliasing = info.viewStateInfo.fontAntialiasing; font_aliasing = info.viewStateInfo.fontAntialiasing;
// BAffineTransform is transmitted as a double array
double _transform[6];
link.Read<double[6]>(&_transform);
if (transform.Unflatten(B_AFFINE_TRANSFORM_TYPE, _transform,
sizeof(_transform)) != B_OK) {
return;
}
// read the user clipping // read the user clipping
// (that's NOT the current View visible clipping but the additional // (that's NOT the current View visible clipping but the additional
// user specified clipping!) // user specified clipping!)
+13 -2
View File
@@ -223,6 +223,14 @@ DrawState::ReadFromLink(BPrivate::LinkReceiver& link)
link.Read<ViewSetStateInfo>(&info); link.Read<ViewSetStateInfo>(&info);
// BAffineTransform is transmitted as a double array
double transform[6];
link.Read<double[6]>(&transform);
if (fTransform.Unflatten(B_AFFINE_TRANSFORM_TYPE, transform,
sizeof(transform)) != B_OK) {
return;
}
fPenLocation = info.penLocation; fPenLocation = info.penLocation;
fPenSize = info.penSize; fPenSize = info.penSize;
fHighColor = info.highColor; fHighColor = info.highColor;
@@ -235,7 +243,6 @@ DrawState::ReadFromLink(BPrivate::LinkReceiver& link)
fDrawingMode = info.drawingMode; fDrawingMode = info.drawingMode;
fOrigin = info.origin; fOrigin = info.origin;
fScale = info.scale; fScale = info.scale;
fTransform = info.transform;
fLineJoinMode = info.lineJoin; fLineJoinMode = info.lineJoin;
fLineCapMode = info.lineCap; fLineCapMode = info.lineCap;
fMiterLimit = info.miterLimit; fMiterLimit = info.miterLimit;
@@ -304,7 +311,6 @@ DrawState::WriteToLink(BPrivate::LinkSender& link) const
info.viewStateInfo.drawingMode = fDrawingMode; info.viewStateInfo.drawingMode = fDrawingMode;
info.viewStateInfo.origin = fOrigin; info.viewStateInfo.origin = fOrigin;
info.viewStateInfo.scale = fScale; info.viewStateInfo.scale = fScale;
info.viewStateInfo.transform = fTransform;
info.viewStateInfo.lineJoin = fLineJoinMode; info.viewStateInfo.lineJoin = fLineJoinMode;
info.viewStateInfo.lineCap = fLineCapMode; info.viewStateInfo.lineCap = fLineCapMode;
info.viewStateInfo.miterLimit = fMiterLimit; info.viewStateInfo.miterLimit = fMiterLimit;
@@ -316,6 +322,11 @@ DrawState::WriteToLink(BPrivate::LinkSender& link) const
link.Attach<ViewGetStateInfo>(info); link.Attach<ViewGetStateInfo>(info);
// BAffineTransform is transmitted as a double array
double transform[6];
if (fTransform.Flatten(transform, sizeof(transform)) != B_OK)
return;
link.Attach<double[6]>(transform);
// TODO: Could be optimized, but is low prio, since most views do not // TODO: Could be optimized, but is low prio, since most views do not
// use a custom clipping region... // use a custom clipping region...