Browse Source

Added Android support for screen orientation control

tags/2021-05-28
jules 9 years ago
parent
commit
99052af8bc
9 changed files with 62 additions and 15 deletions
  1. +11
    -11
      modules/juce_core/native/java/JuceAppActivity.java
  2. +1
    -0
      modules/juce_core/native/juce_android_JNIHelpers.h
  3. +7
    -3
      modules/juce_gui_basics/components/juce_Desktop.cpp
  4. +2
    -0
      modules/juce_gui_basics/components/juce_Desktop.h
  5. +33
    -1
      modules/juce_gui_basics/native/juce_android_Windowing.cpp
  6. +2
    -0
      modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm
  7. +2
    -0
      modules/juce_gui_basics/native/juce_linux_Windowing.cpp
  8. +2
    -0
      modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm
  9. +2
    -0
      modules/juce_gui_basics/native/juce_win32_Windowing.cpp

+ 11
- 11
modules/juce_core/native/java/JuceAppActivity.java View File

@@ -691,7 +691,7 @@ public class JuceAppActivity extends Activity
int format, int width, int height); int format, int width, int height);
} }
public NativeSurfaceView createNativeSurfaceView(long nativeSurfacePtr)
public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr)
{ {
return new NativeSurfaceView (this, nativeSurfacePtr); return new NativeSurfaceView (this, nativeSurfacePtr);
} }
@@ -1041,23 +1041,24 @@ public class JuceAppActivity extends Activity
return null; return null;
java.lang.reflect.Method method; java.lang.reflect.Method method;
try {
try
{
method = obj.getClass().getMethod ("getProperty", String.class); method = obj.getClass().getMethod ("getProperty", String.class);
} catch (SecurityException e) {
return null;
} catch (NoSuchMethodException e) {
return null;
} }
catch (SecurityException e) { return null; }
catch (NoSuchMethodException e) { return null; }
if (method == null) if (method == null)
return null; return null;
try {
try
{
return (String) method.invoke (obj, property); return (String) method.invoke (obj, property);
} catch (java.lang.IllegalArgumentException e) {
} catch (java.lang.IllegalAccessException e) {
} catch (java.lang.reflect.InvocationTargetException e) {
} }
catch (java.lang.IllegalArgumentException e) {}
catch (java.lang.IllegalAccessException e) {}
catch (java.lang.reflect.InvocationTargetException e) {}
return null; return null;
} }
@@ -1093,5 +1094,4 @@ public class JuceAppActivity extends Activity
{ {
return new JuceThread(host); return new JuceThread(host);
} }
} }

+ 1
- 0
modules/juce_core/native/juce_android_JNIHelpers.h View File

@@ -266,6 +266,7 @@ extern AndroidSystem android;
METHOD (createNativeSurfaceView, "createNativeSurfaceView", "(J)L" JUCE_ANDROID_ACTIVITY_CLASSPATH "$NativeSurfaceView;") \ METHOD (createNativeSurfaceView, "createNativeSurfaceView", "(J)L" JUCE_ANDROID_ACTIVITY_CLASSPATH "$NativeSurfaceView;") \
METHOD (postMessage, "postMessage", "(J)V") \ METHOD (postMessage, "postMessage", "(J)V") \
METHOD (finish, "finish", "()V") \ METHOD (finish, "finish", "()V") \
METHOD (setRequestedOrientation,"setRequestedOrientation", "(I)V") \
METHOD (getClipboardContent, "getClipboardContent", "()Ljava/lang/String;") \ METHOD (getClipboardContent, "getClipboardContent", "()Ljava/lang/String;") \
METHOD (setClipboardContent, "setClipboardContent", "(Ljava/lang/String;)V") \ METHOD (setClipboardContent, "setClipboardContent", "(Ljava/lang/String;)V") \
METHOD (excludeClipRegion, "excludeClipRegion", "(Landroid/graphics/Canvas;FFFF)V") \ METHOD (excludeClipRegion, "excludeClipRegion", "(Landroid/graphics/Canvas;FFFF)V") \


+ 7
- 3
modules/juce_gui_basics/components/juce_Desktop.cpp View File

