Antialiasing works with transparent background
This commit is contained in:
@@ -17,7 +17,7 @@ impl Circle {
|
|||||||
|
|
||||||
impl Drawable for Circle {
|
impl Drawable for Circle {
|
||||||
fn update(&mut self) {
|
fn update(&mut self) {
|
||||||
self.x += 1;
|
// self.x += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(&self, buffer: &wl_buffer, shm_pool: &mut ShmPool) {
|
fn draw(&self, buffer: &wl_buffer, shm_pool: &mut ShmPool) {
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
use crate::wayland::{shm::ShmPool, wl_shm::wl_buffer};
|
use crate::wayland::{shm::ShmPool, wl_shm::wl_buffer};
|
||||||
|
|
||||||
pub fn color_blend(col1: u32, col2: u32, diff: f64) -> u32 {
|
pub fn rgb_blend(col1: u32, col2: u32, diff: f64) -> u32 {
|
||||||
// TODO: Account for alpha channel
|
|
||||||
let a1 = (col1 & 0xff000000) >> 24;
|
|
||||||
let r1 = (col1 & 0x00ff0000) >> 16;
|
let r1 = (col1 & 0x00ff0000) >> 16;
|
||||||
let g1 = (col1 & 0x0000ff00) >> 8;
|
let g1 = (col1 & 0x0000ff00) >> 8;
|
||||||
let b1 = col1 & 0x000000ff;
|
let b1 = col1 & 0x000000ff;
|
||||||
let a2 = (col2 & 0xff000000) >> 24;
|
|
||||||
let r2 = (col2 & 0x00ff0000) >> 16;
|
let r2 = (col2 & 0x00ff0000) >> 16;
|
||||||
let g2 = (col2 & 0x0000ff00) >> 8;
|
let g2 = (col2 & 0x0000ff00) >> 8;
|
||||||
let b2 = col2 & 0x000000ff;
|
let b2 = col2 & 0x000000ff;
|
||||||
@@ -25,7 +22,13 @@ pub fn color_blend(col1: u32, col2: u32, diff: f64) -> u32 {
|
|||||||
} else {
|
} else {
|
||||||
b1 - ((b1 - b2) as f64 * diff) as u32
|
b1 - ((b1 - b2) as f64 * diff) as u32
|
||||||
};
|
};
|
||||||
return 0xff000000 + (r3 << 16) + (g3 << 8) + b3;
|
(r3 << 16) + (g3 << 8) + b3
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn color_blend(col1: u32, col2: u32, diff: f64) -> u32 {
|
||||||
|
let a1 = (col1 & 0xff000000) >> 24;
|
||||||
|
let a2 = (col2 & 0xff000000) >> 24;
|
||||||
|
((a2 + ((a1 as f64/0xff as f64)*(0xff - a2) as f64*(1.0-diff)) as u32) << 24) + rgb_blend(col1, col2, diff * (a1 as f64 / 0xff as f64))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait Drawable : Send {
|
pub trait Drawable : Send {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use std::{collections::HashMap, env::var, error::Error, fmt::Debug, io::{IoSliceMut, Write}, os::unix::net::{AncillaryData, SocketAncillary, UnixStream}, sync::{atomic::{AtomicBool, AtomicU32, Ordering}, mpsc, Arc, Mutex, RwLock}, thread::{self}, time::Duration, u32};
|
use std::{collections::HashMap, env::var, error::Error, fmt::Debug, io::{IoSliceMut, Write}, os::unix::net::{AncillaryData, SocketAncillary, UnixStream}, sync::{atomic::{AtomicBool, AtomicU32, Ordering}, mpsc, Arc, Mutex, RwLock}, thread::{self}, u32};
|
||||||
|
|
||||||
use crate::{graphics::{circle::Circle, drawable::Drawable, rectangle::Rectangle}, wayland::{shm, surface::UnsetErr, vec_utils::WlMessage, wl_shm::wl_buffer}};
|
use crate::{graphics::{circle::Circle, drawable::Drawable, rectangle::Rectangle}, wayland::{shm, surface::UnsetErr, vec_utils::WlMessage, wl_shm::wl_buffer}};
|
||||||
|
|
||||||
@@ -67,7 +67,10 @@ impl WlClient {
|
|||||||
arc_wl_client.wl_display_get_registry();
|
arc_wl_client.wl_display_get_registry();
|
||||||
if let Ok(mut drawables) = arc_wl_client.drawables.lock() {
|
if let Ok(mut drawables) = arc_wl_client.drawables.lock() {
|
||||||
drawables.push(Rectangle::new(50, 50, 300, 300, 16, 0xffff8800).into());
|
drawables.push(Rectangle::new(50, 50, 300, 300, 16, 0xffff8800).into());
|
||||||
drawables.push(Circle::new(150, 80, 25, 0xff00ffff).into());
|
drawables.push(Rectangle::new(350, 50, 300, 300, 16, 0xffaa22aa).into());
|
||||||
|
drawables.push(Circle::new(350, 80, 25, 0xff00ffff).into());
|
||||||
|
drawables.push(Circle::new(350, 160, 25, 0x8800ffff).into());
|
||||||
|
drawables.push(Circle::new(350, 240, 25, 0x0000ffff).into());
|
||||||
}
|
}
|
||||||
arc_wl_client.running.store(true, Ordering::Relaxed);
|
arc_wl_client.running.store(true, Ordering::Relaxed);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user