From b48e6d508dcbe4df976f3aee0745aba1ef8a51ca Mon Sep 17 00:00:00 2001 From: "Elena.Subbotina" Date: Fri, 24 Jun 2022 14:23:44 +0300 Subject: [PATCH] fix bug #45874 --- .../source/XlsXlsxConverter/XlsConverter.cpp | 2 +- .../XlsXlsxConverter/xlsx_drawing_context.cpp | 19 +++++++++++++++++++ .../XlsXlsxConverter/xlsx_drawing_context.h | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp b/ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp index 89d27f7d4f..8cb2ebe99e 100644 --- a/ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp +++ b/ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp @@ -1801,7 +1801,7 @@ void XlsConverter::convert_blip(std::vector & props) id += 3000; std::wstring rId = xlsx_context->get_mediaitems().find_image(id , target, isIternal); - xlsx_context->get_drawing_context().set_fill_texture(target); + xlsx_context->get_drawing_context().set_picture(target); }break; case ODRAW::pibName: { diff --git a/ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp b/ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp index 01dcd94bcc..cdd1553f99 100644 --- a/ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp +++ b/ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp @@ -885,6 +885,9 @@ void xlsx_drawing_context::end_drawing(_drawing_state_ptr & drawing_state) { drawing_state->type = external_items::typeImage; + if (!drawing_state->fill.picture_target.empty()) + drawing_state->fill.texture_target = drawing_state->fill.picture_target; + if (!drawing_state->fill.texture_target.empty()) { bool isIternal = false; @@ -2879,6 +2882,22 @@ void xlsx_drawing_context::set_fill_texture(const std::wstring & str) current_drawing_states->back()->fill.texture_mode = textureStretch; } } +void xlsx_drawing_context::set_picture(const std::wstring & str) +{ + if (current_drawing_states == NULL) return; + if (current_drawing_states->empty()) return; + + if (str.empty()) return; + if (false == current_drawing_states->back()->fill.picture_target.empty()) return; + + current_drawing_states->back()->fill.picture_target = str; + + if (current_drawing_states->back()->fill.type == fillUndefined) + { + current_drawing_states->back()->fill.type = fillTexture; + current_drawing_states->back()->fill.texture_mode = textureStretch; + } +} void xlsx_drawing_context::set_picture_crop_top (double val) { if (current_drawing_states == NULL) return; diff --git a/ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h b/ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h index f2ed058f76..56c049664b 100644 --- a/ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h +++ b/ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h @@ -281,6 +281,7 @@ public: double angle = 0; std::wstring texture_target; + std::wstring picture_target; double texture_crop[4]; bool texture_crop_enabled = false; _texture_mode texture_mode; @@ -418,6 +419,7 @@ public: void set_picture_contrast (int val); void set_picture_biLevel (int val); void set_picture_transparent(int nColor, const std::wstring & sColor); + void set_picture (const std::wstring & str); void set_rotation (double val);