private void renderNonWorkingDay(int curX, Offset curOffset) { Canvas.Rectangle r = getCanvas() .createRectangle( curX, getLineBottomPosition(), curOffset.getOffsetPixels() - curX, getHeight()); applyRectangleStyle(r, curOffset); }
// This method creates colored vertical stripes on the chart which correspond // to weekend days and holidays. It is not necessary that colored stripe is // a non-working day, though: e.g. we may show weekends but count them as working days. private void renderNonWorkingDayColumns() { List<Offset> defaultOffsets = myInputApi.getAtomUnitOffsets(); int curX = defaultOffsets.get(0).getOffsetPixels(); if (curX > 0) { curX = 0; } for (final Offset offset : defaultOffsets) { int dayMask = offset.getDayMask(); CalendarEvent event = myInputApi.getEvent(offset.getOffsetStart()); final int _curX = curX; Runnable r = new Runnable() { @Override public void run() { // Create a holiday/weekend day bar in the main area renderNonWorkingDay(_curX, offset); // And expand it to the timeline area. Rectangle r = myTimelineCanvas.createRectangle( _curX, getLineTopPosition(), offset.getOffsetPixels() - _curX, getLineBottomPosition() - getLineTopPosition()); applyRectangleStyle(r, offset); } }; if ((dayMask & (DayMask.WEEKEND)) != 0) { // We render weekends always. If there is a colored event its color will be applied // in applyRectangleStyle because getholidaycolor returns non-null r.run(); } else if (event != null) { // It is not a weekends but it is an event // Holidays should always be painted, but neutral and working days should not unless // they have a custom color if (event.getType() == CalendarEvent.Type.HOLIDAY || event.getColor() != null) { r.run(); } } curX = offset.getOffsetPixels(); } }
private void renderLine( Date date, String style, int marginPx, OffsetLookup.ComparatorBy<Date> dateComparator) { final int topUnitHeight = myInputApi.getTopLineHeight(); OffsetLookup lookup = new OffsetLookup(); int todayOffsetIdx = lookup.lookupOffsetBy(date, myInputApi.getAtomUnitOffsets(), dateComparator); if (todayOffsetIdx < 0) { todayOffsetIdx = -todayOffsetIdx - 1; } Offset yesterdayOffset = todayOffsetIdx == 0 ? null : myInputApi.getAtomUnitOffsets().get(todayOffsetIdx - 1); if (yesterdayOffset == null) { return; } int yesterdayEndPixel = yesterdayOffset.getOffsetPixels(); Line line = getCanvas() .createLine( yesterdayEndPixel + marginPx, topUnitHeight * 2, yesterdayEndPixel + marginPx, getHeight() + topUnitHeight * 2); line.setStyle(style); }