~unity-team/unity/unity.fix-750374

« back to all changes in this revision

Viewing changes to src/PlacesVScrollBar.cpp

  • Committer: Mirco Müller
  • Date: 2011-04-12 16:48:16 UTC
  • Revision ID: mirco.mueller@ubuntu.com-20110412164816-e4efeu1tw10ling9
Remove state-handling for vertical Dash-scrollbar. Change rendering of said scrollbar. Fixes LP: #750374

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
PlacesVScrollBar::PlacesVScrollBar (NUX_FILE_LINE_DECL)
28
28
  : VScrollBar (NUX_FILE_LINE_PARAM)
29
29
{
30
 
  m_SlideBar->OnMouseEnter.connect (sigc::mem_fun (this,
31
 
                                 &PlacesVScrollBar::RecvMouseEnter));
32
 
 
33
 
  m_SlideBar->OnMouseLeave.connect (sigc::mem_fun (this,
34
 
                                 &PlacesVScrollBar::RecvMouseLeave));
35
 
 
36
 
  m_SlideBar->OnMouseDown.connect (sigc::mem_fun (this,
37
 
                                &PlacesVScrollBar::RecvMouseDown));
38
 
 
39
 
  m_SlideBar->OnMouseUp.connect (sigc::mem_fun (this,
40
 
                              &PlacesVScrollBar::RecvMouseUp));
41
 
 
42
 
  m_SlideBar->OnMouseDrag.connect (sigc::mem_fun (this,
43
 
                                &PlacesVScrollBar::RecvMouseDrag));
44
 
 
45
 
  _drag    = false;
46
 
  _entered = false;
47
 
 
48
 
  _slider[STATE_OFF]  = NULL;
49
 
  _slider[STATE_OVER] = NULL;
50
 
  _slider[STATE_DOWN] = NULL;
51
 
  _track              = NULL;
52
 
 
53
 
  _state = STATE_OFF;
 
30
  _slider = NULL;
 
31
  _track  = NULL;
54
32
 
55
33
  m_SlideBar->SetMinimumSize (PLACES_VSCROLLBAR_WIDTH + 2 * BLUR_SIZE,
56
34
                              PLACES_VSCROLLBAR_HEIGHT + 2 * BLUR_SIZE);
62
40
 
63
41
PlacesVScrollBar::~PlacesVScrollBar ()
64
42
{
65
 
  if (_slider[STATE_OFF])
66
 
    _slider[STATE_OFF]->UnReference ();
67
 
 
68
 
  if (_slider[STATE_OVER])
69
 
    _slider[STATE_OVER]->UnReference ();
70
 
 
71
 
  if (_slider[STATE_DOWN])
72
 
    _slider[STATE_DOWN]->UnReference ();
 
43
  if (_slider)
 
44
    _slider->UnReference ();
73
45
 
74
46
  if (_track)
75
47
    _track->UnReference ();
76
48
}
77
49
 
78
50
void
79
 
PlacesVScrollBar::RecvMouseEnter (int           x,
80
 
                                  int           y,
81
 
                                  unsigned long button_flags,
82
 
                                  unsigned long key_flags)
83
 
{
84
 
  _entered = true;
85
 
  if (!_drag)
86
 
  {
87
 
    _state = STATE_OVER;
88
 
    NeedRedraw ();
89
 
  }
90
 
}
91
 
 
92
 
void
93
 
PlacesVScrollBar::RecvMouseLeave (int           x,
94
 
                                  int           y,
95
 
                                  unsigned long button_flags,
96
 
                                  unsigned long key_flags)
97
 
{
98
 
  _entered = false;
99
 
  if (!_drag)
100
 
  {
101
 
    _state = STATE_OFF;
102
 
    NeedRedraw ();
103
 
  }
104
 
}
105
 
 
106
 
void
107
 
PlacesVScrollBar::RecvMouseDown (int           x,
108
 
                                 int           y,
109
 
                                 unsigned long button_flags,
110
 
                                 unsigned long key_flags)
111
 
{
112
 
  _state = STATE_DOWN;
113
 
  NeedRedraw ();
114
 
}
115
 
 
116
 
void
117
 
PlacesVScrollBar::RecvMouseUp (int           x,
118
 
                               int           y,
119
 
                               unsigned long button_flags,
120
 
                               unsigned long key_flags)
121
 
{
122
 
  _drag = false;
123
 
  if (_entered)
124
 
    _state = STATE_OVER;
125
 
  else
126
 
    _state = STATE_OFF;
127
 
  NeedRedraw ();
128
 
}
129
 
 
130
 
void
131
 
PlacesVScrollBar::RecvMouseDrag (int           x,
132
 
                                 int           y,
133
 
                                 int           dx,
134
 
                                 int           dy,
135
 
                                 unsigned long button_flags,
136
 
                                 unsigned long key_flags)
137
 
{
138
 
  _drag = true;
139
 
  NeedRedraw ();
140
 
}
141
 
 
142
 
void
143
51
PlacesVScrollBar::PreLayoutManagement ()
144
52
{
145
53
  nux::VScrollBar::PreLayoutManagement ();
166
74
  nux::GetPainter().PaintBackground (gfxContext, base);
167
75
 
168
76
  // check if textures have been computed... if they haven't, exit function
169
 
  if (!_slider[STATE_OFF])
 
77
  if (!_slider)
170
78
    return;
171
79
 
172
80
  //texxform.SetWrap (nux::TEXWRAP_REPEAT, nux::TEXWRAP_REPEAT);
194
102
                         slider_geo.y,
195
103
                         slider_geo.width,
196
104
                         slider_geo.height,
197
 
                         _slider[_state]->GetDeviceTexture (),
 
105
                         _slider->GetDeviceTexture (),
198
106
                         texxform,
199
107
                         color);
200
108
  }
