... | ... |
@@ -69,7 +69,7 @@ reui_init() |
69 | 69 |
if((ui->win=SDL_CreateWindow( |
70 | 70 |
DEFAULTTITLEPREFIX, |
71 | 71 |
SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED, |
72 |
- ui->w,ui->h,0))==NULL |
|
72 |
+ ui->w,ui->h,SDL_WINDOW_RESIZABLE))==NULL |
|
73 | 73 |
|| (ui->renderer=SDL_CreateRenderer(ui->win,-1, |
74 | 74 |
SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC))==NULL |
75 | 75 |
|| (ui->scr=SDL_CreateTexture(ui->renderer,SDL_PIXELFORMAT_ARGB8888, |
... | ... |
@@ -117,6 +117,24 @@ reui_title(reui_t *ui, char *titlefilename) |
117 | 117 |
return(0); |
118 | 118 |
} |
119 | 119 |
|
120 |
+int |
|
121 |
+reui_resize(reui_t *ui, int w, int h) |
|
122 |
+{ |
|
123 |
+ SDL_Texture *newscr; |
|
124 |
+ if(ui==NULL || w<=0 || h<=0) |
|
125 |
+ return(-1); |
|
126 |
+ if(ui->w==w && ui->h==h) |
|
127 |
+ return(0); /* nothing to do */ |
|
128 |
+ if((newscr=SDL_CreateTexture(ui->renderer,SDL_PIXELFORMAT_ARGB8888, |
|
129 |
+ SDL_TEXTUREACCESS_STREAMING,w,h))==NULL) |
|
130 |
+ return(-1); /* couldn't create texture */ |
|
131 |
+ if(ui->scr!=NULL) |
|
132 |
+ SDL_DestroyTexture(ui->scr),ui->scr=NULL; |
|
133 |
+ ui->scr=newscr; |
|
134 |
+ ui->h=h; |
|
135 |
+ ui->w=w; |
|
136 |
+ return(0); |
|
137 |
+} |
|
120 | 138 |
|
121 | 139 |
int |
122 | 140 |
reui_fill(reui_t *ui, int x, int y, int w, int h, char *rgba) |
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
/* |
2 |
- * re_ui.c |
|
2 |
+ * re_ui.h |
|
3 | 3 |
* |
4 | 4 |
* A programmers editor |
5 | 5 |
* |
... | ... |
@@ -35,10 +35,12 @@ reui_t *reui_init(); |
35 | 35 |
void reui_free(reui_t *ui); |
36 | 36 |
|
37 | 37 |
int reui_title(reui_t *ui, char *titlefilename); |
38 |
+int reui_resize(reui_t *ui, int w, int h); |
|
38 | 39 |
int reui_fill(reui_t *ui, int x, int y, int w, int h, char *rgba); |
39 | 40 |
int reui_scr2renderer(reui_t *ui, int x, int y, int w, int h); |
40 | 41 |
int reui_present(reui_t *ui); |
41 | 42 |
|
43 |
+ |
|
42 | 44 |
int reui_write(reui_t *ui, int x, int y, char *rgba, char *str, int nchar); |
43 | 45 |
#ifdef __GNUC__ |
44 | 46 |
int reui_printf(reui_t *ui, int x, int y, char *rgba, char *format, ...) __attribute__ ((format (printf, 5, 6))); |
... | ... |
@@ -72,6 +72,7 @@ static void sighandler_sigpipe(int num); |
72 | 72 |
|
73 | 73 |
re_t *re_init(void); |
74 | 74 |
void re_free(re_t *re); |
75 |
+int re_setuidata(re_t *re); |
|
75 | 76 |
|
76 | 77 |
int re_setfilename(re_t *re, char *filename); |
77 | 78 |
int re_processkey_editing(re_t *re, SDL_Event *event); |
... | ... |
@@ -125,9 +126,7 @@ main(int argc, char *argv[]) |
125 | 126 |
return(2); |
126 | 127 |
} |
127 | 128 |
reui_scr2renderer(re->ui,0,0,re->ui->w,re->ui->h); |
128 |
- re->x=0,re->y=re->ui->fontheight,re->w=re->ui->w,re->h=re->ui->h-re->y; |
|
129 |
- re->maxrow=re->h/re->ui->fontheight-1; |
|
130 |
- re->maxcol=re->w/re->ui->fontwidth-1; |
|
129 |
+ re_setuidata(re); |
|
131 | 130 |
re->headerdirty=1; |
132 | 131 |
re->contentsdirty=1; |
133 | 132 |
flag_had_events=0; |
... | ... |
@@ -150,7 +149,6 @@ fprintf(stderr,"QUESTION INIT: %s: %s\n",re->question->title,re->question->body) |
150 | 149 |
re->flag_newfile=1; |
151 | 150 |
else |
152 | 151 |
re->flag_newfile=0; |
153 |
-#warning XXX TODO: NO PARECE FUNCIONAR EL PLUGIN_UNSAVED (pregunta pero no carga los cambios) |
|
154 | 152 |
re->originline=re->origincol=0; |
155 | 153 |
re->curline=re->curcol=0; |
156 | 154 |
re->cursorpos=0; |
... | ... |
@@ -179,8 +177,12 @@ fprintf(stderr,"REDRAW Header (command)\n"); |
179 | 177 |
} |
180 | 178 |
if(re->contentsdirty) |
181 | 179 |
re_drawcontents(re); |
182 |
- if(re->ui->rendererdirty) |
|
180 |
+ if(re->ui->rendererdirty) { |
|
181 |
+#if 0 |
|
182 |
+fprintf(stderr,"RENDER\n"); |
|
183 |
+#endif |
|
183 | 184 |
reui_present(re->ui); |
185 |
+ } |
|
184 | 186 |
sselect_wait(ssel,(flag_had_events)?10:100); |
185 | 187 |
flag_had_events=(flag_had_events>0)?flag_had_events-1:0; |
186 | 188 |
SDL_PumpEvents(); |
... | ... |
@@ -201,8 +203,41 @@ fprintf(stderr,"REDRAW Header (command)\n"); |
201 | 203 |
re_processkey_commanddata(re,&event); |
202 | 204 |
break; |
203 | 205 |
case SDL_WINDOWEVENT: |
206 |
+#if 0 |
|
207 |
+fprintf(stderr,"WINDOWEVENT: %s(%li) data1:%li data2:%li\n", |
|
208 |
+(event.window.event==SDL_WINDOWEVENT_NONE)?"NONE": |
|
209 |
+(event.window.event==SDL_WINDOWEVENT_SHOWN)?"SHOWN": |
|
210 |
+(event.window.event==SDL_WINDOWEVENT_HIDDEN)?"HIDDEN": |
|
211 |
+(event.window.event==SDL_WINDOWEVENT_EXPOSED)?"EXPOSED": |
|
212 |
+(event.window.event==SDL_WINDOWEVENT_MOVED)?"MOVED": |
|
213 |
+(event.window.event==SDL_WINDOWEVENT_RESIZED)?"RESIZED": |
|
214 |
+(event.window.event==SDL_WINDOWEVENT_SIZE_CHANGED)?"SIZE_CHANGED": |
|
215 |
+(event.window.event==SDL_WINDOWEVENT_MINIMIZED)?"MINIMIZED": |
|
216 |
+(event.window.event==SDL_WINDOWEVENT_MAXIMIZED)?"MAXIMIZED": |
|
217 |
+(event.window.event==SDL_WINDOWEVENT_RESTORED)?"RESTORED": |
|
218 |
+(event.window.event==SDL_WINDOWEVENT_FOCUS_GAINED)?"FOCUS_GAINED": |
|
219 |
+(event.window.event==SDL_WINDOWEVENT_FOCUS_LOST)?"FOCUS_LOST": |
|
220 |
+(event.window.event==SDL_WINDOWEVENT_CLOSE)?"CLOSE": |
|
221 |
+(event.window.event==SDL_WINDOWEVENT_TAKE_FOCUS)?"TAKE_FOCUS": |
|
222 |
+"UNKNOWN", |
|
223 |
+(long) event.window.event,(long)event.window.data1,(long)event.window.data2); |
|
224 |
+#endif |
|
204 | 225 |
if(event.window.event==SDL_WINDOWEVENT_SHOWN |
205 | 226 |
|| event.window.event==SDL_WINDOWEVENT_EXPOSED) { |
227 |
+ re->headerdirty=1; |
|
228 |
+ re->contentsdirty=1; |
|
229 |
+ re->ui->rendererdirty=1; |
|
230 |
+ } else if((event.window.event==SDL_WINDOWEVENT_RESIZED |
|
231 |
+ || event.window.event==SDL_WINDOWEVENT_SIZE_CHANGED) |
|
232 |
+ && (event.window.data1!=re->ui->w || event.window.data2!=re->ui->h)) { |
|
233 |
+#if 0 |
|
234 |
+fprintf(stderr,"Resizing from %ix%i to %ix%i...\n",re->ui->w,re->ui->h,(int)event.window.data1,(int)event.window.data2); |
|
235 |
+#endif |
|
236 |
+ reui_resize(re->ui,event.window.data1,event.window.data2); |
|
237 |
+ |
|
238 |
+ re_setuidata(re); |
|
239 |
+ re->headerdirty=1; |
|
240 |
+ re->contentsdirty=1; |
|
206 | 241 |
re->ui->rendererdirty=1; |
207 | 242 |
} |
208 | 243 |
break; |
... | ... |
@@ -280,6 +315,23 @@ re_free(re_t *re) |
280 | 315 |
return; |
281 | 316 |
} |
282 | 317 |
|
318 |
+int |
|
319 |
+re_setuidata(re_t *re) |
|
320 |
+{ |
|
321 |
+ if(re==NULL) |
|
322 |
+ return(-1); |
|
323 |
+ re->x=0,re->y=re->ui->fontheight,re->w=re->ui->w,re->h=re->ui->h-re->y; |
|
324 |
+ re->maxrow=re->h/re->ui->fontheight-1; |
|
325 |
+ re->maxcol=re->w/re->ui->fontwidth-1; |
|
326 |
+ if(re->curline>=(re->originline+re->maxrow)) { |
|
327 |
+ re->originline=re->curline-re->maxrow; |
|
328 |
+ re->originline=(re->originline<0)?0:re->originline; |
|
329 |
+ } |
|
330 |
+ re->origincol=(re->curcol>(re->maxcol-COLFORCESCROLL))?(re->curcol-(re->maxcol-COLFORCESCROLL)):0; |
|
331 |
+ return(0); |
|
332 |
+} |
|
333 |
+ |
|
334 |
+ |
|
283 | 335 |
int |
284 | 336 |
re_setfilename(re_t *re, char *filename) |
285 | 337 |
{ |
... | ... |
@@ -755,8 +807,8 @@ re_moveleftright(re_t *re, int totalinc) |
755 | 807 |
re->origincol=re->origincol*COLFORCESCROLL; |
756 | 808 |
re->origincol=(re->origincol<0)?0:re->origincol; |
757 | 809 |
} |
758 |
- if(re->curcol>(re->origincol+re->maxrow-COLFORCESCROLL)) { |
|
759 |
- re->origincol=re->curcol+COLFORCESCROLL-re->maxrow-(re->curcol%COLFORCESCROLL); |
|
810 |
+ if(re->curcol>(re->origincol+re->maxcol-COLFORCESCROLL)) { |
|
811 |
+ re->origincol=re->curcol+COLFORCESCROLL-re->maxcol-(re->curcol%COLFORCESCROLL); |
|
760 | 812 |
re->origincol=(re->origincol<0)?0:re->origincol; |
761 | 813 |
} |
762 | 814 |
} |