home *** CD-ROM | disk | FTP | other *** search
/ Internet Magazine 2002 June / INTERNET92.ISO / pc / software / windows / building / visual_dhtml / visualdhtmlwin2000.exe / wwjba.___ (.txt) < prev    next >
Encoding:
Java Class File  |  2001-10-19  |  12.6 KB  |  697 lines

  1. import java.awt.Color;
  2. import java.awt.Component;
  3. import java.awt.Container;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Frame;
  9. import java.awt.Graphics;
  10. import java.awt.Image;
  11. import java.awt.LayoutManager;
  12. import java.awt.MediaTracker;
  13. import java.awt.Panel;
  14. import java.awt.Scrollbar;
  15. import java.io.File;
  16. import java.net.URL;
  17.  
  18. public class wwjba extends Panel implements Runnable {
  19.    Thread trun = null;
  20.    int break_iload;
  21.    int break_pload;
  22.    int popup_x;
  23.    int popup_y;
  24.    int popup_width;
  25.    int popup_height;
  26.    int pic_highlight_num = -1;
  27.    int pic_para_highlight_num = -1;
  28.    int i_h;
  29.    boolean run_load = false;
  30.    boolean paintCalled = false;
  31.    boolean use_sb = false;
  32.    // $FF: renamed from: pu java.awt.Image
  33.    Image field_0;
  34.    Graphics g_pu;
  35.    String go_load_where = "applet";
  36.    String go_url = null;
  37.    Image off;
  38.    Graphics g_off;
  39.    Image[] htmlpics;
  40.    String last_sb = null;
  41.    String page_title = null;
  42.    Font font;
  43.    // $FF: renamed from: fm java.awt.FontMetrics
  44.    FontMetrics field_1;
  45.    URL temp_url;
  46.    // $FF: renamed from: d java.awt.Dimension
  47.    Dimension field_2;
  48.    String[] tag_message;
  49.    boolean transition_running = false;
  50.    boolean done_drawing = false;
  51.    int num_para_images;
  52.    // $FF: renamed from: mx int
  53.    int field_3;
  54.    // $FF: renamed from: my int
  55.    int field_4;
  56.    int font_style = 0;
  57.    int center_x = 0;
  58.    int m_num_msg;
  59.    // $FF: renamed from: k int
  60.    int field_5 = 0;
  61.    int old_scrolly = 0;
  62.    int[] para_starty;
  63.    int[] para_endy;
  64.    int cur_yoffset = 0;
  65.    int cur_mouse_para;
  66.    int mouse_ldp = -1;
  67.    int mouse_pp = 0;
  68.    int scroll_y = 0;
  69.    int hold_move = 0;
  70.    int cur_page_height = 0;
  71.    String cur_sb_message = "OpenCube - Web Window Browser";
  72.    boolean loading_page = false;
  73.    boolean tag = false;
  74.    boolean on_the_move = false;
  75.    boolean mouse_in = false;
  76.    boolean first_run = true;
  77.    boolean on_link = false;
  78.    boolean mouse_held = false;
  79.    boolean page_ready = false;
  80.    boolean page_scrollable = false;
  81.    int highlight_num = -1;
  82.    int highlight_para_num = -1;
  83.    private int m_size = 3;
  84.    private String m_font = "TimesRoman";
  85.    private Color m_page_bgcolor;
  86.    private Color m_page_link_color;
  87.    private Color m_page_hl_color;
  88.    private Color m_textcolor;
  89.    String m_start_file;
  90.    private boolean m_highlight_underlines;
  91.    private Color m_pu_color;
  92.    private Color m_pu_outline_color;
  93.    private Color m_pu_text_color;
  94.    private int m_pu_size;
  95.    private boolean m_popup_urls;
  96.    private int m_sb_line_dist;
  97.    private Color m_bar_bgcolor;
  98.    private boolean m_smooth_scrolling;
  99.    private int m_smooth_scrolling_jump;
  100.    private int m_transition_jump;
  101.    private int m_si;
  102.    private Color m_bc;
  103.    private Color m_ac;
  104.    private Color m_hc;
  105.    private Color m_bgc;
  106.    private Color m_sc;
  107.    private Color m_oc;
  108.    private int m_bar_width;
  109.    String m_document_base;
  110.    RHTML cur_page2;
  111.    RHTML cur_page;
  112.    PParse[] para_part;
  113.    Frame cursor;
  114.    int cur_cursor;
  115.    FontMetrics fm_popup;
  116.    Font f_popup;
  117.    // $FF: renamed from: sb java.awt.Scrollbar
  118.    Scrollbar field_6;
  119.    int sb_width;
  120.    boolean m_sbright;
  121.  
  122.    public boolean mouseMove(Event var1, int var2, int var3) {
  123.       this.field_3 = var2;
  124.       this.field_4 = var3;
  125.       boolean var4 = false;
  126.       if (!this.page_ready) {
  127.          return true;
  128.       } else {
  129.          for(int var5 = 0; var5 < this.cur_page.numTags; ++var5) {
  130.             this.mouse_pp = var5;
  131.             if (this.para_starty[var5] + this.scroll_y < this.field_4 && this.para_endy[var5] + this.scroll_y > this.field_4) {
  132.                if (this.para_part[var5].drawComplete && this.para_part[var5].isLinks) {
  133.                   this.mouse_ldp = this.para_part[var5].cMouseLink(this.field_3 - this.cur_page.pageLeftMargin, this.field_4 - this.para_starty[var5] - this.scroll_y);
  134.                   if (this.mouse_ldp >= 0) {
  135.                      this.on_link = true;
  136.                      this.last_sb = this.para_part[var5].linkData[this.mouse_ldp * 8];
  137.                      this.showStatusMsg(this.last_sb);
  138.                      if (this.para_part[var5].linkData[this.mouse_ldp * 8 + 5].equals("-1")) {
  139.                         this.CheckUH();
  140.                         if (this.pic_highlight_num != -1 && this.field_4 > this.popup_y && this.field_4 < this.popup_y + this.popup_height && this.field_3 > this.popup_x && this.field_3 < this.popup_x + this.popup_width) {
  141.                            this.CheckUHpopup();
  142.                         }
  143.  
  144.                         if (this.pic_highlight_num != this.mouse_ldp || this.pic_para_highlight_num != var5) {
  145.                            if (this.para_part[var5].linkData[this.mouse_ldp * 8 + 2].equals("-1") && this.m_popup_urls) {
  146.                               this.CheckUHpopup();
  147.                               this.CreatePopUp(this.field_3, this.field_4, this.para_part[var5].linkData[this.mouse_ldp * 8]);
  148.                               this.pic_highlight_num = this.mouse_ldp;
  149.                               this.pic_para_highlight_num = var5;
  150.                            } else if (this.para_part[var5].linkData[this.mouse_ldp * 8 + 2].equals("-1")) {
  151.                               this.CheckUHpopup();
  152.                               this.CreatePopUp(this.field_3, this.field_4, this.para_part[var5].linkData[this.mouse_ldp * 8 + 2]);
  153.                               this.pic_highlight_num = this.mouse_ldp;
  154.                               this.pic_para_highlight_num = var5;
  155.                            }
  156.                         }
  157.                      } else {
  158.                         this.CheckUHpopup();
  159.                         if (this.highlight_num != this.mouse_ldp || this.highlight_para_num != var5) {
  160.                            this.CheckUH();
  161.                            this.HighlightText(var5, this.mouse_ldp, true);
  162.                            this.highlight_num = this.mouse_ldp;
  163.                            this.highlight_para_num = var5;
  164.                         }
  165.                      }
  166.  
  167.                      this.cur_mouse_para = var5;
  168.                      return true;
  169.                   }
  170.  
  171.                   this.CheckUHpopup();
  172.                   this.CheckUH();
  173.                   if (!this.last_sb.equals(this.cur_sb_message)) {
  174.                      this.showStatusMsg(this.cur_sb_message);
  175.                      this.last_sb = this.cur_sb_message;
  176.                   }
  177.  
  178.                   this.on_link = false;
  179.                } else {
  180.                   this.CheckUHpopup();
  181.                   this.CheckUH();
  182.                }
  183.             }
  184.          }
  185.  
  186.          if (!this.last_sb.equals(this.cur_sb_message)) {
  187.             this.last_sb = this.cur_sb_message;
  188.             this.showStatusMsg(this.cur_sb_message);
  189.          }
  190.  
  191.          this.on_link = false;
  192.          return true;
  193.       }
  194.    }
  195.  
  196.    public void stop() {
  197.       this.trun.interrupt();
  198.    }
  199.  
  200.    public boolean mouseEnter(Event var1, int var2, int var3) {
  201.       this.mouse_in = true;
  202.       return true;
  203.    }
  204.  
  205.    public boolean mouseExit(Event var1, int var2, int var3) {
  206.       this.mouse_in = false;
  207.       this.CheckUH();
  208.       this.CheckUHpopup();
  209.       if (this.page_title != null) {
  210.          this.last_sb = this.page_title;
  211.          this.cur_sb_message = this.page_title;
  212.          this.showStatusMsg(this.page_title);
  213.       }
  214.  
  215.       return true;
  216.    }
  217.  
  218.    wwjba(String var1) {
  219.       this.m_page_bgcolor = Color.white;
  220.       this.m_page_link_color = Color.blue;
  221.       this.m_page_hl_color = Color.red;
  222.       this.m_textcolor = Color.black;
  223.       this.m_start_file = null;
  224.       this.m_highlight_underlines = true;
  225.       this.m_pu_color = new Color(Integer.parseInt("FAFBD5", 16));
  226.       this.m_pu_outline_color = Color.black;
  227.       this.m_pu_text_color = Color.black;
  228.       this.m_pu_size = 10;
  229.       this.m_popup_urls = true;
  230.       this.m_sb_line_dist = 5;
  231.       this.m_bar_bgcolor = Color.black;
  232.       this.m_smooth_scrolling = false;
  233.       this.m_smooth_scrolling_jump = 2;
  234.       this.m_transition_jump = 2;
  235.       this.m_si = 2;
  236.       this.m_bc = Color.lightGray;
  237.       this.m_ac = Color.black;
  238.       this.m_hc = Color.yellow;
  239.       this.m_bgc = Color.white;
  240.       this.m_sc = Color.black;
  241.       this.m_oc = Color.lightGray;
  242.       this.m_bar_width = 14;
  243.       this.m_document_base = "";
  244.       this.cur_cursor = 0;
  245.       this.m_sbright = true;
  246.       this.m_start_file = var1;
  247.       this.m_document_base = var1.substring(0, var1.lastIndexOf(File.separator) + File.separator.length());
  248.       ((Container)this).setLayout((LayoutManager)null);
  249.    }
  250.  
  251.    public void paint(Graphics var1) {
  252.       this.paintCalled = true;
  253.       if (this.first_run) {
  254.          this.initRun();
  255.       }
  256.  
  257.       this.paintIt();
  258.    }
  259.  
  260.    public Image trackReturn(String var1) {
  261.       ocgifix var2 = new ocgifix();
  262.       Object var3 = null;
  263.       MediaTracker var4 = new MediaTracker(this);
  264.       if (!var1.equals("-1")) {
  265.          File var5 = new File(this.m_document_base + var1);
  266.          Image var7 = ((Component)this).getToolkit().getImage(var5.toString());
  267.          var4.addImage(var7, 0);
  268.  
  269.          try {
  270.             var4.waitForID(0);
  271.          } catch (InterruptedException var6) {
  272.             return null;
  273.          }
  274.  
  275.          if (var4.isErrorID(0)) {
  276.             System.out.println("Error Loading Image File:" + var1);
  277.             return null;
  278.          } else {
  279.             var7 = var2.gifix(var7, var1);
  280.             return var7;
  281.          }
  282.       } else {
  283.          return null;
  284.       }
  285.    }
  286.  
  287.    public boolean mouseUp(Event var1, int var2, int var3) {
  288.       this.mouse_held = false;
  289.       if (this.on_link) {
  290.          if (this.loading_page) {
  291.             return true;
  292.          }
  293.  
  294.          if (this.mouse_ldp < 0) {
  295.             return true;
  296.          }
  297.  
  298.          this.go_load_where = this.para_part[this.cur_mouse_para].linkData[this.mouse_ldp * 8 + 1];
  299.          this.go_url = this.para_part[this.cur_mouse_para].linkData[this.mouse_ldp * 8];
  300.          if (this.go_load_where.equals("-1")) {
  301.             this.go_load_where = "applet";
  302.          }
  303.  
  304.          this.loading_page = true;
  305.          if (this.go_load_where.equalsIgnoreCase("applet")) {
  306.             this.run_load = true;
  307.          }
  308.       }
  309.  
  310.       return true;
  311.    }
  312.  
  313.    public void paintIt() {
  314.       Graphics var1 = ((Component)this).getGraphics();
  315.       if (this.done_drawing && this.paintCalled) {
  316.          var1.drawImage(this.off, 0, this.scroll_y, this);
  317.       }
  318.  
  319.    }
  320.  
  321.    public void destroy() {
  322.       if (this.trun != null) {
  323.          this.trun.stop();
  324.          this.trun = null;
  325.       }
  326.  
  327.    }
  328.  
  329.    public void resize(Dimension var1) {
  330.       this.initRun();
  331.       super.resize(var1);
  332.    }
  333.  
  334.    public void resize(int var1, int var2) {
  335.       this.field_2 = new Dimension(var1, var2);
  336.       this.initRun();
  337.       super.resize(var1, var2);
  338.    }
  339.  
  340.    public void LoadNewPage() {
  341.       String var1 = this.m_document_base + this.go_url;
  342.       this.cur_sb_message = "Connecting to: " + this.para_part[this.mouse_pp].linkData[this.mouse_ldp * 8];
  343.       this.page_title = this.cur_sb_message;
  344.       this.last_sb = this.cur_sb_message;
  345.       this.showStatusMsg(this.cur_sb_message);
  346.       this.cur_page2 = new RHTML(var1, this.m_page_bgcolor, this.m_page_link_color, this.m_page_hl_color, this.m_textcolor);
  347.       if (!this.cur_page2.goodPage) {
  348.          this.showStatusMsg("Error Loading: " + var1);
  349.          this.cur_sb_message = this.page_title;
  350.          this.last_sb = this.cur_sb_message;
  351.       } else {
  352.          this.page_title = this.cur_page2.pageTitle;
  353.          this.cur_sb_message = "Parsing HTML...";
  354.          this.last_sb = this.cur_sb_message;
  355.          this.showStatusMsg(this.cur_sb_message);
  356.          this.page_ready = false;
  357.          this.cur_page = null;
  358.          this.cur_page = this.cur_page2;
  359.          this.para_part = null;
  360.          this.scroll_y = 0;
  361.          this.old_scrolly = 0;
  362.          this.highlight_num = -1;
  363.          this.CreateParagraphs();
  364.          this.num_para_images = 0;
  365.          this.DrawParagraph(((Component)this).getGraphics());
  366.       }
  367.  
  368.       this.loading_page = false;
  369.    }
  370.  
  371.    private void showStatusMsg(String var1) {
  372.       super.postEvent(new Event(this, 9402, var1));
  373.    }
  374.  
  375.    private void initRun() {
  376.       if (this.paintCalled) {
  377.          this.FirstRun();
  378.          this.DrawParagraph(((Component)this).getGraphics());
  379.          this.first_run = false;
  380.       }
  381.    }
  382.  
  383.    public void FirstRun() {
  384.       this.showStatusMsg("Loading: " + this.m_start_file);
  385.       this.sb_width = this.m_bar_width;
  386.       this.cur_page = new RHTML(this.m_start_file, this.m_page_bgcolor, this.m_page_link_color, this.m_page_hl_color, this.m_textcolor);
  387.       if (!this.cur_page.goodPage) {
  388.          this.showStatusMsg("Error Loading: " + this.m_start_file);
  389.       } else {
  390.          this.page_title = this.cur_page.pageTitle;
  391.          this.cur_sb_message = "Parsing HTML...";
  392.          this.last_sb = this.cur_sb_message;
  393.          this.showStatusMsg(this.cur_sb_message);
  394.          this.CreateParagraphs();
  395.       }
  396.    }
  397.  
  398.    public void CreateParagraphs() {
  399.       this.para_part = new PParse[this.cur_page.numTags];
  400.  
  401.       for(int var1 = 0; var1 < this.cur_page.numTags; ++var1) {
  402.          this.para_part[var1] = new PParse(this.cur_page.TagValues[var1], this.cur_page.pageColor, this);
  403.       }
  404.  
  405.    }
  406.  
  407.    public void start() {
  408.       if (this.first_run) {
  409.          this.trun = new Thread(this);
  410.          this.trun.start();
  411.       } else {
  412.          this.trun.resume();
  413.       }
  414.    }
  415.  
  416.    public void DrawParagraph(Graphics var1) {
  417.       int var2 = this.cur_page.pageTopMargin;
  418.       int var3 = 0;
  419.       this.para_starty = new int[this.cur_page.numTags];
  420.       this.para_endy = new int[this.cur_page.numTags];
  421.  
  422.       for(int var4 = 0; var4 < this.cur_page.numTags; ++var4) {
  423.          this.para_part[var4].SizeText(this.field_2.width - this.cur_page.pageLeftMargin * 2 - this.sb_width, this.m_font, this.m_size, this.cur_page.pageTextColor, this.cur_page.pageHLColor, this.cur_page.pageLinkColor);
  424.          this.para_part[var4].DrawText(this.cur_page.tagSettings[var4]);
  425.          this.para_starty[var4] = var2;
  426.          this.para_part[var4].paraPageStartY = var2;
  427.          var2 += this.para_part[var4].paraImgHeight;
  428.          this.para_endy[var4] = var2;
  429.          var3 = var2;
  430.          if (this.para_part[var4].numOfImages > 0) {
  431.             ++this.num_para_images;
  432.          }
  433.       }
  434.  
  435.       var3 += this.cur_page.pageTopMargin;
  436.       this.cur_page_height = var3;
  437.       if (var3 == 0) {
  438.          var3 = 1;
  439.       }
  440.  
  441.       if (var3 > this.field_2.height) {
  442.          this.page_scrollable = true;
  443.       } else {
  444.          var3 = this.field_2.height;
  445.          this.page_scrollable = false;
  446.       }
  447.  
  448.       this.i_h = var3;
  449.       this.off = ((Component)this).createImage(this.field_2.width, var3);
  450.       this.g_off = this.off.getGraphics();
  451.       this.g_off.setColor(this.cur_page.pageColor);
  452.       this.g_off.fillRect(0, 0, this.field_2.width, var3);
  453.  
  454.       for(int var10 = 0; var10 < this.cur_page.numTags; ++var10) {
  455.          this.g_off.drawImage(this.para_part[var10].img, this.cur_page.pageLeftMargin, this.para_starty[var10], this);
  456.          this.para_part[var10].img.flush();
  457.          this.para_part[var10].img = null;
  458.          if (this.cur_page.pageTransition == 0) {
  459.             var1.drawImage(this.off, 0, 0, this);
  460.          }
  461.       }
  462.  
  463.       if (this.cur_page.pageTransition > 0) {
  464.          this.cur_sb_message = "Transition Effect Running...";
  465.          this.last_sb = this.cur_sb_message;
  466.          this.showStatusMsg(this.cur_sb_message);
  467.          this.transition_running = true;
  468.          if (this.cur_page.pageTransition == 3) {
  469.             for(int var14 = -this.cur_page_height; var14 <= 0; var14 += this.m_transition_jump) {
  470.                var1.drawImage(this.off, 0, var14, this);
  471.             }
  472.          } else if (this.cur_page.pageTransition == 4) {
  473.             for(int var13 = this.field_2.width; var13 >= 0; var13 -= this.m_transition_jump) {
  474.                var1.drawImage(this.off, var13, 0, this);
  475.             }
  476.          } else if (this.cur_page.pageTransition == 5) {
  477.             for(int var12 = this.field_2.height; var12 >= 0; var12 -= this.m_transition_jump) {
  478.                var1.drawImage(this.off, 0, var12, this);
  479.             }
  480.          } else if (this.cur_page.pageTransition == 6) {
  481.             for(int var11 = -this.field_2.height; var11 <= 0; var11 += this.m_transition_jump) {
  482.                var1.drawImage(this.off, var11, 0, this);
  483.             }
  484.          } else {
  485.             var1.drawImage(this.off, 0, 0, this);
  486.          }
  487.  
  488.          var1.drawImage(this.off, 0, 0, this);
  489.          this.transition_running = false;
  490.       }
  491.  
  492.       this.page_ready = true;
  493.       if (this.use_sb) {
  494.          ((Container)this).remove(this.field_6);
  495.          this.use_sb = false;
  496.       }
  497.  
  498.       if (this.i_h > this.field_2.height) {
  499.          this.use_sb = true;
  500.          this.field_6 = new Scrollbar();
  501.          this.field_6.setBackground(Color.gray);
  502.          this.field_6.reshape(this.field_2.width - this.m_bar_width, 0, this.m_bar_width, this.field_2.height);
  503.          ((Container)this).add(this.field_6);
  504.          this.field_6.setValues(0, this.field_2.height, 0, this.i_h);
  505.       }
  506.  
  507.       this.done_drawing = true;
  508.       this.cur_sb_message = "Loading Images...";
  509.       this.showStatusMsg(this.cur_sb_message);
  510.  
  511.       for(int var15 = this.break_pload; var15 < this.cur_page.numTags; this.break_pload = var15++) {
  512.          if (this.para_part[var15].numOfImages > 0) {
  513.             this.htmlpics = new Image[this.para_part[var15].numOfImages];
  514.          }
  515.  
  516.          for(int var5 = this.break_iload; var5 < this.para_part[var15].numOfImages; this.break_iload = var5++) {
  517.             Object var6 = null;
  518.             Image var16;
  519.             if ((var16 = this.trackReturn(this.para_part[var15].imageUrls[var5])) != null) {
  520.                int var7 = this.para_part[var15].paraPageStartY + this.para_part[var15].imageMap[var5 * 4 + 1];
  521.                int var8 = this.para_part[var15].imageMap[var5 * 4];
  522.                this.g_off.drawImage(var16, var8 + this.cur_page.pageLeftMargin, var7, this);
  523.                this.paintIt();
  524.             }
  525.          }
  526.  
  527.          this.break_iload = 0;
  528.       }
  529.  
  530.       this.break_pload = 0;
  531.       if (this.page_title != null) {
  532.          this.last_sb = this.page_title;
  533.          this.cur_sb_message = this.page_title;
  534.          this.showStatusMsg(this.page_title);
  535.       }
  536.  
  537.    }
  538.  
  539.    public boolean mouseDown(Event var1, int var2, int var3) {
  540.       this.hold_move = this.field_4;
  541.       this.mouse_held = true;
  542.       return true;
  543.    }
  544.  
  545.    private void CheckUH() {
  546.       if (this.highlight_num != -1) {
  547.          this.HighlightText(this.highlight_para_num, this.highlight_num, false);
  548.          this.highlight_num = -1;
  549.       }
  550.  
  551.    }
  552.  
  553.    private void CheckUHpopup() {
  554.       if (this.pic_highlight_num != -1) {
  555.          ((Component)this).getGraphics().drawImage(this.off, 0, this.scroll_y, this);
  556.          this.pic_highlight_num = -1;
  557.       }
  558.  
  559.    }
  560.  
  561.    public void run() {
  562.       while(true) {
  563.          if (this.run_load) {
  564.             this.LoadNewPage();
  565.             this.run_load = false;
  566.          }
  567.  
  568.          try {
  569.             Thread.sleep(300L);
  570.          } catch (InterruptedException var1) {
  571.          }
  572.       }
  573.    }
  574.  
  575.    public boolean handleEvent(Event var1) {
  576.       boolean var2 = false;
  577.       if (this.transition_running) {
  578.          return true;
  579.       } else if (var1.target != this.field_6) {
  580.          return super.handleEvent(var1);
  581.       } else {
  582.          if (var1.id != 602 && var1.id != 601 && var1.id != 605) {
  583.             if (var1.id == 604 || var1.id == 603) {
  584.                this.scroll_y = -this.field_6.getValue();
  585.                var2 = true;
  586.             }
  587.          } else {
  588.             this.scroll_y = -this.field_6.getValue();
  589.             var2 = true;
  590.          }
  591.  
  592.          if (var2) {
  593.             if (this.m_smooth_scrolling) {
  594.                for(int var3 = 0; var3 < Math.abs(this.old_scrolly - this.scroll_y); var3 += this.m_smooth_scrolling_jump) {
  595.                   if (this.scroll_y > this.old_scrolly) {
  596.                      ((Component)this).getGraphics().drawImage(this.off, 0, this.old_scrolly + var3, this);
  597.                   } else if (this.old_scrolly - var3 >= -this.i_h + this.field_2.height) {
  598.                      ((Component)this).getGraphics().drawImage(this.off, 0, this.old_scrolly - var3, this);
  599.                   }
  600.                }
  601.             }
  602.  
  603.             if (this.scroll_y >= 0) {
  604.                this.scroll_y = 0;
  605.             } else if (this.scroll_y + this.i_h < this.field_2.height) {
  606.                this.scroll_y = -(this.i_h - this.field_2.height) + this.field_2.height;
  607.             }
  608.  
  609.             ((Component)this).getGraphics().drawImage(this.off, 0, this.scroll_y, this);
  610.             var2 = false;
  611.          }
  612.  
  613.          this.old_scrolly = this.scroll_y;
  614.          return true;
  615.       }
  616.    }
  617.  
  618.    public void CreatePopUp(int var1, int var2, String var3) {
  619.       if (!this.loading_page) {
  620.          this.f_popup = new Font("Helvetica", 0, this.m_pu_size);
  621.          this.fm_popup = ((Component)this).getFontMetrics(this.f_popup);
  622.          this.popup_x = var1 + 12;
  623.          this.popup_y = var2 + 16;
  624.          this.popup_width = this.fm_popup.stringWidth(var3) + 6;
  625.          this.popup_height = this.fm_popup.getHeight() + 2;
  626.          if (this.popup_x + this.popup_width > this.field_2.width - this.sb_width) {
  627.             this.popup_x = var1 - this.popup_width;
  628.          }
  629.  
  630.          if (this.popup_y + this.popup_height > this.field_2.height) {
  631.             this.popup_y = var2 - (this.popup_height + 3);
  632.          }
  633.  
  634.          this.field_0 = ((Component)this).createImage(this.popup_width, this.popup_height);
  635.          this.g_pu = this.field_0.getGraphics();
  636.          this.g_pu.setFont(this.f_popup);
  637.          this.g_pu.setColor(this.m_pu_color);
  638.          this.g_pu.fillRect(0, 0, this.popup_width, this.popup_height);
  639.          this.g_pu.setColor(this.m_pu_outline_color);
  640.          this.g_pu.drawRect(0, 0, this.popup_width - 1, this.popup_height - 1);
  641.          this.g_pu.setColor(this.m_pu_text_color);
  642.          this.g_pu.drawString(var3, 3, this.fm_popup.getAscent() + 1);
  643.          ((Component)this).getGraphics().drawImage(this.field_0, this.popup_x, this.popup_y, this);
  644.       }
  645.    }
  646.  
  647.    public void HighlightText(int var1, int var2, boolean var3) {
  648.       int var4 = Integer.parseInt(this.para_part[var1].linkData[var2 * 8 + 5]);
  649.       int var5 = Integer.parseInt(this.para_part[var1].linkData[var2 * 8 + 6]);
  650.       Integer.parseInt(this.para_part[var1].linkData[var2 * 8 + 7]);
  651.       if (var4 > 0) {
  652.          int var8 = 0;
  653.  
  654.          for(int var9 = 0; var9 < var4; ++var9) {
  655.             int var10 = var9 + var5;
  656.             int var11 = var10 * 9;
  657.             int var12 = var10 * 6;
  658.             var8 = 0;
  659.             if (this.cur_page.tagSettings[var1] == 1) {
  660.                var8 = (this.para_part[var1].paraImgWidth - this.para_part[var1].line_table[this.para_part[var1].paraFormat[var11 + 8] * 6]) / 2;
  661.             }
  662.  
  663.             if (this.cur_page.tagSettings[var1] == 2) {
  664.                var8 = this.para_part[var1].paraImgWidth - this.para_part[var1].line_table[this.para_part[var1].paraFormat[var11 + 8] * 6];
  665.             }
  666.  
  667.             int var13 = HTMLFont.getSize(this.para_part[var1].paraFormat[var11 + 2]);
  668.             Font var6 = new Font(HTMLFont.GetFontName(this.para_part[var1].paraFormat[var11]), this.para_part[var1].paraFormat[var11 + 1], var13);
  669.             FontMetrics var7 = ((Component)this).getFontMetrics(var6);
  670.             if (var3) {
  671.                this.g_off.setColor(new Color(Integer.parseInt(this.para_part[var1].linkData[var2 * 8 + 3])));
  672.             } else {
  673.                this.g_off.setColor(new Color(Integer.parseInt(this.para_part[var1].linkData[var2 * 8 + 4])));
  674.             }
  675.  
  676.             this.g_off.setFont(var6);
  677.             int var14 = this.para_part[var1].paraFormat[var11 + 7] + var8;
  678.             int var15 = this.para_part[var1].paraPageStartY + this.para_part[var1].line_table[this.para_part[var1].paraFormat[var11 + 8] * 6 + 2];
  679.             int var16 = var7.stringWidth(this.para_part[var1].paraData[var12]);
  680.             this.g_off.drawString(this.para_part[var1].paraData[var12], var14 + this.cur_page.pageLeftMargin, var15);
  681.             if (this.m_highlight_underlines && this.para_part[var1].paraFormat[var11 + 4] == 1) {
  682.                this.g_off.drawLine(var14 + this.cur_page.pageLeftMargin, var15 + 2, var14 + this.cur_page.pageLeftMargin + var16, var15 + 2);
  683.             }
  684.          }
  685.  
  686.          ((Component)this).getGraphics().drawImage(this.off, 0, this.scroll_y, this);
  687.       }
  688.  
  689.    }
  690.  
  691.    public void reshape(int var1, int var2, int var3, int var4) {
  692.       this.field_2 = new Dimension(var3, var4);
  693.       this.initRun();
  694.       super.reshape(var1, var2, var3, var4);
  695.    }
  696. }
  697.