Skip to content

Commit 9df44dd

Browse files
authored
Merge pull request #1628 from SCIInstitute/bugs
Last two small issues for milestone
2 parents 0276d45 + 02e6eb7 commit 9df44dd

File tree

3 files changed

+46
-12
lines changed

3 files changed

+46
-12
lines changed

src/Core/Python/PythonInterpreter.cc

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,34 @@ namespace
439439
std::transform(wideArgv.begin(), wideArgv.end(), wideArgvPtrs.begin(), [](std::vector<wchar_t>& wide) { return &wide[0]; });
440440
return wideArgvPtrs;
441441
}
442+
443+
std::vector<wchar_t> getProgramName(const std::vector<std::string>& argv)
444+
{
445+
size_t name_len = argv[0].size();
446+
std::vector<wchar_t> program_name(name_len + 1);
447+
mbstowcs(&program_name[0], argv[0].c_str(), name_len + 1);
448+
return program_name;
449+
}
450+
451+
void setPythonArgv(const std::vector<std::string>& argv)
452+
{
453+
auto wideArgv = wideArgvFromArgv(argv);
454+
auto wideArgvPtrs = wideArgvPtrsFromWideArgv(wideArgv);
455+
456+
int argsOffset = 0;
457+
auto scriptFlag1 = std::find(argv.begin(), argv.end(), "-s");
458+
auto scriptFlag2 = std::find(argv.begin(), argv.end(), "--script");
459+
if (scriptFlag1 != argv.end())
460+
{
461+
argsOffset = scriptFlag1 - argv.begin() + 1;
462+
}
463+
else if (scriptFlag2 != argv.end())
464+
{
465+
argsOffset = scriptFlag2 - argv.begin() + 1;
466+
}
467+
468+
PySys_SetArgv(wideArgvPtrs.size() - argsOffset, &wideArgvPtrs[argsOffset]);
469+
}
442470
}
443471

444472
void PythonInterpreter::initialize(bool needProgramName, const std::string& commandLine, const boost::filesystem::path& libPath)
@@ -447,22 +475,14 @@ void PythonInterpreter::initialize(bool needProgramName, const std::string& comm
447475

448476
if (needProgramName)
449477
{
450-
size_t name_len = argv[0].size();
451-
std::vector<wchar_t> program_name(name_len + 1);
452-
mbstowcs(&program_name[0], argv[0].c_str(), name_len + 1);
453-
454-
//std::cerr << "Initializing Python ..." << std::endl;
455-
this->private_->setProgramName(program_name);
478+
this->private_->setProgramName(getProgramName(argv));
456479
// TODO: remove debug print when confident python initialization is stable
457480
//std::wcerr << "initialize program name=" << this->private_->programName() << std::endl;
458481
}
459482

460483
initialize_eventhandler(needsSpecialPythonPathTreatment(commandLine), libPath);
461484

462-
auto wideArgv = wideArgvFromArgv(argv);
463-
auto wideArgvPtrs = wideArgvPtrsFromWideArgv(wideArgv);
464-
465-
PySys_SetArgv(argv.size(), &wideArgvPtrs[0]);
485+
setPythonArgv(argv);
466486

467487
{
468488
auto out = [](const std::string& s)

src/Modules/Visualization/ShowString.cc

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,25 @@ GeometryBaseHandle ShowString::buildGeometryObject(const std::string& text)
212212

213213
auto dims = textBuilder_->getStringDims(text);
214214
auto length = std::get<0>(dims) + 20;
215-
auto width = std::get<1>(dims) + 10;
215+
auto width = std::get<1>(dims) + 20;
216+
216217
xTrans *= 1 - length / std::get<0>(lastWindowSize_);
217218
yTrans *= 1 - width / std::get<1>(lastWindowSize_);
218219

220+
if (containsDescenderLetter(text))
221+
{
222+
yTrans += 0.02;
223+
}
224+
219225
Vector trans(xTrans, yTrans, 0.0);
220226
textBuilder_->printString(text, trans, Vector(), text, *geom);
221227

222228
return geom;
223229
}
230+
231+
bool ShowString::containsDescenderLetter(const std::string& text)
232+
{
233+
static const std::string descenders("qpygj");
234+
return std::any_of(descenders.begin(), descenders.end(),
235+
[&text](char c) { return text.find(c) != std::string::npos; });
236+
}

src/Modules/Visualization/ShowString.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,11 @@ namespace Visualization {
6969
OUTPUT_PORT(0, RenderedString, GeometryObject);
7070
MODULE_TRAITS_AND_INFO(ModuleHasUI)
7171
private:
72-
boost::shared_ptr<class TextBuilder> textBuilder_;
7372
Core::Datatypes::GeometryBaseHandle buildGeometryObject(const std::string& text);
7473
std::tuple<double, double> getTextPosition();
7574
void processWindowResizeFeedback(const Core::Datatypes::ModuleFeedback& var);
75+
static bool containsDescenderLetter(const std::string& text);
76+
boost::shared_ptr<class TextBuilder> textBuilder_;
7677
std::tuple<int,int> lastWindowSize_ { 450, 1000 };
7778
bool needReexecute_ {true};
7879
};

0 commit comments

Comments
 (0)