[Scummvm-git-logs] scummvm master -> 1d316e9c4f6781027778560902d3b75bad8a3073
sev-
noreply at scummvm.org
Tue Sep 9 14:43:35 UTC 2025
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
523c599ec6 DIRECTOR: DT: Make Score switching work per selected window
30408be51c DIRECTOR: DT: Added window selection to Channels view
06d8e7657a DIRECTOR: DT: Made Channels window more usable
1d316e9c4f DIRECTOR: DT: Added window selection to the Cast window
Commit: 523c599ec6dbe7e23445d10be1fa36141f645fea
https://github.com/scummvm/scummvm/commit/523c599ec6dbe7e23445d10be1fa36141f645fea
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-09T16:27:05+02:00
Commit Message:
DIRECTOR: DT: Make Score switching work per selected window
Changed paths:
engines/director/debugger/dt-internal.h
engines/director/debugger/dt-score.cpp
diff --git a/engines/director/debugger/dt-internal.h b/engines/director/debugger/dt-internal.h
index a5d26b6ca7f..08754f918ac 100644
--- a/engines/director/debugger/dt-internal.h
+++ b/engines/director/debugger/dt-internal.h
@@ -203,7 +203,7 @@ typedef struct ImGuiState {
} _hoveredScoreCast;
Common::Array<Common::Array<Common::Pair<uint, uint>>> _continuationData;
- bool _loadedContinuationData = false;
+ Common::String _loadedContinuationData;
Common::String _scoreWindow;
int _scoreMode = 0;
diff --git a/engines/director/debugger/dt-score.cpp b/engines/director/debugger/dt-score.cpp
index 57c116f8b35..fce98b2f46d 100644
--- a/engines/director/debugger/dt-score.cpp
+++ b/engines/director/debugger/dt-score.cpp
@@ -49,12 +49,15 @@ const char *modes2[] = {
#define FRAME_PAGE_SIZE 100
-static void buildContinuationData() {
- if (_state->_loadedContinuationData) {
+static void buildContinuationData(Window *window) {
+ if (_state->_loadedContinuationData == window->getCurrentMovie()->getMacName()) {
return;
}
- Score *score = g_director->getCurrentMovie()->getScore();
+ _state->_scorePageSlider = 0;
+ _state->_continuationData.clear();
+
+ Score *score = window->getCurrentMovie()->getScore();
uint numFrames = score->_scoreCache.size();
uint numChannels = score->_scoreCache[0]->_sprites.size();
@@ -120,11 +123,11 @@ static void buildContinuationData() {
}
}
- _state->_loadedContinuationData = true;
+ _state->_loadedContinuationData = window->getCurrentMovie()->getMacName();
}
-static void displayScoreChannel(int ch, int mode, int modeSel) {
- Score *score = g_director->getCurrentMovie()->getScore();
+static void displayScoreChannel(int ch, int mode, int modeSel, Window *window) {
+ Score *score = window->getCurrentMovie()->getScore();
uint numFrames = score->_scoreCache.size();
const uint currentFrameNum = score->getCurrentFrameNum();
@@ -152,7 +155,7 @@ static void displayScoreChannel(int ch, int mode, int modeSel) {
if (mode == kModeMember) {
score->_channels[ch]->_visible = !score->_channels[ch]->_visible;
- g_director->getCurrentWindow()->render(true);
+ window->render(true);
}
}
@@ -337,7 +340,7 @@ static void displayScoreChannel(int ch, int mode, int modeSel) {
else
_state->_selectedChannel = ch;
- g_director->getCurrentWindow()->render(true);
+ window->render(true);
}
}
@@ -350,9 +353,10 @@ static void displayScoreChannel(int ch, int mode, int modeSel) {
ImGui::PopFont();
}
-void windowList(Common::String *target) {
+Window *windowList(Common::String *target) {
const Common::Array<Window *> *windowList = g_director->getWindowList();
const Common::String selWin = *target;
+ Window *res = nullptr;
Common::String stage = g_director->getStage()->getCurrentMovie()->getMacName();
@@ -362,13 +366,16 @@ void windowList(Common::String *target) {
if (window->getCurrentMovie()->getMacName() == selWin) {
// Found the selected window
found = true;
+ res = window;
break;
}
}
// Our default is Stage
- if (selWin.empty() || windowList->empty() || !found)
+ if (selWin.empty() || windowList->empty() || !found) {
*target = stage;
+ res = g_director->getStage();
+ }
ImGui::Text("Window:");
ImGui::SameLine();
@@ -378,28 +385,35 @@ void windowList(Common::String *target) {
if (ImGui::Selectable(stage.c_str(), selected))
*target = stage;
- if (selected)
+ if (selected) {
ImGui::SetItemDefaultFocus();
+ res = g_director->getStage();
+ }
for (auto window : (*windowList)) {
Common::String winName = window->getCurrentMovie()->getMacName();
selected = (*target == winName);
- if (ImGui::Selectable(winName.c_str(), selected))
+ if (ImGui::Selectable(winName.c_str(), selected)) {
*target = winName;
+ res = window;
+ }
- if (selected)
+ if (selected) {
ImGui::SetItemDefaultFocus();
+ res = window;
+ }
+
}
ImGui::EndCombo();
}
+
+ return res;
}
void showScore() {
if (!_state->_w.score)
return;
- buildContinuationData();
-
ImVec2 pos(40, 40);
ImGui::SetNextWindowPos(pos, ImGuiCond_FirstUseEver);
@@ -407,11 +421,13 @@ void showScore() {
ImGui::SetNextWindowSize(windowSize, ImGuiCond_FirstUseEver);
if (ImGui::Begin("Score", &_state->_w.score)) {
- windowList(&_state->_scoreWindow);
+ Window *selectedWindow = windowList(&_state->_scoreWindow);
- Score *score = g_director->getCurrentMovie()->getScore();
+ buildContinuationData(selectedWindow);
+
+ Score *score = selectedWindow->getCurrentMovie()->getScore();
uint numFrames = score->_scoreCache.size();
- Cast *cast = g_director->getCurrentMovie()->getCast();
+ Cast *cast = selectedWindow->getCurrentMovie()->getCast();
if (!numFrames) {
ImGui::Text("No frames");
@@ -709,12 +725,12 @@ void showScore() {
}
{
- displayScoreChannel(0, kChTempo, 0);
- displayScoreChannel(0, kChPalette, 0);
- displayScoreChannel(0, kChTransition, 0);
- displayScoreChannel(0, kChSound1, 0);
- displayScoreChannel(0, kChSound2, 0);
- displayScoreChannel(0, kChScript, 0);
+ displayScoreChannel(0, kChTempo, 0, selectedWindow);
+ displayScoreChannel(0, kChPalette, 0, selectedWindow);
+ displayScoreChannel(0, kChTransition, 0, selectedWindow);
+ displayScoreChannel(0, kChSound1, 0, selectedWindow);
+ displayScoreChannel(0, kChSound2, 0, selectedWindow);
+ displayScoreChannel(0, kChScript, 0, selectedWindow);
}
ImGui::TableNextRow();
@@ -722,22 +738,22 @@ void showScore() {
for (int ch = 0; ch < (int)numChannels - 1; ch++) {
if (mode == kModeExtended) // This will render empty row
- displayScoreChannel(ch + 1, kModeExtended, _state->_scoreMode);
+ displayScoreChannel(ch + 1, kModeExtended, _state->_scoreMode, selectedWindow);
if (mode == kModeMember || mode == kModeExtended)
- displayScoreChannel(ch + 1, kModeMember, _state->_scoreMode);
+ displayScoreChannel(ch + 1, kModeMember, _state->_scoreMode, selectedWindow);
if (mode == kModeBehavior || mode == kModeExtended)
- displayScoreChannel(ch + 1, kModeBehavior, _state->_scoreMode);
+ displayScoreChannel(ch + 1, kModeBehavior, _state->_scoreMode, selectedWindow);
if (mode == kModeInk || mode == kModeExtended)
- displayScoreChannel(ch + 1, kModeInk, _state->_scoreMode);
+ displayScoreChannel(ch + 1, kModeInk, _state->_scoreMode, selectedWindow);
if (mode == kModeBlend || mode == kModeExtended)
- displayScoreChannel(ch + 1, kModeBlend, _state->_scoreMode);
+ displayScoreChannel(ch + 1, kModeBlend, _state->_scoreMode, selectedWindow);
if (mode == kModeLocation || mode == kModeExtended)
- displayScoreChannel(ch + 1, kModeLocation, _state->_scoreMode);
+ displayScoreChannel(ch + 1, kModeLocation, _state->_scoreMode, selectedWindow);
}
ImGui::EndTable();
}
Commit: 30408be51cf36844c9f4d6d8bf44cd23ef7a6386
https://github.com/scummvm/scummvm/commit/30408be51cf36844c9f4d6d8bf44cd23ef7a6386
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-09T16:32:33+02:00
Commit Message:
DIRECTOR: DT: Added window selection to Channels view
Changed paths:
engines/director/debugger/dt-score.cpp
diff --git a/engines/director/debugger/dt-score.cpp b/engines/director/debugger/dt-score.cpp
index fce98b2f46d..2b7d9c42d25 100644
--- a/engines/director/debugger/dt-score.cpp
+++ b/engines/director/debugger/dt-score.cpp
@@ -353,7 +353,7 @@ static void displayScoreChannel(int ch, int mode, int modeSel, Window *window) {
ImGui::PopFont();
}
-Window *windowList(Common::String *target) {
+Window *windowListCombo(Common::String *target) {
const Common::Array<Window *> *windowList = g_director->getWindowList();
const Common::String selWin = *target;
Window *res = nullptr;
@@ -421,7 +421,7 @@ void showScore() {
ImGui::SetNextWindowSize(windowSize, ImGuiCond_FirstUseEver);
if (ImGui::Begin("Score", &_state->_w.score)) {
- Window *selectedWindow = windowList(&_state->_scoreWindow);
+ Window *selectedWindow = windowListCombo(&_state->_scoreWindow);
buildContinuationData(selectedWindow);
@@ -788,10 +788,12 @@ void showChannels() {
ImGui::SetNextWindowSize(windowSize, ImGuiCond_FirstUseEver);
if (ImGui::Begin("Channels", &_state->_w.channels)) {
- Score *score = g_director->getCurrentMovie()->getScore();
+ Window *selectedWindow = windowListCombo(&_state->_scoreWindow);
+
+ Score *score = selectedWindow->getCurrentMovie()->getScore();
const Frame &frame = *score->_currentFrame;
- CastMemberID defaultPalette = g_director->getCurrentMovie()->_defaultPalette;
+ CastMemberID defaultPalette = selectedWindow->getCurrentMovie()->_defaultPalette;
ImGui::Text("TMPO: tempo: %d, skipFrameFlag: %d, blend: %d, currentFPS: %d",
frame._mainChannels.tempo, frame._mainChannels.skipFrameFlag, frame._mainChannels.blend, score->_currentFrameRate);
if (!frame._mainChannels.palette.paletteId.isNull()) {
@@ -854,7 +856,7 @@ void showChannels() {
if (ImGui::IsItemClicked(0)) {
score->_channels[i]->_visible = !score->_channels[i]->_visible;
- g_director->getCurrentWindow()->render(true);
+ selectedWindow->render(true);
}
if (score->_channels[i]->_visible)
@@ -875,7 +877,7 @@ void showChannels() {
_state->_selectedChannel = i + 1;
}
- g_director->getCurrentWindow()->render(true);
+ selectedWindow->render(true);
}
ImGui::TableNextColumn();
Commit: 06d8e7657a964136826bc3508f14e20864480ed0
https://github.com/scummvm/scummvm/commit/06d8e7657a964136826bc3508f14e20864480ed0
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-09T16:36:03+02:00
Commit Message:
DIRECTOR: DT: Made Channels window more usable
Changed paths:
engines/director/debugger/dt-score.cpp
diff --git a/engines/director/debugger/dt-score.cpp b/engines/director/debugger/dt-score.cpp
index 2b7d9c42d25..66ec95bad15 100644
--- a/engines/director/debugger/dt-score.cpp
+++ b/engines/director/debugger/dt-score.cpp
@@ -810,7 +810,7 @@ void showChannels() {
ImGui::Text("SND: 2 sound2: %d, soundType2: %d", frame._mainChannels.sound2.member, frame._mainChannels.soundType2);
ImGui::Text("LSCR: actionId: %s", frame._mainChannels.actionId.asString().c_str());
- if (ImGui::BeginTable("Channels", 22, ImGuiTableFlags_Borders)) {
+ if (ImGui::BeginTable("Channels", 22, ImGuiTableFlags_Borders | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg)) {
ImGuiTableFlags flags = ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_AngledHeader;
ImGui::TableSetupColumn("##toggle", flags);
ImGui::TableSetupColumn("CH", flags);
Commit: 1d316e9c4f6781027778560902d3b75bad8a3073
https://github.com/scummvm/scummvm/commit/1d316e9c4f6781027778560902d3b75bad8a3073
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-09T16:43:12+02:00
Commit Message:
DIRECTOR: DT: Added window selection to the Cast window
Changed paths:
engines/director/debugger/debugtools.cpp
engines/director/debugger/dt-cast.cpp
engines/director/debugger/dt-internal.h
engines/director/debugger/dt-save-state.cpp
engines/director/debugger/dt-score.cpp
diff --git a/engines/director/debugger/debugtools.cpp b/engines/director/debugger/debugtools.cpp
index af2d7595912..9f7226b00de 100644
--- a/engines/director/debugger/debugtools.cpp
+++ b/engines/director/debugger/debugtools.cpp
@@ -410,6 +410,63 @@ ImColor brightenColor(const ImColor& color, float factor) {
return ImColor(col);
}
+Window *windowListCombo(Common::String *target) {
+ const Common::Array<Window *> *windowList = g_director->getWindowList();
+ const Common::String selWin = *target;
+ Window *res = nullptr;
+
+ Common::String stage = g_director->getStage()->getCurrentMovie()->getMacName();
+
+ // Check if the relevant window is gone
+ bool found = false;
+ for (auto window : (*windowList)) {
+ if (window->getCurrentMovie()->getMacName() == selWin) {
+ // Found the selected window
+ found = true;
+ res = window;
+ break;
+ }
+ }
+
+ // Our default is Stage
+ if (selWin.empty() || windowList->empty() || !found) {
+ *target = stage;
+ res = g_director->getStage();
+ }
+
+ ImGui::Text("Window:");
+ ImGui::SameLine();
+
+ if (ImGui::BeginCombo("##window", selWin.c_str())) {
+ bool selected = (*target == stage);
+ if (ImGui::Selectable(stage.c_str(), selected))
+ *target = stage;
+
+ if (selected) {
+ ImGui::SetItemDefaultFocus();
+ res = g_director->getStage();
+ }
+
+ for (auto window : (*windowList)) {
+ Common::String winName = window->getCurrentMovie()->getMacName();
+ selected = (*target == winName);
+ if (ImGui::Selectable(winName.c_str(), selected)) {
+ *target = winName;
+ res = window;
+ }
+
+ if (selected) {
+ ImGui::SetItemDefaultFocus();
+ res = window;
+ }
+
+ }
+ ImGui::EndCombo();
+ }
+
+ return res;
+}
+
static void showSettings() {
if (!_state->_w.settings)
return;
diff --git a/engines/director/debugger/dt-cast.cpp b/engines/director/debugger/dt-cast.cpp
index 3d4a6eeddbc..3cce2d83d3f 100644
--- a/engines/director/debugger/dt-cast.cpp
+++ b/engines/director/debugger/dt-cast.cpp
@@ -32,6 +32,7 @@
#include "director/castmember/script.h"
#include "director/movie.h"
#include "director/types.h"
+#include "director/window.h"
namespace Director {
namespace DT {
@@ -116,6 +117,8 @@ void showCast() {
ImGui::SetNextWindowSize(ImVec2(480, 480), ImGuiCond_FirstUseEver);
if (ImGui::Begin("Cast", &_state->_w.cast)) {
+ Window *selectedWindow = windowListCombo(&_state->_castWindow);
+
// display a toolbar with: grid/list/filters buttons + name filter
ImGuiEx::toggleButton(ICON_MS_LIST, &_state->_cast._listView);
ImGui::SetItemTooltip("List");
@@ -146,7 +149,7 @@ void showCast() {
// display a list or a grid
const float sliderHeight = _state->_cast._listView ? 0.f : 38.f;
const ImVec2 childsize = ImGui::GetContentRegionAvail();
- Movie *movie = g_director->getCurrentMovie();
+ Movie *movie = selectedWindow->getCurrentMovie();
ImGui::BeginChild("##cast", ImVec2(childsize.x, childsize.y - sliderHeight));
if (_state->_cast._listView) {
if (ImGui::BeginTable("Resources", 5, ImGuiTableFlags_Borders | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Resizable | ImGuiTableFlags_RowBg)) {
diff --git a/engines/director/debugger/dt-internal.h b/engines/director/debugger/dt-internal.h
index 08754f918ac..84b31699530 100644
--- a/engines/director/debugger/dt-internal.h
+++ b/engines/director/debugger/dt-internal.h
@@ -206,6 +206,8 @@ typedef struct ImGuiState {
Common::String _loadedContinuationData;
Common::String _scoreWindow;
+ Common::String _channelsWindow;
+ Common::String _castWindow;
int _scoreMode = 0;
int _scoreFrameOffset = 1;
int _scorePageSlider = 0;
@@ -243,6 +245,7 @@ void showImage(const ImGuiImage &image, const char *name, float thumbnailSize);
ImVec4 convertColor(uint32 color);
void displayVariable(const Common::String &name, bool changed, bool outOfScope = false);
ImColor brightenColor(const ImColor &color, float factor);
+Window *windowListCombo(Common::String *target);
Common::String formatHandlerName(int scriptId, int castId, Common::String handlerName, ScriptType scriptType, bool childScript);
void showCast(); // dt-cast.cpp
diff --git a/engines/director/debugger/dt-save-state.cpp b/engines/director/debugger/dt-save-state.cpp
index eb8c932f6bb..4bab8cc1f96 100644
--- a/engines/director/debugger/dt-save-state.cpp
+++ b/engines/director/debugger/dt-save-state.cpp
@@ -92,6 +92,8 @@ void saveCurrentState() {
// Other settings
json["ScoreWindow"] = new Common::JSONValue(_state->_scoreWindow);
+ json["ChannelsWindow"] = new Common::JSONValue(_state->_channelsWindow);
+ json["CastWindow"] = new Common::JSONValue(_state->_castWindow);
// Save the JSON
Common::JSONValue save(json);
@@ -173,6 +175,8 @@ void loadSavedState() {
// Load other settings
_state->_scoreWindow = saved->asObject()["ScoreWindow"]->asString();
+ _state->_channelsWindow = saved->asObject()["ChannelsWindow"]->asString();
+ _state->_castWindow = saved->asObject()["CastWindow"]->asString();
free(data);
delete saved;
diff --git a/engines/director/debugger/dt-score.cpp b/engines/director/debugger/dt-score.cpp
index 66ec95bad15..e3b576bb962 100644
--- a/engines/director/debugger/dt-score.cpp
+++ b/engines/director/debugger/dt-score.cpp
@@ -353,63 +353,6 @@ static void displayScoreChannel(int ch, int mode, int modeSel, Window *window) {
ImGui::PopFont();
}
-Window *windowListCombo(Common::String *target) {
- const Common::Array<Window *> *windowList = g_director->getWindowList();
- const Common::String selWin = *target;
- Window *res = nullptr;
-
- Common::String stage = g_director->getStage()->getCurrentMovie()->getMacName();
-
- // Check if the relevant window is gone
- bool found = false;
- for (auto window : (*windowList)) {
- if (window->getCurrentMovie()->getMacName() == selWin) {
- // Found the selected window
- found = true;
- res = window;
- break;
- }
- }
-
- // Our default is Stage
- if (selWin.empty() || windowList->empty() || !found) {
- *target = stage;
- res = g_director->getStage();
- }
-
- ImGui::Text("Window:");
- ImGui::SameLine();
-
- if (ImGui::BeginCombo("##window", selWin.c_str())) {
- bool selected = (*target == stage);
- if (ImGui::Selectable(stage.c_str(), selected))
- *target = stage;
-
- if (selected) {
- ImGui::SetItemDefaultFocus();
- res = g_director->getStage();
- }
-
- for (auto window : (*windowList)) {
- Common::String winName = window->getCurrentMovie()->getMacName();
- selected = (*target == winName);
- if (ImGui::Selectable(winName.c_str(), selected)) {
- *target = winName;
- res = window;
- }
-
- if (selected) {
- ImGui::SetItemDefaultFocus();
- res = window;
- }
-
- }
- ImGui::EndCombo();
- }
-
- return res;
-}
-
void showScore() {
if (!_state->_w.score)
return;
More information about the Scummvm-git-logs
mailing list