From 4171a7ab671f92e82c41b67b9303e4d2662cd3cd Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Sun, 07 Feb 2010 17:58:17 +0000 Subject: fixed font-scaling bug for growing/shrinking blocks --- diff --git a/sprites.py b/sprites.py index 43adb36..b847958 100644 --- a/sprites.py +++ b/sprites.py @@ -343,9 +343,8 @@ class Sprite: max = w return max - def label_area_dimensions(self): - return((self._width-self._margins[0]-self._margins[2], - self._width-self._margins[1]-self._margins[3])) + def label_safe_width(self): + return self._width-self._margins[0]-self._margins[2] def get_pixel(self, pos, i=0): x, y = pos diff --git a/tablock.py b/tablock.py index 4a27f58..44c91a8 100644 --- a/tablock.py +++ b/tablock.py @@ -96,10 +96,10 @@ class Block: self._ex = 0 self._ey = 0 self._font_size = [6.0, 4.5] - self._left = 2 - self._right = 2 - - print name + self._left = 0 + self._top = 0 + self._right = 0 + self._bottom = 0 if OLD_NAMES.has_key(self.name): self.name = OLD_NAMES[self.name] @@ -125,37 +125,37 @@ class Block: def unhighlight(self): self.spr.set_shape(self.shapes[0]) - # We need to resize some blocks on the fly. + # We need to resize some blocks on the fly so that the labels fit. def resize(self): - # make sure the label fits - lw = self.spr.label_width() - lwh = self.spr.label_area_dimensions() - self._dx += (lw-lwh[0]) - if self._dx < 0: - self._dx = 0 - self._make_block(self.svg) - self.spr.set_shape(self.shapes[0]) + self._dx += (self.spr.label_width()-self.spr.label_safe_width()) + if self._dx != 0: + if self._dx < 0: + self._dx = 0 + self._make_block(self.svg) + self._set_margins() + self.spr.set_shape(self.shapes[0]) # We may want to rescale blocks as well. def rescale(self, scale): + print "old font sizes:" for i in range(len(self._font_size)): + print self._font_size[i] self._font_size[i] /= self.scale self._dx /= self.scale self._ex /= self.scale self._ey /= self.scale self.scale = scale + print "new font sizes:" for i in range(len(self._font_size)): self._font_size[i] *= self.scale + print self._font_size[i] self._dx *= self.scale self._ex *= self.scale self._ey *= self.scale - for i in range(len(self.spr.labels)): - if i == 0: - self.spr.set_label_attributes(int(self._font_size[0]+0.5)) - else: - self.spr.set_label_attributes(int(self._font_size[1]+0.5)) + self._set_label_attributes() self.svg.set_scale(self.scale) self._make_block(self.svg) + self._set_margins() self.spr.set_shape(self.shapes[0]) self.spr.draw() @@ -163,33 +163,51 @@ class Block: def add_arg(self): h = self.svg.get_height() self._ei += 1 - self.svg.set_show(True) + if self.type == 'block': + self.svg.set_show(True) + else: + self.svg.set_show(False) self._make_block(self.svg) + self._set_margins() self.spr.set_shape(self.shapes[0]) return self.svg.get_height()-h # We may want to grow a block vertically. def expand_in_y(self, dy): self._ey += dy - self.svg.set_hide(True) - self.svg.set_show(True) + if self.type == 'block': + self.svg.set_hide(True) + self.svg.set_show(True) + else: + self.svg.set_hide(False) + self.svg.set_show(False) self._make_block(self.svg) + self._set_margins() self.spr.set_shape(self.shapes[0]) # We may want to grow a block horizontally. def expand_in_x(self, dx): self._ex += dx - self.svg.set_hide(True) - self.svg.set_show(True) + if self.type == 'block': + self.svg.set_hide(True) + self.svg.set_show(True) + else: + self.svg.set_hide(False) + self.svg.set_show(False) self._make_block(self.svg) + self._set_margins() self.spr.set_shape(self.shapes[0]) def reset_x(self): dx = -self._ex self._ex = 0 self.svg.set_hide(False) - self.svg.set_show(True) + if self.type == 'block': + self.svg.set_show(True) + else: + self.svg.set_show(False) self._make_block(self.svg) + self._set_margins() self.spr.set_shape(self.shapes[0]) return dx @@ -197,8 +215,12 @@ class Block: dy = -self._ey self._ey = 0 self.svg.set_hide(False) - self.svg.set_show(True) + if self.type == 'block': + self.svg.set_show(True) + else: + self.svg.set_show(False) self._make_block(self.svg) + self._set_margins() self.spr.set_shape(self.shapes[0]) return dy @@ -219,10 +241,8 @@ class Block: self._make_block(self.svg) self.spr = sprites.Sprite(sprite_list, x, y, self.shapes[0]) - - self.spr.set_margins(self._left, self.svg.get_slot_depth()*2, - self._right,self.svg.get_slot_depth()*3) - + self._set_margins() + self._set_label_attributes() if self.name in CONTENT_BLOCKS and len(self.values) > 0: for i, v in enumerate(self.values): self._set_labels(i, str(v)) @@ -231,18 +251,41 @@ class Block: self._set_labels(i, n) # Make sure the labels fit. - self.resize() + if self.spr.label_width() > self.spr.label_safe_width(): + self.resize() + + def _set_margins(self): + if self._left == 0: + self._left = self.svg.margins[0] + if self._top == 0: + self._top = self.svg.margins[1] + if self._right == 0: + self._right = self.svg.margins[2] + if self._bottom == 0: + self._bottom = self.svg.margins[3] + print "margins for block %s: %d,%d %d,%d" % (self.name, self._left, + self._top, self._right, self._bottom) + # self.spr.set_margins(self._left, self.svg.get_slot_depth()*2, + # self._right,self.svg.get_slot_depth()*3) + self.spr.set_margins(self._left, self._top, self._right, self._bottom) + + def _set_label_attributes(self): + if self.name in CONTENT_BLOCKS and len(self.values) > 0: + n = len(self.values) + else: + n = len(BLOCK_NAMES[self.name]) + for i in range(n): + if i == 1: # top + self.spr.set_label_attributes(int(self._font_size[1]+0.5), True, + "right", "top", i) + elif i == 2: # bottom + self.spr.set_label_attributes(int(self._font_size[1]+0.5), True, + "right", "bottom", i) + else: + self.spr.set_label_attributes(int(self._font_size[0]+0.5), True, + "center", "middle", i) def _set_labels(self, i, label): - if i == 1: # top - self.spr.set_label_attributes(int(self._font_size[1]+0.5), True, - "right", "top", i) - elif i == 2: # bottom - self.spr.set_label_attributes(int(self._font_size[1]+0.5), True, - "right", "bottom", i) - else: - self.spr.set_label_attributes(int(self._font_size[0]+0.5), True, - "center", "middle", i) self.spr.set_label(label, i) def _make_block(self, svg): @@ -319,8 +362,6 @@ class Block: self.docks = [['flow',True,self.svg.docks[0][0],self.svg.docks[0][1]], ['flow',False,self.svg.docks[1][0],self.svg.docks[1][1]]] # self._left, self._right = 2, 2 - self._left = self.svg.margins[0] - self._right = self.svg.margins[2] def _make_basic_style_head(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) @@ -331,8 +372,6 @@ class Block: ['flow', False, self.svg.docks[0][0], self.svg.docks[0][1]]] # self._left, self._right = 2, 2 - self._left = self.svg.margins[0] - self._right = self.svg.margins[2] def _make_basic_style_head_1arg(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) @@ -346,8 +385,6 @@ class Block: ['flow', False, self.svg.docks[1][0], self.svg.docks[1][1]]] # self._left, self._right = 2, self.svg.get_innie_width()*1.5 - self._left = self.svg.margins[0] - self._right = self.svg.margins[2] def _make_basic_style_tail(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) @@ -356,8 +393,6 @@ class Block: self.docks = [['flow', True, self.svg.docks[0][0], self.svg.docks[0][1]], ['unavailable', False, 0, 0]] - self._left = self.svg.margins[0] - self._right = self.svg.margins[2] def _make_basic_style_1arg(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) @@ -370,8 +405,6 @@ class Block: ['flow', False, self.svg.docks[2][0], self.svg.docks[2][1]]] # self._left, self._right = 2, self.svg.get_innie_width()*1.5 - self._left = self.svg.margins[0] - self._right = self.svg.margins[2] def _make_basic_style_2arg(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) @@ -386,8 +419,6 @@ class Block: ['flow', False, self.svg.docks[3][0], self.svg.docks[3][1]]] # self._left, self._right = 2, self.svg.get_innie_width()*1.5 - self._left = self.svg.margins[0] - self._right = self.svg.margins[2] def _make_basic_style_var_arg(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) @@ -408,8 +439,6 @@ class Block: self.docks.append(['flow', False, self.svg.docks[self._ei+3][0], self.svg.docks[self._ei+3][1], ']']) # self._left, self._right = 2, self.svg.get_innie_width()*1.5 - self._left = self.svg.margins[0] - self._right = self.svg.margins[2] def _make_box_style(self, svg): self.svg.expand(60+self._dx+self._ex, self._ey) @@ -417,7 +446,7 @@ class Block: self.docks = [['number', True, self.svg.docks[0][0], self.svg.docks[0][1]], ['unavailable', False, 0, 0]] - self._left, self._right = self.svg.docks[1][0], 1 + # self._left, self._right = self.svg.docks[1][0], 1 def _make_media_style(self, svg): self.svg.expand(40+self._dx+self._ex, 10+self._ey) @@ -425,7 +454,7 @@ class Block: self.docks = [['number', True, self.svg.docks[0][0], self.svg.docks[0][1]], ['unavailable', False, 0, 0]] - self._left, self._right = self.svg.docks[1][0], 1 + # self._left, self._right = self.svg.docks[1][0], 1 def _make_number_style(self, svg): self.svg.expand(self._dx+self._ex, self._ey) @@ -444,8 +473,8 @@ class Block: self.svg.docks[0][1]], ['number', False, self.svg.docks[1][0], self.svg.docks[1][1]]] - self._left = self.svg.docks[2][0] - self._right = self.svg.get_innie_width()*1.5 + # self._left = self.svg.docks[2][0] + # self._right = self.svg.get_innie_width()*1.5 def _make_number_style_block(self, svg): self.svg.expand(self._dx+self._ex, self._ey) @@ -461,8 +490,8 @@ class Block: ['number', False, self.svg.docks[1][0], self.svg.docks[1][1]], ['unavailable', False, 0, 0, ')']] - self._left = self.svg.docks[2][0] - self._right = self.svg.get_innie_width()*1.5 + # self._left = self.svg.docks[2][0] + # self._right = self.svg.get_innie_width()*1.5 def _make_number_style_1arg(self, svg): self.svg.expand(self._dx+self._ex, self._ey) @@ -475,7 +504,7 @@ class Block: self.svg.docks[1][1]], ['number', False, self.svg.docks[0][0], self.svg.docks[0][1]]] - self._left, self._right = self.svg.docks[1][0], self.svg.docks[1][0] + # self._left, self._right = self.svg.docks[1][0], self.svg.docks[1][0] def _make_number_style_1strarg(self, svg): self.svg.expand(self._dx+self._ex, self._ey) @@ -489,7 +518,7 @@ class Block: ['string', False, self.svg.docks[0][0], self.svg.docks[0][1]], ['unavailable', False, 0, 0]] - self._left, self._right = self.svg.docks[1][0], self.svg.docks[1][0] + # self._left, self._right = self.svg.docks[1][0], self.svg.docks[1][0] def _make_number_style_porch(self, svg): self.svg.expand(self._dx+self._ex, self._ey) @@ -505,8 +534,8 @@ class Block: self.svg.docks[0][1]], ['number', False, self.svg.docks[1][0], self.svg.docks[1][1]]] - self._left = self.svg.docks[2][0] - self._right = self.svg.get_width()-self.svg.docks[0][0] + # self._left = self.svg.docks[2][0] + # self._right = self.svg.get_width()-self.svg.docks[0][0] def _make_compare_style(self, svg): self.svg.expand(10+self._dx+self._ex, self._ey) @@ -558,7 +587,7 @@ class Block: self.svg.docks[0][1]], ['flow', False, self.svg.docks[1][0], self.svg.docks[1][1]]] - self._left, self._right = 0, self.svg.get_width()-self.svg.docks[1][0] + # self._left, self._right = 0, self.svg.get_width()-self.svg.docks[1][0] def _make_flow_style_1arg(self, svg): self.svg.expand(self._dx+self._ex, self._ey) @@ -574,9 +603,9 @@ class Block: self.svg.docks[2][1], '['], ['flow', False, self.svg.docks[3][0], self.svg.docks[3][1], ']']] - self._left = 2 - self._right = self.svg.get_width()-self.svg.docks[1][0]+ \ - self.svg.get_innie_width()*1.5 + # self._left = 2 + # self._right = self.svg.get_width()-self.svg.docks[1][0]+ \ + # self.svg.get_innie_width()*1.5 def _make_flow_style_boolean(self, svg): self.svg.expand(self._dx+self._ex, self._ey) @@ -592,7 +621,7 @@ class Block: self.svg.docks[2][1], '['], ['flow', False, self.svg.docks[3][0], self.svg.docks[3][1], ']']] - self._left, self._right = 2, self.svg.get_width()-self.svg.docks[1][0] + # self._left, self._right = 2, self.svg.get_width()-self.svg.docks[1][0] def _make_flow_style_else(self, svg): self.svg.expand(self._dx+self._ex, self._ey) @@ -611,7 +640,7 @@ class Block: self.svg.docks[2][1], ']['], ['flow', False, self.svg.docks[4][0], self.svg.docks[4][1], ']']] - self._left, self._right = 2, self.svg.get_width()-self.svg.docks[1][0] + # self._left, self._right = 2, self.svg.get_width()-self.svg.docks[1][0] def _make_portfolio_style_2x2(self, svg): self.svg.expand(30+self._dx+self._ex, 10+self._ey) @@ -633,7 +662,7 @@ class Block: self.svg.docks[2][1]], ['flow', False, self.svg.docks[3][0], self.svg.docks[3][1]]] - self._left, self._right = 2, self.svg.get_width()-2 + # self._left, self._right = 2, self.svg.get_width()-2 def _make_portfolio_style_2x1(self, svg): self.svg.expand(30+self._dx+self._ex, 10+self._ey) @@ -651,7 +680,7 @@ class Block: self.svg.docks[1][1]], ['flow', False, self.svg.docks[2][0], self.svg.docks[2][1]]] - self._left, self._right = 2, self.svg.get_width()-2 + # self._left, self._right = 2, self.svg.get_width()-2 def _make_portfolio_style_1x2(self, svg): self.svg.expand(30+self._dx+self._ex, 15+self._ey) @@ -670,8 +699,7 @@ class Block: self.svg.docks[2][1]], ['flow', False, self.svg.docks[1][0], self.svg.docks[1][1]]] - self._left, self._right = 2, self.svg.get_width()-2 - + # self._left, self._right = 2, self.svg.get_width()-2 def _make_portfolio_style_1x1(self, svg): self.svg.expand(30+self._dx+self._ex, 15+self._ey) @@ -688,7 +716,7 @@ class Block: self.svg.docks[2][1]], ['flow', False, self.svg.docks[1][0], self.svg.docks[1][1]]] - self._left, self._right = 2, self.svg.get_width()-2 + # self._left, self._right = 2, self.svg.get_width()-2 def _make_basic_block(self, svg): self.shapes.append(svg_str_to_pixbuf(self.svg.basic_block())) diff --git a/tasprite_factory.py b/tasprite_factory.py index 0f65d85..e3711d8 100755 --- a/tasprite_factory.py +++ b/tasprite_factory.py @@ -71,8 +71,6 @@ class SVG: def basic_block(self): (x, y) = self._calculate_x_y() - self.margins[0] = int(x+2*self._stroke_width+0.5) - self.margins[1] = int(y+self._stroke_width+0.5+self._slot_y) self.margins[2] = 0 self.margins[3] = 0 svg = self._new_path(x, y) @@ -668,7 +666,7 @@ class SVG: self.docks.append((int((self._x+self._stroke_width)*self._scale), int((self._y+self._innie_y2)*self._scale))) if self.margins[2] == 0: - self.margins[1] = int((self._y+self._innie_y2)*self._scale) + self.margins[1] = int(self._y*self._scale) self.margins[2] = int((self._x-self._innie_x1-self._innie_x2-\ self._stroke_width*2)*self._scale) self.margins[3] = int((self._y+self._innie_y2)*self._scale) @@ -746,23 +744,31 @@ class SVG: self._width = (self._max_x-self._min_x+self._stroke_width)*\ self._scale if self.margins[2] == 0: - self.margins[2] = int(self._stroke_width*2+0.5) + self.margins[2] = int((self._stroke_width+0.5)*self._scale) else: self.margins[2] = int(self._width - self.margins[2]) + self._height = (self._max_y-self._min_y+self._stroke_width)*\ + self._scale if self.margins[3] == 0: - self.margins[3] = int(self._stroke_width*2+0.5) + self.margins[3] = int((self._stroke_width+0.5)*self._scale) else: self.margins[3] = int(self._height - self.margins[3]) - self._height = (self._max_y-self._min_y+self._stroke_width)*\ - self._scale def _calculate_x_y(self): x = self._stroke_width/2.0 y = self._stroke_width/2.0+self._radius + self.margins[0] = int(x+self._stroke_width+0.5) + self.margins[1] = int(self._stroke_width+0.5) if self._outie is True: x += self._innie_x1+self._innie_x2 + self.margins[0] += self._innie_x1+self._innie_x2 if self._cap is True: y += self._slot_y*2.0 + self.margins[1] += self._slot_y*2.0 + elif self._slot is True: + self.margins[1] += self._slot_y + self.margins[0] *= self._scale + self.margins[1] *= self._scale return(x, y) # diff --git a/tawindow.py b/tawindow.py index 29297bb..49190b6 100644 --- a/tawindow.py +++ b/tawindow.py @@ -1413,7 +1413,6 @@ class TurtleArtWindow(): 'Alt_L', 'Alt_R', 'KP_Enter', 'ISO_Level3_Shift']: keyname = '' keyunicode = 0 - print "saw a noise key: %s" % (keyname) # Hack until I sort out input and unicode and dead keys, if keyname[0:5] == 'dead_': self.dead_key = keyname @@ -1421,7 +1420,6 @@ class TurtleArtWindow(): keyunicode = 0 if keyname in WHITE_SPACE: keyunicode = 32 - print "preparing to process [%s:%s] (%s)" % (oldleft, oldright, keyname) if keyname == 'BackSpace': if len(oldleft) > 1: newleft = oldleft[:len(oldleft)-1] @@ -1458,11 +1456,6 @@ class TurtleArtWindow(): newleft = oldleft+unichr(keyunicode) else: newleft = oldleft - ''' - else: - print "setting new left to ''" - newleft = '' - ''' self.selected_blk.spr.set_label("%s%s%s" % \ (newleft, CURSOR, oldright)) -- cgit v0.9.1