This used to be stroke serialization for an undo-based file format.
"""
import mypaintlib, helpers, tiledsurface, pixbufsurface
-import command, stroke, layer, serialize
+import command, stroke, layer
import brush # FIXME: the brush module depends on gtk and everything, but we only need brush_lowlevel
import gzip, os, zipfile, tempfile, numpy, time
join = os.path.join
+++ /dev/null
-
-def save(obj, f):
- for name, type in obj.serialize_members:
- data = getattr(obj, name)
- if type is str:
- assert isinstance(data, str)
- f.write('%d\n' % len(data))
- f.write(data)
- elif type is int:
- f.write('%d\n' % data)
- elif type is float:
- # FIXME: inefficient
- f.write('%s\n' % repr(data))
- else:
- assert False, 'unknown type'
-
-def load(obj, f):
- for name, type in obj.serialize_members:
- if type is str:
- length = int(f.readline())
- data = f.read(length)
- assert len(data) == length
- setattr(obj, name, data)
- elif type is int:
- setattr(obj, name, int(f.readline()))
- elif type is float:
- setattr(obj, name, float(f.readline()))
- else:
- assert False, 'unknown type'
- if hasattr(obj, 'after_unserialize'): # FIXME: inconsistent name
- obj.after_unserialize()
-
class Stroke:
# A "finished" stroke object is immutable, except right after creation (when it has never been fully rendered).
+ # To modify an existing stroke, the old one must be deleted and a new Stroke instance must be used to replace it.
serial_number = 0
def __init__(self):
self.finished = False
# has different meanings for the states. This should cause
# fewer glitches than resetting the initial state to zero.
return s
-
- serialize_members = [
- ('total_painting_time', float),
- ('brush_settings', str),
- ('brush_state', str),
- ('stroke_data', str),
- ]
- def after_unserialize(self):
- assert not self.finished
- self.finished = True