Difference between revisions of "Features/GTK3/Porting/Record"

From Sugar Labs
< Features‎ | GTK3‎ | Porting
Jump to navigation Jump to search
(Created page with "'''Replace:''' def getStringFromPixbuf(pixbuf): data = [""] pixbuf.save_to_callback(_saveDataToBufferCb, "png", {}, data) return base64.b64encode(str(data[0])) ...")
 
Line 1: Line 1:
 +
= Some changes =
 +
 
'''Replace:'''
 
'''Replace:'''
  
def getStringFromPixbuf(pixbuf):
+
def getStringFromPixbuf(pixbuf):
    data = [""]
+
    data = [""]
    pixbuf.save_to_callback(_saveDataToBufferCb, "png", {}, data)
+
    pixbuf.save_to_callback(_saveDataToBufferCb, "png", {}, data)
    return base64.b64encode(str(data[0]))
+
    return base64.b64encode(str(data[0]))
 
+
 
+
def _saveDataToBufferCb(buf, data):
+
def _saveDataToBufferCb(buf, data):
    data[0] += buf
+
    data[0] += buf
    return True
+
    return True
  
'''By:'''
+
'''With:'''
  
def getStringFromPixbuf(pixbuf):
+
def getStringFromPixbuf(pixbuf):
    """Converts a pixbuf in a string."""
+
    """Converts a pixbuf in a string."""
 +
 
 +
    # Save_to_bufferv return: (bool, string)
 +
    data = pixbuf.save_to_bufferv('png', [], [])
 
      
 
      
    # Save_to_bufferv return: (bool, string)
+
    return base64.b64encode(data[1])
    data = pixbuf.save_to_bufferv('png', [], [])
 
   
 
    return base64.b64encode(data[1])
 
  
 
'''Replace:'''
 
'''Replace:'''
  
thumbImg.save(thumbPath, "jpeg", {"quality":"85"} )
+
thumbImg.save(thumbPath, "jpeg", {"quality":"85"} )
  
'''By:'''
+
'''With:'''
  
thumbImg.savev(thumbPath, "jpeg", {"quality":"85"} )
+
thumbImg.savev(thumbPath, "jpeg", {"quality":"85"} )
  
 
'''Replace:'''
 
'''Replace:'''
  
def load_colored_svg(filename, stroke, fill):
+
def load_colored_svg(filename, stroke, fill):
    path = os.path.join(constants.GFX_PATH, filename)
+
    path = os.path.join(constants.GFX_PATH, filename)
    data = open(path, 'r').read()
+
    data = open(path, 'r').read()
 
+
    entity = '<!ENTITY fill_color "%s">' % fill
+
    entity = '<!ENTITY fill_color "%s">' % fill
    data = re.sub('<!ENTITY fill_color .*>', entity, data)
+
    data = re.sub('<!ENTITY fill_color .*>', entity, data)
 
+
    entity = '<!ENTITY stroke_color "%s">' % stroke
+
    entity = '<!ENTITY stroke_color "%s">' % stroke
    data = re.sub('<!ENTITY stroke_color .*>', entity, data)
+
    data = re.sub('<!ENTITY stroke_color .*>', entity, data)
 
+
    '''return rsvg.Handle(data=data).get_pixbuf()'''
+
    """return rsvg.Handle(data=data).get_pixbuf()"""
  
'''By:'''
+
'''With:'''
  
def load_colored_svg(filename, stroke, fill):
+
def load_colored_svg(filename, stroke, fill):
    """Loads an svg, will change the fill and
+
    """Loads an svg, will change the fill and
    stroke colors and returns the pixbuf."""
+
    stroke colors and returns the pixbuf."""
 
      
 
      
    path = os.path.join(constants.GFX_PATH, filename)
+
    path = os.path.join(constants.GFX_PATH, filename)
    data = open(path, 'r').read()
+
    data = open(path, 'r').read()
 
+
    entity = '<!ENTITY fill_color "%s">' % fill
+
    entity = '<!ENTITY fill_color "%s">' % fill
    data = re.sub('<!ENTITY fill_color .*>', entity, data)
+
    data = re.sub('<!ENTITY fill_color .*>', entity, data)
 
+
    entity = '<!ENTITY stroke_color "%s">' % stroke
+
    entity = '<!ENTITY stroke_color "%s">' % stroke
    data = re.sub('<!ENTITY stroke_color .*>', entity, data)
+
    data = re.sub('<!ENTITY stroke_color .*>', entity, data)
 
+
    '''return Rsvg.Handle.new_from_data(data.encode('utf-8')).get_pixbuf()'''
+
    """return Rsvg.Handle.new_from_data(data.encode('utf-8')).get_pixbuf()"""
  
 
'''Not implement:'''
 
'''Not implement:'''
  
super(Record, self).close()
+
super(Record, self).close()
  
'''Due to:''' [http://bugs.sugarlabs.org/ticket/4345]
+
Due to: [http://bugs.sugarlabs.org/ticket/4345 SL#4345]
  
'''When an application fails and you want to close from the corresponding button occurs:'''
+
=From Pixmap to Pixbuf=
Traceback (most recent call last):
+
When an application fails and you want to close from the corresponding button occurs:
File "/usr/lib/python2.7/site-packages/sugar3/activity/activity.py", line 890, in _keep_failed_dialog_response_cb
+
Traceback (most recent call last):
self.close(skip_save=True)
+
File "/usr/lib/python2.7/site-packages/sugar3/activity/activity.py", line 890, in _keep_failed_dialog_response_cb
TypeError: close() got an unexpected keyword argument 'skip_save'
+
self.close(skip_save=True)
And the activity is not closed, nor can restart sugar as alert reappears again and again, you need to stop.
+
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:'''
+
==This error is caused because:==
 
When a class B inherits from class A, and
 
When a class B inherits from class A, and
 
in B is overwritten a function of A,
 
in B is overwritten a function of A,
Line 81: Line 84:
  
  
'''Stop using Pixmap instead use Pixbuf:'''
+
The solution is in using Pixbuf instead of Pixmap:
  
 
'''Replace:'''
 
'''Replace:'''
Line 96: Line 99:
 
'''By:'''
 
'''By:'''
 
     def _generate_image(self, num):
 
     def _generate_image(self, num):
 
+
 
         w = 55
 
         w = 55
 
         h = w
 
         h = w

Revision as of 21:22, 18 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

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()