| 561 | |
| 562 | |
| 563 | tString Viewer::DoSaveFiletypeMultiFrame() |
| 564 | { |
| 565 | Config::ProfileData& profile = Config::GetProfileData(); |
| 566 | tString fileTypeName = profile.SaveFileTypeMultiFrame; |
| 567 | tFileType fileType = tGetFileTypeFromName(fileTypeName); |
| 568 | |
| 569 | float itemWidth = Gutil::GetUIParamScaled(160.0f, 2.5f); |
| 570 | |
| 571 | ImGui::SetNextItemWidth(itemWidth); |
| 572 | if (ImGui::BeginCombo("File Type", fileTypeName.Chr())) |
| 573 | { |
| 574 | for (tFileTypes::tFileTypeItem* item = FileTypes_SaveMultiFrame.First(); item; item = item->Next()) |
| 575 | { |
| 576 | tFileType ft = item->FileType; |
| 577 | bool selected = (ft == fileType); |
| 578 | |
| 579 | tString ftName = tGetFileTypeName(ft); |
| 580 | if (ImGui::Selectable(ftName.Chr(), &selected)) |
| 581 | profile.SaveFileTypeMultiFrame = ftName; |
| 582 | |
| 583 | if (selected) |
| 584 | ImGui::SetItemDefaultFocus(); |
| 585 | } |
| 586 | |
| 587 | ImGui::EndCombo(); |
| 588 | } |
| 589 | ImGui::SameLine(); |
| 590 | Gutil::HelpMark("Multi-frame output image format."); |
| 591 | |
| 592 | // There are different options depending on what type you are saving as. |
| 593 | fileType = tGetFileTypeFromName(profile.SaveFileTypeMultiFrame); |
| 594 | tString extension = tGetExtension(fileType); |
| 595 | switch (fileType) |
| 596 | { |
| 597 | case tFileType::GIF: |
| 598 | DoSaveGifOptions(true); |
| 599 | break; |
| 600 | |
| 601 | case tFileType::WEBP: |
| 602 | // @todo This should be using a standard options call like the GIF type. |
| 603 | ImGui::Checkbox("Lossy", &profile.SaveFileWebpLossy); |
| 604 | ImGui::SetNextItemWidth(itemWidth); |
| 605 | ImGui::SliderFloat("Quality / Compression", &profile.SaveFileWebpQualComp, 0.0f, 100.0f, "%.1f"); |
| 606 | ImGui::SameLine(); Gutil::ToolTip("Image quality percent if lossy. Image compression strength if not lossy"); ImGui::NewLine(); |
| 607 | ImGui::SetNextItemWidth(itemWidth); |
| 608 | ImGui::SliderInt("Frame Duration", &profile.SaveFileWebpDurMultiFrame, 0, 10000, "%d"); |
| 609 | ImGui::SameLine(); Gutil::ToolTip("In milliseconds."); ImGui::NewLine(); |
| 610 | if (ImGui::Button("1.0s")) profile.SaveFileWebpDurMultiFrame = 1000; ImGui::SameLine(); |
| 611 | if (ImGui::Button("0.5s")) profile.SaveFileWebpDurMultiFrame = 500; ImGui::SameLine(); |
| 612 | if (ImGui::Button("30fps")) profile.SaveFileWebpDurMultiFrame = 33; ImGui::SameLine(); |
| 613 | if (ImGui::Button("60fps")) profile.SaveFileWebpDurMultiFrame = 16; |
| 614 | break; |
| 615 | |
| 616 | case tFileType::APNG: |
| 617 | // @todo This should be using a standard options call like the GIF type. |
| 618 | ImGui::SetNextItemWidth(itemWidth); |
| 619 | ImGui::SliderInt("Frame Duration", &profile.SaveFileApngDurMultiFrame, 0, 10000, "%d"); |
| 620 | ImGui::SameLine(); Gutil::ToolTip("In milliseconds."); ImGui::NewLine(); |
nothing calls this directly
no outgoing calls
no test coverage detected