212
120
  nux::CairoGraphics* cairoGraphics = NULL;
213
121
  cairo_t*            cr            = NULL;
214
122
  nux::NBitmapData*   bitmap        = NULL;
215
 
  double              half_height   = 0.0f;
216
 
 
217
 
  // update texture of off-state of slider
218
 
  width  = m_SlideBar->GetBaseWidth ();
219
 
  height = m_SlideBar->GetBaseHeight ();
220
 
  cairoGraphics = new nux::CairoGraphics (CAIRO_FORMAT_ARGB32, width, height);
221
 
  width  -= 2 * BLUR_SIZE;
222
 
  height -= 2 * BLUR_SIZE;
223
 
 
224
 
  cr = cairoGraphics->GetContext ();
225
 
 
226
 
  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
227
 
  cairo_paint (cr);
228
 
 
229
 
  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
230
 
  cairo_set_line_width (cr, 1.0f);
231
 
  cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 0.75f);
232
 
  cairoGraphics->DrawRoundedRectangle (cr,
233
 
                                       1.0f,
234
 
                                       BLUR_SIZE + 1.5f,
235
 
                                       BLUR_SIZE + 1.5f,
236
 
                                       (double) (width - 1) / 2.0f,
237
 
                                       (double) width - 3.0f,
238
 
                                       (double) height - 3.0f);
239
 
  cairo_fill_preserve (cr);
240
 
  cairoGraphics->BlurSurface (BLUR_SIZE - 3);
241
 
  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
242
 
  cairo_fill_preserve (cr);
243
 
  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
244
 
  cairo_set_source_rgba (cr, 0.125f, 0.125f, 0.125f, 0.75f);
245
 
  cairo_fill_preserve (cr);
246
 
  cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 0.5f);
247
 
  cairo_stroke (cr);
248
 
 
249
 
  cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 1.0f);
250
 
  half_height = (double) (height + 2 * BLUR_SIZE) / 2.0f;
251
 
  cairo_move_to (cr, BLUR_SIZE + 2.5f, half_height - 2.0f);
252
 
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height - 2.0f);
253
 
  cairo_move_to (cr, BLUR_SIZE + 2.5f, half_height);
