diff --git a/roc/gameobj.py b/roc/gameobj.py index 50c3ff4..88f113c 100755 --- a/roc/gameobj.py +++ b/roc/gameobj.py @@ -14,7 +14,7 @@ class datastorage(object): class gameobj(object): - def __init__(self, self.pos): + def __init__(self, pos): self.pos = pos self.roles = [] self.effects = [] @@ -122,4 +122,4 @@ class billboard_role(role): order = 3000 phases = (enums.phase.move,) def update(self, owner, phase): - "we have no AI yet..." \ No newline at end of file + "we have no AI yet..." diff --git a/roc/widgets.py b/roc/widgets.py index c3554b8..6383d2f 100644 --- a/roc/widgets.py +++ b/roc/widgets.py @@ -1,9 +1,31 @@ +import models +from OpenGL.GL import * +class Themer(object): + def __init__(self): + pass + + def Button(self, pos, label, callback, xmin=None, ymin=None, xmax=None, ymax=None): + b = Button(pos, label, callback) + b.border = models.mgr.create('ui_button_edge') + b.corner = models.mgr.create('ui_button_corner') + b.background = models.mgr.create('ui_button_background') + b.font = models.mgr.fontlib["micross20"] + b.xmin = xmin + b.ymin = ymin + b.xmax = xmax + b.ymax = ymax + return b + +theme = Themer() class BaseWidget(object): def __init__(self): pass + def render(self): + pass + class InvisibleWidget(BaseWidget): pass @@ -11,11 +33,104 @@ class BoxWidget(BaseWidget): def __init__(self, pos): self.pos = pos self.border = None + self.corner = None self.background = None + class Button(BoxWidget): def __init__(self, pos, label, callback): BoxWidget.__init__(self, pos) + self.label = label + self.callback = callback + self.size = None - def \ No newline at end of file + def get_size(self): + labelsize = self.font.size(self.label) + newx = labelsize[0] + newy = labelsize[1] + if self.xmax != None and self.xmax < labelsize[0]: + newx = self.xmax + if self.ymax != None and self.ymax < labelsize[1]: + newy = self.ymax + if self.xmin != None and self.xmin > labelsize[0]: + newx = self.xmax + if self.ymin != None and self.ymin > labelsize[1]: + newy = self.ymin + + self.size = (newx, newy) + + + def render(self): + if self.size == None: + self.calc_size() + + glPushMatrix() + glTranslatef(*self.pos) + + # do corners first + glPushMatrix() + glRotatef(0.0, 0.0, 0.0, 1.0) + glTranslatef(-4.0, -4.0, 0.0) + self.corner.render() + glPopMatrix() + + glPushMatrix() + glRotatef(90.0, 0.0, 0.0, 1.0) + glTranslatef(self.size[0], -4.0, 0.0) + self.corner.render() + glPopMatrix() + + glPushMatrix() + glRotatef(180.0, 0.0, 0.0, 1.0) + glTranslatef(self.size[0], self.size[1], 0.0) + self.corner.render() + glPopMatrix() + + glPushMatrix() + glRotatef(270.0, 0.0, 0.0, 1.0) + glTranslatef(-4.0, self.size[1], 0.0) + self.corner.render() + glPopMatrix() + + # do border edges next + glPushMatrix() + glRotatef(0.0, 0.0, 0.0, 1.0) + glTranslatef(-4.0, 0.0, 0.0) + self.border.render() + glPopMatrix() + + glPushMatrix() + glRotatef(90.0, 0.0, 0.0, 1.0) + glTranslatef(self.size[0], 0.0, 0.0) + self.border.render() + glPopMatrix() + + glPushMatrix() + glRotatef(180.0, 0.0, 0.0, 1.0) + glTranslatef(self.size[0], self.size[1], 0.0) + self.border.render() + glPopMatrix() + + glPushMatrix() + glRotatef(270.0, 0.0, 0.0, 1.0) + glTranslatef(-4.0, self.size[1], 0.0) + self.border.render() + glPopMatrix() + + # last piece is the background + glPushMatrix() + glTranslatef(0.0, 0.0, 0.0) + self.background.render() + glPopMatrix() + + # finally add the text + + glPushMatrix() + glTranslatef(0.0, 0.0, 0.01) + self.background.render() + glPopMatrix() + + self.font.render(self.label) + glPopMatrix() + \ No newline at end of file