/*
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
This file is part of the JUCE library .
Copyright ( c ) 2015 - ROLI Ltd .
Permission is granted to use this software under the terms of either :
a ) the GPL v2 ( or any later version )
b ) the Affero GPL v3
Details of these licenses can be found at : www . gnu . org / licenses
JUCE is distributed in the hope that it will be useful , but WITHOUT ANY
WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE . See the GNU General Public License for more details .
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
To release a closed - source product which uses JUCE , commercial licenses are
available : visit www . juce . com for more information .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
*/
ImagePreviewComponent : : ImagePreviewComponent ( )
{
}
ImagePreviewComponent : : ~ ImagePreviewComponent ( )
{
}
//==============================================================================
void ImagePreviewComponent : : getThumbSize ( int & w , int & h ) const
{
const int availableW = proportionOfWidth ( 0.97f ) ;
const int availableH = getHeight ( ) - 13 * 4 ;
const double scale = jmin ( 1.0 ,
availableW / ( double ) w ,
availableH / ( double ) h ) ;
w = roundToInt ( scale * w ) ;
h = roundToInt ( scale * h ) ;
}
void ImagePreviewComponent : : selectedFileChanged ( const File & file )
{
if ( fileToLoad ! = file )
{
fileToLoad = file ;
startTimer ( 100 ) ;
}
}
void ImagePreviewComponent : : timerCallback ( )
{
stopTimer ( ) ;
currentThumbnail = Image : : null ;
currentDetails . clear ( ) ;
repaint ( ) ;
ScopedPointer < FileInputStream > in ( fileToLoad . createInputStream ( ) ) ;
if ( in ! = nullptr )
{
if ( ImageFileFormat * const format = ImageFileFormat : : findImageFormatForStream ( * in ) )
{
currentThumbnail = format - > decodeImage ( * in ) ;
if ( currentThumbnail . isValid ( ) )
{
int w = currentThumbnail . getWidth ( ) ;
int h = currentThumbnail . getHeight ( ) ;
currentDetails
< < fileToLoad . getFileName ( ) < < " \n "
< < format - > getFormatName ( ) < < " \n "
< < w < < " x " < < h < < " pixels \n "
< < File : : descriptionOfSizeInBytes ( fileToLoad . getSize ( ) ) ;
getThumbSize ( w , h ) ;
currentThumbnail = currentThumbnail . rescaled ( w , h ) ;
}
}
}
}
void ImagePreviewComponent : : paint ( Graphics & g )
{
if ( currentThumbnail . isValid ( ) )
{
g . setFont ( 13.0f ) ;
int w = currentThumbnail . getWidth ( ) ;
int h = currentThumbnail . getHeight ( ) ;
getThumbSize ( w , h ) ;
const int numLines = 4 ;
const int totalH = 13 * numLines + h + 4 ;
const int y = ( getHeight ( ) - totalH ) / 2 ;
g . drawImageWithin ( currentThumbnail ,
( getWidth ( ) - w ) / 2 , y , w , h ,
RectanglePlacement : : centred | RectanglePlacement : : onlyReduceInSize ,
false ) ;
g . drawFittedText ( currentDetails ,
0 , y + h + 4 , getWidth ( ) , 100 ,
Justification : : centredTop , numLines ) ;
}
}