/*
* Copyright (C) 2013 Alex Kuiper
*
* This file is part of PageTurner
*
* PageTurner is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PageTurner 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.
*
* You should have received a copy of the GNU General Public License
* along with PageTurner. If not, see <http://www.gnu.org/licenses/>.*
*/
package net.nightwhistler.pageturner.view.bookview;
import android.text.Layout.Alignment;
import android.text.StaticLayout;
import android.text.TextPaint;
/**
* Simple factory to create StaticLayout objects.
*
* This class mostly exists to facilitate unit-testing, but it
* also simplifies creation of StaticLayout objects by providing
* defaults for some of the parameters.
*
* @author Alex Kuiper
*
*/
public class StaticLayoutFactory {
/**
* Creates a new StaticLayout object
*
* @param source the text to create it from
* @param paint the TextPaint to use
* @param width the width to use for measurement
* @param spacingadd extra space to be added to each line
* @return a StaticLayout object
*/
public StaticLayout create(CharSequence source, TextPaint paint, int width, float spacingadd) {
try{
return doCreateLayout( source, paint, width, spacingadd );
} catch (IndexOutOfBoundsException e){
/*
Work-around for a Jelly bean bug:
See http://code.google.com/p/android/issues/detail?id=35466
*/
return doCreateLayout( source.toString(), paint, width, spacingadd );
}
}
private StaticLayout doCreateLayout( CharSequence source, TextPaint paint, int width, float spacingadd ) {
return new StaticLayout(source, paint, width, Alignment.ALIGN_NORMAL, 1.0f, spacingadd, true);
}
}