Skip to content

Commit dc85e9f

Browse files
committed
Added workaround for build error.
1 parent e0ca6b5 commit dc85e9f

File tree

2 files changed

+114
-114
lines changed

2 files changed

+114
-114
lines changed

crates/icy_engine/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ libyaff = { workspace = true }
4040

4141
# Image export support
4242
image = { workspace = true }
43-
#gifski = "1.32.0"
43+
gifski = "1.32.0"
44+
lodepng = {version ="3.12.1", default-features = false, features = ["cfzlib"] }
45+
4446
imgref = "1.12.0"
4547
rgb = "0.8.52"
4648

crates/icy_engine/src/formats/image_format.rs

Lines changed: 111 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -157,60 +157,59 @@ impl ImageFormat {
157157
}
158158

159159
fn save_screen_gif(&self, screen: &dyn Screen, path: &Path, region: Rectangle) -> EngineResult<()> {
160-
/* use gifski::{Repeat, progress::NoProgress};
161-
162-
let size = screen.get_size();
163-
let dim = screen.get_font_dimensions();
164-
let width = (region.get_width().min(size.width) * dim.width) as usize;
165-
let height = (region.get_height().min(size.height) * dim.height) as usize;
166-
167-
// Get blink rate from the screen's buffer type (in milliseconds)
168-
let blink_rate_ms = screen.buffer_type().get_blink_rate();
169-
let blink_rate_secs = blink_rate_ms as f64 / 1000.0;
170-
171-
let settings = gifski::Settings {
172-
width: Some(width as u32),
173-
height: Some(height as u32),
174-
quality: 100,
175-
fast: true,
176-
repeat: Repeat::Infinite,
177-
};
178-
179-
let (collector, writer) = gifski::new(settings)?;
180-
181-
let fs = std::fs::File::create(path)?;
182-
let mut pb = NoProgress {};
183-
184-
let path_clone = path.to_path_buf();
185-
let writer_handle = std::thread::spawn(move || {
186-
if let Err(e) = writer.write(fs, &mut pb) {
187-
log::error!("GIF writer error for {:?}: {}", path_clone, e);
188-
}
189-
});
190-
191-
// Frame 1: blink_on = true (visible)
192-
let options1 = RenderOptions {
193-
rect: region.into(),
194-
blink_on: true,
195-
..Default::default()
196-
};
197-
let (frame1_size, frame1_data) = screen.render_to_rgba(&options1);
198-
let img1 = Self::create_imgref(frame1_data, frame1_size);
199-
collector.add_frame_rgba(0, img1, 0.0)?;
200-
201-
// Frame 2: blink_on = false (hidden) - use screen's blink rate
202-
let options2 = RenderOptions {
203-
rect: region.into(),
204-
blink_on: false,
205-
..Default::default()
206-
};
207-
let (frame2_size, frame2_data) = screen.render_to_rgba(&options2);
208-
let img2 = Self::create_imgref(frame2_data, frame2_size);
209-
collector.add_frame_rgba(1, img2, blink_rate_secs)?;
210-
211-
drop(collector);
212-
writer_handle.join().map_err(|_| anyhow::anyhow!("GIF writer thread panicked"))?;
213-
*/
160+
use gifski::{Repeat, progress::NoProgress};
161+
162+
let size = screen.get_size();
163+
let dim = screen.get_font_dimensions();
164+
let width = (region.get_width().min(size.width) * dim.width) as usize;
165+
let height = (region.get_height().min(size.height) * dim.height) as usize;
166+
167+
// Get blink rate from the screen's buffer type (in milliseconds)
168+
let blink_rate_ms = screen.buffer_type().get_blink_rate();
169+
let blink_rate_secs = blink_rate_ms as f64 / 1000.0;
170+
171+
let settings = gifski::Settings {
172+
width: Some(width as u32),
173+
height: Some(height as u32),
174+
quality: 100,
175+
fast: true,
176+
repeat: Repeat::Infinite,
177+
};
178+
179+
let (collector, writer) = gifski::new(settings)?;
180+
181+
let fs = std::fs::File::create(path)?;
182+
let mut pb = NoProgress {};
183+
184+
let path_clone = path.to_path_buf();
185+
let writer_handle = std::thread::spawn(move || {
186+
if let Err(e) = writer.write(fs, &mut pb) {
187+
log::error!("GIF writer error for {:?}: {}", path_clone, e);
188+
}
189+
});
190+
191+
// Frame 1: blink_on = true (visible)
192+
let options1 = RenderOptions {
193+
rect: region.into(),
194+
blink_on: true,
195+
..Default::default()
196+
};
197+
let (frame1_size, frame1_data) = screen.render_to_rgba(&options1);
198+
let img1 = Self::create_imgref(frame1_data, frame1_size);
199+
collector.add_frame_rgba(0, img1, 0.0)?;
200+
201+
// Frame 2: blink_on = false (hidden) - use screen's blink rate
202+
let options2 = RenderOptions {
203+
rect: region.into(),
204+
blink_on: false,
205+
..Default::default()
206+
};
207+
let (frame2_size, frame2_data) = screen.render_to_rgba(&options2);
208+
let img2 = Self::create_imgref(frame2_data, frame2_size);
209+
collector.add_frame_rgba(1, img2, blink_rate_secs)?;
210+
211+
drop(collector);
212+
writer_handle.join().map_err(|_| anyhow::anyhow!("GIF writer thread panicked"))?;
214213
Ok(())
215214
}
216215

