@@ -613,19 +613,7 @@ public Image(Device device, ImageFileNameProvider imageFileNameProvider) {
613
613
super (device );
614
614
this .imageFileNameProvider = imageFileNameProvider ;
615
615
currentDeviceZoom = DPIUtil .getDeviceZoom ();
616
- ElementAtZoom <String > filename = DPIUtil .validateAndGetImagePathAtZoom (imageFileNameProvider , currentDeviceZoom );
617
- if (filename .zoom () == currentDeviceZoom ) {
618
- initNative (filename .element ());
619
-
620
- if (this .surface == 0 ) {
621
- ImageData data = new ImageData (filename .element ());
622
- init (data );
623
- }
624
- } else {
625
- ImageData imageData = new ImageData (filename .element ());
626
- ImageData resizedData = DPIUtil .autoScaleImageData (device , imageData , filename .zoom ());
627
- init (resizedData );
628
- }
616
+ initFromFileNameProvider (currentDeviceZoom );
629
617
init ();
630
618
}
631
619
@@ -662,9 +650,7 @@ public Image(Device device, ImageDataProvider imageDataProvider) {
662
650
super (device );
663
651
this .imageDataProvider = imageDataProvider ;
664
652
currentDeviceZoom = DPIUtil .getDeviceZoom ();
665
- ElementAtZoom <ImageData > data = DPIUtil .validateAndGetImageDataAtZoom (imageDataProvider , currentDeviceZoom );
666
- ImageData resizedData = DPIUtil .autoScaleImageData (device , data .element (), data .zoom ());
667
- init (resizedData );
653
+ initFromImageDataProvider (currentDeviceZoom );
668
654
init ();
669
655
}
670
656
@@ -724,37 +710,19 @@ boolean refreshImageForZoom () {
724
710
if (imageFileNameProvider != null ) {
725
711
int deviceZoomLevel = deviceZoom ;
726
712
if (deviceZoomLevel != currentDeviceZoom ) {
727
- ElementAtZoom <String > filename = DPIUtil .validateAndGetImagePathAtZoom (imageFileNameProvider , deviceZoomLevel );
728
- /* Avoid re-creating the fall-back image, when current zoom is already 100% */
729
- if (filename .zoom () == deviceZoomLevel ) {
730
- /* Release current native resources */
731
- destroy ();
732
- initNative (filename .element ());
733
- if (this .surface == 0 ) {
734
- ImageData data = new ImageData (filename .element ());
735
- init (data );
736
- }
737
- init ();
738
- refreshed = true ;
739
- } else {
740
- /* Release current native resources */
741
- destroy ();
742
- ImageData imageData = new ImageData (filename .element ());
743
- ImageData resizedData = DPIUtil .autoScaleImageData (device , imageData , filename .zoom ());
744
- init (resizedData );
745
- init ();
746
- refreshed = true ;
747
- }
713
+ /* Release current native resources */
714
+ destroy ();
715
+ initFromFileNameProvider (deviceZoomLevel );
716
+ init ();
717
+ refreshed = true ;
748
718
currentDeviceZoom = deviceZoomLevel ;
749
719
}
750
720
} else if (imageDataProvider != null ) {
751
721
int deviceZoomLevel = deviceZoom ;
752
722
if (deviceZoomLevel != currentDeviceZoom ) {
753
- ElementAtZoom <ImageData > data = DPIUtil .validateAndGetImageDataAtZoom (imageDataProvider , deviceZoomLevel );
754
723
/* Release current native resources */
755
724
destroy ();
756
- ImageData resizedData = DPIUtil .autoScaleImageData (device , data .element (), data .zoom ());
757
- init (resizedData );
725
+ initFromImageDataProvider (deviceZoomLevel );
758
726
init ();
759
727
refreshed = true ;
760
728
currentDeviceZoom = deviceZoomLevel ;
@@ -801,6 +769,26 @@ void initNative(String filename) {
801
769
} catch (SWTException e ) {}
802
770
}
803
771
772
+ private void initFromFileNameProvider (int zoom ) {
773
+ ElementAtZoom <String > fileForZoom = DPIUtil .validateAndGetImagePathAtZoom (imageFileNameProvider , zoom );
774
+ if (fileForZoom .zoom () == zoom ) {
775
+ initNative (fileForZoom .element ());
776
+ }
777
+ if (this .surface == 0 ) {
778
+ ImageData imageData = new ImageData (fileForZoom .element ());
779
+ if (fileForZoom .zoom () != zoom ) {
780
+ imageData = DPIUtil .scaleImageData (device , imageData , zoom , fileForZoom .zoom ());
781
+ }
782
+ init (imageData );
783
+ }
784
+ }
785
+
786
+ private void initFromImageDataProvider (int zoom ) {
787
+ ElementAtZoom <ImageData > data = DPIUtil .validateAndGetImageDataAtZoom (imageDataProvider , zoom );
788
+ ImageData resizedData = DPIUtil .scaleImageData (device , data .element (), zoom , data .zoom ());
789
+ init (resizedData );
790
+ }
791
+
804
792
void createFromPixbuf (int type , long pixbuf ) {
805
793
this .type = type ;
806
794
0 commit comments