Cannot canvas.drawString() onto canvas. (M5PaperTouchArea)



  • I have made a small modification to RAWSEQ'sexcellent M5PaperTouchArea project.

    I am trying to use the spare white area as an output canvas. I can place the CanvasOP (output canvas) correctly and I can check it is really there by filling it in different shades and moving it around. but I cannot write into it. Any canvasOP.drawString() commands seem to be ignored. I have tried changing the text color, size and position but I cannot seem to get text to show up on the pushed canvasOP.

    #include <M5EPD.h>
    #include "M5PaperTouchArea.h"
    #include "MPlusFontsSubset.h"
    
    // M5EPD Canvas
    M5EPD_Canvas canvas(&M5.EPD);
    M5EPD_Canvas canvasOP(&M5.EPD);
    
    // Module (Grid & TouchArea)
    M5PaperTouchAreas _m5pta;
    
    // Module (Grid Only)
    GridUtil _gu;
    
    void setup() {
    
      // Display Setup
      M5.begin();
      M5.EPD.SetRotation(90);
      M5.TP.SetRotation(90);
      M5.EPD.Clear(true);
      canvas.loadFont(MPlusFontsSubset, sizeof(MPlusFontsSubset));
      canvas.createCanvas(540, 960);
      canvas.createRender(48, 256);
      canvas.fillRect(0, 0, 540, 960, 10);
      _m5pta.current_canvas = &canvas;
      _m5pta.getGutil()->setVertical(true);
      _gu.setVertical(true);
    
      // Event Setting
      _m5pta.e_touch.func = bTouch;
      _m5pta.e_release.func = bRelease;
    
      // Change Default Setting
      _m5pta.default_font_size = 48;
      _m5pta.default_radius = 15;
      _m5pta.default_font_linepos = 6;
      _m5pta.default_bc = { 13, 0, 0 };
    
      // Touch Area Test
      _m5pta.add_grid(1, 1, 1, 1, "B1", "b1");
      _m5pta.add_grid(2, 1, 1, 1, "B2", "b2");
      _m5pta.add_grid(3, 1, 1, 1, "B3", "b3");
      _m5pta.add_grid(4, 1, 1, 1, "B4", "b4");
      _m5pta.add_grid(5, 1, 1, 1, "B5", "b5");
      _m5pta.add_grid(1, 2, 3, 1, "B6", "b6");
      _m5pta.add_grid(4, 2, 2, 1, "B7", "b7");
      _m5pta.add_grid(1, 3, 2, 1, "B8", "b8");
      _m5pta.add_grid(3, 3, 3, 1, "B9", "b9");
      _m5pta.add_grid(1, 4, 5, 1, "B10 Steve", "Steve");
      _m5pta.add_grid(1, 5, 2, 1, "B11", "b11");
      //_m5pta.add_grid(3, 5, 3, 2, "B16", "b16");//added by steve
      _m5pta.add_grid(1, 6, 2, 2, "B12", "b12");
      _m5pta.add_grid(3, 7, 3, 3, "B13", "b13");
      _m5pta.add_grid(1, 8, 2, 1, "B14", "b14");
      _m5pta.add_grid(1, 9, 2, 1, "B15", "b15");
      _m5pta.draw();
    
      // Grid Draw Test
     // GURect g = _gu.convert(3, 5, 3, 2);
    //  canvas.setTextColor(10);
     // canvas.fillRect(g.x, g.y, g.w, g.h, 0);
      canvas.pushCanvas(0, 0, UPDATE_MODE_GC16);
     /*  Serial.print(g.x);
      Serial.print("...");
      Serial.print(g.y);
        Serial.print("...");
      Serial.print(g.w);  
      Serial.print("...");
      Serial.print(g.h);*/
      //230...440...290...180 g.cordinates
      canvasOP.createCanvas(290, 180);
      //canvasOP.fillCanvas(5);
      canvasOP.setTextSize(4);
      canvasOP.setTextColor(15);
      canvasOP.drawString("Hello", 20, 100);
      canvasOP.pushCanvas(230, 440, UPDATE_MODE_GC16);
    }
    
    // Touch Event
    void bTouch(M5PTAEventContext& ct) {
      Serial.println("T:" + ct.code);
    
    }
    
    // Release Event
    void bRelease(M5PTAEventContext& ct) {
      Serial.println("R:" + ct.code);
    
    }
    
    void loop() {
      _m5pta.loop();
    }
    
    


  • I am just starting out with the M5Paper and a lot of things are taking some getting use to. I thought about deleting this thread when I found out how easy the solution was but then I thought that maybe this will help someone else. So here is the solution:

    You have to declare a font for use in the canvasOP. So adding his line after creating canvasOP fixes the problem:
    canvasOP.setFreeFont(&FreeSerif24pt7b);