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);
}
public NativeSurfaceView createNativeSurfaceView(long nativeSurfacePtr)
public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr)
{
return new NativeSurfaceView (this, nativeSurfacePtr);
}
@@ -1041,23 +1041,24 @@ public class JuceAppActivity extends Activity
return null;
java.lang.reflect.Method method;
try {
try
{
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)
return null;
try {
try
{
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;
}
@@ -1093,5 +1094,4 @@ public class JuceAppActivity extends Activity
{
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 (postMessage, "postMessage", "(J)V") \
METHOD (finish, "finish", "()V") \
METHOD (setRequestedOrientation,"setRequestedOrientation", "(I)V") \
METHOD (getClipboardContent, "getClipboardContent", "()Ljava/lang/String;") \
METHOD (setClipboardContent, "setClipboardContent", "(Ljava/lang/String;)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)
{
// 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


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

@@ -429,6 +429,8 @@ private:
bool kioskModeReentrant;
int allowedOrientations;
void allowedOrientationsChanged();
float masterScaleFactor;
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
}
//==============================================================================
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()
{
@@ -764,7 +796,7 @@ JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, setScreenSize, void, (JNIEnv
//==============================================================================
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)
{


+ 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);
}
void Desktop::allowedOrientationsChanged() {}
//==============================================================================
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
}
void Desktop::allowedOrientationsChanged() {}
//==============================================================================
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);
}
void Desktop::allowedOrientationsChanged() {}
//==============================================================================
struct MonitorInfo
{


Loading…
Cancel
Save