Skip to content

Commit ca9ee6d

Browse files
committed
chore: updates
1 parent b4b8bc2 commit ca9ee6d

File tree

60 files changed

+4063
-4052
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+4063
-4052
lines changed

apps/demo/src/app.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Application.on('uncaughtError', (args) => {
2828
Application.on('launch', (args) => {
2929
//require('@nativescript/canvas-polyfill');
3030
if (global.isAndroid) {
31-
// jp.wasabeef.takt.Takt.stock(Utils.android.getApplicationContext()).seat(jp.wasabeef.takt.Seat.TOP_CENTER).color(-65536);
31+
jp.wasabeef.takt.Takt.stock(Utils.android.getApplicationContext()).seat(jp.wasabeef.takt.Seat.TOP_CENTER).color(-65536);
3232
} else {
3333
monitor = GDPerformanceMonitor.new();
3434
monitor.startMonitoringWithConfiguration((label) => {

crates/canvas-2d/src/android.rs

+5-13
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
1-
use std::os::raw::c_void;
2-
use std::sync::Arc;
3-
41
#[cfg(feature = "vulkan")]
52
use ash::vk;
63
#[cfg(feature = "vulkan")]
74
use ash::vk::Handle;
8-
use skia_safe::{gpu, Color};
9-
10-
use crate::context::paths::path::Path;
11-
use crate::context::text_styles::text_direction::TextDirection;
12-
use crate::context::{Context, Recorder, State, SurfaceData};
135

146
#[cfg(feature = "vulkan")]
157
impl Context {
@@ -54,7 +46,7 @@ impl Context {
5446

5547
gpu::direct_contexts::make_vulkan(&backend_context, None)
5648
}
57-
.unwrap();
49+
.unwrap();
5850

5951
let surface_fn =
6052
ash::khr::android_surface::Instance::new(&ash_graphics.entry, &ash_graphics.instance);
@@ -71,7 +63,7 @@ impl Context {
7163
};
7264

7365
let info = skia_safe::ImageInfo::new(
74-
skia_safe::ISize::new(width as i32, height as i32),
66+
skia_safe::ISize::new((width * density).floor() as i32, (height * density).floor() as i32),
7567
skia_safe::ColorType::N32,
7668
alpha_type,
7769
Some(skia_safe::ColorSpace::new_srgb()),
@@ -87,7 +79,7 @@ impl Context {
8779
false,
8880
None,
8981
)
90-
.unwrap();
82+
.unwrap();
9183

9284
let mut state = State::default();
9385
state.direction = TextDirection::from(direction as u32);
@@ -127,7 +119,7 @@ impl Context {
127119
};
128120

129121
let info = skia_safe::ImageInfo::new(
130-
skia_safe::ISize::new(width as i32, height as i32),
122+
skia_safe::ISize::new((width * context.surface_data.scale).floor() as i32, (height * context.surface_data.scale).floor() as i32),
131123
skia_safe::ColorType::N32,
132124
alpha_type,
133125
Some(skia_safe::ColorSpace::new_srgb()),
@@ -143,7 +135,7 @@ impl Context {
143135
false,
144136
None,
145137
)
146-
.unwrap();
138+
.unwrap();
147139

148140
let bounds = skia_safe::Rect::from_wh(width, height);
149141
context.surface_data.bounds = bounds;

crates/canvas-2d/src/context/drawing_images/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ impl Context {
143143

144144
let paint = self.state.paint.image_paint();
145145

146-
self.with_canvas_dirty(|canvas| {
146+
self.render_to_canvas(paint,|canvas, paint| {
147147
canvas.draw_image_with_sampling_options(
148148
image,
149149
skia_safe::Point::new(x, y),
@@ -175,7 +175,7 @@ impl Context {
175175

176176
let paint = self.state.paint.image_paint();
177177

178-
self.with_canvas_dirty(|canvas| {
178+
self.render_to_canvas(paint, |canvas, paint| {
179179
canvas.draw_image_rect_with_sampling_options(
180180
image,
181181
Some((&src, SrcRectConstraint::Strict)),
@@ -204,7 +204,7 @@ impl Context {
204204
.image_smoothing_quality_set(self.state.image_filter_quality());
205205
let paint = self.state.paint.image_paint();
206206

207-
self.with_canvas_dirty(|canvas| {
207+
self.render_to_canvas(paint,|canvas, paint| {
208208
canvas.draw_image_rect_with_sampling_options(
209209
image,
210210
Some((&src, SrcRectConstraint::Strict)),

crates/canvas-2d/src/context/drawing_paths/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ impl Context {
2222
path.0.set_fill_type(rule.to_fill_type());
2323
let path = path.path();
2424

25-
self.with_canvas_dirty(|canvas| {
25+
self.render_to_canvas(paint,|canvas, paint| {
2626
if let Some(paint) = self.state.paint.fill_shadow_paint(
2727
self.state.shadow_offset,
2828
self.state.shadow_color,
@@ -31,14 +31,14 @@ impl Context {
3131
canvas.draw_path(path, &paint);
3232
}
3333

34-
canvas.draw_path(path, &paint);
34+
canvas.draw_path(path, paint);
3535
});
3636
} else {
3737
let mut path = path.map(|path| path.clone()).unwrap_or(self.path.clone());
3838
path.0.set_fill_type(skia_safe::path::FillType::Winding);
3939
let path = path.path();
4040

41-
self.with_canvas_dirty(|canvas| {
41+
self.render_to_canvas(paint,|canvas, paint| {
4242
if is_fill {
4343
if let Some(paint) = self.state.paint.fill_shadow_paint(
4444
self.state.shadow_offset,
@@ -57,7 +57,7 @@ impl Context {
5757
}
5858
}
5959

60-
canvas.draw_path(path, &paint);
60+
canvas.draw_path(path, paint);
6161
});
6262
}
6363
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
use std::os::raw::c_float;
2-
use std::sync::Arc;
32

43
use skia_safe::{BlendMode, Contains, Paint, Rect};
54

6-
use crate::context::{Context, Recorder};
5+
use crate::context::Context;
76

87
impl Context {
98
pub fn clear_rect(&mut self, x: c_float, y: c_float, width: c_float, height: c_float) {
@@ -16,36 +15,24 @@ impl Context {
1615
{
1716
// if rect fully encloses canvas, erase existing content (but preserve CTM, path, etc.)
1817
true => {
19-
let mut recorder = skia_safe::PictureRecorder::new();
20-
let canvas = recorder.begin_recording(self.surface_data.bounds, None);
21-
canvas.set_matrix(&self.state.matrix.into());
22-
23-
if let Some(clip) = self.state.clip.as_ref() {
24-
canvas.clip_path(clip.path(), skia_safe::ClipOp::Intersect, Some(true));
25-
}
26-
27-
self.recorder = Arc::new(parking_lot::Mutex::new(Recorder {
28-
bounds: self.surface_data.bounds,
29-
current: recorder,
30-
is_dirty: true,
31-
layers: vec![],
32-
cache: None,
33-
matrix: skia_safe::Matrix::new_identity(),
34-
clip: None,
35-
}));
36-
18+
self.with_recorder(|mut recorder|{
19+
recorder.set_bounds(self.surface_data.bounds);
20+
recorder.set_matrix(self.state.matrix);
21+
recorder.set_clip(&self.state.clip);
22+
});
3723
}
3824

3925
// otherwise, paint over the specified region but preserve overdrawn vectors
4026
false => {
41-
self.with_canvas_dirty(|canvas| {
42-
let mut paint = Paint::default();
43-
paint
44-
.set_anti_alias(true)
45-
.set_style(skia_safe::PaintStyle::Fill)
46-
.set_blend_mode(BlendMode::Clear);
27+
let mut paint = Paint::default();
28+
paint
29+
.set_anti_alias(true)
30+
.set_style(skia_safe::PaintStyle::Fill)
31+
.set_blend_mode(BlendMode::Clear);
32+
33+
self.render_to_canvas(&paint, |canvas, paint| {
4734
let rect = Rect::from_xywh(x, y, width, height);
48-
canvas.draw_rect(&rect, &paint);
35+
canvas.draw_rect(&rect, paint);
4936
});
5037
}
5138
}
@@ -57,15 +44,15 @@ impl Context {
5744
}
5845

5946
pub fn fill_rect(&mut self, rect: &Rect) {
60-
self.with_canvas_dirty(|canvas| {
47+
self.render_to_canvas(self.state.paint.fill_paint(), |canvas, paint| {
6148
if let Some(paint) = self.state.paint.fill_shadow_paint(
6249
self.state.shadow_offset,
6350
self.state.shadow_color,
6451
self.state.shadow_blur,
6552
) {
6653
canvas.draw_rect(rect, &paint);
6754
}
68-
canvas.draw_rect(rect, self.state.paint.fill_paint());
55+
canvas.draw_rect(rect, paint);
6956
});
7057
}
7158

@@ -75,15 +62,15 @@ impl Context {
7562
}
7663

7764
pub fn stroke_rect(&mut self, rect: &Rect) {
78-
self.with_canvas_dirty(|canvas| {
65+
self.render_to_canvas(self.state.paint.stroke_paint(), |canvas, paint| {
7966
if let Some(paint) = &mut self.state.paint.stroke_shadow_paint(
8067
self.state.shadow_offset,
8168
self.state.shadow_color,
8269
self.state.shadow_blur,
8370
) {
8471
canvas.draw_rect(rect, &paint);
8572
}
86-
canvas.draw_rect(rect, self.state.paint.stroke_paint());
73+
canvas.draw_rect(rect, paint);
8774
});
8875
}
8976
}

crates/canvas-2d/src/context/drawing_text/mod.rs

+12-9
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,22 @@ impl Context {
2828
);
2929

3030
let text = text.replace('\n', " ");
31-
self.with_canvas_dirty(|canvas| {
32-
if let Some(shadow_paint) = shadow_paint {
31+
32+
let paint = self.state.paint.fill_paint();
33+
34+
self.render_to_canvas(&paint, |canvas, paint| {
35+
if let Some(shadow_paint) = &shadow_paint {
3336
canvas.save();
3437
Context::apply_shadow_offset_matrix(
3538
canvas,
3639
self.state.shadow_offset.x,
3740
self.state.shadow_offset.y,
3841
);
39-
self.draw_text(Some(canvas), text.as_str(), x, y, width, None, &shadow_paint);
42+
self.draw_text(Some(canvas), text.as_str(), x, y, width, None, shadow_paint);
4043
canvas.restore();
4144
}
4245

43-
let paint = self.state.paint.fill_paint().clone();
44-
self.draw_text(Some(canvas), text.as_str(), x, y, width, None, &paint);
46+
self.draw_text(Some(canvas), text.as_str(), x, y, width, None, paint);
4547
});
4648
}
4749

@@ -55,19 +57,20 @@ impl Context {
5557

5658
let text = text.replace('\n', " ");
5759

58-
self.with_canvas_dirty(|canvas| {
59-
if let Some(shadow_paint) = shadow_paint {
60+
let paint = self.state.paint.stroke_paint();
61+
self.render_to_canvas(&paint, |canvas, paint| {
62+
if let Some(shadow_paint) = &shadow_paint {
6063
canvas.save();
6164
Context::apply_shadow_offset_matrix(
6265
canvas,
6366
self.state.shadow_offset.x,
6467
self.state.shadow_offset.y,
6568
);
66-
self.draw_text(Some(canvas), text.as_str(), x, y, width, None, &shadow_paint);
69+
self.draw_text(Some(canvas), text.as_str(), x, y, width, None, shadow_paint);
6770
canvas.restore();
6871
}
6972

70-
let paint = self.state.paint.stroke_paint().clone();
73+
7174
self.draw_text(Some(canvas), text.as_str(), x, y, width, None, &paint);
7275
});
7376
}

0 commit comments

Comments
 (0)