|
|
1.1 ! root 1: #import "drawundo.h" ! 2: ! 3: @implementation PerformTextGraphicsChange ! 4: ! 5: static id editText = nil; ! 6: static id editWindow = nil; ! 7: ! 8: - initGraphic:aGraphic view:aGraphicView ! 9: { ! 10: [super init]; ! 11: ! 12: if (editText == nil) { ! 13: editText = [[UndoText alloc] initFrame:(NXRect *)0]; ! 14: [editText setMonoFont:NO]; ! 15: } ! 16: ! 17: if (editWindow == nil) { ! 18: editWindow = [[Window alloc] init]; ! 19: } ! 20: ! 21: graphic = aGraphic; ! 22: graphicView = aGraphicView; ! 23: textChange = nil; ! 24: ! 25: return self; ! 26: } ! 27: ! 28: - free ! 29: { ! 30: [textChange free]; ! 31: return [super free]; ! 32: } ! 33: ! 34: - (const char *)changeName ! 35: { ! 36: return [textChange changeName]; ! 37: } ! 38: ! 39: - undoChange ! 40: { ! 41: NXRect bounds; ! 42: ! 43: [self loadGraphic]; ! 44: [textChange undoChange]; ! 45: [self unloadGraphic]; ! 46: [graphic getBounds:&bounds]; ! 47: [graphicView cache:&bounds]; ! 48: [[graphicView window] flushWindow]; ! 49: ! 50: return [super undoChange]; ! 51: } ! 52: ! 53: - redoChange ! 54: { ! 55: NXRect bounds; ! 56: ! 57: [self loadGraphic]; ! 58: [textChange redoChange]; ! 59: [self unloadGraphic]; ! 60: [graphic getBounds:&bounds]; ! 61: [graphicView cache:&bounds]; ! 62: [[graphicView window] flushWindow]; ! 63: ! 64: return [super redoChange]; ! 65: } ! 66: ! 67: - (BOOL)incorporateChange:aChange ! 68: { ! 69: if (textChange == nil) { ! 70: textChange = aChange; ! 71: return YES; ! 72: } else { ! 73: return NO; ! 74: } ! 75: } ! 76: ! 77: - loadGraphic ! 78: { ! 79: NXRect graphicBounds; ! 80: ! 81: stream = NXOpenMemory([graphic data], [graphic length], NX_READONLY); ! 82: [editText readRichText:stream]; ! 83: NXCloseMemory(stream, NX_SAVEBUFFER); ! 84: ! 85: [graphic getBounds:&graphicBounds]; ! 86: [editText setFrame:&graphicBounds]; ! 87: ! 88: [editWindow setNextResponder:graphicView]; /* so changes can find our */ ! 89: /* change manager */ ! 90: [[editWindow contentView] addSubview:editText]; ! 91: ! 92: [editText selectAll:self]; ! 93: ! 94: return self; ! 95: } ! 96: ! 97: - unloadGraphic ! 98: { ! 99: int length, maxlen; ! 100: char *buffer, *data; ! 101: ! 102: [editWindow setNextResponder:nil]; ! 103: [editText removeFromSuperview]; ! 104: [editText setSel:0 :0]; ! 105: [graphic setFont:[editText font]]; ! 106: ! 107: stream = NXOpenMemory(NULL, 0, NX_WRITEONLY); ! 108: [editText writeRichText:stream]; ! 109: NXGetMemoryBuffer(stream, &buffer, &length, &maxlen); ! 110: NX_ZONEMALLOC([graphic zone], data, char, length); ! 111: bcopy(buffer, data, length); ! 112: NXCloseMemory(stream, NX_FREEBUFFER); ! 113: ! 114: [graphic setData:data]; ! 115: [graphic setLength:length]; ! 116: ! 117: return self; ! 118: } ! 119: ! 120: - editText ! 121: { ! 122: return editText; ! 123: } ! 124: ! 125: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.