﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3ASource%2FUI%2FWindow_Management</id>
	<title>Dev:Source/UI/Window Management - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3ASource%2FUI%2FWindow_Management"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/UI/Window_Management&amp;action=history"/>
	<updated>2026-11-05T12:54:15Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Source/UI/Window_Management&amp;diff=46874&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/UI/Window_Management&amp;diff=46874&amp;oldid=prev"/>
		<updated>2018-06-28T17:47:30Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 17:47時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Source/UI/Window_Management&amp;diff=46873&amp;oldid=prev</id>
		<title>wiki&gt;Mindrones: moved Dev:Source/Architecture/UI/Window Management to Dev:Source/UI/Window Management:&amp;#32;uniforming to 2.5/ structure</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/UI/Window_Management&amp;diff=46873&amp;oldid=prev"/>
		<updated>2010-05-13T08:37:34Z</updated>

		<summary type="html">&lt;p&gt;moved &lt;a href=&quot;/Dev:Source/Architecture/UI/Window_Management&quot; class=&quot;mw-redirect&quot; title=&quot;Dev:Source/Architecture/UI/Window Management&quot;&gt;Dev:Source/Architecture/UI/Window Management&lt;/a&gt; to &lt;a href=&quot;/Dev:Source/UI/Window_Management&quot; title=&quot;Dev:Source/UI/Window Management&quot;&gt;Dev:Source/UI/Window Management&lt;/a&gt;: uniforming to 2.5/ structure&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;IN PROGRESS. NOT FINISHED&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Window Management ==&lt;br /&gt;
&lt;br /&gt;
this page and the event refactoring one are closely related and aim to provide a base for defining the specs of the long due rewrite of this part of blender. The actual code is convoluted and use too much layers of wrapper while not allowing enough flexibility for modern software request like customization.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== the Current Situation ===&lt;br /&gt;
&lt;br /&gt;
Blender use a single window to do all its work with multiple non overlapping sub windows (named Areas). In each area run a separate editor (named Space). the Areas can be resized and changed to another kind of space at will. Each space handle its own datas and can access the global data structs. This part of the UI works very well, but the state of the underlying code is &amp;#039;&amp;#039;&amp;#039;very worying&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
From the system provided window to Areas, we have &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;5 !&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; levels of wrappers. Add to this that we dont properly support multi-screens setups, and that the render window is badly hacked in.&lt;br /&gt;
&lt;br /&gt;
from Ton&amp;#039;s notes in CMS (http://blender.org/cms/Window_Manager.497.0.html):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
System Window &amp;lt;-&amp;gt; GHOST_Window &amp;lt;-&amp;gt; Window &amp;lt;-&amp;gt; bWindow &amp;lt;-&amp;gt; ScrArea &amp;lt;br&amp;gt;&lt;br /&gt;
(OS specific) (Ghost lib) (ghostwinlay.c) (mywindow.c) (editscreen.c) &lt;br /&gt;
&lt;br /&gt;
Especially the way how the renderwindow is hacked into this system is a total nightmare, with even code comments like &amp;quot;Do not ever release this after 2.23!&amp;quot;). This was part of a restructuring process never even finished... &lt;br /&gt;
&lt;br /&gt;
The obvious wrapper series should be something like this: &lt;br /&gt;
&lt;br /&gt;
System Window &amp;lt;-&amp;gt; GHOST_Window &amp;lt;-&amp;gt; Screen &lt;br /&gt;
&lt;br /&gt;
Making the &amp;quot;render output window&amp;quot; just an Area in a Screen, or as a new (system) Window with a Screen, and thus allowing multiple Screens to be opened in separate windows (dual monitor purpose for example).&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Refer to CMS for more in depth explanation of system.&lt;br /&gt;
&lt;br /&gt;
Each space then handle its own event queue (via callbacks) and is supposed to run fully local, communicating with other spaces only via the global eventqueue. The most notable exception to this is the button windows which act on the active 3Dview.&lt;br /&gt;
&lt;br /&gt;
=== the MVC model ===&lt;br /&gt;
&lt;br /&gt;
the MVC model is a well known software engeneering method that i feel well suited for blender and for this rewrite, as the concepts involved are not too far from current. While it is generally viewed as an OOP concept, it can be perfectly be done in C, and insure nicely the spaces independance we need, while providing ways of communication perfectly defined.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;Model&amp;#039;&amp;#039; is what we act on, the input of action. In blender terms, the datalibs. &lt;br /&gt;
*&amp;#039;&amp;#039;View&amp;#039;&amp;#039; is the result, the actual space that display a kind of datalib.&lt;br /&gt;
*&amp;#039;&amp;#039;Controller&amp;#039;&amp;#039; handle user actions and all communications between different objects.&lt;br /&gt;
&lt;br /&gt;
The key point in this model is how and when things are changed, especially view updates. Even if the view can (and do in blender) modify directly the model datas, it is the controller who notify other controllers which need  to know values were updated, and those in turn will update their view. this means that the flow of info is perfectly controlled without having to rely on global redraw events.&lt;br /&gt;
&lt;br /&gt;
Another keypoint is that controllers are stacked, if one controller cannot handle a request (an event), it pass it to a higher level controller. As controllers are directly linked to a view object, iow a rect on the screen, you can always find the view and as such the controller completly encircling the requestor.&lt;br /&gt;
&lt;br /&gt;
In case of mode change, the view can change on the fly of controller, permitting maximum flexibility.&lt;br /&gt;
&lt;br /&gt;
controllers use an Observer &amp;amp; notification mecanism to pass data and request between them.&lt;br /&gt;
&lt;br /&gt;
This system allow to solve the problem of having a space A acting on another B, simply by allowing A to install a controller for B (name BforA), and then passing messages to it. B running in its own context, there is no problem of space state.&lt;br /&gt;
the controller BforA is only active when space A is active, even if physically in space B.&lt;br /&gt;
&lt;br /&gt;
each space keep its event queue and the stack of controller receive each in order.&lt;br /&gt;
&lt;br /&gt;
=== the rewriting ===&lt;br /&gt;
&lt;br /&gt;
Now this is a complex task, as it will impact on many areas of blender (basically many things in src + ghost) but this would provide a nice framework for further expansion.&lt;br /&gt;
&lt;br /&gt;
We have several problems there. &lt;br /&gt;
&lt;br /&gt;
As ghost is severly impacted (see its own page for lowlevel specifics) we need a X11 internals coder. We have no problem for finding Windows and Os X coders.&lt;br /&gt;
&lt;br /&gt;
it goes hand in hand with event system refactoring wich is another huge task.&lt;br /&gt;
&lt;br /&gt;
The notification and observer mechanism is relatively straightforward and there is plenty of example of how doing that.&lt;br /&gt;
&lt;br /&gt;
but the messages passed in those notifications must be well thinked first as the system will allow easy expansion, but changes afterward will be harder.&lt;br /&gt;
&lt;br /&gt;
[[User:Lukep|Lukep]] 21:55, 18 April 2006 (CEST)&lt;/div&gt;</summary>
		<author><name>wiki&gt;Mindrones</name></author>
		
	</entry>
</feed>