From 19d464d591f664ebce4472f706d6c01a5774501c Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Sat, 18 Jul 2009 00:40:59 +0000 Subject: dead key workaround --- diff --git a/tasprites.py b/tasprites.py index 08c5f83..b4fc67a 100644 --- a/tasprites.py +++ b/tasprites.py @@ -133,8 +133,10 @@ def hit(spr,pos): def draw_label(spr, label, myscale, center_flag): fd = pango.FontDescription('Sans') fd.set_size(int(myscale*spr.tw.scale*pango.SCALE)) + # print label + # print type(label) if type(label) == str or type(label) == unicode: - pl = spr.tw.window.create_pango_layout(str(label)) + pl = spr.tw.window.create_pango_layout(label.replace("\0"," ")) pl.set_font_description(fd) if center_flag: swidth = pl.get_size()[0]/pango.SCALE diff --git a/taturtle.py b/taturtle.py index 39f4570..9479c97 100644 --- a/taturtle.py +++ b/taturtle.py @@ -252,12 +252,15 @@ def draw_text(t, label, x, y, size, w): fd.set_size(int(size)*pango.SCALE) except: pass - pl = t.tw.window.create_pango_layout(str(label)) - pl.set_font_description(fd) - pl.set_width(int(w)*pango.SCALE) - t.canvas.image.draw_layout(t.gc,int(x),int(y),pl) - w,h = pl.get_pixel_size() - invalt(t,x,y,w,h) + if type(label) == str or type(label) == unicode: + pl = t.tw.window.create_pango_layout(label.replace("\0"," ")) + pl.set_font_description(fd) + pl.set_width(int(w)*pango.SCALE) + t.canvas.image.draw_layout(t.gc,int(x),int(y),pl) + w,h = pl.get_pixel_size() + invalt(t,x,y,w,h) + else: + print type(label) def draw_line(t,x1,y1,x2,y2): x1,y1 = t.width/2+int(x1), t.height/2-int(y1) diff --git a/tawindow.py b/tawindow.py index bfca132..7989406 100644 --- a/tawindow.py +++ b/tawindow.py @@ -44,6 +44,33 @@ from taturtle import * from taproject import * from sugar.graphics.objectchooser import ObjectChooser +# from palettes import ContentInvoker +# from gettext import gettext as _ +""" +class PopupHandler(): + + def __init__(self): + self.table = {} + + def getInvoker(self, block_name): + if block_name in self.table: + return self.table[block_name] + + msg = self._getHelpMessage(block_name) + if msg != "": + self.table[block_name] = ContentInvoker(msg) + return self.table[block_name] + + print("no hay invoker para" + block_name) + return None + + def _getHelpMessage(self, block_name): + help_msg_name = "popup_help_" + block_name + return _(help_msg_name) + +popupHandler = PopupHandler() +""" + # # Setup # @@ -77,6 +104,8 @@ def twNew(win, path, lang, parent=None): win.connect("key_press_event", keypress_cb, tw) tw.keypress = "" tw.keyvalue = 0 + tw.dead_tilde = 0 + tw.dead_acute = 0 tw.area = win.window tw.gc = tw.area.new_gc() # tw.window.textentry = gtk.Entry() @@ -263,6 +292,12 @@ def mouse_move(tw, x, y, verbose=False, mdx=0, mdy=0): if verbose: print "processing remote mouse move: " + str(x) + " " + str(y) if tw.draggroup is None: + # popup help from RGS +# spr = findsprite(tw,(x,y)) +# if spr and spr.type == 'category': +# proto = get_proto_from_category(tw,x,y) +# if proto and proto!='hide': +# showPopup(proto.name) return tw.block_operation = 'move' spr = tw.draggroup[0] @@ -539,6 +574,15 @@ def key_press(tw, alt_mask, keyname, keyunicode, verbose=False): 'Alt_L', 'Alt_R', 'KP_Enter', 'ISO_Level3_Shift']: keyname = '' keyunicode = 0 + # Hack until I sort out input and unicode + dead keys + if keyname == 'dead_tilde': + tw.dead_tilde = True + keyname = '' + keyunicode = 0 + elif keyname == 'dead_acute': + tw.dead_acute = True + keyname = '' + keyunicode = 0 if keyname == 'Tab': keyunicode = 32 # substitute a space for a tab oldnum = tw.selected_block.label @@ -552,6 +596,39 @@ def key_press(tw, alt_mask, keyname, keyunicode, verbose=False): if len(newnum) > 0: tw.firstkey = False elif keyname is not '': + # Hack until I sort out input and unicode + dead keys + if tw.dead_tilde == True: + if keyname == 'n': + keyunicode = 241 + elif keyname == 'N': + keyunicode = 209 + elif keyname == 'a': + keyunicode = 227 + elif keyname == 'A': + keyunicode = 195 + tw.dead_tilde = False + elif tw.dead_acute == True: + if keyname == 'a': + keyunicode = 225 + elif keyname == 'A': + keyunicode = 193 + elif keyname == 'e': + keyunicode = 233 + elif keyname == 'E': + keyunicode = 201 + elif keyname == 'i': + keyunicode = 237 + elif keyname == 'I': + keyunicode = 205 + elif keyname == 'o': + keyunicode = 243 + elif keyname == 'O': + keyunicode = 211 + elif keyname == 'u': + keyunicode = 250 + elif keyname == 'U': + keyunicode = 218 + tw.dead_acute = False if tw.firstkey: newnum = selblock.check(unichr(keyunicode), \ tw.defdict[selblock.name]) @@ -664,4 +741,9 @@ def blocks(tw): def xy(event): return map(int, event.get_coords()) +def showPopup(block_name): + i = popupHandler.getInvoker(block_name) + if i: + i.showPopup() + -- cgit v0.9.1