Home > Products > SophiaFramework UNIVERSE > Tutorial > Cartoon > - 3 / 6 -

BREW Cartoon - 3 / 6 -

Events

Cartoon Class

Define all variables which will be referred to from anywhere in the application.

SFMTYPEDEFCLASS(Cartoon)
class Cartoon : public SFRApplication {
    SFMSEALCOPY(Cartoon)
private:
    // Retain size of the device display
    SFXSize m_devsize;

    // Variable to manage picture numbers to be displayed.
	// (0 = beginning, 1-4 = picture number, 5 = finish )
    SIntN   m_pict_index;

    // Retain bitmaps to be displayed
    SFBBitmapSmp m_bitmap;

    // Enlargement factor  "2" when the device is QVGA, otherwise "1".
    SIntN m_qvga_ratio;

    // Member functions
};

Drawing Handler

Draw the image at the beginning of the application, or when the "Back" "Next" buttons are pushed.

// Declair draw handler
SFMTYPEDEFCLASS(Cartoon)
class Cartoon : public SFRApplication {
    ...
    
private:
    HANDLER_DECLARE_VOIDRENDER(OnRenderContent)

    ...
}

// Define draw handler
HANDLER_IMPLEMENT_VOIDRENDER(Cartoon, OnRenderContent, graphics)
{
    // Clear display with background color
    graphics->FillRectangle(GetContentWorld(), 
    SFXRGBColor(0, 192, 192, 255));

    // Calculations to get the coordinates of the uper right corner 
    SIntN blank1 = (m_devsize.GetWidth() - PICTSIZE) / 2;

    // Calculate pixel numbers between bitmap and navigation
    SIntN blank2 = (m_devsize.GetHeight() - blank1 - PICTSIZE) / 4;

    // Draw rectangle to draw images
    graphics->SetForeColor(SFXRGBColor(0, 0, 0, 255));
    graphics->DrawRectangle(SFXRectangle(blank1 - 1, 
                blank1 - 1, PICTSIZE + 2, PICTSIZE + 2));

    // Draw nacigation area ("Back" "Enlarge" "Next")
    graphics->SetFillColor(SFXRGBColor(128, 128, 128, 255));
    graphics->DrawRoundRectangle(SFXRectangle(blank1, 
    blank1 + blank2 + PICTSIZE,
    NAVI_WIDTH, NAVI_HEIGHT ),SFXSize(3, 3));
    graphics->DrawRoundRectangle(SFXRectangle(blank1 + NAVI_X_POS_2,
    blank1 + blank2 + PICTSIZE, NAVI_WIDTH, NAVI_HEIGHT ), 
    SFXSize(3, 3));
    graphics->DrawRoundRectangle(SFXRectangle(blank1 + NAVI_X_POS_3,
    blank1 + blank2 + PICTSIZE, NAVI_WIDTH, NAVI_HEIGHT ), 
    SFXSize(3, 3));

    graphics->SetForeColor(SFXRGBColor(0, 0, 0, 255));
    if (m_pict_index >= 1) {
        graphics->DrawText("Back", SFXRectangle(blank1, 
        blank1 + blank2 + PICTSIZE, NAVI_WIDTH, NAVI_HEIGHT ) );
    }
    if (1 <= m_pict_index && m_pict_index <= 4) {
        graphics->DrawText("Enlarge", 
        SFXRectangle(blank1 + NAVI_X_POS_2, 
        blank1 + blank2 + PICTSIZE, NAVI_WIDTH, NAVI_HEIGHT ) );
    }
    if (m_pict_index <= 4) {
        graphics->DrawText("Next", SFXRectangle(blank1 + NAVI_X_POS_3,
        blank1 + blank2 + PICTSIZE, NAVI_WIDTH, NAVI_HEIGHT ) );
    }

    // Draw image (The rest is omitted )
}

Key handler

Process when the left or right key is pressed.

// Declare key handler
SFMTYPEDEFCLASS(Cartoon)
class Cartoon : public SFRApplication {
    ...
    
private:
    HANDLER_DECLARE_BOOLEVENT(OnKey)

    ...
}

// Define key handler
HANDLER_IMPLEMENT_BOOLEVENT(Cartoon, OnKey, event)
{
    UInt16 key = event.GetP16();
    switch (key) {
    case AVK_RIGHT: //When right key is pressed
        if (m_pict_index <= 4) {
            m_pict_index++;                      // Next picture
            m_bitmap = LoadBitmap(m_pict_index); // Load bitmap
            InvalidateContent();                 // Redraw
        }
        return true;
    
    case AVK_LEFT: // When left key is pushed
        if (m_pict_index >= 1) {
            m_pict_index--;                      // Prior picture
            m_bitmap = LoadBitmap(m_pict_index); // Load bitmap
            InvalidateContent();                 // redraw
        }
        return true;

    case AVK_SELECT: // When select key is pushed
        if (1 <= m_pict_index && m_pict_index <= 4) {
            new ImageWindow(this, GetContentWorld(), m_bitmap); 
           //Generate ImageWindow
        }
        return true;
    }
    return false;
}

Constructor

// Constructor
Cartoon::Cartoon(Void)
{
    // Register draw handler
    if (static_try()) { // Error handling
        static_throw(
            RegisterHandler(SREVT_RESPONDER_RENDER, 
                            SRP16_RENDER_CONTENT,
                            HANDLER_BEFORE, 
                            HANDLER_FUNCTION(OnRenderContent)));
    }
    // Register key handler
    if (static_try()) {
        static_throw(
            RegisterHandler(SFEVT_KEY, HANDLER_AFTER, 
                            HANDLER_FUNCTION(OnKey)));
    }
    
    // 
}

Go back  1   2   3   4   5   Apdx   Next page