Увы, Стас перенёс эту тему в "Выполненные" раньше, чем были учтены недоработки.
Но вчера Джа напомнил мне про
вот этот косяк, и я решил его наконец-то поправить. А в поисках причины проблемы обнаружил эту тему.
ar888» Вот сделал панельку 4*4, сместил её на 4 пикселя вниз и 4 пикселя вправо. Копирую, чтоб поставить эту панельку в таком же положении на другое место, при Ctrl+V положение сбивается Надеюсь, что поправил. Проверь, пожалуйста.
https://repo.or.cz/d2df-editor.git/commit/c65e1ff1d13495a265aacb8e42954a7a731edec2ar888» Если вставляемый объект со смещением вниз и влево по 16 пикселей попадает в видимое поле у редактора, то он создаётся там, если объект за полем видимости, то как сейчас сделано (в верхнем левом углу экрана) Это было сложновато делать, я пока что сделал попроще. Если в буфере обмена лишь один объект, то он вставится по своим координатам с прибавлением к ним шага сетки. Если же несколько, то они возникнут в левом верхнем углу камеры. Тоже проверь это, пожалуйста.
https://repo.or.cz/d2df-editor.git/commit/1ce8d00ce0f8da0afff7b341a361f0993f33e810Решение далековато от правильного, потому что единичный объект мог быть скопирован с другой карты или вообще текстом извне (маловероятно, но всё же). Кроме того, вставка нескольких объектов рядом с изначальными всё же может быть довольно полезной. Но для того, чтобы сделать всё по уму, нужно добиться следующих целей:
- внутренний буфер обмена редактора не должен пересоздаваться при каждом копировании и вставке;
- нужно отслеживать ситуацию, когда данные были скопированы извне редактора (в т.ч. из другого его экземпляра), и в этом случае очищать внутренний буфер;
- представление данных в буфере обмена внутри самого редактора не должно постоянно перегоняться из двоичной формы в текстовую и обратно;
- структурам объектов карты нужно запилить методы записи в TStream чтобы сделать всё Delphi-идиоматично.
Пишу себе на будущее, чтобы запилить когда появится время разобраться. Сходу въехать толком не получилось.
Что до видимого поля, то это переусложение. Достаточно того, чтобы самый верхний левый из скопированных объектов своим углом попадал в поле видимости.