SVG印刷対応とメディア情報APIを追加
SVG入力を現在テープ幅に自動フィットして印刷できるようにし、アプリ側が余白計算できるようにテープ幅・DPI・最小送り量を取得するAPIを追加する。 Made-with: Cursor
This commit is contained in:
@@ -93,6 +93,28 @@ module Libptouch
|
||||
[bytes, out_params[:width_dots], out_params[:height_dots]]
|
||||
end
|
||||
|
||||
def svg_file_to_raster_fit_current_tape(path, threshold: nil)
|
||||
opt_ptr = nil
|
||||
unless threshold.nil?
|
||||
o = Binding::SvgOptions.new
|
||||
o[:threshold] = threshold
|
||||
opt_ptr = o.pointer
|
||||
end
|
||||
out_pp = FFI::MemoryPointer.new(:pointer)
|
||||
out_len = FFI::MemoryPointer.new(:size_t)
|
||||
out_params = Binding::RasterParams.new
|
||||
raise_on_error(Binding.libptouch_svg_file_to_raster_fit_current_tape(
|
||||
@native, path, opt_ptr, out_pp, out_len, out_params.pointer
|
||||
))
|
||||
raw = out_pp.read_pointer
|
||||
raise Libptouch::Error.new(OK, "null raster from SVG") if raw.null?
|
||||
|
||||
len = out_len.get(:size_t, 0)
|
||||
bytes = raw.read_bytes(len)
|
||||
Binding.libptouch_free_raster(raw)
|
||||
[bytes, out_params[:width_dots], out_params[:height_dots]]
|
||||
end
|
||||
|
||||
def status_bytes
|
||||
buf = FFI::MemoryPointer.new(:uint8, STATUS_LENGTH)
|
||||
raise_on_error(Binding.libptouch_get_status(@native, buf))
|
||||
@@ -102,5 +124,22 @@ module Libptouch
|
||||
def status_hash
|
||||
Libptouch.parse_status(status_bytes)
|
||||
end
|
||||
|
||||
def current_media_info
|
||||
info = Binding::MediaInfo.new
|
||||
raise_on_error(Binding.libptouch_get_current_media_info(@native, info.pointer))
|
||||
{
|
||||
media_width_code: info[:media_width_code],
|
||||
media_kind_code: info[:media_kind_code],
|
||||
print_dpi: info[:print_dpi],
|
||||
feed_dpi: info[:feed_dpi],
|
||||
tape_width_mm: info[:tape_width_mm],
|
||||
printable_dots: info[:printable_dots],
|
||||
left_margin_dots: info[:left_margin_dots],
|
||||
right_margin_dots: info[:right_margin_dots],
|
||||
min_feed_dots: info[:min_feed_dots],
|
||||
min_feed_mm: info[:min_feed_mm]
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user