void CRBookmarkMenuItem::Draw( LVDrawBuf & buf, lvRect & rc, CRRectSkinRef skin, CRRectSkinRef valueSkin, bool selected ) { _itemDirty = false; if ( !_bookmark ) { CRMenuItem::Draw( buf, rc, skin, valueSkin, selected ); return; } lvRect itemBorders = skin->getBorderWidths(); skin->draw( buf, rc ); buf.SetTextColor( 0x000000 ); buf.SetBackgroundColor( 0xFFFFFF ); int imgWidth = DrawIcon( buf, rc, itemBorders ); lvRect textRect = rc; textRect.left += imgWidth; lvRect posRect = textRect; lString16 text = _bookmark->getPosText(); if ( !text.empty() ) { posRect.bottom = posRect.top + skin->getFont()->getHeight() + itemBorders.top + itemBorders.bottom; textRect.top = posRect.bottom - itemBorders.bottom; } lString16 postext(_("Page $1 ($2%)")); postext.replaceIntParam(1, _page+1); postext.replaceParam(2, lString16::itoa( _bookmark->getPercent()/100 ) << "." << fmt::decimal(_bookmark->getPercent()%100)); postext << " " << _bookmark->getTitleText(); skin->drawText( buf, posRect, postext ); if ( !text.empty() ) valueSkin->drawText( buf, textRect, text ); }
virtual void draw() { BackgroundFitWindow::draw(); CRRectSkinRef skin = _wm->getSkin()->getWindowSkin( L"#dialog" )->getClientSkin(); LVDrawBuf * buf = _wm->getScreen()->getCanvas().get(); skin->draw( *buf, _rect ); lvRect borders = skin->getBorderWidths(); #ifdef CR_POCKETBOOK lString16 prompt; switch (_selectedIndex) { case 0: prompt = lString16(_("Select next/prev paragraph")); break; case 1: prompt = lString16(_("Select one more paragraph")); break; case 2: prompt = lString16(_("Deselect paragraph")); break; case 3: prompt = lString16(_("Select one more phrase")); break; case 4: prompt = lString16(_("Deselect phrase")); break; } lvRect keyRect = _rect; int promptWidth = skin->measureText(prompt).x; keyRect.right = keyRect.left + promptWidth + borders.left + borders.right; if ( !keyRect.isEmpty() ) { skin->draw( *_wm->getScreen()->getCanvas(), keyRect ); skin->drawText( *_wm->getScreen()->getCanvas(), keyRect, prompt ); } CRToolBarSkinRef tbSkin = _wm->getSkin()->getToolBarSkin( L"#cite-toolbar" ); if (!tbSkin.isNull()) { keyRect.left += (borders.right + _wm->getScreen()->getWidth() * 2/3/*promptWidth*/); keyRect.right = _rect.right; CRButtonListRef buttons = tbSkin->getButtons(); if (!(buttons.isNull() || _itemsCount != buttons->length())) tbSkin->drawToolBar(*_wm->getScreen()->getCanvas(), keyRect, true, _selectedIndex); } #else lString16 prompt(_("Select text")); buf->FillRect( _rect, 0xAAAAAA ); lvRect keyRect = _rect; LVFontRef font = fontMan->GetFont( 20, 600, false, css_ff_sans_serif, lString8("Arial")); //skin->getFont(); // int margin = 4; keyRect.right = _rect.right; if ( !keyRect.isEmpty() ) { skin->draw( *_wm->getScreen()->getCanvas(), keyRect ); skin->drawText( *_wm->getScreen()->getCanvas(), keyRect, prompt ); } #endif }
/* * Class: org_coolreader_crengine_Engine * Method: drawBookCoverInternal * Signature: (Landroid/graphics/Bitmap;[BLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V */ JNIEXPORT void JNICALL Java_org_coolreader_crengine_Engine_drawBookCoverInternal (JNIEnv * _env, jobject _engine, jobject bitmap, jbyteArray _data, jstring _fontFace, jstring _title, jstring _authors, jstring _seriesName, jint seriesNumber, jint bpp) { CRJNIEnv env(_env); //CRLog::debug("drawBookCoverInternal called"); lString8 fontFace = UnicodeToUtf8(env.fromJavaString(_fontFace)); lString16 title = env.fromJavaString(_title); lString16 authors = env.fromJavaString(_authors); lString16 seriesName = env.fromJavaString(_seriesName); LVStreamRef stream; LVImageSourceRef image; if (_data != NULL && _env->GetArrayLength(_data) > 0) { stream = env.jbyteArrayToStream(_data); if (!stream.isNull()) image = LVCreateStreamImageSource(stream); } LVDrawBuf * drawbuf = BitmapAccessorInterface::getInstance()->lock(_env, bitmap); if (drawbuf != NULL) { int factor = 1; int dx = drawbuf->GetWidth(); int dy = drawbuf->GetHeight(); int MIN_WIDTH = 300; int MIN_HEIGHT = 400; if (dx < MIN_WIDTH || dy < MIN_HEIGHT) { if (dx * 2 < MIN_WIDTH || dy * 2 < MIN_HEIGHT) { dx *= 3; dy *= 3; factor = 3; } else { dx *= 2; dy *= 2; factor = 2; } } LVDrawBuf * drawbuf2 = drawbuf; if (factor > 1) drawbuf2 = new LVColorDrawBuf(dx, dy, drawbuf->GetBitsPerPixel()); if (bpp >= 16) { // native color resolution LVDrawBookCover(*drawbuf2, image, fontFace, title, authors, seriesName, seriesNumber); } else { LVGrayDrawBuf grayBuf(drawbuf2->GetWidth(), drawbuf2->GetHeight(), bpp); LVDrawBookCover(grayBuf, image, fontFace, title, authors, seriesName, seriesNumber); grayBuf.DrawTo(drawbuf2, 0, 0, 0, NULL); } if (factor > 1) { drawbuf->DrawRescaled(drawbuf2, 0, 0, drawbuf->GetWidth(), drawbuf->GetHeight(), 0); delete drawbuf2; } //CRLog::trace("getPageImageInternal calling bitmap->unlock"); BitmapAccessorInterface::getInstance()->unlock(_env, bitmap, drawbuf); } else { CRLog::error("bitmap accessor is invalid"); } //CRLog::debug("drawBookCoverInternal finished"); }
void CRRecentBookMenuItem::Draw( LVDrawBuf & buf, lvRect & rc, CRRectSkinRef skin, CRRectSkinRef valueSkin, bool selected ) { if ( !_book ) { CRMenuItem::Draw( buf, rc, skin, valueSkin, selected ); return; } lvRect itemBorders = skin->getBorderWidths(); skin->draw( buf, rc ); buf.SetTextColor( 0x000000 ); buf.SetBackgroundColor( 0xFFFFFF ); int imgWidth = 0; int hh = rc.bottom - rc.top - itemBorders.top - itemBorders.bottom; if ( !_image.isNull() ) { int w = _image->GetWidth(); int h = _image->GetHeight(); buf.Draw( _image, rc.left + hh/2-w/2 + itemBorders.left, rc.top + hh/2 - h/2 + itemBorders.top, w, h ); imgWidth = w + 8; } lvRect textRect = rc; textRect.left += imgWidth; lString16 author = _book->getAuthor(); lString16 title = _book->getTitle(); lString16 series = _book->getSeries(); if ( title.empty() ) title = _book->getFileName(); else if ( !series.empty() ) title << " - " << series; lvRect posRect = textRect; if ( !author.empty() ) { posRect.bottom = posRect.top + skin->getFont()->getHeight() + itemBorders.top + itemBorders.bottom; textRect.top = posRect.bottom - itemBorders.bottom; skin->drawText( buf, posRect, author ); } if ( !title.empty() ) valueSkin->drawText( buf, textRect, title ); }
virtual void draw( HDC hdc ) { LVDrawBuf * drawBuf = getCanvas().get(); drawBuf->DrawTo( hdc, 0, 0, 0, NULL); }
// // FUNCTION: WndProc(HWND, unsigned, WORD, LONG) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); switch (message) { case WM_CREATE: { LVDocImageRef img = text_view->getPageImage( 0 ); img->getDrawBuf(); UpdateScrollBar(hWnd); } break; case WM_ERASEBKGND: break; case WM_VSCROLL: { switch (LOWORD(wParam)) { case SB_TOP: DoCommand( hWnd, DCMD_BEGIN ); break; case SB_BOTTOM: DoCommand( hWnd, DCMD_END ); break; case SB_LINEDOWN: DoCommand( hWnd, DCMD_LINEDOWN, 1 ); break; case SB_LINEUP: DoCommand( hWnd, DCMD_LINEUP, 1 ); break; case SB_PAGEDOWN: DoCommand( hWnd, DCMD_PAGEDOWN, 1 ); break; case SB_PAGEUP: DoCommand( hWnd, DCMD_PAGEUP, 1 ); break; case SB_THUMBPOSITION: DoCommand( hWnd, DCMD_GO_POS, text_view->scrollPosToDocPos( HIWORD(wParam) ) ); break; case SB_THUMBTRACK: DoCommand( hWnd, DCMD_GO_POS, text_view->scrollPosToDocPos( HIWORD(wParam) ) ); break; case SB_ENDSCROLL: DoCommand( hWnd, DCMD_GO_POS, text_view->GetPos() ); break; } } break; case WM_SIZE: { if (wParam!=SIZE_MINIMIZED) { text_view->Resize(LOWORD(lParam), HIWORD(lParam)); UpdateScrollBar( hWnd ); } } break; #ifndef WM_MOUSEWHEEL #define WM_MOUSEWHEEL 0x020A #define WHEEL_DELTA 120 /* Value for rolling one detent */ #endif case WM_MOUSEWHEEL: { int delta = ((lInt16)HIWORD(wParam))/WHEEL_DELTA; if (delta<0) DoCommand( hWnd, DCMD_LINEDOWN, 3 ); else if (delta>0) DoCommand( hWnd, DCMD_LINEUP, 3 ); } break; case WM_KEYDOWN: { switch( wParam ) { case VK_F3: { lString8 fn = OpenFileDialog( hWnd ); if ( !fn.empty() ) { text_view->LoadDocument( fn.c_str() ); text_view->Render(); DoCommand( hWnd, DCMD_BEGIN ); } } break; case VK_F2: Export(hWnd, false); break; case VK_F5: Export(hWnd, true); break; case VK_UP: DoCommand( hWnd, DCMD_LINEUP, 1 ); break; case VK_DOWN: DoCommand( hWnd, DCMD_LINEDOWN, 1 ); break; case VK_NEXT: DoCommand( hWnd, DCMD_PAGEDOWN, 1 ); break; case VK_PRIOR: DoCommand( hWnd, DCMD_PAGEUP, 1 ); break; case VK_HOME: DoCommand( hWnd, DCMD_BEGIN ); break; case VK_END: DoCommand( hWnd, DCMD_END ); break; case VK_ADD: case VK_SUBTRACT: { text_view->ZoomFont( wParam==VK_ADD ? 1 : -1 ); UpdateScrollBar( hWnd ); } break; case VK_TAB: { bool shift = (GetKeyState( VK_SHIFT ) & 0x8000)!=0; if ( shift ) text_view->selectPrevPageLink( true ); else text_view->selectNextPageLink( true ); UpdateScrollBar( hWnd ); } //Update(hWnd); break; case VK_RETURN: text_view->goSelectedLink(); UpdateScrollBar( hWnd ); break; case VK_BACK: text_view->goBack(); UpdateScrollBar( hWnd ); break; } } break; case WM_LBUTTONDOWN: { int xPos = lParam & 0xFFFF; int yPos = (lParam >> 16) & 0xFFFF; ldomXPointer ptr = text_view->getNodeByPoint( lvPoint( xPos, yPos ) ); if ( !ptr.isNull() ) { if ( ptr.getNode()->isText() ) { ldomXRange * wordRange = new ldomXRange(); if ( ldomXRange::getWordRange( *wordRange, ptr ) ) { wordRange->setFlags( 0x10000 ); text_view->getDocument()->getSelections().clear(); text_view->getDocument()->getSelections().add( wordRange ); text_view->updateSelections(); UpdateScrollBar( hWnd ); } else { delete wordRange; } } } } break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; case ID_ZOOM_IN: case ID_ZOOM_OUT: { text_view->ZoomFont( wParam==ID_ZOOM_IN ? 1 : -1 ); UpdateScrollBar( hWnd ); } break; case IDM_FILE_OPEN: { lString8 fn = OpenFileDialog( hWnd ); if ( !fn.empty() ) { text_view->LoadDocument( fn.c_str() ); text_view->Render(); DoCommand( hWnd, DCMD_BEGIN ); } } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); LVDocImageRef img = text_view->getPageImage( 0 ); LVDrawBuf * drawBuf = img->getDrawBuf(); /* ldomXRangeList links; ldomXRangeList & sel = text_view->getDocument()->getSelections(); text_view->getCurrentPageLinks( links ); int linkCount = links.length(); if ( linkCount ) { sel.clear(); sel.add( new ldomXRange(*links[0]) ); for ( int i=0; i<linkCount; i++ ) { lString16 txt = links[i]->getRangeText(); lString8 txt8 = UnicodeToLocal( txt ); const char * s = txt8.c_str(); txt.clear(); } linkCount++; text_view->updateSelections(); } */ drawBuf->DrawTo( hdc, 0, 0, 0, NULL); //COLORREF pal[4]={0xFFFFFF, 0xAAAAAA, 0x555555, 0x000000}; //DrawBuf2DC( hdc, 0, 0, text_view->GetDrawBuf(), pal, 1 ); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }