[Scummvm-git-logs] scummvm master -> 3f62f198ac9a36e02f59cab5b084677266b4548b
dreammaster
dreammaster at scummvm.org
Tue Mar 2 05:12:52 UTC 2021
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
acf3a6e080 AGS: Move overlay.cpp globals to Globals
67d0560a52 AGS: Move fonts.cpp globals to Globals
3f62f198ac AGS: Move Lines global to Globals fontLines
Commit: acf3a6e080c7ffd26e05966f9ef4ae1f628e5a5b
https://github.com/scummvm/scummvm/commit/acf3a6e080c7ffd26e05966f9ef4ae1f628e5a5b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-03-01T19:52:51-08:00
Commit Message:
AGS: Move overlay.cpp globals to Globals
Changed paths:
engines/ags/engine/ac/character.cpp
engines/ags/engine/ac/display.cpp
engines/ags/engine/ac/draw.cpp
engines/ags/engine/ac/dynobj/scriptoverlay.cpp
engines/ags/engine/ac/game.cpp
engines/ags/engine/ac/global_character.cpp
engines/ags/engine/ac/global_overlay.cpp
engines/ags/engine/ac/gui.cpp
engines/ags/engine/ac/overlay.cpp
engines/ags/engine/ac/overlay.h
engines/ags/engine/game/savegame.cpp
engines/ags/engine/game/savegame_components.cpp
engines/ags/engine/main/game_run.cpp
engines/ags/engine/main/update.cpp
engines/ags/globals.cpp
engines/ags/globals.h
diff --git a/engines/ags/engine/ac/character.cpp b/engines/ags/engine/ac/character.cpp
index 52f411b6e5..8a4729b83a 100644
--- a/engines/ags/engine/ac/character.cpp
+++ b/engines/ags/engine/ac/character.cpp
@@ -80,24 +80,16 @@ namespace AGS3 {
using namespace AGS::Shared;
extern int displayed_room, starting_room;
-
-
-
extern RoomObject *objs;
-
extern Bitmap *walkable_areas_temp;
extern IGraphicsDriver *gfxDriver;
extern Bitmap **actsps;
-extern int is_text_overlay;
extern int said_speech_line;
extern int said_text;
extern int our_eip;
-
-
//--------------------------------
-
CharacterExtras *charextra;
CharacterInfo *playerchar;
int32_t _sc_PlayerCharPtr = 0;
@@ -759,7 +751,7 @@ ScriptOverlay *Character_SayBackground(CharacterInfo *chaa, const char *texx) {
scOver->borderWidth = 0;
scOver->isBackgroundSpeech = 1;
int handl = ccRegisterManagedObject(scOver, scOver);
- screenover[ovri].associatedOverlayHandle = handl;
+ _GP(screenover)[ovri].associatedOverlayHandle = handl;
return scOver;
}
@@ -2299,7 +2291,7 @@ void _displayspeech(const char *texx, int aschar, int xx, int yy, int widd, int
if ((speakingChar->view < 0) || (speakingChar->view >= _GP(game).numviews))
quit("!DisplaySpeech: character has invalid view");
- if (is_text_overlay > 0) {
+ if (_G(is_text_overlay) > 0) {
debug_script_warn("DisplaySpeech: speech was already displayed (nested DisplaySpeech, perhaps room script and global script conflict?)");
return;
}
@@ -2310,9 +2302,9 @@ void _displayspeech(const char *texx, int aschar, int xx, int yy, int widd, int
if (_GP(play).bgspeech_stay_on_display == 0) {
// remove any background speech
- for (size_t i = 0; i < screenover.size();) {
- if (screenover[i].timeout > 0)
- remove_screen_overlay(screenover[i].type);
+ for (size_t i = 0; i < _GP(screenover).size();) {
+ if (_GP(screenover)[i].timeout > 0)
+ remove_screen_overlay(_GP(screenover)[i].type);
else
i++;
}
diff --git a/engines/ags/engine/ac/display.cpp b/engines/ags/engine/ac/display.cpp
index 473c93e55e..0fa620164f 100644
--- a/engines/ags/engine/ac/display.cpp
+++ b/engines/ags/engine/ac/display.cpp
@@ -250,7 +250,7 @@ int _display_main(int xx, int yy, int wii, const char *text, int disp_type, int
// we should not delete text_window_ds here, because it is now owned by Overlay
if (disp_type >= DISPLAYTEXT_NORMALOVERLAY) {
- return screenover[nse].type;
+ return _GP(screenover)[nse].type;
}
//
@@ -329,10 +329,10 @@ int _display_main(int xx, int yy, int wii, const char *text, int disp_type, int
_GP(play).messagetime = 2;
if (!overlayPositionFixed) {
- screenover[nse].positionRelativeToScreen = false;
- VpPoint vpt = _GP(play).GetRoomViewport(0)->ScreenToRoom(screenover[nse].x, screenover[nse].y, false);
- screenover[nse].x = vpt.first.X;
- screenover[nse].y = vpt.first.Y;
+ _GP(screenover)[nse].positionRelativeToScreen = false;
+ VpPoint vpt = _GP(play).GetRoomViewport(0)->ScreenToRoom(_GP(screenover)[nse].x, _GP(screenover)[nse].y, false);
+ _GP(screenover)[nse].x = vpt.first.X;
+ _GP(screenover)[nse].y = vpt.first.Y;
}
GameLoopUntilNoOverlay();
diff --git a/engines/ags/engine/ac/draw.cpp b/engines/ags/engine/ac/draw.cpp
index 2b14a1f5d8..2eff167d83 100644
--- a/engines/ags/engine/ac/draw.cpp
+++ b/engines/ags/engine/ac/draw.cpp
@@ -115,7 +115,6 @@ extern int displayed_room;
extern CharacterExtras *charextra;
extern CharacterInfo *playerchar;
extern int eip_guinum;
-extern int is_complete_overlay;
extern int cur_mode, cur_cursor;
extern int mouse_frame, mouse_delay;
extern int lastmx, lastmy;
@@ -1942,7 +1941,7 @@ void draw_gui_and_overlays() {
add_thing_to_draw(nullptr, AGSE_PREGUIDRAW, 0, TRANS_RUN_PLUGIN, false);
// draw overlays, except text boxes and portraits
- for (const auto &over : screenover) {
+ for (const auto &over : _GP(screenover)) {
// complete overlay draw in non-transparent mode
if (over.type == OVER_COMPLETE)
add_thing_to_draw(over.bmp, over.x, over.y, TRANS_OPAQUE, false);
@@ -2021,7 +2020,7 @@ void draw_gui_and_overlays() {
}
// draw speech and portraits (so that they appear over GUIs)
- for (const auto &over : screenover) {
+ for (const auto &over : _GP(screenover)) {
if (over.type == OVER_TEXTMSG || over.type == OVER_PICTURE) {
int tdxp, tdyp;
get_overlay_position(over, &tdxp, &tdyp);
@@ -2158,7 +2157,7 @@ void construct_game_scene(bool full_redraw) {
_GP(play).UpdateRoomCameras();
// Stage: room viewports
- if (_GP(play).screen_is_faded_out == 0 && is_complete_overlay == 0) {
+ if (_GP(play).screen_is_faded_out == 0 && _G(is_complete_overlay) == 0) {
if (displayed_room >= 0) {
construct_room_view();
} else if (!gfxDriver->RequiresFullRedrawEachFrame()) {
diff --git a/engines/ags/engine/ac/dynobj/scriptoverlay.cpp b/engines/ags/engine/ac/dynobj/scriptoverlay.cpp
index 918538a426..673224f4de 100644
--- a/engines/ags/engine/ac/dynobj/scriptoverlay.cpp
+++ b/engines/ags/engine/ac/dynobj/scriptoverlay.cpp
@@ -25,6 +25,7 @@
#include "ags/engine/ac/overlay.h"
#include "ags/engine/ac/runtime_defines.h"
#include "ags/engine/ac/screenoverlay.h"
+#include "ags/globals.h"
namespace AGS3 {
@@ -34,7 +35,7 @@ int ScriptOverlay::Dispose(const char *address, bool force) {
// with that handle later
int overlayIndex = find_overlay_of_type(overlayId);
if (overlayIndex >= 0) {
- screenover[overlayIndex].associatedOverlayHandle = 0;
+ _GP(screenover)[overlayIndex].associatedOverlayHandle = 0;
}
// if this is being removed voluntarily (ie. pointer out of
diff --git a/engines/ags/engine/ac/game.cpp b/engines/ags/engine/ac/game.cpp
index 3771db6864..eb8a0733c4 100644
--- a/engines/ags/engine/ac/game.cpp
+++ b/engines/ags/engine/ac/game.cpp
@@ -124,8 +124,6 @@ extern int mouse_ifacebut_xoffs, mouse_ifacebut_yoffs;
extern AnimatingGUIButton animbuts[MAX_ANIMATING_BUTTONS];
extern int numAnimButs;
-extern int is_complete_overlay, is_text_overlay;
-
#if AGS_PLATFORM_OS_IOS || AGS_PLATFORM_OS_ANDROID
extern int _G(psp_gfx_renderer);
#endif
@@ -1257,16 +1255,16 @@ void restore_game_ambientsounds(Stream *in, RestoredData &r_data) {
void ReadOverlays_Aligned(Stream *in) {
AlignedStream align_s(in, Shared::kAligned_Read);
- for (auto &over : screenover) {
+ for (auto &over : _GP(screenover)) {
over.ReadFromFile(&align_s, 0);
align_s.Reset();
}
}
void restore_game_overlays(Stream *in) {
- screenover.resize(in->ReadInt32());
+ _GP(screenover).resize(in->ReadInt32());
ReadOverlays_Aligned(in);
- for (auto &over : screenover) {
+ for (auto &over : _GP(screenover)) {
if (over.hasSerializedBitmap)
over.pic = read_serialized_bitmap(in);
}
@@ -1603,7 +1601,7 @@ void start_skipping_cutscene() {
remove_popup_interface(ifacepopped);
// if a text message is currently displayed, remove it
- if (is_text_overlay > 0)
+ if (_G(is_text_overlay) > 0)
remove_screen_overlay(OVER_TEXTMSG);
}
diff --git a/engines/ags/engine/ac/global_character.cpp b/engines/ags/engine/ac/global_character.cpp
index 1be04f2ff7..643e5b7ad6 100644
--- a/engines/ags/engine/ac/global_character.cpp
+++ b/engines/ags/engine/ac/global_character.cpp
@@ -544,8 +544,8 @@ void DisplaySpeechAt(int xx, int yy, int wii, int aschar, const char *spch) {
int DisplaySpeechBackground(int charid, const char *speel) {
// remove any previous background speech for this character
- for (size_t i = 0; i < screenover.size();) {
- if (screenover[i].bgSpeechForChar == charid)
+ for (size_t i = 0; i < _GP(screenover).size();) {
+ if (_GP(screenover)[i].bgSpeechForChar == charid)
remove_screen_overlay_index(i);
else
i++;
@@ -555,8 +555,8 @@ int DisplaySpeechBackground(int charid, const char *speel) {
-_GP(game).chars[charid].talkcolor, get_translation(speel), DISPLAYTEXT_NORMALOVERLAY);
int scid = find_overlay_of_type(ovrl);
- screenover[scid].bgSpeechForChar = charid;
- screenover[scid].timeout = GetTextDisplayTime(speel, 1);
+ _GP(screenover)[scid].bgSpeechForChar = charid;
+ _GP(screenover)[scid].timeout = GetTextDisplayTime(speel, 1);
return ovrl;
}
diff --git a/engines/ags/engine/ac/global_overlay.cpp b/engines/ags/engine/ac/global_overlay.cpp
index 8914dea296..30fb81ba79 100644
--- a/engines/ags/engine/ac/global_overlay.cpp
+++ b/engines/ags/engine/ac/global_overlay.cpp
@@ -55,7 +55,7 @@ int CreateGraphicOverlay(int xx, int yy, int slott, int trans) {
wputblock(screeno, 0, 0, _GP(spriteset)[slott], trans);
bool hasAlpha = (_GP(game).SpriteInfos[slott].Flags & SPF_ALPHACHANNEL) != 0;
int nse = add_screen_overlay(xx, yy, OVER_CUSTOM, screeno, hasAlpha);
- return screenover[nse].type;
+ return _GP(screenover)[nse].type;
}
int CreateTextOverlayCore(int xx, int yy, int wii, int fontid, int text_color, const char *text, int disp_type, int allowShrink) {
@@ -89,8 +89,8 @@ void MoveOverlay(int ovrid, int newx, int newy) {
int ovri = find_overlay_of_type(ovrid);
if (ovri < 0) quit("!MoveOverlay: invalid overlay ID specified");
- screenover[ovri].x = newx;
- screenover[ovri].y = newy;
+ _GP(screenover)[ovri].x = newx;
+ _GP(screenover)[ovri].y = newy;
}
int IsOverlayValid(int ovrid) {
diff --git a/engines/ags/engine/ac/gui.cpp b/engines/ags/engine/ac/gui.cpp
index 65d566bc58..fca9d3750e 100644
--- a/engines/ags/engine/ac/gui.cpp
+++ b/engines/ags/engine/ac/gui.cpp
@@ -570,8 +570,6 @@ void recreate_guibg_image(GUIMain *tehgui) {
}
}
-extern int is_complete_overlay;
-
int gui_get_interactable(int x, int y) {
if ((_GP(game).options[OPT_DISABLEOFF] == 3) && (all_buttons_disabled > 0))
return -1;
@@ -591,7 +589,7 @@ int gui_on_mouse_move() {
if (_GP(guis)[guin].IsInteractableAt(_G(mousex), _G(mousey))) mouse_over_gui = guin;
if (_GP(guis)[guin].PopupStyle != kGUIPopupMouseY) continue;
- if (is_complete_overlay > 0) break; // interfaces disabled
+ if (_G(is_complete_overlay) > 0) break; // interfaces disabled
// if (_GP(play).disabled_user_interface>0) break;
if (ifacepopped == guin) continue;
if (!_GP(guis)[guin].IsVisible()) continue;
diff --git a/engines/ags/engine/ac/overlay.cpp b/engines/ags/engine/ac/overlay.cpp
index a2810573cf..3b238377e4 100644
--- a/engines/ags/engine/ac/overlay.cpp
+++ b/engines/ags/engine/ac/overlay.cpp
@@ -53,9 +53,6 @@ extern int face_talking;
extern CharacterExtras *charextra;
extern IGraphicsDriver *gfxDriver;
-std::vector<ScreenOverlay> screenover;
-int is_complete_overlay = 0, is_text_overlay = 0;
-
void Overlay_Remove(ScriptOverlay *sco) {
sco->Remove();
}
@@ -64,8 +61,8 @@ void Overlay_SetText(ScriptOverlay *scover, int wii, int fontid, int text_color,
int ovri = find_overlay_of_type(scover->overlayId);
if (ovri < 0)
quit("!Overlay.SetText: invalid overlay ID specified");
- int xx = game_to_data_coord(screenover[ovri].x) - scover->borderWidth;
- int yy = game_to_data_coord(screenover[ovri].y) - scover->borderHeight;
+ int xx = game_to_data_coord(_GP(screenover)[ovri].x) - scover->borderWidth;
+ int yy = game_to_data_coord(_GP(screenover)[ovri].y) - scover->borderHeight;
RemoveOverlay(scover->overlayId);
const int disp_type = scover->overlayId;
@@ -80,7 +77,7 @@ int Overlay_GetX(ScriptOverlay *scover) {
quit("!invalid overlay ID specified");
int tdxp, tdyp;
- get_overlay_position(screenover[ovri], &tdxp, &tdyp);
+ get_overlay_position(_GP(screenover)[ovri], &tdxp, &tdyp);
return game_to_data_coord(tdxp);
}
@@ -90,7 +87,7 @@ void Overlay_SetX(ScriptOverlay *scover, int newx) {
if (ovri < 0)
quit("!invalid overlay ID specified");
- screenover[ovri].x = data_to_game_coord(newx);
+ _GP(screenover)[ovri].x = data_to_game_coord(newx);
}
int Overlay_GetY(ScriptOverlay *scover) {
@@ -99,7 +96,7 @@ int Overlay_GetY(ScriptOverlay *scover) {
quit("!invalid overlay ID specified");
int tdxp, tdyp;
- get_overlay_position(screenover[ovri], &tdxp, &tdyp);
+ get_overlay_position(_GP(screenover)[ovri], &tdxp, &tdyp);
return game_to_data_coord(tdyp);
}
@@ -109,7 +106,7 @@ void Overlay_SetY(ScriptOverlay *scover, int newy) {
if (ovri < 0)
quit("!invalid overlay ID specified");
- screenover[ovri].y = data_to_game_coord(newy);
+ _GP(screenover)[ovri].y = data_to_game_coord(newy);
}
int Overlay_GetValid(ScriptOverlay *scover) {
@@ -144,8 +141,8 @@ ScriptOverlay *Overlay_CreateTextual(int x, int y, int width, int font, int colo
sco->overlayId = CreateTextOverlayCore(x, y, width, font, colour, text, DISPLAYTEXT_NORMALOVERLAY, 0);
int ovri = find_overlay_of_type(sco->overlayId);
- sco->borderWidth = game_to_data_coord(screenover[ovri].x - x);
- sco->borderHeight = game_to_data_coord(screenover[ovri].y - y);
+ sco->borderWidth = game_to_data_coord(_GP(screenover)[ovri].x - x);
+ sco->borderHeight = game_to_data_coord(_GP(screenover)[ovri].y - y);
sco->isBackgroundSpeech = 0;
ccRegisterManagedObject(sco, sco);
@@ -167,11 +164,11 @@ void dispose_overlay(ScreenOverlay &over) {
}
void remove_screen_overlay_index(size_t over_idx) {
- ScreenOverlay &over = screenover[over_idx];
+ ScreenOverlay &over = _GP(screenover)[over_idx];
dispose_overlay(over);
- if (over.type == OVER_COMPLETE) is_complete_overlay--;
- if (over.type == OVER_TEXTMSG) is_text_overlay--;
- screenover.erase(screenover.begin() + over_idx);
+ if (over.type == OVER_COMPLETE) _G(is_complete_overlay)--;
+ if (over.type == OVER_TEXTMSG) _G(is_text_overlay)--;
+ _GP(screenover).erase(_GP(screenover).begin() + over_idx);
// if an overlay before the sierra-style speech one is removed,
// update the index
if (face_talking >= 0 && (size_t)face_talking > over_idx)
@@ -179,8 +176,8 @@ void remove_screen_overlay_index(size_t over_idx) {
}
void remove_screen_overlay(int type) {
- for (size_t i = 0; i < screenover.size();) {
- if (type < 0 || screenover[i].type == type)
+ for (size_t i = 0; i < _GP(screenover).size();) {
+ if (type < 0 || _GP(screenover)[i].type == type)
remove_screen_overlay_index(i);
else
i++;
@@ -188,8 +185,8 @@ void remove_screen_overlay(int type) {
}
int find_overlay_of_type(int type) {
- for (size_t i = 0; i < screenover.size(); ++i) {
- if (screenover[i].type == type) return i;
+ for (size_t i = 0; i < _GP(screenover).size(); ++i) {
+ if (_GP(screenover)[i].type == type) return i;
}
return -1;
}
@@ -199,11 +196,11 @@ size_t add_screen_overlay(int x, int y, int type, Bitmap *piccy, bool alphaChann
}
size_t add_screen_overlay(int x, int y, int type, Shared::Bitmap *piccy, int pic_offx, int pic_offy, bool alphaChannel) {
- if (type == OVER_COMPLETE) is_complete_overlay++;
- if (type == OVER_TEXTMSG) is_text_overlay++;
+ if (type == OVER_COMPLETE) _G(is_complete_overlay)++;
+ if (type == OVER_TEXTMSG) _G(is_text_overlay)++;
if (type == OVER_CUSTOM) {
// find an unused custom ID; TODO: find a better approach!
- for (int id = OVER_CUSTOM + 1; id < (int)screenover.size() + OVER_CUSTOM + 1; ++id) {
+ for (int id = OVER_CUSTOM + 1; id < (int)_GP(screenover).size() + OVER_CUSTOM + 1; ++id) {
if (find_overlay_of_type(id) == -1) {
type = id;
break;
@@ -223,8 +220,8 @@ size_t add_screen_overlay(int x, int y, int type, Shared::Bitmap *piccy, int pic
over.associatedOverlayHandle = 0;
over.hasAlphaChannel = alphaChannel;
over.positionRelativeToScreen = true;
- screenover.push_back(over);
- return screenover.size() - 1;
+ _GP(screenover).push_back(over);
+ return _GP(screenover).size() - 1;
}
@@ -272,7 +269,7 @@ void get_overlay_position(const ScreenOverlay &over, int *x, int *y) {
}
void recreate_overlay_ddbs() {
- for (auto &over : screenover) {
+ for (auto &over : _GP(screenover)) {
if (over.bmp)
gfxDriver->DestroyDDB(over.bmp);
if (over.pic)
diff --git a/engines/ags/engine/ac/overlay.h b/engines/ags/engine/ac/overlay.h
index 429da7ace8..e2000a1cf2 100644
--- a/engines/ags/engine/ac/overlay.h
+++ b/engines/ags/engine/ac/overlay.h
@@ -56,11 +56,6 @@ size_t add_screen_overlay(int x, int y, int type, Shared::Bitmap *piccy, int pic
void remove_screen_overlay_index(size_t over_idx);
void recreate_overlay_ddbs();
-extern int is_complete_overlay;
-extern int is_text_overlay; // blocking text overlay on screen
-
-extern std::vector<ScreenOverlay> screenover;
-
} // namespace AGS3
#endif
diff --git a/engines/ags/engine/game/savegame.cpp b/engines/ags/engine/game/savegame.cpp
index 97686959dd..9155f2f469 100644
--- a/engines/ags/engine/game/savegame.cpp
+++ b/engines/ags/engine/game/savegame.cpp
@@ -332,8 +332,8 @@ void DoBeforeRestore(PreservedParams &pp) {
delete raw_saved_screen;
raw_saved_screen = nullptr;
remove_screen_overlay(-1);
- is_complete_overlay = 0;
- is_text_overlay = 0;
+ _G(is_complete_overlay) = 0;
+ _G(is_text_overlay) = 0;
// cleanup dynamic sprites
// NOTE: sprite 0 is a special constant sprite that cannot be dynamic
diff --git a/engines/ags/engine/game/savegame_components.cpp b/engines/ags/engine/game/savegame_components.cpp
index ffa0b75f45..e78300b3d2 100644
--- a/engines/ags/engine/game/savegame_components.cpp
+++ b/engines/ags/engine/game/savegame_components.cpp
@@ -757,8 +757,8 @@ HSaveError ReadDynamicSprites(PStream in, int32_t cmp_ver, const PreservedParams
}
HSaveError WriteOverlays(PStream out) {
- out->WriteInt32(screenover.size());
- for (const auto &over : screenover) {
+ out->WriteInt32(_GP(screenover).size());
+ for (const auto &over : _GP(screenover)) {
over.WriteToFile(out.get());
serialize_bitmap(over.pic, out.get());
}
@@ -773,7 +773,7 @@ HSaveError ReadOverlays(PStream in, int32_t cmp_ver, const PreservedParams &pp,
over.ReadFromFile(in.get(), cmp_ver);
if (over.hasSerializedBitmap)
over.pic = read_serialized_bitmap(in.get());
- screenover.push_back(over);
+ _GP(screenover).push_back(over);
}
return err;
}
diff --git a/engines/ags/engine/main/game_run.cpp b/engines/ags/engine/main/game_run.cpp
index 72bd3cbc66..7cf0d0cc33 100644
--- a/engines/ags/engine/main/game_run.cpp
+++ b/engines/ags/engine/main/game_run.cpp
@@ -77,7 +77,6 @@ extern AnimatingGUIButton animbuts[MAX_ANIMATING_BUTTONS];
extern int numAnimButs;
extern int mouse_on_iface; // mouse cursor is over this interface
extern int ifacepopped;
-extern int is_text_overlay;
extern int proper_exit, our_eip;
extern int displayed_room, starting_room, in_new_room, new_room_was;
@@ -249,7 +248,7 @@ static void check_mouse_controls() {
_GP(play).wait_counter = 0;
_GP(play).wait_skipped_by = SKIP_MOUSECLICK;
_GP(play).wait_skipped_by_data = mbut;
- } else if (is_text_overlay > 0) {
+ } else if (_G(is_text_overlay) > 0) {
if (_GP(play).cant_skip_speech & SKIP_MOUSECLICK)
remove_screen_overlay(OVER_TEXTMSG);
} else if (!IsInterfaceEnabled()); // blocking cutscene, ignore mouse
@@ -389,7 +388,7 @@ static void check_keyboard_controls() {
}
// skip speech if desired by Speech.SkipStyle
- if ((is_text_overlay > 0) && (_GP(play).cant_skip_speech & SKIP_KEYPRESS)) {
+ if ((_G(is_text_overlay) > 0) && (_GP(play).cant_skip_speech & SKIP_KEYPRESS)) {
// only allow a key to remove the overlay if the icon bar isn't up
if (IsGamePaused() == 0) {
// check if it requires a specific keypress
@@ -471,7 +470,7 @@ static void check_keyboard_controls() {
// }
if (kgn == eAGSKeyCodeAltV && (::AGS::g_events->getModifierFlags() & KB_CTRL_FLAG)
- && (_GP(play).wait_counter < 1) && (is_text_overlay == 0) && (restrict_until == 0)) {
+ && (_GP(play).wait_counter < 1) && (_G(is_text_overlay) == 0) && (restrict_until == 0)) {
// make sure we can't interrupt a Wait()
// and desync the music to cutscene
_GP(play).debug_mode++;
@@ -846,7 +845,7 @@ static int ShouldStayInWaitMode() {
const int *wkptr = (const int *)user_disabled_data;
if (wkptr[0] < 0) retval = 0;
} else if (restrict_until == UNTIL_NOOVERLAY) {
- if (is_text_overlay < 1) retval = 0;
+ if (_G(is_text_overlay) < 1) retval = 0;
} else if (restrict_until == UNTIL_INTIS0) {
const int *wkptr = (const int *)user_disabled_data;
if (wkptr[0] == 0) retval = 0;
diff --git a/engines/ags/engine/main/update.cpp b/engines/ags/engine/main/update.cpp
index dba14f843c..d36f65c7cf 100644
--- a/engines/ags/engine/main/update.cpp
+++ b/engines/ags/engine/main/update.cpp
@@ -70,7 +70,6 @@ extern int facetalkBlinkLoop;
extern bool facetalk_qfg4_override_placement_x, facetalk_qfg4_override_placement_y;
extern SpeechLipSyncLine *splipsync;
extern int numLipLines, curLipLine, curLipLinePhoneme;
-extern int is_text_overlay;
extern IGraphicsDriver *gfxDriver;
int do_movelist_move(int16_t *mlnum, int32_t *xx, int32_t *yy) {
@@ -243,10 +242,10 @@ void update_following_exactly_characters(int &numSheep, int *followingAsSheep) {
void update_overlay_timers() {
// update overlay timers
- for (size_t i = 0; i < screenover.size();) {
- if (screenover[i].timeout > 0) {
- screenover[i].timeout--;
- if (screenover[i].timeout == 0) {
+ for (size_t i = 0; i < _GP(screenover).size();) {
+ if (_GP(screenover)[i].timeout > 0) {
+ _GP(screenover)[i].timeout--;
+ if (_GP(screenover)[i].timeout == 0) {
remove_screen_overlay_index(i);
continue;
}
@@ -394,8 +393,8 @@ void update_sierra_speech() {
updatedFrame |= 1;
}
- // is_text_overlay might be 0 if it was only just destroyed this loop
- if ((updatedFrame) && (is_text_overlay > 0)) {
+ // _G(is_text_overlay) might be 0 if it was only just destroyed this loop
+ if ((updatedFrame) && (_G(is_text_overlay) > 0)) {
if (updatedFrame & 1)
CheckViewFrame(facetalkview, facetalkloop, facetalkframe);
@@ -414,14 +413,14 @@ void update_sierra_speech() {
if (facetalk_qfg4_override_placement_y) {
view_frame_y = _GP(play).speech_portrait_y;
} else {
- view_frame_y = (screenover[face_talking].pic->GetHeight() / 2) - (_GP(game).SpriteInfos[thisPic].Height / 2);
+ view_frame_y = (_GP(screenover)[face_talking].pic->GetHeight() / 2) - (_GP(game).SpriteInfos[thisPic].Height / 2);
}
- screenover[face_talking].pic->Clear(0);
+ _GP(screenover)[face_talking].pic->Clear(0);
} else {
- screenover[face_talking].pic->ClearTransparent();
+ _GP(screenover)[face_talking].pic->ClearTransparent();
}
- Bitmap *frame_pic = screenover[face_talking].pic;
+ Bitmap *frame_pic = _GP(screenover)[face_talking].pic;
const ViewFrame *face_vf = &_G(views)[facetalkview].loops[facetalkloop].frames[facetalkframe];
bool face_has_alpha = (_GP(game).SpriteInfos[face_vf->pic].Flags & SPF_ALPHACHANNEL) != 0;
DrawViewFrame(frame_pic, face_vf, view_frame_x, view_frame_y);
@@ -433,7 +432,7 @@ void update_sierra_speech() {
DrawViewFrame(frame_pic, blink_vf, view_frame_x, view_frame_y, face_has_alpha);
}
- gfxDriver->UpdateDDBFromBitmap(screenover[face_talking].bmp, screenover[face_talking].pic, face_has_alpha);
+ gfxDriver->UpdateDDBFromBitmap(_GP(screenover)[face_talking].bmp, _GP(screenover)[face_talking].pic, face_has_alpha);
} // end if updatedFrame
}
}
diff --git a/engines/ags/globals.cpp b/engines/ags/globals.cpp
index a9c0d268e2..b12b18b347 100644
--- a/engines/ags/globals.cpp
+++ b/engines/ags/globals.cpp
@@ -28,6 +28,7 @@
#include "ags/engine/ac/draw.h"
#include "ags/engine/ac/gamestate.h"
#include "ags/engine/ac/roomstatus.h"
+#include "ags/engine/ac/screenoverlay.h"
#include "ags/engine/ac/spritelistentry.h"
#include "ags/engine/ac/dynobj/cc_dialog.h"
#include "ags/engine/ac/dynobj/cc_guiobject.h"
@@ -91,6 +92,9 @@ Globals::Globals() {
_scrInv = new ScriptInvItem[MAX_INV];
_objcache = new ObjectCache[MAX_ROOM_OBJECTS];
+ // overlay.cpp globals
+ _screenover = new std::vector<ScreenOverlay>();
+
// script.cpp
_scripts = new ExecutingScript[MAX_SCRIPT_AT_ONCE];
_gamescript = new PScript();
@@ -143,6 +147,9 @@ Globals::~Globals() {
delete[] _scrInv;
delete[] _objcache;
+ // overlay.cpp
+ delete _screenover;
+
// script.cpp
delete[] _scripts;
delete _gamescript;
diff --git a/engines/ags/globals.h b/engines/ags/globals.h
index 788aa0e6cb..8b6aa1ed1e 100644
--- a/engines/ags/globals.h
+++ b/engines/ags/globals.h
@@ -63,6 +63,7 @@ struct NonBlockingScriptFunction;
struct RoomCameraDrawData;
struct RoomStatus;
struct RuntimeScriptValue;
+struct ScreenOverlay;
struct ScriptDialog;
struct ScriptGUI;
struct ScriptHotspot;
@@ -243,6 +244,16 @@ public:
/**@}*/
+ /**
+ * \defgroup overlay globals
+ * @{
+ */
+
+ std::vector<ScreenOverlay> *_screenover;
+ int _is_complete_overlay = 0, _is_text_overlay = 0;
+
+ /**@}*/
+
/**
* \defgroup quit globals
* @{
Commit: 67d0560a523b5bb7e7569b4116e8de95dcd628fe
https://github.com/scummvm/scummvm/commit/67d0560a523b5bb7e7569b4116e8de95dcd628fe
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-03-01T20:52:53-08:00
Commit Message:
AGS: Move fonts.cpp globals to Globals
Changed paths:
engines/ags/globals.cpp
engines/ags/globals.h
engines/ags/shared/ac/gamestructdefines.h
engines/ags/shared/font/agsfontrenderer.h
engines/ags/shared/font/fonts.cpp
engines/ags/shared/font/fonts.h
diff --git a/engines/ags/globals.cpp b/engines/ags/globals.cpp
index b12b18b347..b56b9fb6b9 100644
--- a/engines/ags/globals.cpp
+++ b/engines/ags/globals.cpp
@@ -24,6 +24,9 @@
#include "ags/shared/ac/gamesetupstruct.h"
#include "ags/shared/ac/spritecache.h"
#include "ags/shared/debugging/debugmanager.h"
+#include "ags/shared/font/fonts.h"
+#include "ags/shared/font/ttffontrenderer.h"
+#include "ags/shared/font/wfnfontrenderer.h"
#include "ags/shared/game/roomstruct.h"
#include "ags/engine/ac/draw.h"
#include "ags/engine/ac/gamestate.h"
@@ -68,6 +71,11 @@ Globals::Globals() {
_sprlist = new std::vector<SpriteListEntry>();
_thingsToDrawList = new std::vector<SpriteListEntry>();
+ // _GP(fonts).cpp globals
+ _fonts = new std::vector<AGS::Shared::Font>();
+ _ttfRenderer = new TTFFontRenderer();
+ _wfnRenderer = new WFNFontRenderer();
+
// game.cpp globals
_ccDynamicGUIObject = new CCGUIObject();
_ccDynamicCharacter = new CCCharacter();
@@ -123,6 +131,11 @@ Globals::~Globals() {
// debug.cpp
delete _DbgMgr;
+ // _GP(fonts).cpp
+ delete _fonts;
+ delete _ttfRenderer;
+ delete _wfnRenderer;
+
// game.cpp
delete _ccDynamicGUIObject;
delete _ccDynamicCharacter;
diff --git a/engines/ags/globals.h b/engines/ags/globals.h
index 8b6aa1ed1e..38aba72b0b 100644
--- a/engines/ags/globals.h
+++ b/engines/ags/globals.h
@@ -38,12 +38,18 @@ using Version = AGS::Shared::Version;
namespace AGS {
namespace Shared {
+
class Bitmap;
class DebugManager;
+struct Font;
class RoomStruct;
+
} // namespace Shared
} // namespace AGS
+class TTFFontRenderer;
+class WFNFontRenderer;
+
struct CCAudioChannel;
struct CCAudioClip;
struct CCCharacter;
@@ -55,11 +61,14 @@ struct ccInstance;
struct CCInventory;
struct CCObject;
struct CCRegion;
+struct CharacterCache;
struct ExecutingScript;
struct GameSetupStruct;
struct GameState;
struct IAGSEditorDebugger;
+struct MoveList;
struct NonBlockingScriptFunction;
+struct ObjectCache;
struct RoomCameraDrawData;
struct RoomStatus;
struct RuntimeScriptValue;
@@ -74,9 +83,6 @@ struct ScriptString;
struct ScriptSystem;
struct SpriteListEntry;
struct ViewStruct;
-struct CharacterCache;
-struct ObjectCache;
-struct MoveList;
class SpriteCache;
@@ -134,6 +140,16 @@ public:
/**@}*/
+ /**
+ * \defgroup fonts globals
+ * @{
+ */
+
+ std::vector<AGS::Shared::Font> *_fonts;
+ TTFFontRenderer *_ttfRenderer;
+ WFNFontRenderer *_wfnRenderer;
+
+ /**@}*/
/**
* \defgroup game globals
diff --git a/engines/ags/shared/ac/gamestructdefines.h b/engines/ags/shared/ac/gamestructdefines.h
index 367796aa43..483552bb9f 100644
--- a/engines/ags/shared/ac/gamestructdefines.h
+++ b/engines/ags/shared/ac/gamestructdefines.h
@@ -235,21 +235,21 @@ struct FontInfo {
};
// General font's loading and rendering flags
- uint32_t Flags;
+ uint32_t Flags = 0;
// Font size, in points (basically means pixels in AGS)
- int SizePt;
+ int SizePt = 0;
// Factor to multiply base font size by
- int SizeMultiplier;
+ int SizeMultiplier = 0;
// Outlining font index, or auto-outline flag
- char Outline;
+ char Outline = 0;
// Custom vertical render offset, used mainly for fixing broken fonts
- int YOffset;
+ int YOffset = 0;
// custom line spacing between two lines of text (0 = use font height)
- int LineSpacing;
+ int LineSpacing = 0;
// When automatic outlining, thickness of the outline (0 = use legacy thickness)
- int AutoOutlineThickness;
+ int AutoOutlineThickness = 0;
// When automatic outlining, style of the outline
- AutoOutlineStyle AutoOutlineStyle;
+ AutoOutlineStyle AutoOutlineStyle = kRounded;
FontInfo();
};
diff --git a/engines/ags/shared/font/agsfontrenderer.h b/engines/ags/shared/font/agsfontrenderer.h
index 49d1cf55db..3e329ba0af 100644
--- a/engines/ags/shared/font/agsfontrenderer.h
+++ b/engines/ags/shared/font/agsfontrenderer.h
@@ -45,7 +45,7 @@ protected:
};
// Font render params, mainly for dealing with various compatibility issues and
-// broken fonts. NOTE: currently left empty as a result of rewrite, but may be
+// broken _GP(fonts). NOTE: currently left empty as a result of rewrite, but may be
// used again in the future.
struct FontRenderParams {
// Font's render multiplier
diff --git a/engines/ags/shared/font/fonts.cpp b/engines/ags/shared/font/fonts.cpp
index b45081e824..b9ebb2bdca 100644
--- a/engines/ags/shared/font/fonts.cpp
+++ b/engines/ags/shared/font/fonts.cpp
@@ -30,6 +30,7 @@
#include "ags/shared/gfx/bitmap.h"
#include "ags/shared/gui/guidefines.h" // MAXLINE
#include "ags/shared/util/string_utils.h"
+#include "ags/globals.h"
namespace AGS3 {
@@ -40,26 +41,13 @@ using namespace AGS::Shared;
namespace AGS {
namespace Shared {
-struct Font {
- IAGSFontRenderer *Renderer;
- IAGSFontRenderer2 *Renderer2;
- FontInfo Info;
-
- Font();
-};
-
Font::Font()
: Renderer(nullptr)
, Renderer2(nullptr) {
}
-} // Common
-} // AGS
-
-static std::vector<Font> fonts;
-static TTFFontRenderer ttfRenderer;
-static WFNFontRenderer wfnRenderer;
-
+} // namespace Shared
+} // namespace AGS
FontInfo::FontInfo()
: Flags(0)
@@ -84,106 +72,106 @@ void shutdown_font_renderer() {
}
void adjust_y_coordinate_for_text(int *ypos, size_t fontnum) {
- if (fontnum >= fonts.size() || !fonts[fontnum].Renderer)
+ if (fontnum >= _GP(fonts).size() || !_GP(fonts)[fontnum].Renderer)
return;
- fonts[fontnum].Renderer->AdjustYCoordinateForFont(ypos, fontnum);
+ _GP(fonts)[fontnum].Renderer->AdjustYCoordinateForFont(ypos, fontnum);
}
bool font_first_renderer_loaded() {
- return fonts.size() > 0 && fonts[0].Renderer != nullptr;
+ return _GP(fonts).size() > 0 && _GP(fonts)[0].Renderer != nullptr;
}
bool is_font_loaded(size_t fontNumber) {
- return fontNumber < fonts.size() && fonts[fontNumber].Renderer != nullptr;;
+ return fontNumber < _GP(fonts).size() && _GP(fonts)[fontNumber].Renderer != nullptr;;
}
IAGSFontRenderer *font_replace_renderer(size_t fontNumber, IAGSFontRenderer *renderer) {
- if (fontNumber >= fonts.size())
+ if (fontNumber >= _GP(fonts).size())
return nullptr;
- IAGSFontRenderer *oldRender = fonts[fontNumber].Renderer;
- fonts[fontNumber].Renderer = renderer;
- fonts[fontNumber].Renderer2 = nullptr;
+ IAGSFontRenderer *oldRender = _GP(fonts)[fontNumber].Renderer;
+ _GP(fonts)[fontNumber].Renderer = renderer;
+ _GP(fonts)[fontNumber].Renderer2 = nullptr;
return oldRender;
}
bool is_bitmap_font(size_t fontNumber) {
- if (fontNumber >= fonts.size() || !fonts[fontNumber].Renderer2)
+ if (fontNumber >= _GP(fonts).size() || !_GP(fonts)[fontNumber].Renderer2)
return false;
- return fonts[fontNumber].Renderer2->IsBitmapFont();
+ return _GP(fonts)[fontNumber].Renderer2->IsBitmapFont();
}
bool font_supports_extended_characters(size_t fontNumber) {
- if (fontNumber >= fonts.size() || !fonts[fontNumber].Renderer)
+ if (fontNumber >= _GP(fonts).size() || !_GP(fonts)[fontNumber].Renderer)
return false;
- return fonts[fontNumber].Renderer->SupportsExtendedCharacters(fontNumber);
+ return _GP(fonts)[fontNumber].Renderer->SupportsExtendedCharacters(fontNumber);
}
void ensure_text_valid_for_font(char *text, size_t fontnum) {
- if (fontnum >= fonts.size() || !fonts[fontnum].Renderer)
+ if (fontnum >= _GP(fonts).size() || !_GP(fonts)[fontnum].Renderer)
return;
- fonts[fontnum].Renderer->EnsureTextValidForFont(text, fontnum);
+ _GP(fonts)[fontnum].Renderer->EnsureTextValidForFont(text, fontnum);
}
int get_font_scaling_mul(size_t fontNumber) {
- if (fontNumber >= fonts.size() || !fonts[fontNumber].Renderer)
+ if (fontNumber >= _GP(fonts).size() || !_GP(fonts)[fontNumber].Renderer)
return 0;
- return fonts[fontNumber].Info.SizeMultiplier;
+ return _GP(fonts)[fontNumber].Info.SizeMultiplier;
}
int wgettextwidth(const char *texx, size_t fontNumber) {
- if (fontNumber >= fonts.size() || !fonts[fontNumber].Renderer)
+ if (fontNumber >= _GP(fonts).size() || !_GP(fonts)[fontNumber].Renderer)
return 0;
- return fonts[fontNumber].Renderer->GetTextWidth(texx, fontNumber);
+ return _GP(fonts)[fontNumber].Renderer->GetTextWidth(texx, fontNumber);
}
int wgettextheight(const char *text, size_t fontNumber) {
- if (fontNumber >= fonts.size() || !fonts[fontNumber].Renderer)
+ if (fontNumber >= _GP(fonts).size() || !_GP(fonts)[fontNumber].Renderer)
return 0;
- return fonts[fontNumber].Renderer->GetTextHeight(text, fontNumber);
+ return _GP(fonts)[fontNumber].Renderer->GetTextHeight(text, fontNumber);
}
int get_font_outline(size_t font_number) {
- if (font_number >= fonts.size())
+ if (font_number >= _GP(fonts).size())
return FONT_OUTLINE_NONE;
- return fonts[font_number].Info.Outline;
+ return _GP(fonts)[font_number].Info.Outline;
}
int get_font_outline_thickness(size_t font_number) {
- if (font_number >= fonts.size())
+ if (font_number >= _GP(fonts).size())
return 0;
- return fonts[font_number].Info.AutoOutlineThickness;
+ return _GP(fonts)[font_number].Info.AutoOutlineThickness;
}
void set_font_outline(size_t font_number, int outline_type) {
- if (font_number >= fonts.size())
+ if (font_number >= _GP(fonts).size())
return;
- fonts[font_number].Info.Outline = FONT_OUTLINE_AUTO;
+ _GP(fonts)[font_number].Info.Outline = FONT_OUTLINE_AUTO;
}
int getfontheight(size_t fontNumber) {
- if (fontNumber >= fonts.size() || !fonts[fontNumber].Renderer)
+ if (fontNumber >= _GP(fonts).size() || !_GP(fonts)[fontNumber].Renderer)
return 0;
// There is no explicit method for getting maximal possible height of any
// random font renderer at the moment; the implementations of GetTextHeight
// are allowed to return varied results depending on the text parameter.
// We use special line of text to get more or less reliable font height.
const char *height_test_string = "ZHwypgfjqhkilIK";
- return fonts[fontNumber].Renderer->GetTextHeight(height_test_string, fontNumber);
+ return _GP(fonts)[fontNumber].Renderer->GetTextHeight(height_test_string, fontNumber);
}
int getfontlinespacing(size_t fontNumber) {
- if (fontNumber >= fonts.size())
+ if (fontNumber >= _GP(fonts).size())
return 0;
- int spacing = fonts[fontNumber].Info.LineSpacing;
+ int spacing = _GP(fonts)[fontNumber].Info.LineSpacing;
// If the spacing parameter is not provided, then return default
// spacing, that is font's height.
return spacing > 0 ? spacing : getfontheight(fontNumber);
}
bool use_default_linespacing(size_t fontNumber) {
- if (fontNumber >= fonts.size())
+ if (fontNumber >= _GP(fonts).size())
return false;
- return fonts[fontNumber].Info.LineSpacing == 0;
+ return _GP(fonts)[fontNumber].Info.LineSpacing == 0;
}
// Project-dependent implementation
@@ -302,48 +290,48 @@ size_t split_lines(const char *todis, SplitLines &lines, int wii, int fonnt, siz
}
void wouttextxy(Shared::Bitmap *ds, int xxx, int yyy, size_t fontNumber, color_t text_color, const char *texx) {
- if (fontNumber >= fonts.size())
+ if (fontNumber >= _GP(fonts).size())
return;
- yyy += fonts[fontNumber].Info.YOffset;
+ yyy += _GP(fonts)[fontNumber].Info.YOffset;
if (yyy > ds->GetClip().Bottom)
return; // each char is clipped but this speeds it up
- if (fonts[fontNumber].Renderer != nullptr) {
- fonts[fontNumber].Renderer->RenderText(texx, fontNumber, (BITMAP *)ds->GetAllegroBitmap(), xxx, yyy, text_color);
+ if (_GP(fonts)[fontNumber].Renderer != nullptr) {
+ _GP(fonts)[fontNumber].Renderer->RenderText(texx, fontNumber, (BITMAP *)ds->GetAllegroBitmap(), xxx, yyy, text_color);
}
}
void set_fontinfo(size_t fontNumber, const FontInfo &finfo) {
- if (fontNumber < fonts.size() && fonts[fontNumber].Renderer)
- fonts[fontNumber].Info = finfo;
+ if (fontNumber < _GP(fonts).size() && _GP(fonts)[fontNumber].Renderer)
+ _GP(fonts)[fontNumber].Info = finfo;
}
// Loads a font from disk
bool wloadfont_size(size_t fontNumber, const FontInfo &font_info) {
- if (fonts.size() <= fontNumber)
- fonts.resize(fontNumber + 1);
+ if (_GP(fonts).size() <= fontNumber)
+ _GP(fonts).resize(fontNumber + 1);
else
wfreefont(fontNumber);
FontRenderParams params;
params.SizeMultiplier = font_info.SizeMultiplier;
- if (ttfRenderer.LoadFromDiskEx(fontNumber, font_info.SizePt, ¶ms)) {
- fonts[fontNumber].Renderer = &ttfRenderer;
- fonts[fontNumber].Renderer2 = &ttfRenderer;
- } else if (wfnRenderer.LoadFromDiskEx(fontNumber, font_info.SizePt, ¶ms)) {
- fonts[fontNumber].Renderer = &wfnRenderer;
- fonts[fontNumber].Renderer2 = &wfnRenderer;
+ if (_GP(ttfRenderer).LoadFromDiskEx(fontNumber, font_info.SizePt, ¶ms)) {
+ _GP(fonts)[fontNumber].Renderer = &_GP(ttfRenderer);
+ _GP(fonts)[fontNumber].Renderer2 = &_GP(ttfRenderer);
+ } else if (_GP(wfnRenderer).LoadFromDiskEx(fontNumber, font_info.SizePt, ¶ms)) {
+ _GP(fonts)[fontNumber].Renderer = &_GP(wfnRenderer);
+ _GP(fonts)[fontNumber].Renderer2 = &_GP(wfnRenderer);
}
- if (fonts[fontNumber].Renderer) {
- fonts[fontNumber].Info = font_info;
+ if (_GP(fonts)[fontNumber].Renderer) {
+ _GP(fonts)[fontNumber].Info = font_info;
return true;
}
return false;
}
void wgtprintf(Shared::Bitmap *ds, int xxx, int yyy, size_t fontNumber, color_t text_color, char *fmt, ...) {
- if (fontNumber >= fonts.size())
+ if (fontNumber >= _GP(fonts).size())
return;
char tbuffer[2000];
@@ -356,21 +344,21 @@ void wgtprintf(Shared::Bitmap *ds, int xxx, int yyy, size_t fontNumber, color_t
}
void wfreefont(size_t fontNumber) {
- if (fontNumber >= fonts.size())
+ if (fontNumber >= _GP(fonts).size())
return;
- if (fonts[fontNumber].Renderer != nullptr)
- fonts[fontNumber].Renderer->FreeMemory(fontNumber);
+ if (_GP(fonts)[fontNumber].Renderer != nullptr)
+ _GP(fonts)[fontNumber].Renderer->FreeMemory(fontNumber);
- fonts[fontNumber].Renderer = nullptr;
+ _GP(fonts)[fontNumber].Renderer = nullptr;
}
void free_all_fonts() {
- for (size_t i = 0; i < fonts.size(); ++i) {
- if (fonts[i].Renderer != nullptr)
- fonts[i].Renderer->FreeMemory(i);
+ for (size_t i = 0; i < _GP(fonts).size(); ++i) {
+ if (_GP(fonts)[i].Renderer != nullptr)
+ _GP(fonts)[i].Renderer->FreeMemory(i);
}
- fonts.clear();
+ _GP(fonts).clear();
}
} // namespace AGS3
diff --git a/engines/ags/shared/font/fonts.h b/engines/ags/shared/font/fonts.h
index b9374f49d6..9ec98f54de 100644
--- a/engines/ags/shared/font/fonts.h
+++ b/engines/ags/shared/font/fonts.h
@@ -26,23 +26,34 @@
#include "ags/lib/std/vector.h"
#include "ags/shared/core/types.h"
#include "ags/shared/util/string.h"
+#include "ags/shared/ac/gamestructdefines.h"
// TODO: we need to make some kind of TextManager class of this module
namespace AGS3 {
+
+class IAGSFontRenderer;
+class IAGSFontRenderer2;
+struct FontInfo;
+struct FontRenderParams;
+
namespace AGS {
namespace Shared {
class Bitmap;
+
+struct Font {
+ IAGSFontRenderer *Renderer = nullptr;
+ IAGSFontRenderer2 *Renderer2 = nullptr;
+ FontInfo Info;
+
+ Font();
+};
+
} // namespace Shared
} // namespace AGS
using namespace AGS;
-class IAGSFontRenderer;
-class IAGSFontRenderer2;
-struct FontInfo;
-struct FontRenderParams;
-
void init_font_renderer();
void shutdown_font_renderer();
void adjust_y_coordinate_for_text(int *ypos, size_t fontnum);
Commit: 3f62f198ac9a36e02f59cab5b084677266b4548b
https://github.com/scummvm/scummvm/commit/3f62f198ac9a36e02f59cab5b084677266b4548b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-03-01T21:12:32-08:00
Commit Message:
AGS: Move Lines global to Globals fontLines
Changed paths:
engines/ags/engine/ac/dialog.cpp
engines/ags/engine/ac/display.cpp
engines/ags/engine/ac/drawingsurface.cpp
engines/ags/engine/ac/global_drawingsurface.cpp
engines/ags/engine/ac/global_gui.cpp
engines/ags/engine/gui/mylabel.cpp
engines/ags/globals.cpp
engines/ags/globals.h
engines/ags/plugins/agsplugin.cpp
engines/ags/shared/font/fonts.cpp
engines/ags/shared/font/fonts.h
engines/ags/shared/gui/guilabel.cpp
diff --git a/engines/ags/engine/ac/dialog.cpp b/engines/ags/engine/ac/dialog.cpp
index 1188711190..03ce5f9d45 100644
--- a/engines/ags/engine/ac/dialog.cpp
+++ b/engines/ags/engine/ac/dialog.cpp
@@ -349,7 +349,7 @@ int write_dialog_options(Bitmap *ds, bool ds_has_alpha, int dlgxp, int curyp, in
else text_color = ds->GetCompatibleColor(utextcol);
}
- break_up_text_into_lines(get_translation(dtop->optionnames[(int)disporder[ww]]), Lines, areawid - (2 * padding + 2 + bullet_wid), usingfont);
+ break_up_text_into_lines(get_translation(dtop->optionnames[(int)disporder[ww]]), _GP(fontLines), areawid - (2 * padding + 2 + bullet_wid), usingfont);
dispyp[ww] = curyp;
if (_GP(game).dialog_bullet > 0) {
draw_gui_sprite_v330(ds, _GP(game).dialog_bullet, dlgxp, curyp, ds_has_alpha);
@@ -363,8 +363,8 @@ int write_dialog_options(Bitmap *ds, bool ds_has_alpha, int dlgxp, int curyp, in
sprintf(tempbfr, "%d.", ww + 1);
wouttext_outline(ds, dlgxp + actualpicwid, curyp, usingfont, text_color, tempbfr);
}
- for (size_t cc = 0; cc < Lines.Count(); cc++) {
- wouttext_outline(ds, dlgxp + ((cc == 0) ? 0 : 9) + bullet_wid, curyp, usingfont, text_color, Lines[cc]);
+ for (size_t cc = 0; cc < _GP(fontLines).Count(); cc++) {
+ wouttext_outline(ds, dlgxp + ((cc == 0) ? 0 : 9) + bullet_wid, curyp, usingfont, text_color, _GP(fontLines)[cc]);
curyp += linespacing;
}
if (ww < numdisp - 1)
@@ -378,8 +378,8 @@ int write_dialog_options(Bitmap *ds, bool ds_has_alpha, int dlgxp, int curyp, in
#define GET_OPTIONS_HEIGHT {\
needheight = 0;\
for (int i = 0; i < numdisp; ++i) {\
- break_up_text_into_lines(get_translation(dtop->optionnames[(int)disporder[i]]), Lines, areawid-(2*padding+2+bullet_wid), usingfont);\
- needheight += getheightoflines(usingfont, Lines.Count()) + data_to_game_coord(_GP(game).options[OPT_DIALOGGAP]);\
+ break_up_text_into_lines(get_translation(dtop->optionnames[(int)disporder[i]]), _GP(fontLines), areawid-(2*padding+2+bullet_wid), usingfont);\
+ needheight += getheightoflines(usingfont, _GP(fontLines).Count()) + data_to_game_coord(_GP(game).options[OPT_DIALOGGAP]);\
}\
if (parserInput) needheight += parserInput->Height + data_to_game_coord(_GP(game).options[OPT_DIALOGGAP]);\
}
@@ -662,7 +662,7 @@ void DialogOptions::Redraw() {
int biggest = 0;
padding = _GP(guis)[_GP(game).options[OPT_DIALOGIFACE]].Padding;
for (int i = 0; i < numdisp; ++i) {
- break_up_text_into_lines(get_translation(dtop->optionnames[(int)disporder[i]]), Lines, areawid - ((2 * padding + 2) + bullet_wid), usingfont);
+ break_up_text_into_lines(get_translation(dtop->optionnames[(int)disporder[i]]), _GP(fontLines), areawid - ((2 * padding + 2) + bullet_wid), usingfont);
if (longestline > biggest)
biggest = longestline;
}
diff --git a/engines/ags/engine/ac/display.cpp b/engines/ags/engine/ac/display.cpp
index 0fa620164f..c6a3bfa68a 100644
--- a/engines/ags/engine/ac/display.cpp
+++ b/engines/ags/engine/ac/display.cpp
@@ -98,10 +98,10 @@ int _display_main(int xx, int yy, int wii, const char *text, int disp_type, int
int paddingDoubledScaled = get_fixed_pixel_size(padding * 2); // Just in case screen size does is not neatly divisible by 320x200
ensure_text_valid_for_font(todis, usingfont);
- break_up_text_into_lines(todis, Lines, wii - 2 * padding, usingfont);
+ break_up_text_into_lines(todis, _GP(fontLines), wii - 2 * padding, usingfont);
disp.lineheight = getfontheight_outlined(usingfont);
disp.linespacing = getfontspacing_outlined(usingfont);
- disp.fulltxtheight = getheightoflines(usingfont, Lines.Count());
+ disp.fulltxtheight = getheightoflines(usingfont, _GP(fontLines).Count());
// AGS 2.x: If the screen is faded out, fade in again when displaying a message box.
if (!asspch && (loaded_game_file_version <= kGameVersion_272))
@@ -210,7 +210,7 @@ int _display_main(int xx, int yy, int wii, const char *text, int disp_type, int
} else if ((ShouldAntiAliasText()) && (_GP(game).GetColorDepth() >= 24))
alphaChannel = true;
- for (size_t ee = 0; ee < Lines.Count(); ee++) {
+ for (size_t ee = 0; ee < _GP(fontLines).Count(); ee++) {
//int ttxp=wii/2 - wgettextwidth_compensate(lines[ee], usingfont)/2;
int ttyp = ttxtop + ee * disp.linespacing;
// asspch < 0 means that it's inside a text box so don't
@@ -222,10 +222,10 @@ int _display_main(int xx, int yy, int wii, const char *text, int disp_type, int
else
text_color = text_window_ds->GetCompatibleColor(-asspch);
- wouttext_aligned(text_window_ds, ttxleft, ttyp, oriwid, usingfont, text_color, Lines[ee], _GP(play).text_align);
+ wouttext_aligned(text_window_ds, ttxleft, ttyp, oriwid, usingfont, text_color, _GP(fontLines)[ee], _GP(play).text_align);
} else {
text_color = text_window_ds->GetCompatibleColor(asspch);
- wouttext_aligned(text_window_ds, ttxleft, ttyp, wii, usingfont, text_color, Lines[ee], _GP(play).speech_text_align);
+ wouttext_aligned(text_window_ds, ttxleft, ttyp, wii, usingfont, text_color, _GP(fontLines)[ee], _GP(play).speech_text_align);
}
}
} else {
@@ -238,8 +238,8 @@ int _display_main(int xx, int yy, int wii, const char *text, int disp_type, int
adjust_y_coordinate_for_text(&yoffs, usingfont);
- for (size_t ee = 0; ee < Lines.Count(); ee++)
- wouttext_aligned(text_window_ds, xoffs, yoffs + ee * disp.linespacing, oriwid, usingfont, text_color, Lines[ee], _GP(play).text_align);
+ for (size_t ee = 0; ee < _GP(fontLines).Count(); ee++)
+ wouttext_aligned(text_window_ds, xoffs, yoffs + ee * disp.linespacing, oriwid, usingfont, text_color, _GP(fontLines)[ee], _GP(play).text_align);
}
int ovrtype = OVER_TEXTMSG;
diff --git a/engines/ags/engine/ac/drawingsurface.cpp b/engines/ags/engine/ac/drawingsurface.cpp
index 92bed17d70..d0e99dfa32 100644
--- a/engines/ags/engine/ac/drawingsurface.cpp
+++ b/engines/ags/engine/ac/drawingsurface.cpp
@@ -359,22 +359,22 @@ void DrawingSurface_DrawStringWrapped(ScriptDrawingSurface *sds, int xx, int yy,
sds->PointToGameResolution(&xx, &yy);
sds->SizeToGameResolution(&wid);
- if (break_up_text_into_lines(msg, Lines, wid, font) == 0)
+ if (break_up_text_into_lines(msg, _GP(fontLines), wid, font) == 0)
return;
Bitmap *ds = sds->StartDrawing();
color_t text_color = sds->currentColour;
- for (size_t i = 0; i < Lines.Count(); i++) {
+ for (size_t i = 0; i < _GP(fontLines).Count(); i++) {
int drawAtX = xx;
if (alignment & kMAlignHCenter) {
- drawAtX = xx + ((wid / 2) - wgettextwidth(Lines[i], font) / 2);
+ drawAtX = xx + ((wid / 2) - wgettextwidth(_GP(fontLines)[i], font) / 2);
} else if (alignment & kMAlignRight) {
- drawAtX = (xx + wid) - wgettextwidth(Lines[i], font);
+ drawAtX = (xx + wid) - wgettextwidth(_GP(fontLines)[i], font);
}
- wouttext_outline(ds, drawAtX, yy + linespacing * i, font, text_color, Lines[i]);
+ wouttext_outline(ds, drawAtX, yy + linespacing * i, font, text_color, _GP(fontLines)[i]);
}
sds->FinishedDrawing();
diff --git a/engines/ags/engine/ac/global_drawingsurface.cpp b/engines/ags/engine/ac/global_drawingsurface.cpp
index 87374d0cbc..63c0743f08 100644
--- a/engines/ags/engine/ac/global_drawingsurface.cpp
+++ b/engines/ags/engine/ac/global_drawingsurface.cpp
@@ -163,13 +163,13 @@ void RawPrintMessageWrapped(int xx, int yy, int wid, int font, int msgm) {
// it's probably too late but check anyway
if (strlen(displbuf) > 2899)
quit("!RawPrintMessageWrapped: message too long");
- if (break_up_text_into_lines(displbuf, Lines, wid, font) == 0)
+ if (break_up_text_into_lines(displbuf, _GP(fontLines), wid, font) == 0)
return;
RAW_START();
color_t text_color = _GP(play).raw_color;
- for (size_t i = 0; i < Lines.Count(); i++)
- wouttext_outline(RAW_SURFACE(), xx, yy + linespacing * i, font, text_color, Lines[i]);
+ for (size_t i = 0; i < _GP(fontLines).Count(); i++)
+ wouttext_outline(RAW_SURFACE(), xx, yy + linespacing * i, font, text_color, _GP(fontLines)[i]);
invalidate_screen();
mark_current_background_dirty();
RAW_END();
diff --git a/engines/ags/engine/ac/global_gui.cpp b/engines/ags/engine/ac/global_gui.cpp
index d20b7ea4e5..6488c92941 100644
--- a/engines/ags/engine/ac/global_gui.cpp
+++ b/engines/ags/engine/ac/global_gui.cpp
@@ -188,9 +188,9 @@ int GetTextHeight(const char *text, int fontnum, int width) {
if ((fontnum < 0) || (fontnum >= _GP(game).numfonts))
quit("!GetTextHeight: invalid font number.");
- if (break_up_text_into_lines(text, Lines, data_to_game_coord(width), fontnum) == 0)
+ if (break_up_text_into_lines(text, _GP(fontLines), data_to_game_coord(width), fontnum) == 0)
return 0;
- return game_to_data_coord(getheightoflines(fontnum, Lines.Count()));
+ return game_to_data_coord(getheightoflines(fontnum, _GP(fontLines).Count()));
}
int GetFontHeight(int fontnum) {
diff --git a/engines/ags/engine/gui/mylabel.cpp b/engines/ags/engine/gui/mylabel.cpp
index 817d643d76..f8f4db6f65 100644
--- a/engines/ags/engine/gui/mylabel.cpp
+++ b/engines/ags/engine/gui/mylabel.cpp
@@ -20,7 +20,6 @@
*
*/
-//include <string.h>
#include "ags/engine/ac/display.h"
#include "ags/engine/ac/gamesetup.h"
#include "ags/engine/ac/string.h"
@@ -28,6 +27,7 @@
#include "ags/shared/gui/guidefines.h"
#include "ags/engine/gui/mylabel.h"
#include "ags/engine/gui/guidialoginternaldefs.h"
+#include "ags/globals.h"
namespace AGS3 {
@@ -51,10 +51,10 @@ void MyLabel::draw(Bitmap *ds) {
char *teptr = &text[0];
color_t text_color = ds->GetCompatibleColor(0);
- if (break_up_text_into_lines(teptr, Lines, wid, acdialog_font) == 0)
+ if (break_up_text_into_lines(teptr, _GP(fontLines), wid, acdialog_font) == 0)
return;
- for (size_t ee = 0; ee < Lines.Count(); ee++) {
- wouttext_outline(ds, x, cyp, acdialog_font, text_color, Lines[ee]);
+ for (size_t ee = 0; ee < _GP(fontLines).Count(); ee++) {
+ wouttext_outline(ds, x, cyp, acdialog_font, text_color, _GP(fontLines)[ee]);
cyp += TEXT_HT;
}
}
diff --git a/engines/ags/globals.cpp b/engines/ags/globals.cpp
index b56b9fb6b9..baa516a870 100644
--- a/engines/ags/globals.cpp
+++ b/engines/ags/globals.cpp
@@ -71,10 +71,11 @@ Globals::Globals() {
_sprlist = new std::vector<SpriteListEntry>();
_thingsToDrawList = new std::vector<SpriteListEntry>();
- // _GP(fonts).cpp globals
+ // fonts.cpp globals
_fonts = new std::vector<AGS::Shared::Font>();
_ttfRenderer = new TTFFontRenderer();
_wfnRenderer = new WFNFontRenderer();
+ _fontLines = new SplitLines();
// game.cpp globals
_ccDynamicGUIObject = new CCGUIObject();
@@ -131,7 +132,7 @@ Globals::~Globals() {
// debug.cpp
delete _DbgMgr;
- // _GP(fonts).cpp
+ // fonts.cpp
delete _fonts;
delete _ttfRenderer;
delete _wfnRenderer;
diff --git a/engines/ags/globals.h b/engines/ags/globals.h
index 38aba72b0b..d7f237bbaa 100644
--- a/engines/ags/globals.h
+++ b/engines/ags/globals.h
@@ -47,6 +47,7 @@ class RoomStruct;
} // namespace Shared
} // namespace AGS
+class SplitLines;
class TTFFontRenderer;
class WFNFontRenderer;
@@ -148,6 +149,7 @@ public:
std::vector<AGS::Shared::Font> *_fonts;
TTFFontRenderer *_ttfRenderer;
WFNFontRenderer *_wfnRenderer;
+ SplitLines *_fontLines;
/**@}*/
diff --git a/engines/ags/plugins/agsplugin.cpp b/engines/ags/plugins/agsplugin.cpp
index af9d95c6b3..80915a6e26 100644
--- a/engines/ags/plugins/agsplugin.cpp
+++ b/engines/ags/plugins/agsplugin.cpp
@@ -342,7 +342,7 @@ void IAGSEngine::DrawTextWrapped(int32 xx, int32 yy, int32 wid, int32 font, int3
// TODO: use generic function from the engine instead of having copy&pasted code here
int linespacing = getfontspacing_outlined(font);
- if (break_up_text_into_lines(text, Lines, wid, font) == 0)
+ if (break_up_text_into_lines(text, _GP(fontLines), wid, font) == 0)
return;
Bitmap *ds = gfxDriver->GetStageBackBuffer();
@@ -350,8 +350,8 @@ void IAGSEngine::DrawTextWrapped(int32 xx, int32 yy, int32 wid, int32 font, int3
return;
color_t text_color = ds->GetCompatibleColor(color);
data_to_game_coords((int *)&xx, (int *)&yy); // stupid! quick tweak
- for (size_t i = 0; i < Lines.Count(); i++)
- draw_and_invalidate_text(ds, xx, yy + linespacing * i, font, text_color, Lines[i]);
+ for (size_t i = 0; i < _GP(fontLines).Count(); i++)
+ draw_and_invalidate_text(ds, xx, yy + linespacing * i, font, text_color, _GP(fontLines)[i]);
}
Bitmap glVirtualScreenWrap;
diff --git a/engines/ags/shared/font/fonts.cpp b/engines/ags/shared/font/fonts.cpp
index b9ebb2bdca..bb2e18b5cc 100644
--- a/engines/ags/shared/font/fonts.cpp
+++ b/engines/ags/shared/font/fonts.cpp
@@ -177,12 +177,6 @@ bool use_default_linespacing(size_t fontNumber) {
// Project-dependent implementation
extern int wgettextwidth_compensate(const char *tex, int font);
-namespace AGS {
-namespace Shared {
-SplitLines Lines;
-}
-}
-
// Replaces AGS-specific linebreak tags with common '\n'
void unescape_script_string(const char *cstr, std::vector<char> &out) {
out.clear();
diff --git a/engines/ags/shared/font/fonts.h b/engines/ags/shared/font/fonts.h
index 9ec98f54de..251142e37b 100644
--- a/engines/ags/shared/font/fonts.h
+++ b/engines/ags/shared/font/fonts.h
@@ -141,11 +141,6 @@ private:
// returns number of lines, or 0 if text cannot be split well to fit in this width
size_t split_lines(const char *texx, SplitLines &lines, int width, int fontNumber, size_t max_lines = -1);
-namespace AGS {
-namespace Shared {
-extern SplitLines Lines;
-} // namespace Shared
-} // namespace AGS
} // namespace AGS3
#endif
diff --git a/engines/ags/shared/gui/guilabel.cpp b/engines/ags/shared/gui/guilabel.cpp
index 96b26c1bfe..f17f80e7ae 100644
--- a/engines/ags/shared/gui/guilabel.cpp
+++ b/engines/ags/shared/gui/guilabel.cpp
@@ -26,6 +26,7 @@
#include "ags/shared/gui/guimain.h"
#include "ags/shared/util/stream.h"
#include "ags/shared/util/string_utils.h"
+#include "ags/globals.h"
namespace AGS3 {
@@ -55,7 +56,7 @@ void GUILabel::Draw(Shared::Bitmap *ds) {
// TODO: need to find a way to cache text prior to drawing;
// but that will require to update all gui controls when translation is changed in game
PrepareTextToDraw();
- if (SplitLinesForDrawing(Lines) == 0)
+ if (SplitLinesForDrawing(_GP(fontLines)) == 0)
return;
color_t text_color = ds->GetCompatibleColor(TextColor);
@@ -64,9 +65,9 @@ void GUILabel::Draw(Shared::Bitmap *ds) {
const bool limit_by_label_frame = loaded_game_file_version >= kGameVersion_272;
int at_y = Y;
for (size_t i = 0;
- i < Lines.Count() && (!limit_by_label_frame || at_y <= Y + Height);
+ i < _GP(fontLines).Count() && (!limit_by_label_frame || at_y <= Y + Height);
++i, at_y += linespacing) {
- GUI::DrawTextAlignedHor(ds, Lines[i], Font, text_color, X, X + Width - 1, at_y,
+ GUI::DrawTextAlignedHor(ds, _GP(fontLines)[i], Font, text_color, X, X + Width - 1, at_y,
(FrameAlignment)TextAlignment);
}
}
More information about the Scummvm-git-logs
mailing list