diff options
author | Walter Bender <walter@sugarlabs.org> | 2010-04-03 21:58:10 (GMT) |
---|---|---|
committer | Walter Bender <walter@sugarlabs.org> | 2010-04-03 21:58:10 (GMT) |
commit | 5ce740641158b34b5cdd6029e6ca08fdc1cd26ad (patch) | |
tree | b202b0020ea72ccea844c64c026a52628def025b | |
parent | 041b081a04dab22dc05b30770cb5105863333808 (diff) |
new naming scheme
-rw-r--r-- | AbacusActivity.py | 10 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rwxr-xr-x | abacus.py | 15 | ||||
-rw-r--r-- | abacus_window.py | 412 | ||||
-rw-r--r-- | images/nepohualtzintzin_frame.svg (renamed from images/mayan_frame.svg) | 0 | ||||
-rw-r--r-- | images/nepohualtzintzin_rod.svg (copied from images/chinese_rod.svg) | 0 | ||||
-rw-r--r-- | images/schety_frame.svg (renamed from images/russian_frame.svg) | 0 | ||||
-rw-r--r-- | images/schety_rod.svg (renamed from images/russian_rod.svg) | 0 | ||||
-rw-r--r-- | images/soroban_frame.svg (renamed from images/japanese_frame.svg) | 0 | ||||
-rw-r--r-- | images/soroban_rod.svg (renamed from images/japanese_rod.svg) | 0 | ||||
-rw-r--r-- | images/suanpan_frame.svg (renamed from images/chinese_frame.svg) | 0 | ||||
-rw-r--r-- | images/suanpan_rod.svg (renamed from images/chinese_rod.svg) | 0 |
12 files changed, 119 insertions, 323 deletions
diff --git a/AbacusActivity.py b/AbacusActivity.py index b948688..cd32fdc 100644 --- a/AbacusActivity.py +++ b/AbacusActivity.py @@ -132,11 +132,11 @@ class AbacusActivity(activity.Activity): # Read the current mode from the Journal # TODO: read/restore bead positions try: - if self.matadata['abacus'] == 'suanpan': + if self.metadata['abacus'] == 'suanpan': self._chinese_cb(None) - elif self.matadata['abacus'] == 'soroban': + elif self.metadata['abacus'] == 'soroban': self._japanese_cb(None) - elif self.matadata['abacus'] == 'schety': + elif self.metadata['abacus'] == 'schety': self._russian_cb(None) else: self._mayan_cb(None) @@ -154,6 +154,7 @@ class AbacusActivity(activity.Activity): self.abacus.russian.hide() self.abacus.mayan.hide() self.abacus.mode = self.abacus.chinese + _logger.debug("Setting mode to %s" % (self.abacus.mode.name)) def _japanese_cb(self, button): """ Display the soroban; hide the others """ @@ -166,6 +167,7 @@ class AbacusActivity(activity.Activity): self.abacus.russian.hide() self.abacus.mayan.hide() self.abacus.mode = self.abacus.japanese + _logger.debug("Setting mode to %s" % (self.abacus.mode.name)) def _russian_cb(self, button): """ Display the schety; hide the others """ @@ -178,6 +180,7 @@ class AbacusActivity(activity.Activity): self.abacus.russian.show() self.abacus.mayan.hide() self.abacus.mode = self.abacus.russian + _logger.debug("Setting mode to %s" % (self.abacus.mode.name)) def _mayan_cb(self, button): """ Display the nepohualtzintzin; hide the others """ @@ -190,6 +193,7 @@ class AbacusActivity(activity.Activity): self.abacus.russian.hide() self.abacus.mayan.show() self.abacus.mode = self.abacus.mayan + _logger.debug("Setting mode to %s" % (self.abacus.mode.name)) def write_file(self, file_path): """ Write the bead positions to the Journal """ @@ -1,3 +1,8 @@ +3 + +* Added frame +* Code clean up for easier maintenance + 2 * Added Mayan (nepohualtzintzin) abacus @@ -68,6 +68,10 @@ class AbacusMain: menu.append(menu_items) menu_items.connect("activate", self._r_cb) menu_items.show() + menu_items = gtk.MenuItem(_("Nepohualtzintzin")) + menu.append(menu_items) + menu_items.connect("activate", self._m_cb) + menu_items.show() menu_items = gtk.MenuItem(_("Quit")) menu.append(menu_items) menu_items.connect("activate", self.destroy) @@ -131,6 +135,7 @@ class AbacusMain: self.abacus.chinese.show() self.abacus.japanese.hide() self.abacus.russian.hide() + self.abacus.mayan.hide() self.abacus.mode = self.abacus.chinese return True @@ -138,6 +143,7 @@ class AbacusMain: self.abacus.chinese.hide() self.abacus.japanese.show() self.abacus.russian.hide() + self.abacus.mayan.hide() self.abacus.mode = self.abacus.japanese return True @@ -145,9 +151,18 @@ class AbacusMain: self.abacus.chinese.hide() self.abacus.japanese.hide() self.abacus.russian.show() + self.abacus.mayan.hide() self.abacus.mode = self.abacus.russian return True + def _m_cb(self, widget): + self.abacus.chinese.hide() + self.abacus.japanese.hide() + self.abacus.russian.hide() + self.abacus.mayan.show() + self.abacus.mode = self.abacus.mayan + return True + def destroy(self, event, data=None): """ Callback for destroy event. """ gtk.main_quit() diff --git a/abacus_window.py b/abacus_window.py index 1b93aeb..f0695ce 100644 --- a/abacus_window.py +++ b/abacus_window.py @@ -107,36 +107,43 @@ class Abacus(): gtk.main_quit() -class Nepohualtzintzin(): +class AbacusGeneric(): def __init__(self, abacus): - """ Create a Mayan abacus: 13 by (4,3). """ + """ Specify parameters that define the abacus """ self.abacus = abacus - self.name = "nepohualtzintzin" - self.num_rods = 13 - self.bot_beads = 4 - self.top_beads = 3 - # 4 beads + 2 spaces, divider, 3 bead + 2 spaces + self.name = 'suanpan' + self.num_rods = 15 + self.bot_beads = 2 + self.top_beads = 5 + self.frame_width = 810 + self.frame_height = 420 + self.create() + + def create(self): + """ Create an abacus. """ h = (self.bot_beads+2+1+self.top_beads+2)*BHEIGHT*self.abacus.scale w = (self.num_rods+1)*(BWIDTH+BOFFSET)*self.abacus.scale - dy = 5*BHEIGHT*self.abacus.scale + dy = (self.top_beads+2)*BHEIGHT*self.abacus.scale x = (self.abacus.width-w)/2 y = (self.abacus.height-h)/2 o = (BWIDTH+BOFFSET-5)*self.abacus.scale/2 - # Draw the frame. + # Draw the frame... self.frame = Sprite(self.abacus.sprites, x-BHEIGHT*self.abacus.scale, y-BHEIGHT*self.abacus.scale, - load_image(self.abacus.path, "mayan_frame", - 730*self.abacus.scale, 420*self.abacus.scale)) + load_image(self.abacus.path, self.name+"_frame", + self.frame_width*self.abacus.scale, + self.frame_height*self.abacus.scale)) self.frame.type = 'frame' - # Draw the rods... + # then draw the rods... self.rods = [] dx = (BWIDTH+BOFFSET)*self.abacus.scale for i in range(self.num_rods): self.rods.append(Sprite(self.abacus.sprites, x+i*dx+o, y, - load_image(self.abacus.path, "chinese_rod", + load_image(self.abacus.path, + self.name+"_rod", 10*self.abacus.scale, h))) for i in self.rods: @@ -154,7 +161,8 @@ class Nepohualtzintzin(): BHEIGHT*self.abacus.scale))) for b in range(self.bot_beads): self.beads.append(Sprite(self.abacus.sprites, x+i*dx+o, - y+(8+b)*BHEIGHT*self.abacus.scale, + y+(self.top_beads+5+b)*BHEIGHT\ + *self.abacus.scale, load_image(self.abacus.path, "white", BWIDTH*self.abacus.scale, BHEIGHT*self.abacus.scale))) @@ -171,6 +179,24 @@ class Nepohualtzintzin(): self.bar.type = 'frame' self.bar.set_label_color('white') + def hide(self): + """ Hide the rod, beads and frame. """ + for i in self.rods: + i.hide() + for i in self.beads: + i.hide() + self.bar.hide() + self.frame.hide() + + def show(self): + """ Show the rod, beads and frame. """ + self.frame.set_layer(99) + for i in self.rods: + i.set_layer(100) + for i in self.beads: + i.set_layer(101) + self.bar.set_layer(102) + def value(self): """ Return a string representing the value of each rod. """ string = '' @@ -184,42 +210,22 @@ class Nepohualtzintzin(): j = i%(self.top_beads+self.bot_beads) if b.state == 1: if j < self.top_beads: - v[r+1] += 5*pow(2,self.num_rods-r-1) + v[r+1] += 5 else: - v[r+1] += 1*pow(2,self.num_rods-r-1) + v[r+1] += 1 # Carry to the left if a rod has a value > 9. for j in range(self.num_rods): if v[len(v)-j-1] > 9: - units = v[len(v)-j-1]%10 - tens = v[len(v)-j-1]-units - v[len(v)-j-1] = units - v[len(v)-j-2] += tens/10 + v[len(v)-j-1] -= 10 + v[len(v)-j-2] += 1 # Convert values to a string. for j in v: if string != '' or j > 0: - string += str(int(j)) + string += str(j) return(string) - def hide(self): - """ Hide the rod, beads and frame. """ - for i in self.rods: - i.hide() - for i in self.beads: - i.hide() - self.bar.hide() - self.frame.hide() - - def show(self): - """ Show the rod, beads and frame. """ - self.frame.set_layer(99) - for i in self.rods: - i.set_layer(100) - for i in self.beads: - i.set_layer(101) - self.bar.set_layer(102) - def label(self, string): """ Label the crossbar with the string. (Used with self.value) """ self.bar.set_label(string) @@ -269,72 +275,21 @@ class Nepohualtzintzin(): self.beads[i+ii].state = 0 -class Suanpan(): +class Nepohualtzintzin(AbacusGeneric): def __init__(self, abacus): - """ Create a Chinese abacus: 15 by (5,2). """ + """ Specify parameters that define the abacus """ self.abacus = abacus - self.name = "suanpan" - self.num_rods = 15 - self.bot_beads = 5 - self.top_beads = 2 - # 5 beads + 2 spaces, divider, 2 bead + 2 spaces - h = (self.bot_beads+2+1+self.top_beads+2)*BHEIGHT*self.abacus.scale - w = (self.num_rods+1)*(BWIDTH+BOFFSET)*self.abacus.scale - dy = 4*BHEIGHT*self.abacus.scale - x = (self.abacus.width-w)/2 - y = (self.abacus.height-h)/2 - o = (BWIDTH+BOFFSET-5)*self.abacus.scale/2 - - # Draw the frame. - self.frame = Sprite(self.abacus.sprites, x-BHEIGHT*self.abacus.scale, - y-BHEIGHT*self.abacus.scale, - load_image(self.abacus.path, "chinese_frame", - 810*self.abacus.scale, 420*self.abacus.scale)) - self.frame.type = 'frame' - - # Draw the rods... - self.rods = [] - dx = (BWIDTH+BOFFSET)*self.abacus.scale - for i in range(self.num_rods): - self.rods.append(Sprite(self.abacus.sprites, x+i*dx+o, y, - load_image(self.abacus.path, "chinese_rod", - 10*self.abacus.scale, h))) - - for i in self.rods: - i.type = 'rod' - - # and then the beads. - self.beads = [] - o = (BWIDTH-BOFFSET)/2*self.abacus.scale/2 - for i in range(self.num_rods): - for b in range(self.top_beads): - self.beads.append(Sprite(self.abacus.sprites, x+i*dx+o, - y+b*BHEIGHT*self.abacus.scale, - load_image(self.abacus.path, "white", - BWIDTH*self.abacus.scale, - BHEIGHT*self.abacus.scale))) - for b in range(self.bot_beads): - self.beads.append(Sprite(self.abacus.sprites, x+i*dx+o, - y+(7+b)*BHEIGHT*self.abacus.scale, - load_image(self.abacus.path, "white", - BWIDTH*self.abacus.scale, - BHEIGHT*self.abacus.scale))) - - for i in self.beads: - i.type = 'bead' - i.state = 0 - - # Draw the dividing bar on top. - self.bar = Sprite(self.abacus.sprites, x, y+dy, - load_image(self.abacus.path, "divider_bar", - w, BHEIGHT*self.abacus.scale)) - - self.bar.type = 'frame' - self.bar.set_label_color('white') + self.name = 'nepohualtzintzin' + self.num_rods = 13 + self.bot_beads = 4 + self.top_beads = 3 + self.frame_width = 730 + self.frame_height = 420 + self.create() def value(self): - """ Return a string representing the value of each rod. """ + """ Override default: base 20 """ string = '' v = [] for r in range(self.num_rods+1): # +1 for overflow @@ -346,88 +301,40 @@ class Suanpan(): j = i%(self.top_beads+self.bot_beads) if b.state == 1: if j < self.top_beads: - v[r+1] += 5 + v[r+1] += 5*pow(2,self.num_rods-r-1) else: - v[r+1] += 1 + v[r+1] += 1*pow(2,self.num_rods-r-1) # Carry to the left if a rod has a value > 9. for j in range(self.num_rods): if v[len(v)-j-1] > 9: - v[len(v)-j-1] -= 10 - v[len(v)-j-2] += 1 + units = v[len(v)-j-1]%10 + tens = v[len(v)-j-1]-units + v[len(v)-j-1] = units + v[len(v)-j-2] += tens/10 # Convert values to a string. for j in v: if string != '' or j > 0: - string += str(j) + string += str(int(j)) return(string) - def hide(self): - """ Hide the rod, beads and frame. """ - for i in self.rods: - i.hide() - for i in self.beads: - i.hide() - self.bar.hide() - self.frame.hide() - def show(self): - """ Show the rod, beads and frame. """ - self.frame.set_layer(99) - for i in self.rods: - i.set_layer(100) - for i in self.beads: - i.set_layer(101) - self.bar.set_layer(102) +class Suanpan(AbacusGeneric): - def label(self, string): - """ Label the crossbar with the string. (Used with self.value) """ - self.bar.set_label(string) + def __init__(self, abacus): + """ Create a Chinese abacus: 15 by (5,2). """ + self.abacus = abacus + self.name = "suanpan" + self.num_rods = 15 + self.bot_beads = 5 + self.top_beads = 2 + self.frame_width = 810 + self.frame_height = 420 + self.create() - def move_bead(self, bead, dy): - """ Move a bead (or beads) up or down a rod. """ - i = self.beads.index(bead) - b = i%(self.top_beads+self.bot_beads) - if b < self.top_beads: - if dy > 0 and bead.state == 0: - bead.move_relative((0, 2*BHEIGHT*self.abacus.scale)) - bead.state = 1 - # Make sure beads below this bead are also moved. - if b == 0 and self.beads[i+1].state == 0: - self.beads[i+1].move_relative((0, - 2*BHEIGHT*self.abacus.scale)) - self.beads[i+1].state = 1 - elif dy < 0 and bead.state == 1: - bead.move_relative((0, -2*BHEIGHT*self.abacus.scale)) - # Make sure beads above this bead are also moved. - if b == 1 and self.beads[i-1].state == 1: - self.beads[i-1].move_relative((0, - -2*BHEIGHT*self.abacus.scale)) - self.beads[i-1].state = 0 - bead.state = 0 - else: - if dy < 0 and bead.state == 0: - bead.move_relative((0, -2*BHEIGHT*self.abacus.scale)) - bead.state = 1 - # Make sure beads above this bead are also moved. - for ii in range(b-self.top_beads+1): - if self.beads[i-ii].state == 0: - self.beads[i-ii].move_relative((0, - -2*BHEIGHT*self.abacus.scale)) - self.beads[i-ii].state = 1 - elif dy > 0 and bead.state == 1: - bead.move_relative((0, 2*BHEIGHT*self.abacus.scale)) - bead.state = 0 - # Make sure beads below this bead are also moved. - for ii in range(self.top_beads+self.bot_beads-b): - if self.beads[i+ii].state == 1: - self.beads[i+ii].move_relative((0, - 2*BHEIGHT*self.abacus.scale)) - self.beads[i+ii].state = 0 - - -class Soroban(): +class Soroban(AbacusGeneric): def __init__(self, abacus): """ create a Japanese abacus: 15 by (4,1) """ @@ -436,141 +343,26 @@ class Soroban(): self.num_rods = 15 self.bot_beads = 4 self.top_beads = 1 - # 4 beads + 2 spaces, divider, 1 bead + 2 spaces - h = (self.bot_beads+2+1+self.top_beads+2)*BHEIGHT*self.abacus.scale - w = (self.num_rods+1)*(BWIDTH+BOFFSET)*self.abacus.scale - dy = 3*BHEIGHT*self.abacus.scale - x = (self.abacus.width-w)/2 - y = (self.abacus.height-h)/2 - - # Draw the frame. - self.frame = Sprite(self.abacus.sprites, x-BHEIGHT*self.abacus.scale, - y-BHEIGHT*self.abacus.scale, - load_image(self.abacus.path, "japanese_frame", - 810*self.abacus.scale, 360*self.abacus.scale)) - self.frame.type = 'frame' - - # Draw the rods... - self.rods = [] - o = (BWIDTH+BOFFSET-5)*self.abacus.scale/2 - dx = (BWIDTH+BOFFSET)*self.abacus.scale - for i in range(self.num_rods): - self.rods.append(Sprite(self.abacus.sprites, x+i*dx+o, y, - load_image(self.abacus.path, "japanese_rod", - 10, h))) - - for i in self.rods: - i.type = 'rod' - - # and then the beads. - self.beads = [] - o = (BWIDTH-BOFFSET)/2*self.abacus.scale/2 - for i in range(self.num_rods): - for b in range(self.top_beads): - self.beads.append(Sprite(self.abacus.sprites, x+i*dx+o, - y+b*BHEIGHT*self.abacus.scale, - load_image(self.abacus.path, "white", - BWIDTH*self.abacus.scale, - BHEIGHT*self.abacus.scale))) - for b in range(self.bot_beads): - self.beads.append(Sprite(self.abacus.sprites, x+i*dx+o, - y+(6+b)*BHEIGHT*self.abacus.scale, - load_image(self.abacus.path, "white", - BWIDTH*self.abacus.scale, - BHEIGHT*self.abacus.scale))) - - for i in self.beads: - i.type = 'bead' - i.state = 0 - - # Draw the dividing bar on top. - self.bar = Sprite(self.abacus.sprites, x, y+dy, - load_image(self.abacus.path, "divider_bar", - w, BHEIGHT*self.abacus.scale)) - - self.bar.type = 'frame' - self.bar.set_label_color('white') - - def hide(self): - """ Hide the rod, beads and frame. """ - for i in self.rods: - i.hide() - for i in self.beads: - i.hide() - self.bar.hide() - self.frame.hide() - - def show(self): - """ Show the rod, beads and frame. """ - self.frame.set_layer(99) - for i in self.rods: - i.set_layer(100) - for i in self.beads: - i.set_layer(101) - self.bar.set_layer(102) - - def value(self): - """ Return a string with the value of each rod. """ - string = '' - v = 0 - for i, b in enumerate(self.beads): - if b.state == 1: - if i%(self.top_beads+self.bot_beads) < self.top_beads: - v += 5 - else: - v += 1 - if i%(self.top_beads+self.bot_beads) == \ - self.top_beads+self.bot_beads-1: - if string != '' or v > 0: - string += str(v) - v = 0 - return(string) + self.frame_width = 810 + self.frame_height = 360 + self.create() - def label(self, string): - """ Label the crossbar with the string. (Used with self.value). """ - self.bar.set_label(string) - def move_bead(self, bead, dy): - """ Move a bead (or beads) up or down a rod. """ - i = self.beads.index(bead) - b = i%(self.top_beads+self.bot_beads) - - if b < self.top_beads: - if dy > 0 and bead.state == 0: - bead.move_relative((0, 2*BHEIGHT*self.abacus.scale)) - bead.state = 1 - elif dy < 0 and bead.state == 1: - bead.move_relative((0, -2*BHEIGHT*self.abacus.scale)) - bead.state = 0 - else: - if dy < 0 and bead.state == 0: - bead.move_relative((0, -2*BHEIGHT*self.abacus.scale)) - bead.state = 1 - # Make sure beads above this bead are also moved. - for ii in range(b-self.top_beads+1): - if self.beads[i-ii].state == 0: - self.beads[i-ii].move_relative((0, - -2*BHEIGHT*self.abacus.scale)) - self.beads[i-ii].state = 1 - elif dy > 0 and bead.state == 1: - bead.move_relative((0, 2*BHEIGHT*self.abacus.scale)) - bead.state = 0 - # Make sure beads below this bead are also moved. - for ii in range(self.top_beads+self.bot_beads-b): - if self.beads[i+ii].state == 1: - self.beads[i+ii].move_relative((0, - 2*BHEIGHT*self.abacus.scale)) - self.beads[i+ii].state = 0 - - -class Schety(): +class Schety(AbacusGeneric): def __init__(self, abacus): """ Create a Russian abacus: 15 by 10 (with one rod of 4 beads). """ self.abacus = abacus self.name = "schety" self.num_rods = 15 + self.top_beads = 0 self.bot_beads = 10 + self.frame_width = 810 + self.frame_height = 420 + self.create() + + def create(self): + """ Override default in order to make a short rod """ # 10 beads + 2 spaces h = (self.bot_beads+2)*BHEIGHT*self.abacus.scale w = (self.num_rods+1)*(BWIDTH+BOFFSET)*self.abacus.scale @@ -580,8 +372,9 @@ class Schety(): # Draw the frame. self.frame = Sprite(self.abacus.sprites, x-BHEIGHT*self.abacus.scale, y-BHEIGHT*self.abacus.scale, - load_image(self.abacus.path, "russian_frame", - 810*self.abacus.scale, 420*self.abacus.scale)) + load_image(self.abacus.path, self.name+"_frame", + self.frame_width*self.abacus.scale, + self.frame_height*self.abacus.scale)) self.frame.type = 'frame' # Draw the rods... @@ -590,7 +383,8 @@ class Schety(): dx = (BWIDTH+BOFFSET)*self.abacus.scale for i in range(self.num_rods): self.rods.append(Sprite(self.abacus.sprites, x+i*dx+o, y, - load_image(self.abacus.path, "russian_rod", + load_image(self.abacus.path, + self.name+"_rod", 10, h))) for i in self.rods: @@ -635,26 +429,8 @@ class Schety(): self.bar.type = 'frame' self.bar.set_label_color('white') - def hide(self): - """ Hide the rod, beads and frame. """ - for i in self.rods: - i.hide() - for i in self.beads: - i.hide() - self.bar.hide() - self.frame.hide() - - def show(self): - """ Show the rod, beads and frame. """ - self.frame.set_layer(99) - for i in self.rods: - i.set_layer(100) - for i in self.beads: - i.set_layer(101) - self.bar.set_layer(102) - def value(self): - """ Return a string representing the value of each rod. """ + """ Override to account for fourths """ string = '' v = [] for r in range(self.num_rods+1): # +1 for overflow @@ -707,12 +483,8 @@ class Schety(): string += str(j) return(string) - def label(self, string): - """ Label the crossbar with the string. (USed with self.value) """ - self.bar.set_label(string) - def move_bead(self, bead, dy): - """ Move a bead (or beads) up or down a rod. """ + """ Override to account for short rod """ i = self.beads.index(bead) r = i/self.bot_beads # Take into account the rod with just 4 beads diff --git a/images/mayan_frame.svg b/images/nepohualtzintzin_frame.svg index e05a220..e05a220 100644 --- a/images/mayan_frame.svg +++ b/images/nepohualtzintzin_frame.svg diff --git a/images/chinese_rod.svg b/images/nepohualtzintzin_rod.svg index a8cb73c..a8cb73c 100644 --- a/images/chinese_rod.svg +++ b/images/nepohualtzintzin_rod.svg diff --git a/images/russian_frame.svg b/images/schety_frame.svg index cb8ac2c..cb8ac2c 100644 --- a/images/russian_frame.svg +++ b/images/schety_frame.svg diff --git a/images/russian_rod.svg b/images/schety_rod.svg index a8cb73c..a8cb73c 100644 --- a/images/russian_rod.svg +++ b/images/schety_rod.svg diff --git a/images/japanese_frame.svg b/images/soroban_frame.svg index 16f03fb..16f03fb 100644 --- a/images/japanese_frame.svg +++ b/images/soroban_frame.svg diff --git a/images/japanese_rod.svg b/images/soroban_rod.svg index bc9a5ca..bc9a5ca 100644 --- a/images/japanese_rod.svg +++ b/images/soroban_rod.svg diff --git a/images/chinese_frame.svg b/images/suanpan_frame.svg index 4077b61..4077b61 100644 --- a/images/chinese_frame.svg +++ b/images/suanpan_frame.svg diff --git a/images/chinese_rod.svg b/images/suanpan_rod.svg index a8cb73c..a8cb73c 100644 --- a/images/chinese_rod.svg +++ b/images/suanpan_rod.svg |