Source file: /~heha/enas/Convac-Ätzer/Firmware-190517.zip/Edit.cpp

#include "Convac.h"	// Edit class

void prepareField(byte l, byte t, byte r, byte b, bool andclip) {
 d.flags=d.R2_ZERO;
 if (andclip) d.andClip(l,t,r,b); else d.setClip(l,t,r,b);
 d.fillClip();
 d.flags=d.COLOR|d.R2_COPYPEN;
 d.gotoXY(l,t);
}

void Edit::removeLeadingZero() {
 if (cursor==maxlen && text[0]=='0') {	
  memmove(text,text+1,strlen);
  strlen--;
  cursor--;
 }
}

void Edit::setText(const char*s) {
 strcpy(text,s);
 strlen=::strlen(s);
 cursor=strlen?0xFF:0;		// alles markieren oder Strichkursor
 update();
}

bool Edit::handleInput(byte chr) {
 if (!chr) {			// Null-Byte zum Cursor blinken lassen
  xorCursor();
  return true;
 }
 switch (chr) {
  case '\a': return false;	// Fehlergenerator-Kode
  case BS: {			// Zeichen links löschen
   if (cursor==0xFF) {		// alles markiert?
    *text=strlen=cursor=0;	// alles löschen
    break;
   }
   if (!cursor) return false;	// Cursor bereits links
   if (!strlen) return false;	// dürfte nicht passieren
   memmove(text+cursor-1,text+cursor,strlen-cursor+1);
   strlen--;
   cursor--;
  }break;
  case CUL: {
   if (cursor==0xFF) cursor=strlen; // von hinten anfangen
   if (!cursor) return false;
   cursor--;
  }break;
  case CUR: {
   if (cursor==0xFF) cursor=0;	// von vorn anfangen
   if (cursor==strlen) return false;
   cursor++;
  }break;
  default: {			// Zeichen zum Einfügen
   if (cursor==0xFF) *text=strlen=cursor=0;	// alles löschen
   if (strlen==maxlen) return false;
   memmove(text+cursor+1,text+cursor,strlen-cursor+1);
   strlen++;
   text[cursor++]=chr;
  }
 }
 update();
 return true;
}

void Edit::update() {
 prepareField(L,T,R,B);
 byte w=d.getTextExtent(text);
 d.gotoXY(R-w,T);
 d.print(text);
 xorFocusRect(L,T,R,B);
 startFocusCounter();
 xorCursor();
}

void Edit::xorCursor() {
 byte l=L+1;
 byte t=T+2;
 byte r=R-1;
 byte b=B-2;
 d.flags=d.COLOR|d.R2_XORPEN;
 if (cursor!=0xFF) {
  r-=d.getTextExtent(text+cursor);	// rechtsbündig
  l=r;					// eine Pixelspalte
 }
 d.fillRect(l,t,r,b);
 GPIOR0^=1;
}
Detected encoding: UTF-80