diff --git a/src/grid_column.cpp b/src/grid_column.cpp index 8c6444742..757966b93 100644 --- a/src/grid_column.cpp +++ b/src/grid_column.cpp @@ -31,7 +31,17 @@ int WidthHelper::operator()(boost::flyweight const& str) { if (str.get().empty()) return 0; auto it = widths.find(str); if (it != end(widths)) return it->second; + +#ifdef _WIN32 + wxMBConvUTF8 conv; + size_t len = conv.ToWChar(nullptr, 0, str.get().c_str(), str.get().size()); + scratch.resize(len); + conv.ToWChar(const_cast(scratch.wx_str()), len, str.get().c_str(), str.get().size()); + int width = dc.GetTextExtent(scratch).GetWidth(); +#else int width = dc.GetTextExtent(to_wx(str)).GetWidth(); +#endif + widths[str] = width; return width; } diff --git a/src/grid_column.h b/src/grid_column.h index 0dc4ca4d2..54497610b 100644 --- a/src/grid_column.h +++ b/src/grid_column.h @@ -37,6 +37,7 @@ namespace std { struct WidthHelper { wxDC &dc; std::unordered_map, int> widths; + wxString scratch; int operator()(boost::flyweight const& str); int operator()(std::string const& str);