Beispiel #1
0
void Printer::flowRender()
{
	// add extra padding at the bottom to pages with height not divisible by view port
	int paddingBottom = pageSize.height() - (webView->page()->mainFrame()->contentsSize().height() % pageSize.height());
	QString styleString = QString::fromUtf8("padding-bottom: ") + QString::number(paddingBottom) + "px;";
	webView->page()->mainFrame()->findFirstElement("body").setAttribute("style", styleString);

	// render the Qwebview
	QPainter painter;
	QRect viewPort(0, 0, 0, 0);
	painter.begin(paintDevice);
	painter.setRenderHint(QPainter::Antialiasing);
	painter.setRenderHint(QPainter::SmoothPixmapTransform);

	// get all references to dontbreak divs
	int start = 0, end = 0;
	int fullPageResolution = webView->page()->mainFrame()->contentsSize().height();
	QWebElementCollection dontbreak = webView->page()->mainFrame()->findAllElements(".dontbreak");
	foreach (QWebElement dontbreakElement, dontbreak) {
		if ((dontbreakElement.geometry().y() + dontbreakElement.geometry().height()) - start < pageSize.height()) {
			// One more element can be placed
			end = dontbreakElement.geometry().y() + dontbreakElement.geometry().height();
		} else {
			// fill the page with background color
			QRect fullPage(0, 0, pageSize.width(), pageSize.height());
			QBrush fillBrush(templateOptions->color_palette.color1);
			painter.fillRect(fullPage, fillBrush);
			QRegion reigon(0, 0, pageSize.width(), end - start);
			viewPort.setRect(0, start, pageSize.width(), end - start);

			// render the base Html template
			webView->page()->mainFrame()->render(&painter, QWebFrame::ContentsLayer, reigon);

			// scroll the webview to the next page
			webView->page()->mainFrame()->scroll(0, dontbreakElement.geometry().y() - start);

			// rendering progress is 4/5 of total work
			emit(progessUpdated((end * 80.0 / fullPageResolution) + done));

			// add new pages only in print mode, while previewing we don't add new pages
			if (printMode == Printer::PRINT)
				static_cast<QPrinter*>(paintDevice)->newPage();
			else {
				painter.end();
				return;
			}
			start = dontbreakElement.geometry().y();
		}
	}
	// render the remianing page
	QRect fullPage(0, 0, pageSize.width(), pageSize.height());
	QBrush fillBrush(templateOptions->color_palette.color1);
	painter.fillRect(fullPage, fillBrush);
	QRegion reigon(0, 0, pageSize.width(), end - start);
	webView->page()->mainFrame()->render(&painter, QWebFrame::ContentsLayer, reigon);

	painter.end();
}
Beispiel #2
0
QPointF PageItem::bookmarkPosition(const QString &bookmark) const
{
    Okular::DocumentViewport viewPort(KUrl(bookmark).htmlRef());

    if (viewPort.pageNumber != m_viewPort.pageNumber) {
        return QPointF(-1, -1);
    }

    return QPointF(qMax((qreal)0, width() - m_flickable.data()->width()) * viewPort.rePos.normalizedX,
                   qMax((qreal)0, height() - m_flickable.data()->height()) * viewPort.rePos.normalizedY);
}
Beispiel #3
0
void PageItem::goToBookmark(const QString &bookmark)
{
    Okular::DocumentViewport viewPort(KUrl(bookmark).htmlRef());
    setPageNumber(viewPort.pageNumber);

    //Are we in a flickable?
    if (m_flickable) {
        //normalizedX is a proportion, so contentX will be the difference between document and viewport times normalizedX
        m_flickable.data()->setProperty("contentX", qMax((qreal)0, width() - m_flickable.data()->width()) * viewPort.rePos.normalizedX);

        m_flickable.data()->setProperty("contentY", qMax((qreal)0, height() - m_flickable.data()->height()) * viewPort.rePos.normalizedY);
    }
}
Beispiel #4
0
void PageItem::setBookmarkAtPos(qreal x, qreal y)
{
    Okular::DocumentViewport viewPort(m_viewPort);
    viewPort.rePos.normalizedX = x;
    viewPort.rePos.normalizedY = y;

    m_documentItem.data()->document()->bookmarkManager()->addBookmark(viewPort);

    if (!m_bookmarked) {
        m_bookmarked = true;
        emit bookmarkedChanged();
    }

    emit bookmarksChanged();
}
Beispiel #5
0
void PageItem::removeBookmarkAtPos(qreal x, qreal y)
{
    Okular::DocumentViewport viewPort(m_viewPort);
    viewPort.rePos.enabled = true;
    viewPort.rePos.normalizedX = x;
    viewPort.rePos.normalizedY = y;

    m_documentItem.data()->document()->bookmarkManager()->addBookmark(viewPort);

    if (m_bookmarked && m_documentItem.data()->document()->bookmarkManager()->bookmarks(m_viewPort.pageNumber).count() == 0) {
        m_bookmarked = false;
        emit bookmarkedChanged();
    }

    emit bookmarksChanged();
}
sf::View CroppingViewFactory::createView(const sf::RenderTarget& renderTarget,
										 const sf::Vector2f& position,
										 const sf::Vector2f& size) const
{
	sf::View view({position.x, position.y, size.x, size.y});

	sf::FloatRect viewPort({
										position.x / renderTarget.getSize().x,
										position.y / renderTarget.getSize().y,
										size.x / renderTarget.getSize().x,
										size.y / renderTarget.getSize().y
									});

	view.setViewport(viewPort);

	return view;
}
Beispiel #7
0
void CWinRenderer::RenderPS(CD3DTexture* target)
{
  if (m_bUseHQScaler)
    target = &m_IntermediateTarget;

  CD3D11_VIEWPORT viewPort(0.0f, 0.0f, static_cast<float>(target->GetWidth()), static_cast<float>(target->GetHeight()));

  if (m_bUseHQScaler)
    DX::Windowing()->ResetScissors();

  // reset view port
  DX::DeviceResources::Get()->GetD3DContext()->RSSetViewports(1, &viewPort);

  // select destination rectangle
  CPoint destPoints[4];
  if (m_renderOrientation)
  {
    for (size_t i = 0; i < 4; i++)
      destPoints[i] = m_rotatedDestCoords[i];
  }
  else
  {
    CRect destRect = m_bUseHQScaler ? m_sourceRect : CServiceBroker::GetWinSystem()->GetGfxContext().StereoCorrection(m_destRect);
    destPoints[0] = { destRect.x1, destRect.y1 };
    destPoints[1] = { destRect.x2, destRect.y1 };
    destPoints[2] = { destRect.x2, destRect.y2 };
    destPoints[3] = { destRect.x1, destRect.y2 };
  }

  CRenderBuffer& buf = m_renderBuffers[m_iYV12RenderBuffer];

  // set params
  m_outputShader->SetDisplayMetadata(buf.hasDisplayMetadata, buf.displayMetadata, buf.hasLightMetadata, buf.lightMetadata);
  m_outputShader->SetToneMapParam(m_videoSettings.m_ToneMapParam);

  m_colorShader->SetParams(m_videoSettings.m_Contrast, m_videoSettings.m_Brightness, DX::Windowing()->UseLimitedColor());
  m_colorShader->SetColParams(buf.color_space, buf.bits, !buf.full_range, buf.texBits);

  // render video frame
  m_colorShader->Render(m_sourceRect, destPoints, &buf, target);
  // Restore our view port.
  DX::Windowing()->RestoreViewPort();
}
Beispiel #8
0
void CWinRenderer::RenderPS(CD3DTexture* target)
{
  if (m_bUseHQScaler)
    target = &m_IntermediateTarget;

  CD3D11_VIEWPORT viewPort(0.0f, 0.0f, static_cast<float>(target->GetWidth()), static_cast<float>(target->GetHeight()));

  if (m_bUseHQScaler)
    DX::Windowing().ResetScissors();

  // reset view port
  DX::DeviceResources::Get()->GetD3DContext()->RSSetViewports(1, &viewPort);

  // select destination rectangle
  CPoint destPoints[4];
  if (m_renderOrientation)
  {
    for (size_t i = 0; i < 4; i++)
      destPoints[i] = m_rotatedDestCoords[i];
  }
  else
  {
    CRect destRect = m_bUseHQScaler ? m_sourceRect : g_graphicsContext.StereoCorrection(m_destRect);
    destPoints[0] = { destRect.x1, destRect.y1 };
    destPoints[1] = { destRect.x2, destRect.y1 };
    destPoints[2] = { destRect.x2, destRect.y2 };
    destPoints[3] = { destRect.x1, destRect.y2 };
  }

  // render video frame
  m_colorShader->Render(m_sourceRect, destPoints,
                        m_videoSettings.m_Contrast,
                        m_videoSettings.m_Brightness,
                        &m_renderBuffers[m_iYV12RenderBuffer], target);
  // Restore our view port.
  DX::Windowing().RestoreViewPort();
}
Beispiel #9
0
void Printer::render(int Pages = 0)
{
	// keep original preferences
	QPointer<ProfileWidget2> profile = MainWindow::instance()->graphics();
	int profileFrameStyle = profile->frameStyle();
	int animationOriginal = prefs.animation_speed;
	double fontScale = profile->getFontPrintScale();
	double printFontScale = 1.0;

	// apply printing settings to profile
	profile->setFrameStyle(QFrame::NoFrame);
	profile->setPrintMode(true, !printOptions->color_selected);
	profile->setToolTipVisibile(false);
	prefs.animation_speed = 0;

	// render the Qwebview
	QPainter painter;
	QRect viewPort(0, 0, pageSize.width(), pageSize.height());
	painter.begin(paintDevice);
	painter.setRenderHint(QPainter::Antialiasing);
	painter.setRenderHint(QPainter::SmoothPixmapTransform);

	// get all refereces to diveprofile class in the Html template
	QWebElementCollection collection = webView->page()->mainFrame()->findAllElements(".diveprofile");

	QSize originalSize = profile->size();
	if (collection.count() > 0) {
		printFontScale = (double)collection.at(0).geometry().size().height() / (double)profile->size().height();
		profile->resize(collection.at(0).geometry().size());
	}
	profile->setFontPrintScale(printFontScale);

	int elemNo = 0;
	for (int i = 0; i < Pages; i++) {
		// render the base Html template
		webView->page()->mainFrame()->render(&painter, QWebFrame::ContentsLayer);

		// render all the dive profiles in the current page
		while (elemNo < collection.count() && collection.at(elemNo).geometry().y() < viewPort.y() + viewPort.height()) {
			// dive id field should be dive_{{dive_no}} se we remove the first 5 characters
			QString diveIdString = collection.at(elemNo).attribute("id");
			int diveId = diveIdString.remove(0, 5).toInt(0, 10);
			putProfileImage(collection.at(elemNo).geometry(), viewPort, &painter, get_dive_by_uniq_id(diveId), profile);
			elemNo++;
		}

		// scroll the webview to the next page
		webView->page()->mainFrame()->scroll(0, pageSize.height());
		viewPort.adjust(0, pageSize.height(), 0, pageSize.height());

		// rendering progress is 4/5 of total work
		emit(progessUpdated((i * 80.0 / Pages) + done));
		if (i < Pages - 1 && printMode == Printer::PRINT)
			static_cast<QPrinter*>(paintDevice)->newPage();
	}
	painter.end();

	// return profle settings
	profile->setFrameStyle(profileFrameStyle);
	profile->setPrintMode(false);
	profile->setFontPrintScale(fontScale);
	profile->setToolTipVisibile(true);
	profile->resize(originalSize);
	prefs.animation_speed = animationOriginal;

	//replot the dive after returning the settings
	profile->plotDive(0, true);
}
Beispiel #10
0
int main(void) {

    sf::ContextSettings settings;
    settings.depthBits = 8;
    settings.stencilBits = 0;
    settings.antialiasingLevel = 0;
    settings.majorVersion = 3;
    settings.minorVersion = 3;

    sf::Window window(sf::VideoMode(1440, 900), "A Game", sf::Style::Default, settings);
    window.setFramerateLimit(60);

    glewInit();
    glEnable(GL_DEPTH_TEST);

    EventQueue eventQueue;
    QuadTree quadTree(eventQueue, 2048);
    Renderer renderer({32, 32, 32, 32, 2048}, 512, 1440, 900);

    sf::Image img1;
    img1.loadFromFile("res/textures/test.png");
    Texture tex1;
    tex1.loadFromImage(img1);
    sf::Image img2;
    img2.loadFromFile("res/textures/test2.png");
    Texture tex2;
    tex2.loadFromImage(img2);

    std::vector<Platform> platforms_;
    std::vector<std::unique_ptr<GameObject>> gameObjects_;

    for (auto i=0u; i<10; ++i) {
        platforms_.emplace_back(quadTree, renderer,
                                Vector2Glf(i*32.0f, 0.0f), Vector2Glf(32.0f, 32.0f),
                                tex1, Vector2Glf(0.25f, 0.25f), 4);
    }

    sf::Image charImg;
    charImg.loadFromFile("res/textures/testChar.png");
    Texture charTex;
    charTex.loadFromImage(charImg);

    gameObjects_.push_back(make_unique<Character>(quadTree, renderer,
                           Vector2Glf(64.0f, 0.0f), Vector2Glf(64.0f, 64.0f),
                           charTex, Vector2Glf(1.0f, 1.0f), 4));

    /*for (auto j=0; j<4; ++j) {
        for (auto i=0; i<30; ++i) {
            Sprite& spr = renderer.getSpriteReference();
            spr.setTexture(&tex2);
            spr.setPosition({ 128.0f*i, 128.0f*j - 256.0f });
            spr.setDepth(0.5f);
        }
    }*/

    /*for (auto i=0; i<10; ++i) {
        Sprite& spr = renderer.getSpriteReference();
        spr.setTexture(&tex1);
        spr.setType(Sprite::TYPE_SOLID);
        spr.setScale({ 0.5f, 0.5f });
        spr.setPosition({ 128.0f*i, 0.0f });
    }*/

    ParallaxBackground bg(renderer);
    bg.addLayer("res/textures/cityBackground4.png", 0, 0.2f, { 1000.0f, 0.0f });
    bg.addLayer("res/textures/cityBackground3.png", 1, 0.3f, { 1000.0f, -600.0f });
    bg.addLayer("res/textures/cityBackground2.png", 2, 0.6f, { 6000.0f, 40.0f });
    bg.addLayer("res/textures/cityBackground1.png", 3, 0.75f, { 4500.0f, 50.0f });

    Shader shader("shaders/VS_Sprite.glsl", "shaders/FS_Sprite.glsl");

    ViewPort viewPort(1440.0f, 900.0f, Vector2Glf(0.0f, 0.0f));
    viewPort.setPosition({ 512.0f, 0.0f });

    float t = 0.0f;

    // The main loop - ends as soon as the window is closed
    while (window.isOpen()) {
        // Event processing
        sf::Event event;
        while (window.pollEvent(event)) {
            // Request for closing the window
            if (event.type == sf::Event::Closed)
                window.close();
        }
        // Activate the window for OpenGL rendering
        glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

        /*for (auto& o : gameObjects_) {
            o->update();
        }*/

        viewPort.setPosition({2160.0f+1440.0f*cos(t*PI*0.1 + PI), 0.0f});
        bg.update(viewPort);

        renderer.render(viewPort, shader, t);

        window.display();

        t += 1.0f/60.0f;
    }

    return 0;
}
int main(int argc, char* argv[])
{
	START_EASYLOGGINGPP(argc, argv);

	Py_Initialize();
	PyRun_SimpleString("print pow(2, 3)");
	Py_Finalize();

	el::Configurations conf("config/logging.cfg");
	el::Loggers::reconfigureAllLoggers(conf);

	startLog();

	LOG(INFO) << "Initialising SFML Render Window with a resolution of " << windowWidth << "x" << windowHeight;

	LOG(INFO) << "IGNORE OPENGL MISSING EXTENSION!";

	sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight), windowTitle, sf::Style::Close, settings);

	window.setVerticalSyncEnabled(false); // vsync messes with updates

	sf::View viewPort(sf::Vector2f(windowWidth / 2, windowHeight / 2), sf::Vector2f(windowWidth, windowHeight));

	// Initialise physics
	//b2Vec2 gravity(0.0f, 0.0f);
	//b2World world(gravity);

	// scripting init here!
	/*script::FalconEngine scripting;

	// load resource paths
	try
	{
		scripting.embed("resources.fal");
	}
	catch (Falcon::Error *err)
	{
		Falcon::AutoCString edesc(err->toString());
		LOG(FATAL) << edesc.c_str() << std::endl;
		err->decref();
		return 1;
	}

	try
	{
		scripting.embed("test.fal");
	}
	catch (Falcon::Error *err)
	{
		Falcon::AutoCString edesc(err->toString());
		LOG(FATAL) << edesc.c_str() << std::endl;
		err->decref();
		return 1;
	}*/
	

	texture.loadFromFile("data/abstract liquify thing.png");
	sprite.setTexture(texture);

	int testMusic = loadMusic("data/audio/music/Three_Days_Grace_-_The_High_Road_(mp3.pm).ogg");
	int channel2 = loadMusic("data/audio/music/Kygo - Firestone (feat. Conrad).ogg");
	int channel3 = loadMusic("data/audio/music/Seether - Broken (Featuring Amy Lee).ogg");
	int channel4 = loadMusic("data/audio/music/New Found Glory - This Disaster.ogg");
	int channel5 = loadMusic("data/audio/music/Story of the Year - Until the Day I Die.ogg");

	Player player(sf::Vector2f(windowWidth / 2, windowHeight / 2));
	
	FriendlyTrader test(sf::Vector2f(64, 128));

	sf::Clock clock;
	sf::Clock seconds;

	while (window.isOpen())
	{
		sf::Time elapsed = clock.getElapsedTime();

		bool fadeCompleted;

		if (elapsed.asMicroseconds() >= updateRate.asMicroseconds())
		{
			clock.restart();
			update(&window, &player, &viewPort);
			if (!getFadeCompleted())
			{
				fadeCompleted = true;
				//windowFade = fadeOut(&window);
			}
			test.Update();
		}
		elapsed = seconds.getElapsedTime();
		if (elapsed.asSeconds() >= 1)
		{
			UPS = tick;
			FPS = frame;

//#ifdef _DEBUG
			char windowTitle[128] = "SFML and Box2D";
			char buffer[8];
			strcat_s(windowTitle, " | ");
			_itoa_s(UPS, buffer, 10);
			strcat_s(windowTitle, "UPS: ");
			strcat_s(windowTitle, buffer);
			strcat_s(windowTitle, ", FPS: ");
			_itoa_s(FPS, buffer, 10);
			strcat_s(windowTitle, buffer);
			window.setTitle(windowTitle);
//#endif
			
			//std::cout << "UPS: " << UPS << ", FPS: " << FPS << std::endl;
			tick = 0;
			frame = 0;
			seconds.restart();
		}

		render(&window, viewPort);
	}

	LOG(INFO) << "Unloading SFML";
	
	sf::sleep(sf::seconds(0.5));
	//LogWhiteSpace();
	endLog();

	std::cout << std::endl;

	return 0;
}
Beispiel #12
0
void RenderManager::prepareBackground() {
	_backgroundDirtyRect.clip(_backgroundWidth, _backgroundHeight);
	RenderTable::RenderState state = _renderTable.getRenderState();

	if (state == RenderTable::PANORAMA) {
		// Calculate the visible portion of the background
		Common::Rect viewPort(_workingWidth, _workingHeight);
		viewPort.translate(-(_screenCenterX - _backgroundOffset), 0);
		Common::Rect drawRect = _backgroundDirtyRect;
		drawRect.clip(viewPort);

		// Render the visible portion
		if (!drawRect.isEmpty()) {
			blitSurfaceToSurface(_currentBackgroundImage, drawRect, _backgroundSurface, _screenCenterX - _backgroundOffset + drawRect.left, drawRect.top);
		}

		// Mark the dirty portion of the surface
		_backgroundSurfaceDirtyRect = _backgroundDirtyRect;
		_backgroundSurfaceDirtyRect.translate(_screenCenterX - _backgroundOffset, 0);

		// Panorama mode allows the user to spin in circles. Therefore, we need to render 
		// the portion of the image that wrapped to the other side of the screen
		if (_backgroundOffset < _screenCenterX) {
			viewPort.moveTo(-(_screenCenterX - (_backgroundOffset + _backgroundWidth)), 0);
			drawRect = _backgroundDirtyRect;
			drawRect.clip(viewPort);

			if (!drawRect.isEmpty())
				blitSurfaceToSurface(_currentBackgroundImage, drawRect, _backgroundSurface, _screenCenterX - (_backgroundOffset + _backgroundWidth) + drawRect.left, drawRect.top);

			Common::Rect tmp = _backgroundDirtyRect;
			tmp.translate(_screenCenterX - (_backgroundOffset + _backgroundWidth), 0);
			if (!tmp.isEmpty())
				_backgroundSurfaceDirtyRect.extend(tmp);

		} else if (_backgroundWidth - _backgroundOffset < _screenCenterX) {
			viewPort.moveTo(-(_screenCenterX + _backgroundWidth - _backgroundOffset), 0);
			drawRect = _backgroundDirtyRect;
			drawRect.clip(viewPort);

			if (!drawRect.isEmpty())
				blitSurfaceToSurface(_currentBackgroundImage, drawRect, _backgroundSurface, _screenCenterX + _backgroundWidth - _backgroundOffset + drawRect.left, drawRect.top);

			Common::Rect tmp = _backgroundDirtyRect;
			tmp.translate(_screenCenterX + _backgroundWidth - _backgroundOffset, 0);
			if (!tmp.isEmpty())
				_backgroundSurfaceDirtyRect.extend(tmp);

		}
	} else if (state == RenderTable::TILT) {
		// Tilt doesn't allow wrapping, so we just do a simple clip
		Common::Rect viewPort(_workingWidth, _workingHeight);
		viewPort.translate(0, -(_screenCenterY - _backgroundOffset));
		Common::Rect drawRect = _backgroundDirtyRect;
		drawRect.clip(viewPort);
		if (!drawRect.isEmpty())
			blitSurfaceToSurface(_currentBackgroundImage, drawRect, _backgroundSurface, drawRect.left, _screenCenterY - _backgroundOffset + drawRect.top);

		// Mark the dirty portion of the surface
		_backgroundSurfaceDirtyRect = _backgroundDirtyRect;
		_backgroundSurfaceDirtyRect.translate(0, _screenCenterY - _backgroundOffset);

	} else {
		if (!_backgroundDirtyRect.isEmpty())
			blitSurfaceToSurface(_currentBackgroundImage, _backgroundDirtyRect, _backgroundSurface, _backgroundDirtyRect.left, _backgroundDirtyRect.top);
		_backgroundSurfaceDirtyRect = _backgroundDirtyRect;
	}

	// Clear the dirty rect since everything is clean now
	_backgroundDirtyRect = Common::Rect();

	_backgroundSurfaceDirtyRect.clip(_workingWidth, _workingHeight);
}