diff --git a/headers/private/app/ServerProtocolStructs.h b/headers/private/app/ServerProtocolStructs.h index ff986366e1..44fb8af0ed 100644 --- a/headers/private/app/ServerProtocolStructs.h +++ b/headers/private/app/ServerProtocolStructs.h @@ -26,7 +26,6 @@ struct ViewSetStateInfo { drawing_mode drawingMode; BPoint origin; float scale; - BAffineTransform transform; join_mode lineJoin; cap_mode lineCap; float miterLimit; diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp index a709eee1dc..2ce2026639 100644 --- a/src/kits/interface/View.cpp +++ b/src/kits/interface/View.cpp @@ -237,7 +237,6 @@ ViewState::UpdateServerState(BPrivate::PortLink &link) info.drawingMode = drawing_mode; info.origin = origin; info.scale = scale; - info.transform = transform; info.lineJoin = line_join; info.lineCap = line_cap; info.miterLimit = miter_limit; @@ -247,6 +246,12 @@ ViewState::UpdateServerState(BPrivate::PortLink &link) info.fontAntialiasing = font_aliasing; link.Attach(info); + // BAffineTransform is transmitted as a double array + double _transform[6]; + if (transform.Flatten(_transform, sizeof(_transform)) != B_OK) + return; + link.Attach(_transform); + // we send the 'local' clipping region... if we have one... // TODO: Could be optimized, but is low prio, since most views won't // have a custom clipping region. @@ -302,7 +307,6 @@ ViewState::UpdateFrom(BPrivate::PortLink &link) drawing_mode = info.viewStateInfo.drawingMode; origin = info.viewStateInfo.origin; scale = info.viewStateInfo.scale; - transform = info.viewStateInfo.transform; line_join = info.viewStateInfo.lineJoin; line_cap = info.viewStateInfo.lineCap; miter_limit = info.viewStateInfo.miterLimit; @@ -311,6 +315,14 @@ ViewState::UpdateFrom(BPrivate::PortLink &link) alpha_function_mode = info.viewStateInfo.alphaFunctionMode; font_aliasing = info.viewStateInfo.fontAntialiasing; + // BAffineTransform is transmitted as a double array + double _transform[6]; + link.Read(&_transform); + if (transform.Unflatten(B_AFFINE_TRANSFORM_TYPE, _transform, + sizeof(_transform)) != B_OK) { + return; + } + // read the user clipping // (that's NOT the current View visible clipping but the additional // user specified clipping!) diff --git a/src/servers/app/DrawState.cpp b/src/servers/app/DrawState.cpp index fb20f52438..b10cda187b 100644 --- a/src/servers/app/DrawState.cpp +++ b/src/servers/app/DrawState.cpp @@ -223,6 +223,14 @@ DrawState::ReadFromLink(BPrivate::LinkReceiver& link) link.Read(&info); + // BAffineTransform is transmitted as a double array + double transform[6]; + link.Read(&transform); + if (fTransform.Unflatten(B_AFFINE_TRANSFORM_TYPE, transform, + sizeof(transform)) != B_OK) { + return; + } + fPenLocation = info.penLocation; fPenSize = info.penSize; fHighColor = info.highColor; @@ -235,7 +243,6 @@ DrawState::ReadFromLink(BPrivate::LinkReceiver& link) fDrawingMode = info.drawingMode; fOrigin = info.origin; fScale = info.scale; - fTransform = info.transform; fLineJoinMode = info.lineJoin; fLineCapMode = info.lineCap; fMiterLimit = info.miterLimit; @@ -304,7 +311,6 @@ DrawState::WriteToLink(BPrivate::LinkSender& link) const info.viewStateInfo.drawingMode = fDrawingMode; info.viewStateInfo.origin = fOrigin; info.viewStateInfo.scale = fScale; - info.viewStateInfo.transform = fTransform; info.viewStateInfo.lineJoin = fLineJoinMode; info.viewStateInfo.lineCap = fLineCapMode; info.viewStateInfo.miterLimit = fMiterLimit; @@ -316,6 +322,11 @@ DrawState::WriteToLink(BPrivate::LinkSender& link) const link.Attach(info); + // BAffineTransform is transmitted as a double array + double transform[6]; + if (fTransform.Flatten(transform, sizeof(transform)) != B_OK) + return; + link.Attach(transform); // TODO: Could be optimized, but is low prio, since most views do not // use a custom clipping region...