diff options
author | BogDan Vatra <bogdan@kde.org> | 2014-01-17 10:31:27 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-17 10:23:08 +0100 |
commit | 8a9bd001c947e6888d37e99fc456339fd2b51b36 (patch) | |
tree | 2b91044f316f1c501e4b781fb008b9dfee527d1d /src/android/jar/src/org/qtproject/qt5/android/QtSurface.java | |
parent | 338f4c9246fd4a85f3f90ca443fd786a008ba348 (diff) |
Support multiple native surfaces on Android.
Support for multiple native surfaces is needed by applications that need
to mix raster windows with GL windows.
Rework the raster and opengl implementation, get rid of eglfs and
fbconvenience dependencies.
Create a single android platform plugin.
[ChangeLog][Android] Rework the raster and opengl implementation.
[ChangeLog][Android] Create a single android platform plugin.
Task-number: QTBUG-34650
Change-Id: I9b1ab51554823329dda8cfbf8fef27c38f917c7b
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtSurface.java')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtSurface.java | 103 |
1 files changed, 10 insertions, 93 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java index c499dc3898..f9f5f16845 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java @@ -1,7 +1,7 @@ /**************************************************************************** ** +** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org> ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org> ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Android port of the Qt Toolkit. @@ -44,11 +44,7 @@ package org.qtproject.qt5.android; import android.app.Activity; import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Rect; import android.graphics.PixelFormat; -import android.util.DisplayMetrics; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; @@ -60,61 +56,34 @@ import java.lang.reflect.Method; public class QtSurface extends SurfaceView implements SurfaceHolder.Callback { - private Bitmap m_bitmap = null; - private boolean m_started = false; - private boolean m_usesGL = false; private GestureDetector m_gestureDetector; private Object m_accessibilityDelegate = null; + private boolean m_onTop; - public QtSurface(Context context, int id) + public QtSurface(Context context, int id, boolean onTop) { super(context); setFocusable(false); setFocusableInTouchMode(false); - + m_onTop = onTop; + setZOrderMediaOverlay(onTop); getHolder().addCallback(this); + getHolder().setFormat(PixelFormat.RGBA_8888); getHolder().setType(SurfaceHolder.SURFACE_TYPE_GPU); setId(id); m_gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { public void onLongPress(MotionEvent event) { - if (!m_started) - return; QtNative.longPress(getId(), (int) event.getX(), (int) event.getY()); } }); m_gestureDetector.setIsLongpressEnabled(true); } - public void applicationStarted(boolean usesGL) - { - m_started = true; - m_usesGL = usesGL; - if (getWidth() < 1 || getHeight() < 1) - return; - if (m_usesGL) { - QtNative.setSurface(getHolder().getSurface()); - } else { - QtNative.lockSurface(); - QtNative.setSurface(null); - m_bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.RGB_565); - QtNative.setSurface(m_bitmap); - QtNative.unlockSurface(); - } - } - @Override public void surfaceCreated(SurfaceHolder holder) { - DisplayMetrics metrics = new DisplayMetrics(); - ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); - QtNative.setApplicationDisplayMetrics(metrics.widthPixels, - metrics.heightPixels, getWidth(), getHeight(), metrics.xdpi, metrics.ydpi, metrics.scaledDensity); - - if (m_usesGL) - holder.setFormat(PixelFormat.RGBA_8888); - - + QtNative.setSurface(getId(), holder.getSurface(), getWidth(), getHeight()); // Initialize Accessibility // The accessibility code depends on android API level 16, so dynamically resolve it if (android.os.Build.VERSION.SDK_INT >= 16) { @@ -158,71 +127,21 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - if (width<1 || height<1) - return; - - DisplayMetrics metrics = new DisplayMetrics(); - ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); - QtNative.setApplicationDisplayMetrics(metrics.widthPixels, - metrics.heightPixels, - width, - height, - metrics.xdpi, - metrics.ydpi, - metrics.scaledDensity); - - if (!m_started) + if (width < 1 || height < 1) return; - if (m_usesGL) { - QtNative.setSurface(holder.getSurface()); - } else { - QtNative.lockSurface(); - QtNative.setSurface(null); - m_bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); - QtNative.setSurface(m_bitmap); - QtNative.unlockSurface(); - QtNative.updateWindow(); - } + QtNative.setSurface(getId(), holder.getSurface(), width, height); } @Override public void surfaceDestroyed(SurfaceHolder holder) { - if (m_usesGL) { - QtNative.destroySurface(); - } else { - if (!m_started) - return; - - QtNative.lockSurface(); - QtNative.setSurface(null); - QtNative.unlockSurface(); - } - } - - public void drawBitmap(Rect rect) - { - if (!m_started) - return; - QtNative.lockSurface(); - if (null != m_bitmap) { - try { - Canvas cv = getHolder().lockCanvas(rect); - cv.drawBitmap(m_bitmap, rect, rect, null); - getHolder().unlockCanvasAndPost(cv); - } catch (Exception e) { - Log.e(QtNative.QtTAG, "Can't create main activity", e); - } - } - QtNative.unlockSurface(); + QtNative.setSurface(getId(), null, 0, 0); } @Override public boolean onTouchEvent(MotionEvent event) { - if (!m_started) - return false; QtNative.sendTouchEvent(event, getId()); m_gestureDetector.onTouchEvent(event); return true; @@ -231,8 +150,6 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback @Override public boolean onTrackballEvent(MotionEvent event) { - if (!m_started) - return false; QtNative.sendTrackballEvent(event, getId()); return true; } |