void BitmapView::Draw(BRect updateRect) { SetDrawingMode(B_OP_ALPHA); DrawBitmap(m_bitmap); }
void DataView::DrawSelectionFrame(view_focus which) { if (fFileSize == 0) return; bool drawBlock = false; bool drawLastLine = false; BRect block, lastLine; int32 spacing = 0; if (which == kAsciiFocus) spacing++; // draw first line int32 start = fStart % kBlockSize; int32 first = (fStart / kBlockSize) * kBlockSize; int32 end = fEnd; if (end > first + (int32)kBlockSize - 1) end = first + kBlockSize - 1; BRect firstLine = SelectionFrame(which, first + start, end); firstLine.right += spacing; first += kBlockSize; // draw block (and last line) if necessary end = fEnd % kBlockSize; int32 last = (fEnd / kBlockSize) * kBlockSize; if (last >= first) { if (end == kBlockSize - 1) last += kBlockSize; if (last > first) { block = SelectionFrame(which, first, last - 1); block.right += spacing; drawBlock = true; } if (end != kBlockSize - 1) { lastLine = SelectionFrame(which, last, last + end); lastLine.right += spacing; drawLastLine = true; } } SetDrawingMode(B_OP_INVERT); BeginLineArray(8); // +******* // | * // +------+ const rgb_color color = {0, 0, 0}; float bottom; if (drawBlock) bottom = block.bottom; else bottom = firstLine.bottom; AddLine(BPoint(firstLine.left + 1, firstLine.top), firstLine.RightTop(), color); AddLine(BPoint(firstLine.right, firstLine.top + 1), BPoint(firstLine.right, bottom), color); // *-------+ // * | // ********* BRect rect; if (start == 0 || (!drawBlock && !drawLastLine)) rect = firstLine; else if (drawBlock) rect = block; else rect = lastLine; if (drawBlock) rect.bottom = block.bottom; if (drawLastLine) { rect.bottom = lastLine.bottom; rect.right = lastLine.right; } rect.bottom++; AddLine(rect.LeftTop(), rect.LeftBottom(), color); AddLine(BPoint(rect.left + 1, rect.bottom), rect.RightBottom(), color); // *--------+ // * | // +**** | // | | if (start && (drawLastLine || drawBlock)) { AddLine(firstLine.LeftTop(), firstLine.LeftBottom(), color); float right = firstLine.left; if (!drawBlock && right > lastLine.right) right = lastLine.right; AddLine(BPoint(rect.left + 1, rect.top), BPoint(right, rect.top), color); } // | | // | ***** // | * // +--------+ if (drawLastLine) { AddLine(lastLine.RightBottom(), BPoint(lastLine.right, lastLine.top + 1), color); if (!drawBlock && lastLine.right <= firstLine.left) lastLine.right = firstLine.left + (lastLine.right < firstLine.left ? 0 : 1); AddLine(BPoint(lastLine.right, lastLine.top), BPoint(firstLine.right, lastLine.top), color); } EndLineArray(); SetDrawingMode(B_OP_COPY); }