@@ -385,8 +385,8 @@ bool ScrollbarDrawing::PaintScrollbarButton(
385
385
ColorPattern (ToDeviceColor (buttonColor)));
386
386
387
387
// Start with Up arrow.
388
- float arrowPolygonX[] = {- 4 . 0f , 0 . 0f , 4 . 0f , 4 . 0f , 0 . 0f , - 4 . 0f };
389
- float arrowPolygonY[] = {0 . 0f , - 4 . 0f , 0 . 0f , 3 . 0f , - 1 . 0f , 3 . 0f };
388
+ float arrowPolygonX[] = {5.0 , 8.5 , 12.0 , 12.0 , 8.5 , 5.0 };
389
+ float arrowPolygonY[] = {9.0 , 6.0 , 9.0 , 12.0 , 9.0 , 12.0 };
390
390
391
391
const float kPolygonSize = 17 ;
392
392
@@ -396,7 +396,7 @@ bool ScrollbarDrawing::PaintScrollbarButton(
396
396
break ;
397
397
case StyleAppearance::ScrollbarbuttonDown:
398
398
for (int32_t i = 0 ; i < arrowNumPoints; i++) {
399
- arrowPolygonY[i] *= - 1 ;
399
+ arrowPolygonY[i] = kPolygonSize - arrowPolygonY[i] ;
400
400
}
401
401
break ;
402
402
case StyleAppearance::ScrollbarbuttonLeft:
@@ -409,15 +409,35 @@ bool ScrollbarDrawing::PaintScrollbarButton(
409
409
case StyleAppearance::ScrollbarbuttonRight:
410
410
for (int32_t i = 0 ; i < arrowNumPoints; i++) {
411
411
float temp = arrowPolygonX[i];
412
- arrowPolygonX[i] = arrowPolygonY[i] * - 1 ;
412
+ arrowPolygonX[i] = kPolygonSize - arrowPolygonY[i];
413
413
arrowPolygonY[i] = temp;
414
414
}
415
415
break ;
416
416
default :
417
417
return false ;
418
418
}
419
- ThemeDrawing::PaintArrow (aDrawTarget, aRect, arrowPolygonX, arrowPolygonY,
420
- kPolygonSize , arrowNumPoints, arrowColor);
419
+
420
+ // Compute the path and draw the scrollbar.
421
+ const float scale = ThemeDrawing::ScaleToFillRect (aRect, kPolygonSize );
422
+ RefPtr<gfx::PathBuilder> builder = aDrawTarget.CreatePathBuilder ();
423
+ gfx::Point start =
424
+ gfx::Point (aRect.X (), aRect.Y ());
425
+ gfx::Point p =
426
+ start + gfx::Point (arrowPolygonX[0 ] * scale, arrowPolygonY[0 ] * scale);
427
+ builder->MoveTo (p);
428
+ for (int32_t i = 1 ; i < arrowNumPoints; i++) {
429
+ p = start +
430
+ gfx::Point (arrowPolygonX[i] * scale, arrowPolygonY[i] * scale);
431
+ builder->LineTo (p);
432
+ }
433
+ RefPtr<gfx::Path> path = builder->Finish ();
434
+
435
+ // The arrow should be drawn without antialiasing.
436
+ DrawOptions arrowOptions (
437
+ 1 .0f , gfx::CompositionOp::OP_OVER, gfx::AntialiasMode::NONE
438
+ );
439
+
440
+ aDrawTarget.Fill (path, gfx::ColorPattern (ToDeviceColor (arrowColor)), arrowOptions);
421
441
return true ;
422
442
}
423
443
0 commit comments