private void drawValues(Canvas canvas, int row, int col) {
    ValueSet values = puzzle.getValues(row, col);
    if (values.isEmpty()) return;

    if (preview && !puzzle.isSolved()) {
      if (puzzle.isClue(row, col)) {
        boolean show = previewClueCounter++ % 3 != 0;
        String dv = show ? String.valueOf(theme.getSymbol(values.nextValue(0))) : "?";
        canvas.drawText(dv, cellWidth / 2f, textOffset, theme.getCluePaint(preview));
      }
    } else if (values.size() == 1) {
      String dv = String.valueOf(theme.getSymbol(values.nextValue(0)));
      Paint paint = puzzle.isClue(row, col) ? theme.getCluePaint(preview) : theme.getValuePaint();
      canvas.drawText(dv, cellWidth / 2f, textOffset, paint);
    } else {
      multiValuesPainter.paintValues(canvas, values);
    }
  }