mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 22:31:14 +00:00
Fix rendering of Flickable
It should clip to its geometry
This commit is contained in:
parent
d065e7e879
commit
69508575ec
4 changed files with 14 additions and 12 deletions
|
@ -13,7 +13,7 @@ LICENSE END */
|
||||||
use super::graphics::RenderingCache;
|
use super::graphics::RenderingCache;
|
||||||
use super::items::*;
|
use super::items::*;
|
||||||
use crate::component::ComponentRc;
|
use crate::component::ComponentRc;
|
||||||
use crate::graphics::Point;
|
use crate::graphics::{Point, Rect};
|
||||||
use crate::item_tree::ItemVisitorResult;
|
use crate::item_tree::ItemVisitorResult;
|
||||||
use core::pin::Pin;
|
use core::pin::Pin;
|
||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
@ -107,7 +107,7 @@ pub trait ItemRenderer {
|
||||||
fn draw_text_input(&mut self, pos: Point, text_input: Pin<&TextInput>);
|
fn draw_text_input(&mut self, pos: Point, text_input: Pin<&TextInput>);
|
||||||
fn draw_path(&mut self, pos: Point, path: Pin<&Path>);
|
fn draw_path(&mut self, pos: Point, path: Pin<&Path>);
|
||||||
fn draw_box_shadow(&mut self, pos: Point, box_shadow: Pin<&BoxShadow>);
|
fn draw_box_shadow(&mut self, pos: Point, box_shadow: Pin<&BoxShadow>);
|
||||||
fn combine_clip(&mut self, pos: Point, clip: Pin<&Clip>);
|
fn combine_clip(&mut self, pos: Point, rect: Rect);
|
||||||
fn save_state(&mut self);
|
fn save_state(&mut self);
|
||||||
fn restore_state(&mut self);
|
fn restore_state(&mut self);
|
||||||
|
|
||||||
|
|
|
@ -534,7 +534,7 @@ impl Item for Clip {
|
||||||
fn focus_event(self: Pin<&Self>, _: &FocusEvent, _window: &ComponentWindow) {}
|
fn focus_event(self: Pin<&Self>, _: &FocusEvent, _window: &ComponentWindow) {}
|
||||||
|
|
||||||
fn render(self: Pin<&Self>, pos: Point, backend: &mut ItemRendererRef) {
|
fn render(self: Pin<&Self>, pos: Point, backend: &mut ItemRendererRef) {
|
||||||
(*backend).combine_clip(pos, self)
|
(*backend).combine_clip(pos, self.geometry())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -668,7 +668,9 @@ impl Item for Flickable {
|
||||||
|
|
||||||
fn focus_event(self: Pin<&Self>, _: &FocusEvent, _window: &ComponentWindow) {}
|
fn focus_event(self: Pin<&Self>, _: &FocusEvent, _window: &ComponentWindow) {}
|
||||||
|
|
||||||
fn render(self: Pin<&Self>, _pos: Point, _backend: &mut ItemRendererRef) {}
|
fn render(self: Pin<&Self>, pos: Point, backend: &mut ItemRendererRef) {
|
||||||
|
(*backend).combine_clip(pos, self.geometry())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ItemConsts for Flickable {
|
impl ItemConsts for Flickable {
|
||||||
|
|
|
@ -1062,8 +1062,8 @@ impl ItemRenderer for GLItemRenderer {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn combine_clip(&mut self, pos: Point, clip: std::pin::Pin<&sixtyfps_corelib::items::Clip>) {
|
fn combine_clip(&mut self, pos: Point, rect: Rect) {
|
||||||
let clip_rect = clip.geometry().translate([pos.x, pos.y].into());
|
let clip_rect = rect.translate([pos.x, pos.y].into());
|
||||||
self.shared_data.canvas.borrow_mut().intersect_scissor(
|
self.shared_data.canvas.borrow_mut().intersect_scissor(
|
||||||
clip_rect.min_x(),
|
clip_rect.min_x(),
|
||||||
clip_rect.min_y(),
|
clip_rect.min_y(),
|
||||||
|
|
|
@ -10,7 +10,7 @@ LICENSE END */
|
||||||
|
|
||||||
use cpp::*;
|
use cpp::*;
|
||||||
use items::{ImageFit, TextHorizontalAlignment, TextVerticalAlignment};
|
use items::{ImageFit, TextHorizontalAlignment, TextVerticalAlignment};
|
||||||
use sixtyfps_corelib::graphics::{Color, FontRequest, Point, RenderingCache};
|
use sixtyfps_corelib::graphics::{Color, FontRequest, Point, Rect, RenderingCache};
|
||||||
use sixtyfps_corelib::input::{InternalKeyCode, KeyEvent, KeyEventType, MouseEventType};
|
use sixtyfps_corelib::input::{InternalKeyCode, KeyEvent, KeyEventType, MouseEventType};
|
||||||
use sixtyfps_corelib::item_rendering::{CachedRenderingData, ItemRenderer};
|
use sixtyfps_corelib::item_rendering::{CachedRenderingData, ItemRenderer};
|
||||||
use sixtyfps_corelib::items::{self, ItemRef, TextOverflow, TextWrap};
|
use sixtyfps_corelib::items::{self, ItemRef, TextOverflow, TextWrap};
|
||||||
|
@ -439,12 +439,12 @@ impl ItemRenderer for QtItemRenderer<'_> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn combine_clip(&mut self, pos: Point, clip: Pin<&items::Clip>) {
|
fn combine_clip(&mut self, pos: Point, rect: Rect) {
|
||||||
let clip_rect = qttypes::QRectF {
|
let clip_rect = qttypes::QRectF {
|
||||||
x: (clip.x() + pos.x as f32) as _,
|
x: (rect.min_x() + pos.x as f32) as _,
|
||||||
y: (clip.y() + pos.y as f32) as _,
|
y: (rect.min_y() + pos.y as f32) as _,
|
||||||
width: clip.width() as _,
|
width: rect.width() as _,
|
||||||
height: clip.height() as _,
|
height: rect.height() as _,
|
||||||
};
|
};
|
||||||
let painter: &mut QPainter = &mut *self.painter;
|
let painter: &mut QPainter = &mut *self.painter;
|
||||||
cpp! { unsafe [painter as "QPainter*", clip_rect as "QRectF"] {
|
cpp! { unsafe [painter as "QPainter*", clip_rect as "QRectF"] {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue