void ListBox::draw(Graphics* graphics) { graphics->setColor(getBackgroundColor()); graphics->fillRectangle(Rectangle(0, 0, getWidth(), getHeight())); if (mListModel == NULL) { return; } graphics->setColor(getForegroundColor()); graphics->setFont(getFont()); int i, fontHeight; int y = 0; fontHeight = getFont()->getHeight(); /** * @todo Check cliprects so we do not have to iterate over elements in the list model */ for (i = 0; i < mListModel->getNumberOfElements(); ++i) { if (i == mSelected) { graphics->setColor(getSelectionColor()); graphics->fillRectangle(Rectangle(0, y, getWidth(), fontHeight)); graphics->setColor(getForegroundColor()); } graphics->drawText(mListModel->getElementAt(i), 1, y); y += fontHeight; } }
void DropDown::draw(Graphics* graphics) { int h; if (mDroppedDown) { h = mOldH; } else { h = getHeight(); } int alpha = getBaseColor().a; Color faceColor = getBaseColor(); faceColor.a = alpha; Color highlightColor = faceColor + 0x303030; highlightColor.a = alpha; Color shadowColor = faceColor - 0x303030; shadowColor.a = alpha; graphics->setColor(getBackgroundColor()); graphics->fillRectangle(Rectangle(0, 0, getWidth(), h)); graphics->setColor(getForegroundColor()); graphics->setFont(getFont()); if (isFocused()) { graphics->setColor(getSelectionColor()); graphics->fillRectangle(Rectangle(0, 0, getWidth() - h, h)); graphics->setColor(getForegroundColor()); } if (mListBox->getListModel() && mListBox->getSelected() >= 0) { graphics->drawText(mListBox->getListModel()->getElementAt(mListBox->getSelected()), 1, 0); } drawButton(graphics); if (mDroppedDown) { drawChildren(graphics); // Draw two lines separating the ListBox with se selected // element view. graphics->setColor(highlightColor); graphics->drawLine(0, h, getWidth(), h); graphics->setColor(shadowColor); graphics->drawLine(0, h + 1,getWidth(),h + 1); } }
void TextField::draw(Graphics* graphics) { Color faceColor = getBaseColor(); Color highlightColor, shadowColor; int alpha = getBaseColor().a; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; // Draw a border. graphics->setColor(shadowColor); graphics->drawLine(0, 0, getWidth() - 1, 0); graphics->drawLine(0, 1, 0, getHeight() - 2); graphics->setColor(highlightColor); graphics->drawLine(getWidth() - 1, 1, getWidth() - 1, getHeight() - 1); graphics->drawLine(0, getHeight() - 1, getWidth() - 1, getHeight() - 1); // Push a clip area so the other drawings don't need to worry // about the border. graphics->pushClipArea(Rectangle(1, 1, getWidth() - 2, getHeight() - 2)); graphics->setColor(getBackgroundColor()); graphics->fillRectangle(Rectangle(0, 0, getWidth(), getHeight())); if (isFocused()) { graphics->setColor(getSelectionColor()); graphics->drawRectangle(Rectangle(0, 0, getWidth() - 2, getHeight() - 2)); graphics->drawRectangle(Rectangle(1, 1, getWidth() - 4, getHeight() - 4)); } if (isFocused() && isEditable()) { drawCaret(graphics, mText->getCaretX(getFont()) - mXScroll); } graphics->setColor(getForegroundColor()); graphics->setFont(getFont()); const Rectangle& dim = mText->getCaretDimension(getFont()); if (mText->getNumberOfRows() != 0) graphics->drawText(mText->getRow(0), 1 - mXScroll, 1); graphics->popClipArea(); }
void TextField::draw(Graphics* graphics) { Color faceColor = getBaseColor(); Color highlightColor, shadowColor; int alpha = getBaseColor().a; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; // Draw a border. graphics->setColor(shadowColor); graphics->drawLine(0, 0, getWidth() - 1, 0); graphics->drawLine(0, 1, 0, getHeight() - 2); graphics->setColor(highlightColor); graphics->drawLine(getWidth() - 1, 1, getWidth() - 1, getHeight() - 1); graphics->drawLine(0, getHeight() - 1, getWidth() - 1, getHeight() - 1); // Push a clip area so the other drawings don't need to worry // about the border. graphics->pushClipArea(Rectangle(1, 1, getWidth() - 2, getHeight() - 2)); graphics->setColor(getBackgroundColor()); graphics->fillRectangle(Rectangle(0, 0, getWidth(), getHeight())); if (isFocused()) { graphics->setColor(getSelectionColor()); graphics->drawRectangle(Rectangle(0, 0, getWidth() - 2, getHeight() - 2)); graphics->drawRectangle(Rectangle(1, 1, getWidth() - 4, getHeight() - 4)); } if (isFocused()) { drawCaret(graphics, getFont()->getWidth(mText.substr(0, mCaretPosition)) - mXScroll); } graphics->setColor(getForegroundColor()); graphics->setFont(getFont()); graphics->drawText(mText.c_str(), 3 - mXScroll, 1); graphics->popClipArea(); }
void DropDown::draw(Graphics* graphics) { int h; if (mDroppedDown) { h = mFoldedUpHeight; } else { h = getHeight(); } Color faceColor = getBaseColor(); Color highlightColor, shadowColor; int alpha = getBaseColor().a; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; // Draw a border. graphics->setColor(shadowColor); graphics->drawLine(0, 0, getWidth() - 1, 0); graphics->drawLine(0, 1, 0, h - 2); graphics->setColor(highlightColor); graphics->drawLine(getWidth() - 1, 1, getWidth() - 1, h - 1); graphics->drawLine(0, h - 1, getWidth() - 1, h - 1); // Push a clip area so the other drawings don't need to worry // about the border. graphics->pushClipArea(Rectangle(1, 1, getWidth() - 2, h - 2)); const Rectangle currentClipArea = graphics->getCurrentClipArea(); graphics->setColor(getBackgroundColor()); graphics->fillRectangle(Rectangle(0, 0, currentClipArea.width, currentClipArea.height)); if (isFocused()) { graphics->setColor(getSelectionColor()); graphics->fillRectangle(Rectangle(0, 0, currentClipArea.width - currentClipArea.height, currentClipArea.height)); graphics->setColor(getForegroundColor()); } if (mListBox->getListModel() && mListBox->getSelected() >= 0) { graphics->setColor(getForegroundColor()); graphics->setFont(getFont()); graphics->drawText(mListBox->getListModel()->getElementAt(mListBox->getSelected()), 1, 0); } // Push a clip area before drawing the button. graphics->pushClipArea(Rectangle(currentClipArea.width - currentClipArea.height, 0, currentClipArea.height, currentClipArea.height)); drawButton(graphics); graphics->popClipArea(); graphics->popClipArea(); if (mDroppedDown) { // Draw a border around the children. graphics->setColor(shadowColor); graphics->drawRectangle(Rectangle(0, mFoldedUpHeight, getWidth(), getHeight() - mFoldedUpHeight)); drawChildren(graphics); } }
void UaeListBox::draw(Graphics* graphics) { graphics->setColor(getBackgroundColor()); graphics->fillRectangle(Rectangle(0, 0, getWidth(), getHeight())); if (mListModel == NULL) { return; } graphics->setColor(getForegroundColor()); graphics->setFont(getFont()); // Check the current clip area so we don't draw unnecessary items // that are not visible. const ClipRectangle currentClipArea = graphics->getCurrentClipArea(); int rowHeight = getRowHeight(); // Calculate the number of rows to draw by checking the clip area. // The addition of two makes covers a partial visible row at the top // and a partial visible row at the bottom. int numberOfRows = currentClipArea.height / rowHeight + 2; if (numberOfRows > mListModel->getNumberOfElements()) { numberOfRows = mListModel->getNumberOfElements(); } // Calculate which row to start drawing. If the list box // has a negative y coordinate value we should check if // we should drop rows in the begining of the list as // they might not be visible. A negative y value is very // common if the list box for instance resides in a scroll // area and the user has scrolled the list box downwards. int startRow; if (getY() < 0) { startRow = -1 * (getY() / rowHeight); } else { startRow = 0; } int i; // The y coordinate where we start to draw the text is // simply the y coordinate multiplied with the font height. int y = rowHeight * startRow; for (i = startRow; i < startRow + numberOfRows; ++i) { if (i == mSelected) { if(isFocused()) graphics->setColor(getSelectionColor()); else graphics->setColor(0xd0d0d0); graphics->fillRectangle(Rectangle(0, y, getWidth(), rowHeight)); graphics->setColor(getForegroundColor()); } // If the row height is greater than the font height we // draw the text with a center vertical alignment. if (rowHeight > getFont()->getHeight()) { graphics->drawText(mListModel->getElementAt(i), 1, y + rowHeight / 2 - getFont()->getHeight() / 2); } else { graphics->drawText(mListModel->getElementAt(i), 1, y); } y += rowHeight; } }
bool PageView::paintPage(cairo_t * cr, GdkRectangle * rect) { XOJ_CHECK_TYPE(PageView); double zoom = xournal->getZoom(); g_mutex_lock(this->drawingMutex); int dispWidth = getDisplayWidth(); int dispHeight = getDisplayHeight(); if (this->crBuffer == NULL) { this->crBuffer = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, dispWidth, dispHeight); cairo_t * cr2 = cairo_create(this->crBuffer); cairo_set_source_rgb(cr2, 1, 1, 1); cairo_rectangle(cr2, 0, 0, dispWidth, dispHeight); cairo_fill(cr2); cairo_scale(cr2, zoom, zoom); const char * txtLoading = _("Loading..."); cairo_text_extents_t ex; cairo_set_source_rgb(cr2, 0.5, 0.5, 0.5); cairo_select_font_face(cr2, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size(cr2, 32.0); cairo_text_extents(cr2, txtLoading, &ex); cairo_move_to(cr2, (page.getWidth() - ex.width) / 2 - ex.x_bearing, (page.getHeight() - ex.height) / 2 - ex.y_bearing); cairo_show_text(cr2, txtLoading); cairo_destroy(cr2); rerenderPage(); } cairo_save(cr); double width = cairo_image_surface_get_width(this->crBuffer); if (width != dispWidth) { double scale = ((double) dispWidth) / ((double) width); // Scale current image to fit the zoom level cairo_scale(cr, scale, scale); cairo_pattern_set_filter(cairo_get_source(cr), CAIRO_FILTER_FAST); cairo_set_source_surface(cr, this->crBuffer, 0, 0); rerenderPage(); rect = NULL; } else { cairo_set_source_surface(cr, this->crBuffer, 0, 0); } if (rect) { cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); cairo_fill(cr); #ifdef SHOW_PAINT_BOUNDS cairo_set_source_rgb(cr, 1.0, 0.5, 1.0); cairo_set_line_width(cr, 1. / zoom); cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height); cairo_stroke(cr); #endif } else { cairo_paint(cr); } cairo_restore(cr); // don't paint this with scale, because it needs a 1:1 zoom if (this->verticalSpace) { this->verticalSpace->paint(cr, rect, zoom); } cairo_scale(cr, zoom, zoom); if (this->textEditor) { this->textEditor->paint(cr, rect, zoom); } if (this->selection) { this->selection->paint(cr, rect, zoom); } if (this->search) { this->search->paint(cr, rect, zoom, getSelectionColor()); } this->inputHandler->draw(cr, zoom); g_mutex_unlock(this->drawingMutex); return true; }