BPicture: fix SET_TRANSFORM command storage

`BAffineTransform` type has vtable and can't be saved as-is to file.

Change-Id: I8540caad9e440f50db7f7810ae25750c60c37ec4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10645
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
X512
2026-04-01 16:23:39 +00:00
committed by waddlesplash
parent f7016de7c4
commit dc2b843979
3 changed files with 8 additions and 6 deletions
@@ -45,7 +45,7 @@ public:
status_t WriteSetBlendingMode(source_alpha srcAlpha, status_t WriteSetBlendingMode(source_alpha srcAlpha,
alpha_function alphaFunc); alpha_function alphaFunc);
status_t WriteSetScale(const float& scale); status_t WriteSetScale(const float& scale);
status_t WriteSetTransform(BAffineTransform transform); status_t WriteSetTransform(const BAffineTransform& transform);
status_t WriteTranslateBy(double x, double y); status_t WriteTranslateBy(double x, double y);
status_t WriteScaleBy(double x, double y); status_t WriteScaleBy(double x, double y);
status_t WriteRotateBy(double angleRadians); status_t WriteRotateBy(double angleRadians);
+2 -2
View File
@@ -203,11 +203,11 @@ PictureDataWriter::WriteSetScale(const float& scale)
status_t status_t
PictureDataWriter::WriteSetTransform(BAffineTransform transform) PictureDataWriter::WriteSetTransform(const BAffineTransform& transform)
{ {
try { try {
BeginOp(B_PIC_SET_TRANSFORM); BeginOp(B_PIC_SET_TRANSFORM);
Write<BAffineTransform>(transform); WriteData(&transform.sx, 6 * sizeof(double));
EndOp(); EndOp();
} catch (status_t& status) { } catch (status_t& status) {
return status; return status;
+5 -3
View File
@@ -1522,11 +1522,13 @@ PicturePlayer::_Play(PicturePlayerCallbacks& callbacks,
case B_PIC_SET_TRANSFORM: case B_PIC_SET_TRANSFORM:
{ {
const BAffineTransform* transform; const double* transformValues;
if (!reader.Get(transform)) if (!reader.Get(transformValues, 6))
break; break;
callbacks.SetTransform(*transform); BAffineTransform transform;
memcpy(&transform.sx, transformValues, 6 * sizeof(double));
callbacks.SetTransform(transform);
break; break;
} }