OLD | NEW |
1 # Browser View Resizer | 1 # Browser View Resizer |
2 | 2 |
3 To fix bug [458](http://code.google.com/p/chromium/issues/detail?id=458), which | 3 To fix bug [458](http://code.google.com/p/chromium/issues/detail?id=458), which |
4 identifies that it is hard to hit the thin window frame corner to resize the | 4 identifies that it is hard to hit the thin window frame corner to resize the |
5 window. It would be better to have a resize hit area (called widget from now on) | 5 window. It would be better to have a resize hit area (called widget from now on) |
6 in the corner, as we currently have for edit boxes for example. | 6 in the corner, as we currently have for edit boxes for example. |
7 | 7 |
8 [TOC] | 8 [TOC] |
9 | 9 |
10 ## Background | 10 ## Background |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 | 69 |
70 ## Design | 70 ## Design |
71 | 71 |
72 Unfortunately, we must deal with the two different cases (with or without a | 72 Unfortunately, we must deal with the two different cases (with or without a |
73 dynamic bottom view) in two different and distinct ways. | 73 dynamic bottom view) in two different and distinct ways. |
74 | 74 |
75 ### Over a Dynamic View | 75 ### Over a Dynamic View |
76 | 76 |
77 For the cases where there is a dynamic view at the bottom of the browser view, a | 77 For the cases where there is a dynamic view at the bottom of the browser view, a |
78 new view class (named `BrowserResizerView`) inheriting from | 78 new view class (named `BrowserResizerView`) inheriting from |
79 [views::View](http://src.chromium.org/svn/trunk/src/chrome/views/view.h) is used | 79 [views::View](https://src.chromium.org/svn/trunk/src/chrome/views/view.h) is use
d |
80 to display the resize widget. It is set as a child of the dynamic view laid at | 80 to display the resize widget. It is set as a child of the dynamic view laid at |
81 the bottom of the browser view. The Browser view takes care of properly setting | 81 the bottom of the browser view. The Browser view takes care of properly setting |
82 the bounds of the resize widget view, based on the language direction. | 82 the bounds of the resize widget view, based on the language direction. |
83 | 83 |
84 Also, it is easier and more efficient to let the browser view handle the mouse | 84 Also, it is easier and more efficient to let the browser view handle the mouse |
85 interactions to resize the browser. We can let Windows take care of properly | 85 interactions to resize the browser. We can let Windows take care of properly |
86 resizing the view by returning the HTBOTTOMLEFT or HTBOTTOMRIGHT flags from the | 86 resizing the view by returning the HTBOTTOMLEFT or HTBOTTOMRIGHT flags from the |
87 NCClientHitTest windows message handler when they occur over the resize widget. | 87 NCClientHitTest windows message handler when they occur over the resize widget. |
88 The browser view also takes care of changing the mouse cursor to the appropriate | 88 The browser view also takes care of changing the mouse cursor to the appropriate |
89 resizing arrows when the mouse hovers over the resize widget area. | 89 resizing arrows when the mouse hovers over the resize widget area. |
(...skipping 14 matching lines...) Expand all Loading... |
104 receives the bitmap rendered by WebKit so it can layer the transparent bitmap | 104 receives the bitmap rendered by WebKit so it can layer the transparent bitmap |
105 used for the resize widget. That same render widget host view must also handle | 105 used for the resize widget. That same render widget host view must also handle |
106 the mouse interaction and use the same trick as the browser view to let Windows | 106 the mouse interaction and use the same trick as the browser view to let Windows |
107 take care of resizing the whole frame. It must also take care of changing the | 107 take care of resizing the whole frame. It must also take care of changing the |
108 mouse cursor to the appropriate resizing arrows when the mouse hovers over the | 108 mouse cursor to the appropriate resizing arrows when the mouse hovers over the |
109 resize widget area. | 109 resize widget area. |
110 | 110 |
111 ## Implementation | 111 ## Implementation |
112 | 112 |
113 You can find the changes made to make this work in patch | 113 You can find the changes made to make this work in patch |
114 [16488](http://codereview.chromium.org/16488). | 114 [16488](https://codereview.chromium.org/16488). |
115 | 115 |
116 ## Alternatives Considered | 116 ## Alternatives Considered |
117 | 117 |
118 We could have tried to reuse the code that currently takes care of resizing the | 118 We could have tried to reuse the code that currently takes care of resizing the |
119 edit boxes within WebKit, but this code is wired to the overflow style of HTML | 119 edit boxes within WebKit, but this code is wired to the overflow style of HTML |
120 element and would have been hard to rewire in an elegant way to be used in a | 120 element and would have been hard to rewire in an elegant way to be used in a |
121 higher level object like the browser view. Unless we missed something. | 121 higher level object like the browser view. Unless we missed something. |
122 | 122 |
123 We might also decide to go with the easier solution of only showing the resize | 123 We might also decide to go with the easier solution of only showing the resize |
124 corner within the tab contents view. In that case, it would still be recommended | 124 corner within the tab contents view. In that case, it would still be recommended |
125 that the resize widget would not appear when dynamic views are taking over the | 125 that the resize widget would not appear when dynamic views are taking over the |
126 bottom portion of the browser view, since it would look weird to have a resize | 126 bottom portion of the browser view, since it would look weird to have a resize |
127 corner widget that is not in the real... corner... of the browser view ;-) | 127 corner widget that is not in the real... corner... of the browser view ;-) |
128 | 128 |
129 We may decide that we don't want to see the resize widget bitmap hide some | 129 We may decide that we don't want to see the resize widget bitmap hide some |
130 pixels from the tab contents (or dynamic view) yet we would still have the | 130 pixels from the tab contents (or dynamic view) yet we would still have the |
131 resizing functionality via the mouse interaction and also get visual feedback | 131 resizing functionality via the mouse interaction and also get visual feedback |
132 with the mouse cursor changes while we hover over the resize widget area. | 132 with the mouse cursor changes while we hover over the resize widget area. |
133 | 133 |
134 We may do more research to find a way to solve this problem in a single place as | 134 We may do more research to find a way to solve this problem in a single place as |
135 opposed to the current dual solution, but none was found so far. | 135 opposed to the current dual solution, but none was found so far. |
OLD | NEW |