/[james]/archive/guilib/textarea_riscos.c
ViewVC logotype

Annotation of /archive/guilib/textarea_riscos.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16 - (hide annotations) (download) (as text)
Mon Feb 10 22:56:40 2003 UTC (21 years, 4 months ago) by james
File MIME type: text/x-csrc
File size: 4750 byte(s)
Initial import.

1 james 16 /*
2     * textarea_riscos.c -- text area, RISC OS
3     */
4    
5     #include "gui.h"
6     #include "ufont.h"
7    
8    
9     /*
10     * gui_ta_text_width -- return width of text in specified style
11     */
12    
13     unsigned long gui_ta_text_width(struct gui_ta *doc, const wchar_t *text,
14     unsigned long s)
15     {
16     struct gui_ta_style *style;
17     /* font_f font; */
18     int width;
19    
20     style = (*doc->style)[s];
21    
22     /* gui_error = xfont_find_font(style->font, style->xsize, style->ysize, 0, 0, &font, NULL, NULL); */
23     /* gui_check_error(); */
24     gui_error = xufont_scan_string(style->handle, text, font_GIVEN_FONT | font_KERN, 0x7fffffff, 0x7fffffff,
25     NULL, NULL, 0, NULL, &width, NULL, NULL);
26     gui_check_error();
27     /* gui_error = xfont_lose_font(font); */
28     /* gui_check_error(); */
29    
30     return width / 400;
31     }
32    
33    
34     /*
35     * gui_ta_render_text -- render a word to the window
36     */
37    
38     void gui_ta_render_text(struct gui_ta *doc, wchar_t *text, unsigned long s,
39     unsigned long x, unsigned long y, unsigned long box_x0,
40     unsigned long box_y0, unsigned long box_x1, unsigned long box_y1,
41     bool sel)
42     {
43     struct gui_ta_style *style;
44     /* font_f font; */
45     font_paint_block box;
46    
47     style = (*doc->style)[s];
48    
49     box.space.x = box.space.y = box.letter.x = box.letter.y = 0;
50     box.rubout.x0 = (gui_window_origin_x + box_x0) * 400;
51     box.rubout.y0 = (gui_window_origin_y - box_y1) * 400;
52     box.rubout.x1 = (gui_window_origin_x + box_x1) * 400;
53     box.rubout.y1 = (gui_window_origin_y - box_y0) * 400;
54    
55     /* gui_error = xfont_find_font(style->font, style->xsize, style->ysize, 0, 0, &font, NULL, NULL); */
56     /* gui_check_error(); */
57    
58     gui_error = xcolourtrans_set_font_colours(font_CURRENT, (sel ? style->fcolour : style->bcolour) << 8,
59     (sel ? style->bcolour : style->fcolour) << 8, 14, NULL, NULL, NULL);
60     gui_check_error();
61    
62     gui_error = xufont_paint(style->handle, text, font_RUBOUT | font_GIVEN_BLOCK | font_GIVEN_FONT | font_KERN,
63     (signed int) ((x + gui_window_origin_x) * 400), (signed int) ((gui_window_origin_y - y) * 400), &box, NULL, 0);
64     gui_check_error();
65    
66     /* gui_error = xfont_lose_font(font); */
67     /* gui_check_error(); */
68     }
69    
70    
71     /*
72     * gui_ta_position_x -- get offset within string of x offset
73     */
74    
75     unsigned long gui_ta_position_x(struct gui_ta *doc, wchar_t *text, unsigned long s,
76     signed long *x)
77     {
78     struct gui_ta_style *style;
79     /* font_f font; */
80     unsigned int caret;
81    
82     style = (*doc->style)[s];
83    
84     /* gui_error = xfont_find_font(style->font, style->xsize, style->ysize, 0, 0, &font, NULL, NULL); */
85     /* gui_check_error(); */
86     gui_error = xufont_scan_string(style->handle, text,
87     font_GIVEN_FONT | font_KERN | font_RETURN_CARET_POS,
88     *x * 400, 0x7fffffff, NULL, NULL, 0, &caret, (int *) x, NULL, NULL);
89     gui_check_error();
90     /* gui_error = xfont_lose_font(font); */
91     /* gui_check_error(); */
92    
93     *x /= 400;
94     return caret;
95     }
96    
97    
98     /*
99     * gui_ta_position_o -- get x offset within string of character offset
100     */
101    
102     unsigned long gui_ta_position_o(struct gui_ta *doc, wchar_t *text, unsigned long s,
103     unsigned long offset)
104     {
105     unsigned int x;
106     struct gui_ta_style *style;
107     /* font_f font; */
108    
109     style = (*doc->style)[s];
110    
111     /* gui_error = xfont_find_font(style->font, style->xsize, style->ysize, 0, 0, &font, NULL, NULL); */
112     /* gui_check_error(); */
113     gui_error = xufont_scan_string(style->handle, text, font_GIVEN_LENGTH | font_GIVEN_FONT | font_KERN,
114     0x7fffffff, 0x7fffffff, NULL, NULL, (signed int) offset, NULL, &x, NULL, NULL);
115     gui_check_error();
116     /* gui_error = xfont_lose_font(font); */
117     /* gui_check_error(); */
118    
119     return x / 400;
120     }
121    
122    
123     /*
124     * gui_ta_caret -- place the wimp caret at the specified position
125     */
126    
127     void gui_ta_caret(gui_window_id window_id, struct gui_ta *doc,
128     struct gui_ta_position *pos, unsigned long x, unsigned long y)
129     {
130     assert(window_id < gui_window_list_items && gui_window_list[window_id].used);
131    
132     #ifdef DEBUG
133     printf("gui_ta_caret: window_id = 0x%x\n", window_id);
134     fflush(stdout);
135     #endif
136    
137     gui_error = xwimp_set_caret_position(gui_window_list[window_id].handle,
138     wimp_ICON_WINDOW, (signed int) (x + pos->x), -((signed int) (y + pos->y)),
139     (signed int) (*doc->content)[pos->content]->leading, 0);
140     gui_check_error();
141     }
142    
143    
144     /*
145     * gui_ta_fill_style -- allocate platform dependent style resources
146     */
147    
148     void gui_ta_fill_style(struct gui_ta_style *style)
149     {
150     ufont_f font;
151    
152     gui_error = xufont_find_font(style->font, (signed int) style->xsize, (signed int) style->ysize, 0, 0, &font, NULL, NULL);
153     gui_check_error();
154    
155     style->handle = font;
156     }
157    
158    
159     /*
160     * gui_ta_empty_style -- free platform dependent style resources
161     */
162    
163     void gui_ta_empty_style(struct gui_ta_style *style)
164     {
165     gui_error = xufont_lose_font(style->handle);
166     gui_check_error();
167     }

  ViewVC Help
Powered by ViewVC 1.1.26