Subversion Repositories Kolibri OS

Rev

Rev 9896 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9896 Rev 9898
Line 1... Line 1...
1
(*
1
(*
2
    Copyright 2016, 2018, 2022 Anton Krotov
2
    Copyright 2016, 2018, 2022, 2023 Anton Krotov
Line 3... Line 3...
3
 
3
 
Line 4... Line 4...
4
    This file is part of fb2read.
4
    This file is part of fb2read.
5
 
5
 
Line 17... Line 17...
17
    along with fb2read. If not, see .
17
    along with fb2read. If not, see .
18
*)
18
*)
Line 19... Line 19...
19
 
19
 
Line -... Line 20...
-
 
20
MODULE Font;
20
MODULE Font;
21
 
-
 
22
IMPORT
Line 21... Line 23...
21
 
23
	W := Window, S := Strings, G := Graph, sys := SYSTEM, K := KOSAPI,
Line 22... Line 24...
22
IMPORT W := Window, S := Strings, G := Graph, sys := SYSTEM, K := KOSAPI, Conv, Ini, KF := kfonts;
24
	Encoding, Ini, KF := kfonts;
23
 
25
 
Line 24... Line 26...
24
VAR
26
VAR
Line 25... Line 27...
25
 
27
 
Line 37... Line 39...
37
  END;
39
  END;
Line 38... Line 40...
38
 
40
 
Line 39... Line 41...
39
  ItalicColor, NormalColor: INTEGER;
41
  ItalicColor, NormalColor: INTEGER;
40
 
42
 
41
 
43
 
42
PROCEDURE KFText(X, Y: INTEGER; first, quantity: INTEGER; canvas: G.PBuffer);
44
PROCEDURE KFText(X, Y: INTEGER; first, quantity: INTEGER; canvas: G.tBuffer);
Line 43... Line 45...
43
BEGIN
45
BEGIN
44
  KF.TextOut(KFont, canvas.adr - 8, X, Y, first, quantity, Font.color, ORD(Font.bold) + ORD(Font.italic) * 2 + ORD(Font.strike) * 8)
46
  KF.TextOut(KFont, canvas.bitmap - 8, X, Y, first, quantity, Font.color, ORD(Font.bold) + ORD(Font.italic) * 2 + ORD(Font.strike) * 8)
Line 108... Line 110...
108
 
110
 
109
PROCEDURE TextWidth*(text: S.CHARS; length: INTEGER): INTEGER;
111
PROCEDURE TextWidth*(text: S.CHARS; length: INTEGER): INTEGER;
110
VAR res: INTEGER;
112
VAR res: INTEGER;
111
BEGIN
113
BEGIN
112
  IF kf_font THEN
114
  IF kf_font THEN
113
    Conv.convert(text.first, sys.ADR(cp1251buf[0]), length);
115
    Encoding.convert1251(text.first, sys.ADR(cp1251buf[0]), length);
114
    res := KF.TextWidth(KFont, sys.ADR(cp1251buf[0]), length, ORD(Font.bold) + ORD(Font.italic) * 2)
116
    res := KF.TextWidth(KFont, sys.ADR(cp1251buf[0]), length, ORD(Font.bold) + ORD(Font.italic) * 2)
115
  ELSE
117
  ELSE
116
    res := length * FontW()
118
    res := length * FontW()
117
  END
119
  END
Line 122... Line 124...
122
PROCEDURE MonoWidth*(): INTEGER;
124
PROCEDURE MonoWidth*(): INTEGER;
123
  RETURN FontW()
125
  RETURN FontW()
124
END MonoWidth;
126
END MonoWidth;
Line 125... Line 127...
125
 
127
 
126
 
128
 
127
PROCEDURE StrikeText*(Rect: W.TRect; X, Y: INTEGER; width: INTEGER);
129
PROCEDURE StrikeText*(Rect: W.tRect; X, Y: INTEGER; width: INTEGER);
128
VAR y: INTEGER;
130
VAR y: INTEGER;
129
BEGIN
131
BEGIN
130
  IF Font.strike THEN
132
  IF Font.strike THEN
131
    y := Y + FontH() DIV 2;
133
    y := Y + FontH() DIV 2;
132
//    X := X + ORD(Font.italic & kf_font) * ((KF.TextHeight(KFont) DIV 2) DIV 3);
134
//    X := X + ORD(Font.italic & kf_font) * ((KF.TextHeight(KFont) DIV 2) DIV 3);
133
    G.SetColor(Font.color);
135
    G.SetColor(Font.color);
134
    G.HLine(X + Rect.Left, X + Rect.Left + width, y + Rect.Top);
136
    G.HLine(X + Rect.left, X + Rect.left + width, y + Rect.top);
135
    IF Font.size >= 28 THEN
137
    IF Font.size >= 28 THEN
136
      INC(y);
138
      INC(y);
137
      G.HLine(X + Rect.Left, X + Rect.Left + width, y + Rect.Top);
139
      G.HLine(X + Rect.left, X + Rect.left + width, y + Rect.top);
138
    END
140
    END
Line 139... Line 141...
139
  END
141
  END
140
END StrikeText;
142
END StrikeText;
141
 
143
 
142
 
144
 
143
PROCEDURE Text*(Rect: W.TRect; X, Y: INTEGER; adr: INTEGER; length: INTEGER);
145
PROCEDURE Text*(Rect: W.tRect; X, Y: INTEGER; adr: INTEGER; length: INTEGER);
144
BEGIN
146
BEGIN
145
  IF kf_font THEN
147
  IF kf_font THEN
146
    Conv.convert(adr, sys.ADR(cp1251buf[0]), length);
148
    Encoding.convert1251(adr, sys.ADR(cp1251buf[0]), length);
147
    KFText(X + Rect.Left, Y + Rect.Top, sys.ADR(cp1251buf[0]), length, G.Buffer)
149
    KFText(X + Rect.left, Y + Rect.top, sys.ADR(cp1251buf[0]), length, G.Buffer)
148
  ELSE
150
  ELSE
Line 149... Line 151...
149
    G.SetColor(Font.color);
151
    G.SetColor(Font.color);
Line 168... Line 170...
168
END Init;
170
END Init;
Line 169... Line 171...
169
 
171
 
170
 
172
 
171
BEGIN
173
BEGIN
172
  KFont := KF.LoadFont(Ini.Font);
-
 
173
  kf_loaded := KFont # NIL;
174
  KFont := KF.LoadFont(Ini.Font);
174
  kf_font := kf_loaded;
175
  kf_font := KFont # NIL;