254
 
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height);
255
 
  cairo_move_to (cr, BLUR_SIZE + 2.5f, half_height + 2.0f);
256
 
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height + 2.0f);
257
 
  cairo_stroke (cr);
258
 
 
259
 
  //cairo_surface_write_to_png (cairo_get_target (cr), "/tmp/slider_off.png");
260
 
 
261
 
  bitmap = cairoGraphics->GetBitmap ();
262
 
 
263
 
  if (_slider[STATE_OFF])
264
 
    _slider[STATE_OFF]->UnReference ();
265
 
 
266
 
  _slider[STATE_OFF] = nux::GetThreadGLDeviceFactory()->CreateSystemCapableTexture ();
267
 
  _slider[STATE_OFF]->Update (bitmap);
268
 
 
269
 
  cairo_destroy (cr);
270
 
  delete bitmap;
271
 
  delete cairoGraphics;
272
 
 
273
 
  // update texture of over-state of slider
274
 
  width  = m_SlideBar->GetBaseWidth ();
275
 
  height = m_SlideBar->GetBaseHeight ();
276
 
  cairoGraphics = new nux::CairoGraphics (CAIRO_FORMAT_ARGB32, width, height);
277
 
  width  -= 2 * BLUR_SIZE;
278
 
  height -= 2 * BLUR_SIZE;
279
 
 
280
 
  cr = cairoGraphics->GetContext ();
281
 
 
282
 
  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
283
 
  cairo_paint (cr);
284
 
 
285
 
  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
286
 
  cairo_set_line_width (cr, 1.0f);
287
 
  cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 0.25f);
288
 
  cairoGraphics->DrawRoundedRectangle (cr,
289
 
                                       1.0f,
290
 
                                       BLUR_SIZE + 1.5f,
291
 
                                       BLUR_SIZE + 1.5f,
292
 
                                       (double) (width - 1) / 2.0f,
293
 
                                       (double) width - 3.0f,
294
 
                                       (double) height - 3.0f);
295
 
 
296
 
  cairo_fill_preserve (cr);
297
 
  cairoGraphics->BlurSurface (BLUR_SIZE - 3);
298
 
  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
299
 
  cairo_fill_preserve (cr);
300
 
  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
301
 
 
302
 
  cairo_surface_t* tmp_surf = NULL;
303
 
  cairo_t*         tmp_cr   = NULL;
304
 
  tmp_surf = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 6, 4);
305
 
  tmp_cr = cairo_create (tmp_surf);
306
 
  cairo_set_line_width (tmp_cr, 1.0f);
307
 
  cairo_set_antialias (tmp_cr, CAIRO_ANTIALIAS_NONE);
308
 
  cairo_set_operator (tmp_cr, CAIRO_OPERATOR_CLEAR);
309
 
  cairo_paint (tmp_cr);
310
 
  cairo_set_operator (tmp_cr, CAIRO_OPERATOR_OVER);
311
 
  cairo_set_source_rgba (tmp_cr, 1.0f, 1.0f, 1.0f, 0.25f);
312
 
  cairo_paint (tmp_cr);
313
 
  cairo_set_source_rgba (tmp_cr, 1.0f, 1.0f, 1.0f, 0.5f);
314
 
  cairo_rectangle (tmp_cr, 0.f, 0.f, 1.0f, 1.0f);
315
 
  cairo_rectangle (tmp_cr, 1.f, 1.f, 1.0f, 1.0f);
316
 
  cairo_rectangle (tmp_cr, 2.f, 2.f, 1.0f, 1.0f);
317
 
  cairo_rectangle (tmp_cr, 3.f, 3.f, 1.0f, 1.0f);
318
 
  cairo_rectangle (tmp_cr, 4.f, 0.f, 1.0f, 1.0f);
319
 
  cairo_rectangle (tmp_cr, 5.f, 1.f, 1.0f, 1.0f);
320
 
  cairo_fill (tmp_cr);
