[aseprite] 21/64: Fix size calculation for Cmd with a std::stringstream
Tobias Hansen
thansen at moszumanska.debian.org
Tue Jun 21 14:43:01 UTC 2016
This is an automated email from the git hooks/post-receive script.
thansen pushed a commit to branch master
in repository aseprite.
commit 8c883654187c2afac7719d8629cb9f3ae3909d42
Author: David Capello <davidcapello at gmail.com>
Date: Mon May 9 19:03:12 2016 -0300
Fix size calculation for Cmd with a std::stringstream
---
src/app/cmd/add_cel.cpp | 5 ++++-
src/app/cmd/add_cel.h | 6 +++---
src/app/cmd/add_frame_tag.cpp | 11 ++++-------
src/app/cmd/add_frame_tag.h | 7 +++++--
src/app/cmd/add_layer.cpp | 5 ++++-
src/app/cmd/add_layer.h | 6 +++---
src/app/cmd/add_palette.cpp | 4 +++-
src/app/cmd/add_palette.h | 6 +++---
src/app/cmd/copy_region.cpp | 6 +++++-
src/app/cmd/copy_region.h | 7 ++++---
10 files changed, 38 insertions(+), 25 deletions(-)
diff --git a/src/app/cmd/add_cel.cpp b/src/app/cmd/add_cel.cpp
index 2fc378f..0c7448a 100644
--- a/src/app/cmd/add_cel.cpp
+++ b/src/app/cmd/add_cel.cpp
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -31,6 +31,7 @@ using namespace doc;
AddCel::AddCel(Layer* layer, Cel* cel)
: WithLayer(layer)
, WithCel(cel)
+ , m_size(0)
{
}
@@ -55,6 +56,7 @@ void AddCel::onUndo()
write_celdata(m_stream, cel->data());
}
write_cel(m_stream, cel);
+ m_size = size_t(m_stream.tellp());
removeCel(layer, cel);
}
@@ -78,6 +80,7 @@ void AddCel::onRedo()
m_stream.str(std::string());
m_stream.clear();
+ m_size = 0;
}
void AddCel::addCel(Layer* layer, Cel* cel)
diff --git a/src/app/cmd/add_cel.h b/src/app/cmd/add_cel.h
index a14bcdb..1b6d640 100644
--- a/src/app/cmd/add_cel.h
+++ b/src/app/cmd/add_cel.h
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -35,14 +35,14 @@ namespace cmd {
void onUndo() override;
void onRedo() override;
size_t onMemSize() const override {
- return sizeof(*this) +
- (size_t)const_cast<std::stringstream*>(&m_stream)->tellp();
+ return sizeof(*this) + m_size;
}
private:
void addCel(Layer* layer, Cel* cel);
void removeCel(Layer* layer, Cel* cel);
+ size_t m_size;
std::stringstream m_stream;
};
diff --git a/src/app/cmd/add_frame_tag.cpp b/src/app/cmd/add_frame_tag.cpp
index d702520..4fcb3b1 100644
--- a/src/app/cmd/add_frame_tag.cpp
+++ b/src/app/cmd/add_frame_tag.cpp
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -23,6 +23,7 @@ using namespace doc;
AddFrameTag::AddFrameTag(Sprite* sprite, FrameTag* frameTag)
: WithSprite(sprite)
, WithFrameTag(frameTag)
+ , m_size(0)
{
}
@@ -40,6 +41,7 @@ void AddFrameTag::onUndo()
Sprite* sprite = this->sprite();
FrameTag* frameTag = this->frameTag();
write_frame_tag(m_stream, frameTag);
+ m_size = size_t(m_stream.tellp());
sprite->frameTags().remove(frameTag);
sprite->incrementVersion();
@@ -56,12 +58,7 @@ void AddFrameTag::onRedo()
m_stream.str(std::string());
m_stream.clear();
-}
-
-size_t AddFrameTag::onMemSize() const
-{
- return sizeof(*this)
- + (size_t)const_cast<std::stringstream*>(&m_stream)->tellp();
+ m_size = 0;
}
} // namespace cmd
diff --git a/src/app/cmd/add_frame_tag.h b/src/app/cmd/add_frame_tag.h
index 4494690..6011f6e 100644
--- a/src/app/cmd/add_frame_tag.h
+++ b/src/app/cmd/add_frame_tag.h
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -29,9 +29,12 @@ namespace cmd {
void onExecute() override;
void onUndo() override;
void onRedo() override;
- size_t onMemSize() const override;
+ size_t onMemSize() const override {
+ return sizeof(*this) + m_size;
+ }
private:
+ size_t m_size;
std::stringstream m_stream;
};
diff --git a/src/app/cmd/add_layer.cpp b/src/app/cmd/add_layer.cpp
index 8ddb778..3d9241f 100644
--- a/src/app/cmd/add_layer.cpp
+++ b/src/app/cmd/add_layer.cpp
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -26,6 +26,7 @@ AddLayer::AddLayer(Layer* folder, Layer* newLayer, Layer* afterThis)
: m_folder(folder)
, m_newLayer(newLayer)
, m_afterThis(afterThis)
+ , m_size(0)
{
}
@@ -44,6 +45,7 @@ void AddLayer::onUndo()
Layer* layer = m_newLayer.layer();
write_layer(m_stream, layer);
+ m_size = size_t(m_stream.tellp());
removeLayer(folder, layer);
}
@@ -59,6 +61,7 @@ void AddLayer::onRedo()
m_stream.str(std::string());
m_stream.clear();
+ m_size = 0;
}
void AddLayer::addLayer(Layer* folder, Layer* newLayer, Layer* afterThis)
diff --git a/src/app/cmd/add_layer.h b/src/app/cmd/add_layer.h
index 3dfccf9..d9f52f1 100644
--- a/src/app/cmd/add_layer.h
+++ b/src/app/cmd/add_layer.h
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -31,8 +31,7 @@ namespace cmd {
void onUndo() override;
void onRedo() override;
size_t onMemSize() const override {
- return sizeof(*this) +
- (size_t)const_cast<std::stringstream*>(&m_stream)->tellp();
+ return sizeof(*this) + m_size;
}
private:
@@ -42,6 +41,7 @@ namespace cmd {
WithLayer m_folder;
WithLayer m_newLayer;
WithLayer m_afterThis;
+ size_t m_size;
std::stringstream m_stream;
};
diff --git a/src/app/cmd/add_palette.cpp b/src/app/cmd/add_palette.cpp
index b0c9aef..c989451 100644
--- a/src/app/cmd/add_palette.cpp
+++ b/src/app/cmd/add_palette.cpp
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -22,9 +22,11 @@ using namespace doc;
AddPalette::AddPalette(Sprite* sprite, Palette* pal)
: WithSprite(sprite)
+ , m_size(0)
, m_frame(pal->frame())
{
write_palette(m_stream, pal);
+ m_size = size_t(m_stream.tellp());
}
void AddPalette::onExecute()
diff --git a/src/app/cmd/add_palette.h b/src/app/cmd/add_palette.h
index 8ef0f85..d229832 100644
--- a/src/app/cmd/add_palette.h
+++ b/src/app/cmd/add_palette.h
@@ -1,5 +1,5 @@
// Aseprite
-// Copyright (C) 2001-2015 David Capello
+// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@@ -33,11 +33,11 @@ namespace cmd {
void onExecute() override;
void onUndo() override;
size_t onMemSize() const override {
- return sizeof(*this) +
- (size_t)const_cast<std::stringstream*>(&m_stream)->tellp();
+ return sizeof(*this) + m_size;
}
private:
+ size_t m_size;
std::stringstream m_stream;
frame_t m_frame;
};
diff --git a/src/app/cmd/copy_region.cpp b/src/app/cmd/copy_region.cpp
index 5a9d550..152dd40 100644
--- a/src/app/cmd/copy_region.cpp
+++ b/src/app/cmd/copy_region.cpp
@@ -23,6 +23,7 @@ CopyRegion::CopyRegion(Image* dst, const Image* src,
int dst_dx, int dst_dy,
bool alreadyCopied)
: WithImage(dst)
+ , m_size(0)
, m_alreadyCopied(alreadyCopied)
{
// Create region to save/swap later
@@ -40,11 +41,13 @@ CopyRegion::CopyRegion(Image* dst, const Image* src,
// Save region pixels
for (const auto& rc : m_region) {
- for (int y=0; y<rc.h; ++y)
+ for (int y=0; y<rc.h; ++y) {
m_stream.write(
(const char*)src->getPixelAddress(rc.x, rc.y+y),
src->getRowStrideSize(rc.w));
+ }
}
+ m_size = size_t(m_stream.tellp());
}
void CopyRegion::onExecute()
@@ -76,6 +79,7 @@ void CopyRegion::swap()
image->getRowStrideSize(rc.w));
// Restore m_stream into the image
+ m_stream.seekg(0, std::ios_base::beg);
for (const auto& rc : m_region) {
for (int y=0; y<rc.h; ++y) {
m_stream.read(
diff --git a/src/app/cmd/copy_region.h b/src/app/cmd/copy_region.h
index 84ae13b..3340024 100644
--- a/src/app/cmd/copy_region.h
+++ b/src/app/cmd/copy_region.h
@@ -27,7 +27,8 @@ namespace cmd {
// should do nothing, because modified pixels are alreadt on "dst"
// (so we use "src" as the original image).
CopyRegion(Image* dst, const Image* src,
- const gfx::Region& region, int src_dx, int src_dy,
+ const gfx::Region& region,
+ int dst_dx, int dst_dy,
bool alreadyCopied = false);
protected:
@@ -35,13 +36,13 @@ namespace cmd {
void onUndo() override;
void onRedo() override;
size_t onMemSize() const override {
- return sizeof(*this) +
- (size_t)const_cast<std::stringstream*>(&m_stream)->tellp();
+ return sizeof(*this) + m_size;
}
private:
void swap();
+ size_t m_size;
bool m_alreadyCopied;
gfx::Region m_region;
std::stringstream m_stream;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git
More information about the Pkg-games-commits
mailing list