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>2006-01-24 01:05:47 +0300
committerTon Roosendaal <ton@blender.org>2006-01-24 01:05:47 +0300
commit042d612df219c8f6a29afa235537380f227b5684 (patch)
tree310a2c859b99c559115bbcda0aa70f2543bf962c /source/blender/src/interface_panel.c
parent5668480c99001a617fd59a2383deb858195ffb26 (diff)
Giant commit!
A full detailed description of this will be done later... is several days of work. Here's a summary: Render: - Full cleanup of render code, removing *all* globals and bad level calls all over blender. Render module is now not called abusive anymore - API-fied calls to rendering - Full recode of internal render pipeline. Is now rendering tiles by default, prepared for much smarter 'bucket' render later. - Each thread now can render a full part - Renders were tested with 4 threads, goes fine, apart from some lookup tables in softshadow and AO still - Rendering is prepared to do multiple layers and passes - No single 32 bits trick in render code anymore, all 100% floats now. Writing images/movies - moved writing images to blender kernel (bye bye 'schrijfplaatje'!) - made a new Movie handle system, also in kernel. This will enable much easier use of movies in Blender PreviewRender: - Using new render API, previewrender (in buttons) now uses regular render code to generate images. - new datafile 'preview.blend.c' has the preview scenes in it - previews get rendered in exact displayed size (1 pixel = 1 pixel) 3D Preview render - new; press Pkey in 3d window, for a panel that continuously renders (pkey is for games, i know... but we dont do that in orange now!) - this render works nearly identical to buttons-preview render, so it stops rendering on any event (mouse, keyboard, etc) - on moving/scaling the panel, the render code doesn't recreate all geometry - same for shifting/panning view - all other operations (now) regenerate the full render database still. - this is WIP... but big fun, especially for simple scenes! Compositor - Using same node system as now in use for shaders, you can composit images - works pretty straightforward... needs much more options/tools and integration with rendering still - is not threaded yet, nor is so smart to only recalculate changes... will be done soon! - the "Render Result" node will get all layers/passes as output sockets - The "Output" node renders to a builtin image, which you can view in the Image window. (yes, output nodes to render-result, and to files, is on the list!) The Bad News - "Unified Render" is removed. It might come back in some stage, but this system should be built from scratch. I can't really understand this code... I expect it is not much needed, especially with advanced layer/passes control - Panorama render, Field render, Motion blur, is not coded yet... (I had to recode every single feature in render, so...!) - Lens Flare is also not back... needs total revision, might become composit effect though (using zbuffer for visibility) - Part render is gone! (well, thats obvious, its default now). - The render window is only restored with limited functionality... I am going to check first the option to render to a Image window, so Blender can become a true single-window application. :) For example, the 'Spare render buffer' (jkey) doesnt work. - Render with border, now default creates a smaller image - No zbuffers are written yet... on the todo! - Scons files and MSVC will need work to get compiling again OK... thats what I can quickly recall. Now go compiling!
Diffstat (limited to 'source/blender/src/interface_panel.c')
-rw-r--r--source/blender/src/interface_panel.c95
1 files changed, 80 insertions, 15 deletions
diff --git a/source/blender/src/interface_panel.c b/source/blender/src/interface_panel.c
index 2bb31032a04..d1ba75a5036 100644
--- a/source/blender/src/interface_panel.c
+++ b/source/blender/src/interface_panel.c
@@ -72,6 +72,7 @@
#include "BIF_keyval.h"
#include "BIF_mainqueue.h"
+#include "BIF_previewrender.h"
#include "BIF_screen.h"
#include "BIF_toolbox.h"
#include "BIF_mywindow.h"
@@ -481,10 +482,14 @@ int uiNewPanel(ScrArea *sa, uiBlock *block, char *panelname, char *tabname, int
}
if(pa) {
- if(pa->sizex != sizex) {
+ /* scale correction */
+ if(pa->control & UI_PNL_SCALE);
+ else {
pa->sizex= sizex;
- pa->ofsy+= (pa->sizey - sizey); // check uiNewPanelHeight()
- pa->sizey= sizey;
+ if(pa->sizey != sizey) {
+ pa->ofsy+= (pa->sizey - sizey); // check uiNewPanelHeight()
+ pa->sizey= sizey;
+ }
}
}
else {
@@ -928,6 +933,30 @@ static void ui_draw_panel_header(uiBlock *block)
}
+static void ui_draw_panel_scalewidget(uiBlock *block)
+{
+ float xmin, xmax, dx;
+ float ymin, ymax, dy;
+
+ xmin= block->maxx-PNL_HEADER+2;
+ xmax= block->maxx-3;
+ ymin= block->miny+3;
+ ymax= block->miny+PNL_HEADER-2;
+
+ dx= 0.5f*(xmax-xmin);
+ dy= 0.5f*(ymax-ymin);
+
+ glEnable(GL_BLEND);
+ glColor4ub(255, 255, 255, 50);
+ fdrawline(xmin, ymin, xmax, ymax);
+ fdrawline(xmin+dx, ymin, xmax, ymax-dy);
+
+ glColor4ub(0, 0, 0, 50);
+ fdrawline(xmin, ymin+block->aspect, xmax, ymax+block->aspect);
+ fdrawline(xmin+dx, ymin+block->aspect, xmax, ymax-dy+block->aspect);
+ glDisable(GL_BLEND);
+}
+
void ui_draw_panel(uiBlock *block)
{
Panel *panel= block->panel;
@@ -1070,6 +1099,9 @@ void ui_draw_panel(uiBlock *block)
uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 8);
}
+ if(panel->control & UI_PNL_SCALE)
+ ui_draw_panel_scalewidget(block);
+
/* and a soft shadow-line for now */
/*
glEnable( GL_BLEND );
@@ -1496,11 +1528,12 @@ static void test_add_new_tabs(ScrArea *sa)
/* ------------ panel drag ---------------- */
-static void ui_drag_panel(uiBlock *block)
+static void ui_drag_panel(uiBlock *block, int doscale)
{
Panel *panel= block->panel;
- short align=0, first=1, ofsx, ofsy, dx=0, dy=0, dxo=0, dyo=0, mval[2], mvalo[2];
-
+ short align=0, first=1, dx=0, dy=0, dxo=0, dyo=0, mval[2], mvalo[2];
+ short ofsx, ofsy, sizex, sizey;
+
if(curarea->spacetype==SPACE_BUTS) {
SpaceButs *sbuts= curarea->spacedata.first;
align= sbuts->align;
@@ -1509,9 +1542,15 @@ static void ui_drag_panel(uiBlock *block)
uiGetMouse(block->win, mvalo);
ofsx= block->panel->ofsx;
ofsy= block->panel->ofsy;
+ sizex= block->panel->sizex;
+ sizey= block->panel->sizey;
panel->flag |= PNL_SELECT;
+ /* exception handling, 3d window preview panel */
+ if(block->drawextra==BIF_view3d_previewdraw)
+ BIF_view3d_previewrender_clear(curarea);
+
while(TRUE) {
if( !(get_mbut() & L_MOUSE) ) break;
@@ -1528,13 +1567,25 @@ static void ui_drag_panel(uiBlock *block)
dxo= dx; dyo= dy;
first= 0;
- panel->ofsx = ofsx+dx;
- panel->ofsy = ofsy+dy;
-
- check_panel_overlap(curarea, panel);
-
- if(align) uiAlignPanelStep(curarea, 0.2);
+ if(doscale) {
+ panel->sizex = MAX2(sizex+dx, UI_PANEL_MINX);
+
+ if(sizey-dy < UI_PANEL_MINY) {
+ dy= -UI_PANEL_MINY+sizey;
+ }
+ panel->sizey = sizey-dy;
+
+ panel->ofsy= ofsy+dy;
+ }
+ else {
+ panel->ofsx = ofsx+dx;
+ panel->ofsy = ofsy+dy;
+ check_panel_overlap(curarea, panel);
+
+ if(align) uiAlignPanelStep(curarea, 0.2);
+ }
+
/* warn: this re-allocs blocks! */
scrarea_do_windraw(curarea);
ui_redraw_select_panel(curarea);
@@ -1568,6 +1619,11 @@ static void ui_drag_panel(uiBlock *block)
if(align==0) addqueue(block->win, REDRAW, 1);
else ui_animate_panels(curarea);
+
+ /* exception handling, 3d window preview panel */
+ if(block->drawextra==BIF_view3d_previewdraw)
+ BIF_view3d_previewrender_signal(curarea, PR_DISPRECT);
+
}
@@ -1608,7 +1664,7 @@ static void ui_panel_untab(uiBlock *block)
pa= pa->next;
}
- ui_drag_panel(block);
+ ui_drag_panel(block, 0);
break;
}
@@ -1782,16 +1838,25 @@ void ui_do_panel(uiBlock *block, uiEvent *uevent)
}
else if(block->panel->flag & PNL_CLOSED) {
- ui_drag_panel(block);
+ ui_drag_panel(block, 0);
}
/* check if clicked in tabbed area */
else if(uevent->mval[0] < block->maxx-PNL_ICON-3 && panel_has_tabs(block->panel)) {
panel_clicked_tabs(block, uevent->mval[0]);
}
else {
- ui_drag_panel(block);
+ ui_drag_panel(block, 0);
}
}
}
+/* panel with scaling widget */
+void ui_scale_panel(uiBlock *block)
+{
+ if(block->panel->flag & PNL_CLOSED)
+ return;
+
+ ui_drag_panel(block, 1);
+}
+