Update
This commit is contained in:
@@ -294,9 +294,8 @@ const VideoPreview = ({
|
||||
const scaleX = node.scaleX();
|
||||
const scaleY = node.scaleY();
|
||||
|
||||
let newWidth,
|
||||
newHeight,
|
||||
updates = {};
|
||||
let newWidth, newHeight;
|
||||
let updates = {};
|
||||
|
||||
if (element.type === 'text') {
|
||||
// OPTION A: Convert scale change to fontSize change
|
||||
@@ -310,9 +309,13 @@ const VideoPreview = ({
|
||||
node.scaleX(1);
|
||||
node.scaleY(1);
|
||||
|
||||
// The width/height will be automatically calculated by Konva based on fontSize
|
||||
// For text elements, we let Konva handle the natural dimensions
|
||||
// ✅ FIX: Always get current width/height for text elements too
|
||||
newWidth = node.width();
|
||||
newHeight = node.height();
|
||||
|
||||
updates.fontSize = clampedFontSize;
|
||||
updates.width = newWidth; // ✅ Always include width
|
||||
updates.height = newHeight; // ✅ Always include height
|
||||
|
||||
console.log(`Text transform: scale=${scale.toFixed(2)}, oldFontSize=${element.fontSize}, newFontSize=${clampedFontSize}`);
|
||||
} else {
|
||||
@@ -342,10 +345,8 @@ const VideoPreview = ({
|
||||
// Convert center position to top-left for snapping
|
||||
const centerX = node.x();
|
||||
const centerY = node.y();
|
||||
const currentWidth = element.type === 'text' ? node.width() : newWidth;
|
||||
const currentHeight = element.type === 'text' ? node.height() : newHeight;
|
||||
topLeftX = centerX - currentWidth / 2;
|
||||
topLeftY = centerY - currentHeight / 2;
|
||||
topLeftX = centerX - newWidth / 2; // ✅ newWidth is now always defined
|
||||
topLeftY = centerY - newHeight / 2; // ✅ newHeight is now always defined
|
||||
} else {
|
||||
// Use position directly for text
|
||||
topLeftX = node.x();
|
||||
@@ -355,15 +356,13 @@ const VideoPreview = ({
|
||||
// Check for position snapping during transform (but be less aggressive during rotation)
|
||||
const isRotating = Math.abs(rotation % 90) > 5; // Not close to perpendicular
|
||||
if (!isRotating) {
|
||||
const currentWidth = element.type === 'text' ? node.width() : newWidth;
|
||||
const currentHeight = element.type === 'text' ? node.height() : newHeight;
|
||||
const snapResult = calculateSnapAndGuides(elementId, topLeftX, topLeftY, currentWidth, currentHeight);
|
||||
const snapResult = calculateSnapAndGuides(elementId, topLeftX, topLeftY, newWidth, newHeight);
|
||||
|
||||
if (Math.abs(snapResult.x - topLeftX) > 5 || Math.abs(snapResult.y - topLeftY) > 5) {
|
||||
if (usesCenterPositioning(element.type)) {
|
||||
// Convert back to center position
|
||||
const newCenterX = snapResult.x + currentWidth / 2;
|
||||
const newCenterY = snapResult.y + currentHeight / 2;
|
||||
const newCenterX = snapResult.x + newWidth / 2;
|
||||
const newCenterY = snapResult.y + newHeight / 2;
|
||||
node.x(newCenterX);
|
||||
node.y(newCenterY);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user