|
|
1.1 ! root 1: #include <CC/jerq.h> ! 2: #include "pot.pri" ! 3: ! 4: static Rectangle r32 = Rectangle( 0,0, 32,32 ); ! 5: ! 6: class Bmapitem ! 7: { ! 8: public: ! 9: Point stroffset; ! 10: char *str; ! 11: Bitmap *map; ! 12: Bmapitem *next; ! 13: Bmapitem(Point, char *, Bitmap *); ! 14: }; ! 15: ! 16: #define P_B_STRING 0x8000 ! 17: ! 18: Bmappot.Bmappot(Rectangle rect, short fl, short v) : (rect, fl, v) ! 19: { ! 20: items = 0; ! 21: nitems = 0; ! 22: corner.x = corner.y = 0; ! 23: } ! 24: ! 25: Bmappot.Bmappot(Rectangle rect, short fl, Point p, char *s, short v) : (rect, fl, v) ! 26: { ! 27: flags |= P_B_STRING; ! 28: str = s; ! 29: stroffset = p; ! 30: items = 0; ! 31: nitems = 0; ! 32: corner.x = corner.y = 0; ! 33: } ! 34: ! 35: void ! 36: Bmappot.draw() ! 37: { ! 38: register Bmapitem *b; ! 39: int n, style = flags&P_STYLE; ! 40: Point p, step; ! 41: ! 42: if(flags&P_B_STRING) string(&defont, str, &display, r.o+stroffset, F_OR); ! 43: if(nitems == 0) return; ! 44: step.x = step.y = 0; ! 45: if(style <= P_HORIZ) ! 46: { ! 47: if(flags&P_HORIZ) ! 48: step.x = (corner.x)/(nitems-1); ! 49: else ! 50: step.y = (corner.y-14)/(nitems-1); ! 51: for(n = 0, b = items, p = r.o; b; b = b->next, n++) ! 52: { ! 53: if(n == val) ! 54: bitblt(b->map, b->map->rect, &display, r.o, F_STORE); ! 55: string(&defont, b->str, &display, add(b->stroffset, p), F_OR); ! 56: p = p+step; ! 57: } ! 58: } ! 59: else if(style == P_CIRC) ! 60: { ! 61: Point center = div(add(r.o, r.c), 2); ! 62: ! 63: for(n = 0, b = items; b; b = b->next, n++) ! 64: { ! 65: if(n == val) ! 66: bitblt(b->map, b->map->rect, &display, r.o, F_STORE); ! 67: string(&defont, b->str, &display, b->stroffset+center, F_OR); ! 68: } ! 69: } ! 70: } ! 71: ! 72: void ! 73: Bmappot.mod(int but) ! 74: { ! 75: register Bmapitem *b; ! 76: int style = flags&P_STYLE, sel, n = max(nitems, 1); ! 77: ! 78: if(style <= P_HORIZ) ! 79: { ! 80: int gap, horiz = style==P_HORIZ; ! 81: ! 82: gap = (horiz? (r.c.x-r.o.x):(r.c.y-r.o.y))/n; ! 83: while(button(but)) ! 84: { ! 85: sel = (horiz? (mouse.xy.x-r.o.x):(mouse.xy.y-r.o.y))/gap; ! 86: sel = max(0, min(sel, nitems-1)); ! 87: if(sel != val) ! 88: { ! 89: val = sel; ! 90: for(b = items; sel--; b = b->next); ! 91: bitblt(b->map, b->map->rect, &display, r.o, F_STORE); ! 92: nap(2); ! 93: } ! 94: } ! 95: } ! 96: else if(style == P_CIRC) ! 97: { ! 98: Point p, center = div(add(r.o, r.c), 2); ! 99: int ndeg = 360/n; ! 100: ! 101: while(button(but)) ! 102: { ! 103: p = mouse.xy - center; ! 104: sel = (atan2(p.x, p.y)/ndeg + 1)%n; ! 105: if(sel != val) ! 106: { ! 107: val = sel; ! 108: for(b = items; sel--; b = b->next); ! 109: bitblt(b->map, b->map->rect, &display, r.o, F_STORE); ! 110: nap(2); ! 111: } ! 112: } ! 113: } ! 114: b = 0; ! 115: } ! 116: ! 117: void ! 118: Bmappot.resize(Rectangle rect) ! 119: { ! 120: r = rcenter(Rpt(Pt(0, 0), corner), rect); ! 121: draw(); ! 122: } ! 123: ! 124: static Bitmap * ! 125: bt(Texture32 *t) ! 126: { ! 127: Bitmap *b = balloc(Rect(0, 0, 32, 32)); ! 128: ! 129: texture32(b, b->rect, t, F_OR); ! 130: return(b); ! 131: } ! 132: ! 133: void ! 134: Bmappot.item(Point p, char *s, Texture32 *t) ! 135: { ! 136: item(p, s, bt(t)); ! 137: } ! 138: ! 139: void ! 140: Bmappot.item(Point p, char *s, Bitmap *bp) ! 141: { ! 142: register Bmapitem *b, *bb; ! 143: ! 144: bb = new Bmapitem(p, s, bp); ! 145: corner.x = max(corner.x, bp->rect.c.x); ! 146: corner.y = max(corner.y, bp->rect.c.y); ! 147: r = rcenter(Rpt(Pt(0, 0), corner), r); ! 148: if(items == 0) ! 149: items = bb; ! 150: else ! 151: { ! 152: for(b = items; b->next; b = b->next) ! 153: ; ! 154: b->next = bb; ! 155: } ! 156: nitems++; ! 157: } ! 158: ! 159: Bmapitem.Bmapitem(Point p, char *s, Bitmap *bp) ! 160: { ! 161: str = s; ! 162: stroffset = p; ! 163: map = bp; ! 164: next = 0; ! 165: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.