Skip to content

Commit 12a9f3a

Browse files
committed
https://github.com/neu-rah/ArduinoMenu/issues/178
API is already differentiating cursors, implementing specializations on u8g2 driver to account for specific font margins TODO: check if we really need Y adjust on cursor
1 parent e6c8f3f commit 12a9f3a

File tree

4 files changed

+34
-7
lines changed

4 files changed

+34
-7
lines changed

examples/lolin32/lolin32/lolin32.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ using namespace Menu;
3333
#define U8_Width 128
3434
#define U8_Height 64
3535
#define USE_HWI2C
36-
#define fontMarginX 1
37-
#define fontMarginY 1
36+
#define fontMarginX 2
37+
#define fontMarginY 2
3838
// U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, SCL, SDA);
3939
U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, SCL, SDA);//allow contrast change
4040
// U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, SCL, SDA);

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=ArduinoMenu library
2-
version=4.17.14
2+
version=4.17.15
33
author=Rui Azevedo, [email protected]
44
maintainer=neu-rah, [email protected]
55
sentence=Generic menu/interactivity system

src/items.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,11 @@ Used textField::printTo(navRoot &root,bool sel,menuOut& out, idx_t idx,idx_t len
215215
if (at==cursor&&editing) {
216216
// MENU_DEBUG_OUT<<"idx:"<<idx<<" line:"<<line<<" at:"<<at<<" l:"<<l<<endl;
217217
// c=l+1;
218-
l+=out.startCursor(root,l,line,charEdit);//draw textual cursor or color code start
218+
l+=out.startCursor(root,l,line,charEdit);//draw text cursor or color code start
219219
out.write(buffer()[at++]);//draw focused character
220-
l+=out.endCursor(root,l,line,charEdit);//draw textual cursor or color code end
220+
l+=out.endCursor(root,l,line,charEdit);//draw text cursor or color code end
221221
} else out.write(buffer()[at++]);
222-
out.editCursor(root,c+cursor,line,editing,charEdit);//reposition a non text cursor
222+
out.editCursor(root,c+cursor,line,editing,charEdit);//reposition a gfx cursor
223223
#ifdef MENU_FMT_WRAPS
224224
out.fmtEnd(*this,menuOut::fmtTextField,root.node(),idx);
225225
#endif

src/menuIO/u8g2Out.h

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,43 @@ namespace Menu {
9797
}
9898

9999
void setCursor(idx_t x,idx_t y,idx_t panelNr=0) override {
100+
// _trace(Serial<<"setCursor"<<endl);
100101
const panel p=panels[panelNr];
101102
gfx.tx = (p.x+x)*resX+fontMarginX + offsetX;
102103
gfx.ty = (p.y+y+1)*resY-fontMarginY + offsetY;
103104
}
104105

106+
idx_t startCursor(navRoot& root,idx_t x,idx_t y,bool charEdit,idx_t panelNr) override {
107+
if (charEdit) {
108+
// rect(panelNr, x-1, y, 1, 1, bgColor, false, enabledStatus, false);
109+
const panel p=panels[panelNr];
110+
gfx.drawBox((p.x+x)*resX + offsetX +fontMarginX,(p.y+y)*resY+ offsetY -fontMarginY,resX,resY);
111+
setColor(fgColor,false,enabledStatus,false);
112+
}/* else
113+
box(panelNr, x, y, 1, 1, bgColor, false, enabledStatus, false);*/
114+
return 0;
115+
}
116+
117+
// idx_t endCursor(navRoot& root,idx_t x,idx_t y,bool charEdit,idx_t panelNr) override {
118+
// setColor(fgColor,true,enabledStatus,true);return 0;
119+
// }
120+
121+
idx_t editCursor(navRoot& root,idx_t x,idx_t y,bool editing,bool charEdit,idx_t panelNr=0) override {
122+
if (editing) {
123+
_trace(Serial<<"editCursor"<<endl);
124+
// box(panelNr,x-1,y);
125+
const panel p=panels[panelNr];
126+
gfx.drawFrame((x+p.x-1)*resX + offsetX + fontMarginX-1,(p.y+y)*resY + offsetY - fontMarginY+2,resX+1 ,resY);
127+
}
128+
return 0;
129+
}
130+
105131
void drawCursor(idx_t ln,bool selected,status stat,bool edit=false,idx_t panelNr=0) override {
132+
// _trace(Serial<<"drawCursor"<<endl);
106133
const panel p=panels[panelNr];
107134
// gfxOut::drawCursor(ln,selected,stat);
108135
setColor(cursorColor,selected,stat);
109-
gfx.drawFrame(p.x*resX + offsetX /*+ fontMarginX*/,(p.y+ln)*resY + offsetY /*- fontMarginY*/,maxX()*resX ,resY);
136+
gfx.drawFrame(p.x*resX + offsetX /*+ fontMarginX*/,(p.y+ln)*resY + offsetY /*+ fontMarginY*/,maxX()*resX ,resY);
110137
}
111138
idx_t printRaw(const char* at,idx_t len) override {
112139
trace(Serial<<"u8g2Out::printRaw"<<endl);

0 commit comments

Comments
 (0)