Use Handle::New
to construct T <: RefCountedObject
Unless `T::T(Args...)` is inaccessible from `Handle::New`, in which case `Handle::Handle{new T(args...), false}` should be used.
This commit is contained in:
parent
29ac869491
commit
b9a5d80f7b
@ -125,9 +125,9 @@ namespace spades {
|
||||
limbo = stmp::make_unique<LimboView>(this);
|
||||
paletteView = stmp::make_unique<PaletteView>(this);
|
||||
tcView = stmp::make_unique<TCProgressView>(this);
|
||||
scriptedUI.Set(new ClientUI(renderer.GetPointerOrNull(), audioDev.GetPointerOrNull(),
|
||||
fontManager.GetPointerOrNull(), this),
|
||||
false);
|
||||
scriptedUI =
|
||||
Handle<ClientUI>::New(renderer.GetPointerOrNull(), audioDev.GetPointerOrNull(),
|
||||
fontManager.GetPointerOrNull(), this);
|
||||
|
||||
renderer->SetGameMap(nullptr);
|
||||
}
|
||||
@ -168,7 +168,7 @@ namespace spades {
|
||||
for (size_t i = 0; i < world->GetNumPlayerSlots(); i++) {
|
||||
auto p = world->GetPlayer(static_cast<unsigned int>(i));
|
||||
if (p) {
|
||||
clientPlayers[i] = new ClientPlayer(*p, *this);
|
||||
clientPlayers[i] = Handle<ClientPlayer>::New(*p, *this);
|
||||
} else {
|
||||
clientPlayers[i] = nullptr;
|
||||
}
|
||||
|
@ -237,7 +237,7 @@ namespace spades {
|
||||
ScriptContextHandle ctx;
|
||||
IAudioDevice &audio = client.GetAudioDevice();
|
||||
|
||||
sandboxedRenderer.Set(new SandboxedRenderer(client.GetRenderer()), false);
|
||||
sandboxedRenderer = Handle<SandboxedRenderer>::New(client.GetRenderer());
|
||||
IRenderer &renderer = *sandboxedRenderer;
|
||||
|
||||
static ScriptFunction spadeFactory(
|
||||
|
@ -39,6 +39,7 @@ namespace spades {
|
||||
|
||||
class SandboxedRenderer;
|
||||
|
||||
// TODO: Use `shared_ptr` instead of `RefCountedObject`
|
||||
/** Representation of player which is used by
|
||||
* drawing/view layer of game client. */
|
||||
class ClientPlayer : public RefCountedObject {
|
||||
|
@ -40,7 +40,7 @@ namespace spades {
|
||||
if (!audioDevice)
|
||||
SPInvalidArgument("audioDevice");
|
||||
|
||||
helper.Set(new ClientUIHelper(this), false);
|
||||
helper = Handle<ClientUIHelper>::New(this);
|
||||
|
||||
ScopedPrivilegeEscalation privilege;
|
||||
static ScriptFunction uiFactory(
|
||||
|
@ -568,7 +568,7 @@ namespace spades {
|
||||
|
||||
stmp::optional<Player &> p = world->GetPlayer(id);
|
||||
if (p) {
|
||||
clientPlayers[id].Set(new ClientPlayer(*p, *this), false);
|
||||
clientPlayers[id] = Handle<ClientPlayer>::New(*p, *this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,7 +99,7 @@ namespace spades {
|
||||
std::list<std::pair<int, int>> skyline;
|
||||
|
||||
Bin(int width, int height, client::IRenderer &r) : width(width), height(height) {
|
||||
Handle<Bitmap> tmpbmp(new Bitmap(width, height), false);
|
||||
auto tmpbmp = Handle<Bitmap>::New(width, height);
|
||||
memset(tmpbmp->GetPixels(), 0, tmpbmp->GetWidth() * tmpbmp->GetHeight() * 4);
|
||||
image = r.CreateImage(*tmpbmp);
|
||||
skyline.emplace_back(0, 0);
|
||||
@ -316,7 +316,7 @@ namespace spades {
|
||||
|
||||
SPAssert(outbmp->pixel_mode == FT_PIXEL_MODE_GRAY);
|
||||
|
||||
Handle<Bitmap> spbmp(new Bitmap(outbmp->width + 1, outbmp->rows + 1), false);
|
||||
auto spbmp = Handle<Bitmap>::New(outbmp->width + 1, outbmp->rows + 1);
|
||||
|
||||
memset(spbmp->GetPixels(), 0, 4 * spbmp->GetWidth() * spbmp->GetHeight());
|
||||
|
||||
@ -358,8 +358,8 @@ namespace spades {
|
||||
enum { KernelSize = 6 };
|
||||
|
||||
auto &orig = *g.bmp;
|
||||
Handle<Bitmap> newbmp(
|
||||
new Bitmap(orig.GetWidth() + KernelSize, orig.GetHeight() + KernelSize), false);
|
||||
auto newbmp =
|
||||
Handle<Bitmap>::New(orig.GetWidth() + KernelSize, orig.GetHeight() + KernelSize);
|
||||
|
||||
int const origW = orig.GetWidth();
|
||||
int const origH = orig.GetHeight();
|
||||
|
@ -42,6 +42,7 @@ namespace spades {
|
||||
struct FTFaceWrapper;
|
||||
class FTFont;
|
||||
|
||||
// TODO: Use `shared_ptr` instead of `RefCountedObject`
|
||||
class FTFontSet : public RefCountedObject {
|
||||
friend class FTFont;
|
||||
std::list<std::unique_ptr<FTFaceWrapper>> faces;
|
||||
@ -57,7 +58,7 @@ namespace spades {
|
||||
/**
|
||||
* FreeType2 based font renderer.
|
||||
*
|
||||
|
||||
|
||||
* Warning: only one thread can access multiple FTFonts sharing the same FTFontSet
|
||||
* at the same time.
|
||||
*/
|
||||
|
@ -37,7 +37,7 @@ namespace spades {
|
||||
GlobalFontInfo() {
|
||||
SPLog("Loading built-in fonts");
|
||||
|
||||
guiFontSet.Set(new ngclient::FTFontSet(), false);
|
||||
guiFontSet = Handle<ngclient::FTFontSet>::New();
|
||||
|
||||
if (FileManager::FileExists("Gfx/Fonts/AlteDIN1451.ttf")) {
|
||||
guiFontSet->AddFace("Gfx/Fonts/AlteDIN1451.ttf");
|
||||
|
@ -523,7 +523,7 @@ namespace spades {
|
||||
|
||||
size_t pos = 0;
|
||||
|
||||
Handle<GameMap> map{new GameMap(), false};
|
||||
auto map = Handle<GameMap>::New();
|
||||
|
||||
if (onProgress) {
|
||||
onProgress(0);
|
||||
|
@ -43,7 +43,7 @@ namespace spades {
|
||||
public:
|
||||
Port() {
|
||||
SPADES_MARK_FUNCTION();
|
||||
bmp.Set(new Bitmap(512, 512), false);
|
||||
bmp = Handle<Bitmap>::New(512, 512);
|
||||
}
|
||||
Bitmap &GetFramebuffer() override { return *bmp; }
|
||||
void Swap() override {
|
||||
@ -53,8 +53,8 @@ namespace spades {
|
||||
|
||||
HitTestDebugger::HitTestDebugger(World *world) : world(world) {
|
||||
SPADES_MARK_FUNCTION();
|
||||
port.Set(new Port(), false);
|
||||
renderer.Set(new draw::SWRenderer(port.Cast<draw::SWPort>()), false);
|
||||
port = Handle<Port>::New();
|
||||
renderer = Handle<draw::SWRenderer>::New(port.Cast<draw::SWPort>()).Cast<IRenderer>();
|
||||
renderer->Init();
|
||||
}
|
||||
|
||||
|
@ -110,7 +110,7 @@ namespace spades {
|
||||
}
|
||||
|
||||
template <class... Args> static Handle New(Args &&... args) {
|
||||
T *ptr = new T{std::forward<Args>(args)...};
|
||||
T *ptr = new T(std::forward<Args>(args)...);
|
||||
return {ptr, false};
|
||||
}
|
||||
|
||||
|
@ -62,27 +62,22 @@ namespace spades {
|
||||
int height = img->h;
|
||||
int pitch = img->pitch;
|
||||
|
||||
Handle<Bitmap> bmp;
|
||||
bmp.Set(new Bitmap(width, height), false);
|
||||
try {
|
||||
unsigned char *outPixels = (unsigned char *)bmp->GetPixels();
|
||||
auto bmp = Handle<Bitmap>::New(width, height);
|
||||
unsigned char *outPixels = (unsigned char *)bmp->GetPixels();
|
||||
|
||||
if (pitch == width * 4) {
|
||||
// if the pitch matches the requirement of Bitmap,
|
||||
// just use it
|
||||
memcpy(outPixels, inPixels, pitch * height);
|
||||
} else {
|
||||
// convert
|
||||
for (int y = 0; y < height; y++) {
|
||||
memcpy(outPixels, inPixels, width * 4);
|
||||
outPixels += width * 4;
|
||||
inPixels += pitch;
|
||||
}
|
||||
if (pitch == width * 4) {
|
||||
// if the pitch matches the requirement of Bitmap,
|
||||
// just use it
|
||||
memcpy(outPixels, inPixels, pitch * height);
|
||||
} else {
|
||||
// convert
|
||||
for (int y = 0; y < height; y++) {
|
||||
memcpy(outPixels, inPixels, width * 4);
|
||||
outPixels += width * 4;
|
||||
inPixels += pitch;
|
||||
}
|
||||
return std::move(bmp).Unmanage();
|
||||
} catch (...) {
|
||||
throw;
|
||||
}
|
||||
return std::move(bmp).Unmanage();
|
||||
}
|
||||
|
||||
void Save(IStream *, Bitmap *) override {
|
||||
|
@ -51,7 +51,7 @@ namespace spades {
|
||||
|
||||
Bitmap *GLFlatMapRenderer::GenerateBitmap(int mx, int my, int w, int h) {
|
||||
SPADES_MARK_FUNCTION();
|
||||
Handle<Bitmap> bmp(new Bitmap(w, h), false);
|
||||
auto bmp = Handle<Bitmap>::New(w, h);
|
||||
try {
|
||||
uint32_t *pixels = bmp->GetPixels();
|
||||
|
||||
|
@ -1037,9 +1037,8 @@ namespace spades {
|
||||
device->BindFramebuffer(IGLDevice::Framebuffer, 0);
|
||||
device->Enable(IGLDevice::Blend, false);
|
||||
device->Viewport(0, 0, handle.GetWidth(), handle.GetHeight());
|
||||
Handle<GLImage> image(new GLImage(handle.GetTexture(), device.GetPointerOrNull(), handle.GetWidth(),
|
||||
handle.GetHeight(), false),
|
||||
false);
|
||||
auto image = Handle<GLImage>::New(handle.GetTexture(), device.GetPointerOrNull(),
|
||||
handle.GetWidth(), handle.GetHeight(), false);
|
||||
SetColorAlphaPremultiplied(MakeVector4(1, 1, 1, 1));
|
||||
DrawImage(*image,
|
||||
AABB2(0, handle.GetHeight(), handle.GetWidth(), -handle.GetHeight()));
|
||||
@ -1233,9 +1232,9 @@ namespace spades {
|
||||
device->BindFramebuffer(IGLDevice::Framebuffer, 0);
|
||||
device->Enable(IGLDevice::Blend, false);
|
||||
device->Viewport(0, 0, w, h);
|
||||
// TODO: Replace this with `Handle::New`
|
||||
Handle<GLImage> image(new GLImage(lastColorBufferTexture, device.GetPointerOrNull(), w, h, false),
|
||||
false);
|
||||
|
||||
auto image = Handle<GLImage>::New(lastColorBufferTexture, device.GetPointerOrNull(),
|
||||
w, h, false);
|
||||
SetColorAlphaPremultiplied(MakeVector4(1, 1, 1, 1));
|
||||
DrawImage(*image, AABB2(0, h, w, -h));
|
||||
imageRenderer->Flush(); // must flush now because handle is released soon
|
||||
|
@ -38,7 +38,7 @@ namespace spades {
|
||||
SPRaise("Map width must be a multiple of 32.");
|
||||
}
|
||||
|
||||
img.Set(new SWImage(map->Width(), map->Height()), false);
|
||||
img = Handle<SWImage>::New(map->Width(), map->Height());
|
||||
updateMap.resize(w * h / 32);
|
||||
std::fill(updateMap.begin(), updateMap.end(), 0xffffffff);
|
||||
updateMap2.resize(w * h / 32);
|
||||
|
@ -115,7 +115,7 @@ namespace spades {
|
||||
|
||||
Handle<ConsoleCommandCandidateIterator>
|
||||
ConfigConsoleResponder::AutocompleteCommandName(const std::string &name) {
|
||||
return {new ConfigNameIterator(name), false};
|
||||
return Handle<ConfigNameIterator>::New(name).Cast<ConsoleCommandCandidateIterator>();
|
||||
}
|
||||
} // namespace gui
|
||||
} // namespace spades
|
||||
|
@ -84,7 +84,8 @@ namespace spades {
|
||||
Handle<ConsoleCommandCandidateIterator> second) {
|
||||
SPADES_MARK_FUNCTION();
|
||||
|
||||
return {new MergeConsoleCommandCandidates{std::move(first), std::move(second)}, false};
|
||||
return Handle<MergeConsoleCommandCandidates>::New(std::move(first), std::move(second))
|
||||
.Cast<ConsoleCommandCandidateIterator>();
|
||||
}
|
||||
|
||||
namespace {
|
||||
@ -135,7 +136,7 @@ namespace spades {
|
||||
|
||||
Handle<ConsoleCommandCandidateIterator>
|
||||
MakeCandidates(const std::map<std::string, std::string> &items, const std::string &query) {
|
||||
return {new MapIterator{items, query}, false};
|
||||
return Handle<MapIterator>::New(items, query).Cast<ConsoleCommandCandidateIterator>();
|
||||
}
|
||||
} // namespace gui
|
||||
} // namespace spades
|
||||
|
@ -33,7 +33,7 @@ namespace spades {
|
||||
: renderer{renderer}, audioDevice{audioDevice}, subview{subview} {
|
||||
SPADES_MARK_FUNCTION();
|
||||
|
||||
helper.Set(new ConsoleHelper(this), true);
|
||||
helper = Handle<ConsoleHelper>::New(this);
|
||||
|
||||
ScopedPrivilegeEscalation privilege;
|
||||
static ScriptFunction uiFactory("ConsoleUI@ CreateConsoleUI(Renderer@, "
|
||||
|
@ -233,9 +233,10 @@ namespace spades {
|
||||
protected:
|
||||
spades::gui::View *CreateView(spades::client::IRenderer *renderer,
|
||||
spades::client::IAudioDevice *audio) override {
|
||||
Handle<client::FontManager> fontManager(new client::FontManager(renderer), false);
|
||||
Handle<gui::View> innerView{new spades::client::Client(renderer, audio, addr, fontManager), false};
|
||||
return new spades::gui::ConsoleScreen(renderer, audio, fontManager, std::move(innerView));
|
||||
auto fontManager = Handle<client::FontManager>::New(renderer);
|
||||
auto innerView = Handle<client::Client>::New(renderer, audio, addr, fontManager);
|
||||
return new spades::gui::ConsoleScreen(renderer, audio, fontManager,
|
||||
std::move(innerView).Cast<gui::View>());
|
||||
}
|
||||
|
||||
public:
|
||||
@ -249,9 +250,10 @@ namespace spades {
|
||||
protected:
|
||||
spades::gui::View *CreateView(spades::client::IRenderer *renderer,
|
||||
spades::client::IAudioDevice *audio) override {
|
||||
Handle<client::FontManager> fontManager(new client::FontManager(renderer), false);
|
||||
Handle<gui::View> innerView{new spades::gui::MainScreen(renderer, audio, fontManager), false};
|
||||
return new spades::gui::ConsoleScreen(renderer, audio, fontManager, std::move(innerView));
|
||||
auto fontManager = Handle<client::FontManager>::New(renderer);
|
||||
auto innerView = Handle<gui::MainScreen>::New(renderer, audio, fontManager);
|
||||
return new spades::gui::ConsoleScreen(renderer, audio, fontManager,
|
||||
std::move(innerView).Cast<gui::View>());
|
||||
}
|
||||
|
||||
public:
|
||||
|
@ -358,8 +358,8 @@ namespace spades {
|
||||
|
||||
std::string MainScreen::Connect(const ServerAddress &host) {
|
||||
try {
|
||||
subview.Set(new client::Client(&*renderer, &*audioDevice, host, fontManager),
|
||||
false);
|
||||
subview = Handle<client::Client>::New(&*renderer, &*audioDevice, host, fontManager)
|
||||
.Cast<View>();
|
||||
} catch (const std::exception &ex) {
|
||||
SPLog("[!] Error while initializing a game client: %s", ex.what());
|
||||
return ex.what();
|
||||
|
@ -324,11 +324,10 @@ namespace spades {
|
||||
|
||||
void SetFramebufferBitmap() {
|
||||
if (adjusted) {
|
||||
framebuffer.Set(new Bitmap(actualW, actualH), false);
|
||||
framebuffer = Handle<Bitmap>::New(actualW, actualH);
|
||||
} else {
|
||||
framebuffer.Set(new Bitmap(reinterpret_cast<uint32_t *>(surface->pixels),
|
||||
surface->w, surface->h),
|
||||
false);
|
||||
framebuffer = Handle<Bitmap>::New(reinterpret_cast<uint32_t *>(surface->pixels),
|
||||
surface->w, surface->h);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -284,10 +284,9 @@ namespace spades {
|
||||
return new audio::NullDevice();
|
||||
}
|
||||
View *CreateView(client::IRenderer *renderer, client::IAudioDevice *dev) override {
|
||||
Handle<client::FontManager> fontManager(new client::FontManager(renderer),
|
||||
false);
|
||||
view.Set(new StartupScreen(renderer, dev, helper, fontManager), true);
|
||||
return view.GetPointerOrNull();
|
||||
auto fontManager = Handle<client::FontManager>::New(renderer);
|
||||
view = Handle<StartupScreen>::New(renderer, dev, helper, fontManager);
|
||||
return Handle<StartupScreen>{view}.Unmanage();
|
||||
}
|
||||
|
||||
public:
|
||||
|
@ -23,7 +23,8 @@ namespace spades {
|
||||
namespace gui {
|
||||
Handle<ConsoleCommandCandidateIterator>
|
||||
View::AutocompleteCommandName(const std::string &name) {
|
||||
return {new EmptyIterator<const ConsoleCommandCandidate &>(), false};
|
||||
return Handle<EmptyIterator<const ConsoleCommandCandidate &>>::New()
|
||||
.Cast<ConsoleCommandCandidateIterator>();
|
||||
}
|
||||
} // namespace gui
|
||||
} // namespace spades
|
||||
|
Loading…
x
Reference in New Issue
Block a user