(例によって)旧暦になってしまいましたが、今年の進捗
去年に引き続き少しですが追加実装しました。
年明けにアプデがでてたのでそこの対応まで含めます。
sample12_clipboard
クリップボードの読み書きができるようになりました。
なお読み出し機能に構造上の問題があったのを見つけたので本家に報告しました。
無事修正されたようで良かったです。
本家DxLibでクリップボード読み出し機能を使っている場合は3.24d以降を使いましょう。
Makefile
make時の使い勝手が多少改善されています。
完全ではないですが、makeによる依存性解決がなされるので変更された箇所だけ再ビルドします。
(dxlib-for-linux自体の開発をしない場合はあまり影響ないかも)
細かい話
GetClipboardTextについて
dxlib-for-linuxにおいては技術的制約によって第一引数にNULLを渡すとクリップボードがキャッシュされ、
第一引数に非NULLを渡すとキャッシュが消失します。
int len = GetClipboardText(NULL, 0); // A
char* str = (char*)malloc(len);
GetClipboardText(str, len); // B
すなわちAを呼ばずにBを呼んだり、Bを2度続けて呼ぶことはできません。
本家でもそのような使い方は危険なのでしないと思います。
なお内部的に値をキャッシュしているので、
AとBの間でクリップボードの内容が書き換えられたとしても、
BではAの時点でのクリップボードの内容が出てきます。
同様の理由でAを呼んでBを呼ばないでいると、
その間メモリを確保したままとなります。
また極端ですがGetClipboardTextの戻り値および第二引数DestBufferBytesがそれぞれint型なので、
2GBないし4GB(試してない)を超えるデータは本家同様扱えませんのでご注意ください。
Windowsの場合、クリップボードは共有メモリからいつでも呼び出すことができます(もちろんロック中は不可)が、
Linux(というかX11)の場合、クリップボードの中身を要求して、メッセージに乗せて返すといった挙動をするため、
このような実装となっています。