321
 
  cairo_destroy (tmp_cr);
322
 
  cairo_set_source_surface (cr, tmp_surf, BLUR_SIZE + 1.5f, BLUR_SIZE + 1.5f);
323
 
  cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
324
 
  //cairo_surface_write_to_png (tmp_surf, "/tmp/tmp_surf.png");
325
 
 
326
 
  cairo_fill_preserve (cr);
327
 
  cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 0.5f);
328
 
  cairo_stroke (cr);
329
 
 
330
 
  cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 1.0f);
331
 
  cairo_move_to (cr, BLUR_SIZE + 2.5f, half_height - 2.0f);
332
 
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height - 2.0f);
333
 
  cairo_move_to (cr, BLUR_SIZE + 2.5f, half_height);
334
 
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height);
335
 
  cairo_move_to (cr, BLUR_SIZE + 2.5f, half_height + 2.0f);
336
 
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height + 2.0f);
337
 
  cairo_stroke (cr);
338
 
 
339
 
  //cairo_surface_write_to_png (cairo_get_target (cr), "/tmp/slider_over.png");
340
 
 
341
 
  bitmap = cairoGraphics->GetBitmap ();
342
 
 
343
 
  if (_slider[STATE_OVER])
344
 
    _slider[STATE_OVER]->UnReference ();
345
 
 
346
 
  _slider[STATE_OVER] = nux::GetThreadGLDeviceFactory()->CreateSystemCapableTexture ();
347
 
  _slider[STATE_OVER]->Update (bitmap);
348
 
 
349
 
  cairo_destroy (cr);
350
 
  delete bitmap;
351
 
  delete cairoGraphics;
352
 
 
353
 
  // update texture of down-state of slider
 
123
 
 
124
  // update texture of slider
354
125
  width  = m_SlideBar->GetBaseWidth ();
355
126
  height = m_SlideBar->GetBaseHeight ();
356
127
  cairoGraphics = new nux::CairoGraphics (CAIRO_FORMAT_ARGB32, width, height);
375
146
  cairoGraphics->BlurSurface (BLUR_SIZE - 3);
376
147
  cairo_fill (cr);
377
148
 
378
 
  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
 
149
  /*cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
379
150
  cairo_set_source_rgba (cr, 1.0f, 1.0f, 1.0f, 1.0f);
380
151
  cairo_move_to (cr, BLUR_SIZE + 2.5f, half_height - 2.0f);
381
152
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height - 2.0f);
383
154
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height);
384
155
  cairo_move_to (cr, BLUR_SIZE + 2.5f, half_height + 2.0f);
385
156
  cairo_line_to (cr, BLUR_SIZE + 2.5f + 5.0f, half_height + 2.0f);
386
 
  cairo_stroke (cr);
 
157
  cairo_stroke (cr);*/
387
158
 
388
 
  //cairo_surface_write_to_png (cairo_get_target (cr), "/tmp/slider_down.png");
 
159
  //cairo_surface_write_to_png (cairo_get_target (cr), "/tmp/slider.png");
389
160
 
390
161
  bitmap = cairoGraphics->GetBitmap ();
391
162
 
392
 
  if (_slider[STATE_DOWN])
393
 
    _slider[STATE_DOWN]->UnReference ();
 
163
  if (_slider)
 
164
    _slider->UnReference ();
394
165
 
395
 
  _slider[STATE_DOWN] = nux::GetThreadGLDeviceFactory()->CreateSystemCapableTexture ();
396
 
  _slider[STATE_DOWN]->Update (bitmap);
 
166
  _slider = nux::GetThreadGLDeviceFactory()->CreateSystemCapableTexture ();
 
167
  _slider->Update (bitmap);
397
168
 
398
169
  cairo_destroy (cr);
399
170
  delete bitmap;
442
213
  cairo_destroy (cr);
443
214
  delete bitmap;
444
215
  delete cairoGraphics;
445
 
  cairo_surface_destroy (tmp_surf);
446
216
}