save presets using serializer
This commit is contained in:
@@ -474,98 +474,17 @@ bool NodePanelBrushPreset::save()
|
||||
auto path = App::I.data_path + "/settings/presets.bin";
|
||||
if (FILE* fp = fopen(path.c_str(), "wb"))
|
||||
{
|
||||
header_t h;
|
||||
h.count = m_container->m_children.size();
|
||||
fwrite(&h, sizeof(h), 1, fp);
|
||||
BinaryStreamWriter sw;
|
||||
sw.init();
|
||||
sw.wu32(m_container->m_children.size());
|
||||
for (int ci = 0; ci < m_container->m_children.size(); ci++)
|
||||
{
|
||||
auto bpi = static_cast<NodeBrushPresetItem*>(m_container->get_child_at(ci));
|
||||
auto& b = bpi->m_brush;
|
||||
item_t i;
|
||||
i.m_name_len = b->m_name.size();
|
||||
i.m_brush_path_len = b->m_brush_path.size();
|
||||
i.m_brush_thumb_path_len = b->m_brush_thumb_path.size();
|
||||
i.m_dual_path_len = b->m_dual_path.size();
|
||||
i.m_dual_thumb_path_len = b->m_dual_thumb_path.size();
|
||||
i.m_pattern_path_len = b->m_pattern_path.size();
|
||||
i.m_pattern_thumb_path_len = b->m_pattern_thumb_path.size();
|
||||
i.m_tip_color = b->m_tip_color;
|
||||
i.m_tip_scale = b->m_tip_scale;
|
||||
i.m_tip_size = b->m_tip_size;
|
||||
i.m_tip_spacing = b->m_tip_spacing;
|
||||
i.m_tip_flow = b->m_tip_flow;
|
||||
i.m_tip_opacity = b->m_tip_opacity;
|
||||
i.m_tip_angle = b->m_tip_angle;
|
||||
i.m_tip_angle_smooth = b->m_tip_angle_smooth;
|
||||
i.m_tip_mix = b->m_tip_mix;
|
||||
i.m_tip_wet = b->m_tip_wet;
|
||||
i.m_tip_noise = b->m_tip_noise;
|
||||
i.m_tip_hue = b->m_tip_hue;
|
||||
i.m_tip_sat = b->m_tip_sat;
|
||||
i.m_tip_val = b->m_tip_val;
|
||||
i.m_tip_angle_init = b->m_tip_angle_init;
|
||||
i.m_tip_angle_follow = b->m_tip_angle_follow;
|
||||
i.m_tip_flow_pressure = b->m_tip_flow_pressure;
|
||||
i.m_tip_opacity_pressure= b->m_tip_opacity_pressure;
|
||||
i.m_tip_size_pressure = b->m_tip_size_pressure;
|
||||
i.m_jitter_scale = b->m_jitter_scale;
|
||||
i.m_jitter_angle = b->m_jitter_angle;
|
||||
i.m_jitter_scatter = b->m_jitter_scatter;
|
||||
i.m_jitter_scatter_bothaxis = b->m_jitter_scatter_bothaxis;
|
||||
i.m_jitter_flow = b->m_jitter_flow;
|
||||
i.m_jitter_opacity = b->m_jitter_opacity;
|
||||
i.m_jitter_hue = b->m_jitter_hue;
|
||||
i.m_jitter_sat = b->m_jitter_sat;
|
||||
i.m_jitter_val = b->m_jitter_val;
|
||||
i.m_jitter_hsv_eachsample = b->m_jitter_hsv_eachsample;
|
||||
i.m_jitter_aspect = b->m_jitter_aspect;
|
||||
i.m_jitter_aspect_bothaxis = b->m_jitter_aspect_bothaxis;
|
||||
i.m_blend_mode = b->m_blend_mode;
|
||||
|
||||
i.m_tip_invert = b->m_tip_invert;
|
||||
i.m_tip_flipx = b->m_tip_flipx;
|
||||
i.m_tip_flipy = b->m_tip_flipy;
|
||||
i.m_pattern_enabled = b->m_pattern_enabled;
|
||||
i.m_dual_enabled = b->m_dual_enabled;
|
||||
i.m_dual_blend_mode = b->m_dual_blend_mode;
|
||||
i.m_dual_randflip = b->m_dual_randflip;
|
||||
i.m_dual_size = b->m_dual_size;
|
||||
i.m_dual_spacing = b->m_dual_spacing;
|
||||
i.m_dual_scatter = b->m_dual_scatter;
|
||||
i.m_dual_scatter_bothaxis = b->m_dual_scatter_bothaxis;
|
||||
i.m_dual_invert = b->m_dual_invert;
|
||||
i.m_dual_flipx = b->m_dual_flipx;
|
||||
i.m_dual_flipy = b->m_dual_flipy;
|
||||
i.m_tip_randflipx = b->m_tip_randflipx;
|
||||
i.m_tip_randflipy = b->m_tip_randflipy;
|
||||
i.m_tip_aspect = b->m_tip_aspect;
|
||||
i.m_dual_flow = b->m_dual_flow;
|
||||
i.m_dual_opacity = b->m_dual_opacity;
|
||||
i.m_dual_rotate = b->m_dual_rotate;
|
||||
i.m_dual_angle = b->m_dual_angle;
|
||||
i.m_dual_count = b->m_dual_count;
|
||||
i.m_dual_aspect = b->m_dual_aspect;
|
||||
i.m_dual_scale = b->m_dual_scale;
|
||||
|
||||
i.m_pattern_eachsample = b->m_pattern_eachsample;
|
||||
i.m_pattern_invert = b->m_pattern_invert;
|
||||
i.m_pattern_flipx = b->m_pattern_flipx;
|
||||
i.m_pattern_flipy = b->m_pattern_flipy;
|
||||
i.m_pattern_scale = b->m_pattern_scale;
|
||||
i.m_pattern_brightness = b->m_pattern_brightness;
|
||||
i.m_pattern_contrast = b->m_pattern_contrast;
|
||||
i.m_pattern_rand_offset = b->m_pattern_rand_offset;
|
||||
i.m_pattern_depth = b->m_pattern_depth;
|
||||
|
||||
fwrite(&i, sizeof(i), 1, fp);
|
||||
fwrite(b->m_name.c_str(), 1, b->m_name.size(), fp);
|
||||
fwrite(b->m_brush_path.c_str(), 1, b->m_brush_path.size(), fp);
|
||||
fwrite(b->m_brush_thumb_path.c_str(), 1, b->m_brush_thumb_path.size(), fp);
|
||||
fwrite(b->m_dual_path.c_str(), 1, b->m_dual_path.size(), fp);
|
||||
fwrite(b->m_dual_thumb_path.c_str(), 1, b->m_dual_thumb_path.size(), fp);
|
||||
fwrite(b->m_pattern_path.c_str(), 1, b->m_pattern_path.size(), fp);
|
||||
fwrite(b->m_pattern_thumb_path.c_str(), 1, b->m_pattern_thumb_path.size(), fp);
|
||||
sw << *b;
|
||||
}
|
||||
fwrite(sw.m_data.data(), sw.m_data.size(), 1, fp);
|
||||
fclose(fp);
|
||||
return true;
|
||||
}
|
||||
@@ -577,108 +496,20 @@ bool NodePanelBrushPreset::restore()
|
||||
auto path = App::I.data_path + "/settings/presets.bin";
|
||||
if (FILE* fp = fopen(path.c_str(), "rb"))
|
||||
{
|
||||
header_t h;
|
||||
fread(&h, sizeof(h), 1, fp);
|
||||
if (strcmp(h.magic, "PPPR") != 0)
|
||||
{
|
||||
fclose(fp);
|
||||
LOG("Presets file malformed: %s", path.c_str());
|
||||
return false;
|
||||
}
|
||||
if (h.version < 0 || h.version > 0)
|
||||
{
|
||||
fclose(fp);
|
||||
LOG("Presets file version %d not supported: %s", h.version, path.c_str());
|
||||
return false;
|
||||
}
|
||||
fseek(fp, 0, SEEK_END);
|
||||
size_t sz = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
std::vector<uint8_t> data(sz);
|
||||
fread(data.data(), 1, sz, fp);
|
||||
BinaryStreamReader sr;
|
||||
sr.init(data.data(), sz);
|
||||
|
||||
for (int k = 0; k < h.count; k++)
|
||||
auto count = sr.ru32();
|
||||
|
||||
for (int k = 0; k < count; k++)
|
||||
{
|
||||
item_t i;
|
||||
fread(&i, sizeof(i), 1, fp);
|
||||
auto b = std::make_shared<Brush>();
|
||||
b->m_tip_color = i.m_tip_color;
|
||||
b->m_tip_scale = i.m_tip_scale;
|
||||
b->m_tip_size = i.m_tip_size;
|
||||
b->m_tip_spacing = i.m_tip_spacing;
|
||||
b->m_tip_flow = i.m_tip_flow;
|
||||
b->m_tip_opacity = i.m_tip_opacity;
|
||||
b->m_tip_angle = i.m_tip_angle;
|
||||
b->m_tip_angle_smooth = i.m_tip_angle_smooth;
|
||||
b->m_tip_mix = i.m_tip_mix;
|
||||
b->m_tip_wet = i.m_tip_wet;
|
||||
b->m_tip_noise = i.m_tip_noise;
|
||||
b->m_tip_hue = i.m_tip_hue;
|
||||
b->m_tip_sat = i.m_tip_sat;
|
||||
b->m_tip_val = i.m_tip_val;
|
||||
b->m_tip_angle_init = i.m_tip_angle_init;
|
||||
b->m_tip_angle_follow = i.m_tip_angle_follow;
|
||||
b->m_tip_flow_pressure = i.m_tip_flow_pressure;
|
||||
b->m_tip_opacity_pressure = i.m_tip_opacity_pressure;
|
||||
b->m_tip_size_pressure = i.m_tip_size_pressure;
|
||||
b->m_jitter_scale = i.m_jitter_scale;
|
||||
b->m_jitter_angle = i.m_jitter_angle;
|
||||
b->m_jitter_scatter = i.m_jitter_scatter;
|
||||
b->m_jitter_scatter_bothaxis = i.m_jitter_scatter_bothaxis;
|
||||
b->m_jitter_flow = i.m_jitter_flow;
|
||||
b->m_jitter_opacity = i.m_jitter_opacity;
|
||||
b->m_jitter_hue = i.m_jitter_hue;
|
||||
b->m_jitter_sat = i.m_jitter_sat;
|
||||
b->m_jitter_val = i.m_jitter_val;
|
||||
b->m_jitter_hsv_eachsample = i.m_jitter_hsv_eachsample;
|
||||
b->m_jitter_aspect = i.m_jitter_aspect;
|
||||
b->m_jitter_aspect_bothaxis = i.m_jitter_aspect_bothaxis;
|
||||
b->m_blend_mode = i.m_blend_mode;
|
||||
|
||||
b->m_tip_invert = i.m_tip_invert;
|
||||
b->m_tip_flipx = i.m_tip_flipx;
|
||||
b->m_tip_flipy = i.m_tip_flipy;
|
||||
b->m_pattern_enabled = i.m_pattern_enabled;
|
||||
b->m_dual_enabled = i.m_dual_enabled;
|
||||
b->m_dual_blend_mode = i.m_dual_blend_mode;
|
||||
b->m_dual_randflip = i.m_dual_randflip;
|
||||
b->m_dual_size = i.m_dual_size;
|
||||
b->m_dual_spacing = i.m_dual_spacing;
|
||||
b->m_dual_scatter = i.m_dual_scatter;
|
||||
b->m_dual_scatter_bothaxis = i.m_dual_scatter_bothaxis;
|
||||
b->m_dual_invert = i.m_dual_invert;
|
||||
b->m_dual_flipx = i.m_dual_flipx;
|
||||
b->m_dual_flipy = i.m_dual_flipy;
|
||||
b->m_tip_randflipx = i.m_tip_randflipx;
|
||||
b->m_tip_randflipy = i.m_tip_randflipy;
|
||||
b->m_tip_aspect = i.m_tip_aspect;
|
||||
b->m_dual_flow = i.m_dual_flow;
|
||||
b->m_dual_opacity = i.m_dual_opacity;
|
||||
b->m_dual_rotate = i.m_dual_rotate;
|
||||
b->m_dual_angle = i.m_dual_angle;
|
||||
b->m_dual_count = i.m_dual_count;
|
||||
b->m_dual_aspect = i.m_dual_aspect;
|
||||
b->m_dual_scale = i.m_dual_scale;
|
||||
|
||||
b->m_pattern_eachsample = i.m_pattern_eachsample;
|
||||
b->m_pattern_invert = i.m_pattern_invert;
|
||||
b->m_pattern_flipx = i.m_pattern_flipx;
|
||||
b->m_pattern_flipy = i.m_pattern_flipy;
|
||||
b->m_pattern_scale = i.m_pattern_scale;
|
||||
b->m_pattern_brightness = i.m_pattern_brightness;
|
||||
b->m_pattern_contrast = i.m_pattern_contrast;
|
||||
b->m_pattern_rand_offset = i.m_pattern_rand_offset;
|
||||
b->m_pattern_depth = i.m_pattern_depth;
|
||||
|
||||
b->m_name.resize(i.m_name_len);
|
||||
b->m_brush_path.resize(i.m_brush_path_len);
|
||||
b->m_brush_thumb_path.resize(i.m_brush_thumb_path_len);
|
||||
b->m_dual_path.resize(i.m_dual_path_len);
|
||||
b->m_dual_thumb_path.resize(i.m_dual_thumb_path_len);
|
||||
b->m_pattern_path.resize(i.m_pattern_path_len);
|
||||
b->m_pattern_thumb_path.resize(i.m_pattern_thumb_path_len);
|
||||
fread((char*)b->m_name.c_str(), 1, b->m_name.size(), fp);
|
||||
fread((char*)b->m_brush_path.c_str(), 1, b->m_brush_path.size(), fp);
|
||||
fread((char*)b->m_brush_thumb_path.c_str(), 1, b->m_brush_thumb_path.size(), fp);
|
||||
fread((char*)b->m_dual_path.c_str(), 1, b->m_dual_path.size(), fp);
|
||||
fread((char*)b->m_dual_thumb_path.c_str(), 1, b->m_dual_thumb_path.size(), fp);
|
||||
fread((char*)b->m_pattern_path.c_str(), 1, b->m_pattern_path.size(), fp);
|
||||
fread((char*)b->m_pattern_thumb_path.c_str(), 1, b->m_pattern_thumb_path.size(), fp);
|
||||
sr >> *b;
|
||||
|
||||
if (b->valid())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user