From dc2b8439793f7f2a055f244a9945b87751fd4615 Mon Sep 17 00:00:00 2001 From: X512 Date: Wed, 1 Apr 2026 22:21:36 +0900 Subject: [PATCH] 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 Reviewed-by: waddlesplash --- headers/private/interface/PictureDataWriter.h | 2 +- src/kits/interface/PictureDataWriter.cpp | 4 ++-- src/kits/interface/PicturePlayer.cpp | 8 +++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/headers/private/interface/PictureDataWriter.h b/headers/private/interface/PictureDataWriter.h index 06fb16356f..c2e0634379 100644 --- a/headers/private/interface/PictureDataWriter.h +++ b/headers/private/interface/PictureDataWriter.h @@ -45,7 +45,7 @@ public: status_t WriteSetBlendingMode(source_alpha srcAlpha, alpha_function alphaFunc); 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 WriteScaleBy(double x, double y); status_t WriteRotateBy(double angleRadians); diff --git a/src/kits/interface/PictureDataWriter.cpp b/src/kits/interface/PictureDataWriter.cpp index c8903d00ca..bc65fe16ad 100644 --- a/src/kits/interface/PictureDataWriter.cpp +++ b/src/kits/interface/PictureDataWriter.cpp @@ -203,11 +203,11 @@ PictureDataWriter::WriteSetScale(const float& scale) status_t -PictureDataWriter::WriteSetTransform(BAffineTransform transform) +PictureDataWriter::WriteSetTransform(const BAffineTransform& transform) { try { BeginOp(B_PIC_SET_TRANSFORM); - Write(transform); + WriteData(&transform.sx, 6 * sizeof(double)); EndOp(); } catch (status_t& status) { return status; diff --git a/src/kits/interface/PicturePlayer.cpp b/src/kits/interface/PicturePlayer.cpp index edc0599202..f61b2d5a74 100644 --- a/src/kits/interface/PicturePlayer.cpp +++ b/src/kits/interface/PicturePlayer.cpp @@ -1522,11 +1522,13 @@ PicturePlayer::_Play(PicturePlayerCallbacks& callbacks, case B_PIC_SET_TRANSFORM: { - const BAffineTransform* transform; - if (!reader.Get(transform)) + const double* transformValues; + if (!reader.Get(transformValues, 6)) break; - callbacks.SetTransform(*transform); + BAffineTransform transform; + memcpy(&transform.sx, transformValues, 6 * sizeof(double)); + callbacks.SetTransform(transform); break; }