diff --git a/os/src/boards/qemu.rs b/os/src/boards/qemu.rs index 5a92e08f1de16ee4cee97a85a0e4d657a3530259..1dae9f3dcebe1e5b57cb65d0c5552fcfa10a3aa4 100644 --- a/os/src/boards/qemu.rs +++ b/os/src/boards/qemu.rs @@ -13,6 +13,9 @@ pub type CharDeviceImpl = crate::drivers::chardev::NS16550a; pub const VIRT_PLIC: usize = 0xC00_0000; pub const VIRT_UART: usize = 0x1000_0000; +pub const VIRTGPU_XRES: u32 = 1280; +pub const VIRTGPU_YRES: u32 = 800; + use crate::drivers::block::BLOCK_DEVICE; use crate::drivers::chardev::{CharDevice, UART}; use crate::drivers::plic::{IntrTargetPriority, PLIC}; diff --git a/os/src/gui/graphic.rs b/os/src/gui/graphic.rs index 2092d71a6525c1a0f3007bea2ec40e945be72ad0..cda752065d10ca4b64da0f9d8a8144e95261abe8 100644 --- a/os/src/gui/graphic.rs +++ b/os/src/gui/graphic.rs @@ -5,7 +5,8 @@ use embedded_graphics::{ prelude::{OriginDimensions, Point, RgbColor, Size}, }; -use crate::drivers::{GPUDevice, GPU_DEVICE}; +use crate::drivers::{GPUDevice, GPU_DEVICE,}; +use crate::board::{VIRTGPU_XRES, VIRTGPU_YRES}; #[derive(Clone)] pub struct Graphics { @@ -42,7 +43,7 @@ impl DrawTarget for Graphics { let fb = self.drv.getfreambuffer(); pixels.into_iter().for_each(|px| { - let idx = ((self.point.y + px.0.y) * 1280 + self.point.x + px.0.x) as usize * 4; + let idx = ((self.point.y + px.0.y) * VIRTGPU_XRES as i32 + self.point.x + px.0.x) as usize * 4; if idx + 2 >= fb.len() { return; } diff --git a/os/src/gui/icon.rs b/os/src/gui/icon.rs index 645d9e79b050af3b28208137f2c6c461e67c9318..8d78470929dfab536797c91dddc903e55c3afa49 100644 --- a/os/src/gui/icon.rs +++ b/os/src/gui/icon.rs @@ -10,7 +10,7 @@ use embedded_graphics::{ use tinybmp::Bmp; use crate::{drivers::GPU_DEVICE, sync::UPIntrFreeCell}; - +use crate::board::{VIRTGPU_XRES, VIRTGPU_YRES}; use super::{Component, Graphics, ImageComp}; static FILEICON: &[u8] = include_bytes!("../assert/file.bmp"); @@ -32,7 +32,7 @@ impl IconController { UPIntrFreeCell::new(IconControllerInner { files, graphic: Graphics { - size: Size::new(1280, 800), + size: Size::new(VIRTGPU_XRES, VIRTGPU_YRES), point: Point::new(0, 0), drv: GPU_DEVICE.clone(), }, diff --git a/os/src/syscall/gui.rs b/os/src/syscall/gui.rs index 5340d11a1e2d83e6fa5e615a7ed86e856f840e70..82c42af42487c937997ff264cc731adfbcd3ac67 100644 --- a/os/src/syscall/gui.rs +++ b/os/src/syscall/gui.rs @@ -10,11 +10,13 @@ use crate::{ sync::UPIntrFreeCell, }; +use crate::board::{VIRTGPU_XRES, VIRTGPU_YRES}; + static DT: &[u8] = include_bytes!("../assert/desktop.bmp"); lazy_static::lazy_static!( pub static ref DESKTOP:UPIntrFreeCell> = unsafe { - UPIntrFreeCell::new(Arc::new(Panel::new(Size::new(1280, 800), Point::new(0, 0)))) + UPIntrFreeCell::new(Arc::new(Panel::new(Size::new(VIRTGPU_XRES, VIRTGPU_YRES), Point::new(0, 0)))) }; pub static ref PAD:UPIntrFreeCell>> = unsafe { UPIntrFreeCell::new(None) @@ -23,8 +25,8 @@ lazy_static::lazy_static!( pub fn create_desktop() -> isize { let mut p: Arc = - Arc::new(Panel::new(Size::new(1280, 800), Point::new(0, 0))); - let image = ImageComp::new(Size::new(1280, 800), Point::new(0, 0), DT, Some(p.clone())); + Arc::new(Panel::new(Size::new(VIRTGPU_XRES, VIRTGPU_YRES), Point::new(0, 0))); + let image = ImageComp::new(Size::new(VIRTGPU_XRES, VIRTGPU_YRES), Point::new(0, 0), DT, Some(p.clone())); let icon = IconController::new(ROOT_INODE.ls(), Some(p.clone())); p.add(Arc::new(image)); p.add(Arc::new(icon));