@@ -273,65 +272,64 @@ impl ImageFormat {
273272
}
274273

275274
fn save_gif(&self, buffer: &TextBuffer, path: &Path, region: Rectangle) -> EngineResult<()> {
276-
/*use gifski::{Repeat, progress::NoProgress};
277-
278-
let size = buffer.get_size();
279-
let dim = buffer.get_font_dimensions();
280-
let width = (region.get_width().min(size.width) * dim.width) as usize;
281-
let height = (region.get_height().min(size.height) * dim.height) as usize;
282-
283-
// Get blink rate from the buffer's type (in milliseconds)
284-
let blink_rate_ms = buffer.buffer_type.get_blink_rate();
285-
let blink_rate_secs = blink_rate_ms as f64 / 1000.0;
286-
287-
let settings = gifski::Settings {
288-
width: Some(width as u32),
289-
height: Some(height as u32),
290-
quality: 100,
291-
fast: true,
292-
repeat: Repeat::Infinite,
293-
};
294-
295-
let (collector, writer) = gifski::new(settings)?;
296-
297-
let fs = std::fs::File::create(path)?;
298-
let mut pb = NoProgress {};
299-
300-
// Spawn writer thread
301-
let path_clone = path.to_path_buf();
302-
let writer_handle = std::thread::spawn(move || {
303-
if let Err(e) = writer.write(fs, &mut pb) {
304-
log::error!("GIF writer error for {:?}: {}", path_clone, e);
305-
}
306-
});
307-
308-
// Frame 1: blink_on = true (visible)
309-
let options1 = RenderOptions {
310-
rect: region.into(),
311-
blink_on: true,
312-
..Default::default()
313-
};
314-
let scan_lines = options1.override_scan_lines.unwrap_or(false);
315-
let (frame1_size, frame1_data) = buffer.render_to_rgba(&options1, scan_lines);
316-
let img1 = Self::create_imgref(frame1_data, frame1_size);
317-
collector.add_frame_rgba(0, img1, 0.0)?;
318-
319-
// Frame 2: blink_on = false (hidden) - use buffer's blink rate
320-
let options2 = RenderOptions {
321-
rect: region.into(),
322-
blink_on: false,
323-
..Default::default()
324-
};
325-
let (frame2_size, frame2_data) = buffer.render_to_rgba(&options2, scan_lines);
326-
let img2 = Self::create_imgref(frame2_data, frame2_size);
327-
collector.add_frame_rgba(1, img2, blink_rate_secs)?;
328-
329-
// Drop collector to signal completion
330-
drop(collector);
331-
332-
// Wait for writer to finish
333-
writer_handle.join().map_err(|_| anyhow::anyhow!("GIF writer thread panicked"))?;
334-
*/
275+
use gifski::{Repeat, progress::NoProgress};
276+
277+
let size = buffer.get_size();
278+
let dim = buffer.get_font_dimensions();
279+
let width = (region.get_width().min(size.width) * dim.width) as usize;
280+
let height = (region.get_height().min(size.height) * dim.height) as usize;
281+
282+
// Get blink rate from the buffer's type (in milliseconds)
283+
let blink_rate_ms = buffer.buffer_type.get_blink_rate();
284+
let blink_rate_secs = blink_rate_ms as f64 / 1000.0;
285+
286+
let settings = gifski::Settings {
287+
width: Some(width as u32),
288+
height: Some(height as u32),
289+
quality: 100,
290+
fast: true,
291+
repeat: Repeat::Infinite,
292+
};
293+
294+
let (collector, writer) = gifski::new(settings)?;
295+
296+
let fs = std::fs::File::create(path)?;
297+
let mut pb = NoProgress {};
298+
299+
// Spawn writer thread
300+
let path_clone = path.to_path_buf();
301+
let writer_handle = std::thread::spawn(move || {
302+
if let Err(e) = writer.write(fs, &mut pb) {
303+
log::error!("GIF writer error for {:?}: {}", path_clone, e);
304+
}
305+
});
306+
307+
// Frame 1: blink_on = true (visible)
308+
let options1 = RenderOptions {
309+
rect: region.into(),
310+
blink_on: true,
311+
..Default::default()
312+
};
313+
let scan_lines = options1.override_scan_lines.unwrap_or(false);
314+
let (frame1_size, frame1_data) = buffer.render_to_rgba(&options1, scan_lines);
315+
let img1 = Self::create_imgref(frame1_data, frame1_size);
316+
collector.add_frame_rgba(0, img1, 0.0)?;
317+
318+
// Frame 2: blink_on = false (hidden) - use buffer's blink rate
319+
let options2 = RenderOptions {
320+
rect: region.into(),
321+
blink_on: false,
322+
..Default::default()
323+
};
324+
let (frame2_size, frame2_data) = buffer.render_to_rgba(&options2, scan_lines);
325+
let img2 = Self::create_imgref(frame2_data, frame2_size);
326+
collector.add_frame_rgba(1, img2, blink_rate_secs)?;
327+
328+
// Drop collector to signal completion
329+
drop(collector);
330+
331+
// Wait for writer to finish
332+
writer_handle.join().map_err(|_| anyhow::anyhow!("GIF writer thread panicked"))?;
335333
Ok(())
336334
}
337335

0 commit comments

Comments
 (0)