@@ -386,10 +386,14 @@ void Desktop::setKioskModeComponent (Component* componentToUse, const bool allow
//============================================================================== //==============================================================================
void Desktop::setOrientationsEnabled (const int newOrientations) void Desktop::setOrientationsEnabled (const int newOrientations)
{ {
// Dodgy set of flags being passed here! Make sure you specify at least one permitted orientation.
jassert (newOrientations != 0 && (newOrientations & ~allOrientations) == 0);
if (allowedOrientations != newOrientations)
{
// Dodgy set of flags being passed here! Make sure you specify at least one permitted orientation.
jassert (newOrientations != 0 && (newOrientations & ~allOrientations) == 0);
allowedOrientations = newOrientations;
allowedOrientations = newOrientations;
allowedOrientationsChanged();
}
} }
bool Desktop::isOrientationEnabled (const DisplayOrientation orientation) const noexcept bool Desktop::isOrientationEnabled (const DisplayOrientation orientation) const noexcept


+ 2
- 0
modules/juce_gui_basics/components/juce_Desktop.h View File

@@ -429,6 +429,8 @@ private:
bool kioskModeReentrant; bool kioskModeReentrant;
int allowedOrientations; int allowedOrientations;
void allowedOrientationsChanged();
float masterScaleFactor; float masterScaleFactor;
ComponentAnimator animator; ComponentAnimator animator;


+ 33
- 1
modules/juce_gui_basics/native/juce_android_Windowing.cpp View File

@@ -728,6 +728,38 @@ void Desktop::setKioskComponent (Component* kioskModeComponent, bool enableOrDis
// TODO // TODO
} }
//==============================================================================
static jint getAndroidOrientationFlag (int orientations) noexcept
{
enum
{
SCREEN_ORIENTATION_LANDSCAPE = 0,
SCREEN_ORIENTATION_PORTRAIT = 1,
SCREEN_ORIENTATION_USER = 2,
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8,
SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9,
SCREEN_ORIENTATION_USER_LANDSCAPE = 11,
SCREEN_ORIENTATION_USER_PORTRAIT = 12,
};
switch (orientations)
{
case Desktop::upright: return (jint) SCREEN_ORIENTATION_PORTRAIT;
case Desktop::upsideDown: return (jint) SCREEN_ORIENTATION_REVERSE_PORTRAIT;
case Desktop::upright + Desktop::upsideDown: return (jint) SCREEN_ORIENTATION_USER_PORTRAIT;
case Desktop::rotatedAntiClockwise: return (jint) SCREEN_ORIENTATION_LANDSCAPE;
case Desktop::rotatedClockwise: return (jint) SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
case Desktop::rotatedClockwise + Desktop::rotatedAntiClockwise: return (jint) SCREEN_ORIENTATION_USER_LANDSCAPE;
default: return (jint) SCREEN_ORIENTATION_USER;
}
}
void Desktop::allowedOrientationsChanged()
{
android.activity.callVoidMethod (JuceAppActivity.setRequestedOrientation,
getAndroidOrientationFlag (allowedOrientations));
}
//============================================================================== //==============================================================================
bool juce_areThereAnyAlwaysOnTopWindows() bool juce_areThereAnyAlwaysOnTopWindows()
{ {
@@ -764,7 +796,7 @@ JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, setScreenSize, void, (JNIEnv
//============================================================================== //==============================================================================
Image juce_createIconForFile (const File& file) Image juce_createIconForFile (const File& file)
{ {
return Image::null;
return Image();
} }
//============================================================================== //==============================================================================


+ 2
- 0
modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm View File

@@ -1023,6 +1023,8 @@ void Desktop::setKioskComponent (Component* kioskModeComp, bool enableOrDisable,
} }
} }
void Desktop::allowedOrientationsChanged() {}
//============================================================================== //==============================================================================
void UIViewComponentPeer::repaint (const Rectangle<int>& area) void UIViewComponentPeer::repaint (const Rectangle<int>& area)
{ {


+ 2
- 0
modules/juce_gui_basics/native/juce_linux_Windowing.cpp View File

@@ -3746,6 +3746,8 @@ void Desktop::setKioskComponent (Component* comp, bool enableOrDisable, bool /*
comp->setBounds (getDisplays().getMainDisplay().totalArea); comp->setBounds (getDisplays().getMainDisplay().totalArea);
} }
void Desktop::allowedOrientationsChanged() {}
//============================================================================== //==============================================================================
ComponentPeer* Component::createNewPeer (int styleFlags, void* nativeWindowToAttachTo) ComponentPeer* Component::createNewPeer (int styleFlags, void* nativeWindowToAttachTo)
{ {


+ 2
- 0
modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm View File

@@ -2006,6 +2006,8 @@ void Desktop::setKioskComponent (Component* kioskComp, bool shouldBeEnabled, boo
#endif #endif
} }
void Desktop::allowedOrientationsChanged() {}
//============================================================================== //==============================================================================
ComponentPeer* Component::createNewPeer (int styleFlags, void* windowToAttachTo) ComponentPeer* Component::createNewPeer (int styleFlags, void* windowToAttachTo)
{ {


+ 2
- 0
modules/juce_gui_basics/native/juce_win32_Windowing.cpp View File

@@ -3311,6 +3311,8 @@ void Desktop::setKioskComponent (Component* kioskModeComp, bool enableOrDisable,
kioskModeComp->setBounds (getDisplays().getMainDisplay().totalArea); kioskModeComp->setBounds (getDisplays().getMainDisplay().totalArea);
} }
void Desktop::allowedOrientationsChanged() {}
//============================================================================== //==============================================================================
struct MonitorInfo struct MonitorInfo
{ {


Loading…
Cancel
Save