Difference between revisions of "Features/GTK3/Porting/Record"
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | = | + | '''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 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ''' | + | '''By:''' |
− | + | 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:''' | '''Replace:''' | ||
− | + | thumbImg.save(thumbPath, "jpeg", {"quality":"85"} ) | |
− | ''' | + | '''By:''' |
− | + | thumbImg.savev(thumbPath, "jpeg", {"quality":"85"} ) | |
'''Replace:''' | '''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() | ||
− | ''' | + | '''By:''' |
− | + | 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:''' | '''Not implement:''' | ||
− | + | super(Record, self).close() | |
+ | |||
+ | '''Due to:''' [http://bugs.sugarlabs.org/ticket/4345] | ||
− | + | 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 by the following: | ||
+ | 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. | ||
+ | |||
+ | '''Stop using Pixmap instead use Pixbuf:''' | ||
'''Replace:''' | '''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() | ||
+ | |||
+ | '''New Gst.TagList: | ||
+ | |||
+ | Replace:''' | ||
taglist = self._get_tags(constants.TYPE_AUDIO) | taglist = self._get_tags(constants.TYPE_AUDIO) | ||
Line 81: | Line 136: | ||
vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL) | vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL) | ||
− | ''' | + | '''By:''' |
taglist = self._get_tags(constants.TYPE_AUDIO) | taglist = self._get_tags(constants.TYPE_AUDIO) | ||
Line 102: | Line 157: | ||
vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL) | vorbis_enc.merge_tags(taglist, gst.TAG_MERGE_REPLACE_ALL) | ||
− | ''' | + | '''By:''' |
taglist = self._get_tags(constants.TYPE_VIDEO) | taglist = self._get_tags(constants.TYPE_VIDEO) | ||
Line 111: | Line 166: | ||
def _get_tags(self, type): | def _get_tags(self, type): | ||
+ | |||
tl = gst.TagList() | tl = gst.TagList() | ||
tl[gst.TAG_ARTIST] = self.model.get_nickname() | tl[gst.TAG_ARTIST] = self.model.get_nickname() | ||
tl[gst.TAG_COMMENT] = "olpc" | tl[gst.TAG_COMMENT] = "olpc" | ||
− | + | tl[gst.TAG_ALBUM] = "olpc" | |
− | |||
− | tl[gst.TAG_ALBUM] = "olpc" | ||
tl[gst.TAG_DATE] = utils.getDateString(int(time.time())) | tl[gst.TAG_DATE] = utils.getDateString(int(time.time())) | ||
stringType = constants.MEDIA_INFO[type]['istr'] | stringType = constants.MEDIA_INFO[type]['istr'] | ||
− | |||
tl[gst.TAG_TITLE] = _('%(type)s by %(name)s') % {'type': stringType, | tl[gst.TAG_TITLE] = _('%(type)s by %(name)s') % {'type': stringType, | ||
'name': self.model.get_nickname()} | 'name': self.model.get_nickname()} | ||
return tl | return tl | ||
− | ''' | + | '''By:''' |
def _get_tags(self, type): | def _get_tags(self, type): | ||
Line 140: | Line 193: | ||
Gst.TAG_COMMENT, | Gst.TAG_COMMENT, | ||
"olpc") | "olpc") | ||
− | |||
− | |||
− | |||
taglist.add_value( | taglist.add_value( | ||
Line 154: | Line 204: | ||
utils.getDateString(int(time.time()))) | utils.getDateString(int(time.time()))) | ||
− | stringType = constants.MEDIA_INFO[type]['istr | + | stringType = constants.MEDIA_INFO[type]['istr'] |
taglist.add_value( | taglist.add_value( | ||
Line 164: | Line 214: | ||
return taglist | return taglist | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | GObject.get_data() and set_data() are deprecated. Use normal Python attributes instead | |
− | + | button.set_data('handler-ids', (clicked_handler, remove_handler, clipboard_handler)) | |
− | + | ||
− | + | ||
− | + | '''No joint implementation:''' | |
− | + | ||
+ | self.connect('size_allocate', self._size_allocate_cb) | ||
+ | def _size_allocate_cb(self, widget, requisition): | ||
+ | . . . | ||
+ | |||
+ | and | ||
+ | def do_size_allocate(self, allocation): | ||
+ | . . . | ||
− | |||
'''Replace:''' | '''Replace:''' | ||
− | + | taglist.add_value( | |
− | + | Gst.TagMergeMode.REPLACE, | |
− | + | Gst.TAG_DATE, | |
− | + | utils.getDateString(int(time.time()))) | |
− | + | ||
− | + | def getDateString( when ): | |
− | + | ||
− | + | return strftime( "%c", time.localtime(when) ) | |
'''By:''' | '''By:''' | ||
− | + | ||
+ | datetime = GLib.DateTime.new_now_local() | ||
+ | date = GLib.Date() | ||
+ | date.set_day(datetime.get_day_of_month()) | ||
+ | date.set_month(datetime.get_month()) | ||
+ | date.set_year(datetime.get_year()) | ||
− | + | taglist.add_value( | |
− | + | Gst.TagMergeMode.REPLACE, | |
− | + | Gst.TAG_DATE, | |
− | + | date) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 08:23, 23 December 2012
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
By:
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"} )
By:
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()
By:
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: [1]
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 by the following: 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.
Stop using Pixmap instead use Pixbuf:
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()
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)
By:
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)
By:
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" tl[gst.TAG_ALBUM] = "olpc" tl[gst.TAG_DATE] = utils.getDateString(int(time.time())) stringType = constants.MEDIA_INFO[type]['istr'] tl[gst.TAG_TITLE] = _('%(type)s by %(name)s') % {'type': stringType, 'name': self.model.get_nickname()} return tl
By:
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")
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'] taglist.add_value( Gst.TagMergeMode.REPLACE, Gst.TAG_TITLE, _('%(type)s by %(name)s') % {'type': stringType, 'name': self.model.get_nickname()}) return taglist
GObject.get_data() and set_data() are deprecated. Use normal Python attributes instead
button.set_data('handler-ids', (clicked_handler, remove_handler, clipboard_handler))
No joint implementation:
self.connect('size_allocate', self._size_allocate_cb) def _size_allocate_cb(self, widget, requisition): . . .
and
def do_size_allocate(self, allocation): . . .
Replace:
taglist.add_value(
Gst.TagMergeMode.REPLACE, Gst.TAG_DATE, utils.getDateString(int(time.time())))
def getDateString( when ):
return strftime( "%c", time.localtime(when) )
By:
datetime = GLib.DateTime.new_now_local() date = GLib.Date() date.set_day(datetime.get_day_of_month()) date.set_month(datetime.get_month()) date.set_year(datetime.get_year())
taglist.add_value(
Gst.TagMergeMode.REPLACE, Gst.TAG_DATE, date)