示例#1
0
/**
 * The about dialog box.
 */
void on_about1_activate(GtkWidget *widget)
{
    const gchar *authors[] = {
        "Current Maintainers",
        "Anoop John <*****@*****.**>",
        "Jose Rostagno <*****@*****.**>",
        "",
        "Original Developer",
        "Andy Jeffries <*****@*****.**>",
        "",
        "Assistance with Fixes/Enhancements:",
        "Jonh Wendell <*****@*****.**>",
        "Tim Jackson <*****@*****.**>",
        "Sven Herzberg <*****@*****.**>",
        NULL
    };
    gchar *translator_credits = _("translator_credits");
    const gchar *documenters[] = {NULL};
    GtkWidget *dialog = NULL;
    dialog=gtk_about_dialog_new();
    gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(dialog), PACKAGE_NAME);
    gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), VERSION);
    gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog),
                                   _("Copyright \xc2\xa9 2003-2006 Andy Jeffries, 2009-2010 Anoop John"));
    gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog),
                                  _("gPHPEdit is a GNOME2 editor specialised for editing PHP "
                                    "scripts and related files (HTML/CSS/JS)."));
#ifdef PACKAGE_URL
    gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog),PACKAGE_URL);
#endif
    GdkPixbuf *logo = NULL;
    logo=get_window_icon ();
    gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog),logo);
    if (logo != NULL) {
        g_object_unref (logo);
    }
    gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog),(const gchar **) authors);
    gtk_about_dialog_set_translator_credits(GTK_ABOUT_DIALOG(dialog),translator_credits);
    gtk_about_dialog_set_documenters (GTK_ABOUT_DIALOG(dialog),(const gchar **) documenters);
    /*
       http://library.gnome.org/devel/gtk/stable/GtkWindow.html#gtk-window-set-transient-for
       Dialog windows should be set transient for the main application window they were spawned from.
       This allows window managers  to e.g. keep the dialog on top of the main window, or center the dialog over the main window.
    */
    gtk_window_set_transient_for (GTK_WINDOW(dialog),GTK_WINDOW(main_window.window));
    gtk_dialog_run(GTK_DIALOG (dialog));
    gtk_widget_destroy(dialog);
}
示例#2
0
//-----------------------------------------------------------------
void PaintAll (WinInfo * WI)
{
    int const left    = WI->S.HiddenSide;
    int const width   = WI->S.width;
    int const right   = width - WI->S.HiddenSide;

    int const top     = WI->S.HiddenTop;
    int const bottom  = WI->S.height - WI->S.HiddenBottom;
    int const title_height = mSkin.ncTop;
    int const title_bottom = top + title_height;

    HWND focus;
    int active = 0;

    RECT rc;
    HDC hdc, hdc_win;
    HGDIOBJ hbmpOld;
    StyleItem * pG = 0;
    windowGradients * wG = 0;

    //dbg_printf("painting %x", WI->hwnd);

    active =
        (WI->is_active_app
            && (WI->is_active
                || WI->hwnd == (focus = GetFocus())
                || IsChild(WI->hwnd, focus)
                ))
        || (mSkin.bbsm_option & 1);

    hdc_win = GetWindowDC(WI->hwnd);
    hdc = CreateCompatibleDC(hdc_win);
    WI->buf = CreateCompatibleDC(hdc_win);
    hbmpOld = SelectObject(hdc, CreateCompatibleBitmap(hdc_win, width, title_bottom));

    wG = &mSkin.U + active;

    //----------------------------------
    // Titlebar gradient

    rc.top = top;
    rc.left = left;
    rc.right = right;
    rc.bottom = title_bottom;
    pG = &wG->Title;
    PutGradient(WI, hdc, &rc, pG);

    //----------------------------------
    // Titlebar Buttons

    rc.top = top + mSkin.buttonMargin;
    rc.bottom = rc.top + mSkin.buttonSize;

    LONG w_style = WI->style;
    HICON hico = NULL;
    pG = &wG->Button;

    int label_left = left;
    int label_right = right;
    int barrier = mSkin.labelBarrier !=-1 ? 
        ((right - left) * (mSkin.labelBarrier) / 200) : 0;
    int space = mSkin.buttonMargin;
    int d, i;

    for (d = 1, WI->button_count = i = 0; ; i += d)
    {
        bool state;
        int b;
        struct button_set *p;

        b = mSkin.button_string[i] - '0';
        switch (b) {
            case 0 - '0':
                goto _break;
            case '-' - '0':
                if (d < 0)
                    goto _break;
                d = -1;
                i = strlen(mSkin.button_string);
                space = mSkin.buttonMargin;
                continue;
            case btn_Rollup:
                if (0 == (w_style & WS_SIZEBOX))
                    continue;
                state = WI->is_rolled;
                break;
            case btn_Sticky:
                if ((w_style & WS_CHILD) || 0 == WI->has_sticky)
                    continue;
                state = WI->is_sticky;
                break;
            case btn_OnBG:
                if (w_style & WS_CHILD)
                    continue;
                state = WI->is_onbg;
                break;
            case btn_OnTop:
                if (w_style & WS_CHILD)
                    continue;
                state = WI->is_ontop;
                break;
            case btn_Min:
                if (0 == (w_style & WS_MINIMIZEBOX))
                    continue;
                state = WI->is_iconic;
                break;
            case btn_Max:
                if (0 == (w_style & WS_MAXIMIZEBOX))
                    continue;
                state = WI->is_zoomed;
                break;
            case btn_Close:
                state = false;
                break;
            case btn_Icon:
                if (!get_window_icon(WI->hwnd, &hico))
                    continue;
                state = !active;
                break;
            default:
                continue;
        }

        if (d > 0) // left button
        {
            rc.left = label_left + space;
            label_left = rc.right = rc.left + mSkin.buttonSize;
        }
        else // right button
        {
            rc.right = label_right - space;
            label_right = rc.left = rc.right - mSkin.buttonSize;
        }

        p = &WI->button_set[(int)WI->button_count];
        p->set = b;
        p->pos = rc.left;
        space = mSkin.buttonSpace;

        if (btn_Icon == b)
        {
            int s = mSkin.buttonSize;
            int o = (s - 20)/2;
            if (o < 0)
                o = 0;
            else
                s = 20;
            DrawIconSatnHue(hdc, rc.left+o, rc.top+o, hico, s, s, 0, NULL, DI_NORMAL, state, mSkin.iconSat, mSkin.iconHue);
        }
        else
        {
            int const pressed = WI->button_down == b
                || ((2 & mSkin.bbsm_option) && btn_Close == b);
            DrawButton(WI, hdc, rc, b-1, state, pG + pressed);
        }

        if (++WI->button_count == BUTTON_COUNT)
            _break: break;
    }

    //----------------------------------
    // Titlebar Label gradient

    rc.left = label_left + barrier + (left == label_left ? mSkin.labelMargin : mSkin.buttonInnerMargin);
    rc.right = label_right - barrier - (right == label_right ? mSkin.labelMargin : mSkin.buttonInnerMargin);
    rc.top = top + mSkin.labelMargin;
    rc.bottom = title_bottom - mSkin.labelMargin;

    pG = &wG->Label;
    PutGradient(WI, hdc, &rc, pG);

    //----------------------------------
    // Titlebar Text

    rc.left += mSkin.labelIndent;
    rc.right -= mSkin.labelIndent;

    if (NULL == WI->hFont)
        WI->hFont = CreateFontIndirect(&mSkin.Font);
    HGDIOBJ hfontOld = SelectObject(hdc, WI->hFont);
    SetBkMode(hdc, TRANSPARENT);
    SetTextColor(hdc, pG->TextColor);

    int const title_sz = 192;
    WCHAR wTitle[title_sz];
    wTitle[0] = 0;

    if (WI->is_unicode)
    {
        GetWindowTextW(WI->hwnd, wTitle, title_sz);
        BBDrawTextAltW(hdc, wTitle, -1, &rc,
            mSkin.Justify | DT_SINGLELINE | DT_NOPREFIX | DT_END_ELLIPSIS | DT_VCENTER,
            pG);
    }
    else
    {
        GetWindowText(WI->hwnd, (char*)wTitle, title_sz);
        BBDrawTextAlt(hdc, (char*)wTitle, -1, &rc,
            mSkin.Justify | DT_SINGLELINE | DT_NOPREFIX | DT_END_ELLIPSIS | DT_VCENTER,
            pG);
    }

    SelectObject(hdc, hfontOld);

    //----------------------------------
    // Blit the title
    BitBlt(hdc_win, left, top, right-left, title_height, hdc, left, top, SRCCOPY);

    //----------------------------------
    // Frame and Bottom
    if (false == WI->is_iconic
          && (false == WI->is_rolled || (false == mSkin.nixShadeStyle && mSkin.handleHeight)))
    {
        if (int fw = mSkin.frameWidth)
        {
            //----------------------------------
            // Frame left/right(/bottom) border, drawn directly on screen
            rc.top = title_bottom;
            rc.left = left;
            rc.right = right;
            rc.bottom = bottom - WI->S.BottomHeight;
            if (!mSkin.is_style070)
            {
                COLORREF pc = active ? mSkin.F.Title.borderColor : mSkin.U.Title.borderColor;
                HGDIOBJ oldPen = SelectObject(hdc_win, CreatePen(PS_SOLID, 1, pc));
                int const bw = imax(mSkin.F.Title.borderWidth, mSkin.U.Title.borderWidth);
                draw_line(hdc_win, rc.left, rc.left, rc.top, rc.bottom, bw);
                draw_line(hdc_win, rc.right-bw, rc.right-bw, rc.top, rc.bottom, bw);
                DeleteObject(SelectObject(hdc_win, oldPen));
                rc.left += bw;
                rc.right -= bw;
            }

            COLORREF bc = wG->FrameColor;
            HGDIOBJ oldPen = SelectObject(hdc_win, CreatePen(PS_SOLID, 1, bc));
            draw_line(hdc_win, rc.left, rc.left, rc.top, rc.bottom, fw);
            draw_line(hdc_win, rc.right-fw, rc.right-fw, rc.top, rc.bottom, fw);
            if (WI->S.BottomHeight == fw)
                draw_line(hdc_win, rc.left, rc.right, rc.bottom, rc.bottom, fw);
            if (!mSkin.is_style070)
            {
                rc.bottom -= fw;
                draw_line(hdc_win, rc.left, rc.right, rc.top, rc.top, fw);
                draw_line(hdc_win, rc.left, rc.right, rc.bottom, rc.bottom, fw);
            }
            DeleteObject(SelectObject(hdc_win, oldPen));
        }

        if (WI->S.BottomHeight > 0)
        {
            int const gw = mSkin.gripWidth;
            pG = &wG->Handle;
            StyleItem * pG2 = &wG->Grip;
            int const bw = imin(pG->borderWidth, pG2->borderWidth);

            //----------------------------------
            // Bottom Handle gradient
            rc.top = 0;
            rc.bottom = WI->S.BottomHeight;
            rc.left = left;
            rc.right = right;
            if (false == pG2->parentRelative) {
                rc.left += gw - bw;
                rc.right -= gw - bw;
            }
            PutGradient(WI, hdc, &rc, pG);

            //----------------------------------
            // Bottom Grips
            if (false == pG2->parentRelative) {
                rc.right = (rc.left = left) + gw;
                PutGradient(WI, hdc, &rc, pG2);
                rc.left = (rc.right = right) - gw;
                PutGradient(WI, hdc, &rc, pG2);
            }

            //----------------------------------
            // Blit the bottom
            BitBlt(hdc_win, left, bottom - rc.bottom, right-left, rc.bottom, hdc, left, 0, SRCCOPY);

        } // has an handle
    } // not iconic

    DeleteObject(SelectObject(hdc, hbmpOld));
    DeleteDC(hdc);
    DeleteDC(WI->buf);
    ReleaseDC(WI->hwnd, hdc_win);
}