636 return ((Screen)obj).getWidth(); 637 } 638 @Override public int getHeight(Object obj) { 639 return ((Screen)obj).getHeight(); 640 } 641 @Override public int getVisualMinX(Object obj) { 642 return ((Screen)obj).getVisibleX(); 643 } 644 @Override public int getVisualMinY(Object obj) { 645 return ((Screen)obj).getVisibleY(); 646 } 647 @Override public int getVisualWidth(Object obj) { 648 return ((Screen)obj).getVisibleWidth(); 649 } 650 @Override public int getVisualHeight(Object obj) { 651 return ((Screen)obj).getVisibleHeight(); 652 } 653 @Override public float getDPI(Object obj) { 654 return ((Screen)obj).getResolutionX(); 655 } 656 @Override public float getUIScale(Object obj) { 657 return ((Screen)obj).getUIScale(); 658 } 659 @Override public float getRenderScale(Object obj) { 660 return ((Screen)obj).getRenderScale(); 661 } 662 }; 663 664 @Override public ScreenConfigurationAccessor 665 setScreenConfigurationListener(final TKScreenConfigurationListener listener) { 666 Screen.setEventHandler(new Screen.EventHandler() { 667 @Override public void handleSettingsChanged() { 668 notifyScreenListener(listener); 669 } 670 }); 671 return screenAccessor; 672 } 673 674 private static void assignScreensAdapters() { 675 GraphicsPipeline pipeline = GraphicsPipeline.getPipeline(); 676 for (Screen screen : Screen.getScreens()) { 677 screen.setAdapterOrdinal(pipeline.getAdapterOrdinal(screen)); 678 } 679 } 680 689 690 @Override public List<?> getScreens() { 691 return Screen.getScreens(); 692 } 693 694 @Override 695 public ScreenConfigurationAccessor getScreenConfigurationAccessor() { 696 return screenAccessor; 697 } 698 699 @Override 700 public PerformanceTracker getPerformanceTracker() { 701 return perfTracker; 702 } 703 704 @Override 705 public PerformanceTracker createPerformanceTracker() { 706 return new PerformanceTrackerImpl(); 707 } 708 709 public float getMaxRenderScale() { 710 if (_maxPixelScale == 0) { 711 for (Object o : getScreens()) { 712 _maxPixelScale = Math.max(_maxPixelScale, ((Screen) o).getRenderScale()); 713 } 714 } 715 return _maxPixelScale; 716 } 717 718 @Override public ImageLoader loadImage(String url, int width, int height, boolean preserveRatio, boolean smooth) { 719 return new PrismImageLoader2(url, width, height, preserveRatio, getMaxRenderScale(), smooth); 720 } 721 722 @Override public ImageLoader loadImage(InputStream stream, int width, int height, 723 boolean preserveRatio, boolean smooth) { 724 return new PrismImageLoader2(stream, width, height, preserveRatio, smooth); 725 } 726 727 @Override public AbstractRemoteResource<? extends ImageLoader> loadImageAsync( 728 AsyncOperationListener listener, String url, 729 int width, int height, boolean preserveRatio, boolean smooth) { 730 return new PrismImageLoader2.AsyncImageLoader(listener, url, width, height, preserveRatio, smooth); 731 } 732 | 636 return ((Screen)obj).getWidth(); 637 } 638 @Override public int getHeight(Object obj) { 639 return ((Screen)obj).getHeight(); 640 } 641 @Override public int getVisualMinX(Object obj) { 642 return ((Screen)obj).getVisibleX(); 643 } 644 @Override public int getVisualMinY(Object obj) { 645 return ((Screen)obj).getVisibleY(); 646 } 647 @Override public int getVisualWidth(Object obj) { 648 return ((Screen)obj).getVisibleWidth(); 649 } 650 @Override public int getVisualHeight(Object obj) { 651 return ((Screen)obj).getVisibleHeight(); 652 } 653 @Override public float getDPI(Object obj) { 654 return ((Screen)obj).getResolutionX(); 655 } 656 @Override public float getRecommendedOutputScaleX(Object obj) { 657 return ((Screen)obj).getRecommendedOutputScaleX(); 658 } 659 @Override public float getRecommendedOutputScaleY(Object obj) { 660 return ((Screen)obj).getRecommendedOutputScaleY(); 661 } 662 }; 663 664 @Override public ScreenConfigurationAccessor 665 setScreenConfigurationListener(final TKScreenConfigurationListener listener) { 666 Screen.setEventHandler(new Screen.EventHandler() { 667 @Override public void handleSettingsChanged() { 668 notifyScreenListener(listener); 669 } 670 }); 671 return screenAccessor; 672 } 673 674 private static void assignScreensAdapters() { 675 GraphicsPipeline pipeline = GraphicsPipeline.getPipeline(); 676 for (Screen screen : Screen.getScreens()) { 677 screen.setAdapterOrdinal(pipeline.getAdapterOrdinal(screen)); 678 } 679 } 680 689 690 @Override public List<?> getScreens() { 691 return Screen.getScreens(); 692 } 693 694 @Override 695 public ScreenConfigurationAccessor getScreenConfigurationAccessor() { 696 return screenAccessor; 697 } 698 699 @Override 700 public PerformanceTracker getPerformanceTracker() { 701 return perfTracker; 702 } 703 704 @Override 705 public PerformanceTracker createPerformanceTracker() { 706 return new PerformanceTrackerImpl(); 707 } 708 709 // Only currently called from the loadImage method below. We do not 710 // necessarily know what the worst render scale we will ever see is 711 // because the user has control over that, but we should be loading 712 // all dpi variants of an image at all times anyway and then using 713 // whichever one is needed to respond to a given rendering request 714 // rather than predetermining which one to use up front. If we switch 715 // to making that decision at render time then this method can go away. 716 private float getMaxRenderScale() { 717 if (_maxPixelScale == 0) { 718 for (Object o : getScreens()) { 719 _maxPixelScale = Math.max(_maxPixelScale, ((Screen) o).getRecommendedOutputScaleX()); 720 _maxPixelScale = Math.max(_maxPixelScale, ((Screen) o).getRecommendedOutputScaleY()); 721 } 722 } 723 return _maxPixelScale; 724 } 725 726 @Override public ImageLoader loadImage(String url, int width, int height, boolean preserveRatio, boolean smooth) { 727 return new PrismImageLoader2(url, width, height, preserveRatio, getMaxRenderScale(), smooth); 728 } 729 730 @Override public ImageLoader loadImage(InputStream stream, int width, int height, 731 boolean preserveRatio, boolean smooth) { 732 return new PrismImageLoader2(stream, width, height, preserveRatio, smooth); 733 } 734 735 @Override public AbstractRemoteResource<? extends ImageLoader> loadImageAsync( 736 AsyncOperationListener listener, String url, 737 int width, int height, boolean preserveRatio, boolean smooth) { 738 return new PrismImageLoader2.AsyncImageLoader(listener, url, width, height, preserveRatio, smooth); 739 } 740 |