Eklenti geliştirme
QuickPaint eklentileri, tek bir C fonksiyonu dışa aktaran dinamik kütüphanelerdir (.so / .dll / .dylib):
const QpPluginInfo* qp_plugin_entry(void);Dönen tanımlayıcı ve işaret ettiği her şey süreç boyunca geçerli kalmalıdır. Tüm tipler crates/qp-plugin-api/src/lib.rs içinde #[repr(C)] olarak tanımlıdır; bu sayede eklentiler C, C++, Zig vb. dillerle de yazılabilir.
Kurulum yeri
Uygulama açılışta şu klasörlerdeki kütüphaneleri yükler:
- Çalıştırılabilir dosyanın yanındaki
plugins/klasörü - Kullanıcı ayar klasöründeki
plugins/(Linux:~/.config/quickpaint/plugins, Windows:%APPDATA%\EarthQuick\QuickPaint\config\plugins)
Yüklenen eklentiler ve hatalar Yardım > Eklentiler penceresinde görünür.
Rust ile efekt yazmak
[lib]
crate-type = ["cdylib"]
[dependencies]
qp-plugin-api = { path = "../../crates/qp-plugin-api" }use qp_plugin_api::sdk::{self, Render};
use qp_plugin_api::*;
extern "C" fn invert_red(args: *const QpRenderArgs) -> i32 {
let mut r = unsafe { Render::from_raw(args) };
let amount = r.int(0) as f32 / 100.0; // özellik sırasına göre değer
r.map(|_x, _y, c| QpColor { r: c.r + ((255 - 2 * c.r as i32) as f32 * amount) as u8, ..c });
0 // başarılı
}
export_plugin!(|| {
sdk::plugin("Benim Eklentim", "Ben", "1.0.0", "Açıklama",
vec![sdk::effect("me.invertred", "Kırmızıyı Ters Çevir", "Benim Menüm", menu::EFFECTS,
vec![sdk::int("amount", "Miktar", 0, 100, 100)], invert_red)],
vec![])
});Özellik türleri
| SDK fonksiyonu | Arayüz | Değer alanı |
|---|---|---|
int | kaydırıcı | i |
float | kaydırıcı | f |
boolean | onay kutusu | i (0/1) |
choice | radyo / açılır liste | i (indeks) |
color | renk seçici (birincil/ikincil/sabit varsayılan) | color |
angle | açı düğmesi | f (derece) |
point | 2B konum seçici, merkeze göre -1..1 | f, f2 |
seed | "Yeniden Tohumla" düğmesi | i |
Render sözleşmesi
srcvedstdüz (önçarpımsız) RGBA, satır aralığıwidth * 4bayt.dstbaşlangıçtasrc'nin kopyasıdır; yalnızcaroi_*dikdörtgenini yazmanız yeterli.- Seçim maskesi uygulama tarafından sonradan uygulanır (seçim dışı pikseller geri yüklenir).
- Uzun döngülerde
Render::cancelled()kontrol edin,Render::progress()ile ilerleme bildirin. - Render bir arka plan iş parçacığında çalışır; global durum kullanıyorsanız iş parçacığı güvenliğine dikkat edin.
Dosya türü eklentisi
QpFileTypeInfo ile uzantı listesi ("raw;bin"), load, save ve free_image fonksiyonları verilir. load doldurduğu QpImage'ı uygulama işi bitince free_image ile size geri verir. Örnek: plugins/qp-sample-plugin içindeki .qraw türü.
ABI sürümü
QpPluginInfo::abi_version alanı QP_ABI_VERSION olmalıdır. Uyumsuz sürümler yüklenmez ve hata olarak listelenir.