⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 as.c

📁 SEAL是DOS 下的32位保护模式的GUI程序
💻 C
字号:
/******************************************************************
 * SEAL 2.0                                                       *
 * Copyright (c) 1999-2002 SEAL Developers. All Rights Reserved.  *
 *                                                                *
 * Web site: http://sealsystem.sourceforge.net/                   *
 * E-mail (current maintainer): orudge@users.sourceforge.net      *
 ******************************************************************/

/*
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <seal.h>
#include <cp.h>
#include <grfx.h>
#include <button.h>
#include <dialogs.h>
#include <iodlg.h>
#include <inputbox.h>
////////////////////////////////////////////////////////////////////////////////


l_text colors_name[max_ctrls_col] = {
  "flat face", "flat border", "flat text",
  "3d face", "3d light", "3d shadow",
  "3d dark", "3d border", "3d text", "selected face",
  "selected text", "desktop face", "desktop text",
  "menu face", "menu face gardient", "menu text",
  "menu selected face", "menu selected face gardient",
  "menu selected text", "deskbar face", "deskbar light",
  "deskbar shadow", "deskbar dark", "deskbar border",
  "deskbar text", "deskbar selected face",
  "deskbar selected text", "window active title text",
  "window active title face", "window active title face gardient",
  "window passive title text", "window passive title face",
  "window passive title face gardient", NULL };

l_color colors[max_ctrls_col] = { NULL };

#define col_flat_face                      colors[0]
#define col_flat_border                    colors[1]
#define col_flat_text                      colors[2]
#define col_3d_face                        colors[3]
#define col_3d_light                       colors[4]
#define col_3d_shadow                      colors[5]
#define col_3d_dark                        colors[6]
#define col_3d_border                      colors[7]
#define col_3d_text                        colors[8]
#define col_selected_face                  colors[9]
#define col_selected_text                  colors[10]
#define col_desktop_face                   colors[11]
#define col_desktop_text                   colors[12]
#define col_menu_face                      colors[13]
#define col_menu_face_gardient             colors[14]
#define col_menu_text                      colors[15]
#define col_menu_selected_face             colors[16]
#define col_menu_selected_face_gardient    colors[17]
#define col_menu_selected_text             colors[18]
#define col_deskbar_face                   colors[19]
#define col_deskbar_light                  colors[20]
#define col_deskbar_shadow                 colors[21]
#define col_deskbar_dark                   colors[22]
#define col_deskbar_border                 colors[23]
#define col_deskbar_text                   colors[24]
#define col_deskbar_selected_face          colors[25]
#define col_deskbar_selected_text          colors[26]
#define col_window_act_title_text           colors[27]
#define col_window_act_title_face           colors[28]
#define col_window_act_title_face_gardient  colors[29]
#define col_window_pass_title_text          colors[30]
#define col_window_pass_title_face          colors[31]
#define col_window_pass_title_face_gardient colors[32]

////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
void save_color ( l_color col, l_text name ) {

  l_text kkey = key_in_path("current/seal/colors",name);

  l_text value = set_format_text(NULL,"%d,%d,%d",getr(col),getg(col),getb(col));

  if ( !key_exists( kkey ) ) create_key("current/seal/colors",name);


  set_key( kkey, value );

  _free(kkey); _free(value);

};
////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
void set_save( void ) {
  l_int a = 0;
  while ( ctrls_reg[a] ) {
    set_registry_color( colors[a], ctrls_reg[a] );
    ctrls_colors[a] = colors[a];
    a++;
  };
  desktop->brush.color = color_desktop_face;
  VIEW(desktop)->draw_view(VIEW(desktop));
};
////////////////////////////////////////////////////////////////////////////////
void _button3d(BITMAP *bmp, int x1, int y1, int x2, int y2, int down)
{
  if (down == 0) {
    line(bmp, x1, y1, x2, y1, col_3d_light);
    line(bmp, x1, y1, x1, y2, col_3d_light);
    line(bmp, x2-1, y1+1, x2-1, y2-1, col_3d_shadow);
    line(bmp, x1+1, y2-1, x2-1, y2-1, col_3d_shadow);
    line(bmp, x2, y1, x2, y2, col_3d_dark);
    line(bmp, x1, y2, x2, y2, col_3d_dark);
  } else {
    line(bmp, x1, y1, x2, y1, col_3d_dark);
    line(bmp, x1, y1, x1, y2, col_3d_dark);
    line(bmp, x1+1, y1+1, x2-1, y1+1, col_3d_shadow);
    line(bmp, x1+1, y1+1, x1+1, y2-1, col_3d_shadow);
    line(bmp, x2-1, y1+1, x2-1, y2-1, col_3d_face);
    line(bmp, x1+1, y2-1, x2-1, y2-1, col_3d_face);
    line(bmp, x2, y1, x2, y2, col_3d_light);
    line(bmp, x1, y2, x2, y2, col_3d_light);
  };
};
////////////////////////////////////////////////////////////////////////////////
void draw_vscroll_bar ( BITMAP *out, t_point p, t_rect r ) {
  l_int   minush = 8;
  l_int   plush  = 8;
  GrFONT *font   = get_font_in_size("Symbols", 8, 8);
  rectfill(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, col_3d_face);
  button(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, col_3d_light, col_3d_shadow);
  draw_double_text(out, font, "f", -1, r.a.x+p.x+1, r.a.y+p.y,
                       r.b.x+p.x, r.a.y+p.y+minush, TX_ALIGN_CENTER, col_3d_light, col_3d_shadow, 0);
  draw_double_text(out, font, "g", -1, r.a.x+p.x+1, r.b.y+p.y-plush,
                       r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, col_3d_light, col_3d_shadow, 0);
};
////////////////////////////////////////////////////////////////////////////////
void draw_vscroll ( BITMAP *out, t_point p, t_rect r ) {

  rectfill(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, col_3d_face);
  button(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, col_3d_shadow, col_3d_light);
  draw_vscroll_bar(out,p, rect_assign(r.a.x+1,r.a.y+((r.b.y-r.a.y) / 2) - ((r.b.y-r.a.y) / 4),r.b.x-1,r.a.y+((r.b.y-r.a.y) / 2) + ((r.b.y-r.a.y) / 4) ));

};
////////////////////////////////////////////////////////////////////////////////
void draw_editor ( BITMAP *out, t_point p, t_rect r, l_font *font ) {
  r.b.x-=16;
  rectfill(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, col_flat_face);

  button(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, col_3d_shadow, col_3d_light);

  textout_draw_rect(out, font, "Welcome to the system colour selector", -1, r.a.x+p.x+2, r.a.y+p.y+2,
                             r.b.x+p.x-2, r.b.y+p.y-2, TX_ALIGN_DEFAULT, col_flat_text, TX_NOCOLOR, 0);

  textout_draw_rect(out, font, "This is selected!", -1, r.a.x+p.x+2, r.a.y+p.y+2+FONT_GETHEIGHT(font)+2,
                             r.b.x+p.x-2, r.b.y+p.y-2, TX_ALIGN_DEFAULT, col_selected_text, col_selected_face, 0);

  /*textout_draw_rect(out, font, "(c) 2001 Julien Etelain <julien@pmad.net>", -1, r.a.x+p.x+2, r.a.y+p.y+2+(FONT_GETHEIGHT(font)+2)*2,
                             r.b.x+p.x-2, r.b.y+p.y-2, TX_ALIGN_DEFAULT, col_flat_text, TX_NOCOLOR, 0);*/

  r.a.x = r.b.x+3;
  r.b.x = r.a.x+13;

  draw_vscroll (out,p, r );

};
////////////////////////////////////////////////////////////////////////////////
void draw_boutton ( BITMAP *out, t_point p, t_rect r, l_text caption, l_int press, l_font *font ) {

      rectfill(out,p.x+r.a.x,p.y+r.a.y,p.x+r.b.x,p.y+r.b.y,col_3d_face);


      textout_draw_rect(out, font, caption, -1, r.a.x+p.x+2, r.a.y+p.y+2,
                             r.b.x+p.x-2, r.b.y+p.y-2, TX_ALIGN_CENTER, col_3d_text, TX_NOCOLOR, 0);


      _button3d( out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, ( press == 1 ) ? 1 : 0 );

};
////////////////////////////////////////////////////////////////////////////////
void draw_window ( BITMAP *out, t_point p, t_rect br, l_text caption, l_font *font, l_int win_selected ) {

  if ( 1 ) {
    t_rect  r = br;

    rectfill(out,p.x+r.a.x,p.y+r.a.y,p.x+r.b.x,p.y+r.b.y,col_3d_face);

    button(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, col_3d_face, col_3d_dark);
    button(out, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x-1, r.b.y+p.y-1, col_3d_light, col_3d_shadow);

  };

  if ( 1 ) {
    t_rect  r = rect_assign(br.a.x+2, br.a.y+2, br.b.x-2,
                            br.a.y+FONT_GETHEIGHT(font)+3);

    l_color fcolor = col_window_pass_title_text;

    l_color bcolor1 = col_window_pass_title_face;
    l_color bcolor2 = col_window_pass_title_face_gardient;

    if ( win_selected ) {

      fcolor = col_window_act_title_text;
      bcolor1 = col_window_act_title_face;
      bcolor2 = col_window_act_title_face_gardient;
    };

    rectfill(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, col_3d_face);

    fade_rect(out, r.a.x+p.x+1, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, bcolor1, bcolor2, FR_HOR);

    textout_draw_rect(out, font, caption, -1, r.a.x+p.x, r.a.y+p.y+1,
                           r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, fcolor, TX_NOCOLOR, 0);
  };
};
////////////////////////////////////////////////////////////////////////////////
void   preview_draw ( p_view o )
{
  t_rect  r = o->get_local_extent(o);
  t_point p;

  BITMAP *out = o->begin_paint(o, &p, r);

  if ( out ) {
    t_rect w1 = rect_assign(5,5, r.b.x - 15, r.b.y - 15);
    t_rect w2 = rect_assign(10, 5 + FONT_GETHEIGHT(o->font)+3+3, r.b.x - 5, r.b.y -5 );
    t_rect b1 = rect_assign(15,r.b.y-30,115,r.b.y-10);
    t_rect b2 = rect_assign(120,r.b.y-30,220,r.b.y-10);
    t_rect ed = rect_assign( w2.a.x + 3,w2.a.y + (FONT_GETHEIGHT(o->font)*2) + 3+3+3 ,w2.b.x-3,w2.b.y-32);

    rectfill( out, p.x, p.y, p.x+r.b.x, p.y+r.b.y, col_desktop_face );

    draw_window(out,p,w1,"Inactive window",o->font,0);
    draw_window(out,p,w2,"Active window",o->font,1);
    draw_boutton(out,p,b1,TXT_OK,2,o->font);
    draw_boutton(out,p,b2,TXT_CANCEL,0,o->font);
    draw_editor(out,p,ed,o->font);

  };

  o->end_of_paint(o, r);
};
////////////////////////////////////////////////////////////////////////////////
static p_list colors_list ( void ) {
  p_list p = list_init(_malloc(sizeof(t_list)), &free_history_item, 0);
  if ( p ) {
    l_int a = 0;
    while ( colors_name[a] ) {
      p->insert(p, new_history_item(set_format_text(NULL,"%s", colors_name[a]) ,NULL,0,NULL));
      a++;
    };
  };
  return p;
};
////////////////////////////////////////////////////////////////////////////////
p_history  col_lst = NULL;
p_grfx     preview = NULL;
#define  MSG_CCOLOR 1000080
////////////////////////////////////////////////////////////////////////////////
static p_list get_img_items(void)
{
   p_list p = list_init(_malloc(sizeof(t_list)), &free_filehistory_item, 0);

   if (p)
   {
     p->insert(p, new_filehistory_item("Windows Bitmap files (*.bmp)", "*.bmp"));
     p->insert(p, new_filehistory_item("JPEG files (*.jpg)", "*.jpg"));
     p->insert(p, new_filehistory_item("GIF files (*.gif)", "*.gif"));
     p->insert(p, new_filehistory_item("PCX files (*.pcx)", "*.pcx"));
     p->insert(p, new_filehistory_item("All files (*.*)", "*.*"));
   }

   return(p);
};
////////////////////////////////////////////////////////////////////////////////
void set_trans_ev( p_object o, t_event *event ) {

  if ( o->process == PH_PREPROCESS && event->type & EV_MESSAGE ) {
    l_dword msg = event->message;

    if ( msg == MSG_CCOLOR ) {
      l_int sel = col_lst->current;
      colors[sel] = selectcolor ( colors[sel] );
      view_draw_view(VIEW(preview));
    };

  };

};
////////////////////////////////////////////////////////////////////////////////
void load_sets ( void ) {
     l_int a = 0;
     while ( ctrls_reg[a] ) {
       colors[a] = registry_color(ctrls_reg[a]);
       a++;
     };
     a = 0;
};
////////////////////////////////////////////////////////////////////////////////
void set_load ( p_object o ) {

t_rect       r = VIEW(o)->get_local_extent(VIEW(o));
l_int        a = r.b.y - (25);
p_stattext lbl = NULL;
p_button     b = NULL;

load_sets();

lbl  =    stattext_init( _malloc(sizeof(t_stattext)),
                         rect_assign( 5, a , 100, a + 20 ),
                         TX_ALIGN_CENTER,
                         TXT_COLOR);
obj_insert(o,OBJECT(lbl));
b  =        button_init( _malloc(sizeof(t_button)),
                         rect_assign( r.b.x - 55, a , r.b.x - 5, a + 20 ),
                         TXT_CHANGE ,
                         MSG_CCOLOR,
                         BF_DEFAULT);
obj_insert(o,OBJECT(b));
col_lst  = history_init( _malloc(sizeof(t_history)),
                         rect_assign( 105, a, r.b.x - 75, a + 20 ),
                         colors_list() ,
                         150,
                         HF_REWRITEUNABLE|LF_SELFLIST);
obj_insert(o,OBJECT(col_lst));
preview  =    grfx_init( _malloc(sizeof(t_grfx)),
                         rect_assign( 5, 5, r.b.x - 5, a - 5 ));
VIEW(preview)->draw = &preview_draw;
obj_insert(o,OBJECT(preview));

};


////////////////////////////////////////////////////////////////////////////////
SetInfoAppName("System colors selector");
SetInfoDesciption("Sub Program of control panel");
SetInfoCopyright("(c) Copyright 2001 Point Mad. All rights reserved");
SetInfoManufacturer("Point Mad");

app_begin ( void ) {


  if ( ap_process == AP_INIT ) {

     add_cp_loader(TXT_SYSTEM_COLORS,NULL,cps_display,load_image("bmp/colors.ico,32"),load_image("bmp/colors.ico,16"),&set_load,&set_trans_ev,&set_save);
  };

} app_end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -