Работа над SettingsPage
This commit is contained in:
@@ -10,12 +10,30 @@
|
|||||||
<el-tab-pane label="Вид">
|
<el-tab-pane label="Вид">
|
||||||
<el-form :model="form" size="mini" label-width="100px">
|
<el-form :model="form" size="mini" label-width="100px">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
Название раздела
|
Цвет
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="item">
|
<el-form-item label="item">
|
||||||
<el-input v-model="form.item"></el-input>
|
<el-input v-model="form.item"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
|
<el-form :model="form" size="mini" label-width="100px">
|
||||||
|
<el-form-item>
|
||||||
|
Шрифт
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-form :model="form" size="mini" label-width="100px">
|
||||||
|
<el-form-item>
|
||||||
|
Текст
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-form :model="form" size="mini" label-width="100px">
|
||||||
|
<el-form-item>
|
||||||
|
Строка статуса
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="Листание">
|
<el-tab-pane label="Листание">
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ export default @Component({
|
|||||||
this.debouncedEmitPosChange(newValue);
|
this.debouncedEmitPosChange(newValue);
|
||||||
this.draw();
|
this.draw();
|
||||||
},
|
},
|
||||||
|
settings: function() {
|
||||||
|
this.loadSettings();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
class TextPage extends Vue {
|
class TextPage extends Vue {
|
||||||
@@ -148,7 +151,7 @@ class TextPage extends Vue {
|
|||||||
fontsLoadingStyle.left = (this.realWidth - this.measureText(flText, {}))/2 + 'px';
|
fontsLoadingStyle.left = (this.realWidth - this.measureText(flText, {}))/2 + 'px';
|
||||||
|
|
||||||
//stuff
|
//stuff
|
||||||
this.statusBarColor = this.hex2rgba(this.textColor, this.statusBarColorAlpha);
|
this.statusBarColor = this.hex2rgba(this.textColor || '#000000', this.statusBarColorAlpha);
|
||||||
this.currentTransition = '';
|
this.currentTransition = '';
|
||||||
this.pageChangeDirectionDown = true;
|
this.pageChangeDirectionDown = true;
|
||||||
this.fontShift = (this.fontShifts[this.fontName] ? this.fontShifts[this.fontName] : 0)/100;
|
this.fontShift = (this.fontShifts[this.fontName] ? this.fontShifts[this.fontName] : 0)/100;
|
||||||
@@ -224,6 +227,48 @@ class TextPage extends Vue {
|
|||||||
this.fontsLoading = false;
|
this.fontsLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getSettings() {
|
||||||
|
const settings = this.settings;
|
||||||
|
|
||||||
|
this.textColor = settings.textColor;
|
||||||
|
this.backgroundColor = settings.backgroundColor;
|
||||||
|
this.fontStyle = settings.fontStyle;// 'italic'
|
||||||
|
this.fontWeight = settings.fontWeight;// 'bold'
|
||||||
|
this.fontSize = settings.fontSize;// px
|
||||||
|
this.fontName = settings.fontName;
|
||||||
|
this.fontCssUrl = settings.fontCssUrl;
|
||||||
|
this.fontVertShift = settings.fontVertShift;
|
||||||
|
|
||||||
|
this.lineInterval = settings.lineInterval;// px, межстрочный интервал
|
||||||
|
this.textAlignJustify = settings.textAlignJustify;// выравнивание по ширине
|
||||||
|
this.p = settings.p;// px, отступ параграфа
|
||||||
|
this.indent = settings.indent;// px, отступ всего текста слева и справа
|
||||||
|
this.wordWrap = settings.wordWrap;
|
||||||
|
this.keepLastToFirst = settings.keepLastToFirst;// перенос последней строки в первую при листании
|
||||||
|
|
||||||
|
this.showStatusBar = settings.showStatusBar;
|
||||||
|
this.statusBarTop = settings.statusBarTop;// top, bottom
|
||||||
|
this.statusBarHeight = settings.statusBarHeight;// px
|
||||||
|
this.statusBarColorAlpha = settings.statusBarColorAlpha;
|
||||||
|
|
||||||
|
this.pageChangeTransition = settings.pageChangeTransition;// '' - нет, downShift, rightShift, thaw - протаивание, blink - мерцание
|
||||||
|
this.pageChangeTransitionSpeed = settings.pageChangeTransitionSpeed; //0-100%
|
||||||
|
}
|
||||||
|
|
||||||
|
loadSettings() {
|
||||||
|
(async() => {
|
||||||
|
let fontName = this.fontName;
|
||||||
|
|
||||||
|
this.getSettings();
|
||||||
|
this.calcDrawProps();
|
||||||
|
|
||||||
|
if (fontName != this.fontName)
|
||||||
|
await this.loadFonts();
|
||||||
|
|
||||||
|
this.draw();
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
showBook() {
|
showBook() {
|
||||||
this.$refs.main.focus();
|
this.$refs.main.focus();
|
||||||
|
|
||||||
@@ -236,30 +281,7 @@ class TextPage extends Vue {
|
|||||||
this.linesUp = null;
|
this.linesUp = null;
|
||||||
this.linesDown = null;
|
this.linesDown = null;
|
||||||
|
|
||||||
//default draw props
|
this.getSettings();
|
||||||
this.textColor = '#000000';
|
|
||||||
this.backgroundColor = '#478355';
|
|
||||||
this.fontStyle = '';// 'bold','italic'
|
|
||||||
this.fontSize = 36;// px
|
|
||||||
this.fontName = 'GEO_1';
|
|
||||||
this.fontCssUrl = '';
|
|
||||||
this.fontVertShift = 0;
|
|
||||||
|
|
||||||
this.lineInterval = 6;// px, межстрочный интервал
|
|
||||||
this.textAlignJustify = true;// выравнивание по ширине
|
|
||||||
this.p = 50;// px, отступ параграфа
|
|
||||||
this.indent = 15;// px, отступ всего текста слева и справа
|
|
||||||
this.wordWrap = true;
|
|
||||||
this.keepLastToFirst = true;// перенос последней строки в первую при листании
|
|
||||||
|
|
||||||
this.showStatusBar = true;
|
|
||||||
this.statusBarTop = false;// top, bottom
|
|
||||||
this.statusBarHeight = 19;// px
|
|
||||||
this.statusBarColorAlpha = 0.4;
|
|
||||||
|
|
||||||
this.pageChangeTransition = '';// '' - нет, downShift, rightShift, thaw - протаивание, blink - мерцание
|
|
||||||
this.pageChangeTransitionSpeed = 50; //0-100%
|
|
||||||
|
|
||||||
this.calcDrawProps();
|
this.calcDrawProps();
|
||||||
this.draw();// пока не загрузили, очистим канвас
|
this.draw();// пока не загрузили, очистим канвас
|
||||||
|
|
||||||
@@ -286,6 +308,7 @@ class TextPage extends Vue {
|
|||||||
this.$root.$emit('set-app-title', this.title);
|
this.$root.$emit('set-app-title', this.title);
|
||||||
|
|
||||||
this.parsed = this.book.parsed;
|
this.parsed = this.book.parsed;
|
||||||
|
|
||||||
this.calcDrawProps();
|
this.calcDrawProps();
|
||||||
|
|
||||||
await this.loadFonts();
|
await this.loadFonts();
|
||||||
@@ -312,12 +335,16 @@ class TextPage extends Vue {
|
|||||||
this.draw();
|
this.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get settings() {
|
||||||
|
return this.$store.state.reader.settings;
|
||||||
|
}
|
||||||
|
|
||||||
get font() {
|
get font() {
|
||||||
return `${this.fontStyle} ${this.fontSize}px ${this.fontName}`;
|
return `${this.fontStyle} ${this.fontWeight} ${this.fontSize}px ${this.fontName}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
fontByStyle(style) {
|
fontByStyle(style) {
|
||||||
return `${style.italic ? 'italic' : ''} ${style.bold ? 'bold' : ''} ${this.fontSize}px ${this.fontName}`;
|
return `${style.italic ? 'italic' : this.fontStyle} ${style.bold ? 'bold' : this.fontWeight} ${this.fontSize}px ${this.fontName}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
draw() {
|
draw() {
|
||||||
|
|||||||
@@ -4,6 +4,33 @@ import Vue from 'vue';
|
|||||||
const state = {
|
const state = {
|
||||||
toolBarActive: true,
|
toolBarActive: true,
|
||||||
openedBook: {},
|
openedBook: {},
|
||||||
|
settings: {
|
||||||
|
textColor: '#000000',
|
||||||
|
backgroundColor: '#EBE2C9',
|
||||||
|
fontStyle: '',// 'italic'
|
||||||
|
fontWeight: '',// 'bold'
|
||||||
|
fontSize: 20,// px
|
||||||
|
fontName: 'ReaderDefault',
|
||||||
|
fontCssUrl: '',
|
||||||
|
fontVertShift: 0,
|
||||||
|
|
||||||
|
lineInterval: 3,// px, межстрочный интервал
|
||||||
|
textAlignJustify: true,// выравнивание по ширине
|
||||||
|
p: 25,// px, отступ параграфа
|
||||||
|
indent: 15,// px, отступ всего текста слева и справа
|
||||||
|
wordWrap: true,//перенос по слогам
|
||||||
|
keepLastToFirst: true,// перенос последней строки в первую при листании
|
||||||
|
|
||||||
|
showStatusBar: true,
|
||||||
|
statusBarTop: false,// top, bottom
|
||||||
|
statusBarHeight: 19,// px
|
||||||
|
statusBarColorAlpha: 0.4,
|
||||||
|
|
||||||
|
pageChangeTransition: '',// '' - нет, downShift, rightShift, thaw - протаивание, blink - мерцание
|
||||||
|
pageChangeTransitionSpeed: 50, //0-100%
|
||||||
|
|
||||||
|
allowUrlParamBookPos: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// getters
|
// getters
|
||||||
|
|||||||
Reference in New Issue
Block a user