diff --git a/.gitignore b/.gitignore index 9a06de8..ab8cd1a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ captures/ .cxx *.jar !gradle/wrapper/gradle-wrapper.jar +*.txt diff --git a/build.sh b/build.sh index 62a21d3..1db3cfd 100755 --- a/build.sh +++ b/build.sh @@ -46,7 +46,7 @@ if [ ! -d "$J3270_PATH/lib3270j" ]; then fi echo "Building debug APK..." -./gradlew assembleDebug +./gradlew assembleDebug --no-daemon APK_PATH="$SCRIPT_DIR/build/outputs/apk/debug/a3270-debug.apk" if [ -f "$APK_PATH" ]; then diff --git a/src/main/java/haus/nightmare/a3270/graphics/AndroidCanvasRenderer.kt b/src/main/java/haus/nightmare/a3270/graphics/AndroidCanvasRenderer.kt new file mode 100644 index 0000000..c288b44 --- /dev/null +++ b/src/main/java/haus/nightmare/a3270/graphics/AndroidCanvasRenderer.kt @@ -0,0 +1,49 @@ +package haus.nightmare.a3270.graphics + +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.RectF +import haus.nightmare.lib3270j.graphics.PixelBuffer + +/** + * Android bridge for translating lib3270j PixelBuffer into Android Bitmaps and rendering onto Canvas. + */ +object AndroidCanvasRenderer { + + /** + * Converts a PixelBuffer into an Android Bitmap using ARGB_8888 configuration. + */ + fun toBitmap(buffer: PixelBuffer?): Bitmap? { + if (buffer == null) return null + val w = buffer.width + val h = buffer.height + if (w <= 0 || h <= 0) return null + val pixels = buffer.pixels ?: return null + return Bitmap.createBitmap(pixels, w, h, Bitmap.Config.ARGB_8888) + } + + /** + * Draws the given PixelBuffer onto an Android Canvas scaled to the destination rectangle. + */ + fun drawPixelBuffer( + canvas: Canvas, + buffer: PixelBuffer?, + dstRect: RectF, + paint: Paint? = null + ) { + val bmp = toBitmap(buffer) ?: return + canvas.drawBitmap(bmp, null, dstRect, paint) + } + + /** + * Copies the PixelBuffer contents into an existing mutable Bitmap. + */ + fun copyIntoBitmap(buffer: PixelBuffer, target: Bitmap) { + val pixels = buffer.pixels ?: return + val w = minOf(buffer.width, target.width) + val h = minOf(buffer.height, target.height) + if (w <= 0 || h <= 0) return + target.setPixels(pixels, 0, buffer.width, 0, 0, w, h) + } +}