Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2003-07-18 17:20:47 +0400
committerTon Roosendaal <ton@blender.org>2003-07-18 17:20:47 +0400
commite00a27f9fdf76e853d6b473f2f38df10ca4a7fef (patch)
tree1ef9486f04b66bb41cd5b5dcf607915417ea1d59 /source/blender/src/renderwin.c
parent90f325ea6e58a7599da1efd9c7738253cc6c2bf0 (diff)
* fixed bug: pressing F11 in dispview mode opened a window
* new feature: rendering large images now displays correctly zoomed down in an imagewindow. The fact that it didn't also caused unpredictable slowdowns at various systems (tested osx, win). Of course after rendering you can still zoom in/out as usual. * there was code that limits the maximum size of an imagewindow, keeping a small border around it free. By increasing the border 15 pixels I got huge speedup at OSX. Still looks good though... Needs more research what is happening here, maybe we need a user setting for it... but i rather implement the usage of the internal ImageWindow first. Still unsolved: 24 bits windows opening... I don't dare yet hacking in it Ghost.
Diffstat (limited to 'source/blender/src/renderwin.c')
-rw-r--r--source/blender/src/renderwin.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/source/blender/src/renderwin.c b/source/blender/src/renderwin.c
index a9b3604a199..cc8456dc0f9 100644
--- a/source/blender/src/renderwin.c
+++ b/source/blender/src/renderwin.c
@@ -217,9 +217,22 @@ static void renderwin_set_infotext(RenderWin *rw, char *info_text)
static void renderwin_reset_view(RenderWin *rw)
{
+ int w, h, rectx, recty;
+
if (rw->info_text) renderwin_set_infotext(rw, NULL);
- rw->zoom= 1.0;
+ /* now calculate a zoom for when image is larger than window */
+ window_get_size(rw->win, &w, &h);
+ /* at this point the r.rectx/y values are not correct yet */
+ rectx= (G.scene->r.size*G.scene->r.xsch)/100;
+ recty= (G.scene->r.size*G.scene->r.ysch)/100;
+
+ if(rectx>w || recty>h) {
+ if(rectx-w > recty-h) rw->zoom= ((float)w)/((float)rectx);
+ else rw->zoom= ((float)h)/((float)recty);
+ }
+ else rw->zoom= 1.0;
+
rw->zoomofs[0]= rw->zoomofs[1]= 0;
renderwin_queue_redraw(rw);
}
@@ -448,7 +461,7 @@ void calc_renderwin_rectangle(int posmask, int renderpos_r[2], int rendersize_r[
float ndc_x= 0.0, ndc_y= 0.0;
/* XXX, we temporarily hack the screen size and position so
- * the window is always 30 pixels away from a side, really need
+ * the window is always 60 pixels away from a side, really need
* a GHOST_GetMaxWindowBounds or so - zr
*/
winlay_get_screensize(&scr_w, &scr_h);
@@ -459,9 +472,9 @@ void calc_renderwin_rectangle(int posmask, int renderpos_r[2], int rendersize_r[
rendersize_r[0]*= G.scene->r.xparts;
rendersize_r[1]*= G.scene->r.yparts;
}
-
- rendersize_r[0]= CLAMPIS(rendersize_r[0], 100, scr_w-90);
- rendersize_r[1]= CLAMPIS(rendersize_r[1], 100, scr_h-90);
+ /* increased size of clipping for OSX, should become an option instead */
+ rendersize_r[0]= CLAMPIS(rendersize_r[0], 100, scr_w-120);
+ rendersize_r[1]= CLAMPIS(rendersize_r[1], 100, scr_h-120);
for (y=-1; y<=1; y++) {
for (x=-1; x<=1; x++) {
@@ -492,6 +505,7 @@ static void renderwin_init_display_cb(void)
if (!render_win) {
open_renderwin(renderpos, rendersize);
+ renderwin_reset_view(render_win); // incl. autozoom for large images
} else {
int win_x, win_y;
int win_w, win_h;
@@ -930,7 +944,7 @@ void BIF_toggle_render_display(void)
ScrArea *sa= find_dispimage_v3d();
if(R.rectot==NULL); // do nothing
- else if (render_win) {
+ else if (render_win && R.displaymode==R_DISPLAYWIN) {
if(render_win->active) {
mainwindow_raise();
mainwindow_make_active();
@@ -942,7 +956,7 @@ void BIF_toggle_render_display(void)
render_win->active= 1;
}
}
- else if (sa) {
+ else if (sa && R.displaymode==R_DISPLAYVIEW) {
View3D *vd= sa->spacedata.first;
vd->flag &= ~V3D_DISPIMAGE;
scrarea_queue_winredraw(sa);