Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
UppHub
Status & Roadmap
FAQ
Authors & License
Forums
Funding U++
Search on this site











SourceForge.net Logo

SourceForge.net Logo

GitHub Logo

Discord Logo

AnimatedClip

 

Multi image formats (GIF and TIFF) demo using RasterPlayer

 

This example demonstrates how to use RasterPlayer class to show animated GIFs or multipage TIFFs.

 

It can be compiled as "GUI" or "GUI MT". In the second case RasterPlayer can work in the same thread or opening a new thread. This can be defined with SetMT() method.

 

 

 

AnimatedClip.h

 

#ifndef _AnimatedClipDemo_AnimatedClipDemo_h

#define _AnimatedClipDemo_AnimatedClipDemo_h

 

#define LAYOUTFILE <AnimatedClip/AnimatedClip.lay>

#include <CtrlCore/lay.h>

 

class AnimatedClip : public WithAnimatedClipLayout<TopWindow> {

public:

    typedef AnimatedClip CLASSNAME;

    AnimatedClip();

    

    void Browse();

    

    void OnShown();

};

 

#endif

 

 

 

 

main.cpp

 

#include <CtrlLib/CtrlLib.h>

#include <RasterPlayer/RasterPlayer.h>

 

using namespace Upp;

 

#include "AnimatedClip.h"

#include "AnimatedClip.brc"

 

AnimatedClip::AnimatedClip() {

    CtrlLayout(*this, "RasterPlayer demo");

    

    browse << [=] { Browse(); };

    play << [=] { clip.Play(); };

    stop << [=] { clip.Stop(); };

    openNext << [=] { clip.NextFrame(); };

    numThreads << [=] { clip.SetMT(numThreads == 1); };

    numThreads = 0;

    #ifndef _MULTITHREADED

        numThreads.EnableCase(1, false);

    #endif

    

    clip.WhenShown << [=] { openedPage = FormatInt(clip.GetPage()); };

    arrows.LoadBuffer(String(animatedArrow, animatedArrow_length));

    arrows.Play();

    earth.LoadBuffer(String(animatedEarth, animatedEarth_length));

    earth.Play();

        

    Sizeable().Zoomable();

}

 

void AnimatedClip::Browse() {

    FileSel fs;

    

    fs.PreSelect(~fileName);

    fs.Type("Animation type", "*.gif, *.tif, *.tiff");

    

    if (fs.ExecuteOpen("Choose animation file"))

        fileName <<= ~fs;

 

    if (!clip.Load(~fileName)) {

        Exclamation("Invalid input");

        return;

    }

    numberPages = FormatInt(clip.GetPageCount());

    openedPage = FormatInt(clip.GetPage());

}

 

GUI_APP_MAIN {

    AnimatedClip().Run();

}

 

 

 

 

AnimatedClip.lay

 

LAYOUT(AnimatedClipLayout, 536, 280)

    ITEM(Upp::RasterPlayer, clip, SetFrame(InsetFrame()).HSizePosZ(8, 8).VSizePosZ(92, 32))

    ITEM(Upp::Label, openedPage, SetLabel(t_("0")).LeftPosZ(204, 24).TopPosZ(68, 19))

    ITEM(Upp::Label, dv___2, SetLabel(t_("Opened Page:")).LeftPosZ(132, 68).TopPosZ(68, 19))

    ITEM(Upp::Label, numberPages, SetLabel(t_("1")).LeftPosZ(100, 24).TopPosZ(68, 19))

    ITEM(Upp::Label, dv___4, SetLabel(t_("Number of Pages:")).LeftPosZ(8, 88).TopPosZ(68, 19))

    ITEM(Upp::EditString, fileName, HSizePosZ(68, 232).TopPosZ(40, 19))

    ITEM(Upp::Button, openNext, SetLabel(t_("Open Next")).RightPosZ(164, 64).TopPosZ(68, 20))

    ITEM(Upp::Button, stop, SetLabel(t_("Stop")).RightPosZ(232, 36).TopPosZ(68, 20))

    ITEM(Upp::Button, play, SetLabel(t_("Play")).RightPosZ(272, 36).TopPosZ(68, 20))

    ITEM(Upp::Button, browse, SetLabel(t_("Browse")).RightPosZ(164, 64).TopPosZ(40, 20))

    ITEM(Upp::Label, dv___10, SetLabel(t_("Load and animate GIF and TIFF files")).HSizePosZ(8, 84).TopPosZ(8, 19))

    ITEM(Upp::Label, dv___11, SetLabel(t_("Image file:")).LeftPosZ(8, 56).TopPosZ(40, 19))

    ITEM(Upp::RasterPlayer, earth, RightPosZ(12, 52).TopPosZ(8, 52))

    ITEM(Upp::RasterPlayer, arrows, SetSpeed(2).HSizePosZ(8, 8).BottomPosZ(8, 20))

    ITEM(Upp::Switch, numThreads, SetLabel(t_("Single thread\nMultithreaded")).RightPosZ(68, 88).VSizePosZ(56, 192))

END_LAYOUT

 

 

 

 

AnimatedClip.brc

 

BINARY(animatedArrow, "arrtan_e0.gif")

BINARY(animatedEarth, "arkearth_e0.gif")

 

 

 

Do you want to contribute?