Features/GTK3/Porting/Record: Difference between revisions
Appearance
No edit summary |
|||
| Line 67: | Line 67: | ||
Due to: [http://bugs.sugarlabs.org/ticket/4345 SL#4345] | Due to: [http://bugs.sugarlabs.org/ticket/4345 SL#4345] | ||
New Gst.TagList: | |||
'''Replace:''' | |||
taglist = self._get_tags(constants.TYPE_AUDIO) | |||
if self._audio_pixbuf: | |||
pixbuf_b64 = utils.getStringFromPixbuf(self._audio_pixbuf) | |||
taglist[gst.TAG_EXTENDED_COMMENT] = "coverart=" + pixbuf_b64 | |||
vorbis_enc = audioline.get_by_name('audioVorbisenc') | |||
vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL) | |||
'''With:''' | |||
taglist = self._get_tags(constants.TYPE_AUDIO) | |||
if self._audio_pixbuf: | |||
pixbuf_b64 = utils.getStringFromPixbuf(self._audio_pixbuf) | |||
taglist.add_value( | |||
Gst.TagMergeMode.REPLACE, | |||
Gst.TAG_EXTENDED_COMMENT, | |||
"coverart=" + pixbuf_b64) | |||
vorbis_enc = audioline.get_by_name('audioVorbisenc') | |||
vorbis_enc.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL) | |||
'''Replace:''' | |||
taglist = self._get_tags(constants.TYPE_VIDEO) | |||
vorbis_enc = muxline.get_by_name('muxVorbisenc') | |||
vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL) | |||
'''With:''' | |||
taglist = self._get_tags(constants.TYPE_VIDEO) | |||
vorbis_enc = muxline.get_by_name('muxVorbisenc') | |||
vorbis_enc.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL) | |||
'''Replace:''' | |||
def _get_tags(self, type): | |||
tl = gst.TagList() | |||
tl[gst.TAG_ARTIST] = self.model.get_nickname() | |||
tl[gst.TAG_COMMENT] = "olpc" | |||
#this is unfortunately, unreliable | |||
#record.Record.log.debug("self.ca.metadata['title']->" + str(self.ca.metadata['title']) ) | |||
tl[gst.TAG_ALBUM] = "olpc" #self.ca.metadata['title'] | |||
tl[gst.TAG_DATE] = utils.getDateString(int(time.time())) | |||
stringType = constants.MEDIA_INFO[type]['istr'] | |||
# Translators: photo by photographer, e.g. "Photo by Mary" | |||
tl[gst.TAG_TITLE] = _('%(type)s by %(name)s') % {'type': stringType, | |||
'name': self.model.get_nickname()} | |||
return tl | |||
'''With:''' | |||
def _get_tags(self, type): | |||
taglist = Gst.TagList.new_empty() | |||
taglist.add_value( | |||
Gst.TagMergeMode.REPLACE, | |||
Gst.TAG_ARTIST, | |||
self.model.get_nickname()) | |||
taglist.add_value( | |||
Gst.TagMergeMode.REPLACE, | |||
Gst.TAG_COMMENT, | |||
"olpc") | |||
#this is unfortunately, unreliable | |||
#record.Record.log.debug("self.ca.metadata['title']->" + str(self.ca.metadata['title']) ) | |||
taglist.add_value( | |||
Gst.TagMergeMode.REPLACE, | |||
Gst.TAG_ALBUM, | |||
"olpc") #self.ca.metadata['title'] | |||
taglist.add_value( | |||
Gst.TagMergeMode.REPLACE, | |||
Gst.TAG_DATE, | |||
utils.getDateString(int(time.time()))) | |||
stringType = constants.MEDIA_INFO[type]['istr'] #self.ca.metadata['title'] | |||
taglist.add_value( | |||
Gst.TagMergeMode.REPLACE, | |||
Gst.TAG_TITLE, | |||
_('%(type)s by %(name)s') % {'type': stringType, | |||
'name': self.model.get_nickname()}) | |||
return taglist | |||
=From Pixmap to Pixbuf= | =From Pixmap to Pixbuf= | ||
Revision as of 09:26, 19 December 2012
Some changes
Replace:
def getStringFromPixbuf(pixbuf):
data = [""]
pixbuf.save_to_callback(_saveDataToBufferCb, "png", {}, data)
return base64.b64encode(str(data[0]))
def _saveDataToBufferCb(buf, data):
data[0] += buf
return True
With:
def getStringFromPixbuf(pixbuf):
"""Converts a pixbuf in a string."""
# Save_to_bufferv return: (bool, string)
data = pixbuf.save_to_bufferv('png', [], [])
return base64.b64encode(data[1])
Replace:
thumbImg.save(thumbPath, "jpeg", {"quality":"85"} )
With:
thumbImg.savev(thumbPath, "jpeg", {"quality":"85"} )
Replace:
def load_colored_svg(filename, stroke, fill):
path = os.path.join(constants.GFX_PATH, filename)
data = open(path, 'r').read()
entity = '<!ENTITY fill_color "%s">' % fill
data = re.sub('<!ENTITY fill_color .*>', entity, data)
entity = '<!ENTITY stroke_color "%s">' % stroke
data = re.sub('<!ENTITY stroke_color .*>', entity, data)
"""return rsvg.Handle(data=data).get_pixbuf()"""
With:
def load_colored_svg(filename, stroke, fill):
"""Loads an svg, will change the fill and
stroke colors and returns the pixbuf."""
path = os.path.join(constants.GFX_PATH, filename)
data = open(path, 'r').read()
entity = '<!ENTITY fill_color "%s">' % fill
data = re.sub('<!ENTITY fill_color .*>', entity, data)
entity = '<!ENTITY stroke_color "%s">' % stroke
data = re.sub('<!ENTITY stroke_color .*>', entity, data)
"""return Rsvg.Handle.new_from_data(data.encode('utf-8')).get_pixbuf()"""
Not implement:
super(Record, self).close()
Due to: SL#4345
New Gst.TagList:
Replace:
taglist = self._get_tags(constants.TYPE_AUDIO)
if self._audio_pixbuf:
pixbuf_b64 = utils.getStringFromPixbuf(self._audio_pixbuf)
taglist[gst.TAG_EXTENDED_COMMENT] = "coverart=" + pixbuf_b64
vorbis_enc = audioline.get_by_name('audioVorbisenc')
vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL)
With:
taglist = self._get_tags(constants.TYPE_AUDIO)
if self._audio_pixbuf:
pixbuf_b64 = utils.getStringFromPixbuf(self._audio_pixbuf)
taglist.add_value(
Gst.TagMergeMode.REPLACE,
Gst.TAG_EXTENDED_COMMENT,
"coverart=" + pixbuf_b64)
vorbis_enc = audioline.get_by_name('audioVorbisenc')
vorbis_enc.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL)
Replace:
taglist = self._get_tags(constants.TYPE_VIDEO)
vorbis_enc = muxline.get_by_name('muxVorbisenc')
vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL)
With:
taglist = self._get_tags(constants.TYPE_VIDEO)
vorbis_enc = muxline.get_by_name('muxVorbisenc')
vorbis_enc.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL)
Replace:
def _get_tags(self, type):
tl = gst.TagList()
tl[gst.TAG_ARTIST] = self.model.get_nickname()
tl[gst.TAG_COMMENT] = "olpc"
#this is unfortunately, unreliable
#record.Record.log.debug("self.ca.metadata['title']->" + str(self.ca.metadata['title']) )
tl[gst.TAG_ALBUM] = "olpc" #self.ca.metadata['title']
tl[gst.TAG_DATE] = utils.getDateString(int(time.time()))
stringType = constants.MEDIA_INFO[type]['istr']
# Translators: photo by photographer, e.g. "Photo by Mary"
tl[gst.TAG_TITLE] = _('%(type)s by %(name)s') % {'type': stringType,
'name': self.model.get_nickname()}
return tl
With:
def _get_tags(self, type):
taglist = Gst.TagList.new_empty()
taglist.add_value(
Gst.TagMergeMode.REPLACE,
Gst.TAG_ARTIST,
self.model.get_nickname())
taglist.add_value(
Gst.TagMergeMode.REPLACE,
Gst.TAG_COMMENT,
"olpc")
#this is unfortunately, unreliable
#record.Record.log.debug("self.ca.metadata['title']->" + str(self.ca.metadata['title']) )
taglist.add_value(
Gst.TagMergeMode.REPLACE,
Gst.TAG_ALBUM,
"olpc") #self.ca.metadata['title']
taglist.add_value(
Gst.TagMergeMode.REPLACE,
Gst.TAG_DATE,
utils.getDateString(int(time.time())))
stringType = constants.MEDIA_INFO[type]['istr'] #self.ca.metadata['title']
taglist.add_value(
Gst.TagMergeMode.REPLACE,
Gst.TAG_TITLE,
_('%(type)s by %(name)s') % {'type': stringType,
'name': self.model.get_nickname()})
return taglist
From Pixmap to Pixbuf
When an application fails and you want to close from the corresponding button occurs:
Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/sugar3/activity/activity.py", line 890, in _keep_failed_dialog_response_cb self.close(skip_save=True) TypeError: close() got an unexpected keyword argument 'skip_save' And the activity is not closed, nor can restart sugar as alert reappears again and again, you need to stop.
This error is caused because:
When a class B inherits from class A, and in B is overwritten a function of A, A function is no longer running, but instead runs the function of the class B, even when explicitly call function A from B.
The solution is in using Pixbuf instead of Pixmap:
Replace:
def _generate_image(self, num):
w = 55
h = w
pixmap = gdk.Pixmap(self.get_window(), w, h, -1)
ctx = pixmap.cairo_create()
ctx.rectangle(0, 0, w, h)
ctx.set_source_rgb(0, 0, 0)
ctx.fill()
By:
def _generate_image(self, num):
w = 55
h = w
x, y = self.get_property('window').get_position()
rect = self.get_allocation()
width, height = rect.width, rect.height
thumb_surface = Gdk.Window.create_similar_surface(
self.get_property('window'),
cairo.CONTENT_COLOR,
width, height)
ctx = cairo.Context(thumb_surface)
Gdk.cairo_set_source_window(
cairo_context,
self.get_property('window'),
x, y)
ctx.paint()
ctx.rectangle(x, y, w, h)
ctx.set_source_rgb(0, 0, 0)
ctx.fill()